Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Orienteering/3.3/OrienteeringSolution.cs @ 11307

Last change on this file since 11307 was 11307, checked in by pfleck, 10 years ago

#2208

  • Added missing PluginDependencies.
  • Sealed some classes.
File size: 8.7 KB
Line 
1using System;
2using System.Drawing;
3using HeuristicLab.Common;
4using HeuristicLab.Core;
5using HeuristicLab.Data;
6using HeuristicLab.Encodings.IntegerVectorEncoding;
7using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
8
9namespace HeuristicLab.Problems.Orienteering {
10  [Item("OrienteeringSolution", "Represents a Orienteering solution which can be visualized in the GUI.")]
11  [StorableClass]
12  public sealed class OrienteeringSolution : Item {
13    public static new Image StaticItemImage {
14      get { return HeuristicLab.Common.Resources.VSImageLibrary.Image; }
15    }
16
17    [Storable]
18    private IntegerVector integerVector;
19    public IntegerVector IntegerVector {
20      get { return integerVector; }
21      set {
22        if (integerVector != value) {
23          if (integerVector != null) DeregisterIntegerVectorEvents();
24          integerVector = value;
25          if (integerVector != null) RegisterIntegerVectorEvents();
26          OnIntegerVectorChanged();
27        }
28      }
29    }
30    [Storable]
31    private DoubleMatrix coordinates;
32    public DoubleMatrix Coordinates {
33      get { return coordinates; }
34      set {
35        if (coordinates != value) {
36          if (coordinates != null) DeregisterCoordinatesEvents();
37          coordinates = value;
38          if (coordinates != null) RegisterCoordinatesEvents();
39          OnCoordinatesChanged();
40        }
41      }
42    }
43    [Storable]
44    private IntValue startingPoint;
45    public IntValue StartingPoint {
46      get { return startingPoint; }
47      set {
48        if (startingPoint != value) {
49          if (startingPoint != null) DeregisterStartingPointEvents();
50          startingPoint = value;
51          if (startingPoint != null) RegisterStartingPointEvents();
52          OnStartingPointChanged();
53        }
54      }
55    }
56    [Storable]
57    private IntValue terminusPoint;
58    public IntValue TerminusPoint {
59      get { return terminusPoint; }
60      set {
61        if (terminusPoint != value) {
62          if (terminusPoint != null) DeregisterTerminusPointEvents();
63          terminusPoint = value;
64          if (terminusPoint != null) RegisterTerminusPointEvents();
65          OnTerminusPointChanged();
66        }
67      }
68    }
69    [Storable]
70    private DoubleArray scores;
71    public DoubleArray Scores {
72      get { return scores; }
73      set {
74        if (scores != value) {
75          if (scores != null) DeregisterScoresEvents();
76          scores = value;
77          if (scores != null) RegisterScoresEvents();
78          OnScoresChanged();
79        }
80      }
81    }
82    [Storable]
83    private DoubleValue quality;
84    public DoubleValue Quality {
85      get { return quality; }
86      set {
87        if (quality != value) {
88          if (quality != null) DeregisterQualityEvents();
89          quality = value;
90          if (quality != null) RegisterQualityEvents();
91          OnQualityChanged();
92        }
93      }
94    }
95
96    [StorableConstructor]
97    private OrienteeringSolution(bool deserializing)
98      : base(deserializing) { }
99    private OrienteeringSolution(OrienteeringSolution original, Cloner cloner)
100      : base(original, cloner) {
101      this.integerVector = cloner.Clone(original.integerVector);
102      this.coordinates = cloner.Clone(original.coordinates);
103      this.quality = cloner.Clone(original.quality);
104      Initialize();
105    }
106    public OrienteeringSolution(IntegerVector integerVector, DoubleMatrix coordinates, IntValue startingPoint, IntValue terminusPoint,
107      DoubleArray scores, DoubleValue quality)
108      : base() {
109      this.integerVector = integerVector;
110      this.coordinates = coordinates;
111      this.startingPoint = startingPoint;
112      this.terminusPoint = terminusPoint;
113      this.scores = scores;
114      this.quality = quality;
115      Initialize();
116    }
117
118    public override IDeepCloneable Clone(Cloner cloner) {
119      return new OrienteeringSolution(this, cloner);
120    }
121
122    [StorableHook(HookType.AfterDeserialization)]
123    private void AfterDeserialization() {
124      Initialize();
125    }
126
127    private void Initialize() {
128      if (integerVector != null) RegisterIntegerVectorEvents();
129      if (coordinates != null) RegisterCoordinatesEvents();
130      if (startingPoint != null) RegisterStartingPointEvents();
131      if (terminusPoint != null) RegisterTerminusPointEvents();
132      if (scores != null) RegisterScoresEvents();
133      if (quality != null) RegisterQualityEvents();
134    }
135
136    #region Events
137    public event EventHandler IntegerVectorChanged;
138    private void OnIntegerVectorChanged() {
139      var changed = IntegerVectorChanged;
140      if (changed != null)
141        changed(this, EventArgs.Empty);
142    }
143
144    public event EventHandler CoordinatesChanged;
145    private void OnCoordinatesChanged() {
146      var changed = CoordinatesChanged;
147      if (changed != null)
148        changed(this, EventArgs.Empty);
149    }
150
151    public event EventHandler StartingPointChanged;
152    private void OnStartingPointChanged() {
153      var changed = StartingPointChanged;
154      if (changed != null)
155        changed(this, EventArgs.Empty);
156    }
157
158    public event EventHandler TerminusPointChanged;
159    private void OnTerminusPointChanged() {
160      var changed = TerminusPointChanged;
161      if (changed != null)
162        changed(this, EventArgs.Empty);
163    }
164
165    public event EventHandler ScoresChanged;
166    private void OnScoresChanged() {
167      var changed = ScoresChanged;
168      if (changed != null)
169        changed(this, EventArgs.Empty);
170    }
171
172    public event EventHandler QualityChanged;
173    private void OnQualityChanged() {
174      var changed = QualityChanged;
175      if (changed != null)
176        changed(this, EventArgs.Empty);
177    }
178
179    private void RegisterIntegerVectorEvents() {
180      IntegerVector.ItemChanged += new EventHandler<EventArgs<int>>(IntegerVector_ItemChanged);
181      IntegerVector.Reset += new EventHandler(IntegerVector_Reset);
182    }
183    private void DeregisterIntegerVectorEvents() {
184      IntegerVector.ItemChanged -= new EventHandler<EventArgs<int>>(IntegerVector_ItemChanged);
185      IntegerVector.Reset -= new EventHandler(IntegerVector_Reset);
186    }
187    private void RegisterCoordinatesEvents() {
188      Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
189      Coordinates.Reset += new EventHandler(Coordinates_Reset);
190    }
191    private void DeregisterCoordinatesEvents() {
192      Coordinates.ItemChanged -= new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
193      Coordinates.Reset -= new EventHandler(Coordinates_Reset);
194    }
195    private void RegisterStartingPointEvents() {
196      StartingPoint.ValueChanged += new EventHandler(StartingPoint_ValueChanged);
197    }
198    private void DeregisterStartingPointEvents() {
199      StartingPoint.ValueChanged -= new EventHandler(StartingPoint_ValueChanged);
200    }
201    private void RegisterTerminusPointEvents() {
202      TerminusPoint.ValueChanged += new EventHandler(TerminusPoint_ValueChanged);
203    }
204    private void DeregisterTerminusPointEvents() {
205      TerminusPoint.ValueChanged -= new EventHandler(TerminusPoint_ValueChanged);
206    }
207    private void RegisterScoresEvents() {
208      Scores.ItemChanged += new EventHandler<EventArgs<int>>(Scores_ItemChanged);
209      Scores.Reset += new EventHandler(Scores_Reset);
210    }
211    private void DeregisterScoresEvents() {
212      Scores.ItemChanged -= new EventHandler<EventArgs<int>>(Scores_ItemChanged);
213      Scores.Reset -= new EventHandler(Scores_Reset);
214    }
215    private void RegisterQualityEvents() {
216      Quality.ValueChanged += new EventHandler(Quality_ValueChanged);
217    }
218    private void DeregisterQualityEvents() {
219      Quality.ValueChanged -= new EventHandler(Quality_ValueChanged);
220    }
221
222    private void IntegerVector_ItemChanged(object sender, EventArgs<int> e) {
223      OnIntegerVectorChanged();
224    }
225    private void IntegerVector_Reset(object sender, EventArgs e) {
226      OnIntegerVectorChanged();
227    }
228    private void Coordinates_ItemChanged(object sender, EventArgs<int, int> e) {
229      OnCoordinatesChanged();
230    }
231    private void Coordinates_Reset(object sender, EventArgs e) {
232      OnCoordinatesChanged();
233    }
234    private void StartingPoint_ValueChanged(object sender, EventArgs e) {
235      OnStartingPointChanged();
236    }
237    private void TerminusPoint_ValueChanged(object sender, EventArgs e) {
238      OnTerminusPointChanged();
239    }
240    private void Scores_ItemChanged(object sender, EventArgs<int> e) {
241      OnCoordinatesChanged();
242    }
243    private void Scores_Reset(object sender, EventArgs e) {
244      OnCoordinatesChanged();
245    }
246    private void Quality_ValueChanged(object sender, EventArgs e) {
247      OnQualityChanged();
248    }
249    #endregion
250  }
251}
Note: See TracBrowser for help on using the repository browser.