Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 8600)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 8907)
@@ -116,4 +116,22 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ScatterPlotVisualPropertiesDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ScatterPlotVisualPropertiesDialog.Designer.cs">
+      <DependentUpon>ScatterPlotVisualPropertiesDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ScatterPlotVisualPropertiesControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScatterPlotVisualPropertiesControl.Designer.cs">
+      <DependentUpon>ScatterPlotVisualPropertiesControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ScatterPlotDataRowVisualPropertiesControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScatterPlotDataRowVisualPropertiesControl.Designer.cs">
+      <DependentUpon>ScatterPlotDataRowVisualPropertiesControl.cs</DependentUpon>
+    </Compile>
     <Compile Include="ScatterPlotView.cs">
       <SubType>UserControl</SubType>
@@ -284,5 +302,5 @@
   -->
   <PropertyGroup>
-   <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -291,5 +309,5 @@
 call PreBuildEvent.cmd
 </PreBuildEvent>
-<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
 export ProjectDir=$(ProjectDir)
 export SolutionDir=$(SolutionDir)
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.Designer.cs	(revision 8907)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.Designer.cs	(revision 8907)
@@ -0,0 +1,208 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Analysis.Views {
+  partial class ScatterPlotDataRowVisualPropertiesControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.pointStyleComboBox = new System.Windows.Forms.ComboBox();
+      this.colorDialog = new System.Windows.Forms.ColorDialog();
+      this.colorButton = new System.Windows.Forms.Button();
+      this.isVisibleInLegendCheckBox = new System.Windows.Forms.CheckBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
+      this.pointSizeNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.label3 = new System.Windows.Forms.Label();
+      this.displayNameTextBox = new System.Windows.Forms.TextBox();
+      this.label9 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.pointSizeNumericUpDown)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // pointStyleComboBox
+      // 
+      this.pointStyleComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.pointStyleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.pointStyleComboBox.FormattingEnabled = true;
+      this.pointStyleComboBox.Location = new System.Drawing.Point(99, 34);
+      this.pointStyleComboBox.Name = "pointStyleComboBox";
+      this.pointStyleComboBox.Size = new System.Drawing.Size(240, 21);
+      this.pointStyleComboBox.TabIndex = 3;
+      this.pointStyleComboBox.SelectedValueChanged += new System.EventHandler(this.pointStyleComboBox_SelectedValueChanged);
+      // 
+      // colorDialog
+      // 
+      this.colorDialog.Color = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(255)))));
+      // 
+      // colorButton
+      // 
+      this.colorButton.BackColor = System.Drawing.SystemColors.Control;
+      this.colorButton.Location = new System.Drawing.Point(99, 61);
+      this.colorButton.Name = "colorButton";
+      this.colorButton.Size = new System.Drawing.Size(23, 23);
+      this.colorButton.TabIndex = 5;
+      this.colorButton.UseVisualStyleBackColor = false;
+      this.colorButton.Click += new System.EventHandler(this.colorButton_Click);
+      // 
+      // isVisibleInLegendCheckBox
+      // 
+      this.isVisibleInLegendCheckBox.AutoSize = true;
+      this.isVisibleInLegendCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.isVisibleInLegendCheckBox.Location = new System.Drawing.Point(99, 116);
+      this.isVisibleInLegendCheckBox.Name = "isVisibleInLegendCheckBox";
+      this.isVisibleInLegendCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.isVisibleInLegendCheckBox.TabIndex = 3;
+      this.isVisibleInLegendCheckBox.UseVisualStyleBackColor = true;
+      this.isVisibleInLegendCheckBox.CheckedChanged += new System.EventHandler(this.isVisibleInLegendCheckBox_CheckedChanged);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 37);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(60, 13);
+      this.label1.TabIndex = 2;
+      this.label1.Text = "&Point Style:";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(3, 66);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(61, 13);
+      this.label2.TabIndex = 4;
+      this.label2.Text = "Point &Color:";
+      // 
+      // pointSizeNumericUpDown
+      // 
+      this.pointSizeNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.pointSizeNumericUpDown.Location = new System.Drawing.Point(99, 90);
+      this.pointSizeNumericUpDown.Minimum = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
+      this.pointSizeNumericUpDown.Name = "pointSizeNumericUpDown";
+      this.pointSizeNumericUpDown.Size = new System.Drawing.Size(240, 20);
+      this.pointSizeNumericUpDown.TabIndex = 5;
+      this.pointSizeNumericUpDown.Value = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
+      this.pointSizeNumericUpDown.ValueChanged += new System.EventHandler(this.pointSizeNumericUpDown_ValueChanged);
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(3, 92);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(57, 13);
+      this.label3.TabIndex = 6;
+      this.label3.Text = "Point &Size:";
+      // 
+      // displayNameTextBox
+      // 
+      this.displayNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.displayNameTextBox.Location = new System.Drawing.Point(99, 8);
+      this.displayNameTextBox.Name = "displayNameTextBox";
+      this.displayNameTextBox.Size = new System.Drawing.Size(240, 20);
+      this.displayNameTextBox.TabIndex = 1;
+      this.displayNameTextBox.Validated += new System.EventHandler(this.displayNameTextBox_Validated);
+      // 
+      // label9
+      // 
+      this.label9.AutoSize = true;
+      this.label9.Location = new System.Drawing.Point(3, 11);
+      this.label9.Name = "label9";
+      this.label9.Size = new System.Drawing.Size(38, 13);
+      this.label9.TabIndex = 0;
+      this.label9.Text = "&Name:";
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(3, 116);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(90, 13);
+      this.label7.TabIndex = 2;
+      this.label7.Text = "&Visible in Legend:";
+      // 
+      // ScatterPlotDataRowVisualPropertiesControl
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.pointSizeNumericUpDown);
+      this.Controls.Add(this.isVisibleInLegendCheckBox);
+      this.Controls.Add(this.label9);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.pointStyleComboBox);
+      this.Controls.Add(this.label7);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.displayNameTextBox);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.colorButton);
+      this.Name = "ScatterPlotDataRowVisualPropertiesControl";
+      this.Size = new System.Drawing.Size(342, 135);
+      ((System.ComponentModel.ISupportInitialize)(this.pointSizeNumericUpDown)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox pointStyleComboBox;
+    private System.Windows.Forms.ColorDialog colorDialog;
+    private System.Windows.Forms.Button colorButton;
+    private System.Windows.Forms.CheckBox isVisibleInLegendCheckBox;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.NumericUpDown pointSizeNumericUpDown;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.TextBox displayNameTextBox;
+    private System.Windows.Forms.Label label9;
+    private System.Windows.Forms.Label label3;
+  }
+}
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.cs	(revision 8907)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotDataRowVisualPropertiesControl.cs	(revision 8907)
@@ -0,0 +1,125 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Analysis.Views {
+  [View("ScatterPlot DataRow Visual Properties")]
+  public partial class ScatterPlotDataRowVisualPropertiesControl : UserControl {
+    protected bool SuppressEvents { get; set; }
+
+    private ScatterPlotDataRowVisualProperties content;
+    public ScatterPlotDataRowVisualProperties Content {
+      get { return content; }
+      set {
+        bool changed = (value != content);
+        content = value;
+        if (changed) OnContentChanged();
+      }
+    }
+
+    public ScatterPlotDataRowVisualPropertiesControl() {
+      InitializeComponent();
+      pointStyleComboBox.DataSource = Enum.GetValues(typeof(ScatterPlotDataRowVisualProperties.ScatterPlotDataRowPointStyle));
+      SetEnabledStateOfControls();
+    }
+
+    protected virtual void OnContentChanged() {
+      SuppressEvents = true;
+      try {
+        if (Content == null) {
+          pointStyleComboBox.SelectedIndex = -1;
+          colorButton.BackColor = SystemColors.Control;
+          colorButton.Text = "?";
+          isVisibleInLegendCheckBox.Checked = false;
+          pointSizeNumericUpDown.Value = 1;
+          displayNameTextBox.Text = String.Empty;
+        } else {
+          displayNameTextBox.Text = Content.DisplayName;
+          pointStyleComboBox.SelectedItem = Content.PointStyle;
+          if (Content.Color.IsEmpty) {
+            colorButton.BackColor = SystemColors.Control;
+            colorButton.Text = "?";
+          } else {
+            colorButton.BackColor = Content.Color;
+            colorButton.Text = String.Empty;
+          }
+          pointSizeNumericUpDown.Value = Content.PointSize;
+          isVisibleInLegendCheckBox.Checked = Content.IsVisibleInLegend;
+        }
+      }
+      finally { SuppressEvents = false; }
+      SetEnabledStateOfControls();
+    }
+
+    protected virtual void SetEnabledStateOfControls() {
+      pointStyleComboBox.Enabled = Content != null;
+      colorButton.Enabled = Content != null;
+      colorButton.Enabled = Content != null;
+      isVisibleInLegendCheckBox.Enabled = Content != null;
+      pointSizeNumericUpDown.Enabled = Content != null;
+      displayNameTextBox.Enabled = Content != null;
+    }
+
+    #region Event Handlers
+    private void pointStyleComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        ScatterPlotDataRowVisualProperties.ScatterPlotDataRowPointStyle selected = (ScatterPlotDataRowVisualProperties.ScatterPlotDataRowPointStyle)pointStyleComboBox.SelectedValue;
+        Content.PointStyle = selected;
+      }
+    }
+
+    private void colorButton_Click(object sender, EventArgs e) {
+      if (colorDialog.ShowDialog() == DialogResult.OK) {
+        Content.Color = colorDialog.Color;
+        colorButton.BackColor = Content.Color;
+        colorButton.Text = String.Empty;
+      }
+    }
+
+    private void displayNameTextBox_Validated(object sender, EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        SuppressEvents = true;
+        try {
+          Content.DisplayName = displayNameTextBox.Text;
+        }
+        finally { SuppressEvents = false; }
+      }
+    }
+
+    private void pointSizeNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.PointSize = (int)pointSizeNumericUpDown.Value;
+      }
+    }
+
+    private void isVisibleInLegendCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.IsVisibleInLegend = isVisibleInLegendCheckBox.Checked;
+      }
+    }
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotView.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotView.cs	(revision 8600)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotView.cs	(revision 8907)
@@ -34,5 +34,5 @@
   [View("ScatterPlot View")]
   [Content(typeof(ScatterPlot), true)]
