Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 731 was 731, checked in by cbahner, 16 years ago

#320 first persistence mechanism load

File size: 3.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Globalization;
4using System.IO;
5using System.Linq;
6using System.Runtime.Serialization;
7using System.Text;
8//using System.Collections.Specialized;
9using System.Xml;
10using System.Xml.Serialization;
11using HeuristicLab.Core;
12using HeuristicLab.Data;
13
14
15namespace HeuristicLab.Visualization{
16  public class ChartDataRowsModel : ChartDataModelBase, IChartDataRowsModel {
17
18    private IntData test = new IntData(1);
19   
20    public ChartDataRowsModel(){
21
22      columns = new List<ChartDataRowsModelColumn>();
23
24
25    }
26
27    public void AddDataRow(int id){
28
29      double[] vals = new double[0];
30
31      ChartDataRowsModelColumn col = new ChartDataRowsModelColumn(id, vals);
32
33      columns.Add(col);
34    }
35
36    public void PushData(int dataRowId, double value){
37
38      double[] vals = new double[columns[dataRowId].Values.Length + 1];
39      for (int i = 0; i < columns[dataRowId].Values.Length; i++) {
40        vals[i] = columns[dataRowId].Values[i];
41
42      }
43
44      vals[vals.Length-1] = value;
45      columns[dataRowId].Values = vals;
46
47      RaiseColumnChanged(ChangeType.Add, vals.Length-1, new double[1]{value});
48    }
49
50    public override IView CreateView() {
51      //return new LineChart(this); when LineChart is implemented
52      return new IntDataView(test);
53    }
54
55    public event ChartDataRowsModelColumnChangedHandler ColumnChanged;
56
57    private void RaiseColumnChanged(ChangeType type, long columnId, double[] values) {
58      if (ColumnChanged != null) {
59        ColumnChanged(type, columnId, values);
60      }
61    }
62
63    private List<ChartDataRowsModelColumn> columns;
64
65    public List<ChartDataRowsModelColumn> Columns {
66      get { return columns; }
67    }
68
69
70   
71    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
72
73      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
74
75      foreach (ChartDataRowsModelColumn column in Columns){
76        XmlNode columnElement = document.CreateNode(XmlNodeType.Element, "column", null);
77
78        XmlAttribute idAttr = document.CreateAttribute("id");
79        idAttr.Value = (column.ColumnId).ToString();
80        columnElement.Attributes.Append(idAttr);
81
82        for (int i = 0; i < column.Values.Length; i++){
83          if (i == 0){
84            columnElement.InnerText += column.Values[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
85          } else{
86            columnElement.InnerText += ";" + column.Values[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
87          }
88        }
89        node.AppendChild(columnElement);
90      }
91     
92      return node;
93
94    }
95
96
97   
98    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
99      base.Populate(node, restoredObjects);
100
101
102      foreach (XmlNode column in node.ChildNodes){
103        XmlAttributeCollection attrs = column.Attributes;
104        XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("id");
105        int rowId = int.Parse(rowIdAttr.Value);
106        AddDataRow(rowId);
107        string[] tokens = column.InnerText.Split(';');
108        double[] data = new double[tokens.Length];
109        for (int i = 0; i < data.Length; i++){
110          test.Data = i;
111          data[i] = 2.3;
112          //if(double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) == false) {
113          //  throw new FormatException("Can't parse " + tokens[i] + " as double value.");
114          //}
115
116        }
117        Columns[rowId-1].Values = data;
118      }
119    }
120   
121  }
122}
Note: See TracBrowser for help on using the repository browser.