annotate UI/EquipmentAmountControl.cs @ 89:971f7801f984

Fixes #205: Odd/prime numbers causes a crash * Fix crash with number out of range by rounding our min/max percentage the same as we round the calculated value
author IBBoard <dev@ibboard.co.uk>
date Mon, 02 Nov 2009 20:11:18 +0000
parents 340e711ca4c3
children 63ca28bd8ada
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
85
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
1 using System;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
2 using System.Collections.Generic;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
3 using System.ComponentModel;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
4 using System.Drawing;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
5 using System.Data;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
6 using System.Text;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
7 using System.Windows.Forms;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
8 using IBBoard.CustomMath;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
9 using IBBoard.Lang;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
10 using IBBoard.Limits;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
11 using IBBoard.WarFoundry.API;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
12 using IBBoard.WarFoundry.API.Objects;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
13 using IBBoard.WarFoundry.API.Util;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
14
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
15 namespace IBBoard.WarFoundry.GUI.WinForms.UI
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
16 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
17 public partial class EquipmentAmountControl : UserControl
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
18 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
19 private Unit unit;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
20 private UnitEquipmentItem equip;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
21 public event EventHandler ValueChanged;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
22
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
23 public EquipmentAmountControl()
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
24 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
25 InitializeComponent();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
26 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
27
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
28 public void SetUnit(Unit equipUnit)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
29 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
30 unit = equipUnit;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
31 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
32
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
33 public void SetUnitEquipmentItem(UnitEquipmentItem unitEquipment)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
34 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
35 equip = unitEquipment;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
36 SetWidgetValues();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
37 SetUnitEquipmentItemAmount();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
38 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
39
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
40 private void OnValueChanged()
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
41 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
42 if (ValueChanged != null)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
43 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
44 ValueChanged(this, new EventArgs());
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
45 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
46 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
47
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
48 private void SetWidgetValues()
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
49 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
50 if (equip != null)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
51 {
89
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
52 bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip);
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
53 double maxPercent = RoundPercentage(UnitEquipmentUtil.GetMaxEquipmentPercentage(unit, equip));
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
54 double minPercent = RoundPercentage(UnitEquipmentUtil.GetMinEquipmentPercentage(unit, equip));
85
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
55 int maxNumber = UnitEquipmentUtil.GetMaxEquipmentCount(unit, equip);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
56 int minNumber = UnitEquipmentUtil.GetMinEquipmentCount(unit, equip);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
57
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
58 SetUpDownControlMinMaxes(minPercent, maxPercent, minNumber, maxNumber);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
59
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
60 if (equipIsRatioLimit)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
61 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
62 SetEquipmentAmountsFromPercentage(minPercent);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
63 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
64 else
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
65 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
66 SetEquipmentAmountsFromNumber(minNumber);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
67 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
68
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
69 rbEquipAll.Enabled = equipIsRatioLimit && maxPercent == 100;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
70 rbEquipAll.Checked = equipIsRatioLimit && minPercent == 100;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
71 percentage.Enabled = equipIsRatioLimit && minPercent != 100;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
72 rbPercentage.Enabled = percentage.Enabled;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
73 rbPercentage.Checked = equipIsRatioLimit && !rbEquipAll.Checked;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
74 numeric.Enabled = !equipIsRatioLimit || minPercent != 100;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
75 rbNumeric.Enabled = numeric.Enabled;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
76 rbNumeric.Checked = !equipIsRatioLimit;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
77 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
78 else
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
79 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
80 Enabled = false;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
81 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
82 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
83
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
84 private void SetUpDownControlMinMaxes(double minPercent, double maxPercent, int minNumber, int maxNumber)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
85 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
86 percentage.ValueChanged -= percentage_ValueChanged;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
87 numeric.ValueChanged -= numeric_ValueChanged;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
88 SetUpDownControlMinMax(percentage, minPercent, maxPercent);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
89 SetUpDownControlMinMax(numeric, (decimal) minNumber, (decimal) maxNumber);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
90 percentage.ValueChanged += percentage_ValueChanged;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
91 numeric.ValueChanged += numeric_ValueChanged;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
92 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
93
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
94 private void SetUpDownControlMinMax(NumericUpDown upDownControl, double min, double max)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
95 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
96 SetUpDownControlMinMax(upDownControl, (decimal)min, (decimal)max);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
97 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
98
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
99 private void SetUpDownControlMinMax(NumericUpDown upDownControl, decimal min, decimal max)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
100 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
101 upDownControl.Minimum = min;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
102 upDownControl.Maximum = max;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
103 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
104
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
105 private void rbEquipAll_CheckedChanged(object sender, EventArgs e)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
106 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
107 bool equipAll = rbEquipAll.Checked;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
108 numeric.Enabled = !equipAll;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
109 percentage.Enabled = !equipAll;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
110
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
111 if (equipAll)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
112 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
113 numeric.Value = unit.Size;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
114 percentage.Value = 100;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
115 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
116
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
117 radioCheckedChanged(sender, e);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
118 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
119
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
120 private void percentage_ValueChanged(object sender, EventArgs e)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
121 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
122 SetNumericValueFromPercentage();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
123 rbEquipAll.Checked = (percentage.Value == 100 && !rbNumeric.Checked);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
124 OnValueChanged();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
125 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
126
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
127 private void SetNumericValueFromPercentage()
88
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
128 {
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
129 numeric.ValueChanged -= numeric_ValueChanged;
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
130 numeric.Value = CalculateNumericValueFromPercentage(percentage.Value);
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
131 numeric.ValueChanged += numeric_ValueChanged;
85
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
132 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
133
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
134 private decimal CalculateNumericValueFromPercentage(decimal percent)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
135 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
136 return (decimal) IBBoard.CustomMath.IBBMath.Round((double)(unit.Size * (percent / 100)), equip.RoundNumberUp);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
137 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
138
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
139 private void numeric_ValueChanged(object sender, EventArgs e)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
140 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
141 SetPercentageValueFromNumeric();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
142 OnValueChanged();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
143 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
144
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
145 private void SetPercentageValueFromNumeric()
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
146 {
88
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
147 int number = (int)numeric.Value;
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
148 percentage.ValueChanged -= percentage_ValueChanged;
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
149 percentage.Value = CalcualtePercentageValueFromNumber(number);
340e711ca4c3 Re #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 85
diff changeset
150 percentage.ValueChanged += percentage_ValueChanged;
85
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
151 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
152
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
153 private decimal CalcualtePercentageValueFromNumber(int number)
89
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
154 {
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
155 return (decimal) RoundPercentage((number / (unit.Size * 1.0)) * 100);
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
156 }
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
157
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
158 private double RoundPercentage(double percent)
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
159 {
971f7801f984 Fixes #205: Odd/prime numbers causes a crash
IBBoard <dev@ibboard.co.uk>
parents: 88
diff changeset
160 return Math.Round(percent, 1);
85
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
161 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
162
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
163 public double EquipmentAmount
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
164 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
165 get
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
166 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
167 double val = 0;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
168
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
169 if (rbNumeric.Checked)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
170 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
171 val = (double) numeric.Value;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
172 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
173 else if (rbPercentage.Checked)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
174 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
175 val = (double) percentage.Value;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
176 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
177 else if (rbEquipAll.Checked)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
178 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
179 val = 100;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
180 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
181 else
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
182 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
183 val = 0;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
184 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
185
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
186 return val;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
187 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
188 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
189
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
190 public bool IsRatioEquipmentAmount
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
191 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
192 get
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
193 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
194 return !rbNumeric.Checked;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
195 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
196 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
197
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
198 private void SetUnitEquipmentItemAmount()
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
199 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
200 double equipAmountNum = unit.GetEquipmentAmount(equip);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
201
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
202 if (equipAmountNum > 0)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
203 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
204 bool isRatio = unit.GetEquipmentAmountIsRatio(equip);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
205
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
206 if (isRatio)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
207 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
208 SetEquipmentAmountsFromPercentage(equipAmountNum);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
209 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
210 else
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
211 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
212 int equipAmount = (int) equipAmountNum;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
213 SetEquipmentAmountsFromNumber(equipAmount);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
214 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
215 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
216 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
217
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
218 private void SetEquipmentAmountsFromPercentage(double equipAmountNum)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
219 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
220 decimal decEquipAmount = (decimal) equipAmountNum;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
221
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
222 if (decEquipAmount > percentage.Maximum)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
223 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
224 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.", equipAmountNum, percentage.Maximum);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
225 string percentageTooLargeTitle = Translation.GetTranslation("equipPercentageTooLargeTitle", "Equipment percentage too large");
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
226 MessageBox.Show(ParentForm, percentageTooLarge, percentageTooLargeTitle);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
227 decEquipAmount = percentage.Maximum;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
228 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
229 else if (decEquipAmount < percentage.Minimum)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
230 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
231 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.", equipAmountNum, percentage.Minimum);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
232 string percentageTooSmallTitle = Translation.GetTranslation("equipPercentageTooSmallTitle", "Equipment percentage too small");
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
233 MessageBox.Show(ParentForm, percentageTooSmall, percentageTooSmallTitle);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
234 decEquipAmount = percentage.Minimum;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
235 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
236
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
237 numeric.Value = CalculateNumericValueFromPercentage(decEquipAmount);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
238 percentage.Value = decEquipAmount;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
239 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
240
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
241 private void SetEquipmentAmountsFromNumber(int equipAmount)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
242 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
243 if (equipAmount > numeric.Maximum)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
244 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
245 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, numeric.Maximum);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
246 string amountTooLargeTitle = Translation.GetTranslation("equipNumberTooLargeTitle", "Equipment amount too large");
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
247 MessageBox.Show(ParentForm, amountTooLarge, amountTooLargeTitle);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
248 equipAmount = (int)numeric.Maximum;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
249 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
250 else if (equipAmount < numeric.Minimum)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
251 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
252 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, numeric.Minimum);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
253 string amountTooSmallTitle = Translation.GetTranslation("equipNumberTooSmallTitle", "Equipment amount too small");
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
254 MessageBox.Show(ParentForm, amountTooSmall, amountTooSmallTitle);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
255 equipAmount = (int) numeric.Minimum;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
256 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
257
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
258 percentage.Value = CalcualtePercentageValueFromNumber(equipAmount);
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
259 numeric.Value = equipAmount;
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
260 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
261
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
262 private void radioCheckedChanged(object sender, EventArgs e)
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
263 {
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
264 OnValueChanged();
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
265 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
266 }
0bb9f40d44eb Re #88: Complete initial WinForms UI
IBBoard <dev@ibboard.co.uk>
parents: 83
diff changeset
267 }