Mercurial > repos > IBBoard.WarFoundry.GUI.GTK
annotate FrmNewArmy.cs @ 84:9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
* Beat GTK into submission and get its hideous API to select a single item if there is only one item
Re #308: Make GTK# UI translatable
* Add more translations to "New Army" form
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Wed, 29 Dec 2010 16:32:15 +0000 |
parents | 68804784bf6f |
children | bfb29a60b802 |
rev | line source |
---|---|
19 | 1 // This file (FrmNewArmy.cs) is a part of the IBBoard.WarFoundry.GTK project and is copyright 2008, 2009 IBBoard. |
0 | 2 // |
19 | 3 // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. |
0 | 4 |
5 using System; | |
6 using Gtk; | |
7 using IBBoard.Lang; | |
8 using IBBoard.WarFoundry.API; | |
9 using IBBoard.WarFoundry.API.Objects; | |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
10 using IBBoard.GtkSharp; |
0 | 11 using log4net; |
52
4bad8cb3f889
Re #60: Add UI to add/remove/edit weapons in GTK
IBBoard <dev@ibboard.co.uk>
parents:
36
diff
changeset
|
12 using IBBoard.WarFoundry.GUI.GTK.Util; |
76
7055b24cfc79
Re #308: Make GTK# UI translatable
IBBoard <dev@ibboard.co.uk>
parents:
75
diff
changeset
|
13 using IBBoard.GtkSharp.Translatable; |
0 | 14 |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
15 namespace IBBoard.WarFoundry.GUI.GTK |
0 | 16 { |
76
7055b24cfc79
Re #308: Make GTK# UI translatable
IBBoard <dev@ibboard.co.uk>
parents:
75
diff
changeset
|
17 public partial class FrmNewArmy : TranslatableDialog, ITranslatable |
0 | 18 { |
19 private ILog logger = LogManager.GetLogger(typeof(FrmNewArmy)); | |
20 private Race race; | |
21 private string armyName; | |
22 private int pointsValue; | |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
23 |
0 | 24 public FrmNewArmy(GameSystem gameSystem) |
25 { | |
26 this.Build(); | |
27 | |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
28 GameSystem[] gameSystems = WarFoundryLoader.GetDefault().GetGameSystems(); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
29 ComboBoxUtils.FillCombo(systemCombo, gameSystems, delegate(GameSystem sys){return sys.Name;}); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
30 |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
31 lstRaces.Selection.Changed += new EventHandler(OnSelectionChanged); |
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
32 |
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
33 TreeViewColumn raceColumn = new TreeViewColumn(); |
84
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
34 raceColumn.Title = Translation.GetTranslation("frmNewArmyRaceColumn", "race"); |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
35 CellRendererText raceCell = new CellRendererText(); |
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
36 raceColumn.PackStart(raceCell, true); |
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
37 lstRaces.AppendColumn(raceColumn); |
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
38 raceColumn.SetCellDataFunc(raceCell, GtkWarFoundryUtil.RenderWarFoundryObjectName); |
84
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
39 ControlTranslator.TranslateWidget(this); |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
40 |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
41 if (gameSystem != null) |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
42 { |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
43 ComboBoxUtils.SelectItem(systemCombo, gameSystem); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
44 } |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
45 else if (gameSystems.Length == 1) |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
46 { |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
47 ComboBoxUtils.SelectIndex(systemCombo, 0); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
48 } |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
49 } |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
50 |
0 | 51 protected virtual void OnSelectionChanged(object o, EventArgs e) |
52 { | |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
53 logger.Debug("Race selection changed"); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
54 SetOkayButtonState(); |
0 | 55 } |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
56 |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
57 private void SetOkayButtonState() |
0 | 58 { |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
59 bttnCreate.Sensitive = (lstRaces.Selection.CountSelectedRows() == 1 && txtArmyName.Text != "" && sbPointsValue.Value > 0); |
0 | 60 } |
61 | |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
62 protected virtual void OnCreateClicked(object sender, System.EventArgs e) |
0 | 63 { |
64 TreeModel model; | |
65 TreeIter iter; | |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
66 lstRaces.Selection.GetSelected(out model, out iter); |
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
67 race = (Race)model.GetValue(iter, 0); |
0 | 68 armyName = txtArmyName.Text; |
69 pointsValue = (int)sbPointsValue.Value; | |
70 Respond(ResponseType.Ok); | |
71 } | |
72 | |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
73 protected virtual void OnCancelClicked(object sender, System.EventArgs e) |
0 | 74 { |
75 Respond(ResponseType.Cancel); | |
76 } | |
77 | |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
78 protected virtual void OnTextChanged(object sender, System.EventArgs e) |
0 | 79 { |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
80 SetOkayButtonState(); |
0 | 81 } |
82 | |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
83 protected virtual void OnSpinChangeValue(object o, Gtk.ChangeValueArgs args) |
0 | 84 { |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
85 SetOkayButtonState(); |
0 | 86 } |
87 | |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
88 protected virtual void OnSpinValueChanged(object sender, System.EventArgs e) |
0 | 89 { |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
90 SetOkayButtonState(); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
91 } |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
92 |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
93 protected virtual void OnSystemComboChanged(object sender, System.EventArgs e) |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
94 { |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
95 GameSystem system = ComboBoxUtils.GetSelectedItem<GameSystem>(systemCombo); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
96 SetRaces(system); |
84
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
97 ListStore model = (ListStore)lstRaces.Model; |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
98 |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
99 if (model.IterNChildren() == 1) |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
100 { |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
101 TreeIter iter; |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
102 model.GetIterFirst(out iter); |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
103 lstRaces.Selection.SelectIter(iter); |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
104 } |
9db2112b31d7
Fixes #333: GTK interface doesn't auto-select race if only one exists
IBBoard <dev@ibboard.co.uk>
parents:
77
diff
changeset
|
105 |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
106 logger.Debug("System selection changed: " + (system == null ? "null" : system.Name)); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
107 SetOkayButtonState(); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
108 } |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
109 |
36
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
110 private void SetRaces(GameSystem system) |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
111 { |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
112 ListStore store = new ListStore(typeof(Race)); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
113 |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
114 if (system != null) |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
115 { |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
116 foreach (Race race in WarFoundryLoader.GetDefault().GetRaces(system)) |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
117 { |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
118 store.AppendValues(race); |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
119 } |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
120 } |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
121 |
d68992a831df
Fixes #182: Make GTK# more like WinForms UI
IBBoard <dev@ibboard.co.uk>
parents:
19
diff
changeset
|
122 lstRaces.Model = store; |
0 | 123 } |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
124 |
0 | 125 public Race SelectedRace |
126 { | |
127 get { return race; } | |
128 } | |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
129 |
0 | 130 public string ArmyName |
131 { | |
132 get { return armyName; } | |
133 } | |
77
68804784bf6f
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
76
diff
changeset
|
134 |
75
2ceae5d685d8
Re #86: Complete initial GTK# UI
IBBoard <dev@ibboard.co.uk>
parents:
52
diff
changeset
|
135 public int ArmySize |
0 | 136 { |
137 get { return pointsValue; } | |
138 } | |
139 } | |
140 } |