diff UIControl/AbstractBaseEquipmentUIControl.cs @ 70:4b82515586ac

Re #60: Add UI to add/remove/edit weapons in GTK * Fix widget enabling/disabling (sometimes enabling ratio input for numeric limit) * Correct behaviour of Edit dialog (setting wrong value on edit) * Add setting of limits based on specific equipment item to base dialog controller * Make sure that we catch all radio button click events from Edit dialog * Add ability to ignore and listen to widgets to make sure that changes don't cascade TODO: See if code can be tidied up and common classes created
author IBBoard <dev@ibboard.co.uk>
date Sat, 06 Nov 2010 17:03:13 +0000
parents 3b4a646b4054
children fac0636ae13b
line wrap: on
line diff
--- a/UIControl/AbstractBaseEquipmentUIControl.cs	Sat Nov 06 11:44:26 2010 +0000
+++ b/UIControl/AbstractBaseEquipmentUIControl.cs	Sat Nov 06 17:03:13 2010 +0000
@@ -33,9 +33,10 @@
 			ui = CreateEquipmentUI();
 			ui.SetUnitEquipmentLimitsEnabled(false);
 			ui.SetOkayEnabledState(false);
-			ui.UnitEquipmentAmountChanged += SetUnitEquipmentValues;
-			ui.UnitEquipmentAmountTypeChanged += SetUnitEquipmentValues;
 			CompleteUISetup();
+			ui.UnitEquipmentAmountChanged += HandleUnitEquipmentAmountChanged;
+			ui.UnitEquipmentAmountTypeChanged += HandleUnitEquipmentAmountChanged;
+			ui.ListenToWidgets();
 		}
 		
 		/// <summary>
@@ -58,29 +59,83 @@
 			
 		protected void HandleUnitEquipmentAmountChanged()
 		{
-			SetUnitEquipmentValues();
+			SetUnitEquipmentValuesFromUI();
 		}
 		
+		protected void SetUnitEquipmentLimits(UnitEquipmentItem equip)
+		{			
+			ui.IgnoreWidgets();
+			
+			if (equip != null)
+			{
+				bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip);
+				maxPercentage = GetMaxPercentageLimit(equip);
+				minPercentage = GetMinPercentageLimit(equip);
+				maxNumber = GetMaxNumericLimit(equip);
+				minNumber = GetMinNumericLimit(equip);
+			
+				ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercentage, maxPercentage, minNumber, maxNumber);
+				ui.SetUnitEquipmentLimitsEnabled(true);
+				ui.SetOkayEnabledState(HasNonZeroEquipmentAmount());
+				SetEquipmentAmountControlEnabledStates();
+			}
+			else
+			{
+				maxPercentage = minPercentage = 0;
+				maxNumber = minNumber = 0;
+				ui.SetUnitEquipmentLimits(false, minPercentage, maxPercentage, minNumber, maxNumber);
+				ui.SetUnitEquipmentLimitsEnabled(false);
+				ui.SetOkayEnabledState(false);
+			}
+			
+			ui.ListenToWidgets();
+		}
+		
+		protected void SetUnitEquipmentValuesFromEquipment(UnitEquipmentItem equip)
+		{			
+			isRatioAmount = UnitEquipmentUtil.GetEquipmentAmountIsRatio(unit, equip);
+			equipmentAmount = UnitEquipmentUtil.GetEquipmentAmount(unit, equip);			
+			SetUnitEquipmentValues();
+			SetEquipmentAmountControlEnabledStates();
+		}
+
 		/// <summary>
 		/// Sets the unit equipment values on the UI
 		/// </summary>
 
-		protected void SetUnitEquipmentValues()
-		{
-			ui.SetOkayEnabledState(HasNonZeroEquipmentAmount());
+		protected void SetUnitEquipmentValuesFromUI()
+		{			
 			isRatioAmount = ui.IsRatioEquipmentAmount;
 			
 			if (isRatioAmount)
 			{
 				equipmentAmount = ui.EquipmentPercentageAmount;
-				SetEquipmentAmountsFromPercentage(equipmentAmount);
 			}
 			else
 			{
 				int equipmentIntAmount = ui.EquipmentNumericAmount;
 				equipmentAmount = equipmentIntAmount;
+			}
+			
+			SetUnitEquipmentValues();
+		}
+		
+		private void SetUnitEquipmentValues()
+		{			
+			ui.IgnoreWidgets();
+			
+			if (isRatioAmount)
+			{
+				SetEquipmentAmountsFromPercentage(equipmentAmount);
+			}
+			else
+			{
+				int equipmentIntAmount = (int)equipmentAmount;
 				SetEquipmentAmountsFromNumber(equipmentIntAmount);
 			}
+			
+			ui.SetOkayEnabledState(equipmentAmount != 0);
+			ui.ListenToWidgets();
 		}
 
 		private void SetEquipmentAmountsFromPercentage(double equipAmount)