Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.GTK
diff 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 |
line wrap: on
line diff
--- a/FrmMainWindow.cs Tue Jul 17 20:46:44 2012 +0100 +++ b/FrmMainWindow.cs Sun Aug 05 21:01:00 2012 +0100 @@ -240,7 +240,7 @@ { foreach (FileLoadFailure failure in failures) { - logger.Warn("Failed to load " + failure.FailedFile.FullName + ": " + failure.Message); + logger.Warn("Failed to load " + failure.FailedFile.Name + ": " + failure.Message); } } @@ -331,8 +331,7 @@ treeUnits.ExpandToPath(path); } } - } - while (model.IterNext(ref iter)); + } while (model.IterNext(ref iter)); } private void OnUnitRemoved(WarFoundryObject obj) @@ -373,8 +372,7 @@ removed = true; break; } - } - while (model.IterNext(ref innerIter)); + } while (model.IterNext(ref innerIter)); if (removed) { @@ -382,8 +380,7 @@ } } } - } - while (model.IterNext(ref iter)); + } while (model.IterNext(ref iter)); } private void RemoveUnitTab(WFObjects.Unit unit) @@ -1177,15 +1174,26 @@ protected virtual void OnTreeUnitsPopupMenu(object o, Gtk.PopupMenuArgs args) { object selectedItem = TreeUtils.GetSelectedItem(treeUnits); + WFObjects.Unit theUnit = selectedItem as WFObjects.Unit; - if (selectedItem is WFObjects.Unit) + if (theUnit != null) { Menu menu = new Menu(); ImageMenuItem delete = new ImageMenuItem(Translation.GetTranslation("menuRemoveUnit", "remove unit")); delete.Image = new Gtk.Image(Stock.Delete, IconSize.Menu); delete.Activated += new EventHandler(OnUnitDelete); - delete.Data["unit"] = selectedItem; + delete.Data["unit"] = theUnit; menu.Append(delete); + + if (theUnit.UnitType.ContainedUnitTypes.Length > 0) + { + ImageMenuItem addContained = new ImageMenuItem(Translation.GetTranslation("menuAddUnit", "add unit")); + addContained.Image = new Gtk.Image(Stock.Add, IconSize.Menu); + addContained.Activated += new EventHandler(OnSubUnitAdd); + addContained.Data["unit"] = theUnit; + menu.Append(addContained); + } + menu.ShowAll(); menu.Popup(); } @@ -1197,6 +1205,24 @@ commandStack.Execute(command); } + void OnSubUnitAdd(object sender, EventArgs e) + { + WFObjects.Unit unit = (WFObjects.Unit)((ImageMenuItem)sender).Data["unit"]; + logger.DebugFormat("Show FrmNewUnit for contained units of {0}", unit.Name); + FrmNewUnit newUnit = new FrmNewUnit(unit, WarFoundryCore.CurrentArmy); + ResponseType response = (ResponseType)newUnit.Run(); + newUnit.Hide(); + + if (response == ResponseType.Ok) + { + CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnit.SelectedUnit, WarFoundryCore.CurrentArmy.GetCategory(newUnit.SelectedUnit.MainCategory), unit); + commandStack.Execute(cmd); + ShowUnitWidget(cmd.Unit); + } + + newUnit.Dispose(); + } + [GLib.ConnectBefore] protected virtual void UnitTreeButtonPressed(object o, Gtk.ButtonPressEventArgs args)