Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.WinForms
view UI/EquipmentAmountControl.cs @ 70:a8667ab60362
Re #180: Add multiple mutex groups
* Make WinForms UI handle multiple groups instead of assuming one
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 26 Sep 2009 19:55:13 +0000 |
parents | 7ace7d2249ac |
children | 712915de47fd |
line wrap: on
line source
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using IBBoard.Lang; using IBBoard.WarFoundry.API; using IBBoard.WarFoundry.API.Objects; namespace IBBoard.WarFoundry.GUI.WinForms.UI { public partial class EquipmentAmountControl : UserControl { private Unit unit; private UnitEquipmentItem equip; public EquipmentAmountControl() { InitializeComponent(); } public void SetUnit(Unit equipUnit) { unit = equipUnit; } public void SetUnitEquipmentItem(UnitEquipmentItem unitEquipment) { equip = unitEquipment; SetWidgetValues(); } public event EventHandler ValueChanged; private void OnValueChanged() { if (ValueChanged != null) { ValueChanged(this, new EventArgs()); } } private void SetWidgetValues() { if (equip != null) { if (equip.IsRatioLimit) { double minPercent = equip.MinPercentage; double maxPercent = equip.MaxPercentage; SetUpDownControlMinMaxAndValue(percentage, minPercent, maxPercent); SetUpDownControlMinMaxAndValue(numeric, CalculateNumericValueFromPercentage(minPercent), CalculateNumericValueFromPercentage(maxPercent)); rbEquipAll.Enabled = maxPercent == 100; if (minPercent == 100) { rbEquipAll.Checked = true; percentage.Enabled = false; rbPercentage.Enabled = false; numeric.Enabled = false; rbNumeric.Enabled = false; } else { rbPercentage.Checked = true; percentage.Enabled = true; rbPercentage.Enabled = true; numeric.Enabled = true; rbNumeric.Enabled = true; } } else { percentage.Enabled = false; rbPercentage.Enabled = false; int minNumber = equip.MinNumber; int maxNumber = equip.MaxNumber; SetUpDownControlMinMaxAndValue(numeric, (decimal) minNumber, (decimal) maxNumber); SetUpDownControlMinMaxAndValue(percentage, CalcualtePercentageValueFromNumber(minNumber), CalcualtePercentageValueFromNumber(maxNumber)); rbEquipAll.Enabled = maxNumber == WarFoundryCore.INFINITY; if (minNumber == WarFoundryCore.INFINITY) { rbEquipAll.Checked = true; numeric.Enabled = false; rbNumeric.Enabled = false; } else { rbNumeric.Checked = true; numeric.Enabled = true; rbNumeric.Enabled = true; } } } else { Enabled = false; } } private void SetUpDownControlMinMaxAndValue(NumericUpDown upDownControl, double min, double max) { SetUpDownControlMinMaxAndValue(upDownControl, (decimal)min, (decimal)max); } private void SetUpDownControlMinMaxAndValue(NumericUpDown upDownControl, decimal min, decimal max) { upDownControl.Minimum = (min == WarFoundryCore.INFINITY ? unit.Size : min); upDownControl.Maximum = (max == WarFoundryCore.INFINITY ? unit.Size : max); upDownControl.Value = upDownControl.Value; } private void rbEquipAll_CheckedChanged(object sender, EventArgs e) { bool equipAll = rbEquipAll.Checked; numeric.Enabled = !equipAll; percentage.Enabled = !equipAll; if (equipAll) { numeric.Value = unit.Size; percentage.Value = 100; } radioCheckedChanged(sender, e); } private void percentage_ValueChanged(object sender, EventArgs e) { SetNumericValueFromPercentage(); rbEquipAll.Checked = (percentage.Value == 100 && !rbNumeric.Checked); OnValueChanged(); } private void SetNumericValueFromPercentage() { double percent = (double)percentage.Value; numeric.Value = CalculateNumericValueFromPercentage(percent); } private decimal CalculateNumericValueFromPercentage(double percent) { return (decimal) IBBMath.Round(unit.Size * (percent / 100.0), equip.RoundNumberUp); } private void numeric_ValueChanged(object sender, EventArgs e) { SetPercentageValueFromNumeric(); OnValueChanged(); } private void SetPercentageValueFromNumeric() { int number = (int)numeric.Value; percentage.Value = CalcualtePercentageValueFromNumber(number); } private decimal CalcualtePercentageValueFromNumber(int number) { decimal percent = 0; if (number > 0) { percent = (decimal) Math.Round((number / (unit.Size * 1.0)) * 100, 1); } else if (number == WarFoundryCore.INFINITY) { percent = 100; } return percent; } public double EquipmentAmount { get { double val = 0; if (rbNumeric.Checked) { val = (double) numeric.Value; } else if (rbPercentage.Checked) { val = (double) percentage.Value; } else if (rbEquipAll.Checked) { val = WarFoundryCore.INFINITY; } else { val = 0; } return val; } } public bool IsRatioEquipmentAmount { get { return rbPercentage.Checked; } } public void SetUnitEquipmentItemAmount(double equipAmountNum, bool isRatio) { if (isRatio) { percentage.Value = (decimal)equipAmountNum; } else if (equipAmountNum == WarFoundryCore.INFINITY) { rbEquipAll.Checked = true; } else { numeric.Value = (int)equipAmountNum; } } private void radioCheckedChanged(object sender, EventArgs e) { OnValueChanged(); } } }