Index: /branches/2922-DataCompletenessChartPerf/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.Designer.cs
===================================================================
--- /branches/2922-DataCompletenessChartPerf/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.Designer.cs	(revision 15941)
+++ /branches/2922-DataCompletenessChartPerf/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.Designer.cs	(revision 15942)
@@ -46,42 +46,105 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
-      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.nonMissingLabel = new System.Windows.Forms.Label();
+      this.missingLabel = new System.Windows.Forms.Label();
+      this.nonMissingColorPanel = new System.Windows.Forms.Panel();
+      this.missingColorPanel = new System.Windows.Forms.Panel();
+      this.legendPanel = new System.Windows.Forms.Panel();
+      this.pictureBox = new System.Windows.Forms.PictureBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.legendPanel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
       this.SuspendLayout();
       // 
-      // chart
+      // nonMissingLabel
       // 
-      this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+      this.nonMissingLabel.AutoSize = true;
+      this.nonMissingLabel.ForeColor = System.Drawing.Color.Black;
+      this.nonMissingLabel.Location = new System.Drawing.Point(159, 3);
+      this.nonMissingLabel.Name = "nonMissingLabel";
+      this.nonMissingLabel.Size = new System.Drawing.Size(91, 13);
+      this.nonMissingLabel.TabIndex = 1;
+      this.nonMissingLabel.Text = "non-missing value";
+      // 
+      // missingLabel
+      // 
+      this.missingLabel.AutoSize = true;
+      this.missingLabel.Location = new System.Drawing.Point(297, 3);
+      this.missingLabel.Name = "missingLabel";
+      this.missingLabel.Size = new System.Drawing.Size(70, 13);
+      this.missingLabel.TabIndex = 2;
+      this.missingLabel.Text = "missing value";
+      // 
+      // nonMissingColorPanel
+      // 
+      this.nonMissingColorPanel.BackColor = System.Drawing.Color.CornflowerBlue;
+      this.nonMissingColorPanel.Location = new System.Drawing.Point(118, 3);
+      this.nonMissingColorPanel.Name = "nonMissingColorPanel";
+      this.nonMissingColorPanel.Size = new System.Drawing.Size(35, 13);
+      this.nonMissingColorPanel.TabIndex = 3;
+      // 
+      // missingColorPanel
+      // 
+      this.missingColorPanel.BackColor = System.Drawing.Color.Orange;
+      this.missingColorPanel.Location = new System.Drawing.Point(256, 3);
+      this.missingColorPanel.Name = "missingColorPanel";
+      this.missingColorPanel.Size = new System.Drawing.Size(35, 13);
+      this.missingColorPanel.TabIndex = 4;
+      // 
+      // legendPanel
+      // 
+      this.legendPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.legendPanel.Controls.Add(this.nonMissingColorPanel);
+      this.legendPanel.Controls.Add(this.missingLabel);
+      this.legendPanel.Controls.Add(this.missingColorPanel);
+      this.legendPanel.Controls.Add(this.nonMissingLabel);
+      this.legendPanel.Location = new System.Drawing.Point(3, 3);
+      this.legendPanel.Name = "legendPanel";
+      this.legendPanel.Size = new System.Drawing.Size(487, 23);
+      this.legendPanel.TabIndex = 0;
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
             | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      chartArea1.Name = "ChartArea1";
-      this.chart.ChartAreas.Add(chartArea1);
-      legend1.Alignment = System.Drawing.StringAlignment.Center;
-      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend1.Name = "Legend1";
-      this.chart.Legends.Add(legend1);
-      this.chart.Location = new System.Drawing.Point(4, 4);
-      this.chart.Name = "chart";
-      this.chart.Size = new System.Drawing.Size(486, 337);
-      this.chart.TabIndex = 0;
-      this.chart.Text = "enhancedChart1";
+      this.pictureBox.Location = new System.Drawing.Point(3, 32);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(487, 309);
+      this.pictureBox.TabIndex = 1;
+      this.pictureBox.TabStop = false;
+      this.pictureBox.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox_Paint);
+      this.pictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
+      // 
+      // toolTip
+      // 
+      this.toolTip.AutomaticDelay = 0;
+      this.toolTip.ShowAlways = true;
+      this.toolTip.UseAnimation = false;
+      this.toolTip.UseFading = false;
       // 
       // DataCompletenessView
       // 
-      this.Controls.Add(this.chart);
+      this.Controls.Add(this.pictureBox);
+      this.Controls.Add(this.legendPanel);
       this.Name = "DataCompletenessView";
       this.Size = new System.Drawing.Size(493, 344);
-      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.legendPanel.ResumeLayout(false);
+      this.legendPanel.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
       this.ResumeLayout(false);
 
     }
 
+
     #endregion
