using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Core; using HeuristicLab.Common; namespace HeuristicLab.Parameters { [StorableClass] public class ParameterActualNameBinding : IParameterBinding { [Storable] private ILookupParameter source; public ILookupParameter Source { get { return source; } } [Storable] private ILookupParameter destination; public ILookupParameter Destination { get { return destination; } } [StorableConstructor] protected ParameterActualNameBinding(bool deserializing) { } protected ParameterActualNameBinding(ParameterActualNameBinding original, Cloner cloner) { this.source = cloner.Clone(source); this.destination = cloner.Clone(destination); RegisterEventHandlers(); } public ParameterActualNameBinding(ILookupParameter source, ILookupParameter destination) { if (source == null) throw new ArgumentNullException("source"); if (destination == null) throw new ArgumentNullException("destination"); this.source = source; this.destination = destination; RegisterEventHandlers(); } public override IDeepCloneable Clone(Cloner cloner) { return new ParameterActualNameBinding(this, cloner); } public void Bind() { RegisterEventHandlers(); } public void Unbind() { DeregisterEventHandlers(); } [StorableHook(HookType.AfterDeserialization)] private void AfterDeserialization() { RegisterEventHandlers(); } private void RegisterEventHandlers() { source.ActualNameChanged += new EventHandler(source_ActualNameChanged); } private void DeregisterEventHandlers() { source.ActualNameChanged -= new EventHandler(source_ActualNameChanged); } private void source_ActualNameChanged(object sender, EventArgs e) { if (destination.ActualName != source.ActualName) destination.ActualName = source.ActualName; } } }