Mercurial > repos > IBBoard.WarFoundry.GUI.WinForms
comparison UI/EquipmentAmountControl.cs @ 77:712915de47fd
Fixes #187: Error when adding equipment with minNum > unit size
* Handle percentages greater than 100
* Remove value change listeners before setting min/max and re-add in new wrapper method
* Hide value setting method and handle internally
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 04 Oct 2009 19:58:23 +0000 |
parents | 7ace7d2249ac |
children | 431cc3ace26c |
comparison
equal
deleted
inserted
replaced
76:f2006db02ad9 | 77:712915de47fd |
---|---|
28 | 28 |
29 public void SetUnitEquipmentItem(UnitEquipmentItem unitEquipment) | 29 public void SetUnitEquipmentItem(UnitEquipmentItem unitEquipment) |
30 { | 30 { |
31 equip = unitEquipment; | 31 equip = unitEquipment; |
32 SetWidgetValues(); | 32 SetWidgetValues(); |
33 SetUnitEquipmentItemAmount(); | |
33 } | 34 } |
34 | 35 |
35 public event EventHandler ValueChanged; | 36 public event EventHandler ValueChanged; |
36 | 37 |
37 private void OnValueChanged() | 38 private void OnValueChanged() |
48 { | 49 { |
49 if (equip.IsRatioLimit) | 50 if (equip.IsRatioLimit) |
50 { | 51 { |
51 double minPercent = equip.MinPercentage; | 52 double minPercent = equip.MinPercentage; |
52 double maxPercent = equip.MaxPercentage; | 53 double maxPercent = equip.MaxPercentage; |
53 SetUpDownControlMinMaxAndValue(percentage, minPercent, maxPercent); | 54 int minNumber = (int) CalculateNumericValueFromPercentage(minPercent); |
54 SetUpDownControlMinMaxAndValue(numeric, CalculateNumericValueFromPercentage(minPercent), CalculateNumericValueFromPercentage(maxPercent)); | 55 int maxNumber = (int) CalculateNumericValueFromPercentage(maxPercent); |
56 SetUpDownControlMinMaxes(minPercent, maxPercent, minNumber, maxNumber); | |
57 percentage.Value = (decimal) minPercent; | |
55 rbEquipAll.Enabled = maxPercent == 100; | 58 rbEquipAll.Enabled = maxPercent == 100; |
56 | 59 |
57 if (minPercent == 100) | 60 if (minPercent == 100) |
58 { | 61 { |
59 rbEquipAll.Checked = true; | 62 rbEquipAll.Checked = true; |
75 { | 78 { |
76 percentage.Enabled = false; | 79 percentage.Enabled = false; |
77 rbPercentage.Enabled = false; | 80 rbPercentage.Enabled = false; |
78 int minNumber = equip.MinNumber; | 81 int minNumber = equip.MinNumber; |
79 int maxNumber = equip.MaxNumber; | 82 int maxNumber = equip.MaxNumber; |
80 SetUpDownControlMinMaxAndValue(numeric, (decimal) minNumber, (decimal) maxNumber); | 83 double minPercent = (double) CalcualtePercentageValueFromNumber(minNumber); |
81 SetUpDownControlMinMaxAndValue(percentage, CalcualtePercentageValueFromNumber(minNumber), CalcualtePercentageValueFromNumber(maxNumber)); | 84 double maxPercent = (double) CalcualtePercentageValueFromNumber(maxNumber); |
85 SetUpDownControlMinMaxes(minPercent, maxPercent, minNumber, maxNumber); | |
86 numeric.Value = (minNumber == WarFoundryCore.INFINITY ? unit.Size : minNumber); | |
82 rbEquipAll.Enabled = maxNumber == WarFoundryCore.INFINITY; | 87 rbEquipAll.Enabled = maxNumber == WarFoundryCore.INFINITY; |
83 | 88 |
84 if (minNumber == WarFoundryCore.INFINITY) | 89 if (minNumber == WarFoundryCore.INFINITY) |
85 { | 90 { |
86 rbEquipAll.Checked = true; | 91 rbEquipAll.Checked = true; |
87 numeric.Enabled = false; | 92 numeric.Enabled = false; |
88 rbNumeric.Enabled = false; | 93 rbNumeric.Enabled = false; |
99 { | 104 { |
100 Enabled = false; | 105 Enabled = false; |
101 } | 106 } |
102 } | 107 } |
103 | 108 |
104 private void SetUpDownControlMinMaxAndValue(NumericUpDown upDownControl, double min, double max) | 109 private void SetUpDownControlMinMaxes(double minPercent, double maxPercent, int minNumber, int maxNumber) |
105 { | 110 { |
106 SetUpDownControlMinMaxAndValue(upDownControl, (decimal)min, (decimal)max); | 111 percentage.ValueChanged -= percentage_ValueChanged; |
107 } | 112 numeric.ValueChanged -= numeric_ValueChanged; |
108 | 113 SetUpDownControlMinMax(percentage, minPercent, maxPercent); |
109 private void SetUpDownControlMinMaxAndValue(NumericUpDown upDownControl, decimal min, decimal max) | 114 SetUpDownControlMinMax(numeric, (decimal) minNumber, (decimal) maxNumber); |
115 percentage.ValueChanged += percentage_ValueChanged; | |
116 numeric.ValueChanged += numeric_ValueChanged; | |
117 } | |
118 | |
119 private void SetUpDownControlMinMax(NumericUpDown upDownControl, double min, double max) | |
120 { | |
121 SetUpDownControlMinMax(upDownControl, (decimal)min, (decimal)max); | |
122 } | |
123 | |
124 private void SetUpDownControlMinMax(NumericUpDown upDownControl, decimal min, decimal max) | |
110 { | 125 { |
111 upDownControl.Minimum = (min == WarFoundryCore.INFINITY ? unit.Size : min); | 126 upDownControl.Minimum = (min == WarFoundryCore.INFINITY ? unit.Size : min); |
112 upDownControl.Maximum = (max == WarFoundryCore.INFINITY ? unit.Size : max); | 127 upDownControl.Maximum = (max == WarFoundryCore.INFINITY ? unit.Size : max); |
113 upDownControl.Value = upDownControl.Value; | |
114 } | 128 } |
115 | 129 |
116 private void rbEquipAll_CheckedChanged(object sender, EventArgs e) | 130 private void rbEquipAll_CheckedChanged(object sender, EventArgs e) |
117 { | 131 { |
118 bool equipAll = rbEquipAll.Checked; | 132 bool equipAll = rbEquipAll.Checked; |
207 { | 221 { |
208 return rbPercentage.Checked; | 222 return rbPercentage.Checked; |
209 } | 223 } |
210 } | 224 } |
211 | 225 |
212 public void SetUnitEquipmentItemAmount(double equipAmountNum, bool isRatio) | 226 private void SetUnitEquipmentItemAmount() |
213 { | 227 { |
214 if (isRatio) | 228 double equipAmountNum = unit.GetEquipmentAmount(equip); |
215 { | 229 |
216 percentage.Value = (decimal)equipAmountNum; | 230 if (equipAmountNum > 0) |
217 } | 231 { |
218 else if (equipAmountNum == WarFoundryCore.INFINITY) | 232 bool isRatio = unit.GetEquipmentAmountIsRatio(equip); |
219 { | 233 |
220 rbEquipAll.Checked = true; | 234 if (isRatio) |
221 } | 235 { |
222 else | 236 percentage.Value = (decimal) equipAmountNum; |
223 { | 237 } |
224 numeric.Value = (int)equipAmountNum; | 238 else if (equipAmountNum == WarFoundryCore.INFINITY) |
239 { | |
240 rbEquipAll.Checked = true; | |
241 } | |
242 else | |
243 { | |
244 numeric.Value = (int) equipAmountNum; | |
245 } | |
225 } | 246 } |
226 } | 247 } |
227 | 248 |
228 private void radioCheckedChanged(object sender, EventArgs e) | 249 private void radioCheckedChanged(object sender, EventArgs e) |
229 { | 250 { |