Changeset 14905 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/ErcOptions.cs
- Timestamp:
- 05/02/17 20:42:40 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/ErcOptions.cs
r14897 r14905 1 1 namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc { 2 using System; 2 3 using System.Collections.Generic; 4 using System.Linq; 3 5 4 6 using Boolean; … … 29 31 public const string StringVectorParameterName = "StringVector"; 30 32 33 [Storable] 34 private readonly ReadOnlyCheckedItemCollection<IValueParameter> ercOptions; 35 [Storable] 36 private readonly NamedItemCollection<IValueParameter> ercOptionParameters; 37 private IDictionary<IValueParameter, EventHandler<bool>> ercOptionEnabledChangedHandler; 38 31 39 public ErcOptions() { 32 40 Name = "ERC Options"; 33 41 34 42 Parameters.Add(new FixedValueParameter<PercentValue>(ProbabilityParameterName)); 35 Parameters.Add(new ValueParameter<IntegerErcOptions>(IntegerParameterName)); 36 Parameters.Add(new ValueParameter<FloatErcOptions>(FloatParameterName)); 37 Parameters.Add(new ValueParameter<BooleanErcOptions>(BooleanParameterName)); 38 Parameters.Add(new ValueParameter<StringErcOptions>(StringParameterName)); 39 Parameters.Add(new ValueParameter<CharErcOptions>(CharParameterName)); 40 Parameters.Add(new ValueParameter<StringErcOptions>(NameParameterName)); 41 Parameters.Add(new ValueParameter<IntegerVectorErcOptions>(IntegerVectorParameterName)); 42 Parameters.Add(new ValueParameter<FloatVectorErcOptions>(FloatVectorParameterName)); 43 Parameters.Add(new ValueParameter<StringVectorErcOptions>(StringVectorParameterName)); 43 44 ercOptionParameters = new NamedItemCollection<IValueParameter> { 45 new ValueParameter<IntegerErcOptions>(IntegerParameterName), 46 new ValueParameter<FloatErcOptions>(FloatParameterName), 47 new ValueParameter<BooleanErcOptions>(BooleanParameterName), 48 new ValueParameter<StringErcOptions>(StringParameterName), 49 new ValueParameter<CharErcOptions>(CharParameterName), 50 new ValueParameter<StringErcOptions>(NameParameterName), 51 new ValueParameter<IntegerVectorErcOptions>(IntegerVectorParameterName), 52 new ValueParameter<FloatVectorErcOptions>(FloatVectorParameterName), 53 new ValueParameter<StringVectorErcOptions>(StringVectorParameterName) 54 }; 55 56 InitEnabledChangedHandlerDict(ercOptionParameters); 57 58 var optionsCollection = new CheckedItemCollection<IValueParameter>(ercOptionParameters); 59 ercOptions = new ReadOnlyCheckedItemCollection<IValueParameter>(optionsCollection); 60 Parameters.Add(new FixedValueParameter<ReadOnlyCheckedItemCollection<IValueParameter>>("Options", ercOptions)); 61 62 ercOptions.CheckedItemsChanged += ErcOptionsCheckedItemsChanged; 63 64 DisableAllOptions(); 44 65 } 45 66 46 67 [StorableConstructor] 47 public ErcOptions(bool deserializing) : base(deserializing) { } 48 49 public ErcOptions(ErcOptions origin, Cloner cloner) : base(origin, cloner) { } 68 protected ErcOptions(bool deserializing) : base(deserializing) { } 69 70 public ErcOptions(ErcOptions origin, Cloner cloner) 71 : base(origin, cloner) { 72 ercOptions = cloner.Clone(origin.ercOptions); 73 ercOptionParameters = cloner.Clone(origin.ercOptionParameters); 74 75 InitEnabledChangedHandlerDict(ercOptionParameters); 76 } 77 78 [StorableHook(HookType.AfterDeserialization)] 79 // ReSharper disable once UnusedMember.Local 80 private void AfterDeserialization() { 81 InitEnabledChangedHandlerDict(ercOptionParameters); 82 } 83 84 private void InitEnabledChangedHandlerDict(NamedItemCollection<IValueParameter> parameters) { 85 ercOptionEnabledChangedHandler = parameters 86 .ToDictionary<IValueParameter, IValueParameter, EventHandler<bool>>( 87 param => param, 88 param => (sender, state) => ercOptions.SetItemCheckedState(param, state)); 89 } 90 91 private void ErcOptionsCheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IValueParameter> e) { 92 foreach (var item in e.Items) { 93 var ercItem = (IErcItem)item.Value; 94 ercItem.IsEnabled = ercOptions.ItemChecked(item); 95 } 96 } 50 97 51 98 public IValueParameter<PercentValue> ErcProbabilityParameter … … 72 119 public IValueParameter<IntegerErcOptions> IntegerErcOptionsParameter 73 120 { 74 get { return (IValueParameter<IntegerErcOptions>) Parameters[IntegerParameterName]; }121 get { return (IValueParameter<IntegerErcOptions>)ercOptionParameters[IntegerParameterName]; } 75 122 } 76 123 77 124 public IntegerErcOptions IntegerErcOptions 78 125 { 79 get { return this.IntegerErcOptionsParameter.Value; }80 set { this.IntegerErcOptionsParameter.Value = value; }126 get { return IntegerErcOptionsParameter.Value; } 127 set { SetErcOptions(IntegerErcOptionsParameter, value); } 81 128 } 82 129 83 130 public IValueParameter<FloatErcOptions> FloatErcOptionsParameter 84 131 { 85 get { return (IValueParameter<FloatErcOptions>) Parameters[FloatParameterName]; }132 get { return (IValueParameter<FloatErcOptions>)ercOptionParameters[FloatParameterName]; } 86 133 } 87 134 88 135 public FloatErcOptions FloatErcOptions 89 136 { 90 get { return this.FloatErcOptionsParameter.Value; }91 set { this.FloatErcOptionsParameter.Value = value; }137 get { return FloatErcOptionsParameter.Value; } 138 set { SetErcOptions(FloatErcOptionsParameter, value); } 92 139 } 93 140 … … 97 144 public IValueParameter<CharErcOptions> CharErcOptionsParameter 98 145 { 99 get { return (IValueParameter<CharErcOptions>) Parameters[CharParameterName]; }146 get { return (IValueParameter<CharErcOptions>)ercOptionParameters[CharParameterName]; } 100 147 } 101 148 … … 103 150 { 104 151 get { return CharErcOptionsParameter.Value; } 105 set { CharErcOptionsParameter.Value = value; }152 set { SetErcOptions(CharErcOptionsParameter, value); } 106 153 } 107 154 108 155 public IValueParameter<BooleanErcOptions> BooleanErcOptionsParameter 109 156 { 110 get { return (IValueParameter<BooleanErcOptions>) Parameters[BooleanParameterName]; }157 get { return (IValueParameter<BooleanErcOptions>)ercOptionParameters[BooleanParameterName]; } 111 158 } 112 159 … … 114 161 { 115 162 get { return BooleanErcOptionsParameter.Value; } 116 set { BooleanErcOptionsParameter.Value = value; }163 set { SetErcOptions(BooleanErcOptionsParameter, value); } 117 164 } 118 165 119 166 public IValueParameter<StringErcOptions> StringErcOptionsParameter 120 167 { 121 get { return (IValueParameter<StringErcOptions>) Parameters[StringParameterName]; }168 get { return (IValueParameter<StringErcOptions>)ercOptionParameters[StringParameterName]; } 122 169 } 123 170 … … 125 172 { 126 173 get { return StringErcOptionsParameter.Value; } 127 set { S tringErcOptionsParameter.Value = value; }174 set { SetErcOptions(StringErcOptionsParameter, value); } 128 175 } 129 176 130 177 public IValueParameter<StringErcOptions> NameParameter 131 178 { 132 get { return (IValueParameter<StringErcOptions>) Parameters[NameParameterName]; }179 get { return (IValueParameter<StringErcOptions>)ercOptionParameters[NameParameterName]; } 133 180 } 134 181 … … 136 183 { 137 184 get { return NameParameter.Value; } 138 set { NameParameter.Value = value; }139 } 140 141 public IValueParameter<IntegerVectorErcOptions> IntegerVector Parameter142 { 143 get { return (IValueParameter<IntegerVectorErcOptions>) Parameters[IntegerVectorParameterName]; }185 set { SetErcOptions(NameParameter, value); } 186 } 187 188 public IValueParameter<IntegerVectorErcOptions> IntegerVectorErcOptionsParameter 189 { 190 get { return (IValueParameter<IntegerVectorErcOptions>)ercOptionParameters[IntegerVectorParameterName]; } 144 191 } 145 192 146 193 public IntegerVectorErcOptions IntegerVectorErcOptions 147 194 { 148 get { return IntegerVectorParameter.Value; }149 set { IntegerVectorParameter.Value = value; }150 } 151 152 public IValueParameter<StringVectorErcOptions> StringVector Parameter153 { 154 get { return (IValueParameter<StringVectorErcOptions>) Parameters[StringVectorParameterName]; }195 get { return this.IntegerVectorErcOptionsParameter.Value; } 196 set { SetErcOptions(this.IntegerVectorErcOptionsParameter, value); } 197 } 198 199 public IValueParameter<StringVectorErcOptions> StringVectorErcOptionsValueParameter 200 { 201 get { return (IValueParameter<StringVectorErcOptions>)ercOptionParameters[StringVectorParameterName]; } 155 202 } 156 203 157 204 public StringVectorErcOptions StringVectorErcOptions 158 205 { 159 get { return StringVectorParameter.Value; }160 set { S tringVectorParameter.Value = value; }161 } 162 163 public IValueParameter<FloatVectorErcOptions> FloatVector Parameter164 { 165 get { return (IValueParameter<FloatVectorErcOptions>) Parameters[FloatVectorParameterName]; }206 get { return this.StringVectorErcOptionsValueParameter.Value; } 207 set { SetErcOptions(this.StringVectorErcOptionsValueParameter, value); } 208 } 209 210 public IValueParameter<FloatVectorErcOptions> FloatVectorErcOptionsParameter 211 { 212 get { return (IValueParameter<FloatVectorErcOptions>)ercOptionParameters[FloatVectorParameterName]; } 166 213 } 167 214 168 215 public FloatVectorErcOptions FloatVectorErcOptions 169 216 { 170 get { return FloatVectorParameter.Value; }171 set { FloatVectorParameter.Value = value; }217 get { return this.FloatVectorErcOptionsParameter.Value; } 218 set { SetErcOptions(this.FloatVectorErcOptionsParameter, value); } 172 219 } 173 220 … … 175 222 return new ErcOptions(this, cloner); 176 223 } 224 225 public void DisableAllOptions() { 226 SetOptionsState(false); 227 } 228 229 public void EnableAllOptions() { 230 SetOptionsState(true); 231 } 232 233 public void SetOptionsState(bool state) { 234 foreach (var param in this.ercOptions) { 235 this.ercOptions.SetItemCheckedState(param, state); 236 } 237 } 238 239 private void SetErcOptions(IValueParameter param, IErcItem value) { 240 if (ercOptionEnabledChangedHandler[param] != null && param.Value != null) 241 ((IErcItem)param.Value).EnabledChanged -= ercOptionEnabledChangedHandler[param]; 242 243 param.Value = value; 244 ercOptions.SetItemCheckedState(param, value != null ? value.IsEnabled : false); 245 246 if (value != null) 247 value.EnabledChanged += ercOptionEnabledChangedHandler[param]; 248 } 177 249 } 178 250 }
Note: See TracChangeset
for help on using the changeset viewer.