Mercurial > repos > IBBoard.WarFoundry.GUI.GTK
comparison FrmMainWindow.cs @ 162:354c1d2ad086
Re #423: Support nested units in GTK UI
* Add "add unit" context menu to tree
* Add quick hacks to unit dialog to work with both nesting and direct category units
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 05 Aug 2012 21:01:00 +0100 |
parents | 89e2442bbb60 |
children | 219340630150 |
comparison
equal
deleted
inserted
replaced
161:4149dbdf042f | 162:354c1d2ad086 |
---|---|
238 | 238 |
239 private void FileLoadingFinished(List<FileLoadFailure> failures) | 239 private void FileLoadingFinished(List<FileLoadFailure> failures) |
240 { | 240 { |
241 foreach (FileLoadFailure failure in failures) | 241 foreach (FileLoadFailure failure in failures) |
242 { | 242 { |
243 logger.Warn("Failed to load " + failure.FailedFile.FullName + ": " + failure.Message); | 243 logger.Warn("Failed to load " + failure.FailedFile.Name + ": " + failure.Message); |
244 } | 244 } |
245 } | 245 } |
246 | 246 |
247 private void RenderCategoryTreeObjectName(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) | 247 private void RenderCategoryTreeObjectName(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) |
248 { | 248 { |
329 model.AppendValues(iter, unit); | 329 model.AppendValues(iter, unit); |
330 TreePath path = model.GetPath(iter); | 330 TreePath path = model.GetPath(iter); |
331 treeUnits.ExpandToPath(path); | 331 treeUnits.ExpandToPath(path); |
332 } | 332 } |
333 } | 333 } |
334 } | 334 } while (model.IterNext(ref iter)); |
335 while (model.IterNext(ref iter)); | |
336 } | 335 } |
337 | 336 |
338 private void OnUnitRemoved(WarFoundryObject obj) | 337 private void OnUnitRemoved(WarFoundryObject obj) |
339 { | 338 { |
340 WFObjects.Unit unit = (WFObjects.Unit)obj; | 339 WFObjects.Unit unit = (WFObjects.Unit)obj; |
371 { | 370 { |
372 model.Remove(ref innerIter); | 371 model.Remove(ref innerIter); |
373 removed = true; | 372 removed = true; |
374 break; | 373 break; |
375 } | 374 } |
376 } | 375 } while (model.IterNext(ref innerIter)); |
377 while (model.IterNext(ref innerIter)); | |
378 | 376 |
379 if (removed) | 377 if (removed) |
380 { | 378 { |
381 break; | 379 break; |
382 } | 380 } |
383 } | 381 } |
384 } | 382 } |
385 } | 383 } while (model.IterNext(ref iter)); |
386 while (model.IterNext(ref iter)); | |
387 } | 384 } |
388 | 385 |
389 private void RemoveUnitTab(WFObjects.Unit unit) | 386 private void RemoveUnitTab(WFObjects.Unit unit) |
390 { | 387 { |
391 UnitDisplayWidget widget = DictionaryUtils.GetValue(unitToWidgetMap, unit); | 388 UnitDisplayWidget widget = DictionaryUtils.GetValue(unitToWidgetMap, unit); |
1175 } | 1172 } |
1176 | 1173 |
1177 protected virtual void OnTreeUnitsPopupMenu(object o, Gtk.PopupMenuArgs args) | 1174 protected virtual void OnTreeUnitsPopupMenu(object o, Gtk.PopupMenuArgs args) |
1178 { | 1175 { |
1179 object selectedItem = TreeUtils.GetSelectedItem(treeUnits); | 1176 object selectedItem = TreeUtils.GetSelectedItem(treeUnits); |
1180 | 1177 WFObjects.Unit theUnit = selectedItem as WFObjects.Unit; |
1181 if (selectedItem is WFObjects.Unit) | 1178 |
1179 if (theUnit != null) | |
1182 { | 1180 { |
1183 Menu menu = new Menu(); | 1181 Menu menu = new Menu(); |
1184 ImageMenuItem delete = new ImageMenuItem(Translation.GetTranslation("menuRemoveUnit", "remove unit")); | 1182 ImageMenuItem delete = new ImageMenuItem(Translation.GetTranslation("menuRemoveUnit", "remove unit")); |
1185 delete.Image = new Gtk.Image(Stock.Delete, IconSize.Menu); | 1183 delete.Image = new Gtk.Image(Stock.Delete, IconSize.Menu); |
1186 delete.Activated += new EventHandler(OnUnitDelete); | 1184 delete.Activated += new EventHandler(OnUnitDelete); |
1187 delete.Data["unit"] = selectedItem; | 1185 delete.Data["unit"] = theUnit; |
1188 menu.Append(delete); | 1186 menu.Append(delete); |
1187 | |
1188 if (theUnit.UnitType.ContainedUnitTypes.Length > 0) | |
1189 { | |
1190 ImageMenuItem addContained = new ImageMenuItem(Translation.GetTranslation("menuAddUnit", "add unit")); | |
1191 addContained.Image = new Gtk.Image(Stock.Add, IconSize.Menu); | |
1192 addContained.Activated += new EventHandler(OnSubUnitAdd); | |
1193 addContained.Data["unit"] = theUnit; | |
1194 menu.Append(addContained); | |
1195 } | |
1196 | |
1189 menu.ShowAll(); | 1197 menu.ShowAll(); |
1190 menu.Popup(); | 1198 menu.Popup(); |
1191 } | 1199 } |
1192 } | 1200 } |
1193 | 1201 |
1194 private void OnUnitDelete(object o, EventArgs args) | 1202 private void OnUnitDelete(object o, EventArgs args) |
1195 { | 1203 { |
1196 RemoveUnitCommand command = new RemoveUnitCommand((WFObjects.Unit)((ImageMenuItem)o).Data["unit"]); | 1204 RemoveUnitCommand command = new RemoveUnitCommand((WFObjects.Unit)((ImageMenuItem)o).Data["unit"]); |
1197 commandStack.Execute(command); | 1205 commandStack.Execute(command); |
1206 } | |
1207 | |
1208 void OnSubUnitAdd(object sender, EventArgs e) | |
1209 { | |
1210 WFObjects.Unit unit = (WFObjects.Unit)((ImageMenuItem)sender).Data["unit"]; | |
1211 logger.DebugFormat("Show FrmNewUnit for contained units of {0}", unit.Name); | |
1212 FrmNewUnit newUnit = new FrmNewUnit(unit, WarFoundryCore.CurrentArmy); | |
1213 ResponseType response = (ResponseType)newUnit.Run(); | |
1214 newUnit.Hide(); | |
1215 | |
1216 if (response == ResponseType.Ok) | |
1217 { | |
1218 CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnit.SelectedUnit, WarFoundryCore.CurrentArmy.GetCategory(newUnit.SelectedUnit.MainCategory), unit); | |
1219 commandStack.Execute(cmd); | |
1220 ShowUnitWidget(cmd.Unit); | |
1221 } | |
1222 | |
1223 newUnit.Dispose(); | |
1198 } | 1224 } |
1199 | 1225 |
1200 [GLib.ConnectBefore] | 1226 [GLib.ConnectBefore] |
1201 | 1227 |
1202 protected virtual void UnitTreeButtonPressed(object o, Gtk.ButtonPressEventArgs args) | 1228 protected virtual void UnitTreeButtonPressed(object o, Gtk.ButtonPressEventArgs args) |