Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.WinForms
annotate FrmArmyTree.cs @ 253:7243e6646926 default tip
Re #427: Resizable equipment dialog
* Make equipment dialog resizable
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 27 Apr 2013 16:10:08 +0100 |
parents | d0454aae0241 |
children |
rev | line source |
---|---|
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
1 using System; |
190 | 2 using System.Collections.Generic; |
3 using System.ComponentModel; | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
4 using System.Data; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
5 using System.Drawing; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
6 using System.Text; |
190 | 7 using System.Windows.Forms; |
8 using IBBoard.Commands; | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
9 using IBBoard.WarFoundry.API.Objects; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
10 using IBBoard.WarFoundry.API; |
190 | 11 using IBBoard.Lang; |
12 using IBBoard.Windows.Forms.I18N; | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
13 using IBBoard.WarFoundry.API.Commands; |
190 | 14 using IBBoard.Windows.Forms; |
15 | |
16 namespace IBBoard.WarFoundry.GUI.WinForms | |
17 { | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
18 public partial class FrmArmyTree : IBBoard.Windows.Forms.IBBForm |
190 | 19 { |
20 private Dictionary<string, TreeNode> nodes; | |
21 private ObjectAddDelegate UnitAddedMethod; | |
22 private ObjectRemoveDelegate UnitRemovedMethod; | |
23 private StringValChangedDelegate UnitNameChangedMethod, ArmyNameChangedMethod, TreeNameChangedMethod; | |
24 private CommandStack commandStack; | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
25 public GameSystem CurrentGameSystem |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
26 { |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
27 get { return WarFoundryCore.CurrentGameSystem; } |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
28 set { WarFoundryCore.CurrentGameSystem = value; } |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
29 } |
190 | 30 |
31 public FrmArmyTree(CommandStack cmdStack) | |
32 { | |
33 commandStack = cmdStack; | |
34 InitializeComponent(); | |
35 UnitAddedMethod = new ObjectAddDelegate(UnitAdded); | |
36 UnitRemovedMethod = new ObjectRemoveDelegate(UnitRemoved); | |
37 UnitNameChangedMethod = new StringValChangedDelegate(UpdateUnitName); | |
38 ArmyNameChangedMethod = new StringValChangedDelegate(UpdateArmyName); | |
39 TreeNameChangedMethod = new StringValChangedDelegate(FrmArmyTree_TreeNameChanged); | |
40 nodes = new Dictionary<string, TreeNode>(); | |
226
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
41 this.Name = "ArmyTree"; |
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
42 miDeleteUnit.Name = "miDeleteUnit"; |
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
43 miEditUnit.Name = "miEditUnit"; |
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
44 miEditArmy.Name = "miEditArmy"; |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
45 WarFoundryCore.ArmyChanged += new ArmyChangedDelegate(FrmArmyTree_ArmyChanged); |
190 | 46 TranslateForm(); |
47 Translation.TranslationChanged += new MethodInvoker(TranslateForm); | |
48 } | |
49 | |
50 private void TranslateForm() | |
51 { | |
52 ControlTranslator.TranslateControl(this); | |
53 | |
54 foreach (Component comp in components.Components) | |
55 { | |
56 ControlTranslator.TranslateComponent(comp); | |
57 } | |
58 | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
59 foreach (IBBToolStripMenuItem mi in contextMenuStrip.Items) |
190 | 60 { |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
61 ControlTranslator.TranslateComponent(mi); |
190 | 62 } |
226
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
63 |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
64 foreach (TreeNode node in nodes.Values) |
190 | 65 { |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
66 node.Text = CreateNodeName((ICostedWarFoundryObject)node.Tag); |
190 | 67 } |
68 } | |
69 private void ClearArmy() | |
70 { | |
71 nodes.Clear(); | |
72 treeView.Nodes.Clear(); | |
73 } | |
74 | |
75 private void SetArmy(Army army) | |
76 { | |
77 ClearArmy(); | |
78 | |
79 if (army != null) | |
80 { | |
81 ArmyCategory[] cats = army.Categories; | |
82 TreeNode[] catNodes = new TreeNode[cats.Length]; | |
83 | |
84 for (int i = 0; i < cats.Length; i++) | |
85 { | |
86 ArmyCategory cat = cats[i]; | |
87 cat.NameChanged += TreeNameChangedMethod; | |
88 cat.PointsValueChanged += NodePointsValueChanged; | |
245
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
89 TreeNode[] unitNodes = CreateChildNodes(army.GetMainUnits(cat)); |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
90 TreeNode temp = new TreeNode(CreateNodeName(cat), unitNodes); |
190 | 91 temp.Tag = cat; |
92 catNodes[i] = temp; | |
93 nodes[cat.ID] = temp; | |
94 } | |
95 | |
96 TreeNode root = new TreeNode(CreateNodeName(army), catNodes); | |
97 root.Tag = army; | |
98 army.PointsValueChanged += NodePointsValueChanged; | |
99 nodes[army.ID] = root; | |
100 treeView.Nodes.Add(root); | |
101 root.ExpandAll(); | |
102 } | |
103 } | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
104 |
190 | 105 private string CreateNodeName(ICostedWarFoundryObject obj) |
106 { | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
107 return Translation.GetTranslation("treeNodeText", "{0} ({1} pts)", obj.Name, obj.Points, CurrentGameSystem.GetPointsAbbrev(obj.Points)); |
190 | 108 } |
109 | |
110 private void NodePointsValueChanged(WarFoundryObject obj, double oldValue, double newValue) | |
111 { | |
112 if (obj is ICostedWarFoundryObject) | |
113 { | |
114 SetNodeName(obj); | |
115 } | |
116 } | |
117 | |
118 private void SetNodeName(WarFoundryObject obj) | |
119 { | |
120 TreeNode node = nodes[obj.ID]; | |
121 | |
122 if (node != null) | |
123 { | |
124 node.Text = CreateNodeName((ICostedWarFoundryObject)obj); | |
125 } | |
126 } | |
127 | |
128 private TreeNode CreateTreeNode(Unit unit) | |
129 { | |
245
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
130 TreeNode[] unitNodes = CreateChildNodes(unit.ContainedUnits); |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
131 TreeNode temp = new TreeNode(CreateNodeName(unit), unitNodes); |
190 | 132 temp.Tag = unit; |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
133 unit.NameChanged += UnitNameChangedMethod; |
190 | 134 unit.PointsValueChanged += NodePointsValueChanged; |
135 nodes[unit.ID] = temp; | |
136 return temp; | |
137 } | |
138 | |
245
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
139 private TreeNode[] CreateChildNodes(Unit[] containedUnits) |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
140 { |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
141 TreeNode[] unitNodes; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
142 |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
143 if (containedUnits.Length > 0) |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
144 { |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
145 unitNodes = new TreeNode[containedUnits.Length]; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
146 |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
147 for (int j = 0; j < containedUnits.Length; j++) |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
148 { |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
149 unitNodes[j] = CreateTreeNode(containedUnits[j]); |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
150 } |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
151 } |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
152 else |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
153 { |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
154 unitNodes = new TreeNode[0]; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
155 } |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
156 |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
157 return unitNodes; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
158 } |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
159 |
190 | 160 public void FrmArmyTree_ArmyChanged(Army oldArmy, Army newArmy) |
161 { | |
162 if (oldArmy != null) | |
163 { | |
226
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
164 oldArmy.NameChanged -= ArmyNameChangedMethod; |
190 | 165 oldArmy.UnitAdded -= UnitAddedMethod; |
166 oldArmy.UnitRemoved -= UnitRemovedMethod; | |
167 oldArmy.PointsValueChanged -= NodePointsValueChanged; | |
168 } | |
169 | |
170 if (newArmy != null) | |
171 { | |
226
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
172 newArmy.NameChanged += ArmyNameChangedMethod; |
190 | 173 newArmy.UnitAdded += UnitAddedMethod; |
174 newArmy.UnitRemoved += UnitRemovedMethod; | |
175 newArmy.PointsValueChanged += NodePointsValueChanged; | |
176 } | |
177 | |
178 SetArmy(newArmy); | |
179 } | |
180 | |
181 private void UnitAdded(WarFoundryObject obj) | |
182 { | |
183 if (obj is Unit) | |
184 { | |
185 Unit unit = (Unit)obj; | |
245
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
186 TreeNode parent; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
187 |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
188 if (unit.ParentUnit == null) |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
189 { |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
190 ArmyCategory cat = unit.Category; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
191 parent = nodes[cat.ID]; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
192 } |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
193 else |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
194 { |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
195 parent = nodes[unit.ParentUnit.ID]; |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
196 } |
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
197 |
190 | 198 TreeNode unitNode = CreateTreeNode(unit); |
199 parent.Nodes.Add(unitNode); | |
200 parent.Expand(); //make sure it's expanded | |
201 } | |
202 } | |
203 | |
204 public new FrmMain MdiParent | |
205 { | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
206 get { return (FrmMain)base.MdiParent; } |
190 | 207 set { base.MdiParent = value; } |
208 } | |
209 | |
210 private void UnitRemoved(WarFoundryObject obj) | |
211 { | |
212 if (obj is Unit) | |
213 { | |
214 Unit unit = (Unit)obj; | |
215 RemoveUnitFromTree(unit); | |
216 } | |
217 } | |
218 | |
219 private void RemoveUnitFromTree(Unit unit) | |
220 { | |
221 TreeNode unitNode = nodes[unit.ID]; | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
222 unit.NameChanged -= UnitNameChangedMethod; |
190 | 223 |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
224 if (unitNode != null) |
190 | 225 { |
226 unitNode.Remove(); | |
227 nodes.Remove(unit.ID); | |
228 } | |
229 } | |
230 | |
231 private void treeView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) | |
232 { | |
233 if (e.Button == MouseButtons.Right) | |
234 { | |
235 TreeNode tn = treeView.GetNodeAt(e.X, e.Y); | |
236 | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
237 if (tn != null) |
190 | 238 { |
239 treeView.SelectedNode = tn; | |
240 } | |
241 else | |
242 { | |
243 treeView.SelectedNode = null; | |
244 } | |
245 } | |
246 } | |
247 | |
248 private void miDelete_Click(object sender, System.EventArgs e) | |
249 { | |
250 DeleteUnit(); | |
251 } | |
252 | |
253 private void DeleteUnit() | |
254 { | |
255 | |
256 TreeNode selected = treeView.SelectedNode; | |
257 | |
258 if (selected.Tag != null && selected.Tag is Unit) | |
259 { | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
260 Unit unit = (Unit)selected.Tag; |
190 | 261 commandStack.Execute(new RemoveUnitCommand(unit)); |
262 } | |
263 } | |
264 | |
265 private void miEdit_Click(object sender, System.EventArgs e) | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
266 { |
225
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
267 EditTreeItem(); |
190 | 268 } |
269 | |
270 private void treeView_DoubleClick(object sender, System.EventArgs e) | |
271 { | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
272 EditTreeItem(); |
190 | 273 } |
274 | |
225
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
275 private void EditTreeItem() |
190 | 276 { |
277 TreeNode selected = treeView.SelectedNode; | |
278 object tagData = selected.Tag; | |
279 | |
280 if (tagData is Unit) | |
281 { | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
282 Unit unit = (Unit)tagData; |
190 | 283 MdiParent.OpenUnitDialog(unit); |
284 } | |
225
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
285 else if (tagData is Army) |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
286 { |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
287 EditArmy((Army)tagData); |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
288 } |
239
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
289 else if (tagData is ArmyCategory) |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
290 { |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
291 AddUnitFromCategory((ArmyCategory)tagData); |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
292 } |
190 | 293 } |
239
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
294 |
190 | 295 private void UpdateUnitName(WarFoundryObject obj, string oldValue, string newValue) |
296 { | |
297 if (obj is ICostedWarFoundryObject) | |
298 { | |
299 SetNodeName(obj); | |
300 } | |
301 } | |
302 | |
303 private void UpdateArmyName(WarFoundryObject obj, string oldValue, string newValue) | |
304 { | |
305 if (obj is Army) | |
306 { | |
226
4ada3252d1ea
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
225
diff
changeset
|
307 SetNodeName((Army)obj); |
190 | 308 } |
309 } | |
310 | |
311 private void FrmArmyTree_TreeNameChanged(WarFoundryObject obj, string oldValue, string newValue) | |
312 { | |
313 TreeNode node = nodes[obj.ID]; | |
314 | |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
315 if (node != null) |
190 | 316 { |
317 node.Text = obj.Name; | |
318 } | |
319 } | |
320 | |
321 private void treeView_AfterSelect(object sender, TreeViewEventArgs e) | |
322 { | |
323 TreeNode node = treeView.SelectedNode; | |
244
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
324 Object tag = (node != null) ? node.Tag : null; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
325 bool tagIsUnit = (tag is Unit); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
326 bool tagIsUnitWithContained; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
327 |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
328 if (tagIsUnit) |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
329 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
330 tagIsUnitWithContained = ((Unit)tag).UnitType.ContainedUnitTypes.Length > 0; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
331 } |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
332 else |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
333 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
334 tagIsUnitWithContained = false; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
335 } |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
336 |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
337 bool tagIsArmy = (tag is Army); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
338 bool tagIsCategory = (tag is ArmyCategory); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
339 bttnAdd.Enabled = tagIsCategory || tagIsUnitWithContained; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
340 bttnDelete.Enabled = tagIsUnit; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
341 bttnEdit.Enabled = tagIsArmy || tagIsUnit; |
225
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
342 } |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
343 |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
344 private void miEditArmy_Click(object sender, EventArgs e) |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
345 { |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
346 Army army = treeView.SelectedNode.Tag as Army; |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
347 EditArmy(army); |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
348 } |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
349 |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
350 private void EditArmy(Army army) |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
351 { |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
352 FrmEditArmy editForm = new FrmEditArmy(commandStack, army); |
5233147ca7e4
Re #101: Make army names and sizes modifiable after creation
IBBoard <dev@ibboard.co.uk>
parents:
198
diff
changeset
|
353 editForm.ShowDialog(this.ParentForm); |
190 | 354 } |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
355 |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
356 private void bttnEdit_Click(object sender, EventArgs e) |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
357 { |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
358 EditTreeItem(); |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
359 } |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
360 |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
361 private void bttnDelete_Click(object sender, EventArgs e) |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
362 { |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
363 DeleteUnit(); |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
364 } |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
365 |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
366 private void contextMenuStrip_Opening(object sender, CancelEventArgs e) |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
367 { |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
368 TreeNode node = treeView.SelectedNode; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
369 Object tag = (node != null) ? node.Tag : null; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
370 bool tagIsUnit = (tag is Unit); |
244
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
371 bool tagIsUnitWithContained; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
372 |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
373 if (tagIsUnit) |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
374 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
375 tagIsUnitWithContained = ((Unit)tag).UnitType.ContainedUnitTypes.Length > 0; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
376 } |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
377 else |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
378 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
379 tagIsUnitWithContained = false; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
380 } |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
381 |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
382 bool tagIsArmy = (tag is Army); |
239
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
383 bool tagIsCategory = (tag is ArmyCategory); |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
384 |
239
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
385 if (!tagIsUnit && !tagIsArmy && !tagIsCategory) |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
386 { |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
387 e.Cancel = true; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
388 } |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
389 else |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
390 { |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
391 miDeleteUnit.Visible = tagIsUnit; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
392 miEditUnit.Visible = tagIsUnit; |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
393 miEditArmy.Visible = tagIsArmy; |
244
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
394 miAddUnit.Visible = tagIsCategory || tagIsUnitWithContained; |
234
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
395 } |
870877498db9
Re #382: WinForms builds from Linux/Mono fail on Windows/.Net
IBBoard <dev@ibboard.co.uk>
parents:
226
diff
changeset
|
396 } |
239
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
397 |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
398 private void miAddUnit_Click(object sender, EventArgs e) |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
399 { |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
400 AddUnit(); |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
401 } |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
402 |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
403 private void AddUnit() |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
404 { |
244
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
405 object tag = treeView.SelectedNode.Tag; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
406 |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
407 if (tag is Unit) |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
408 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
409 Unit unit = (Unit)tag; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
410 UnitType[] unitTypes = unit.UnitType.ContainedUnitTypes; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
411 FrmNewUnit newUnitFrm = new FrmNewUnit(WarFoundryCore.CurrentArmy, unitTypes); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
412 DialogResult dr = newUnitFrm.ShowDialog(this); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
413 |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
414 if (dr == DialogResult.OK) |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
415 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
416 UnitType newUnit = newUnitFrm.SelectedUnit; |
245
d0454aae0241
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
244
diff
changeset
|
417 CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnitFrm.SelectedUnit, WarFoundryCore.CurrentArmy.GetCategory(newUnit.MainCategory), unit); |
244
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
418 commandStack.Execute(cmd); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
419 MdiParent.OpenUnitDialog(cmd.Unit); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
420 } |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
421 } |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
422 else |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
423 { |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
424 ArmyCategory tagData = tag as ArmyCategory; |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
425 AddUnitFromCategory(tagData); |
2c3474d652e1
Re #360: Add WinForms UI for adding contained units
IBBoard <dev@ibboard.co.uk>
parents:
239
diff
changeset
|
426 } |
239
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
427 } |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
428 |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
429 private void AddUnitFromCategory(ArmyCategory tagData) |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
430 { |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
431 MdiParent.AddUnitFromCategory(tagData.Category); |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
432 } |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
433 |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
434 private void bttnAdd_Click(object sender, EventArgs e) |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
435 { |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
436 AddUnit(); |
c06d0865ff27
Fixes #388: Add "Add unit" options to army tree
IBBoard <dev@ibboard.co.uk>
parents:
234
diff
changeset
|
437 } |
190 | 438 } |
439 } |