Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/02/14 16:01:01 (10 years ago)
Author:
aesterer
Message:

Added chart per variable feature to preprocessing chart view

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/PreprocessingChartView.cs

    r10712 r10717  
    2020#endregion
    2121
     22using System;
     23using System.Collections.Generic;
     24using System.Drawing;
    2225using System.Windows.Forms;
    2326using HeuristicLab.Analysis;
     27using HeuristicLab.Analysis.Views;
    2428using HeuristicLab.Collections;
    2529using HeuristicLab.Core;
     
    3640    private IChartLogic logic;
    3741    private DataTable dataTable;
     42    private List<DataTable> dataTablePerVariable;
    3843    private ICheckedItemList<StringValue> variableItemList;
     44    private List<DataRow> dataRows;
     45
    3946    protected DataRowVisualProperties.DataRowChartType chartType;
    4047    protected string chartTitle;
     48    protected bool allInOneMode = true;
    4149
    4250    private const string DEFAULT_CHART_TITLE = "Chart";
     
    5462        if (VariableIsDisplayed(variableName)) {
    5563          dataTable.Rows.Remove(variableName);
     64          dataTablePerVariable.Remove(dataTablePerVariable.Find( x => (x.Name == variableName)));
    5665        } else {
    57           dataTable.Rows.Add(logic.CreateDataRow(variableName, chartType));
     66          DataRow row = GetDataRow(variableName);
     67          //row.VisualProperties.Color = GetRandomColor();
     68          dataTable.Rows.Add(row);
     69          DataTable d = new DataTable(variableName);
     70          d.Rows.Add(row);
     71          dataTablePerVariable.Add(d);
    5872        }
    5973      }
    60     }
    61 
    62     public bool VariableIsDisplayed(string name) {
     74
     75      if (!allInOneMode)
     76        GenerateChart();
     77
     78    }
     79
     80    private Color GetRandomColor() {
     81      Random randomGen = new Random();
     82      KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
     83      KnownColor randomColorName = names[randomGen.Next(names.Length)];
     84      Color randomColor = Color.FromKnownColor(randomColorName);
     85      return randomColor;
     86    }
     87
     88    private bool VariableIsDisplayed(string name) {
    6389
    6490      foreach (var item in dataTable.Rows) {
     
    6995    }
    7096
    71     private void InitDataTable() {
    72       dataTable = logic.CreateDataTable(chartTitle, chartType);
    73       dataTableView.Content = dataTable;
    74     }
    75 
    76     private void InitVariablesListBox() {
    77       variableItemList = logic.CreateVariableItemList();
    78       checkedItemList.Content = variableItemList;
    79     }
    80 
    8197    protected override void RegisterContentEvents() {
    8298      base.RegisterContentEvents();
     
    96112      get { return (PreprocessingChartContent)base.Content; }
    97113      set { base.Content = value; }
     114    }
     115
     116    private void InitData() {
     117      variableItemList = logic.CreateVariableItemList();
     118      dataRows = logic.CreateAllDataRows(chartType);
     119
     120      // init data table
     121      dataTable = new DataTable(chartTitle);
     122      dataTable.Rows.AddRange(dataRows);
     123
     124      // init data table per variable
     125      dataTablePerVariable = new List<DataTable>();
     126      foreach(var checkedItem in variableItemList.CheckedItems)  {
     127        string variableName = variableItemList[checkedItem.Index].Value;
     128        DataTable d = new DataTable(variableName);
     129        DataRow row = GetDataRow(variableName);
     130        //row.VisualProperties.Color = GetRandomColor();
     131        d.Rows.Add(row);
     132        dataTablePerVariable.Add(d);
     133      }
     134
     135    }
     136
     137    private DataRow GetDataRow(string variableName) {
     138      foreach (DataRow row in dataRows) {
     139        if (row.Name == variableName)
     140          return row;
     141      }
     142      return null;
    98143    }
    99144
     
    102147      if (Content != null) {
    103148        logic = Content.ChartLogic;
    104         InitDataTable();
    105         InitVariablesListBox();
     149        InitData();
     150        checkedItemList.Content = variableItemList;
     151        GenerateChart();
    106152        variableItemList.CheckedItemsChanged += CheckedItemsChanged;
    107153        logic.Changed += PreprocessingData_Changed;
     
    109155    }
    110156
    111     //TODO: refactor: possible code duplication with HistogramLogic
     157    // TODO : handle also other changed events
    112158    void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) {
    113159      switch (e.Type) {
    114160        case DataPreprocessingChangedEventType.DeleteColumn:
    115           RemoveVariable(logic.GetVariableNameByIndex(e.Column));
     161          //RemoveVariable(logic.GetVariableNameByIndex(e.Column));
    116162          break;
    117163        case DataPreprocessingChangedEventType.AddColumn:
    118           AddVariable(logic.GetVariableNameByIndex(e.Column));
     164          //AddVariable(logic.GetVariableNameByIndex(e.Column));
    119165          break;
    120166        case DataPreprocessingChangedEventType.ChangeColumn:
    121167        case DataPreprocessingChangedEventType.ChangeItem:
    122           dataTable.Rows.Remove(logic.GetVariableNameByIndex(e.Column));
    123           dataTable.Rows.Add(logic.CreateDataRow(logic.GetVariableNameByIndex(e.Column), chartType));
     168          //UpdateDataForVariable(logic.GetVariableNameByIndex(e.Column));
     169
    124170          break;
    125171        case DataPreprocessingChangedEventType.DeleteRow:
    126172        case DataPreprocessingChangedEventType.AddRow:
    127           InitDataTable();
    128173          break;
    129174      }
     175    }
     176
     177    private void UpdateDataForVariable(string variableName) {
     178      DataRow newRow = logic.CreateDataRow(variableName, chartType);
     179      dataTable.Rows.Remove(variableName);
     180      dataTable.Rows.Add(newRow);
     181      DataTable dt = dataTablePerVariable.Find(x => (x.Rows.ItemName == variableName));
     182      dt.Rows.Remove(variableName);
     183      dt.Rows.Add(newRow);
    130184    }
    131185
     
    154208    }
    155209
     210    protected void GenerateChart() {
     211
     212      //Clear out the existing controls
     213      tableLayoutPanel.Controls.Clear();
     214
     215      //Clear out the existing row and column styles
     216      tableLayoutPanel.ColumnStyles.Clear();
     217      tableLayoutPanel.RowStyles.Clear();
     218      tableLayoutPanel.AutoScroll = false;
     219      tableLayoutPanel.AutoScroll = true;   
     220
     221      if (allInOneMode) {
     222        GenerateSingleChartLayout();
     223      } else
     224        GenerateMultiChartLayout();
     225    }
     226
     227    private void GenerateSingleChartLayout() {
     228      tableLayoutPanel.ColumnCount = 1;
     229      tableLayoutPanel.RowCount = 1;
     230      tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
     231      tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
     232      tableLayoutPanel.Controls.Add(dataTableView, 0, 0);
     233      dataTableView.Content = dataTable;
     234    }
     235
     236    private void GenerateMultiChartLayout() {
     237      int checkedItemsCnt = 0;
     238      foreach(var item in variableItemList.CheckedItems)
     239        checkedItemsCnt++;
     240
     241      int rows = 0;
     242      int columns = 0;
     243
     244      // set columns and rows based on number of items
     245      if (checkedItemsCnt <= 2)
     246        columns = 1;
     247      else if (checkedItemsCnt <= 6)
     248        columns = 2;
     249      else
     250        columns = 3;
     251
     252      if (columns == 3)
     253        rows = (checkedItemsCnt+2) / columns;
     254      else if(columns == 2)
     255        rows = (checkedItemsCnt + 1) / columns;
     256      else
     257        rows = checkedItemsCnt / columns;
     258
     259      //Now we will generate the table, setting up the row and column counts first
     260      tableLayoutPanel.ColumnCount = columns;
     261      tableLayoutPanel.RowCount = rows;
     262
     263      List<DataTable>.Enumerator enumerator = dataTablePerVariable.GetEnumerator();
     264      for (int x = 0; x < columns; x++) {
     265       
     266        if(rows <= 3)
     267          tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100 / columns));
     268        else
     269          //scrollbar is shown if there are more than 3 rows -> remove scroll bar width from total width
     270          tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, (tableLayoutPanel.Width - System.Windows.Forms.SystemInformation.VerticalScrollBarWidth) / columns));
     271        for (int y = 0; y < rows; y++) {
     272          //Add a row only when creating the first column
     273          if (x == 0) {
     274            // fixed chart size when there are more than 3 tables
     275            if (rows > 3)
     276              tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 300));
     277            else
     278              tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100 / rows));
     279          }
     280
     281          DataTableView dataView = new DataTableView();
     282          enumerator.MoveNext();
     283          DataTable d = enumerator.Current;
     284          if (d == null) {
     285            // dummy panel for empty field
     286            Panel p = new Panel();
     287            p.Dock = DockStyle.Fill;
     288            tableLayoutPanel.Controls.Add(p, y, x);
     289          }
     290          else {
     291            dataView.Content = d;
     292            dataView.Dock = DockStyle.Fill;
     293            tableLayoutPanel.Controls.Add(dataView, y, x);
     294          }
     295        }
     296      }
     297    }
     298
     299    //Remove horizontal scroll bar if visible
     300    private void tableLayoutPanel_Layout(object sender, LayoutEventArgs e) {
     301      if (tableLayoutPanel.HorizontalScroll.Visible) {
     302        // Add padding on the right in order to accomodate the vertical scrollbar
     303        int vWidth = SystemInformation.VerticalScrollBarWidth;
     304        tableLayoutPanel.Padding = new Padding(0, 0, vWidth, 0);
     305      } else {
     306        // Reset padding
     307        tableLayoutPanel.Padding = new Padding(0);
     308      }
     309    }
     310
     311    private void radioButton1_CheckedChanged(object sender, EventArgs e) {
     312      if (allInOneMode == false)
     313        allInOneMode = true;
     314      else
     315        allInOneMode = false;
     316      GenerateChart();
     317    }
     318
     319
     320
    156321  }
    157322}
Note: See TracChangeset for help on using the changeset viewer.