comparison 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
comparison
equal deleted inserted replaced
69:3b4a646b4054 70:4b82515586ac
31 private void SetupUI() 31 private void SetupUI()
32 { 32 {
33 ui = CreateEquipmentUI(); 33 ui = CreateEquipmentUI();
34 ui.SetUnitEquipmentLimitsEnabled(false); 34 ui.SetUnitEquipmentLimitsEnabled(false);
35 ui.SetOkayEnabledState(false); 35 ui.SetOkayEnabledState(false);
36 ui.UnitEquipmentAmountChanged += SetUnitEquipmentValues;
37 ui.UnitEquipmentAmountTypeChanged += SetUnitEquipmentValues;
38 CompleteUISetup(); 36 CompleteUISetup();
37 ui.UnitEquipmentAmountChanged += HandleUnitEquipmentAmountChanged;
38 ui.UnitEquipmentAmountTypeChanged += HandleUnitEquipmentAmountChanged;
39 ui.ListenToWidgets();
39 } 40 }
40 41
41 /// <summary> 42 /// <summary>
42 /// Creates the UI component that will be displayed to the user and returns it 43 /// Creates the UI component that will be displayed to the user and returns it
43 /// </summary> 44 /// </summary>
56 //Do nothing 57 //Do nothing
57 } 58 }
58 59
59 protected void HandleUnitEquipmentAmountChanged() 60 protected void HandleUnitEquipmentAmountChanged()
60 { 61 {
62 SetUnitEquipmentValuesFromUI();
63 }
64
65 protected void SetUnitEquipmentLimits(UnitEquipmentItem equip)
66 {
67 ui.IgnoreWidgets();
68
69 if (equip != null)
70 {
71 bool equipIsRatioLimit = UnitEquipmentUtil.IsEquipmentRatioLimited(unit, equip);
72 maxPercentage = GetMaxPercentageLimit(equip);
73 minPercentage = GetMinPercentageLimit(equip);
74 maxNumber = GetMaxNumericLimit(equip);
75 minNumber = GetMinNumericLimit(equip);
76
77 ui.SetUnitEquipmentLimits(equipIsRatioLimit, minPercentage, maxPercentage, minNumber, maxNumber);
78 ui.SetUnitEquipmentLimitsEnabled(true);
79 ui.SetOkayEnabledState(HasNonZeroEquipmentAmount());
80 SetEquipmentAmountControlEnabledStates();
81 }
82 else
83 {
84 maxPercentage = minPercentage = 0;
85 maxNumber = minNumber = 0;
86 ui.SetUnitEquipmentLimits(false, minPercentage, maxPercentage, minNumber, maxNumber);
87 ui.SetUnitEquipmentLimitsEnabled(false);
88 ui.SetOkayEnabledState(false);
89 }
90
91 ui.ListenToWidgets();
92 }
93
94 protected void SetUnitEquipmentValuesFromEquipment(UnitEquipmentItem equip)
95 {
96 isRatioAmount = UnitEquipmentUtil.GetEquipmentAmountIsRatio(unit, equip);
97 equipmentAmount = UnitEquipmentUtil.GetEquipmentAmount(unit, equip);
61 SetUnitEquipmentValues(); 98 SetUnitEquipmentValues();
62 } 99 SetEquipmentAmountControlEnabledStates();
63 100 }
101
64 /// <summary> 102 /// <summary>
65 /// Sets the unit equipment values on the UI 103 /// Sets the unit equipment values on the UI
66 /// </summary> 104 /// </summary>
67 105
68 protected void SetUnitEquipmentValues() 106 protected void SetUnitEquipmentValuesFromUI()
69 { 107 {
70 ui.SetOkayEnabledState(HasNonZeroEquipmentAmount());
71 isRatioAmount = ui.IsRatioEquipmentAmount; 108 isRatioAmount = ui.IsRatioEquipmentAmount;
72 109
73 if (isRatioAmount) 110 if (isRatioAmount)
74 { 111 {
75 equipmentAmount = ui.EquipmentPercentageAmount; 112 equipmentAmount = ui.EquipmentPercentageAmount;
76 SetEquipmentAmountsFromPercentage(equipmentAmount);
77 } 113 }
78 else 114 else
79 { 115 {
80 int equipmentIntAmount = ui.EquipmentNumericAmount; 116 int equipmentIntAmount = ui.EquipmentNumericAmount;
81 equipmentAmount = equipmentIntAmount; 117 equipmentAmount = equipmentIntAmount;
118 }
119
120 SetUnitEquipmentValues();
121 }
122
123 private void SetUnitEquipmentValues()
124 {
125 ui.IgnoreWidgets();
126
127 if (isRatioAmount)
128 {
129 SetEquipmentAmountsFromPercentage(equipmentAmount);
130 }
131 else
132 {
133 int equipmentIntAmount = (int)equipmentAmount;
82 SetEquipmentAmountsFromNumber(equipmentIntAmount); 134 SetEquipmentAmountsFromNumber(equipmentIntAmount);
83 } 135 }
136
137 ui.SetOkayEnabledState(equipmentAmount != 0);
138 ui.ListenToWidgets();
84 } 139 }
85 140
86 private void SetEquipmentAmountsFromPercentage(double equipAmount) 141 private void SetEquipmentAmountsFromPercentage(double equipAmount)
87 { 142 {
88 if (equipAmount > maxPercentage) 143 if (equipAmount > maxPercentage)