# HG changeset patch # User IBBoard # Date 1282906558 0 # Node ID c3415c6df5517a15bd1f3a428c89389ff4053aee # Parent 7bba99c368c829c1eec42d4336b67233a03822a3 Re #60: Add UI to add/remove/edit weapons in GTK * Handle updating of the equipment list on add/remove * Move to a ListStore so that we don't get indentation diff -r 7bba99c368c8 -r c3415c6df551 Widgets/UnitDisplayWidget.cs --- a/Widgets/UnitDisplayWidget.cs Thu Aug 26 19:34:57 2010 +0000 +++ b/Widgets/UnitDisplayWidget.cs Fri Aug 27 10:55:58 2010 +0000 @@ -12,6 +12,7 @@ using IBBoard.WarFoundry.GUI.GTK.UIControl; using IBBoard.WarFoundry.API.Objects; using IBBoard.WarFoundry.API.Util; +using IBBoard.GtkSharp; namespace IBBoard.WarFoundry.GTK.Widgets { @@ -38,8 +39,9 @@ } unitSize.SetRange(unit.UnitType.MinSize, max); - unit.NameChanged+= new StringValChangedDelegate(UnitNameChanged); - unit.UnitSizeChanged+= new IntValChangedDelegate(UnitSizeChanged); + unit.NameChanged += new StringValChangedDelegate(UnitNameChanged); + unit.UnitSizeChanged += new IntValChangedDelegate(UnitSizeChanged); + unit.UnitEquipmentAmountChanged += HandleUnitUnitEquipmentAmountChanged; SetStats(); SetWeapons(); } @@ -91,8 +93,8 @@ CellRendererText renderer = new CellRendererText(); equipmentList.AppendColumn("", renderer, new TreeCellDataFunc(RenderEquipmentLine)); + ListStore model = new ListStore(typeof(UnitEquipmentItem)); - TreeStore model = new TreeStore(typeof(UnitEquipmentItem)); foreach (UnitEquipmentItem item in unit.GetEquipment()) { model.AppendValues(item); @@ -148,7 +150,6 @@ amountString = Translation.GetTranslation("equipmentChoiceAmountPercentage", "{0}% ({1})", amount, number); } } - else { amountString = Translation.GetTranslation("equipmentChoiceAmountNumber", "{0}", amount); @@ -172,6 +173,21 @@ unitSize.Value = newValue; } + private void HandleUnitUnitEquipmentAmountChanged(WarFoundryObject obj, double oldValue, double newValue) + { + if (oldValue == 0) + { + ((ListStore)equipmentList.Model).AppendValues(obj); + } + else if (newValue == 0) + { + TreeIter treeIter = TreeUtils.GetItemIter(equipmentList, obj); + ((ListStore)equipmentList.Model).Remove(ref treeIter); + } + + equipmentList.QueueDraw(); + } + protected virtual void OnUnitSizeFocusOut (object o, Gtk.FocusOutEventArgs args) { SetNewUnitSize();