Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/EnhancedStringConvertibleMatrixView.cs @ 8870

Last change on this file since 8870 was 8870, checked in by sforsten, 11 years ago

#1292:

  • corrected displaying of the Text of StringConvertibleMatrixVisibilityDialog and its subclasses
  • corrected sorting of EnhancedStringConvertibleMatrixView
File size: 4.6 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Drawing;
25using System.Linq;
26using System.Windows.Forms;
27using HeuristicLab.Common;
28using HeuristicLab.Data;
29using HeuristicLab.Data.Views;
30
31namespace HeuristicLab.Problems.DataAnalysis.Views {
32  public partial class EnhancedStringConvertibleMatrixView : StringConvertibleMatrixView {
33
34    protected IEnumerable<bool> columnVisibility, rowVisibility;
35
36    // sets the visibility of its columns for the next time it is updated
37    public IEnumerable<bool> ColumnVisibility { set { columnVisibility = value; } }
38    // sets the visibility of its rows for the next time it is updated
39    public IEnumerable<bool> RowVisibility { set { rowVisibility = value; } }
40
41    public double Maximum { get; set; }
42    public double Minimum { get; set; }
43
44    public new DoubleMatrix Content {
45      get { return (DoubleMatrix)base.Content; }
46      set { base.Content = value; }
47    }
48
49    public EnhancedStringConvertibleMatrixView() {
50      InitializeComponent();
51    }
52
53    public void ResetVisibility() {
54      columnVisibility = null;
55      rowVisibility = null;
56    }
57
58    protected override void UpdateColumnHeaders() {
59      base.UpdateColumnHeaders();
60      if (columnVisibility != null && Content != null && columnVisibility.Count() == dataGridView.ColumnCount) {
61        int i = 0;
62        foreach (var visibility in columnVisibility) {
63          dataGridView.Columns[i].Visible = visibility;
64          i++;
65        }
66      }
67    }
68    protected override void UpdateRowHeaders() {
69      if (rowVisibility != null && Content != null && rowVisibility.Count() == dataGridView.RowCount) {
70        int[] realRowIndex = Enumerable.Range(0, Content.Rows).ToArray();
71        int[] helper = new int[virtualRowIndices.Length];
72        Array.Copy(virtualRowIndices, helper, virtualRowIndices.Length);
73        Array.Sort(helper, realRowIndex);
74        for (int i = 0; i < dataGridView.RowCount; i++) {
75          dataGridView.Rows[realRowIndex[i]].Visible = rowVisibility.ElementAt(i);
76        }
77      }
78      base.UpdateRowHeaders();
79    }
80
81    protected virtual void ShowHideRows_Click(object sender, EventArgs e) {
82      var dialog = new StringConvertibleMatrixRowVisibilityDialog(this.dataGridView.Rows.Cast<DataGridViewRow>());
83      dialog.ShowDialog();
84      rowVisibility = dialog.Visibility;
85    }
86
87    protected override void ShowHideColumns_Click(object sender, EventArgs e) {
88      var dialog = new StringConvertibleMatrixColumnVisibilityDialog(this.dataGridView.Columns.Cast<DataGridViewColumn>());
89      dialog.ShowDialog();
90      columnVisibility = dialog.Visibility;
91    }
92
93    protected void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {
94      if (Content == null) return;
95      if (e.RowIndex < 0) return;
96      if (e.ColumnIndex < 0) return;
97      if (e.State.HasFlag(DataGridViewElementStates.Selected)) return;
98      if (!e.PaintParts.HasFlag(DataGridViewPaintParts.Background)) return;
99
100      int rowIndex = virtualRowIndices[e.RowIndex];
101      Color backColor = GetDataPointColor(Content[rowIndex, e.ColumnIndex], Minimum, Maximum);
102      using (Brush backColorBrush = new SolidBrush(backColor)) {
103        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
104      }
105      e.PaintContent(e.CellBounds);
106      e.Handled = true;
107    }
108
109    protected virtual Color GetDataPointColor(double value, double min, double max) {
110      if (double.IsNaN(value)) {
111        return Color.DarkGray;
112      }
113      IList<Color> colors = ColorGradient.Colors;
114      int index = (int)((colors.Count - 1) * (value - min) / (max - min));
115      if (index >= colors.Count) index = colors.Count - 1;
116      if (index < 0) index = 0;
117      return colors[index];
118    }
119  }
120}
Note: See TracBrowser for help on using the repository browser.