Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.GTK
diff UIControl/AddEquipmentUIControl.cs @ 63:c2d79b4209e3
* FrmAddEquipment.cs: Re #60: Add UI to add/remove/edit weapons in
GTK
* Cache more values in the controller so that we don't rely on the UI
as a the model/data store
* Move enable/disable of amount controls to controller (assumes
minimum numeric and percentage, so implementation has its own custom
implementation to handle "Equip All")
* AddEquipmentUIControl.cs:
* IAddEquipmentUI.cs:
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 30 Aug 2010 19:44:35 +0000 |
parents | f733073967a2 |
children | e3fe48c4d794 |
line wrap: on
line diff
--- a/UIControl/AddEquipmentUIControl.cs Sun Aug 29 15:44:20 2010 +0000 +++ b/UIControl/AddEquipmentUIControl.cs Mon Aug 30 19:44:35 2010 +0000 @@ -13,9 +13,15 @@ { public class AddEquipmentUIControl { - private Unit unit; private CommandStack commandStack; private IAddEquipmentUI ui; + private Unit unit; + private UnitEquipmentItem equipItem; + private double minPercentage, maxPercentage; + private int minNumber, maxNumber; + private bool isRatioAmount; + private double equipmentAmount; + public AddEquipmentUIControl(Unit unit, CommandStack commandStack) { @@ -38,25 +44,24 @@ private void HandleUnitEquipmentAmountChanged() { - ui.SetOkayEnabledState(ui.SelectedUnitEquipmentItem != null && HasNonZeroEquipmentAmount()); + ui.SetOkayEnabledState(equipItem != null && HasNonZeroEquipmentAmount()); + isRatioAmount = ui.IsRatioEquipmentAmount; - if (ui.IsRatioEquipmentAmount) + if (isRatioAmount) { - SetEquipmentAmountsFromPercentage(ui.EquipmentPercentageAmount); + double equipmentAmount = ui.EquipmentPercentageAmount; + SetEquipmentAmountsFromPercentage(equipmentAmount); } else { - SetEquipmentAmountsFromNumber(ui.EquipmentNumericAmount); + int equipmentIntAmount = ui.EquipmentNumericAmount; + equipmentAmount = equipmentIntAmount; + SetEquipmentAmountsFromNumber(equipmentIntAmount); } } private void SetEquipmentAmountsFromPercentage(double equipAmount) - { - UnitEquipmentItem currEquipItem = ui.SelectedUnitEquipmentItem; - - double maxPercentage = GetMaxPercentageLimit(currEquipItem); - double minPercentage = GetMinPercentageLimit(currEquipItem); - + { if (equipAmount > maxPercentage) { string percentageTooLarge = Translation.GetTranslation("equipPercentageTooLarge", "the current percentage ({0}%) was larger than the maximum for the equipment item ({1}%) - the maximum value will be used instead", equipAmount, maxPercentage); @@ -72,22 +77,18 @@ equipAmount = minPercentage; } - ui.EquipmentNumericAmount = CalculateNumericValueFromPercentage(equipAmount, currEquipItem); + ui.EquipmentNumericAmount = CalculateNumericValueFromPercentage(equipAmount); ui.EquipmentPercentageAmount = equipAmount; } - private int CalculateNumericValueFromPercentage(double percent, UnitEquipmentItem equip) + private int CalculateNumericValueFromPercentage(double percent) { - int calcedAmount = (int)CustomMath.IBBMath.Round((double)(unit.Size * (percent / 100)), equip.RoundNumberUp); - return Math.Min(Math.Max(calcedAmount, GetMinNumericLimit(equip)), GetMaxNumericLimit(equip)); + int calcedAmount = (int)CustomMath.IBBMath.Round((unit.Size * (percent / 100.0)), equipItem.RoundNumberUp); + return Math.Min(Math.Max(calcedAmount, minNumber), maxNumber); } private void SetEquipmentAmountsFromNumber(int equipAmount) - { - UnitEquipmentItem currEquipItem = ui.SelectedUnitEquipmentItem; - int maxNumber = GetMaxNumericLimit(currEquipItem); - int minNumber = GetMinNumericLimit(currEquipItem); - + { if (equipAmount > maxNumber) { string amountTooLarge = Translation.GetTranslation("equipNumberTooLarge", "the current amount ({0}) was larger than the maximum for the equipment item ({1}) - the maximum value will be used instead", equipAmount, maxNumber); @@ -103,14 +104,14 @@ equipAmount = minNumber; } - ui.EquipmentPercentageAmount = CalcualtePercentageValueFromNumber(equipAmount, currEquipItem); + ui.EquipmentPercentageAmount = CalcualtePercentageValueFromNumber(equipAmount); ui.EquipmentNumericAmount = equipAmount; } - private double CalcualtePercentageValueFromNumber(int number, UnitEquipmentItem equip) + private double CalcualtePercentageValueFromNumber(int number) { double calcedAmount = RoundPercentage(CustomMath.IBBMath.Percentage(number, unit.Size)); - return Math.Min(Math.Max(calcedAmount, GetMinPercentageLimit(equip)), GetMaxPercentageLimit(equip)); + return Math.Min(Math.Max(calcedAmount, minPercentage), maxPercentage); } //TODO Make abstract @@ -121,25 +122,37 @@ private void HandleUiUnitEquipmentItemChoiceChanged(UnitEquipmentItem equip) { + equipItem = equip; + if (equip != null) { bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip); - double maxPercent = GetMaxPercentageLimit(equip); - double minPercent = GetMinPercentageLimit(equip); - int maxNumber = GetMaxNumericLimit(equip); - int minNumber = GetMinNumericLimit(equip); + maxPercentage = GetMaxPercentageLimit(equip); + minPercentage = GetMinPercentageLimit(equip); + maxNumber = GetMaxNumericLimit(equip); + minNumber = GetMinNumericLimit(equip); - ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercent, maxPercent, minNumber, maxNumber); + ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercentage, maxPercentage, minNumber, maxNumber); ui.SetUnitEquipmentLimitsEnabled(true); ui.SetOkayEnabledState(HasNonZeroEquipmentAmount()); + SetEquipmentAmountControlEnabledStates(equipIsRatioLimit); } else { - ui.SetUnitEquipmentLimits(true, 0, 0, 0, 0); + maxPercentage = minPercentage = 0; + maxNumber = minNumber = 0; + ui.SetUnitEquipmentLimits(false, minPercentage, maxPercentage, minNumber, maxNumber); ui.SetUnitEquipmentLimitsEnabled(false); ui.SetOkayEnabledState(false); } + } + + private void SetEquipmentAmountControlEnabledStates(bool ratioLimited) + { + ui.SetNumericAmountEnabledState(!ratioLimited); + ui.SetPercentageAmountEnabledState(true); } + private double GetMaxPercentageLimit(UnitEquipmentItem equip) { double maxPercent = RoundPercentage(UnitEquipmentUtil.GetMaxEquipmentPercentage(unit, equip)); @@ -167,7 +180,7 @@ { bool nonZero; - if (ui.IsRatioEquipmentAmount) + if (isRatioAmount) { nonZero = (ui.EquipmentPercentageAmount > 0); } @@ -190,16 +203,14 @@ bool okayed = ui.ShowControl(); if (okayed) - { - UnitEquipmentItem equipItem = ui.SelectedUnitEquipmentItem; - - if (ui.IsRatioEquipmentAmount) + { + if (isRatioAmount) { - commandStack.Execute(new SetUnitEquipmentRatioAmountCommand(unit, equipItem, ui.EquipmentPercentageAmount)); + commandStack.Execute(new SetUnitEquipmentRatioAmountCommand(unit, equipItem, equipmentAmount)); } else { - commandStack.Execute(new SetUnitEquipmentNumericAmountCommand(unit, equipItem, ui.EquipmentNumericAmount)); + commandStack.Execute(new SetUnitEquipmentNumericAmountCommand(unit, equipItem, (int)equipmentAmount)); } }