Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/22/12 16:48:02 (12 years ago)
Author:
sforsten
Message:

#1821: it is now possible to select variables for the symbol VariableCondition

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/VariableConditionView.cs

    r5809 r7869  
    2121
    2222using System;
     23using System.Linq;
    2324using System.Windows.Forms;
     25using HeuristicLab.Collections;
     26using HeuristicLab.Core;
     27using HeuristicLab.Core.Views;
     28using HeuristicLab.Data;
    2429using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
    2530using HeuristicLab.MainForm;
     
    3035  [Content(typeof(VariableCondition), true)]
    3136  public partial class VariableConditionView : SymbolView {
     37    private CheckedItemCollectionView<StringValue> variableNamesView;
     38
    3239    public new VariableCondition Content {
    3340      get { return (VariableCondition)base.Content; }
     
    3744    public VariableConditionView() {
    3845      InitializeComponent();
     46      variableNamesView = new CheckedItemCollectionView<StringValue>();
     47      variableNamesView.Dock = DockStyle.Fill;
     48      variableNamesTabPage.Controls.Add(variableNamesView);
     49      variableNamesView.Content = new CheckedItemCollection<StringValue>();
     50
     51      RegisterVariableNamesViewContentEvents();
     52    }
     53
     54    private void RegisterVariableNamesViewContentEvents() {
     55      variableNamesView.Content.ItemsAdded += new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     56      variableNamesView.Content.ItemsRemoved += new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     57      variableNamesView.Content.CheckedItemsChanged += new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     58      variableNamesView.Content.CollectionReset += new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     59      foreach (var variable in variableNamesView.Content) {
     60        variable.ValueChanged += new EventHandler(variable_ValueChanged);
     61      }
     62    }
     63
     64    private void DeregisterVariableNamesViewContentEvents() {
     65      variableNamesView.Content.ItemsAdded -= new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     66      variableNamesView.Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     67      variableNamesView.Content.CheckedItemsChanged -= new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     68      variableNamesView.Content.CollectionReset -= new CollectionItemsChangedEventHandler<StringValue>(variableNames_Changed);
     69      foreach (var variable in variableNamesView.Content) {
     70        variable.ValueChanged -= new EventHandler(variable_ValueChanged);
     71      }
    3972    }
    4073
     
    76109    }
    77110
    78 
    79 
    80111    private void UpdateControl() {
    81112      if (Content == null) {
     
    88119        slopeChangeMuTextBox.Text = string.Empty;
    89120        slopeChangeSigmaTextBox.Text = string.Empty;
     121        // temporarily deregister to prevent circular calling of events
     122        DeregisterVariableNamesViewContentEvents();
     123        variableNamesView.Content.Clear();
     124        RegisterVariableNamesViewContentEvents();
    90125      } else {
     126        var existingEntries = variableNamesView.Content.ToList();
     127
     128        // temporarily deregister to prevent circular calling of events
     129        DeregisterVariableNamesViewContentEvents();
     130        // add additional entries
     131        foreach (var variableName in Content.VariableNames.Except(existingEntries.Select(x => x.Value)))
     132          variableNamesView.Content.Add(new StringValue(variableName), true);
     133        foreach (var oldEntry in existingEntries.Where(x => !Content.VariableNames.Contains(x.Value)))
     134          variableNamesView.Content.Remove(oldEntry);
     135        RegisterVariableNamesViewContentEvents();
     136
    91137        thresholdInitializationMuTextBox.Text = Content.ThresholdInitializerMu.ToString();
    92138        thresholdInitializationSigmaTextBox.Text = Content.ThresholdInitializerSigma.ToString();
     
    102148
    103149    #region control events
     150    private void variableNames_Changed(object sender, CollectionItemsChangedEventArgs<StringValue> args) {
     151      if (args.Items != null)
     152        foreach (var newVar in args.Items)
     153          newVar.ValueChanged += new EventHandler(variable_ValueChanged);
     154      if (args.OldItems != null)
     155        foreach (var oldVar in args.OldItems)
     156          oldVar.ValueChanged -= new EventHandler(variable_ValueChanged);
     157      UpdateContent();
     158    }
     159
     160    private void variable_ValueChanged(object sender, EventArgs e) {
     161      UpdateContent();
     162    }
     163
     164    private void UpdateContent() {
     165      if (Content != null) {
     166        DeregisterContentEvents();
     167        Content.VariableNames = variableNamesView.Content.CheckedItems.Select(x => x.Value).ToList();
     168        RegisterContentEvents();
     169      }
     170    }
     171
    104172    private void thresholdMuTextBox_TextChanged(object sender, EventArgs e) {
    105173      double value;
     
    162230    }
    163231    #endregion
    164 
    165232  }
    166233}
Note: See TracChangeset for help on using the changeset viewer.