Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/06/10 01:56:04 (14 years ago)
Author:
swagner
Message:

Merged cloning refactoring branch back into trunk (#922)

Location:
trunk/sources
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources

  • trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorGraphVisualizationInfo.cs

    r4068 r4722  
    4646    [StorableConstructor]
    4747    private OperatorGraphVisualizationInfo(bool deserializing)
    48       : base() {
     48      : base(deserializing) {
    4949      this.operatorParameterCollectionMapping = new BidirectionalLookup<IOperator, IKeyedItemCollection<string, IParameter>>();
    5050      this.parameterOperatorMapping = new Dictionary<IParameter, IOperator>();
     51    }
     52    private OperatorGraphVisualizationInfo(OperatorGraphVisualizationInfo original, Cloner cloner)
     53      : base(original, cloner) {
     54      operatorShapeInfoMapping = new BidirectionalLookup<IOperator, IOperatorShapeInfo>();
     55      operatorParameterCollectionMapping = new BidirectionalLookup<IOperator, IKeyedItemCollection<string, IParameter>>();
     56      parameterOperatorMapping = new Dictionary<IParameter, IOperator>();
     57
     58      operatorGraph = cloner.Clone(original.operatorGraph);
     59      RegisterOperatorGraphEvents();
     60      oldInitialShape = cloner.Clone(original.oldInitialShape);
     61      oldInitialShapeColor = original.oldInitialShapeColor;
     62
     63      foreach (KeyValuePair<IOperator, IOperatorShapeInfo> pair in original.operatorShapeInfoMapping.FirstEnumerable) {
     64        IOperator op = cloner.Clone(pair.Key);
     65        IOperatorShapeInfo shapeInfo = cloner.Clone(pair.Value);
     66        RegisterOperatorEvents(op);
     67        operatorParameterCollectionMapping.Add(op, pair.Key.Parameters);
     68        operatorShapeInfoMapping.Add(op, shapeInfo);
     69      }
     70
     71      foreach (IOperator oper in operatorShapeInfoMapping.FirstValues) {
     72        foreach (IParameter param in oper.Parameters) {
     73          parameterOperatorMapping.Add(param, oper);
     74          IValueParameter opParam = param as IValueParameter;
     75          if (opParam != null && typeof(IOperator).IsAssignableFrom(param.DataType))
     76            RegisterOperatorParameterEvents(opParam);
     77          else
     78            RegisterParameterEvents(param);
     79        }
     80      }
     81      if (original.operatorGraph.InitialOperator != null) {
     82        IOperatorShapeInfo newInitialShapeInfo = original.operatorShapeInfoMapping.GetByFirst(original.operatorGraph.InitialOperator);
     83        if (newInitialShapeInfo != null) {
     84          oldInitialShapeColor = newInitialShapeInfo.Color;
     85          newInitialShapeInfo.Color = Color.LightGreen;
     86        }
     87        oldInitialShape = InitialShape;
     88        OnInitialShapeChanged();
     89      }
     90    }
     91    public override IDeepCloneable Clone(Cloner cloner) {
     92      return new OperatorGraphVisualizationInfo(this, cloner);
    5193    }
    5294
     
    64106
    65107    [StorableHook(HookType.AfterDeserialization)]
    66     private void DeserializationHook() {
     108    private void AfterDeserialization() {
    67109      this.operatorGraph.DeserializationFinished += new EventHandler(operatorGraph_DeserializationFinished);
    68110
     
    101143      }
    102144      this.operatorGraph.DeserializationFinished -= new EventHandler(operatorGraph_DeserializationFinished);
    103     }
    104 
    105     public override IDeepCloneable Clone(Cloner cloner) {
    106       OperatorGraphVisualizationInfo clone = (OperatorGraphVisualizationInfo)base.Clone(cloner);
    107       clone.operatorGraph = (OperatorGraph)cloner.Clone(this.operatorGraph);
    108       clone.RegisterOperatorGraphEvents();
    109       clone.oldInitialShape = (IOperatorShapeInfo)cloner.Clone(this.oldInitialShape);
    110       clone.oldInitialShapeColor = this.oldInitialShapeColor;
    111 
    112       IOperator op;
    113       IOperatorShapeInfo shapeInfo;
    114       foreach (KeyValuePair<IOperator, IOperatorShapeInfo> pair in this.operatorShapeInfoMapping.FirstEnumerable) {
    115         op = (IOperator)cloner.Clone(pair.Key);
    116         shapeInfo = (IOperatorShapeInfo)cloner.Clone(pair.Value);
    117         clone.RegisterOperatorEvents(op);
    118         clone.operatorParameterCollectionMapping.Add(op, pair.Key.Parameters);
    119         clone.operatorShapeInfoMapping.Add(op, shapeInfo);
    120       }
    121 
    122       foreach (IOperator oper in clone.operatorShapeInfoMapping.FirstValues) {
    123         foreach (IParameter param in oper.Parameters) {
    124           clone.parameterOperatorMapping.Add(param, oper);
    125           IValueParameter opParam = param as IValueParameter;
    126           if (opParam != null && typeof(IOperator).IsAssignableFrom(param.DataType))
    127             clone.RegisterOperatorParameterEvents(opParam);
    128           else
    129             clone.RegisterParameterEvents(param);
    130         }
    131       }
    132       if (this.operatorGraph.InitialOperator != null) {
    133         IOperatorShapeInfo newInitialShapeInfo = this.operatorShapeInfoMapping.GetByFirst(this.operatorGraph.InitialOperator);
    134         if (newInitialShapeInfo != null) {
    135           oldInitialShapeColor = newInitialShapeInfo.Color;
    136           newInitialShapeInfo.Color = Color.LightGreen;
    137         }
    138         oldInitialShape = this.InitialShape;
    139         this.OnInitialShapeChanged();
    140       }
    141       return clone;
    142145    }
    143146
Note: See TracChangeset for help on using the changeset viewer.