Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.GTK
diff FrmReplaceEquipment.cs @ 113:4a33b3012100 WarFoundry_v0.1RC1
* Tag v0.1RC1 release
no-open-ticket
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 17 Jan 2011 19:43:47 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FrmReplaceEquipment.cs Mon Jan 17 19:43:47 2011 +0000 @@ -0,0 +1,269 @@ +// This file (FrmAddEquipment.cs) is a part of the IBBoard.WarFoundry.GUI.GTK project and is copyright 2010 IBBoard +// +// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. + +using System; +using Gtk; +using IBBoard.GtkSharp; +using IBBoard.GtkSharp.Translatable; +using IBBoard.Lang; +using IBBoard.WarFoundry.API.Objects; +using IBBoard.WarFoundry.GUI.GTK.UIControl.Interfaces; +using IBBoard.WarFoundry.GUI.GTK.Util; +using log4net; + +namespace IBBoard.WarFoundry.GUI.GTK +{ + public partial class FrmReplaceEquipment : TranslatableDialog, IReplaceEquipmentUI + { + private static ILog log = LogManager.GetLogger(typeof(FrmReplaceEquipment)); + + public event SingleArgMethodInvoker<UnitEquipmentItem> UnitEquipmentItemChoiceChanged; + public event MethodInvoker UnitEquipmentAmountTypeChanged; + public event MethodInvoker UnitEquipmentAmountChanged; + + private bool isRatioLimited; + + public FrmReplaceEquipment() + { + this.Build(); + lstEquipment.Selection.Changed += OnSelectionChanged; + TreeViewColumn equipColumn = new TreeViewColumn(); + equipColumn.Title = "Equipment"; + CellRendererText equipCell = new CellRendererText(); + equipColumn.PackStart(equipCell, true); + equipColumn.SetCellDataFunc(equipCell, GtkWarFoundryUtil.RenderWarFoundryObjectName); + lstEquipment.AppendColumn(equipColumn); + + Translation.TranslationChanged += Retranslate; + Translate(); + } + + private void Retranslate() + { + Translate(); + } + + public override void Dispose() + { + Translation.TranslationChanged -= Retranslate; + base.Dispose(); + } + + public void ListenToWidgets() + { + rbEquipAll.Clicked += RadioButtonClicked; + rbEquipNumeric.Clicked += RadioButtonClicked; + rbEquipPercent.Clicked += RadioButtonClicked; + numericAmount.ValueChanged += SpinButtonValueChanged; + percentageAmount.ValueChanged += SpinButtonValueChanged; + lstEquipment.Selection.Changed += OnSelectionChanged; + } + + public void IgnoreWidgets() + { + rbEquipAll.Clicked -= RadioButtonClicked; + rbEquipNumeric.Clicked -= RadioButtonClicked; + rbEquipPercent.Clicked -= RadioButtonClicked; + numericAmount.ValueChanged -= SpinButtonValueChanged; + percentageAmount.ValueChanged -= SpinButtonValueChanged; + lstEquipment.Selection.Changed -= OnSelectionChanged; + } + + private void OnUnitEquipmentAmountChanged() + { + if (UnitEquipmentAmountChanged != null) + { + UnitEquipmentAmountChanged(); + } + } + + private void OnUnitEquipmentAmountTypeChanged() + { + if (UnitEquipmentAmountChanged != null) + { + UnitEquipmentAmountTypeChanged(); + } + } + + protected void OnSelectionChanged(object o, EventArgs e) + { + if (UnitEquipmentItemChoiceChanged != null) + { + UnitEquipmentItemChoiceChanged(SelectedUnitEquipmentItem); + } + } + + public void SetUnitEquipmentItems(UnitEquipmentItem[] items) + { + ListStore store = new ListStore(typeof(UnitEquipmentItem)); + + foreach (UnitEquipmentItem equipItem in items) + { + store.AppendValues(equipItem); + } + + lstEquipment.Model = store; + } + + public void SetUnitEquipmentLimits(bool isRatioLimit, double minPercent, double maxPercent, int minNumber, int maxNumber) + { + log.DebugFormat("IsRatio? {0}. Limits: {1}->{2}, {3}%->{4}%", isRatioLimit, minNumber, maxNumber, minPercent, maxPercent); + numericAmount.SetRange(minNumber, maxNumber); + percentageAmount.SetRange(minPercent, maxPercent); + isRatioLimited = isRatioLimit; + + if (isRatioLimit) + { + if (minPercent == 100) + { + rbEquipAll.Active = true; + } + else + { + rbEquipPercent.Active = true; + } + } + else + { + rbEquipNumeric.Active = true; + } + } + + public void SetUnitEquipmentLimitsEnabled(bool isEnabled) + { + SetNumericAmountEnabledState(isEnabled); + SetPercentageAmountEnabledState(isEnabled); + } + + public bool ShowControl() + { + int result = Run(); + bool okayClicked = (result == (int)ResponseType.Ok); + this.Hide(); + return okayClicked; + } + + protected virtual void CancelButtonClicked(object sender, System.EventArgs e) + { + log.Debug("Cancel clicked"); + Respond(ResponseType.Cancel); + } + + protected virtual void OkayButtonClicked(object sender, System.EventArgs e) + { + log.Debug("Okay clicked"); + Respond(ResponseType.Ok); + } + + public void SetOkayEnabledState(bool enabled) + { + bttnOkay.Sensitive = enabled; + } + + protected virtual void SpinButtonValueChanged(object sender, System.EventArgs e) + { + OnUnitEquipmentAmountChanged(); + } + + protected virtual void RadioButtonClicked(object sender, System.EventArgs e) + { + OnUnitEquipmentAmountTypeChanged(); + } + + public void SetNumericAmountEnabledState(bool enabled) + { + double minPercent = GetMinPercentage(); + rbEquipNumeric.Sensitive = enabled && !(isRatioLimited && minPercent == 100); + numericAmount.Sensitive = rbEquipNumeric.Sensitive; + } + + public void SetPercentageAmountEnabledState(bool enabled) + { + if (enabled) + { + double minPercentage = GetMinPercentage(); + rbEquipPercent.Sensitive = isRatioLimited && minPercentage != 100; + percentageAmount.Sensitive = rbEquipPercent.Sensitive; + double maxPercentage = GetMaxPercentage(); + rbEquipAll.Sensitive = isRatioLimited && maxPercentage == 100; + lblEquipAll.Sensitive = rbEquipAll.Sensitive; + } + else + { + rbEquipPercent.Sensitive = false; + percentageAmount.Sensitive = false; + rbEquipAll.Sensitive = false; + lblEquipAll.Sensitive = false; + } + } + + private double GetMaxPercentage() + { + double min, max; + percentageAmount.GetRange(out min, out max); + return max; + } + + private double GetMinPercentage() + { + double min, max; + percentageAmount.GetRange(out min, out max); + return min; + } + + public UnitEquipmentItem SelectedUnitEquipmentItem + { + get + { + return (UnitEquipmentItem)TreeUtils.GetSelectedItem(lstEquipment); + } + } + + public bool IsRatioEquipmentAmount + { + get + { + return !rbEquipNumeric.Active; + } + } + + public int EquipmentNumericAmount + { + get + { + return (int)numericAmount.Value; + } + + set + { + numericAmount.Value = value; + } + } + + public double EquipmentPercentageAmount + { + get + { + double percent; + + if (rbEquipAll.Active) + { + percent = 100; + } + else + { + percent = percentageAmount.Value; + } + + return percent; + } + + set + { + percentageAmount.Value = value; + } + } + } +} +