Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.WinForms
annotate FrmArmyTree.cs @ 2:74df258710fe
Fixes #8 - Update SWF version of WarFoundry
* Add translations file and copy on build
* Add names to controls in FrmMain
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 27 Dec 2008 19:20:26 +0000 |
parents | 42cf06b8f897 |
children | 8935971e307c |
rev | line source |
---|---|
0 | 1 using System; |
2 using System.Drawing; | |
3 using System.Collections; | |
4 using System.ComponentModel; | |
5 using System.Windows.Forms; | |
6 using IBBoard.Commands; | |
7 using IBBoard.WarFoundry.API; | |
8 using IBBoard.WarFoundry.API.Commands; | |
9 using IBBoard.Windows.Forms; | |
1
42cf06b8f897
Re #8 - Get a working Windows WarFoundry
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
10 using IBBoard.WarFoundry.API.Objects; |
0 | 11 |
12 namespace IBBoard.WarFoundry | |
13 { | |
14 /// <summary> | |
15 /// Summary description for FrmArmyTree. | |
16 /// </summary> | |
17 public class FrmArmyTree : IBBoard.Windows.Forms.IBBForm | |
18 { | |
19 private System.Windows.Forms.TreeView treeView; | |
20 /// <summary> | |
21 /// Required designer variable. | |
22 /// </summary> | |
23 private System.ComponentModel.Container components = null; | |
24 private Hashtable htNodes; | |
25 private System.Windows.Forms.ContextMenu contextMenu; | |
26 private System.Windows.Forms.MenuItem miDelete; | |
27 private System.Windows.Forms.MenuItem miEdit; | |
28 private Hashtable htUnitWindows; | |
29 | |
30 private ObjectAddDelegate UnitAddedMethod; | |
31 private ObjectRemoveDelegate UnitRemovedMethod; | |
32 private StringValChangedDelegate UnitNameChangedMethod, ArmyNameChangedMethod, TreeNameChangedMethod; | |
33 private CommandStack commandStack; | |
34 | |
35 public FrmArmyTree(CommandStack cmdStack) | |
36 { | |
37 commandStack = cmdStack; | |
38 InitializeComponent(); | |
39 UnitAddedMethod = new ObjectAddDelegate(AddUnit); | |
40 UnitRemovedMethod = new ObjectRemoveDelegate(RemoveUnit); | |
41 UnitNameChangedMethod = new StringValChangedDelegate(UpdateUnitName); | |
42 ArmyNameChangedMethod = new StringValChangedDelegate(UpdateArmyName); | |
43 TreeNameChangedMethod = new StringValChangedDelegate(FrmArmyTree_TreeNameChanged); | |
44 htNodes = new Hashtable(); | |
45 htUnitWindows = new Hashtable(); | |
46 this.Name = "ArmyTree"; | |
47 WarFoundryCore.ArmyChanged+= new ArmyChangedDelegate(FrmArmyTree_ArmyChanged); | |
48 } | |
49 | |
50 public FrmArmyTree(Army army, CommandStack cmdStack) : this(cmdStack) | |
51 { | |
52 SetArmy(army); | |
53 } | |
54 | |
55 /// <summary> | |
56 /// Clean up any resources being used. | |
57 /// </summary> | |
58 protected override void Dispose( bool disposing ) | |
59 { | |
60 if( disposing ) | |
61 { | |
62 if(components != null) | |
63 { | |
64 components.Dispose(); | |
65 } | |
66 } | |
67 base.Dispose( disposing ); | |
68 } | |
69 | |
70 #region Windows Form Designer generated code | |
71 /// <summary> | |
72 /// Required method for Designer support - do not modify | |
73 /// the contents of this method with the code editor. | |
74 /// </summary> | |
75 private void InitializeComponent() | |
76 { | |
77 this.treeView = new System.Windows.Forms.TreeView(); | |
78 this.contextMenu = new System.Windows.Forms.ContextMenu(); | |
79 this.miEdit = new System.Windows.Forms.MenuItem(); | |
80 this.miDelete = new System.Windows.Forms.MenuItem(); | |
81 this.SuspendLayout(); | |
82 // | |
83 // treeView | |
84 // | |
85 this.treeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | |
86 | System.Windows.Forms.AnchorStyles.Left) | |
87 | System.Windows.Forms.AnchorStyles.Right))); | |
88 this.treeView.ContextMenu = this.contextMenu; | |
89 this.treeView.FullRowSelect = true; | |
90 this.treeView.ImageIndex = -1; | |
91 this.treeView.Location = new System.Drawing.Point(0, 0); | |
92 this.treeView.Name = "treeView"; | |
93 this.treeView.SelectedImageIndex = -1; | |
94 this.treeView.Size = new System.Drawing.Size(240, 278); | |
95 this.treeView.TabIndex = 0; | |
96 this.treeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseDown); | |
97 this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick); | |
98 // | |
99 // contextMenu | |
100 // | |
101 this.contextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { | |
102 this.miEdit, | |
103 this.miDelete}); | |
104 this.contextMenu.Popup += new System.EventHandler(this.contextMenu_Popup); | |
105 // | |
106 // miEdit | |
107 // | |
108 this.miEdit.Index = 0; | |
109 this.miEdit.Text = "&Edit unit"; | |
110 this.miEdit.Click += new System.EventHandler(this.miEdit_Click); | |
111 // | |
112 // miDelete | |
113 // | |
114 this.miDelete.Index = 1; | |
115 this.miDelete.Text = "&Delete unit"; | |
116 this.miDelete.Click += new System.EventHandler(this.miDelete_Click); | |
117 // | |
118 // FrmArmyTree | |
119 // | |
120 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); | |
121 this.ClientSize = new System.Drawing.Size(240, 277); | |
122 this.ControlBox = false; | |
123 this.Controls.Add(this.treeView); | |
124 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; | |
125 this.MaximizeBox = false; | |
126 this.MinimizeBox = false; | |
127 this.Name = "FrmArmyTree"; | |
128 this.Text = "FrmArmyTree"; | |
129 this.ResumeLayout(false); | |
130 | |
131 } | |
132 #endregion | |
133 | |
134 private void ClearArmy() | |
135 { | |
136 htNodes.Clear(); | |
137 treeView.Nodes.Clear(); | |
138 | |
139 ArrayList list = new ArrayList(htUnitWindows.Values); | |
140 | |
141 foreach (FrmUnit window in list) | |
142 { | |
143 window.Close(); | |
144 } | |
145 | |
146 htUnitWindows.Clear(); | |
147 } | |
148 | |
149 private void SetArmy(Army army) | |
150 { | |
151 if (army!=null) | |
152 { | |
153 ArmyCategory[] cats = army.Categories; | |
154 TreeNode[] catNodes = new TreeNode[cats.Length]; | |
155 Unit[] units; | |
156 | |
157 for (int i = 0; i<cats.Length; i++) | |
158 { | |
159 units = army.GetUnits(cats[i]); | |
160 cats[i].NameChanged += TreeNameChangedMethod; | |
161 TreeNode[] unitNodes = new TreeNode[units.Length]; | |
162 TreeNode temp; | |
163 | |
164 for (int j = 0; j<units.Length; j++) | |
165 { | |
166 unitNodes[j] = createTreeNode(units[j]); | |
167 } | |
168 | |
169 temp = new TreeNode(cats[i].Name, unitNodes); | |
170 temp.Tag = cats[i]; | |
171 catNodes[i] = temp; | |
172 htNodes[cats[i].ID] = temp; | |
173 } | |
174 | |
175 TreeNode root = new TreeNode(army.Name, catNodes); | |
176 root.Tag = army; | |
177 treeView.Nodes.Add(root); | |
178 root.ExpandAll(); | |
179 } | |
180 } | |
181 | |
182 private TreeNode createTreeNode(Unit unit) | |
183 { | |
184 TreeNode temp = new TreeNode(unit.Name); | |
185 temp.Tag = unit; | |
186 unit.NameChanged+= UnitNameChangedMethod; | |
187 htNodes[unit.ID] = temp; | |
188 return temp; | |
189 } | |
190 | |
191 /*private void FrmArmyTree_Move(object sender, System.EventArgs e) | |
192 { | |
193 if (ParentForm is FrmMain) | |
194 { | |
195 FrmMain main = (FrmMain)ParentForm; | |
196 main.Invoke(new MethodInvoker(main.MdiChildMoved)); | |
197 } | |
198 }*/ | |
199 | |
200 public void FrmArmyTree_ArmyChanged(Army oldArmy, Army newArmy) | |
201 { | |
202 if (oldArmy != null) | |
203 { | |
204 oldArmy.UnitAdded -= UnitAddedMethod; | |
205 oldArmy.UnitRemoved -= UnitRemovedMethod; | |
206 } | |
207 | |
208 if (newArmy != null) | |
209 { | |
210 newArmy.UnitAdded += UnitAddedMethod; | |
211 newArmy.UnitRemoved += UnitRemovedMethod; | |
212 SetArmy(newArmy); | |
213 } | |
214 else | |
215 { | |
216 ClearArmy(); | |
217 } | |
218 } | |
219 | |
220 private void AddUnit(object obj) | |
221 { | |
222 if (obj is Unit) | |
223 { | |
224 Unit unit = (Unit)obj; | |
225 ArmyCategory cat = unit.Category; | |
226 TreeNode parent = (TreeNode)htNodes[cat.ID]; | |
227 TreeNode unitNode = createTreeNode(unit); | |
228 parent.Nodes.Add(unitNode); | |
229 parent.Expand(); //make sure it's expanded | |
230 } | |
231 } | |
232 | |
233 private void RemoveUnit(object obj) | |
234 { | |
235 if (obj is Unit) | |
236 { | |
237 Unit unit = (Unit)obj; | |
238 removeUnit(unit); | |
239 } | |
240 } | |
241 | |
242 private void removeUnit(Unit unit) | |
243 { | |
244 TreeNode unitNode = (TreeNode)htNodes[unit.ID]; | |
245 unit.NameChanged-= UnitNameChangedMethod; | |
246 | |
247 if (unitNode!=null) | |
248 { | |
249 unitNode.Remove(); | |
250 htNodes.Remove(unit.ID); | |
251 } | |
252 } | |
253 | |
254 | |
255 private void contextMenu_Popup(object sender, System.EventArgs e) | |
256 { | |
257 TreeNode node = treeView.SelectedNode; | |
258 if (node!=null && node.Tag is Unit) | |
259 { | |
260 foreach(MenuItem item in contextMenu.MenuItems) | |
261 { | |
262 item.Visible = true; | |
263 } | |
264 } | |
265 else | |
266 { | |
267 foreach(MenuItem item in contextMenu.MenuItems) | |
268 { | |
269 item.Visible = false; | |
270 } | |
271 } | |
272 } | |
273 | |
274 private void treeView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) | |
275 { | |
276 if (e.Button == MouseButtons.Right) | |
277 { | |
278 TreeNode tn = treeView.GetNodeAt(e.X, e.Y); | |
279 | |
280 if (tn!=null) | |
281 { | |
282 treeView.SelectedNode = tn; | |
283 } | |
284 else | |
285 { | |
286 treeView.SelectedNode = null; | |
287 } | |
288 } | |
289 } | |
290 | |
291 private void miDelete_Click(object sender, System.EventArgs e) | |
292 { | |
293 TreeNode selected = treeView.SelectedNode; | |
294 | |
295 if (selected.Tag!=null && selected.Tag is Unit) | |
296 { | |
297 Unit unit = (Unit)selected.Tag; | |
298 commandStack.Execute(new RemoveUnitCommand(unit)); | |
299 } | |
300 } | |
301 | |
302 private void miEdit_Click(object sender, System.EventArgs e) | |
303 { | |
304 editUnit(); | |
305 } | |
306 | |
307 private void treeView_DoubleClick(object sender, System.EventArgs e) | |
308 { | |
309 editUnit(); | |
310 } | |
311 | |
312 private void editUnit() | |
313 { | |
314 TreeNode selected = treeView.SelectedNode; | |
315 | |
316 if (selected.Tag!=null && selected.Tag is Unit) | |
317 { | |
318 Unit unit = (Unit)selected.Tag; | |
319 | |
320 if (htUnitWindows.ContainsKey(unit.ID)) | |
321 { | |
322 ((FrmUnit)htUnitWindows[unit.ID]).Focus(); | |
323 } | |
324 else | |
325 { | |
326 FrmUnit unitForm = new FrmUnit(unit, commandStack); | |
327 htUnitWindows.Add(unit.ID, unitForm); | |
328 unitForm.MdiParent = this.MdiParent; | |
329 unitForm.Closing+=new CancelEventHandler(unitForm_Closing); | |
330 unitForm.Show(); | |
331 } | |
332 } | |
333 } | |
334 | |
335 private void UpdateUnitName(WarFoundryObject obj, string oldValue, string newValue) | |
336 { | |
337 if (obj is Unit) | |
338 { | |
339 Unit unit = (Unit)obj; | |
340 TreeNode node = (TreeNode)htNodes[unit.ID]; | |
341 | |
342 if (node!=null) | |
343 { | |
344 node.Text = unit.Name; | |
345 } | |
346 } | |
347 } | |
348 | |
349 private void UpdateArmyName(WarFoundryObject obj, string oldValue, string newValue) | |
350 { | |
351 if (obj is Army) | |
352 { | |
353 Army army = (Army)obj; | |
354 TreeNode node = treeView.Nodes[0]; | |
355 | |
356 if (node!=null) | |
357 { | |
358 node.Text = army.Name; | |
359 } | |
360 } | |
361 } | |
362 | |
363 private void unitForm_Closing(object sender, CancelEventArgs e) | |
364 { | |
365 if (sender is FrmUnit) | |
366 { | |
367 FrmUnit unitForm = (FrmUnit)sender; | |
368 htUnitWindows.Remove(unitForm.Unit.ID); | |
369 } | |
370 } | |
371 | |
372 private void FrmArmyTree_TreeNameChanged(WarFoundryObject obj, string oldValue, string newValue) | |
373 { | |
374 TreeNode node = (TreeNode)htNodes[obj.ID]; | |
375 | |
376 if (node!=null) | |
377 { | |
378 node.Text = obj.Name; | |
379 } | |
380 } | |
381 } | |
382 } |