diff FrmAddEquipment.cs @ 61:e7ad676a7344

Re #60: Add UI to add/remove/edit weapons in GTK * Add events to track equipment amount and amount changing * Select most appropriate equipment type by default * Add methods an implementation for enabling/disabling Okay button
author IBBoard <dev@ibboard.co.uk>
date Sun, 29 Aug 2010 15:09:34 +0000
parents 293d204e40db
children f733073967a2
line wrap: on
line diff
--- a/FrmAddEquipment.cs	Fri Aug 27 14:44:48 2010 +0000
+++ b/FrmAddEquipment.cs	Sun Aug 29 15:09:34 2010 +0000
@@ -16,6 +16,8 @@
 		private static ILog log = LogManager.GetLogger(typeof(FrmAddEquipment));
 		
 		public event SingleArgMethodInvoker<UnitEquipmentItem> UnitEquipmentItemChoiceChanged;
+		public event MethodInvoker UnitEquipmentAmountTypeChanged;
+		public event MethodInvoker UnitEquipmentAmountChanged;
 		
 		private bool limitsEnabled = false;
 		private bool ratioLimited = false;
@@ -29,10 +31,26 @@
 			CellRendererText equipCell = new CellRendererText();
 			equipColumn.PackStart(equipCell, true);
 			equipColumn.SetCellDataFunc(equipCell, GtkWarFoundryUtil.RenderWarFoundryObjectName);
-			lstEquipment.AppendColumn(equipColumn);
+			lstEquipment.AppendColumn(equipColumn);			
 		}
 		
-		protected virtual void OnSelectionChanged(object o, EventArgs e)
+		private void OnUnitEquipmentAmountChanged()
+		{
+			if (UnitEquipmentAmountChanged != null)
+			{
+				UnitEquipmentAmountChanged();
+			}
+		}
+		
+		private void OnUnitEquipmentAmountTypeChanged()
+		{
+			if (UnitEquipmentAmountChanged != null)
+			{
+				UnitEquipmentAmountTypeChanged();
+			}
+		}
+		
+		protected void OnSelectionChanged(object o, EventArgs e)
 		{
 			if (UnitEquipmentItemChoiceChanged!=null)
 			{
@@ -56,9 +74,26 @@
 		{
 			log.DebugFormat("IsRatio? {0}. Limits: {1}->{2}, {3}%->{4}%", isRatioLimit, minNumber, maxNumber, minPercent, maxPercent);
 			ratioLimited = isRatioLimit;
-			SetEnabledState();
 			numericAmount.SetRange(minNumber, maxNumber);
 			percentageAmount.SetRange(minPercent, maxPercent);
+			
+			if (isRatioLimit)
+			{
+				if (minPercent == 100)
+				{
+					rbEquipAll.Active = true;
+				}
+				else
+				{
+					rbEquipPercent.Active = true;
+				}
+			}
+			else
+			{
+				rbEquipNumeric.Active = true;
+			}
+			
+			SetEnabledState();
 		}
 
 		public void SetUnitEquipmentLimitsEnabled(bool isEnabled)
@@ -75,8 +110,8 @@
 			rbEquipPercent.Sensitive = limitsEnabled && minPercentage != 100;
 			percentageAmount.Sensitive = limitsEnabled && minPercentage != 100;
 			double maxPercentage = GetMaxPercentage();
-			rbEquipAll.Sensitive = limitsEnabled && maxPercentage == 100;
-			lblEquipAll.Sensitive = limitsEnabled && maxPercentage == 100;
+			rbEquipAll.Sensitive = limitsEnabled && ratioLimited && maxPercentage == 100;
+			lblEquipAll.Sensitive = limitsEnabled && ratioLimited && maxPercentage == 100;
 		}
 		
 		private double GetMaxPercentage()
@@ -113,6 +148,22 @@
 			Respond(ResponseType.Ok);
 		}		
 		
+		public void SetOkayEnabledState (bool enabled)
+		{
+			buttonOk.Sensitive = enabled;
+		}
+				
+		protected virtual void SpinButtonValueChanged (object sender, System.EventArgs e)
+		{
+			OnUnitEquipmentAmountChanged();
+		}		
+		
+		protected virtual void RadioButtonClicked(object sender, System.EventArgs e)
+		{
+			OnUnitEquipmentAmountTypeChanged();
+		}
+		
+		
 		public UnitEquipmentItem SelectedUnitEquipmentItem
 		{
 			get