-
-    private Visualization.ChartControlsExtensions.EnhancedChart chart;
-
-
+    private System.Windows.Forms.Label nonMissingLabel;
+    private System.Windows.Forms.Label missingLabel;
+    private System.Windows.Forms.Panel nonMissingColorPanel;
+    private System.Windows.Forms.Panel missingColorPanel;
+    private System.Windows.Forms.Panel legendPanel;
+    private System.Windows.Forms.PictureBox pictureBox;
+    private System.Windows.Forms.ToolTip toolTip;
   }
 }
Index: /branches/2922-DataCompletenessChartPerf/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.cs
===================================================================
--- /branches/2922-DataCompletenessChartPerf/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.cs	(revision 15941)
+++ /branches/2922-DataCompletenessChartPerf/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.cs	(revision 15942)
@@ -35,4 +35,5 @@
     private static readonly Color colorNonMissingValue = Color.CornflowerBlue;
     private static readonly Color colorMissingValue = Color.Orange;
+    private bool[,] valueMissing;
 
     public new DataCompletenessChartContent Content {
@@ -52,5 +53,5 @@
 
     private void InitData() {
-      bool[,] valueMissing = new bool[Content.PreprocessingData.Rows, Content.PreprocessingData.Columns];
+      valueMissing = new bool[Content.PreprocessingData.Rows, Content.PreprocessingData.Columns];
       for (int row = 0; row < Content.PreprocessingData.Rows; row++) {
         for (int column = 0; column < Content.PreprocessingData.Columns; column++)
@@ -59,55 +60,7 @@
 
       var yValuesPerColumn = ProcessMatrixForCharting(valueMissing);
-      PrepareChart();
-      CreateSeries(yValuesPerColumn);
     }
 
-    private void PrepareChart() {
-      chart.EnableDoubleClickResetsZoom = true;
-      chart.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0;
-      chart.ChartAreas[0].AxisY.MajorGrid.LineWidth = 0;
-      chart.ChartAreas[0].AxisX.IsMarginVisible = false;
-      chart.ChartAreas[0].AxisY.IsMarginVisible = false;
-      chart.ChartAreas[0].CursorX.IsUserEnabled = true;
-      chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
-      chart.ChartAreas[0].CursorY.IsUserEnabled = true;
-      chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
-      //custom x axis label
-      double from = 0.5;
-      foreach (String columnName in Content.PreprocessingData.VariableNames) {
-        double to = from + 1;
-        chart.ChartAreas[0].AxisX.CustomLabels.Add(from, to, columnName);
-        from = to;
-      }
-      //custom y axis label
-      chart.ChartAreas[0].AxisY.IsReversed = true;
-    }
 
-    private void CreateSeries(List<List<int>> yValuesPerColumn) {
-      chart.Series.SuspendUpdates();
-      //prepare series
-      int seriesCount = DetermineSeriesCount(yValuesPerColumn);
-      for (int i = 0; i < seriesCount; i++) {
-        Series series = new Series(CreateSeriesName(i));
-        series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
-        series.IsVisibleInLegend = false;
-        series["PointWidth"] = "1.0";
-        series.IsVisibleInLegend = i < 2; //only first two series are visible, non-missing and missing values
-        series.Color = i % 2 == 0 ? colorNonMissingValue : colorMissingValue;
-
-        var values = yValuesPerColumn.Select(y => i < y.Count ? y[i] : 0).ToArray();
-        series.Points.DataBindY(values);
-        chart.Series.Add(series);
-      }
-      chart.Series.ResumeUpdates();
-    }
-
-    private String CreateSeriesName(int index) {
-      if (index == 0)
-        return "non-missing value";
-      else if (index == 1)
-        return "missing value";
-      return "series" + index;
-    }
 
     #region data_preparation_for_chartseries
@@ -142,4 +95,27 @@
     }
     #endregion
+
+    private void pictureBox_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {
+      var m = valueMissing;
+      var g = e.Graphics;
+      g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
+      g.Clear(colorNonMissingValue);
+      // TODO consider cliprectangle
+      using (var bm = new Bitmap(m.GetLength(0), m.GetLength(1))) {
+        for (int r = 0; r < m.GetLength(0); r++)
+          for (int c = 0; c < m.GetLength(1); c++) {
+            if (m[r, c]) bm.SetPixel(r, c, colorMissingValue);
+          }
+        g.DrawImage(bm, 0, 0, pictureBox.Width, pictureBox.Height);
+      }
+    }
+
+    private void toolStrip2_ItemClicked(object sender, System.Windows.Forms.ToolStripItemClickedEventArgs e) {
+
+    }
+
+    private void pictureBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
+      toolTip.SetToolTip(pictureBox, "TODO: show variable")
+    }
   }
 }
