Changeset 6620 for branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs
- Timestamp:
- 08/02/11 10:41:13 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs
r6618 r6620 21 21 22 22 using System; 23 using System.Collections.Generic; 23 24 using System.Linq; 25 using HeuristicLab.Collections; 24 26 using HeuristicLab.Common; 25 27 using HeuristicLab.Core; 26 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 using System.Collections.Generic;28 29 29 30 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding { … … 120 121 protected SymbolicExpressionGrammar(SymbolicExpressionGrammar original, Cloner cloner) 121 122 : base(original, cloner) { 122 foreach (ISymbol symbol in Symbols)123 foreach (ISymbol symbol in symbols.Values) 123 124 RegisterSymbolEvents(symbol); 124 125 … … 161 162 } 162 163 163 protected override void AddSymbol(ISymbol symbol) {164 protected override sealed void AddSymbol(ISymbol symbol) { 164 165 base.AddSymbol(symbol); 165 166 RegisterSymbolEvents(symbol); 166 } 167 protected override void RemoveSymbol(ISymbol symbol) { 167 OnChanged(); 168 } 169 protected override sealed void RemoveSymbol(ISymbol symbol) { 168 170 DeregisterSymbolEvents(symbol); 169 171 base.RemoveSymbol(symbol); 172 OnChanged(); 170 173 } 171 174 … … 231 234 232 235 #region symbol events 233 pr otected virtualvoid RegisterSymbolEvents(ISymbol symbol) {236 private void RegisterSymbolEvents(ISymbol symbol) { 234 237 symbol.NameChanging += new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging); 235 238 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) { 238 245 symbol.NameChanging -= new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging); 239 246 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(); 240 281 } 241 282 … … 280 321 281 322 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(); 282 352 } 283 353 #endregion
Note: See TracChangeset
for help on using the changeset viewer.