Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/02/17 20:42:40 (7 years ago)
Author:
pkimmesw
Message:

#2665 Made ErcOptions checkable

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis.Base/Erc/ErcOptions.cs

    r14897 r14905  
    11namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc {
     2  using System;
    23  using System.Collections.Generic;
     4  using System.Linq;
    35
    46  using Boolean;
     
    2931    public const string StringVectorParameterName = "StringVector";
    3032
     33    [Storable]
     34    private readonly ReadOnlyCheckedItemCollection<IValueParameter> ercOptions;
     35    [Storable]
     36    private readonly NamedItemCollection<IValueParameter> ercOptionParameters;
     37    private IDictionary<IValueParameter, EventHandler<bool>> ercOptionEnabledChangedHandler;
     38
    3139    public ErcOptions() {
    3240      Name = "ERC Options";
    3341
    3442      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();
    4465    }
    4566
    4667    [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    }
    5097
    5198    public IValueParameter<PercentValue> ErcProbabilityParameter
     
    72119    public IValueParameter<IntegerErcOptions> IntegerErcOptionsParameter
    73120    {
    74       get { return (IValueParameter<IntegerErcOptions>)Parameters[IntegerParameterName]; }
     121      get { return (IValueParameter<IntegerErcOptions>)ercOptionParameters[IntegerParameterName]; }
    75122    }
    76123
    77124    public IntegerErcOptions IntegerErcOptions
    78125    {
    79       get { return this.IntegerErcOptionsParameter.Value; }
    80       set { this.IntegerErcOptionsParameter.Value = value; }
     126      get { return IntegerErcOptionsParameter.Value; }
     127      set { SetErcOptions(IntegerErcOptionsParameter, value); }
    81128    }
    82129
    83130    public IValueParameter<FloatErcOptions> FloatErcOptionsParameter
    84131    {
    85       get { return (IValueParameter<FloatErcOptions>)Parameters[FloatParameterName]; }
     132      get { return (IValueParameter<FloatErcOptions>)ercOptionParameters[FloatParameterName]; }
    86133    }
    87134
    88135    public FloatErcOptions FloatErcOptions
    89136    {
    90       get { return this.FloatErcOptionsParameter.Value; }
    91       set { this.FloatErcOptionsParameter.Value = value; }
     137      get { return FloatErcOptionsParameter.Value; }
     138      set { SetErcOptions(FloatErcOptionsParameter, value); }
    92139    }
    93140
     
    97144    public IValueParameter<CharErcOptions> CharErcOptionsParameter
    98145    {
    99       get { return (IValueParameter<CharErcOptions>)Parameters[CharParameterName]; }
     146      get { return (IValueParameter<CharErcOptions>)ercOptionParameters[CharParameterName]; }
    100147    }
    101148
     
    103150    {
    104151      get { return CharErcOptionsParameter.Value; }
    105       set { CharErcOptionsParameter.Value = value; }
     152      set { SetErcOptions(CharErcOptionsParameter, value); }
    106153    }
    107154
    108155    public IValueParameter<BooleanErcOptions> BooleanErcOptionsParameter
    109156    {
    110       get { return (IValueParameter<BooleanErcOptions>)Parameters[BooleanParameterName]; }
     157      get { return (IValueParameter<BooleanErcOptions>)ercOptionParameters[BooleanParameterName]; }
    111158    }
    112159
     
    114161    {
    115162      get { return BooleanErcOptionsParameter.Value; }
    116       set { BooleanErcOptionsParameter.Value = value; }
     163      set { SetErcOptions(BooleanErcOptionsParameter, value); }
    117164    }
    118165
    119166    public IValueParameter<StringErcOptions> StringErcOptionsParameter
    120167    {
    121       get { return (IValueParameter<StringErcOptions>)Parameters[StringParameterName]; }
     168      get { return (IValueParameter<StringErcOptions>)ercOptionParameters[StringParameterName]; }
    122169    }
    123170
     
    125172    {
    126173      get { return StringErcOptionsParameter.Value; }
    127       set { StringErcOptionsParameter.Value = value; }
     174      set { SetErcOptions(StringErcOptionsParameter, value); }
    128175    }
    129176
    130177    public IValueParameter<StringErcOptions> NameParameter
    131178    {
    132       get { return (IValueParameter<StringErcOptions>)Parameters[NameParameterName]; }
     179      get { return (IValueParameter<StringErcOptions>)ercOptionParameters[NameParameterName]; }
    133180    }
    134181
     
    136183    {
    137184      get { return NameParameter.Value; }
    138       set { NameParameter.Value = value; }
    139     }
    140 
    141     public IValueParameter<IntegerVectorErcOptions> IntegerVectorParameter
    142     {
    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]; }
    144191    }
    145192
    146193    public IntegerVectorErcOptions IntegerVectorErcOptions
    147194    {
    148       get { return IntegerVectorParameter.Value; }
    149       set { IntegerVectorParameter.Value = value; }
    150     }
    151 
    152     public IValueParameter<StringVectorErcOptions> StringVectorParameter
    153     {
    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]; }
    155202    }
    156203
    157204    public StringVectorErcOptions StringVectorErcOptions
    158205    {
    159       get { return StringVectorParameter.Value; }
    160       set { StringVectorParameter.Value = value; }
    161     }
    162 
    163     public IValueParameter<FloatVectorErcOptions> FloatVectorParameter
    164     {
    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]; }
    166213    }
    167214
    168215    public FloatVectorErcOptions FloatVectorErcOptions
    169216    {
    170       get { return FloatVectorParameter.Value; }
    171       set { FloatVectorParameter.Value = value; }
     217      get { return this.FloatVectorErcOptionsParameter.Value; }
     218      set { SetErcOptions(this.FloatVectorErcOptionsParameter, value); }
    172219    }
    173220
     
    175222      return new ErcOptions(this, cloner);
    176223    }
     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    }
    177249  }
    178250}
Note: See TracChangeset for help on using the changeset viewer.