Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs @ 1341

Last change on this file since 1341 was 1341, checked in by bspisic, 16 years ago

#520 Renamed ViewPropertiesModel to ViewSettings and moved from LineChart to ChartDataRowsModel

File size: 6.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Globalization;
4using System.Xml;
5using HeuristicLab.Core;
6using System.Text;
7using HeuristicLab.Visualization.LabelProvider;
8using HeuristicLab.Visualization.Options;
9
10namespace HeuristicLab.Visualization{
11  public delegate void DataRowAddedHandler(IDataRow row);
12  public delegate void DataRowRemovedHandler(IDataRow row);
13  public delegate void ModelChangedHandler();
14
15  public class ChartDataRowsModel : ChartDataModelBase, IChartDataRowsModel{
16    private string title = "Title";
17    //private string xAxisLabel;
18    private ILabelProvider labelProvider = new ContinuousLabelProvider("0.##");
19
20    private ViewSettings viewSettings = new ViewSettings();
21
22    public ILabelProvider XAxisLabelProvider {
23      get { return labelProvider; }
24      set{
25        this.labelProvider = value;
26        OnModelChanged();
27      }
28    }
29
30
31    private readonly List<IDataRow> rows = new List<IDataRow>();
32    //private readonly List<string> xLabels = new List<string>();
33
34    //public List<string> XLabels{
35    //  get { return xLabels; }
36    //}
37
38    public List<IDataRow> Rows{
39      get { return rows; }
40    }
41
42    public string Title {
43      get { return title; }
44      set {
45        title = value;
46        OnModelChanged();
47      }
48    }
49    //public string XAxisLabel {
50    //  get { return xAxisLabel; }
51    //  set {
52    //    xAxisLabel = value;
53    //    OnModelChanged();
54    //  }
55    //}
56
57    public override IView CreateView() {
58      return new LineChart(this);
59    }
60
61    //public void AddLabel(string label) {
62    //  xLabels.Add(label);
63    //  OnModelChanged();
64    //}
65
66    //public void AddLabel(string label, int index) {
67    //  xLabels[index] = label;
68    //  OnModelChanged();
69    //}
70
71    //public void AddLabels(string[] labels) {
72    //  foreach (var s in labels){
73    //    AddLabel(s);
74    //  }
75    //  //OnModelChanged();
76    //}
77
78    //public void AddLabels(string[] labels, int index) {
79    //  int i = 0;
80    //  foreach (var s in labels){
81    //    AddLabel(s, index + i);
82    //    i++;
83    //  }
84    //  //OnModelChanged();
85    //}
86
87    //public void ModifyLabel(string label, int index) {
88    //  xLabels[index] = label;
89    //  OnModelChanged();
90    //}
91
92    //public void ModifyLabels(string[] labels, int index) {
93    //  int i = 0;
94    //  foreach (var s in labels){
95    //    ModifyLabel(s, index + i);
96    //    i++;
97    //  }
98    //  //OnModelChanged();
99    //}
100
101    //public void RemoveLabel(int index) {
102    //  xLabels.RemoveAt(index);
103    //  OnModelChanged();
104    //}
105
106    //public void RemoveLabels(int index, int count) {
107    //  for (int i = index; i < index + count; i++ ){
108    //    RemoveLabel(i);
109    //  }
110    //  //OnModelChanged();
111    //}
112
113    public void AddDataRow(IDataRow row) {
114      rows.Add(row);
115      OnDataRowAdded(row);
116    }
117
118    public void RemoveDataRow(IDataRow row) {
119      rows.Remove(row);
120      OnDataRowRemoved(row);
121    }
122
123    // TODO implement calculation of max data row values
124    public int MaxDataRowValues {
125      get {
126        int max = 0;
127
128        foreach (IDataRow row in rows) {
129          max = Math.Max(max, row.Count);
130        }
131
132        return max;
133      }
134    }
135
136    public ViewSettings ViewSettings {
137      get { return viewSettings; }
138      set { viewSettings = value; }
139    }
140
141    public event ModelChangedHandler ModelChanged;
142
143    protected void OnModelChanged() {
144      if (ModelChanged != null) {
145        ModelChanged();
146      }
147    }
148
149    public event DataRowAddedHandler DataRowAdded;
150
151    protected void OnDataRowAdded(IDataRow row) {
152      if (DataRowAdded != null) {
153        DataRowAdded(row);
154      }
155    }
156
157    public event DataRowRemovedHandler DataRowRemoved;
158
159    protected void OnDataRowRemoved(IDataRow row) {
160      if (DataRowRemoved != null) {
161        DataRowRemoved(row);
162      }
163    }
164
165    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
166      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
167
168      foreach (IDataRow row in rows) {
169        XmlNode columnElement = document.CreateNode(XmlNodeType.Element, "row", null);
170
171        XmlAttribute idAttr = document.CreateAttribute("label");
172        idAttr.Value = row.Label;
173        columnElement.Attributes.Append(idAttr);
174
175        StringBuilder builder = new StringBuilder();
176
177        for (int i = 0; i < row.Count; i++) {
178          if (i == 0) {
179            builder.Append(row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
180            //columnElement.InnerText += row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
181          } else {
182            builder.Append(";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
183            //columnElement.InnerText += ";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
184          }
185        }
186        columnElement.InnerText += builder.ToString();
187        node.AppendChild(columnElement);
188      }
189      return node;   
190    }
191
192    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
193      base.Populate(node, restoredObjects);
194
195      foreach (XmlNode dataRow in node.ChildNodes) {
196        XmlAttributeCollection attrs = dataRow.Attributes;
197        XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("label");
198        string rowLabel = rowIdAttr.Value;
199        DataRow row = new DataRow();
200        row.Label = rowLabel;
201
202        string[] tokens = dataRow.InnerText.Split(';');
203        double[] data = new double[tokens.Length];
204        for (int i = 0; i < data.Length; i++) {
205          if (tokens[i].Length != 0) {
206            if (
207              double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) ==
208              false) {
209              throw new FormatException("Can't parse " + tokens[i] + " as double value.");
210            }
211          }
212        }
213        row.AddValues(data);
214
215        AddDataRow(row);
216      }
217    }
218  }
219}
Note: See TracBrowser for help on using the repository browser.