Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/02/11 10:41:13 (13 years ago)
Author:
mkommend
Message:

#1479: Corrected changes from trunk integration.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs

    r6618 r6620  
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.Linq;
     25using HeuristicLab.Collections;
    2426using HeuristicLab.Common;
    2527using HeuristicLab.Core;
    2628using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    27 using System.Collections.Generic;
    2829
    2930namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
     
    120121    protected SymbolicExpressionGrammar(SymbolicExpressionGrammar original, Cloner cloner)
    121122      : base(original, cloner) {
    122       foreach (ISymbol symbol in Symbols)
     123      foreach (ISymbol symbol in symbols.Values)
    123124        RegisterSymbolEvents(symbol);
    124125
     
    161162    }
    162163
    163     protected override void AddSymbol(ISymbol symbol) {
     164    protected override sealed void AddSymbol(ISymbol symbol) {
    164165      base.AddSymbol(symbol);
    165166      RegisterSymbolEvents(symbol);
    166     }
    167     protected override void RemoveSymbol(ISymbol symbol) {
     167      OnChanged();
     168    }
     169    protected override sealed void RemoveSymbol(ISymbol symbol) {
    168170      DeregisterSymbolEvents(symbol);
    169171      base.RemoveSymbol(symbol);
     172      OnChanged();
    170173    }
    171174
     
    231234
    232235    #region symbol events
    233     protected virtual void RegisterSymbolEvents(ISymbol symbol) {
     236    private void RegisterSymbolEvents(ISymbol symbol) {
    234237      symbol.NameChanging += new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging);
    235238      symbol.NameChanged += new EventHandler(Symbol_NameChanged);
    236     }
    237     protected virtual void DeregisterSymbolEvents(ISymbol symbol) {
     239
     240      var groupSymbol = symbol as GroupSymbol;
     241      if (groupSymbol != null) RegisterGroupSymbolEvents(groupSymbol);
     242      else symbol.Changed += new EventHandler(Symbol_Changed);
     243    }
     244    private void DeregisterSymbolEvents(ISymbol symbol) {
    238245      symbol.NameChanging -= new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging);
    239246      symbol.NameChanged -= new EventHandler(Symbol_NameChanged);
     247
     248      var groupSymbol = symbol as GroupSymbol;
     249      if (groupSymbol != null) DeregisterGroupSymbolEvents(groupSymbol);
     250      else symbol.Changed -= new EventHandler(Symbol_Changed);
     251    }
     252
     253    private void RegisterGroupSymbolEvents(GroupSymbol groupSymbol) {
     254      groupSymbol.Changed += new EventHandler(GroupSymbol_Changed);
     255      groupSymbol.SymbolsCollection.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<ISymbol>(GroupSymbol_ItemsAdded);
     256      groupSymbol.SymbolsCollection.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<ISymbol>(GroupSymbol_ItemsRemoved);
     257      groupSymbol.SymbolsCollection.CollectionReset += new Collections.CollectionItemsChangedEventHandler<ISymbol>(GroupSymbol_CollectionReset);
     258    }
     259    private void DeregisterGroupSymbolEvents(GroupSymbol groupSymbol) {
     260      groupSymbol.Changed -= new EventHandler(GroupSymbol_Changed);
     261      groupSymbol.SymbolsCollection.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<ISymbol>(GroupSymbol_ItemsAdded);
     262      groupSymbol.SymbolsCollection.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<ISymbol>(GroupSymbol_ItemsRemoved);
     263      groupSymbol.SymbolsCollection.CollectionReset -= new Collections.CollectionItemsChangedEventHandler<ISymbol>(GroupSymbol_CollectionReset);
     264    }
     265
     266    private void Symbol_Changed(object sender, EventArgs e) {
     267      if (suppressEvents) return;
     268      ClearCaches();
     269      OnChanged();
     270    }
     271
     272    private void GroupSymbol_Changed(object sender, EventArgs e) {
     273      if (suppressEvents) return;
     274      suppressEvents = true;
     275      GroupSymbol groupSymbol = (GroupSymbol)sender;
     276      foreach (ISymbol symbol in groupSymbol.Flatten())
     277        symbol.Enabled = groupSymbol.Enabled;
     278      suppressEvents = false;
     279      ClearCaches();
     280      OnChanged();
    240281    }
    241282
     
    280321
    281322      ClearCaches();
     323      OnChanged();
     324    }
     325
     326    private void GroupSymbol_ItemsAdded(object sender, CollectionItemsChangedEventArgs<ISymbol> e) {
     327      suppressEvents = true;
     328      foreach (ISymbol symbol in e.Items)
     329        if (!ContainsSymbol(symbol))
     330          AddSymbol(symbol);
     331      suppressEvents = false;
     332      OnChanged();
     333    }
     334    private void GroupSymbol_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<ISymbol> e) {
     335      suppressEvents = true;
     336      foreach (ISymbol symbol in e.Items)
     337        if (ContainsSymbol(symbol))
     338          RemoveSymbol(symbol);
     339      suppressEvents = false;
     340      OnChanged();
     341    }
     342    private void GroupSymbol_CollectionReset(object sender, CollectionItemsChangedEventArgs<ISymbol> e) {
     343      suppressEvents = true;
     344      foreach (ISymbol symbol in e.Items)
     345        if (!ContainsSymbol(symbol))
     346          AddSymbol(symbol);
     347      foreach (ISymbol symbol in e.OldItems)
     348        if (ContainsSymbol(symbol))
     349          RemoveSymbol(symbol);
     350      suppressEvents = false;
     351      OnChanged();
    282352    }
    283353    #endregion
Note: See TracChangeset for help on using the changeset viewer.