Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/DoubleRangeView.Designer.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/DoubleRangeView.Designer.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/DoubleRangeView.Designer.cs	(revision 5757)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Data.Views {
+  public partial class DoubleRangeView {
+    /// <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.SuspendLayout();
+      // 
+      // Item1Label
+      // 
+      this.Item1Label.Size = new System.Drawing.Size(32, 13);
+      this.Item1Label.Text = "Start:";
+      // 
+      // Item2Label
+      // 
+      this.Item2Label.Size = new System.Drawing.Size(29, 13);
+      this.Item2Label.Text = "End:";
+      // 
+      // IntRangeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "IntRangeView";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+    }
+
+    #endregion
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/DoubleRangeView.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/DoubleRangeView.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/DoubleRangeView.cs	(revision 5757)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Data.Views {
+  [View("DoubleRange View")]
+  [Content(typeof(DoubleRange), true)]
+  public partial class DoubleRangeView : StringConvertibleValueTupleView {
+
+    public new DoubleRange Content {
+      get { return (DoubleRange)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public DoubleRangeView() {
+      InitializeComponent();
+    }
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 5756)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 5757)
@@ -12,5 +12,6 @@
     <AssemblyName>HeuristicLab.Data.Views-3.3</AssemblyName>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
     <SignAssembly>true</SignAssembly>
@@ -111,4 +112,22 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="DoubleRangeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DoubleRangeView.Designer.cs">
+      <DependentUpon>DoubleRangeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IntRangeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IntRangeView.Designer.cs">
+      <DependentUpon>IntRangeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StringConvertibleValueTupleView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StringConvertibleValueTupleView.Designer.cs">
+      <DependentUpon>StringConvertibleValueTupleView.cs</DependentUpon>
+    </Compile>
     <None Include="HeuristicLabDataViewsPlugin.cs.frame" />
     <Compile Include="BoolValueView.cs">
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/IntRangeView.Designer.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/IntRangeView.Designer.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/IntRangeView.Designer.cs	(revision 5757)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Data.Views {
+  public partial class IntRangeView {
+    /// <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.SuspendLayout();
+      // 
+      // Item1Label
+      // 
+      this.Item1Label.Size = new System.Drawing.Size(32, 13);
+      this.Item1Label.Text = "Start:";
+      // 
+      // Item2Label
+      // 
+      this.Item2Label.Size = new System.Drawing.Size(29, 13);
+      this.Item2Label.Text = "End:";
+      // 
+      // IntRangeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "IntRangeView";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+    }
+
+    #endregion
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/IntRangeView.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/IntRangeView.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/IntRangeView.cs	(revision 5757)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Data.Views {
+  [View("IntRange View")]
+  [Content(typeof(IntRange), true)]
+  public partial class IntRangeView : StringConvertibleValueTupleView {
+
+    public new IntRange Content {
+      get { return (IntRange)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public IntRangeView() {
+      InitializeComponent();
+    }
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/StringConvertibleValueTupleView.Designer.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/StringConvertibleValueTupleView.Designer.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/StringConvertibleValueTupleView.Designer.cs	(revision 5757)
@@ -0,0 +1,119 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Data.Views {
+  public partial class StringConvertibleValueTupleView {
+    /// <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.Item1View = new HeuristicLab.Data.Views.StringConvertibleValueView();
+      this.Item2View = new HeuristicLab.Data.Views.StringConvertibleValueView();
+      this.Item1Label = new System.Windows.Forms.Label();
+      this.Item2Label = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // Item1View
+      // 
+      this.Item1View.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.Item1View.Caption = "StringConvertibleValue View";
+      this.Item1View.Content = null;
+      this.Item1View.LabelVisible = false;
+      this.Item1View.Location = new System.Drawing.Point(45, 3);
+      this.Item1View.Name = "Item1View";
+      this.Item1View.ReadOnly = false;
+      this.Item1View.Size = new System.Drawing.Size(260, 22);
+      this.Item1View.TabIndex = 0;
+      // 
+      // Item2View
+      // 
+      this.Item2View.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.Item2View.Caption = "StringConvertibleValue View";
+      this.Item2View.Content = null;
+      this.Item2View.LabelVisible = false;
+      this.Item2View.Location = new System.Drawing.Point(45, 31);
+      this.Item2View.Name = "Item2View";
+      this.Item2View.ReadOnly = false;
+      this.Item2View.Size = new System.Drawing.Size(260, 22);
+      this.Item2View.TabIndex = 1;
+      // 
+      // Item1Label
+      // 
+      this.Item1Label.AutoSize = true;
+      this.Item1Label.Location = new System.Drawing.Point(3, 6);
+      this.Item1Label.Name = "Item1Label";
+      this.Item1Label.Size = new System.Drawing.Size(36, 13);
+      this.Item1Label.TabIndex = 2;
+      this.Item1Label.Text = "Item1:";
+      // 
+      // Item2Label
+      // 
+      this.Item2Label.AutoSize = true;
+      this.Item2Label.Location = new System.Drawing.Point(3, 34);
+      this.Item2Label.Name = "Item2Label";
+      this.Item2Label.Size = new System.Drawing.Size(36, 13);
+      this.Item2Label.TabIndex = 3;
+      this.Item2Label.Text = "Item2:";
+      // 
+      // ValueTypeTupleView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.Item2Label);
+      this.Controls.Add(this.Item1Label);
+      this.Controls.Add(this.Item2View);
+      this.Controls.Add(this.Item1View);
+      this.Name = "ValueTypeTupleView";
+      this.Size = new System.Drawing.Size(308, 56);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected StringConvertibleValueView Item1View;
+    protected StringConvertibleValueView Item2View;
+    protected System.Windows.Forms.Label Item1Label;
+    protected System.Windows.Forms.Label Item2Label;
+
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/StringConvertibleValueTupleView.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/StringConvertibleValueTupleView.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data.Views/3.3/StringConvertibleValueTupleView.cs	(revision 5757)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Data.Views {
+  [View("StringConvertibleValueTuple View")]
+  [Content(typeof(IStringConvertibleValueTuple), false)]
+  public partial class StringConvertibleValueTupleView : AsynchronousContentView {
+
+    public new IStringConvertibleValueTuple Content {
+      get { return (IStringConvertibleValueTuple)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public override bool ReadOnly {
+      get {
+        if ((Content != null) && Content.ReadOnly) return true;
+        return base.ReadOnly;
+      }
+      set { base.ReadOnly = value; }
+    }
+
+    public StringConvertibleValueTupleView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      Item1View.Content = Content.Item1;
+      Item2View.Content = Content.Item2;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      Item1View.Enabled = Content != null;
+      Item2View.Enabled = Content != null;
+    }
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/DoubleRange.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/DoubleRange.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/DoubleRange.cs	(revision 5757)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Data {
+  [StorableClass]
+  [Item("DoubleRange", "Represents a range of values betweent start and end.")]
+  public class DoubleRange : StringConvertibleValueTuple<DoubleValue, DoubleValue> {
+
+    public DoubleValue Start { get { return Item1; } }
+    public DoubleValue End { get { return Item2; } }
+
+    [StorableConstructor]
+    protected DoubleRange(bool deserializing) : base(deserializing) { }
+    protected DoubleRange(DoubleRange original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DoubleRange(this, cloner);
+    }
+
+    public DoubleRange() : base() { }
+    public DoubleRange(DoubleValue start, DoubleValue end) : base(start, end) { }
+
+    public override string ToString() {
+      return string.Format("Start: {0}, End: {1}", Start, End);
+    }
+
+    public override StringConvertibleValueTuple<DoubleValue, DoubleValue> AsReadOnly() {
+      var readOnly = new DoubleRange();
+      readOnly.values = Tuple.Create<DoubleValue, DoubleValue>((DoubleValue)Start.AsReadOnly(), (DoubleValue)End.AsReadOnly());
+      readOnly.readOnly = true;
+      return readOnly;
+    }
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 5756)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 5757)
@@ -20,5 +20,6 @@
     <IsWebBootstrapper>true</IsWebBootstrapper>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <PublishUrl>http://localhost/HeuristicLab.Data/</PublishUrl>
     <Install>true</Install>
@@ -113,4 +114,7 @@
     <Compile Include="Comparison.cs" />
     <Compile Include="ComparisonType.cs" />
+    <Compile Include="DoubleRange.cs" />
+    <Compile Include="IntRange.cs" />
+    <Compile Include="Interfaces\IStringConvertibleValueTuple.cs" />
     <Compile Include="PercentValue.cs" />
     <Compile Include="DateTimeValue.cs" />
@@ -123,7 +127,7 @@
     <Compile Include="IntMatrix.cs" />
     <Compile Include="IntValue.cs" />
-    <Compile Include="IStringConvertibleArray.cs" />
-    <Compile Include="IStringConvertibleMatrix.cs" />
-    <Compile Include="IStringConvertibleValue.cs" />
+    <Compile Include="Interfaces\IStringConvertibleArray.cs" />
+    <Compile Include="Interfaces\IStringConvertibleMatrix.cs" />
+    <Compile Include="Interfaces\IStringConvertibleValue.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="StringArray.cs" />
@@ -133,4 +137,5 @@
     <Compile Include="ValueTypeArray.cs" />
     <Compile Include="ValueTypeMatrix.cs" />
+    <Compile Include="StringConvertibleValueTuple.cs" />
     <Compile Include="ValueTypeValue.cs" />
   </ItemGroup>
Index: anches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IStringConvertibleArray.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IStringConvertibleArray.cs	(revision 5756)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 HeuristicLab.Common;
-
-namespace HeuristicLab.Data {
-  public interface IStringConvertibleArray : IContent {
-    int Length { get; set; }
-
-    bool ReadOnly { get; }
-
-    bool Validate(string value, out string errorMessage);
-    string GetValue(int index);
-    bool SetValue(string value, int index);
-
-    event EventHandler<EventArgs<int>> ItemChanged;
-    event EventHandler Reset;
-  }
-}
Index: anches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IStringConvertibleMatrix.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IStringConvertibleMatrix.cs	(revision 5756)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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.Collections.Generic;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Data {
-  public interface IStringConvertibleMatrix : IContent {
-    int Rows { get; set; }
-    int Columns { get; set; }
-    IEnumerable<string> ColumnNames { get; set; }
-    IEnumerable<string> RowNames { get; set; }
-
-    bool SortableView { get; set; }
-    bool ReadOnly { get; }
-
-    bool Validate(string value, out string errorMessage);
-    string GetValue(int rowIndex, int columnIndex);
-    bool SetValue(string value, int rowIndex, int columnIndex);
-
-    event EventHandler ColumnsChanged;
-    event EventHandler RowsChanged;
-    event EventHandler ColumnNamesChanged;
-    event EventHandler RowNamesChanged;
-    event EventHandler SortableViewChanged;
-    event EventHandler<EventArgs<int, int>> ItemChanged;
-    event EventHandler Reset;
-
-  }
-}
Index: anches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IStringConvertibleValue.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IStringConvertibleValue.cs	(revision 5756)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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 HeuristicLab.Common;
-
-namespace HeuristicLab.Data {
-  public interface IStringConvertibleValue : IContent {
-    bool ReadOnly { get; }
-
-    bool Validate(string value, out string errorMessage);
-    string GetValue();
-    bool SetValue(string value);
-
-    event EventHandler ValueChanged;
-  }
-}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IntRange.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IntRange.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/IntRange.cs	(revision 5757)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Data {
+  [StorableClass]
+  [Item("IntRange", "Represents a range of values betweent start and end.")]
+  public class IntRange : StringConvertibleValueTuple<IntValue, IntValue> {
+
+    public IntValue Start { get { return Item1; } }
+    public IntValue End { get { return Item2; } }
+
+    [StorableConstructor]
+    protected IntRange(bool deserializing) : base(deserializing) { }
+    protected IntRange(IntRange original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IntRange(this, cloner);
+    }
+
+    public IntRange() : base() { }
+    public IntRange(IntValue start, IntValue end) : base(start, end) { }
+
+    public override string ToString() {
+      return string.Format("Start: {0}, End: {1}", Start, End);
+    }
+
+    public override StringConvertibleValueTuple<IntValue, IntValue> AsReadOnly() {
+      var readOnly = new IntRange();
+      readOnly.values = Tuple.Create<IntValue, IntValue>((IntValue)Start.AsReadOnly(), (IntValue)End.AsReadOnly());
+      readOnly.readOnly = true;
+      return readOnly;
+    }
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleArray.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleArray.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleArray.cs	(revision 5757)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+
+namespace HeuristicLab.Data {
+  public interface IStringConvertibleArray : IContent {
+    int Length { get; set; }
+
+    bool ReadOnly { get; }
+
+    bool Validate(string value, out string errorMessage);
+    string GetValue(int index);
+    bool SetValue(string value, int index);
+
+    event EventHandler<EventArgs<int>> ItemChanged;
+    event EventHandler Reset;
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleMatrix.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleMatrix.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleMatrix.cs	(revision 5757)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Data {
+  public interface IStringConvertibleMatrix : IContent {
+    int Rows { get; set; }
+    int Columns { get; set; }
+    IEnumerable<string> ColumnNames { get; set; }
+    IEnumerable<string> RowNames { get; set; }
+
+    bool SortableView { get; set; }
+    bool ReadOnly { get; }
+
+    bool Validate(string value, out string errorMessage);
+    string GetValue(int rowIndex, int columnIndex);
+    bool SetValue(string value, int rowIndex, int columnIndex);
+
+    event EventHandler ColumnsChanged;
+    event EventHandler RowsChanged;
+    event EventHandler ColumnNamesChanged;
+    event EventHandler RowNamesChanged;
+    event EventHandler SortableViewChanged;
+    event EventHandler<EventArgs<int, int>> ItemChanged;
+    event EventHandler Reset;
+
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleValue.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleValue.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleValue.cs	(revision 5757)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+
+namespace HeuristicLab.Data {
+  public interface IStringConvertibleValue : IContent {
+    bool ReadOnly { get; }
+
+    bool Validate(string value, out string errorMessage);
+    string GetValue();
+    bool SetValue(string value);
+
+    event EventHandler ValueChanged;
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleValueTuple.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleValueTuple.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleValueTuple.cs	(revision 5757)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Core;
+namespace HeuristicLab.Data {
+  public interface IStringConvertibleValueTuple : IItem {
+    IStringConvertibleValue Item1 { get; }
+    IStringConvertibleValue Item2 { get; }
+    bool ReadOnly { get; }
+  }
+}
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/StringConvertibleValueTuple.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/StringConvertibleValueTuple.cs	(revision 5757)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Data/3.3/StringConvertibleValueTuple.cs	(revision 5757)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Data {
+  [StorableClass]
+  [Item("StringConvertibleValueTuple<,>", "A generic abstract base class for representing multiple values of a string convertible value.")]
+  public abstract class StringConvertibleValueTuple<T, U> : Item, IStringConvertibleValueTuple
+    where T : class, IDeepCloneable, IStringConvertibleValue
+    where U : class, IDeepCloneable, IStringConvertibleValue {
+
+    [Storable]
+    protected bool readOnly;
+    public virtual bool ReadOnly {
+      get { return readOnly; }
+    }
+
+    [Storable(Name = "Values")]
+    protected Tuple<T, U> values;
+
+    protected T Item1 { get { return values.Item1; } }
+    IStringConvertibleValue IStringConvertibleValueTuple.Item1 { get { return Item1; } }
+    protected U Item2 { get { return values.Item2; } }
+    IStringConvertibleValue IStringConvertibleValueTuple.Item2 { get { return Item2; } }
+
+    [StorableConstructor]
+    protected StringConvertibleValueTuple(bool deserializing) : base(deserializing) { }
+    protected StringConvertibleValueTuple(StringConvertibleValueTuple<T, U> original, Cloner cloner)
+      : base(original, cloner) {
+      T item1 = (T)cloner.Clone(original.values.Item1);
+      U item2 = (U)cloner.Clone(original.values.Item2);
+      values = Tuple.Create<T, U>(item1, item2);
+    }
+
+    public StringConvertibleValueTuple()
+      : base() {
+      values = Tuple.Create<T, U>(default(T), default(U));
+      readOnly = false;
+      RegisterEventHandler();
+    }
+    public StringConvertibleValueTuple(T item1, U item2)
+      : base() {
+      values = Tuple.Create<T, U>(item1, item2);
+      readOnly = false;
+      RegisterEventHandler();
+    }
+
+    public abstract StringConvertibleValueTuple<T, U> AsReadOnly();
+
+    public override string ToString() {
+      return string.Format("Item1: {0}, Item2: {1}", Item1, Item2);
+    }
+
+    private void RegisterEventHandler() {
+      Item1.ValueChanged += Item_ValueChanged;
+      Item2.ValueChanged += Item_ValueChanged;
+    }
+
+    private void Item_ValueChanged(object sender, EventArgs e) {
+      OnValueChanged();
+    }
+
+    public event EventHandler ValueChanged;
+    protected virtual void OnValueChanged() {
+      if (ValueChanged != null)
+        ValueChanged(this, EventArgs.Empty);
+      OnToStringChanged();
+    }
+  }
+}
