Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 1190 was 1190, checked in by gkragl, 16 years ago

Implemented XAxisLabelProvider and YAxisLabelProvider (#434, #435 )

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