Free cookie consent management tool by TermsFeed Policy Generator

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

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

#2208 improved visualization of orienteering solution

File size: 6.4 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 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 DoubleArray scores;
45    public DoubleArray Scores {
46      get { return scores; }
47      set {
48        if (scores != value) {
49          if (scores != null) DeregisterScoresEvents();
50          scores = value;
51          if (scores != null) RegisterScoresEvents();
52          OnScoresChanged();
53        }
54      }
55    }
56    [Storable]
57    private DoubleValue quality;
58    public DoubleValue Quality {
59      get { return quality; }
60      set {
61        if (quality != value) {
62          if (quality != null) DeregisterQualityEvents();
63          quality = value;
64          if (quality != null) RegisterQualityEvents();
65          OnQualityChanged();
66        }
67      }
68    }
69
70    [StorableConstructor]
71    private OrienteeringSolution(bool deserializing) : base(deserializing) { }
72    private OrienteeringSolution(OrienteeringSolution original, Cloner cloner)
73      : base(original, cloner) {
74      this.integerVector = cloner.Clone(original.integerVector);
75      this.coordinates = cloner.Clone(original.coordinates);
76      this.quality = cloner.Clone(original.quality);
77      Initialize();
78    }
79    public OrienteeringSolution(IntegerVector integerVector, DoubleMatrix coordinates, DoubleArray scores, DoubleValue quality)
80      : base() {
81      this.integerVector = integerVector;
82      this.coordinates = coordinates;
83      this.scores = scores;
84      this.quality = quality;
85      Initialize();
86    }
87
88    public override IDeepCloneable Clone(Cloner cloner) {
89      return new OrienteeringSolution(this, cloner);
90    }
91
92    [StorableHook(HookType.AfterDeserialization)]
93    private void AfterDeserialization() {
94      Initialize();
95    }
96
97    private void Initialize() {
98      if (integerVector != null) RegisterIntegerVectorEvents();
99      if (coordinates != null) RegisterCoordinatesEvents();
100      if (scores != null) RegisterScoresEvents();
101      if (quality != null) RegisterQualityEvents();
102    }
103
104    #region Events
105    public event EventHandler IntegerVectorChanged;
106    private void OnIntegerVectorChanged() {
107      var changed = IntegerVectorChanged;
108      if (changed != null)
109        changed(this, EventArgs.Empty);
110    }
111
112    public event EventHandler CoordinatesChanged;
113    private void OnCoordinatesChanged() {
114      var changed = CoordinatesChanged;
115      if (changed != null)
116        changed(this, EventArgs.Empty);
117    }
118
119    public event EventHandler ScoresChanged;
120    private void OnScoresChanged() {
121      var changed = ScoresChanged;
122      if (changed != null)
123        changed(this, EventArgs.Empty);
124    }
125
126    public event EventHandler QualityChanged;
127    private void OnQualityChanged() {
128      var changed = QualityChanged;
129      if (changed != null)
130        changed(this, EventArgs.Empty);
131    }
132
133    private void RegisterIntegerVectorEvents() {
134      IntegerVector.ItemChanged += new EventHandler<EventArgs<int>>(IntegerVector_ItemChanged);
135      IntegerVector.Reset += new EventHandler(IntegerVector_Reset);
136    }
137    private void DeregisterIntegerVectorEvents() {
138      IntegerVector.ItemChanged -= new EventHandler<EventArgs<int>>(IntegerVector_ItemChanged);
139      IntegerVector.Reset -= new EventHandler(IntegerVector_Reset);
140    }
141    private void RegisterCoordinatesEvents() {
142      Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
143      Coordinates.Reset += new EventHandler(Coordinates_Reset);
144    }
145    private void DeregisterCoordinatesEvents() {
146      Coordinates.ItemChanged -= new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
147      Coordinates.Reset -= new EventHandler(Coordinates_Reset);
148    }
149    private void RegisterScoresEvents() {
150      Scores.ItemChanged += new EventHandler<EventArgs<int>>(Scores_ItemChanged);
151      Scores.Reset += new EventHandler(Scores_Reset);
152    }
153    private void DeregisterScoresEvents() {
154      Scores.ItemChanged -= new EventHandler<EventArgs<int>>(Scores_ItemChanged);
155      Scores.Reset -= new EventHandler(Scores_Reset);
156    }
157    private void RegisterQualityEvents() {
158      Quality.ValueChanged += new EventHandler(Quality_ValueChanged);
159    }
160    private void DeregisterQualityEvents() {
161      Quality.ValueChanged -= new EventHandler(Quality_ValueChanged);
162    }
163
164    private void IntegerVector_ItemChanged(object sender, EventArgs<int> e) {
165      OnIntegerVectorChanged();
166    }
167    private void IntegerVector_Reset(object sender, EventArgs e) {
168      OnIntegerVectorChanged();
169    }
170    private void Coordinates_ItemChanged(object sender, EventArgs<int, int> e) {
171      OnCoordinatesChanged();
172    }
173    private void Coordinates_Reset(object sender, EventArgs e) {
174      OnCoordinatesChanged();
175    }
176    private void Scores_ItemChanged(object sender, EventArgs<int> e) {
177      OnCoordinatesChanged();
178    }
179    private void Scores_Reset(object sender, EventArgs e) {
180      OnCoordinatesChanged();
181    }
182    private void Quality_ValueChanged(object sender, EventArgs e) {
183      OnQualityChanged();
184    }
185    #endregion
186  }
187}
Note: See TracBrowser for help on using the repository browser.