Mercurial > repos > IBBoard.WarFoundry.GUI.GTK
comparison UIControl/AddEquipmentUIControl.cs @ 62:f733073967a2
Re #60: Add UI to add/remove/edit weapons in GTK
* Add initial code to keep numeric and percentage in sync
TODO: Allow users to change the non-selected one (e.g. select percentage but set the percentage by incrementing the number)
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 29 Aug 2010 15:44:20 +0000 |
parents | e7ad676a7344 |
children | c2d79b4209e3 |
comparison
equal
deleted
inserted
replaced
61:e7ad676a7344 | 62:f733073967a2 |
---|---|
5 using IBBoard.Commands; | 5 using IBBoard.Commands; |
6 using IBBoard.WarFoundry.API.Objects; | 6 using IBBoard.WarFoundry.API.Objects; |
7 using IBBoard.WarFoundry.API.Util; | 7 using IBBoard.WarFoundry.API.Util; |
8 using IBBoard.WarFoundry.GUI.GTK.UIControl.Interfaces; | 8 using IBBoard.WarFoundry.GUI.GTK.UIControl.Interfaces; |
9 using IBBoard.WarFoundry.API.Commands; | 9 using IBBoard.WarFoundry.API.Commands; |
10 using CustomMath = IBBoard.CustomMath; | |
11 using IBBoard.Lang; | |
10 namespace IBBoard.WarFoundry.GUI.GTK.UIControl | 12 namespace IBBoard.WarFoundry.GUI.GTK.UIControl |
11 { | 13 { |
12 public class AddEquipmentUIControl | 14 public class AddEquipmentUIControl |
13 { | 15 { |
14 private Unit unit; | 16 private Unit unit; |
32 ui.UnitEquipmentItemChoiceChanged += HandleUiUnitEquipmentItemChoiceChanged; | 34 ui.UnitEquipmentItemChoiceChanged += HandleUiUnitEquipmentItemChoiceChanged; |
33 ui.UnitEquipmentAmountChanged += HandleUnitEquipmentAmountChanged; | 35 ui.UnitEquipmentAmountChanged += HandleUnitEquipmentAmountChanged; |
34 ui.UnitEquipmentAmountTypeChanged += HandleUnitEquipmentAmountChanged; | 36 ui.UnitEquipmentAmountTypeChanged += HandleUnitEquipmentAmountChanged; |
35 } | 37 } |
36 | 38 |
37 private void HandleUnitEquipmentAmountChanged () | 39 private void HandleUnitEquipmentAmountChanged() |
38 { | 40 { |
39 ui.SetOkayEnabledState(ui.SelectedUnitEquipmentItem != null && HasNonZeroEquipmentAmount()); | 41 ui.SetOkayEnabledState(ui.SelectedUnitEquipmentItem != null && HasNonZeroEquipmentAmount()); |
40 } | 42 |
41 | 43 if (ui.IsRatioEquipmentAmount) |
44 { | |
45 SetEquipmentAmountsFromPercentage(ui.EquipmentPercentageAmount); | |
46 } | |
47 else | |
48 { | |
49 SetEquipmentAmountsFromNumber(ui.EquipmentNumericAmount); | |
50 } | |
51 } | |
52 | |
53 private void SetEquipmentAmountsFromPercentage(double equipAmount) | |
54 { | |
55 UnitEquipmentItem currEquipItem = ui.SelectedUnitEquipmentItem; | |
56 | |
57 double maxPercentage = GetMaxPercentageLimit(currEquipItem); | |
58 double minPercentage = GetMinPercentageLimit(currEquipItem); | |
59 | |
60 if (equipAmount > maxPercentage) | |
61 { | |
62 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); | |
63 string percentageTooLargeTitle = Translation.GetTranslation("equipPercentageTooLargeTitle", "equipment percentage too large"); | |
64 // MessageBox.Show(ParentForm, percentageTooLarge, percentageTooLargeTitle); | |
65 equipAmount = maxPercentage; | |
66 } | |
67 else if (equipAmount < minPercentage) | |
68 { | |
69 string percentageTooSmall = Translation.GetTranslation("equipPercentageTooSmall", "the current percentage ({0}%) was smaller than the minimum for the equipment item ({1}%) - the minimum value will be used instead", equipAmount, minPercentage); | |
70 string percentageTooSmallTitle = Translation.GetTranslation("equipPercentageTooSmallTitle", "equipment percentage too small"); | |
71 // MessageBox.Show(ParentForm, percentageTooSmall, percentageTooSmallTitle); | |
72 equipAmount = minPercentage; | |
73 } | |
74 | |
75 ui.EquipmentNumericAmount = CalculateNumericValueFromPercentage(equipAmount, currEquipItem); | |
76 ui.EquipmentPercentageAmount = equipAmount; | |
77 } | |
78 | |
79 private int CalculateNumericValueFromPercentage(double percent, UnitEquipmentItem equip) | |
80 { | |
81 int calcedAmount = (int)CustomMath.IBBMath.Round((double)(unit.Size * (percent / 100)), equip.RoundNumberUp); | |
82 return Math.Min(Math.Max(calcedAmount, GetMinNumericLimit(equip)), GetMaxNumericLimit(equip)); | |
83 } | |
84 | |
85 private void SetEquipmentAmountsFromNumber(int equipAmount) | |
86 { | |
87 UnitEquipmentItem currEquipItem = ui.SelectedUnitEquipmentItem; | |
88 int maxNumber = GetMaxNumericLimit(currEquipItem); | |
89 int minNumber = GetMinNumericLimit(currEquipItem); | |
90 | |
91 if (equipAmount > maxNumber) | |
92 { | |
93 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); | |
94 string amountTooLargeTitle = Translation.GetTranslation("equipNumberTooLargeTitle", "equipment amount too large"); | |
95 //MessageBox.Show(ParentForm, amountTooLarge, amountTooLargeTitle); | |
96 equipAmount = maxNumber; | |
97 } | |
98 else if (equipAmount < minNumber) | |
99 { | |
100 string amountTooSmall = Translation.GetTranslation("equipNumberTooSmall", "the current amount ({0}) was smaller than the minimum for the equipment item ({1}) - the minimum value will be used instead", equipAmount, minNumber); | |
101 string amountTooSmallTitle = Translation.GetTranslation("equipNumberTooSmallTitle", "equipment amount too small"); | |
102 //MessageBox.Show(ParentForm, amountTooSmall, amountTooSmallTitle); | |
103 equipAmount = minNumber; | |
104 } | |
105 | |
106 ui.EquipmentPercentageAmount = CalcualtePercentageValueFromNumber(equipAmount, currEquipItem); | |
107 ui.EquipmentNumericAmount = equipAmount; | |
108 } | |
109 | |
110 private double CalcualtePercentageValueFromNumber(int number, UnitEquipmentItem equip) | |
111 { | |
112 double calcedAmount = RoundPercentage(CustomMath.IBBMath.Percentage(number, unit.Size)); | |
113 return Math.Min(Math.Max(calcedAmount, GetMinPercentageLimit(equip)), GetMaxPercentageLimit(equip)); | |
114 } | |
115 | |
42 //TODO Make abstract | 116 //TODO Make abstract |
43 protected void CreateEquipmentUI() | 117 protected void CreateEquipmentUI() |
44 { | 118 { |
45 ui = new FrmAddEquipment(); | 119 ui = new FrmAddEquipment(); |
46 } | 120 } |
48 private void HandleUiUnitEquipmentItemChoiceChanged(UnitEquipmentItem equip) | 122 private void HandleUiUnitEquipmentItemChoiceChanged(UnitEquipmentItem equip) |
49 { | 123 { |
50 if (equip != null) | 124 if (equip != null) |
51 { | 125 { |
52 bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip); | 126 bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip); |
53 double maxPercent = RoundPercentage(UnitEquipmentUtil.GetMaxEquipmentPercentage(unit, equip)); | 127 double maxPercent = GetMaxPercentageLimit(equip); |
54 maxPercent = Math.Max(0, maxPercent); | 128 double minPercent = GetMinPercentageLimit(equip); |
55 double minPercent = RoundPercentage(UnitEquipmentUtil.GetMinEquipmentPercentage(unit, equip)); | 129 int maxNumber = GetMaxNumericLimit(equip); |
56 minPercent = Math.Max(0, minPercent); | 130 int minNumber = GetMinNumericLimit(equip); |
57 int maxNumber = UnitEquipmentUtil.GetMaxEquipmentCount(unit, equip); | |
58 maxNumber = Math.Max(0, maxNumber); | |
59 int minNumber = UnitEquipmentUtil.GetMinEquipmentCount(unit, equip); | |
60 minNumber = Math.Max(0, minNumber); | |
61 | 131 |
62 ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercent, maxPercent, minNumber, maxNumber); | 132 ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercent, maxPercent, minNumber, maxNumber); |
63 ui.SetUnitEquipmentLimitsEnabled(true); | 133 ui.SetUnitEquipmentLimitsEnabled(true); |
64 ui.SetOkayEnabledState(HasNonZeroEquipmentAmount()); | 134 ui.SetOkayEnabledState(HasNonZeroEquipmentAmount()); |
65 } | 135 } |
68 ui.SetUnitEquipmentLimits(true, 0, 0, 0, 0); | 138 ui.SetUnitEquipmentLimits(true, 0, 0, 0, 0); |
69 ui.SetUnitEquipmentLimitsEnabled(false); | 139 ui.SetUnitEquipmentLimitsEnabled(false); |
70 ui.SetOkayEnabledState(false); | 140 ui.SetOkayEnabledState(false); |
71 } | 141 } |
72 } | 142 } |
73 | 143 private double GetMaxPercentageLimit(UnitEquipmentItem equip) |
144 { | |
145 double maxPercent = RoundPercentage(UnitEquipmentUtil.GetMaxEquipmentPercentage(unit, equip)); | |
146 return Math.Max(0, maxPercent); | |
147 } | |
148 | |
149 private double GetMinPercentageLimit(UnitEquipmentItem equip) | |
150 { | |
151 double minPercent = RoundPercentage(UnitEquipmentUtil.GetMinEquipmentPercentage(unit, equip)); | |
152 return Math.Max(0, minPercent); | |
153 } | |
154 | |
155 private int GetMaxNumericLimit(UnitEquipmentItem equip) | |
156 { | |
157 int maxNumber = UnitEquipmentUtil.GetMaxEquipmentCount(unit, equip); | |
158 return Math.Max(0, maxNumber); | |
159 } | |
160 private int GetMinNumericLimit(UnitEquipmentItem equip) | |
161 { | |
162 int minNumber = UnitEquipmentUtil.GetMinEquipmentCount(unit, equip); | |
163 return Math.Max(0, minNumber); | |
164 } | |
165 | |
74 private bool HasNonZeroEquipmentAmount() | 166 private bool HasNonZeroEquipmentAmount() |
75 { | 167 { |
76 bool nonZero; | 168 bool nonZero; |
77 | 169 |
78 if (ui.IsRatioEquipmentAmount) | 170 if (ui.IsRatioEquipmentAmount) |