Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.GTK
comparison FrmMainWindow.cs @ 21:2cf1af4c9baf
Re #53: Add XML saver
* Add initial stub behind "save as" that saves to a fixed location
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 17 Aug 2009 19:10:37 +0000 |
parents | a191d0655f55 |
children | d661cb257511 |
comparison
equal
deleted
inserted
replaced
20:1e301a6234fd | 21:2cf1af4c9baf |
---|---|
25 using IBBoard.WarFoundry.Plugin.Rollcall; | 25 using IBBoard.WarFoundry.Plugin.Rollcall; |
26 using IBBoard.Xml; | 26 using IBBoard.Xml; |
27 using log4net; | 27 using log4net; |
28 | 28 |
29 namespace IBBoard.WarFoundry.GTK | 29 namespace IBBoard.WarFoundry.GTK |
30 { | 30 { |
31 public partial class FrmMainWindow: Gtk.Window | 31 public partial class FrmMainWindow: Gtk.Window |
32 { | 32 { |
33 private static readonly string AppTitle = "WarFoundry"; | 33 private static readonly string AppTitle = "WarFoundry"; |
34 private const int CATEGORY_BUTTON_SEPARATOR_INDEX = 6; | 34 private const int CATEGORY_BUTTON_SEPARATOR_INDEX = 6; |
35 | 35 |
43 private ObjectAddDelegate UnitAddedMethod; | 43 private ObjectAddDelegate UnitAddedMethod; |
44 private ObjectRemoveDelegate UnitRemovedMethod; | 44 private ObjectRemoveDelegate UnitRemovedMethod; |
45 private DoubleValChangedDelegate PointsValueChangedMethod; | 45 private DoubleValChangedDelegate PointsValueChangedMethod; |
46 private FailedUnitRequirementDelegate FailedUnitRequirementMethod; | 46 private FailedUnitRequirementDelegate FailedUnitRequirementMethod; |
47 private StringValChangedDelegate UnitNameChangedMethod; | 47 private StringValChangedDelegate UnitNameChangedMethod; |
48 | 48 |
49 private GameSystem system; | 49 private GameSystem system; |
50 private string loadedArmyPath; | 50 private string loadedArmyPath; |
51 | 51 |
52 private MenuToolButton undoMenuButton, redoMenuButton; | 52 private MenuToolButton undoMenuButton, redoMenuButton; |
53 | 53 |
54 public static void Main (string[] args) | 54 public static void Main (string[] args) |
55 { | 55 { |
56 try | 56 try |
57 { | 57 { |
58 Application.Init(); | 58 Application.Init(); |
59 FrmMainWindow win = new FrmMainWindow(args); | 59 FrmMainWindow win = new FrmMainWindow(args); |
60 win.Show(); | 60 win.Show(); |
64 catch(Exception ex) | 64 catch(Exception ex) |
65 { | 65 { |
66 LogManager.GetLogger(typeof(FrmMainWindow)).Fatal("("+ex.GetType().Name+") "+ex.Message + Environment.NewLine + ex.StackTrace); | 66 LogManager.GetLogger(typeof(FrmMainWindow)).Fatal("("+ex.GetType().Name+") "+ex.Message + Environment.NewLine + ex.StackTrace); |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 public FrmMainWindow() : this(new string[0]) | 70 public FrmMainWindow() : this(new string[0]) |
71 { | 71 { |
72 //Do nothing extra | 72 //Do nothing extra |
73 } | 73 } |
74 | 74 |
75 public FrmMainWindow (string[] args): base (Gtk.WindowType.Toplevel) | 75 public FrmMainWindow (string[] args): base (Gtk.WindowType.Toplevel) |
76 { | 76 { |
77 logger.Info("Opening FrmMainWindow"); | 77 logger.Info("Opening FrmMainWindow"); |
78 Build (); | 78 Build (); |
79 //Replace the undo/redo buttons with menu versions, which Monodevelop's GUI editor doesn't currently support | 79 //Replace the undo/redo buttons with menu versions, which Monodevelop's GUI editor doesn't currently support |
88 undoMenuButton.Clicked+= undoTBButtonActivated; | 88 undoMenuButton.Clicked+= undoTBButtonActivated; |
89 toolbar.Insert(undoMenuButton, CATEGORY_BUTTON_SEPARATOR_INDEX); | 89 toolbar.Insert(undoMenuButton, CATEGORY_BUTTON_SEPARATOR_INDEX); |
90 toolbar.Remove(toolbar.Children[CATEGORY_BUTTON_SEPARATOR_INDEX-1]); | 90 toolbar.Remove(toolbar.Children[CATEGORY_BUTTON_SEPARATOR_INDEX-1]); |
91 toolbar.Remove(toolbar.Children[CATEGORY_BUTTON_SEPARATOR_INDEX-2]); | 91 toolbar.Remove(toolbar.Children[CATEGORY_BUTTON_SEPARATOR_INDEX-2]); |
92 toolbar.ShowAll(); | 92 toolbar.ShowAll(); |
93 | 93 |
94 Title = AppTitle; | 94 Title = AppTitle; |
95 TreeViewColumn mainColumn = new TreeViewColumn (); | 95 TreeViewColumn mainColumn = new TreeViewColumn (); |
96 mainColumn.Title = "Army Categories"; | 96 mainColumn.Title = "Army Categories"; |
97 CellRendererText mainCell = new CellRendererText (); | 97 CellRendererText mainCell = new CellRendererText (); |
98 mainColumn.PackStart (mainCell, true); | 98 mainColumn.PackStart (mainCell, true); |
100 mainColumn.SetCellDataFunc(mainCell, new TreeCellDataFunc(RenderCategoryTreeObjectName)); | 100 mainColumn.SetCellDataFunc(mainCell, new TreeCellDataFunc(RenderCategoryTreeObjectName)); |
101 treeUnits.Model = new TreeStore(typeof(WarFoundryObject)); | 101 treeUnits.Model = new TreeStore(typeof(WarFoundryObject)); |
102 logger.Debug("Loading preferences"); | 102 logger.Debug("Loading preferences"); |
103 Preferences = new Preferences("WarFoundryGTK"); | 103 Preferences = new Preferences("WarFoundryGTK"); |
104 logger.Debug("Loading translations"); | 104 logger.Debug("Loading translations"); |
105 | 105 |
106 try | 106 try |
107 { | 107 { |
108 Translation.InitialiseTranslations(Constants.ExecutablePath, Preferences["language"].ToString()); | 108 Translation.InitialiseTranslations(Constants.ExecutablePath, Preferences["language"].ToString()); |
109 } | 109 } |
110 catch (TranslationLoadException ex) | 110 catch (TranslationLoadException ex) |
113 MessageDialog dialog = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, ex.Message); | 113 MessageDialog dialog = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, ex.Message); |
114 dialog.Title = "Translation loading failed"; | 114 dialog.Title = "Translation loading failed"; |
115 dialog.Run(); | 115 dialog.Run(); |
116 dialog.Destroy(); | 116 dialog.Destroy(); |
117 } | 117 } |
118 | 118 |
119 logger.Debug("Initialising"); | 119 logger.Debug("Initialising"); |
120 commandStack = new CommandStack(); | 120 commandStack = new CommandStack(); |
121 commandStack.CommandStackUpdated+=new MethodInvoker(commandStack_CommandStackUpdated); | 121 commandStack.CommandStackUpdated+=new MethodInvoker(commandStack_CommandStackUpdated); |
122 WarFoundryCore.GameSystemChanged+= new GameSystemChangedDelegate(OnGameSystemChanged); | 122 WarFoundryCore.GameSystemChanged+= new GameSystemChangedDelegate(OnGameSystemChanged); |
123 WarFoundryCore.ArmyChanged+= new ArmyChangedDelegate(OnArmyChanged); | 123 WarFoundryCore.ArmyChanged+= new ArmyChangedDelegate(OnArmyChanged); |
126 UnitAddedMethod = new ObjectAddDelegate(OnUnitAdded); | 126 UnitAddedMethod = new ObjectAddDelegate(OnUnitAdded); |
127 UnitRemovedMethod = new ObjectRemoveDelegate(OnUnitRemoved); | 127 UnitRemovedMethod = new ObjectRemoveDelegate(OnUnitRemoved); |
128 PointsValueChangedMethod = new DoubleValChangedDelegate(OnPointsValueChanged); | 128 PointsValueChangedMethod = new DoubleValChangedDelegate(OnPointsValueChanged); |
129 FailedUnitRequirementMethod = new FailedUnitRequirementDelegate(OnFailedUnitRequirement); | 129 FailedUnitRequirementMethod = new FailedUnitRequirementDelegate(OnFailedUnitRequirement); |
130 UnitNameChangedMethod = new StringValChangedDelegate(OnUnitNameChanged); | 130 UnitNameChangedMethod = new StringValChangedDelegate(OnUnitNameChanged); |
131 | 131 |
132 //FIXME: Temporary hack to add paths and factories before we get preferences and plugins | 132 //FIXME: Temporary hack to add paths and factories before we get preferences and plugins |
133 WarFoundryLoader.GetDefault().AddLoadDirectory(new DirectoryInfo(Constants.ExecutablePath + Constants.DirectoryString + "data")); | 133 WarFoundryLoader.GetDefault().AddLoadDirectory(new DirectoryInfo(Constants.ExecutablePath + Constants.DirectoryString + "data")); |
134 WarFoundryLoader.GetDefault().RegisterFactory(WarFoundryXmlFactory.GetFactory()); | 134 WarFoundryLoader.GetDefault().RegisterFactory(WarFoundryXmlFactory.GetFactory()); |
135 WarFoundryLoader.GetDefault().RegisterNonNativeFactory(RollcallFactory.GetFactory()); | 135 WarFoundryLoader.GetDefault().RegisterNonNativeFactory(RollcallFactory.GetFactory()); |
136 | 136 WarFoundrySaver.SetFileSaver(new WarFoundryXmlSaver()); |
137 | |
137 logger.Debug("Initialising complete - seeing if we can load default army or system"); | 138 logger.Debug("Initialising complete - seeing if we can load default army or system"); |
138 | 139 |
139 if (args.Length == 1) | 140 if (args.Length == 1) |
140 { | 141 { |
141 logger.Debug("Attempting to load from file"); | 142 logger.Debug("Attempting to load from file"); |
142 FileInfo file = new FileInfo(args[0]); | 143 FileInfo file = new FileInfo(args[0]); |
143 | 144 |
144 try | 145 try |
145 { | 146 { |
146 ICollection<IWarFoundryObject> objects = WarFoundryLoader.GetDefault().LoadFile(file); | 147 ICollection<IWarFoundryObject> objects = WarFoundryLoader.GetDefault().LoadFile(file); |
147 | 148 |
148 if (objects.Count == 1) | 149 if (objects.Count == 1) |
149 { | 150 { |
150 List<IWarFoundryObject> objectList = new List<IWarFoundryObject>(); | 151 List<IWarFoundryObject> objectList = new List<IWarFoundryObject>(); |
151 objectList.AddRange(objects); | 152 objectList.AddRange(objects); |
152 IWarFoundryObject loadedObject = objectList[0]; | 153 IWarFoundryObject loadedObject = objectList[0]; |
153 | 154 |
154 if (loadedObject is Army) | 155 if (loadedObject is Army) |
155 { | 156 { |
156 WarFoundryCore.CurrentArmy = (Army)loadedObject; | 157 WarFoundryCore.CurrentArmy = (Army)loadedObject; |
157 logger.InfoFormat("Loaded army from {0}", file.FullName); | 158 logger.InfoFormat("Loaded army from {0}", file.FullName); |
158 } | 159 } |
175 | 176 |
176 if (gameSystemID!=null && !"".Equals(gameSystemID)) | 177 if (gameSystemID!=null && !"".Equals(gameSystemID)) |
177 { | 178 { |
178 logger.Debug("Attempting to load current game system from properties"); | 179 logger.Debug("Attempting to load current game system from properties"); |
179 GameSystem sys = WarFoundryLoader.GetDefault().GetGameSystem(gameSystemID); | 180 GameSystem sys = WarFoundryLoader.GetDefault().GetGameSystem(gameSystemID); |
180 | 181 |
181 if (sys!=null) | 182 if (sys!=null) |
182 { | 183 { |
183 WarFoundryCore.CurrentGameSystem = sys; | 184 WarFoundryCore.CurrentGameSystem = sys; |
184 logger.InfoFormat("Loaded game system {0} from properties", gameSystemID); | 185 logger.InfoFormat("Loaded game system {0} from properties", gameSystemID); |
185 } | 186 } |
186 } | 187 } |
187 } | 188 } |
188 } | 189 } |
189 | 190 |
190 private void RenderCategoryTreeObjectName(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) | 191 private void RenderCategoryTreeObjectName(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) |
191 { | 192 { |
192 object o = model.GetValue(iter, 0); | 193 object o = model.GetValue(iter, 0); |
193 | 194 |
194 if (o is ArmyCategory) | 195 if (o is ArmyCategory) |
195 { | 196 { |
196 ArmyCategory c = (ArmyCategory)o; | 197 ArmyCategory c = (ArmyCategory)o; |
197 string name = ""; | 198 string name = ""; |
198 | 199 |
199 if (Preferences.GetBooleanProperty("ShowCatPercentage")) | 200 if (Preferences.GetBooleanProperty("ShowCatPercentage")) |
200 { | 201 { |
201 name = Translation.GetTranslation("categoryTreeCatName", "{0} - {1}pts", c.Name, c.PointsTotal); | 202 name = Translation.GetTranslation("categoryTreeCatName", "{0} - {1}pts", c.Name, c.PointsTotal); |
202 } | 203 } |
203 else | 204 else |
204 { | 205 { |
205 name = Translation.GetTranslation("categoryTreeCatNamePercentage", "{0} - {1}pts ({2}%)", c.Name, c.PointsTotal, (c.ParentArmy.PointsTotal > 0 ? Math.Round((c.PointsTotal / c.ParentArmy.PointsTotal) * 100) : 0)); | 206 name = Translation.GetTranslation("categoryTreeCatNamePercentage", "{0} - {1}pts ({2}%)", c.Name, c.PointsTotal, (c.ParentArmy.PointsTotal > 0 ? Math.Round((c.PointsTotal / c.ParentArmy.PointsTotal) * 100) : 0)); |
206 } | 207 } |
207 | 208 |
208 (cell as CellRendererText).Text = name; | 209 (cell as CellRendererText).Text = name; |
209 } | 210 } |
210 else if (o is IBBoard.WarFoundry.API.Objects.Unit) | 211 else if (o is IBBoard.WarFoundry.API.Objects.Unit) |
211 { | 212 { |
212 IBBoard.WarFoundry.API.Objects.Unit u = (IBBoard.WarFoundry.API.Objects.Unit)o; | 213 IBBoard.WarFoundry.API.Objects.Unit u = (IBBoard.WarFoundry.API.Objects.Unit)o; |
213 string name = Translation.GetTranslation("categoryTreeCatName", "{0} - {1}pts", u.Name, u.PointsValue); | 214 string name = Translation.GetTranslation("categoryTreeCatName", "{0} - {1}pts", u.Name, u.PointsValue); |
214 (cell as CellRendererText).Text = name; | 215 (cell as CellRendererText).Text = name; |
215 } | 216 } |
216 } | 217 } |
217 | 218 |
218 private void OnWindowDestroyed(object source, EventArgs args) | 219 private void OnWindowDestroyed(object source, EventArgs args) |
219 { | 220 { |
220 logger.Info("Exiting"); | 221 logger.Info("Exiting"); |
221 Application.Quit(); | 222 Application.Quit(); |
222 } | 223 } |
223 | 224 |
224 private void OnUnitNameChanged(WarFoundryObject val, string oldValue, string newValue) | 225 private void OnUnitNameChanged(WarFoundryObject val, string oldValue, string newValue) |
225 { | 226 { |
226 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)val; | 227 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)val; |
227 UnitDisplayWidget widget; | 228 UnitDisplayWidget widget; |
228 unitToWidgetMap.TryGetValue(unit, out widget); | 229 unitToWidgetMap.TryGetValue(unit, out widget); |
229 | 230 |
230 if (widget!=null) | 231 if (widget!=null) |
231 { | 232 { |
232 unitsNotebook.SetTabLabelText(widget, newValue); | 233 unitsNotebook.SetTabLabelText(widget, newValue); |
233 } | 234 } |
234 } | 235 } |
235 | 236 |
236 private void OnUnitAdded(WarFoundryObject val) | 237 private void OnUnitAdded(WarFoundryObject val) |
237 { | 238 { |
238 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)val; | 239 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)val; |
239 unit.NameChanged+= UnitNameChangedMethod; | 240 unit.NameChanged+= UnitNameChangedMethod; |
240 AddUnitToTree(unit); | 241 AddUnitToTree(unit); |
241 } | 242 } |
242 | 243 |
243 private void AddUnitToTree(IBBoard.WarFoundry.API.Objects.Unit unit) | 244 private void AddUnitToTree(IBBoard.WarFoundry.API.Objects.Unit unit) |
244 { | 245 { |
245 TreeStore model = (TreeStore)treeUnits.Model; | 246 TreeStore model = (TreeStore)treeUnits.Model; |
246 TreeIter iter; | 247 TreeIter iter; |
247 model.GetIterFirst(out iter); | 248 model.GetIterFirst(out iter); |
248 | 249 |
249 do | 250 do |
250 { | 251 { |
251 object obj = model.GetValue(iter, 0); | 252 object obj = model.GetValue(iter, 0); |
252 | 253 |
253 if (obj is ArmyCategory) | 254 if (obj is ArmyCategory) |
254 { | 255 { |
255 ArmyCategory cat = (ArmyCategory)obj; | 256 ArmyCategory cat = (ArmyCategory)obj; |
256 | 257 |
257 if (cat.Equals(unit.Category)) | 258 if (cat.Equals(unit.Category)) |
258 { | 259 { |
259 model.AppendValues(iter, unit); | 260 model.AppendValues(iter, unit); |
260 TreePath path = model.GetPath(iter); | 261 TreePath path = model.GetPath(iter); |
261 treeUnits.ExpandToPath(path); | 262 treeUnits.ExpandToPath(path); |
262 } | 263 } |
263 } | 264 } |
264 } | 265 } |
265 while (model.IterNext(ref iter)); | 266 while (model.IterNext(ref iter)); |
266 } | 267 } |
267 | 268 |
268 private void OnUnitRemoved(WarFoundryObject obj) | 269 private void OnUnitRemoved(WarFoundryObject obj) |
269 { | 270 { |
270 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)obj; | 271 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)obj; |
271 unit.NameChanged-= UnitNameChangedMethod; | 272 unit.NameChanged-= UnitNameChangedMethod; |
272 RemoveUnitFromTree(unit); | 273 RemoveUnitFromTree(unit); |
273 | 274 |
274 //See if unit has a tab open and close it if it does | 275 //See if unit has a tab open and close it if it does |
275 } | 276 } |
276 | 277 |
277 private void RemoveUnitFromTree(IBBoard.WarFoundry.API.Objects.Unit unit) | 278 private void RemoveUnitFromTree(IBBoard.WarFoundry.API.Objects.Unit unit) |
278 { | 279 { |
279 TreeStore model = (TreeStore)treeUnits.Model; | 280 TreeStore model = (TreeStore)treeUnits.Model; |
280 TreeIter iter; | 281 TreeIter iter; |
281 model.GetIterFirst(out iter); | 282 model.GetIterFirst(out iter); |
282 bool removed = false; | 283 bool removed = false; |
283 | 284 |
284 do | 285 do |
285 { | 286 { |
286 object obj = model.GetValue(iter, 0); | 287 object obj = model.GetValue(iter, 0); |
287 | 288 |
288 if (obj is ArmyCategory) | 289 if (obj is ArmyCategory) |
289 { | 290 { |
290 ArmyCategory cat = (ArmyCategory)obj; | 291 ArmyCategory cat = (ArmyCategory)obj; |
291 | 292 |
292 if (unit.Category == null || cat.Equals(unit.Category)) | 293 if (unit.Category == null || cat.Equals(unit.Category)) |
293 { | 294 { |
294 TreeIter innerIter; | 295 TreeIter innerIter; |
295 model.IterChildren(out innerIter, iter); | 296 model.IterChildren(out innerIter, iter); |
296 | 297 |
297 do | 298 do |
298 { | 299 { |
299 object innerObj = model.GetValue(innerIter, 0); | 300 object innerObj = model.GetValue(innerIter, 0); |
300 | 301 |
301 if (unit.Equals(innerObj)) | 302 if (unit.Equals(innerObj)) |
302 { | 303 { |
303 model.Remove(ref innerIter); | 304 model.Remove(ref innerIter); |
304 removed = true; | 305 removed = true; |
305 break; | 306 break; |
306 } | 307 } |
307 } | 308 } |
308 while (model.IterNext(ref innerIter)); | 309 while (model.IterNext(ref innerIter)); |
309 | 310 |
310 if (removed) | 311 if (removed) |
311 { | 312 { |
312 break; | 313 break; |
313 } | 314 } |
314 } | 315 } |
315 } | 316 } |
316 } | 317 } |
317 while (model.IterNext(ref iter)); | 318 while (model.IterNext(ref iter)); |
318 } | 319 } |
319 | 320 |
320 private void OnPointsValueChanged(WarFoundryObject obj, double before, double after) | 321 private void OnPointsValueChanged(WarFoundryObject obj, double before, double after) |
321 { | 322 { |
322 //Set points in panel | 323 //Set points in panel |
323 } | 324 } |
324 | 325 |
325 private void OnFailedUnitRequirement(List<FailedUnitRequirement> failedRequirement) | 326 private void OnFailedUnitRequirement(List<FailedUnitRequirement> failedRequirement) |
326 { | 327 { |
327 //Show error message in panel | 328 //Show error message in panel |
328 } | 329 } |
329 | 330 |
330 public Preferences Preferences | 331 public Preferences Preferences |
331 { | 332 { |
332 get { return preferences; } | 333 get { return preferences; } |
333 set { preferences = value; } | 334 set { preferences = value; } |
334 } | 335 } |
335 | 336 |
336 /*public AbstractNativeWarFoundryFactory Factory | 337 /*public AbstractNativeWarFoundryFactory Factory |
337 { | 338 { |
338 get { return WarFoundryFactoryFactory.GetFactoryFactory().GetFactory(Constants.ExecutablePath, factoryType); } | 339 get { return WarFoundryFactoryFactory.GetFactoryFactory().GetFactory(Constants.ExecutablePath, factoryType); } |
339 }*/ | 340 }*/ |
340 | 341 |
341 protected void OnDeleteEvent (object sender, DeleteEventArgs a) | 342 protected void OnDeleteEvent (object sender, DeleteEventArgs a) |
342 { | 343 { |
343 Application.Quit (); | 344 Application.Quit (); |
344 a.RetVal = true; | 345 a.RetVal = true; |
345 } | 346 } |
380 | 381 |
381 protected virtual void OnSaveArmyActivated(object sender, System.EventArgs e) | 382 protected virtual void OnSaveArmyActivated(object sender, System.EventArgs e) |
382 { | 383 { |
383 SaveCurrentArmy(); | 384 SaveCurrentArmy(); |
384 } | 385 } |
385 | 386 |
386 protected virtual void OnAddUnitActivated(object sender, System.EventArgs e) | 387 protected virtual void OnAddUnitActivated(object sender, System.EventArgs e) |
387 { | 388 { |
388 if (sender is ToolButton) | 389 if (sender is ToolButton) |
389 { | 390 { |
390 Category cat = null; | 391 Category cat = null; |
391 categoryMap.TryGetValue((ToolButton)sender, out cat); | 392 categoryMap.TryGetValue((ToolButton)sender, out cat); |
392 | 393 |
393 if (cat!=null) | 394 if (cat!=null) |
394 { | 395 { |
395 logger.DebugFormat("Show FrmNewUnit for {0}", cat.Name); | 396 logger.DebugFormat("Show FrmNewUnit for {0}", cat.Name); |
396 FrmNewUnit newUnit = new FrmNewUnit(WarFoundryCore.CurrentArmy.Race, cat, WarFoundryCore.CurrentArmy); | 397 FrmNewUnit newUnit = new FrmNewUnit(WarFoundryCore.CurrentArmy.Race, cat, WarFoundryCore.CurrentArmy); |
397 ResponseType response = (ResponseType)newUnit.Run(); | 398 ResponseType response = (ResponseType)newUnit.Run(); |
398 newUnit.Hide(); | 399 newUnit.Hide(); |
399 | 400 |
400 if (response==ResponseType.Ok) | 401 if (response==ResponseType.Ok) |
401 { | 402 { |
402 CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnit.SelectedUnit, WarFoundryCore.CurrentArmy.GetCategory(cat)); | 403 CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnit.SelectedUnit, WarFoundryCore.CurrentArmy.GetCategory(cat)); |
403 commandStack.Execute(cmd); | 404 commandStack.Execute(cmd); |
404 } | 405 } |
405 | 406 |
406 newUnit.Dispose(); | 407 newUnit.Dispose(); |
407 } | 408 } |
408 } | 409 } |
409 } | 410 } |
410 | 411 |
411 public CommandStack CommandStack | 412 public CommandStack CommandStack |
412 { | 413 { |
413 get { return commandStack; } | 414 get { return commandStack; } |
414 } | 415 } |
415 | 416 |
416 private void SetAppTitle() | 417 private void SetAppTitle() |
417 { | 418 { |
418 if (WarFoundryCore.CurrentArmy!=null) | 419 if (WarFoundryCore.CurrentArmy!=null) |
419 { | 420 { |
420 Title = AppTitle + " - " + WarFoundryCore.CurrentGameSystem.Name + " - " + WarFoundryCore.CurrentArmy.Name; | 421 Title = AppTitle + " - " + WarFoundryCore.CurrentGameSystem.Name + " - " + WarFoundryCore.CurrentArmy.Name; |
426 else | 427 else |
427 { | 428 { |
428 Title = AppTitle; | 429 Title = AppTitle; |
429 } | 430 } |
430 } | 431 } |
431 | 432 |
432 private void OnGameSystemChanged(GameSystem oldSys, GameSystem newSys) | 433 private void OnGameSystemChanged(GameSystem oldSys, GameSystem newSys) |
433 { | 434 { |
434 system = newSys; | 435 system = newSys; |
435 SetAppTitle(); | 436 SetAppTitle(); |
436 miCreateArmy.Sensitive = system!=null; | 437 miCreateArmy.Sensitive = system!=null; |
437 newArmyButton.Sensitive = system!=null; | 438 newArmyButton.Sensitive = system!=null; |
438 RemoveCategoryButtons(); | 439 RemoveCategoryButtons(); |
439 | 440 |
440 if (system!=null) | 441 if (system!=null) |
441 { | 442 { |
442 AddCategoryButtons(system.Categories); | 443 AddCategoryButtons(system.Categories); |
443 } | 444 } |
444 } | 445 } |
445 | 446 |
446 private void OnArmyChanged(Army oldArmy, Army newArmy) | 447 private void OnArmyChanged(Army oldArmy, Army newArmy) |
447 { | 448 { |
448 loadedArmyPath = null; | 449 loadedArmyPath = null; |
449 SetAppTitle(); | 450 SetAppTitle(); |
450 SetArmyTree(newArmy); | 451 SetArmyTree(newArmy); |
451 | 452 |
452 if (oldArmy!=null) | 453 if (oldArmy!=null) |
453 { | 454 { |
454 oldArmy.UnitAdded-= UnitAddedMethod; | 455 oldArmy.UnitAdded-= UnitAddedMethod; |
455 oldArmy.UnitRemoved-= UnitRemovedMethod; | 456 oldArmy.UnitRemoved-= UnitRemovedMethod; |
456 oldArmy.PointsValueChanged-= PointsValueChangedMethod; | 457 oldArmy.PointsValueChanged-= PointsValueChangedMethod; |
457 oldArmy.FailedRequirement-=FailedUnitRequirementMethod; | 458 oldArmy.FailedRequirement-=FailedUnitRequirementMethod; |
458 } | 459 } |
459 | 460 |
460 unitToWidgetMap.Clear(); | 461 unitToWidgetMap.Clear(); |
461 | 462 |
462 while (unitsNotebook.NPages > 0) | 463 while (unitsNotebook.NPages > 0) |
463 { | 464 { |
464 unitsNotebook.RemovePage(0); | 465 unitsNotebook.RemovePage(0); |
465 } | 466 } |
466 | 467 |
467 if (newArmy==null) | 468 if (newArmy==null) |
468 { | 469 { |
469 DisableCategoryButtons(); | 470 DisableCategoryButtons(); |
470 } | 471 } |
471 else | 472 else |
481 { | 482 { |
482 RemoveCategoryButtons(); | 483 RemoveCategoryButtons(); |
483 AddCategoryButtons(newArmy.Race.Categories); | 484 AddCategoryButtons(newArmy.Race.Categories); |
484 } | 485 } |
485 } | 486 } |
486 | 487 |
487 miCloseArmy.Sensitive = newArmy!=null; | 488 miCloseArmy.Sensitive = newArmy!=null; |
488 miSaveArmyAs.Sensitive = newArmy!=null; | 489 miSaveArmyAs.Sensitive = newArmy!=null; |
489 //New army has no changes, so we can't save it | 490 //New army has no changes, so we can't save it |
490 miSaveArmy.Sensitive = false; | 491 miSaveArmy.Sensitive = false; |
491 saveArmyButton.Sensitive = false; | 492 saveArmyButton.Sensitive = false; |
492 | 493 |
493 CommandStack.Reset(); | 494 CommandStack.Reset(); |
494 SetPointsPanelText(); | 495 SetPointsPanelText(); |
495 } | 496 } |
496 | 497 |
497 private void SetArmyTree(Army army) | 498 private void SetArmyTree(Army army) |
498 { | 499 { |
499 logger.Debug("Resetting tree"); | 500 logger.Debug("Resetting tree"); |
500 TreeStore store = (TreeStore)treeUnits.Model; | 501 TreeStore store = (TreeStore)treeUnits.Model; |
501 store.Clear(); | 502 store.Clear(); |
502 TreeIter iter; | 503 TreeIter iter; |
503 | 504 |
504 if (army!=null) | 505 if (army!=null) |
505 { | 506 { |
506 logger.Debug("Loading in categories to tree"); | 507 logger.Debug("Loading in categories to tree"); |
507 | 508 |
508 foreach (ArmyCategory cat in army.Categories) | 509 foreach (ArmyCategory cat in army.Categories) |
509 { | 510 { |
510 logger.DebugFormat("Append category {0}", cat.Name); | 511 logger.DebugFormat("Append category {0}", cat.Name); |
511 iter = store.AppendValues(cat); | 512 iter = store.AppendValues(cat); |
512 | 513 |
513 foreach (IBBoard.WarFoundry.API.Objects.Unit unit in cat.GetUnits()) | 514 foreach (IBBoard.WarFoundry.API.Objects.Unit unit in cat.GetUnits()) |
514 { | 515 { |
515 store.AppendValues(iter, unit); | 516 store.AppendValues(iter, unit); |
516 } | 517 } |
517 } | 518 } |
518 | 519 |
519 logger.Debug("Finished loading tree categories"); | 520 logger.Debug("Finished loading tree categories"); |
520 } | 521 } |
521 } | 522 } |
522 | 523 |
523 private void DisableCategoryButtons() | 524 private void DisableCategoryButtons() |
524 { | 525 { |
525 SetCategoryButtonsSensitive(false); | 526 SetCategoryButtonsSensitive(false); |
526 } | 527 } |
527 | 528 |
528 private void EnableCategoryButtons() | 529 private void EnableCategoryButtons() |
529 { | 530 { |
530 SetCategoryButtonsSensitive(true); | 531 SetCategoryButtonsSensitive(true); |
531 } | 532 } |
532 | 533 |
533 private void SetCategoryButtonsSensitive(bool state) | 534 private void SetCategoryButtonsSensitive(bool state) |
534 { | 535 { |
535 int toolbarButtonCount = toolbar.Children.Length - 1; | 536 int toolbarButtonCount = toolbar.Children.Length - 1; |
536 logger.Debug("Last button index: "+toolbarButtonCount); | 537 logger.Debug("Last button index: "+toolbarButtonCount); |
537 | 538 |
538 for (int i = toolbarButtonCount; i > CATEGORY_BUTTON_SEPARATOR_INDEX; i--) | 539 for (int i = toolbarButtonCount; i > CATEGORY_BUTTON_SEPARATOR_INDEX; i--) |
539 { | 540 { |
540 logger.DebugFormat("Setting button {0} state to {1}", i, state); | 541 logger.DebugFormat("Setting button {0} state to {1}", i, state); |
541 toolbar.Children[i].Sensitive = state; | 542 toolbar.Children[i].Sensitive = state; |
542 } | 543 } |
543 } | 544 } |
544 | 545 |
545 private void RemoveCategoryButtons() | 546 private void RemoveCategoryButtons() |
546 { | 547 { |
547 int toolbarButtonCount = toolbar.Children.Length - 1; | 548 int toolbarButtonCount = toolbar.Children.Length - 1; |
548 | 549 |
549 for (int i = toolbarButtonCount; i > CATEGORY_BUTTON_SEPARATOR_INDEX; i--) | 550 for (int i = toolbarButtonCount; i > CATEGORY_BUTTON_SEPARATOR_INDEX; i--) |
550 { | 551 { |
551 toolbar.Remove(toolbar.Children[i]); | 552 toolbar.Remove(toolbar.Children[i]); |
552 } | 553 } |
553 | 554 |
554 categoryMap.Clear(); | 555 categoryMap.Clear(); |
555 } | 556 } |
556 | 557 |
557 private void AddCategoryButtons(Category[] cats) | 558 private void AddCategoryButtons(Category[] cats) |
558 { | 559 { |
559 if (cats!=null && cats.Length > 0) | 560 if (cats!=null && cats.Length > 0) |
560 { | 561 { |
561 logger.DebugFormat("Toolbar button count: {0}. Adding {1} categories.", toolbar.Children.Length, cats.Length); | 562 logger.DebugFormat("Toolbar button count: {0}. Adding {1} categories.", toolbar.Children.Length, cats.Length); |
562 | 563 |
563 foreach (Category cat in cats) | 564 foreach (Category cat in cats) |
564 { | 565 { |
565 ToolButton button = new ToolButton("gtk-add"); | 566 ToolButton button = new ToolButton("gtk-add"); |
566 button.Label = cat.Name; | 567 button.Label = cat.Name; |
567 button.TooltipText = "Add unit from "+cat.Name; | 568 button.TooltipText = "Add unit from "+cat.Name; |
569 categoryMap.Add(button, cat); | 570 categoryMap.Add(button, cat); |
570 button.Clicked+= new System.EventHandler(OnAddUnitActivated); | 571 button.Clicked+= new System.EventHandler(OnAddUnitActivated); |
571 toolbar.Insert(button, -1); | 572 toolbar.Insert(button, -1); |
572 } | 573 } |
573 } | 574 } |
574 | 575 |
575 toolbar.Children[CATEGORY_BUTTON_SEPARATOR_INDEX].Visible = cats!=null && cats.Length>0; | 576 toolbar.Children[CATEGORY_BUTTON_SEPARATOR_INDEX].Visible = cats!=null && cats.Length>0; |
576 | 577 |
577 toolbar.ShowAll(); | 578 toolbar.ShowAll(); |
578 } | 579 } |
579 | 580 |
580 private void SetPointsPanelText() | 581 private void SetPointsPanelText() |
581 { | 582 { |
582 //TODO: Set the points value in the status bar | 583 //TODO: Set the points value in the status bar |
583 } | 584 } |
584 | 585 |
585 private void commandStack_CommandStackUpdated() | 586 private void commandStack_CommandStackUpdated() |
586 { | 587 { |
587 undoMenuButton.Sensitive = commandStack.CanUndo(); | 588 undoMenuButton.Sensitive = commandStack.CanUndo(); |
588 miUndo.Sensitive = undoMenuButton.Sensitive; | 589 miUndo.Sensitive = undoMenuButton.Sensitive; |
589 redoMenuButton.Sensitive = commandStack.CanRedo(); | 590 redoMenuButton.Sensitive = commandStack.CanRedo(); |
590 miRedo.Sensitive = redoMenuButton.Sensitive; | 591 miRedo.Sensitive = redoMenuButton.Sensitive; |
591 int redoLength = commandStack.RedoLength; | 592 int redoLength = commandStack.RedoLength; |
592 //TODO: Build menus for undo/redo and find way of adding tooltips | 593 //TODO: Build menus for undo/redo and find way of adding tooltips |
593 /*int maxRedo = Math.Min(10, redoLength); | 594 /*int maxRedo = Math.Min(10, redoLength); |
594 MenuItem[] menuItems = null; | 595 MenuItem[] menuItems = null; |
595 | 596 |
596 if (redoLength > 0) | 597 if (redoLength > 0) |
597 { | 598 { |
598 menuItems = new MenuItem[maxRedo]; | 599 menuItems = new MenuItem[maxRedo]; |
599 Command com; | 600 Command com; |
600 MenuItem mi; | 601 MenuItem mi; |
603 { | 604 { |
604 com = commandStack.PeekRedoCommand(i+1); | 605 com = commandStack.PeekRedoCommand(i+1); |
605 | 606 |
606 if (com == null) | 607 if (com == null) |
607 { | 608 { |
608 break; | 609 break; |
609 } | 610 } |
610 | 611 |
611 mi = new MenuItem(com.Description); | 612 mi = new MenuItem(com.Description); |
612 mi.Click+=new EventHandler(redoMenu_Click); | 613 mi.Click+=new EventHandler(redoMenu_Click); |
613 menuItems[i] = mi; | 614 menuItems[i] = mi; |
628 } | 629 } |
629 | 630 |
630 int undoLength = commandStack.UndoLength; | 631 int undoLength = commandStack.UndoLength; |
631 /*int maxUndo = Math.Min(10, undoLength); | 632 /*int maxUndo = Math.Min(10, undoLength); |
632 MenuItem[] menuItemsUndo = null; | 633 MenuItem[] menuItemsUndo = null; |
633 | 634 |
634 if (undoLength > 0) | 635 if (undoLength > 0) |
635 { | 636 { |
636 menuItemsUndo = new MenuItem[maxUndo]; | 637 menuItemsUndo = new MenuItem[maxUndo]; |
637 Command com; | 638 Command com; |
638 MenuItem mi; | 639 MenuItem mi; |
641 { | 642 { |
642 com = commandStack.PeekUndoCommand(i+1); | 643 com = commandStack.PeekUndoCommand(i+1); |
643 | 644 |
644 if (com == null) | 645 if (com == null) |
645 { | 646 { |
646 break; | 647 break; |
647 } | 648 } |
648 | 649 |
649 mi = new MenuItem(com.UndoDescription); | 650 mi = new MenuItem(com.UndoDescription); |
650 mi.Click+=new EventHandler(undoMenu_Click); | 651 mi.Click+=new EventHandler(undoMenu_Click); |
651 menuItemsUndo[i] = mi; | 652 menuItemsUndo[i] = mi; |
656 | 657 |
657 if (menuItemsUndo!=null && menuItemsUndo[0]!=null) | 658 if (menuItemsUndo!=null && menuItemsUndo[0]!=null) |
658 { | 659 { |
659 bttnUndo.ToolTipText = menuItemsUndo[0].Text; | 660 bttnUndo.ToolTipText = menuItemsUndo[0].Text; |
660 undoMenu.MenuItems.AddRange(menuItemsUndo); | 661 undoMenu.MenuItems.AddRange(menuItemsUndo); |
661 }*/ | 662 }*/ |
662 //TODO: Put above code back when we have a dropdown version of the undo button | 663 //TODO: Put above code back when we have a dropdown version of the undo button |
663 if (undoLength > 0) | 664 if (undoLength > 0) |
664 { | 665 { |
665 //undoMenuButton.Tooltip = CommandStack.PeekUndoCommand().UndoDescription; | 666 //undoMenuButton.Tooltip = CommandStack.PeekUndoCommand().UndoDescription; |
666 } | 667 } |
667 | 668 |
668 saveArmyButton.Sensitive = commandStack.IsDirty() && WarFoundryCore.CurrentArmy!=null && CanSave(); | 669 saveArmyButton.Sensitive = commandStack.IsDirty() && WarFoundryCore.CurrentArmy!=null && CanSave(); |
669 miSaveArmy.Sensitive = commandStack.IsDirty() && WarFoundryCore.CurrentArmy!=null && CanSave(); | 670 miSaveArmy.Sensitive = commandStack.IsDirty() && WarFoundryCore.CurrentArmy!=null && CanSave(); |
670 } | 671 } |
671 | 672 |
672 private bool CanSave() | 673 private bool CanSave() |
673 { | 674 { |
674 return loadedArmyPath!=null && WarFoundryCore.CurrentArmy!=null && WarFoundrySaver.GetSaver()!=null; | 675 return loadedArmyPath!=null && WarFoundryCore.CurrentArmy!=null && WarFoundrySaver.GetSaver()!=null; |
675 } | 676 } |
676 | 677 |
678 { | 679 { |
679 if (CanSave()) | 680 if (CanSave()) |
680 { | 681 { |
681 return SaveCurrentArmy(); | 682 return SaveCurrentArmy(); |
682 } | 683 } |
683 else | 684 else |
684 { | 685 { |
685 return SaveCurrentArmyAs(); | 686 return SaveCurrentArmyAs(); |
686 } | 687 } |
687 } | 688 } |
688 | 689 |
689 private bool OpenArmy() | 690 private bool OpenArmy() |
690 { | 691 { |
691 //TODO: Open dialog for file selection then open army | 692 //TODO: Open dialog for file selection then open army |
692 bool success = false; | 693 bool success = false; |
693 loadedArmyPath = null;//TODO: Set loaded file path | 694 loadedArmyPath = null;//TODO: Set loaded file path |
695 } | 696 } |
696 | 697 |
697 private bool SaveCurrentArmy() | 698 private bool SaveCurrentArmy() |
698 { | 699 { |
699 bool success = false; | 700 bool success = false; |
700 | 701 |
701 if (CanSave()) | 702 if (CanSave()) |
702 { | 703 { |
703 try | 704 try |
704 { | 705 { |
705 if (WarFoundrySaver.GetSaver().Save(WarFoundryCore.CurrentArmy, loadedArmyPath)) | 706 if (WarFoundrySaver.GetSaver().Save(WarFoundryCore.CurrentArmy, loadedArmyPath)) |
715 logger.Error("Saving army failed", ex); | 716 logger.Error("Saving army failed", ex); |
716 MessageDialog md = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "An error occured while saving the army. Please check the logs for details on what failed"); | 717 MessageDialog md = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "An error occured while saving the army. Please check the logs for details on what failed"); |
717 md.Show(); | 718 md.Show(); |
718 } | 719 } |
719 } | 720 } |
720 | 721 |
721 return success; | 722 return success; |
722 } | 723 } |
723 | 724 |
724 private bool SaveCurrentArmyAs() | 725 private bool SaveCurrentArmyAs() |
725 { | 726 { |
726 /*if (saveArmyDialog.Filter == "") | 727 bool success = false; |
727 { | 728 |
728 string savePath = UserDataPath+Constants.DirectoryString+"armies"+Constants.DirectoryString; | 729 if (WarFoundrySaver.GetSaver().Save(WarFoundryCore.CurrentArmy, Constants.UserDataPath+Constants.DirectoryString+"test.army")) |
729 | 730 { |
730 if (!Directory.Exists(savePath)) | 731 miSaveArmy.Sensitive = false; |
731 { | 732 //bttnSaveArmy.Sensitive = false; |
732 Directory.CreateDirectory(savePath); | 733 CommandStack.setCleanMark(); |
733 } | 734 loadedArmyPath = Constants.UserDataPath+Constants.DirectoryString+"test.army"; |
734 | 735 success = true; |
735 saveArmyDialog.InitialDirectory = savePath; | |
736 saveArmyDialog.Filter = Translation.GetTranslation("armyFileFilter")+"|*.army"; | |
737 saveArmyDialog.Title = Translation.GetTranslation("saveArmyDialog"); | |
738 } | |
739 | |
740 DialogResult dr = saveArmyDialog.ShowDialog(this); | |
741 | |
742 if (dr == DialogResult.OK) | |
743 { | |
744 if (WarFoundrySaver.GetSaver().Save(WarFoundryCore.CurrentArmy, saveArmyDialog.FileName)) | |
745 { | |
746 miSaveArmy.Enabled = false; | |
747 bttnSaveArmy.Enabled = false; | |
748 CommandStack.setCleanMark(); | |
749 loadedArmyPath = saveArmyDialog.FileName; | |
750 return true; | |
751 } | |
752 else | |
753 { | |
754 MessageBox.Show(this, Translation.GetTranslation("SaveFailed"), Translation.GetTranslation("SaveFailedTitle"), MessageBoxButtons.OK, MessageBoxIcon.Error); | |
755 return false; | |
756 } | |
757 } | 736 } |
758 else | 737 else |
759 { | 738 { |
760 return false; | 739 //MessageBox.Show(this, Translation.GetTranslation("SaveFailed"), Translation.GetTranslation("SaveFailedTitle"), MessageBoxButtons.OK, MessageBoxIcon.Error); |
761 }*/ | 740 } |
762 return false; | 741 |
763 } | 742 return success; |
764 | 743 } |
744 | |
765 private bool CloseCurrentArmy() | 745 private bool CloseCurrentArmy() |
766 { | 746 { |
767 if (WarFoundryCore.CurrentArmy!=null) | 747 if (WarFoundryCore.CurrentArmy!=null) |
768 { | 748 { |
769 bool canClose = false; | 749 bool canClose = false; |
770 | 750 |
771 if (CommandStack.IsDirty()) | 751 if (CommandStack.IsDirty()) |
772 { | 752 { |
773 MessageDialog dia = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Question, ButtonsType.YesNo | ButtonsType.Cancel, "The army \""+WarFoundryCore.CurrentArmy.Name+"\" has been modified.\r\nSave changes before closing army?"); | 753 MessageDialog dia = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Question, ButtonsType.YesNo | ButtonsType.Cancel, "The army \""+WarFoundryCore.CurrentArmy.Name+"\" has been modified.\r\nSave changes before closing army?"); |
774 ResponseType dr = (ResponseType)dia.Run(); | 754 ResponseType dr = (ResponseType)dia.Run(); |
775 | 755 |
776 if (dr == ResponseType.Yes) | 756 if (dr == ResponseType.Yes) |
777 { | 757 { |
778 //They want to save so try to save it or prompt for save as | 758 //They want to save so try to save it or prompt for save as |
787 else | 767 else |
788 { | 768 { |
789 //Assume cancel or close with the X button | 769 //Assume cancel or close with the X button |
790 canClose = false; | 770 canClose = false; |
791 } | 771 } |
792 | 772 |
793 dia.Dispose(); | 773 dia.Dispose(); |
794 } | 774 } |
795 else | 775 else |
796 { | 776 { |
797 //Nothing has changed so we can safely close | 777 //Nothing has changed so we can safely close |
820 { | 800 { |
821 logger.Debug("Create new army"); | 801 logger.Debug("Create new army"); |
822 FrmNewArmy newArmy = new FrmNewArmy(WarFoundryCore.CurrentGameSystem); | 802 FrmNewArmy newArmy = new FrmNewArmy(WarFoundryCore.CurrentGameSystem); |
823 ResponseType type = (ResponseType)newArmy.Run(); | 803 ResponseType type = (ResponseType)newArmy.Run(); |
824 newArmy.Hide(); | 804 newArmy.Hide(); |
825 | 805 |
826 if (type == ResponseType.Ok) | 806 if (type == ResponseType.Ok) |
827 { | 807 { |
828 if (CloseCurrentArmy()) | 808 if (CloseCurrentArmy()) |
829 { | 809 { |
830 WarFoundryCore.CurrentArmy = new Army(newArmy.SelectedRace, newArmy.ArmyName, newArmy.ArmySize); | 810 WarFoundryCore.CurrentArmy = new Army(newArmy.SelectedRace, newArmy.ArmyName, newArmy.ArmySize); |
832 } | 812 } |
833 else | 813 else |
834 { | 814 { |
835 logger.Debug("Create new army cancelled"); | 815 logger.Debug("Create new army cancelled"); |
836 } | 816 } |
837 | 817 |
838 newArmy.Destroy(); | 818 newArmy.Destroy(); |
839 } | 819 } |
840 | 820 |
841 private void ChangeCurrentGameSystem() | 821 private void ChangeCurrentGameSystem() |
842 { | 822 { |
843 logger.Debug("Changing game system"); | 823 logger.Debug("Changing game system"); |
844 FrmChangeGameSystem dialog = new FrmChangeGameSystem(this); | 824 FrmChangeGameSystem dialog = new FrmChangeGameSystem(this); |
845 ResponseType type = (ResponseType)dialog.Run(); | 825 ResponseType type = (ResponseType)dialog.Run(); |
846 dialog.Hide(); | 826 dialog.Hide(); |
847 | 827 |
848 if (type == ResponseType.Ok) | 828 if (type == ResponseType.Ok) |
849 { | 829 { |
850 WarFoundryCore.CurrentGameSystem = dialog.SelectedSystem; | 830 WarFoundryCore.CurrentGameSystem = dialog.SelectedSystem; |
851 } | 831 } |
852 else | 832 else |
853 { | 833 { |
854 logger.Debug("Game system change cancelled"); | 834 logger.Debug("Game system change cancelled"); |
855 } | 835 } |
856 | 836 |
857 dialog.Destroy(); | 837 dialog.Destroy(); |
858 } | 838 } |
859 | 839 |
860 protected virtual void undoTBButtonActivated (object sender, System.EventArgs e) | 840 protected virtual void undoTBButtonActivated (object sender, System.EventArgs e) |
861 { | 841 { |
886 { | 866 { |
887 TreeModel model = treeUnits.Model; | 867 TreeModel model = treeUnits.Model; |
888 TreeIter iter; | 868 TreeIter iter; |
889 model.GetIter(out iter, args.Path); | 869 model.GetIter(out iter, args.Path); |
890 object obj = model.GetValue(iter, 0); | 870 object obj = model.GetValue(iter, 0); |
891 | 871 |
892 if (obj is IBBoard.WarFoundry.API.Objects.Unit) | 872 if (obj is IBBoard.WarFoundry.API.Objects.Unit) |
893 { | 873 { |
894 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)obj; | 874 IBBoard.WarFoundry.API.Objects.Unit unit = (IBBoard.WarFoundry.API.Objects.Unit)obj; |
895 | 875 |
896 UnitDisplayWidget widget; | 876 UnitDisplayWidget widget; |
897 unitToWidgetMap.TryGetValue(unit, out widget); | 877 unitToWidgetMap.TryGetValue(unit, out widget); |
898 | 878 |
899 if (widget!=null) | 879 if (widget!=null) |
900 { | 880 { |
901 logger.DebugFormat("Selecting existing page for "+unit.Name); | 881 logger.DebugFormat("Selecting existing page for "+unit.Name); |
902 unitsNotebook.Page = unitsNotebook.PageNum(widget); | 882 unitsNotebook.Page = unitsNotebook.PageNum(widget); |
903 } | 883 } |