-  public partial class ScatterPlotView : NamedItemView {
+  public partial class ScatterPlotView : NamedItemView, IConfigureableView {
     protected List<Series> invisibleSeries;
     protected Dictionary<IObservableList<Point2D<double>>, ScatterPlotDataRow> pointsRowsTable;
@@ -109,4 +109,12 @@
       base.SetEnabledStateOfControls();
       chart.Enabled = Content != null;
+    }
+
+    public void ShowConfiguration() {
+      if (Content != null) {
+        using (ScatterPlotVisualPropertiesDialog dialog = new ScatterPlotVisualPropertiesDialog(Content)) {
+          dialog.ShowDialog(this);
+        }
+      } else MessageBox.Show("Nothing to configure.");
     }
 
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesControl.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesControl.Designer.cs	(revision 8907)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesControl.Designer.cs	(revision 8907)
@@ -0,0 +1,609 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Analysis.Views {
+  partial class ScatterPlotVisualPropertiesControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.label1 = new System.Windows.Forms.Label();
+      this.yAxisTitleTextBox = new System.Windows.Forms.TextBox();
+      this.panel2 = new System.Windows.Forms.Panel();
+      this.xAxisMaximumFixedRadioButton = new System.Windows.Forms.RadioButton();
+      this.xAxisMaximumAutoRadioButton = new System.Windows.Forms.RadioButton();
+      this.panel1 = new System.Windows.Forms.Panel();
+      this.xAxisMinimumFixedRadioButton = new System.Windows.Forms.RadioButton();
+      this.xAxisMinimumAutoRadioButton = new System.Windows.Forms.RadioButton();
+      this.xAxisMinimumFixedTextBox = new System.Windows.Forms.TextBox();
+      this.xAxisMaximumFixedTextBox = new System.Windows.Forms.TextBox();
+      this.label12 = new System.Windows.Forms.Label();
+      this.label9 = new System.Windows.Forms.Label();
+      this.xAxisTitleTextBox = new System.Windows.Forms.TextBox();
+      this.label11 = new System.Windows.Forms.Label();
+      this.axisTabControl = new System.Windows.Forms.TabControl();
+      this.xAxisTabPage = new System.Windows.Forms.TabPage();
+      this.xAxisGridCheckBox = new System.Windows.Forms.CheckBox();
+      this.label4 = new System.Windows.Forms.Label();
+      this.yAxisTabPage = new System.Windows.Forms.TabPage();
+      this.yAxisGridCheckBox = new System.Windows.Forms.CheckBox();
+      this.label5 = new System.Windows.Forms.Label();
+      this.panel6 = new System.Windows.Forms.Panel();
+      this.yAxisMaximumFixedRadioButton = new System.Windows.Forms.RadioButton();
+      this.yAxisMaximumAutoRadioButton = new System.Windows.Forms.RadioButton();
+      this.panel5 = new System.Windows.Forms.Panel();
+      this.yAxisMinimumAutoRadioButton = new System.Windows.Forms.RadioButton();
+      this.yAxisMinimumFixedRadioButton = new System.Windows.Forms.RadioButton();
+      this.yAxisMinimumFixedTextBox = new System.Windows.Forms.TextBox();
+      this.yAxisMaximumFixedTextBox = new System.Windows.Forms.TextBox();
+      this.label8 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
+      this.titleTextBox = new System.Windows.Forms.TextBox();
+      this.label15 = new System.Windows.Forms.Label();
+      this.axisFontLabel = new System.Windows.Forms.Label();
+      this.titleFontLabel = new System.Windows.Forms.Label();
+      this.axisFontButton = new System.Windows.Forms.Button();
+      this.label3 = new System.Windows.Forms.Label();
+      this.titleFontButton = new System.Windows.Forms.Button();
+      this.label2 = new System.Windows.Forms.Label();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      this.titleFontDialog = new System.Windows.Forms.FontDialog();
+      this.axisFontDialog = new System.Windows.Forms.FontDialog();
+      this.panel2.SuspendLayout();
+      this.panel1.SuspendLayout();
+      this.axisTabControl.SuspendLayout();
+      this.xAxisTabPage.SuspendLayout();
+      this.yAxisTabPage.SuspendLayout();
+      this.panel6.SuspendLayout();
+      this.panel5.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(6, 12);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(30, 13);
+      this.label1.TabIndex = 0;
+      this.label1.Text = "&Title:";
+      // 
+      // yAxisPrimaryTitleTextBox
+      // 
+      this.yAxisTitleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.yAxisTitleTextBox.Location = new System.Drawing.Point(71, 9);
+      this.yAxisTitleTextBox.Name = "yAxisPrimaryTitleTextBox";
+      this.yAxisTitleTextBox.Size = new System.Drawing.Size(370, 20);
+      this.yAxisTitleTextBox.TabIndex = 1;
+      this.yAxisTitleTextBox.Validated += new System.EventHandler(this.yTitleTextBox_Validated);
+      // 
+      // panel2
+      // 
+      this.panel2.Controls.Add(this.xAxisMaximumFixedRadioButton);
+      this.panel2.Controls.Add(this.xAxisMaximumAutoRadioButton);
+      this.panel2.Location = new System.Drawing.Point(71, 61);
+      this.panel2.Name = "panel2";
+      this.panel2.Size = new System.Drawing.Size(106, 16);
+      this.panel2.TabIndex = 6;
+      // 
+      // xAxisPrimaryMaximumFixedRadioButton
+      // 
+      this.xAxisMaximumFixedRadioButton.AutoSize = true;
+      this.xAxisMaximumFixedRadioButton.Location = new System.Drawing.Point(53, 1);
+      this.xAxisMaximumFixedRadioButton.Name = "xAxisPrimaryMaximumFixedRadioButton";
+      this.xAxisMaximumFixedRadioButton.Size = new System.Drawing.Size(53, 17);
+      this.xAxisMaximumFixedRadioButton.TabIndex = 1;
+      this.xAxisMaximumFixedRadioButton.TabStop = true;
+      this.xAxisMaximumFixedRadioButton.Text = "&Fixed:";
+      this.xAxisMaximumFixedRadioButton.UseVisualStyleBackColor = true;
+      this.xAxisMaximumFixedRadioButton.CheckedChanged += new System.EventHandler(this.xAxisMaximumRadioButton_CheckedChanged);
+      // 
+      // xAxisPrimaryMaximumAutoRadioButton
+      // 
+      this.xAxisMaximumAutoRadioButton.AutoSize = true;
+      this.xAxisMaximumAutoRadioButton.Location = new System.Drawing.Point(0, 1);
+      this.xAxisMaximumAutoRadioButton.Name = "xAxisPrimaryMaximumAutoRadioButton";
+      this.xAxisMaximumAutoRadioButton.Size = new System.Drawing.Size(47, 17);
+      this.xAxisMaximumAutoRadioButton.TabIndex = 0;
+      this.xAxisMaximumAutoRadioButton.TabStop = true;
+      this.xAxisMaximumAutoRadioButton.Text = "&Auto";
+      this.xAxisMaximumAutoRadioButton.UseVisualStyleBackColor = true;
+      this.xAxisMaximumAutoRadioButton.CheckedChanged += new System.EventHandler(this.xAxisMaximumRadioButton_CheckedChanged);
+      // 
+      // panel1
+      // 
+      this.panel1.Controls.Add(this.xAxisMinimumFixedRadioButton);
+      this.panel1.Controls.Add(this.xAxisMinimumAutoRadioButton);
+      this.panel1.Location = new System.Drawing.Point(71, 35);
+      this.panel1.Name = "panel1";
+      this.panel1.Size = new System.Drawing.Size(106, 16);
+      this.panel1.TabIndex = 3;
+      // 
+      // xAxisPrimaryMinimumFixedRadioButton
+      // 
+      this.xAxisMinimumFixedRadioButton.AutoSize = true;
+      this.xAxisMinimumFixedRadioButton.Location = new System.Drawing.Point(53, 1);
+      this.xAxisMinimumFixedRadioButton.Name = "xAxisPrimaryMinimumFixedRadioButton";
+      this.xAxisMinimumFixedRadioButton.Size = new System.Drawing.Size(53, 17);
+      this.xAxisMinimumFixedRadioButton.TabIndex = 1;
+      this.xAxisMinimumFixedRadioButton.TabStop = true;
+      this.xAxisMinimumFixedRadioButton.Text = "&Fixed:";
+      this.xAxisMinimumFixedRadioButton.UseVisualStyleBackColor = true;
+      this.xAxisMinimumFixedRadioButton.CheckedChanged += new System.EventHandler(this.xAxisMinimumRadioButton_CheckedChanged);
+      // 
+      // xAxisPrimaryMinimumAutoRadioButton
+      // 
+      this.xAxisMinimumAutoRadioButton.AutoSize = true;
+      this.xAxisMinimumAutoRadioButton.Location = new System.Drawing.Point(0, 1);
+      this.xAxisMinimumAutoRadioButton.Name = "xAxisPrimaryMinimumAutoRadioButton";
+      this.xAxisMinimumAutoRadioButton.Size = new System.Drawing.Size(47, 17);
+      this.xAxisMinimumAutoRadioButton.TabIndex = 0;
+      this.xAxisMinimumAutoRadioButton.TabStop = true;
+      this.xAxisMinimumAutoRadioButton.Text = "&Auto";
+      this.xAxisMinimumAutoRadioButton.UseVisualStyleBackColor = true;
+      this.xAxisMinimumAutoRadioButton.CheckedChanged += new System.EventHandler(this.xAxisMinimumRadioButton_CheckedChanged);
+      // 
+      // xAxisPrimaryMinimumFixedTextBox
+      // 
+      this.xAxisMinimumFixedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisMinimumFixedTextBox.Location = new System.Drawing.Point(196, 35);
+      this.xAxisMinimumFixedTextBox.Name = "xAxisPrimaryMinimumFixedTextBox";
+      this.xAxisMinimumFixedTextBox.Size = new System.Drawing.Size(245, 20);
+      this.xAxisMinimumFixedTextBox.TabIndex = 4;
+      this.xAxisMinimumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.xAxisMinimumFixedTextBox_Validating);
+      // 
+      // xAxisPrimaryMaximumFixedTextBox
+      // 
+      this.xAxisMaximumFixedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisMaximumFixedTextBox.Location = new System.Drawing.Point(196, 61);
+      this.xAxisMaximumFixedTextBox.Name = "xAxisPrimaryMaximumFixedTextBox";
+      this.xAxisMaximumFixedTextBox.Size = new System.Drawing.Size(245, 20);
+      this.xAxisMaximumFixedTextBox.TabIndex = 7;
+      this.xAxisMaximumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.xAxisMaximumFixedTextBox_Validating);
+      // 
+      // label12
+      // 
+      this.label12.AutoSize = true;
+      this.label12.Location = new System.Drawing.Point(6, 64);
+      this.label12.Name = "label12";
+      this.label12.Size = new System.Drawing.Size(54, 13);
+      this.label12.TabIndex = 5;
+      this.label12.Text = "&Maximum:";
+      // 
+      // label9
+      // 
+      this.label9.AutoSize = true;
+      this.label9.Location = new System.Drawing.Point(6, 12);
+      this.label9.Name = "label9";
+      this.label9.Size = new System.Drawing.Size(30, 13);
+      this.label9.TabIndex = 0;
+      this.label9.Text = "&Title:";
+      // 
+      // xAxisPrimaryTitleTextBox
+      // 
+      this.xAxisTitleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisTitleTextBox.Location = new System.Drawing.Point(71, 9);
+      this.xAxisTitleTextBox.Name = "xAxisPrimaryTitleTextBox";
+      this.xAxisTitleTextBox.Size = new System.Drawing.Size(370, 20);
+      this.xAxisTitleTextBox.TabIndex = 1;
+      this.xAxisTitleTextBox.Validated += new System.EventHandler(this.xTitleTextBox_Validated);
+      // 
+      // label11
+      // 
+      this.label11.AutoSize = true;
+      this.label11.Location = new System.Drawing.Point(6, 38);
+      this.label11.Name = "label11";
+      this.label11.Size = new System.Drawing.Size(51, 13);
+      this.label11.TabIndex = 2;
+      this.label11.Text = "&Minimum:";
+      // 
+      // axisTabControl
+      // 
+      this.axisTabControl.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)));
+      this.axisTabControl.Controls.Add(this.xAxisTabPage);
+      this.axisTabControl.Controls.Add(this.yAxisTabPage);
+      this.axisTabControl.Location = new System.Drawing.Point(0, 84);
+      this.axisTabControl.Name = "axisTabControl";
+      this.axisTabControl.SelectedIndex = 0;
+      this.axisTabControl.Size = new System.Drawing.Size(455, 134);
+      this.axisTabControl.TabIndex = 8;
+      // 
+      // xAxisTabPage
+      // 
+      this.xAxisTabPage.Controls.Add(this.xAxisGridCheckBox);
+      this.xAxisTabPage.Controls.Add(this.label4);
+      this.xAxisTabPage.Controls.Add(this.panel2);
+      this.xAxisTabPage.Controls.Add(this.panel1);
+      this.xAxisTabPage.Controls.Add(this.xAxisTitleTextBox);
+      this.xAxisTabPage.Controls.Add(this.xAxisMinimumFixedTextBox);
+      this.xAxisTabPage.Controls.Add(this.label11);
+      this.xAxisTabPage.Controls.Add(this.xAxisMaximumFixedTextBox);
+      this.xAxisTabPage.Controls.Add(this.label9);
+      this.xAxisTabPage.Controls.Add(this.label12);
+      this.xAxisTabPage.Location = new System.Drawing.Point(4, 22);
+      this.xAxisTabPage.Name = "xAxisTabPage";
+      this.xAxisTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.xAxisTabPage.Size = new System.Drawing.Size(447, 108);
+      this.xAxisTabPage.TabIndex = 0;
+      this.xAxisTabPage.Text = "X-Axis";
+      this.xAxisTabPage.UseVisualStyleBackColor = true;
+      // 
+      // xAxisGridCheckBox
+      // 
+      this.xAxisGridCheckBox.AutoSize = true;
+      this.xAxisGridCheckBox.Location = new System.Drawing.Point(71, 85);
+      this.xAxisGridCheckBox.Name = "xAxisGridCheckBox";
+      this.xAxisGridCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.xAxisGridCheckBox.TabIndex = 9;
+      this.xAxisGridCheckBox.UseVisualStyleBackColor = true;
+      this.xAxisGridCheckBox.CheckedChanged += new System.EventHandler(this.xAxisGridCheckBox_CheckedChanged);
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(6, 85);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(59, 13);
+      this.label4.TabIndex = 8;
+      this.label4.Text = "Show &Grid:";
+      // 
+      // yAxisTabPage
+      // 
+      this.yAxisTabPage.Controls.Add(this.yAxisGridCheckBox);
+      this.yAxisTabPage.Controls.Add(this.label5);
+      this.yAxisTabPage.Controls.Add(this.panel6);
+      this.yAxisTabPage.Controls.Add(this.panel5);
+      this.yAxisTabPage.Controls.Add(this.yAxisTitleTextBox);
+      this.yAxisTabPage.Controls.Add(this.yAxisMinimumFixedTextBox);
+      this.yAxisTabPage.Controls.Add(this.label1);
+      this.yAxisTabPage.Controls.Add(this.yAxisMaximumFixedTextBox);
+      this.yAxisTabPage.Controls.Add(this.label8);
+      this.yAxisTabPage.Controls.Add(this.label7);
+      this.yAxisTabPage.Location = new System.Drawing.Point(4, 22);
+      this.yAxisTabPage.Name = "yAxisTabPage";
+      this.yAxisTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.yAxisTabPage.Size = new System.Drawing.Size(447, 108);
+      this.yAxisTabPage.TabIndex = 1;
+      this.yAxisTabPage.Text = "Y-Axis";
+      this.yAxisTabPage.UseVisualStyleBackColor = true;
+      // 
+      // yAxisGridCheckBox
+      // 
+      this.yAxisGridCheckBox.AutoSize = true;
+      this.yAxisGridCheckBox.Location = new System.Drawing.Point(71, 85);
+      this.yAxisGridCheckBox.Name = "yAxisGridCheckBox";
+      this.yAxisGridCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.yAxisGridCheckBox.TabIndex = 10;
+      this.yAxisGridCheckBox.UseVisualStyleBackColor = true;
+      this.yAxisGridCheckBox.CheckedChanged += new System.EventHandler(this.yAxisGridCheckBox_CheckedChanged);
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(6, 85);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(59, 13);
+      this.label5.TabIndex = 9;
+      this.label5.Text = "Show &Grid:";
+      // 
+      // panel6
+      // 
+      this.panel6.Controls.Add(this.yAxisMaximumFixedRadioButton);
+      this.panel6.Controls.Add(this.yAxisMaximumAutoRadioButton);
+      this.panel6.Location = new System.Drawing.Point(71, 61);
+      this.panel6.Name = "panel6";
+      this.panel6.Size = new System.Drawing.Size(106, 20);
+      this.panel6.TabIndex = 6;
+      // 
+      // yAxisPrimaryMaximumFixedRadioButton
+      // 
+      this.yAxisMaximumFixedRadioButton.AutoSize = true;
+      this.yAxisMaximumFixedRadioButton.Location = new System.Drawing.Point(53, 1);
+      this.yAxisMaximumFixedRadioButton.Name = "yAxisPrimaryMaximumFixedRadioButton";
+      this.yAxisMaximumFixedRadioButton.Size = new System.Drawing.Size(53, 17);
+      this.yAxisMaximumFixedRadioButton.TabIndex = 1;
+      this.yAxisMaximumFixedRadioButton.TabStop = true;
+      this.yAxisMaximumFixedRadioButton.Text = "&Fixed:";
+      this.yAxisMaximumFixedRadioButton.UseVisualStyleBackColor = true;
+      this.yAxisMaximumFixedRadioButton.CheckedChanged += new System.EventHandler(this.yAxisMaximumRadioButton_CheckedChanged);
+      // 
+      // yAxisPrimaryMaximumAutoRadioButton
+      // 
+      this.yAxisMaximumAutoRadioButton.AutoSize = true;
+      this.yAxisMaximumAutoRadioButton.Location = new System.Drawing.Point(0, 1);
+      this.yAxisMaximumAutoRadioButton.Name = "yAxisPrimaryMaximumAutoRadioButton";
+      this.yAxisMaximumAutoRadioButton.Size = new System.Drawing.Size(47, 17);
+      this.yAxisMaximumAutoRadioButton.TabIndex = 0;
+      this.yAxisMaximumAutoRadioButton.TabStop = true;
+      this.yAxisMaximumAutoRadioButton.Text = "&Auto";
+      this.yAxisMaximumAutoRadioButton.UseVisualStyleBackColor = true;
+      this.yAxisMaximumAutoRadioButton.CheckedChanged += new System.EventHandler(this.yAxisMaximumRadioButton_CheckedChanged);
+      // 
+      // panel5
+      // 
+      this.panel5.Controls.Add(this.yAxisMinimumAutoRadioButton);
+      this.panel5.Controls.Add(this.yAxisMinimumFixedRadioButton);
+      this.panel5.Location = new System.Drawing.Point(71, 35);
+      this.panel5.Name = "panel5";
+      this.panel5.Size = new System.Drawing.Size(106, 20);
+      this.panel5.TabIndex = 3;
+      // 
+      // yAxisPrimaryMinimumAutoRadioButton
+      // 
+      this.yAxisMinimumAutoRadioButton.AutoSize = true;
+      this.yAxisMinimumAutoRadioButton.Location = new System.Drawing.Point(0, 1);
+      this.yAxisMinimumAutoRadioButton.Name = "yAxisPrimaryMinimumAutoRadioButton";
+      this.yAxisMinimumAutoRadioButton.Size = new System.Drawing.Size(47, 17);
+      this.yAxisMinimumAutoRadioButton.TabIndex = 0;
+      this.yAxisMinimumAutoRadioButton.TabStop = true;
+      this.yAxisMinimumAutoRadioButton.Text = "&Auto";
+      this.yAxisMinimumAutoRadioButton.UseVisualStyleBackColor = true;
+      this.yAxisMinimumAutoRadioButton.CheckedChanged += new System.EventHandler(this.yAxisMinimumRadioButton_CheckedChanged);
+      // 
+      // yAxisPrimaryMinimumFixedRadioButton
+      // 
+      this.yAxisMinimumFixedRadioButton.AutoSize = true;
+      this.yAxisMinimumFixedRadioButton.Location = new System.Drawing.Point(53, 1);
+      this.yAxisMinimumFixedRadioButton.Name = "yAxisPrimaryMinimumFixedRadioButton";
+      this.yAxisMinimumFixedRadioButton.Size = new System.Drawing.Size(53, 17);
+      this.yAxisMinimumFixedRadioButton.TabIndex = 1;
+      this.yAxisMinimumFixedRadioButton.TabStop = true;
+      this.yAxisMinimumFixedRadioButton.Text = "&Fixed:";
+      this.yAxisMinimumFixedRadioButton.UseVisualStyleBackColor = true;
+      this.yAxisMinimumFixedRadioButton.CheckedChanged += new System.EventHandler(this.yAxisMinimumRadioButton_CheckedChanged);
+      // 
+      // yAxisPrimaryMinimumFixedTextBox
+      // 
+      this.yAxisMinimumFixedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.yAxisMinimumFixedTextBox.Location = new System.Drawing.Point(196, 35);
+      this.yAxisMinimumFixedTextBox.Name = "yAxisPrimaryMinimumFixedTextBox";
+      this.yAxisMinimumFixedTextBox.Size = new System.Drawing.Size(245, 20);
+      this.yAxisMinimumFixedTextBox.TabIndex = 4;
+      this.yAxisMinimumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.yAxisMinimumFixedTextBox_Validating);
+      // 
+      // yAxisPrimaryMaximumFixedTextBox
+      // 
+      this.yAxisMaximumFixedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.yAxisMaximumFixedTextBox.Location = new System.Drawing.Point(196, 61);
+      this.yAxisMaximumFixedTextBox.Name = "yAxisPrimaryMaximumFixedTextBox";
+      this.yAxisMaximumFixedTextBox.Size = new System.Drawing.Size(245, 20);
+      this.yAxisMaximumFixedTextBox.TabIndex = 7;
+      this.yAxisMaximumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.yAxisMaximumFixedTextBox_Validating);
+      // 
+      // label8
+      // 
+      this.label8.AutoSize = true;
+      this.label8.Location = new System.Drawing.Point(6, 38);
+      this.label8.Name = "label8";
+      this.label8.Size = new System.Drawing.Size(51, 13);
+      this.label8.TabIndex = 2;
+      this.label8.Text = "&Minimum:";
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(6, 64);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(54, 13);
+      this.label7.TabIndex = 5;
+      this.label7.Text = "&Maximum:";
+      // 
+      // titleTextBox
+      // 
+      this.titleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleTextBox.Location = new System.Drawing.Point(66, 0);
+      this.titleTextBox.Name = "titleTextBox";
+      this.titleTextBox.Size = new System.Drawing.Size(389, 20);
+      this.titleTextBox.TabIndex = 1;
+      this.titleTextBox.Validated += new System.EventHandler(this.titleTextBox_Validated);
+      // 
+      // label15
+      // 
+      this.label15.AutoSize = true;
+      this.label15.Location = new System.Drawing.Point(3, 3);
+      this.label15.Name = "label15";
+      this.label15.Size = new System.Drawing.Size(30, 13);
+      this.label15.TabIndex = 0;
+      this.label15.Text = "&Title:";
+      // 
+      // axisFontLabel
+      // 
+      this.axisFontLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.axisFontLabel.AutoSize = true;
+      this.axisFontLabel.Location = new System.Drawing.Point(98, 60);
+      this.axisFontLabel.Name = "axisFontLabel";
+      this.axisFontLabel.Size = new System.Drawing.Size(43, 13);
+      this.axisFontLabel.TabIndex = 7;
+      this.axisFontLabel.Text = "( none )";
+      // 
+      // titleFontLabel
+      // 
+      this.titleFontLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleFontLabel.AutoSize = true;
+      this.titleFontLabel.Location = new System.Drawing.Point(98, 31);
+      this.titleFontLabel.Name = "titleFontLabel";
+      this.titleFontLabel.Size = new System.Drawing.Size(43, 13);
+      this.titleFontLabel.TabIndex = 4;
+      this.titleFontLabel.Text = "( none )";
+      // 
+      // axisFontButton
+      // 
+      this.axisFontButton.Location = new System.Drawing.Point(66, 55);
+      this.axisFontButton.Name = "axisFontButton";
+      this.axisFontButton.Size = new System.Drawing.Size(26, 23);
+      this.axisFontButton.TabIndex = 6;
+      this.axisFontButton.Text = "...";
+      this.axisFontButton.UseVisualStyleBackColor = true;
+      this.axisFontButton.Click += new System.EventHandler(this.axisFontButton_Click);
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(3, 60);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(57, 13);
+      this.label3.TabIndex = 5;
+      this.label3.Text = "&Axes Font:";
+      // 
+      // titleFontButton
+      // 
+      this.titleFontButton.Location = new System.Drawing.Point(66, 26);
+      this.titleFontButton.Name = "titleFontButton";
+      this.titleFontButton.Size = new System.Drawing.Size(26, 23);
+      this.titleFontButton.TabIndex = 3;
+      this.titleFontButton.Text = "...";
+      this.titleFontButton.UseVisualStyleBackColor = true;
+      this.titleFontButton.Click += new System.EventHandler(this.titleFontButton_Click);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(3, 31);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(54, 13);
+      this.label2.TabIndex = 2;
+      this.label2.Text = "&Title Font:";
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // titleFontDialog
+      // 
+      this.titleFontDialog.Color = System.Drawing.SystemColors.ControlText;
+      this.titleFontDialog.FontMustExist = true;
+      this.titleFontDialog.ShowColor = true;
+      // 
+      // axisFontDialog
+      // 
+      this.axisFontDialog.Color = System.Drawing.SystemColors.ControlText;
+      // 
+      // ScatterPlotVisualPropertiesControl
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.axisFontLabel);
+      this.Controls.Add(this.label15);
+      this.Controls.Add(this.axisFontButton);
+      this.Controls.Add(this.titleFontLabel);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.titleTextBox);
+      this.Controls.Add(this.axisTabControl);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.titleFontButton);
+      this.Name = "ScatterPlotVisualPropertiesControl";
+      this.Size = new System.Drawing.Size(455, 220);
+      this.panel2.ResumeLayout(false);
+      this.panel2.PerformLayout();
+      this.panel1.ResumeLayout(false);
+      this.panel1.PerformLayout();
+      this.axisTabControl.ResumeLayout(false);
+      this.xAxisTabPage.ResumeLayout(false);
+      this.xAxisTabPage.PerformLayout();
+      this.yAxisTabPage.ResumeLayout(false);
+      this.yAxisTabPage.PerformLayout();
+      this.panel6.ResumeLayout(false);
+      this.panel6.PerformLayout();
+      this.panel5.ResumeLayout(false);
+      this.panel5.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox yAxisTitleTextBox;
+    private System.Windows.Forms.Label label12;
+    private System.Windows.Forms.Label label9;
+    private System.Windows.Forms.TextBox xAxisTitleTextBox;
+    private System.Windows.Forms.Label label11;
+    private System.Windows.Forms.TextBox xAxisMaximumFixedTextBox;
+    private System.Windows.Forms.RadioButton xAxisMaximumFixedRadioButton;
+    private System.Windows.Forms.RadioButton xAxisMaximumAutoRadioButton;
+    private System.Windows.Forms.TextBox xAxisMinimumFixedTextBox;
+    private System.Windows.Forms.RadioButton xAxisMinimumFixedRadioButton;
+    private System.Windows.Forms.RadioButton xAxisMinimumAutoRadioButton;
+    private System.Windows.Forms.TabControl axisTabControl;
+    private System.Windows.Forms.TabPage xAxisTabPage;
+    private System.Windows.Forms.TabPage yAxisTabPage;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.Label label8;
+    private System.Windows.Forms.TextBox yAxisMaximumFixedTextBox;
+    private System.Windows.Forms.RadioButton yAxisMaximumFixedRadioButton;
+    private System.Windows.Forms.RadioButton yAxisMaximumAutoRadioButton;
+    private System.Windows.Forms.TextBox yAxisMinimumFixedTextBox;
+    private System.Windows.Forms.RadioButton yAxisMinimumFixedRadioButton;
+    private System.Windows.Forms.RadioButton yAxisMinimumAutoRadioButton;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+    private System.Windows.Forms.FontDialog titleFontDialog;
+    private System.Windows.Forms.Button titleFontButton;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Button axisFontButton;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.Label axisFontLabel;
+    private System.Windows.Forms.Label titleFontLabel;
+    private System.Windows.Forms.FontDialog axisFontDialog;
+    private System.Windows.Forms.Label label15;
+    private System.Windows.Forms.TextBox titleTextBox;
+    private System.Windows.Forms.Panel panel1;
+    private System.Windows.Forms.Panel panel2;
+    private System.Windows.Forms.Panel panel6;
+    private System.Windows.Forms.Panel panel5;
+    private System.Windows.Forms.CheckBox xAxisGridCheckBox;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.CheckBox yAxisGridCheckBox;
+    private System.Windows.Forms.Label label5;
+  }
+}
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesControl.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesControl.cs	(revision 8907)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesControl.cs	(revision 8907)
@@ -0,0 +1,297 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Analysis.Views {
+  [View("Scatter Plot Visual Properties")]
+  public partial class ScatterPlotVisualPropertiesControl : UserControl {
+    protected bool SuppressEvents { get; set; }
+
+    private ScatterPlotVisualProperties content;
+    public ScatterPlotVisualProperties Content {
+      get { return content; }
+      set {
+        bool changed = (value != content);
+        content = value;
+        if (changed) OnContentChanged();
+      }
+    }
+
+    public ScatterPlotVisualPropertiesControl() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(xAxisMinimumFixedTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconAlignment(xAxisMaximumFixedTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconAlignment(yAxisMinimumFixedTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconAlignment(yAxisMaximumFixedTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconPadding(xAxisMinimumFixedTextBox, 2);
+      errorProvider.SetIconPadding(xAxisMaximumFixedTextBox, 2);
+      errorProvider.SetIconPadding(yAxisMinimumFixedTextBox, 2);
+      errorProvider.SetIconPadding(yAxisMaximumFixedTextBox, 2);
+    }
+
+    protected virtual void OnContentChanged() {
+      SuppressEvents = true;
+      try {
+        if (Content == null) {
+          titleFontLabel.Text = "( none )";
+          axisFontLabel.Text = "( none )";
+          titleTextBox.Text = string.Empty;
+
+          xAxisTitleTextBox.Text = string.Empty;
+          xAxisMinimumAutoRadioButton.Checked = false;
+          xAxisMinimumFixedRadioButton.Checked = false;
+          xAxisMinimumFixedTextBox.Text = string.Empty;
+          xAxisMaximumAutoRadioButton.Checked = false;
+          xAxisMaximumFixedRadioButton.Checked = false;
+          xAxisMaximumFixedTextBox.Text = string.Empty;
+          xAxisGridCheckBox.Checked = false;
+
+          yAxisTitleTextBox.Text = string.Empty;
+          yAxisMinimumAutoRadioButton.Checked = false;
+          yAxisMinimumFixedRadioButton.Checked = false;
+          yAxisMinimumFixedTextBox.Text = string.Empty;
+          yAxisMaximumAutoRadioButton.Checked = false;
+          yAxisMaximumFixedRadioButton.Checked = false;
+          yAxisMaximumFixedTextBox.Text = string.Empty;
+          yAxisGridCheckBox.Checked = false;
+        } else {
+          titleFontLabel.Text = "( " + FormatFont(Content.TitleFont) + " )";
+          axisFontLabel.Text = "( " + FormatFont(Content.AxisTitleFont) + " )";
+          titleTextBox.Text = Content.Title;
+
+          xAxisTitleTextBox.Text = Content.XAxisTitle;
+          xAxisMinimumAutoRadioButton.Checked = Content.XAxisMinimumAuto;
+          xAxisMinimumFixedRadioButton.Checked = !Content.XAxisMinimumAuto;
+          xAxisMinimumFixedTextBox.Text = Content.XAxisMinimumFixedValue.ToString();
+          xAxisMaximumAutoRadioButton.Checked = Content.XAxisMaximumAuto;
+          xAxisMaximumFixedRadioButton.Checked = !Content.XAxisMaximumAuto;
+          xAxisMaximumFixedTextBox.Text = Content.XAxisMaximumFixedValue.ToString();
+          xAxisGridCheckBox.Checked = Content.XAxisGrid;
+
+          yAxisTitleTextBox.Text = Content.YAxisTitle;
+          yAxisMinimumAutoRadioButton.Checked = Content.YAxisMinimumAuto;
+          yAxisMinimumFixedRadioButton.Checked = !Content.YAxisMinimumAuto;
+          yAxisMinimumFixedTextBox.Text = Content.YAxisMinimumFixedValue.ToString();
+          yAxisMaximumAutoRadioButton.Checked = Content.YAxisMaximumAuto;
+          yAxisMaximumFixedRadioButton.Checked = !Content.YAxisMaximumAuto;
+          yAxisMaximumFixedTextBox.Text = Content.YAxisMaximumFixedValue.ToString();
+          yAxisGridCheckBox.Checked = Content.YAxisGrid;
+        }
+      }
+      finally { SuppressEvents = false; }
+      SetEnabledStateOfControls();
+    }
+
+    protected virtual void SetEnabledStateOfControls() {
+      axisTabControl.Enabled = Content != null;
+      xAxisMinimumFixedTextBox.Enabled = xAxisMinimumFixedRadioButton.Checked;
+      xAxisMaximumFixedTextBox.Enabled = xAxisMaximumFixedRadioButton.Checked;
+
+      yAxisMinimumFixedTextBox.Enabled = yAxisMinimumFixedRadioButton.Checked;
+      yAxisMaximumFixedTextBox.Enabled = yAxisMaximumFixedRadioButton.Checked;
+    }
+
+    #region Event Handlers
+    private void yTitleTextBox_Validated(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.YAxisTitle = yAxisTitleTextBox.Text;
+      }
+    }
+
+    private void xTitleTextBox_Validated(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.XAxisTitle = xAxisTitleTextBox.Text;
+      }
+    }
+
+    private void xAxisMinimumFixedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        TextBox tb = (TextBox)sender;
+        double val;
+        if (double.TryParse(tb.Text, out val)) {
+          if (val >= Content.XAxisMaximumFixedValue) {
+            errorProvider.SetError(tb, "Number must be smaller than maximum.");
+            e.Cancel = true;
+          } else {
+            Content.XAxisMinimumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
+        } else {
+          errorProvider.SetError(tb, "Not a valid number.");
+          e.Cancel = true;
+        }
+      }
+    }
+
+    private void xAxisMaximumFixedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        TextBox tb = (TextBox)sender;
+        double val;
+        if (double.TryParse(tb.Text, out val)) {
+          if (val <= Content.XAxisMinimumFixedValue) {
+            errorProvider.SetError(tb, "Number must be greater than minimum.");
+            e.Cancel = true;
+          } else {
+            Content.XAxisMaximumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
+        } else {
+          errorProvider.SetError(tb, "Not a valid number.");
+          e.Cancel = true;
+        }
+      }
+    }
+
+    private void yAxisMinimumFixedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        TextBox tb = (TextBox)sender;
+        double val;
+        if (double.TryParse(tb.Text, out val)) {
+          if (val >= Content.YAxisMaximumFixedValue) {
+            errorProvider.SetError(tb, "Number must be smaller than maximum.");
+            e.Cancel = true;
+          } else {
+            Content.YAxisMinimumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
+        } else {
+          errorProvider.SetError(tb, "Not a valid number.");
+          e.Cancel = true;
+        }
+      }
+    }
+
+    private void yAxisMaximumFixedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        TextBox tb = (TextBox)sender;
+        double val;
+        if (double.TryParse(tb.Text, out val)) {
+          if (val <= Content.YAxisMinimumFixedValue) {
+            errorProvider.SetError(tb, "Number must be greater than minimum.");
+            e.Cancel = true;
+          } else {
+            Content.YAxisMaximumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
+        } else {
+          errorProvider.SetError(tb, "Not a valid number.");
+          e.Cancel = true;
+        }
+      }
+    }
+
+    private void xAxisMinimumRadioButton_CheckedChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        SuppressEvents = true;
+        try {
+          Content.XAxisMinimumAuto = xAxisMinimumAutoRadioButton.Checked;
+          if (Content.XAxisMinimumAuto) xAxisMinimumFixedTextBox.Text = double.NaN.ToString();
+        }
+        finally { SuppressEvents = false; }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void xAxisMaximumRadioButton_CheckedChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        SuppressEvents = true;
+        try {
+          Content.XAxisMaximumAuto = xAxisMaximumAutoRadioButton.Checked;
+          if (Content.XAxisMaximumAuto) xAxisMaximumFixedTextBox.Text = double.NaN.ToString();
+        }
+        finally { SuppressEvents = false; }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void yAxisMinimumRadioButton_CheckedChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        SuppressEvents = true;
+        try {
+          Content.YAxisMinimumAuto = yAxisMinimumAutoRadioButton.Checked;
+          if (Content.YAxisMinimumAuto) yAxisMinimumFixedTextBox.Text = double.NaN.ToString();
+        }
+        finally { SuppressEvents = false; }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void yAxisMaximumRadioButton_CheckedChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        SuppressEvents = true;
+        try {
+          Content.YAxisMaximumAuto = yAxisMaximumAutoRadioButton.Checked;
+          if (Content.YAxisMaximumAuto) yAxisMaximumFixedTextBox.Text = double.NaN.ToString();
+        }
+        finally { SuppressEvents = false; }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void titleFontButton_Click(object sender, System.EventArgs e) {
+      titleFontDialog.Font = Content.TitleFont;
+      titleFontDialog.Color = Content.TitleColor;
+      if (titleFontDialog.ShowDialog() == DialogResult.OK) {
+        Content.TitleFont = titleFontDialog.Font;
+        Content.TitleColor = titleFontDialog.Color;
+        titleFontLabel.Text = "( " + FormatFont(Content.TitleFont) + " )";
+      }
+    }
+
+    private void axisFontButton_Click(object sender, System.EventArgs e) {
+      axisFontDialog.Font = Content.AxisTitleFont;
+      axisFontDialog.Color = Content.AxisTitleColor;
+      if (axisFontDialog.ShowDialog() == DialogResult.OK) {
+        Content.AxisTitleFont = axisFontDialog.Font;
+        Content.AxisTitleColor = axisFontDialog.Color;
+        axisFontLabel.Text = "( " + FormatFont(Content.AxisTitleFont) + " )";
+      }
+    }
+
+    private void titleTextBox_Validated(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.Title = titleTextBox.Text;
+      }
+    }
+
+    private void yAxisGridCheckBox_CheckedChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.YAxisGrid = yAxisGridCheckBox.Checked;
+      }
+    }
+
+    private void xAxisGridCheckBox_CheckedChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents && Content != null) {
+        Content.XAxisGrid = xAxisGridCheckBox.Checked;
+      }
+    }
+    #endregion
+
+    private string FormatFont(Font f) {
+      if (f == null) return "default";
+      else return f.Name + ", " + f.SizeInPoints.ToString() + "pt, " + f.Style.ToString();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesDialog.Designer.cs	(revision 8907)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesDialog.Designer.cs	(revision 8907)
@@ -0,0 +1,252 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Analysis.Views {
+  partial class ScatterPlotVisualPropertiesDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.seriesTabPage = new System.Windows.Forms.TabPage();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.downButton = new System.Windows.Forms.Button();
+      this.upButton = new System.Windows.Forms.Button();
+      this.seriesListView = new System.Windows.Forms.ListView();
+      this.dataRowVisualPropertiesControl = new HeuristicLab.Analysis.Views.ScatterPlotDataRowVisualPropertiesControl();
+      this.chartTabPage = new System.Windows.Forms.TabPage();
+      this.dataTableVisualPropertiesControl = new HeuristicLab.Analysis.Views.ScatterPlotVisualPropertiesControl();
+      this.tabControl.SuspendLayout();
+      this.seriesTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.chartTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.okButton.Location = new System.Drawing.Point(325, 400);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(406, 400);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 1;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // tabControl
+      // 
+      this.tabControl.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)));
+      this.tabControl.Controls.Add(this.seriesTabPage);
+      this.tabControl.Controls.Add(this.chartTabPage);
+      this.tabControl.Location = new System.Drawing.Point(12, 12);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(469, 382);
+      this.tabControl.TabIndex = 2;
+      // 
+      // seriesTabPage
+      // 
+      this.seriesTabPage.Controls.Add(this.splitContainer);
+      this.seriesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.seriesTabPage.Name = "seriesTabPage";
+      this.seriesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.seriesTabPage.Size = new System.Drawing.Size(461, 356);
+      this.seriesTabPage.TabIndex = 0;
+      this.seriesTabPage.Text = "Series";
+      this.seriesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.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)));
+      this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.downButton);
+      this.splitContainer.Panel1.Controls.Add(this.upButton);
+      this.splitContainer.Panel1.Controls.Add(this.seriesListView);
+      this.splitContainer.Panel1MinSize = 20;
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.dataRowVisualPropertiesControl);
+      this.splitContainer.Panel2MinSize = 50;
+      this.splitContainer.Size = new System.Drawing.Size(461, 356);
+      this.splitContainer.SplitterDistance = 125;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // downButton
+      // 
+      this.downButton.Enabled = false;
+      this.downButton.Location = new System.Drawing.Point(35, 3);
+      this.downButton.Name = "downButton";
+      this.downButton.Size = new System.Drawing.Size(26, 23);
+      this.downButton.TabIndex = 1;
+      this.downButton.Text = "Down";
+      this.downButton.UseVisualStyleBackColor = true;
+      this.downButton.Click += new System.EventHandler(this.downButton_Click);
+      // 
+      // upButton
+      // 
+      this.upButton.Enabled = false;
+      this.upButton.Location = new System.Drawing.Point(3, 3);
+      this.upButton.Name = "upButton";
+      this.upButton.Size = new System.Drawing.Size(26, 23);
+      this.upButton.TabIndex = 0;
+      this.upButton.Text = "Up";
+      this.upButton.UseVisualStyleBackColor = true;
+      this.upButton.Click += new System.EventHandler(this.upButton_Click);
+      // 
+      // seriesListView
+      // 
+      this.seriesListView.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)));
+      this.seriesListView.HideSelection = false;
+      this.seriesListView.Location = new System.Drawing.Point(3, 32);
+      this.seriesListView.MultiSelect = false;
+      this.seriesListView.Name = "seriesListView";
+      this.seriesListView.ShowGroups = false;
+      this.seriesListView.Size = new System.Drawing.Size(119, 321);
+      this.seriesListView.TabIndex = 2;
+      this.seriesListView.UseCompatibleStateImageBehavior = false;
+      this.seriesListView.View = System.Windows.Forms.View.List;
+      this.seriesListView.SelectedIndexChanged += new System.EventHandler(this.seriesListView_SelectedIndexChanged);
+      // 
+      // dataRowVisualPropertiesControl
+      // 
+      this.dataRowVisualPropertiesControl.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)));
+      this.dataRowVisualPropertiesControl.Content = null;
+      this.dataRowVisualPropertiesControl.Location = new System.Drawing.Point(3, 26);
+      this.dataRowVisualPropertiesControl.Name = "dataRowVisualPropertiesControl";
+      this.dataRowVisualPropertiesControl.Size = new System.Drawing.Size(326, 327);
+      this.dataRowVisualPropertiesControl.TabIndex = 0;
+      // 
+      // chartTabPage
+      // 
+      this.chartTabPage.Controls.Add(this.dataTableVisualPropertiesControl);
+      this.chartTabPage.Location = new System.Drawing.Point(4, 22);
+      this.chartTabPage.Name = "chartTabPage";
+      this.chartTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.chartTabPage.Size = new System.Drawing.Size(461, 356);
+      this.chartTabPage.TabIndex = 1;
+      this.chartTabPage.Text = "Chart";
+      this.chartTabPage.UseVisualStyleBackColor = true;
+      // 
+      // dataTableVisualPropertiesControl
+      // 
+      this.dataTableVisualPropertiesControl.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)));
+      this.dataTableVisualPropertiesControl.Content = null;
+      this.dataTableVisualPropertiesControl.Location = new System.Drawing.Point(3, 6);
+      this.dataTableVisualPropertiesControl.Name = "dataTableVisualPropertiesControl";
+      this.dataTableVisualPropertiesControl.Size = new System.Drawing.Size(455, 347);
+      this.dataTableVisualPropertiesControl.TabIndex = 0;
+      // 
+      // DataTableVisualPropertiesDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(493, 435);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "DataTableVisualPropertiesDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Customize Visual Properties";
+      this.TopMost = true;
+      this.tabControl.ResumeLayout(false);
+      this.seriesTabPage.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.chartTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage seriesTabPage;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.ListView seriesListView;
+    private System.Windows.Forms.TabPage chartTabPage;
+    private ScatterPlotDataRowVisualPropertiesControl dataRowVisualPropertiesControl;
+    private ScatterPlotVisualPropertiesControl dataTableVisualPropertiesControl;
+    private System.Windows.Forms.Button downButton;
+    private System.Windows.Forms.Button upButton;
+  }
+}
Index: trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesDialog.cs	(revision 8907)
+++ trunk/sources/HeuristicLab.Analysis.Views/3.3/ScatterPlotVisualPropertiesDialog.cs	(revision 8907)
@@ -0,0 +1,181 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.Analysis.Views {
+  public partial class ScatterPlotVisualPropertiesDialog : Form {
+    protected bool SuppressEvents { get; set; }
+    protected ScatterPlot Content { get; private set; }
+    private ScatterPlotVisualProperties originalScatterPlotVPs;
+    private Dictionary<string, ScatterPlotDataRowVisualProperties> originalScatterPlotDataRowVPs;
+
+    private HashSet<string> modifiedDisplayNames;
+    public IEnumerable<string> RowsWithModifiedDisplayNames { get { return modifiedDisplayNames.AsEnumerable(); } }
+
+    public ScatterPlotVisualPropertiesDialog(ScatterPlot scatterPlot) {
+      InitializeComponent();
+      #region Prepare controls
+      upButton.Text = string.Empty;
+      upButton.Image = VSImageLibrary.ArrowUp;
+      downButton.Text = string.Empty;
+      downButton.Image = VSImageLibrary.ArrowDown;
+      seriesListView.Items.Clear();
+      seriesListView.SmallImageList = new ImageList();
+      seriesListView.SmallImageList.Images.Add(VSImageLibrary.Graph);
+      #endregion
+
+      Content = scatterPlot;
+      originalScatterPlotVPs = (ScatterPlotVisualProperties)Content.VisualProperties.Clone();
+      originalScatterPlotDataRowVPs = new Dictionary<string, ScatterPlotDataRowVisualProperties>();
+      foreach (ScatterPlotDataRow row in Content.Rows)
+        originalScatterPlotDataRowVPs.Add(row.Name, (ScatterPlotDataRowVisualProperties)row.VisualProperties.Clone());
+
+      dataTableVisualPropertiesControl.Content = Content.VisualProperties;
+
+      modifiedDisplayNames = new HashSet<string>();
+      FillSeriesListView();
+      RegisterContentEvents();
+    }
+
+    private void RegisterContentEvents() {
+      foreach (ScatterPlotDataRow row in Content.Rows) {
+        row.VisualProperties.PropertyChanged += new PropertyChangedEventHandler(Row_VisualProperties_PropertyChanged);
+      }
+    }
+
+    private void DeregisterContentEvents() {
+      foreach (ScatterPlotDataRow row in Content.Rows) {
+        row.VisualProperties.PropertyChanged -= new PropertyChangedEventHandler(Row_VisualProperties_PropertyChanged);
+      }
+    }
+
+    protected override void OnClosing(CancelEventArgs e) {
+      DeregisterContentEvents();
+      Application.DoEvents();
+      base.OnClosing(e);
+    }
+
+    private void Row_VisualProperties_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      foreach (ScatterPlotDataRow row in Content.Rows) {
+        if (e.PropertyName == "DisplayName" && row.VisualProperties == sender) {
+          modifiedDisplayNames.Add(row.Name);
+          break;
+        }
+      }
+    }
+
+    private void seriesListView_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (!SuppressEvents) {
+        if (seriesListView.SelectedItems.Count != 1) {
+          dataRowVisualPropertiesControl.Content = null;
+          upButton.Enabled = downButton.Enabled = false;
+        } else {
+          string rowName = seriesListView.SelectedItems[0].Text;
+          dataRowVisualPropertiesControl.Content = Content.Rows[rowName].VisualProperties;
+          upButton.Enabled = seriesListView.SelectedIndices[0] > 0;
+          downButton.Enabled = seriesListView.SelectedIndices[0] < seriesListView.Items.Count - 1;
+        }
+      }
+    }
+
+    private void okButton_Click(object sender, System.EventArgs e) {
+      DialogResult = DialogResult.OK;
+      Close();
+    }
+
+    private void cancelButton_Click(object sender, System.EventArgs e) {
+      DialogResult = DialogResult.Cancel;
+      foreach (ScatterPlotDataRow row in Content.Rows) {
+        row.VisualProperties = originalScatterPlotDataRowVPs[row.Name];
+      }
+      modifiedDisplayNames.Clear();
+      Content.VisualProperties = originalScatterPlotVPs;
+      Close();
+    }
+
+    private void upButton_Click(object sender, System.EventArgs e) {
+      if (seriesListView.SelectedIndices.Count == 1 && seriesListView.SelectedIndices[0] > 0) {
+        int index = seriesListView.SelectedIndices[0];
+        SuppressEvents = true;
+        try {
+          seriesListView.BeginUpdate();
+          ListViewItem selectedSeriesItem = seriesListView.Items[index];
+          seriesListView.Items.RemoveAt(index);
+          ListViewItem temp = seriesListView.Items[index - 1];
+          seriesListView.Items.RemoveAt(index - 1);
+          seriesListView.Items.Insert(index - 1, selectedSeriesItem);
+          seriesListView.Items.Insert(index, temp);
+          seriesListView.SelectedIndices.Clear();
+          seriesListView.EndUpdate();
+        }
+        finally { SuppressEvents = false; }
+        seriesListView.SelectedIndices.Add(index - 1);
+        UpdateAllSeriesPositions();
+      }
+    }
+
+    private void downButton_Click(object sender, System.EventArgs e) {
+      if (seriesListView.SelectedIndices.Count == 1 && seriesListView.SelectedIndices[0] < seriesListView.Items.Count - 1) {
+        int index = seriesListView.SelectedIndices[0];
+        SuppressEvents = true;
+        try {
+          seriesListView.BeginUpdate();
+          ListViewItem temp = seriesListView.Items[index + 1];
+          seriesListView.Items.RemoveAt(index + 1);
+          ListViewItem selectedSeriesItem = seriesListView.Items[index];
+          seriesListView.Items.RemoveAt(index);
+          seriesListView.Items.Insert(index, temp);
+          seriesListView.Items.Insert(index + 1, selectedSeriesItem);
+          seriesListView.SelectedIndices.Clear();
+          seriesListView.EndUpdate();
+        }
+        finally { SuppressEvents = false; }
+        seriesListView.SelectedIndices.Add(index + 1);
+        UpdateAllSeriesPositions();
+      }
+    }
+
+    #region Helpers
+    private void FillSeriesListView() {
+      seriesListView.SelectedIndices.Clear();
+      foreach (ScatterPlotDataRow row in Content.Rows) {
+        seriesListView.Items.Add(new ListViewItem(row.Name, 0));
+      }
+      if (seriesListView.Items.Count > 0)
+        seriesListView.SelectedIndices.Add(0);
+    }
+
+    private void UpdateAllSeriesPositions() {
+      Dictionary<string, ScatterPlotDataRow> rows = Content.Rows.ToDictionary(x => x.Name);
+      Content.Rows.Clear();
+      for (int i = 0; i < seriesListView.Items.Count; i++) {
+        ListViewItem item = seriesListView.Items[i];
+        Content.Rows.Add(rows[item.Text]);
+      }
+    }
+    #endregion
+  }
+}
