# HG changeset patch # User IBBoard # Date 1282920288 0 # Node ID 04c0f6a7625c02266a3926f3699172e52b09370c # Parent c3415c6df5517a15bd1f3a428c89389ff4053aee Re #60: Add UI to add/remove/edit weapons in GTK * Implement Remove button * Hack "code-behind" file again to make things work, until MD bug is fixed diff -r c3415c6df551 -r 04c0f6a7625c Widgets/UnitDisplayWidget.cs --- a/Widgets/UnitDisplayWidget.cs Fri Aug 27 10:55:58 2010 +0000 +++ b/Widgets/UnitDisplayWidget.cs Fri Aug 27 14:44:48 2010 +0000 @@ -13,13 +13,16 @@ using IBBoard.WarFoundry.API.Objects; using IBBoard.WarFoundry.API.Util; using IBBoard.GtkSharp; +using log4net; namespace IBBoard.WarFoundry.GTK.Widgets { [System.ComponentModel.Category("WarFoundry GTK# GUI")] [System.ComponentModel.ToolboxItem(true)] public partial class UnitDisplayWidget : Gtk.Bin - { + { + private static ILog log = LogManager.GetLogger(typeof(UnitDisplayWidget)); + private WFObjects.Unit unit; private CommandStack stack; @@ -30,22 +33,35 @@ unit = sourceUnit; unitName.Text = unit.Name; unitSize.Value = unit.Size; + int maxSize = (unit.UnitType.MaxSize == WarFoundryCore.INFINITY ? int.MaxValue : unit.UnitType.MaxSize); + int minSize = unit.UnitType.MinSize; + unitSize.SetRange(minSize, maxSize); + unitSize.Sensitive = (maxSize != minSize); notesView.Buffer.Text = unit.UnitType.Notes; - double max = unit.UnitType.MaxSize; - - if (max == -1) - { - max = double.MaxValue; - } - - unitSize.SetRange(unit.UnitType.MinSize, max); - unit.NameChanged += new StringValChangedDelegate(UnitNameChanged); - unit.UnitSizeChanged += new IntValChangedDelegate(UnitSizeChanged); + unit.NameChanged += UnitNameChanged; + unit.UnitSizeChanged += UnitSizeChanged; unit.UnitEquipmentAmountChanged += HandleUnitUnitEquipmentAmountChanged; + equipmentList.Selection.Changed += HandleEquipmentListSelectionChanged; SetStats(); SetWeapons(); } + private void HandleEquipmentListSelectionChanged (object sender, EventArgs e) + { + SetButtonsEnabledState(); + } + private void SetButtonsEnabledState() + { + UnitEquipmentItem equipItem = GetSelectedEquipmentItem(); + bttnReplaceEquipment.Sensitive = (equipItem != null && equipItem.HasAlternatives()); + bttnEditEquipment.Sensitive = (equipItem != null); + bttnRemoveEquipment.Sensitive = (equipItem != null && !equipItem.IsRequired); + } + private UnitEquipmentItem GetSelectedEquipmentItem() + { + return (UnitEquipmentItem)TreeUtils.GetSelectedItem(equipmentList); + } + private void SetStats() { CellRendererText renderer = new CellRendererText(); @@ -244,5 +260,17 @@ AddEquipmentUIControl addEquipment = new AddEquipmentUIControl(unit, stack); addEquipment.Show(); } + + protected virtual void HandleRemoveButtonActivated(object sender, System.EventArgs e) + { + UnitEquipmentItem item = GetSelectedEquipmentItem(); + log.Debug("Remove "+item); + + if (item != null) + { + SetUnitEquipmentNumericAmountCommand cmd = new SetUnitEquipmentNumericAmountCommand(unit, item, 0); + stack.Execute(cmd); + } + } } } diff -r c3415c6df551 -r 04c0f6a7625c gtk-gui/IBBoard.WarFoundry.GTK.Widgets.UnitDisplayWidget.cs --- a/gtk-gui/IBBoard.WarFoundry.GTK.Widgets.UnitDisplayWidget.cs Fri Aug 27 10:55:58 2010 +0000 +++ b/gtk-gui/IBBoard.WarFoundry.GTK.Widgets.UnitDisplayWidget.cs Fri Aug 27 14:44:48 2010 +0000 @@ -124,6 +124,7 @@ this.equipmentList = new global::Gtk.NodeView(); this.equipmentList.CanFocus = true; this.equipmentList.Name = "equipmentList"; + this.equipmentList.HeadersVisible = false; this.GtkScrolledWindow2.Add(this.equipmentList); this.table1.Add(this.GtkScrolledWindow2); global::Gtk.Table.TableChild w9 = ((global::Gtk.Table.TableChild)(this.table1[this.GtkScrolledWindow2])); @@ -227,6 +228,7 @@ this.unitSize.FocusOutEvent += new global::Gtk.FocusOutEventHandler(this.OnUnitSizeFocusOut); this.unitSize.KeyPressEvent += new global::Gtk.KeyPressEventHandler(this.OnUnitSizeKeyPress); this.bttnAddEquipment.Clicked += new global::System.EventHandler(this.OnBttnAddEquipmentClicked); + this.bttnRemoveEquipment.Clicked += new global::System.EventHandler(this.HandleRemoveButtonActivated); } } } diff -r c3415c6df551 -r 04c0f6a7625c gtk-gui/gui.stetic --- a/gtk-gui/gui.stetic Fri Aug 27 10:55:58 2010 +0000 +++ b/gtk-gui/gui.stetic Fri Aug 27 14:44:48 2010 +0000 @@ -894,6 +894,7 @@ + False True TextOnly Edit @@ -909,6 +910,7 @@ + False True TextOnly Replace @@ -924,10 +926,12 @@ + False True TextOnly Remove True + 3 @@ -1117,7 +1121,6 @@ True - True True True True