Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Visualization/3.2/ChartDataRowsModel.cs @ 1886

Last change on this file since 1886 was 1886, checked in by mstoeger, 15 years ago

removed unused interfaces/classes. reordered methods. #498

File size: 5.4 KB
RevLine 
[680]1using System;
2using System.Collections.Generic;
[864]3using System.Globalization;
[726]4using System.Xml;
5using HeuristicLab.Core;
[1061]6using System.Text;
[1341]7using HeuristicLab.Visualization.Options;
[680]8
[685]9namespace HeuristicLab.Visualization{
[761]10  public delegate void DataRowAddedHandler(IDataRow row);
11  public delegate void DataRowRemovedHandler(IDataRow row);
12  public delegate void ModelChangedHandler();
[685]13
[1886]14  public class ChartDataRowsModel : ItemBase, IChartDataRowsModel {
[1182]15    private string title = "Title";
[1341]16    private ViewSettings viewSettings = new ViewSettings();
[1880]17    private readonly XAxisDescriptor xAxisDescriptor = new XAxisDescriptor();
[1886]18    private readonly YAxisDescriptor defaultYAxisDescriptor = new YAxisDescriptor();
19    private readonly List<IDataRow> rows = new List<IDataRow>();
[1880]20
21    public ChartDataRowsModel() {
22      this.XAxis.XAxisDescriptorChanged += delegate { OnModelChanged(); };
[1876]23    }
24
[1886]25    public override IView CreateView() {
26      return new LineChart(this);
27    }
28
29    public string Title {
30      get { return title; }
31      set {
32        title = value;
33        OnModelChanged();
34      }
35    }
36
[1880]37    public XAxisDescriptor XAxis {
38      get { return xAxisDescriptor; }
[1190]39    }
40
[1350]41    public List<YAxisDescriptor> YAxes {
42      get {
43        Dictionary<YAxisDescriptor, object> yaxes = new Dictionary<YAxisDescriptor, object>();
[1190]44
[1350]45        foreach (IDataRow row in rows) {
46          yaxes[row.YAxis] = null;
47        }
48
49        return new List<YAxisDescriptor>(yaxes.Keys);
50      }
51    }
52
[1886]53    public YAxisDescriptor DefaultYAxis {
54      get { return defaultYAxisDescriptor; }
55    }
[1350]56
[859]57    public List<IDataRow> Rows{
58      get { return rows; }
[761]59    }
[685]60
[761]61    public void AddDataRow(IDataRow row) {
[1350]62      if (row.YAxis == null) {
63        row.YAxis = defaultYAxisDescriptor;
64      }
[761]65      rows.Add(row);
66      OnDataRowAdded(row);
[697]67    }
[726]68
[761]69    public void RemoveDataRow(IDataRow row) {
70      rows.Remove(row);
71      OnDataRowRemoved(row);
72    }
[726]73
[1285]74    // TODO implement calculation of max data row values
75    public int MaxDataRowValues {
76      get {
77        int max = 0;
78
79        foreach (IDataRow row in rows) {
80          max = Math.Max(max, row.Count);
81        }
82
83        return max;
84      }
85    }
86
[1341]87    public ViewSettings ViewSettings {
88      get { return viewSettings; }
89      set { viewSettings = value; }
90    }
91
[859]92    public event ModelChangedHandler ModelChanged;
93
94    protected void OnModelChanged() {
95      if (ModelChanged != null) {
96        ModelChanged();
97      }
98    }
99
[761]100    public event DataRowAddedHandler DataRowAdded;
[726]101
[761]102    protected void OnDataRowAdded(IDataRow row) {
103      if (DataRowAdded != null) {
104        DataRowAdded(row);
105      }
106    }
[726]107
[761]108    public event DataRowRemovedHandler DataRowRemoved;
[727]109
[761]110    protected void OnDataRowRemoved(IDataRow row) {
111      if (DataRowRemoved != null) {
112        DataRowRemoved(row);
[726]113      }
[761]114    }
[726]115
[761]116    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
[979]117      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
118
[1194]119      foreach (IDataRow row in rows) {
[979]120        XmlNode columnElement = document.CreateNode(XmlNodeType.Element, "row", null);
121
122        XmlAttribute idAttr = document.CreateAttribute("label");
[1194]123        idAttr.Value = row.Label;
[979]124        columnElement.Attributes.Append(idAttr);
125
[1061]126        StringBuilder builder = new StringBuilder();
127
[979]128        for (int i = 0; i < row.Count; i++) {
129          if (i == 0) {
[1061]130            builder.Append(row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
131            //columnElement.InnerText += row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
[979]132          } else {
[1061]133            builder.Append(";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
134            //columnElement.InnerText += ";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
[979]135          }
136        }
[1061]137        columnElement.InnerText += builder.ToString();
[979]138        node.AppendChild(columnElement);
139      }
[1385]140
[1881]141      XmlNode labelProviderNode = document.ImportNode(XAxis.LabelProvider.GetLabelProviderXmlNode(), true);
[1385]142      node.AppendChild(labelProviderNode);
143
[979]144      return node;   
[761]145    }
146
[726]147    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
[979]148      base.Populate(node, restoredObjects);
[731]149
[979]150      foreach (XmlNode dataRow in node.ChildNodes) {
[1385]151        if (dataRow.Name.Equals("LabelProvider")) {
[1881]152          XAxis.LabelProvider = XAxis.LabelProvider.PopulateLabelProviderXmlNode(dataRow);
[1385]153        } else {
154          XmlAttributeCollection attrs = dataRow.Attributes;
155          XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("label");
156          string rowLabel = rowIdAttr.Value;
157          DataRow row = new DataRow();
158          row.Label = rowLabel;
[979]159
[1385]160          string[] tokens = dataRow.InnerText.Split(';');
161          double[] data = new double[tokens.Length];
162          for (int i = 0; i < data.Length; i++) {
163            if (tokens[i].Length != 0) {
164              if (
165                double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) ==
166                false) {
167                throw new FormatException("Can't parse " + tokens[i] + " as double value.");
168              }
[979]169            }
170          }
[1385]171          row.AddValues(data);
172          AddDataRow(row);
[979]173        }
174      }
[726]175    }
[680]176  }
[761]177}
Note: See TracBrowser for help on using the repository browser.