diff FrmAddEquipment.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/FrmAddEquipment.cs	Mon Jan 17 19:43:47 2011 +0000
@@ -0,0 +1,274 @@
+//  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.WarFoundry.API.Objects;
+using IBBoard.WarFoundry.GUI.GTK.UIControl.Interfaces;
+using IBBoard.WarFoundry.GUI.GTK.Util;
+using log4net;
+using IBBoard.Lang;
+
+namespace IBBoard.WarFoundry.GUI.GTK
+{
+	public partial class FrmAddEquipment : TranslatableDialog, IAddEquipmentUI
+	{
+		private static ILog log = LogManager.GetLogger(typeof(FrmAddEquipment));
+
+		public event SingleArgMethodInvoker<UnitEquipmentItem> UnitEquipmentItemChoiceChanged;
+		public event MethodInvoker UnitEquipmentAmountTypeChanged;
+		public event MethodInvoker UnitEquipmentAmountChanged;
+
+		private bool isRatioLimited;
+
+		public FrmAddEquipment()
+		{
+			this.Build();
+			lstEquipment.Selection.Changed += OnSelectionChanged;
+			TreeViewColumn equipColumn = new TreeViewColumn();
+			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();
+		}
+
+		protected override void Translate()
+		{
+			base.Translate();
+			lstEquipment.Columns[0].Title = Translation.GetTranslation("frmAddEquipmentColumnTitle", "equipment");
+		}
+
+		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);
+			
+			if (isRatioLimit)
+			{
+				if (minPercent == 100)
+				{
+					rbEquipAll.Active = true;
+				}
+				else
+				{
+					rbEquipPercent.Active = true;
+				}
+			}
+			else
+			{
+				rbEquipNumeric.Active = true;
+			}
+			
+			isRatioLimited = isRatioLimit;
+		}
+
+		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 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;
+		}
+
+		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;
+			}
+		}
+	}
+}
+