Mercurial > repos > IBBoard.WarFoundry.GUI.GTK
diff UIControl/AbstractBaseEquipmentUIControl.cs @ 70:4b82515586ac
Re #60: Add UI to add/remove/edit weapons in GTK
* Fix widget enabling/disabling (sometimes enabling ratio input for numeric limit)
* Correct behaviour of Edit dialog (setting wrong value on edit)
* Add setting of limits based on specific equipment item to base dialog controller
* Make sure that we catch all radio button click events from Edit dialog
* Add ability to ignore and listen to widgets to make sure that changes don't cascade
TODO: See if code can be tidied up and common classes created
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 06 Nov 2010 17:03:13 +0000 |
parents | 3b4a646b4054 |
children | fac0636ae13b |
line wrap: on
line diff
--- a/UIControl/AbstractBaseEquipmentUIControl.cs Sat Nov 06 11:44:26 2010 +0000 +++ b/UIControl/AbstractBaseEquipmentUIControl.cs Sat Nov 06 17:03:13 2010 +0000 @@ -33,9 +33,10 @@ ui = CreateEquipmentUI(); ui.SetUnitEquipmentLimitsEnabled(false); ui.SetOkayEnabledState(false); - ui.UnitEquipmentAmountChanged += SetUnitEquipmentValues; - ui.UnitEquipmentAmountTypeChanged += SetUnitEquipmentValues; CompleteUISetup(); + ui.UnitEquipmentAmountChanged += HandleUnitEquipmentAmountChanged; + ui.UnitEquipmentAmountTypeChanged += HandleUnitEquipmentAmountChanged; + ui.ListenToWidgets(); } /// <summary> @@ -58,29 +59,83 @@ protected void HandleUnitEquipmentAmountChanged() { - SetUnitEquipmentValues(); + SetUnitEquipmentValuesFromUI(); } + protected void SetUnitEquipmentLimits(UnitEquipmentItem equip) + { + ui.IgnoreWidgets(); + + if (equip != null) + { + bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip); + maxPercentage = GetMaxPercentageLimit(equip); + minPercentage = GetMinPercentageLimit(equip); + maxNumber = GetMaxNumericLimit(equip); + minNumber = GetMinNumericLimit(equip); + + ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercentage, maxPercentage, minNumber, maxNumber); + ui.SetUnitEquipmentLimitsEnabled(true); + ui.SetOkayEnabledState(HasNonZeroEquipmentAmount()); + SetEquipmentAmountControlEnabledStates(); + } + else + { + maxPercentage = minPercentage = 0; + maxNumber = minNumber = 0; + ui.SetUnitEquipmentLimits(false, minPercentage, maxPercentage, minNumber, maxNumber); + ui.SetUnitEquipmentLimitsEnabled(false); + ui.SetOkayEnabledState(false); + } + + ui.ListenToWidgets(); + } + + protected void SetUnitEquipmentValuesFromEquipment(UnitEquipmentItem equip) + { + isRatioAmount = UnitEquipmentUtil.GetEquipmentAmountIsRatio(unit, equip); + equipmentAmount = UnitEquipmentUtil.GetEquipmentAmount(unit, equip); + SetUnitEquipmentValues(); + SetEquipmentAmountControlEnabledStates(); + } + /// <summary> /// Sets the unit equipment values on the UI /// </summary> - protected void SetUnitEquipmentValues() - { - ui.SetOkayEnabledState(HasNonZeroEquipmentAmount()); + protected void SetUnitEquipmentValuesFromUI() + { isRatioAmount = ui.IsRatioEquipmentAmount; if (isRatioAmount) { equipmentAmount = ui.EquipmentPercentageAmount; - SetEquipmentAmountsFromPercentage(equipmentAmount); } else { int equipmentIntAmount = ui.EquipmentNumericAmount; equipmentAmount = equipmentIntAmount; + } + + SetUnitEquipmentValues(); + } + + private void SetUnitEquipmentValues() + { + ui.IgnoreWidgets(); + + if (isRatioAmount) + { + SetEquipmentAmountsFromPercentage(equipmentAmount); + } + else + { + int equipmentIntAmount = (int)equipmentAmount; SetEquipmentAmountsFromNumber(equipmentIntAmount); } + + ui.SetOkayEnabledState(equipmentAmount != 0); + ui.ListenToWidgets(); } private void SetEquipmentAmountsFromPercentage(double equipAmount)