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 {