Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalCollectionView.Designer.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalCollectionView.Designer.cs	(revision 17893)
+++ 	(revision )
@@ -1,82 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2019 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.Problems.DataAnalysis.Views {
-  partial class IntervalCollectionView {
-    /// <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.dataGridView = new System.Windows.Forms.DataGridView();
-      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // dataGridView
-      // 
-      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-      this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.dataGridView.Location = new System.Drawing.Point(0, 0);
-      this.dataGridView.Margin = new System.Windows.Forms.Padding(4);
-      this.dataGridView.Name = "dataGridView";
-      this.dataGridView.RowHeadersWidth = 120;
-      this.dataGridView.Size = new System.Drawing.Size(643, 505);
-      this.dataGridView.TabIndex = 1;
-      this.dataGridView.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellEndEdit);
-      this.dataGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView_CellValidating);
-      this.dataGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellValueChanged);
-      // 
-      // IntervalCollectionView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.dataGridView);
-      this.Margin = new System.Windows.Forms.Padding(4);
-      this.Name = "IntervalCollectionView";
-      this.Size = new System.Drawing.Size(643, 505);
-      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.DataGridView dataGridView;
-  }
-}
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalCollectionView.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalCollectionView.cs	(revision 17893)
+++ 	(revision )
@@ -1,153 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2019 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.Problems.DataAnalysis.Views {
-
-  [View("IntervalCollection View")]
-  [Content(typeof(IntervalCollection), true)]
-  public sealed partial class IntervalCollectionView : AsynchronousContentView {
-
-    public new IntervalCollection Content {
-      get => (IntervalCollection)base.Content;
-      set => base.Content = value;
-    }
-
-    private DataGridView DataGridView {
-      get => dataGridView;
-    }
-
-    public IntervalCollectionView() {
-      InitializeComponent();
-      dataGridView.AutoGenerateColumns = false;
-      dataGridView.AllowUserToAddRows = false;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        DataGridView.Rows.Clear();
-        DataGridView.Columns.Clear();
-      } else {
-        UpdateData();
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      dataGridView.Enabled = Content != null;
-      dataGridView.ReadOnly = ReadOnly;
-    }
-
-    private void UpdateData() {
-      DataGridView.Rows.Clear();
-      DataGridView.Columns.Clear();
-      SetColumnNames();
-
-
-      var variablesCount = Content.Count;
-
-      DataGridViewRow[] rows = new DataGridViewRow[variablesCount];
-      for (var i = 0; i < variablesCount; ++i) {
-        var row = new DataGridViewRow();
-        rows[i] = row;
-      }
-      dataGridView.Rows.AddRange(rows);
-
-      var j = 0;
-      foreach (var variableInterval in Content.GetVariableIntervals()) {
-        dataGridView.Rows[j].HeaderCell.Value = variableInterval.Item1;
-        dataGridView.Rows[j].Cells[0].Value = variableInterval.Item2.LowerBound;
-        dataGridView.Rows[j].Cells[1].Value = variableInterval.Item2.UpperBound;
-        j++;
-      }
-
-      dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
-      dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
-      dataGridView.Enabled = true;
-      //Disable Sorting
-      foreach (DataGridViewColumn column in dataGridView.Columns) {
-        column.SortMode = DataGridViewColumnSortMode.NotSortable;
-      }
-    }
-
-    private void SetColumnNames() {
-      dataGridView.Columns.Add("lowerBound", "Lower Bound");
-      dataGridView.Columns.Add("upperBound", "Upper Bound");
-    }
-
-    private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
-      if (e.ColumnIndex < 0 || e.RowIndex < 0) return;
-
-      var key = dataGridView.Rows[e.RowIndex].HeaderCell.Value.ToString();
-      var gridData = dataGridView[e.ColumnIndex, e.RowIndex].Value;
-      //Cells maybe null during initialization
-      var lowerBound = Content.GetInterval(key).LowerBound;
-      var upperBound = Content.GetInterval(key).UpperBound;
-
-      //Check if the input data is a string (user-defined input)
-      //if so parse the toString() of the value, otherwise do a hard-cast
-      //to not loose the double precision
-      double parsedValue;
-      if (gridData is string) {
-        parsedValue = double.Parse(gridData.ToString());
-      } else {
-        parsedValue = (double)gridData;
-      }
-
-      if (e.ColumnIndex == 0) lowerBound = parsedValue;
-      if (e.ColumnIndex == 1) upperBound = parsedValue;
-
-      var newInterval = new Interval(lowerBound, upperBound);
-
-      // update if there was a change
-      if (!Content.GetInterval(key).Equals(newInterval))
-        Content.SetInterval(key, newInterval);
-    }
-
-    private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
-      if (!double.TryParse(e.FormattedValue.ToString(), out var value)) {
-        e.Cancel = true;
-        dataGridView.Rows[e.RowIndex].ErrorText = "Value must be a double value.";
-        return;
-      }
-
-      var lowerBound = double.Parse(dataGridView.Rows[e.RowIndex].Cells[0].Value.ToString());
-      var upperBound = double.Parse(dataGridView.Rows[e.RowIndex].Cells[1].Value.ToString());
-
-      if (e.ColumnIndex == 0 && value > upperBound || e.ColumnIndex == 1 && value < lowerBound) {
-        e.Cancel = true;
-        dataGridView.Rows[e.RowIndex].ErrorText = "Lower bound of interval must be smaller than upper bound.";
-        return;
-      }
-
-      dataGridView[e.ColumnIndex, e.RowIndex].Value = value;
-    }
-
-    private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
-      dataGridView.Rows[e.RowIndex].ErrorText = string.Empty;
-    }
-  }
-}
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalConstraintView.Designer.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalConstraintView.Designer.cs	(revision 17893)
+++ 	(revision )
@@ -1,231 +1,0 @@
-﻿namespace HeuristicLab.Problems.DataAnalysis.Views {
-  partial class IntervalConstraintView {
-    /// <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.lowerboundLabel = new System.Windows.Forms.Label();
-            this.upperboundLabel = new System.Windows.Forms.Label();
-            this.variableLabel = new System.Windows.Forms.Label();
-            this.numberderivationLabel = new System.Windows.Forms.Label();
-            this.upperboundInput = new System.Windows.Forms.TextBox();
-            this.lowerboundInput = new System.Windows.Forms.TextBox();
-            this.variableInput = new System.Windows.Forms.TextBox();
-            this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.weightInput = new System.Windows.Forms.TextBox();
-            this.WeightLab = new System.Windows.Forms.Label();
-            this.regionLab = new System.Windows.Forms.Label();
-            this.regionView = new HeuristicLab.Problems.DataAnalysis.Views.IntervalCollectionView();
-            this.label1 = new System.Windows.Forms.Label();
-            this.numberderivationInput = new System.Windows.Forms.ComboBox();
-            this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-            this.groupBox1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-            this.SuspendLayout();
-            // 
-            // lowerboundLabel
-            // 
-            this.lowerboundLabel.AutoSize = true;
-            this.lowerboundLabel.Location = new System.Drawing.Point(8, 101);
-            this.lowerboundLabel.Name = "lowerboundLabel";
-            this.lowerboundLabel.Size = new System.Drawing.Size(69, 13);
-            this.lowerboundLabel.TabIndex = 2;
-            this.lowerboundLabel.Text = "Lowerbound:";
-            // 
-            // upperboundLabel
-            // 
-            this.upperboundLabel.AutoSize = true;
-            this.upperboundLabel.Location = new System.Drawing.Point(8, 126);
-            this.upperboundLabel.Name = "upperboundLabel";
-            this.upperboundLabel.Size = new System.Drawing.Size(69, 13);
-            this.upperboundLabel.TabIndex = 3;
-            this.upperboundLabel.Text = "Upperbound:";
-            // 
-            // variableLabel
-            // 
-            this.variableLabel.AutoSize = true;
-            this.variableLabel.Location = new System.Drawing.Point(8, 47);
-            this.variableLabel.Name = "variableLabel";
-            this.variableLabel.Size = new System.Drawing.Size(48, 13);
-            this.variableLabel.TabIndex = 7;
-            this.variableLabel.Text = "Variable:";
-            // 
-            // numberderivationLabel
-            // 
-            this.numberderivationLabel.AutoSize = true;
-            this.numberderivationLabel.Location = new System.Drawing.Point(8, 74);
-            this.numberderivationLabel.Name = "numberderivationLabel";
-            this.numberderivationLabel.Size = new System.Drawing.Size(65, 13);
-            this.numberderivationLabel.TabIndex = 8;
-            this.numberderivationLabel.Text = "#Derivation:";
-            // 
-            // upperboundInput
-            // 
-            this.upperboundInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.upperboundInput.Location = new System.Drawing.Point(108, 123);
-            this.upperboundInput.Name = "upperboundInput";
-            this.upperboundInput.Size = new System.Drawing.Size(473, 20);
-            this.upperboundInput.TabIndex = 11;
-            this.upperboundInput.Validating += new System.ComponentModel.CancelEventHandler(this.upperboundInput_Validating);
-            this.upperboundInput.Validated += new System.EventHandler(this.upperboundInput_Validated);
-            // 
-            // lowerboundInput
-            // 
-            this.lowerboundInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.lowerboundInput.Location = new System.Drawing.Point(108, 98);
-            this.lowerboundInput.Name = "lowerboundInput";
-            this.lowerboundInput.Size = new System.Drawing.Size(473, 20);
-            this.lowerboundInput.TabIndex = 12;
-            this.lowerboundInput.Validating += new System.ComponentModel.CancelEventHandler(this.lowerboundInput_Validating);
-            this.lowerboundInput.Validated += new System.EventHandler(this.lowerboundInput_Validated);
-            // 
-            // variableInput
-            // 
-            this.variableInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.variableInput.Location = new System.Drawing.Point(108, 44);
-            this.variableInput.Name = "variableInput";
-            this.variableInput.Size = new System.Drawing.Size(473, 20);
-            this.variableInput.TabIndex = 15;
-            // 
-            // groupBox1
-            // 
-            this.groupBox1.Controls.Add(this.weightInput);
-            this.groupBox1.Controls.Add(this.WeightLab);
-            this.groupBox1.Controls.Add(this.regionLab);
-            this.groupBox1.Controls.Add(this.regionView);
-            this.groupBox1.Controls.Add(this.label1);
-            this.groupBox1.Controls.Add(this.numberderivationInput);
-            this.groupBox1.Controls.Add(this.variableInput);
-            this.groupBox1.Controls.Add(this.lowerboundInput);
-            this.groupBox1.Controls.Add(this.upperboundInput);
-            this.groupBox1.Controls.Add(this.numberderivationLabel);
-            this.groupBox1.Controls.Add(this.variableLabel);
-            this.groupBox1.Controls.Add(this.upperboundLabel);
-            this.groupBox1.Controls.Add(this.lowerboundLabel);
-            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox1.Location = new System.Drawing.Point(0, 0);
-            this.groupBox1.Name = "groupBox1";
-            this.groupBox1.Size = new System.Drawing.Size(587, 380);
-            this.groupBox1.TabIndex = 0;
-            this.groupBox1.TabStop = false;
-            this.groupBox1.Text = "Interval Constraints Detail";
-            // 
-            // weightInput
-            // 
-            this.weightInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.weightInput.Location = new System.Drawing.Point(108, 150);
-            this.weightInput.Name = "weightInput";
-            this.weightInput.Size = new System.Drawing.Size(473, 20);
-            this.weightInput.TabIndex = 33;
-            this.weightInput.TextChanged += new System.EventHandler(this.weightInput_TextChanged);
-            // 
-            // WeightLab
-            // 
-            this.WeightLab.AutoSize = true;
-            this.WeightLab.Location = new System.Drawing.Point(8, 153);
-            this.WeightLab.Name = "WeightLab";
-            this.WeightLab.Size = new System.Drawing.Size(44, 13);
-            this.WeightLab.TabIndex = 32;
-            this.WeightLab.Text = "Weight:";
-            // 
-            // regionLab
-            // 
-            this.regionLab.AutoSize = true;
-            this.regionLab.Location = new System.Drawing.Point(8, 188);
-            this.regionLab.Name = "regionLab";
-            this.regionLab.Size = new System.Drawing.Size(49, 13);
-            this.regionLab.TabIndex = 31;
-            this.regionLab.Text = "Regions:";
-            // 
-            // regionView
-            // 
-            this.regionView.Caption = "IntervalCollection View";
-            this.regionView.Content = null;
-            this.regionView.Location = new System.Drawing.Point(108, 188);
-            this.regionView.Name = "regionView";
-            this.regionView.ReadOnly = false;
-            this.regionView.Size = new System.Drawing.Size(473, 186);
-            this.regionView.TabIndex = 30;
-            this.regionView.TabStop = false;
-            // 
-            // label1
-            // 
-            this.label1.AutoSize = true;
-            this.label1.Location = new System.Drawing.Point(11, -105);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(49, 13);
-            this.label1.TabIndex = 28;
-            this.label1.Text = "Enabled:";
-            // 
-            // numberderivationInput
-            // 
-            this.numberderivationInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.numberderivationInput.FormattingEnabled = true;
-            this.numberderivationInput.Location = new System.Drawing.Point(108, 71);
-            this.numberderivationInput.Name = "numberderivationInput";
-            this.numberderivationInput.Size = new System.Drawing.Size(473, 21);
-            this.numberderivationInput.TabIndex = 27;
-            this.numberderivationInput.SelectedIndexChanged += new System.EventHandler(this.numberderivationInput_SelectedIndexChanged);
-            // 
-            // errorProvider
-            // 
-            this.errorProvider.ContainerControl = this;
-            this.errorProvider.RightToLeft = true;
-            // 
-            // IntervalConstraintView
-            // 
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-            this.Controls.Add(this.groupBox1);
-            this.Name = "IntervalConstraintView";
-            this.Size = new System.Drawing.Size(587, 380);
-            this.groupBox1.ResumeLayout(false);
-            this.groupBox1.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-            this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label         lowerboundLabel;
-    private System.Windows.Forms.Label         upperboundLabel;
-    private System.Windows.Forms.Label         variableLabel;
-    private System.Windows.Forms.Label         numberderivationLabel;
-    private System.Windows.Forms.TextBox       upperboundInput;
-    private System.Windows.Forms.TextBox       lowerboundInput;
-    private System.Windows.Forms.TextBox       variableInput;
-    private System.Windows.Forms.GroupBox      groupBox1;
-    private System.Windows.Forms.ErrorProvider errorProvider;
-    private System.Windows.Forms.ComboBox      numberderivationInput;
-    private System.Windows.Forms.Label         label1;
-    private IntervalCollectionView regionView;
-    private System.Windows.Forms.Label regionLab;
-        private System.Windows.Forms.TextBox weightInput;
-        private System.Windows.Forms.Label WeightLab;
-    }
-}
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalConstraintView.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalConstraintView.cs	(revision 17893)
+++ 	(revision )
@@ -1,204 +1,0 @@
-﻿#region License Information
-
-/* HeuristicLab
- * Copyright (C) 2002-2019 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.ComponentModel;
-using System.Windows.Forms;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Problems.DataAnalysis.Views {
-  [View("Interval Constraint Detail View")]
-  [Content(typeof(ShapeConstraint), true)]
-  public sealed partial class IntervalConstraintView : ItemView {
-    public new ShapeConstraint Content {
-      get => (ShapeConstraint)base.Content;
-      set => base.Content = value;
-    }
-
-    public IntervalConstraintView() {
-      InitializeComponent();
-      int[] items = { 1, 2, 3 };
-      numberderivationInput.DataSource = items;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      this.regionView.Content = Content.Regions;
-      UpdateControls();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.Changed += Content_Changed;
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.Changed -= Content_Changed;
-      base.DeregisterContentEvents();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      variableInput.Enabled = Content != null && !Locked && !ReadOnly;
-      numberderivationInput.Enabled = Content != null && !Locked && !ReadOnly;
-      lowerboundInput.Enabled = Content != null && !Locked && !ReadOnly;
-      upperboundInput.Enabled = Content != null && !Locked && !ReadOnly;
-      weightInput.Enabled = Content != null && !Locked && !ReadOnly;
-    }
-
-
-    #region helpers
-
-    private static double ParseDoubleValue(string input, Control control, ErrorProvider errorProvider) {
-      input = input.ToLower();
-      switch (input) {
-        case "inf.":
-        case "+inf.":
-        case "Infinity":
-          return double.PositiveInfinity;
-        case "-inf.":
-        case "-Infinity":
-          return double.NegativeInfinity;
-        default: {
-            if (double.TryParse(input, out var value)) {
-              return value;
-            }
-
-            errorProvider.SetError(control, "Invalid input: value must be a double.");
-            return double.NaN;
-          }
-      }
-    }
-
-    private void UpdateControls() {
-      if (Content == null) {
-        lowerboundInput.Text = string.Empty;
-        upperboundInput.Text = string.Empty;
-        weightInput.Text = string.Empty;
-        return;
-      }
-
-      lowerboundInput.Text = Content.Interval.LowerBound.ToString();
-      upperboundInput.Text = Content.Interval.UpperBound.ToString();
-      weightInput.Text = Content.Weight.ToString();
-
-      variableInput.Text = Content.Variable;
-      if (!Content.IsDerivative) {
-        numberderivationInput.Enabled = false;
-        numberderivationInput.SelectedItem = null;
-        numberderivationInput.Text = "0";
-      } else {
-        numberderivationLabel.Visible = true;
-        numberderivationInput.Visible = true;
-        numberderivationInput.Enabled = true;
-        numberderivationInput.SelectedItem = Content.NumberOfDerivations;
-      }
-
-      regionView.Content = Content.Regions;
-    }
-
-    #endregion
-
-    #region control event handlers
-
-    private void lowerboundInput_Validating(object sender, CancelEventArgs e) {
-      var value = ParseDoubleValue(lowerboundInput.Text, lowerboundInput, errorProvider);
-      if (double.IsNaN(value)) {
-        errorProvider.SetError(lowerboundInput, "Invalid input: lower bound must be a double value.");
-        e.Cancel = true;
-        return;
-      }
-
-      if (value > Content.Interval.UpperBound) {
-        errorProvider.SetError(lowerboundInput, "Invalid input: lower bound must be smaller than upper bound.");
-        e.Cancel = true;
-        return;
-      }
-
-      errorProvider.SetError(lowerboundInput, string.Empty);
-      e.Cancel = false;
-    }
-
-    private void lowerboundInput_Validated(object sender, EventArgs e) {
-      var value =
-        ParseDoubleValue(lowerboundInput.Text, lowerboundInput, errorProvider);
-      if (!double.IsNaN(value)) Content.Interval = new Interval(value, Content.Interval.UpperBound);
-    }
-
-    private void upperboundInput_Validating(object sender, CancelEventArgs e) {
-      var value = ParseDoubleValue(upperboundInput.Text, upperboundInput, errorProvider);
-      if (double.IsNaN(value)) {
-        errorProvider.SetError(upperboundInput, "Invalid Input: upper bound must be a double value.");
-        e.Cancel = true;
-        return;
-      }
-
-      if (value < Content.Interval.LowerBound) {
-        errorProvider.SetError(upperboundInput, "Invalid input: upper bound must be bigger than lower bound.");
-        e.Cancel = true;
-        return;
-      }
-
-      errorProvider.SetError(upperboundInput, string.Empty);
-      e.Cancel = false;
-    }
-
-    private void upperboundInput_Validated(object sender, EventArgs e) {
-      var value =
-        ParseDoubleValue(upperboundInput.Text, upperboundInput, errorProvider);
-      if (!double.IsNaN(value)) Content.Interval = new Interval(Content.Interval.LowerBound, value);
-    }
-
-    private void numberderivationInput_SelectedIndexChanged(object sender, EventArgs e) {
-      if (numberderivationInput.SelectedItem == null) {
-        Content.NumberOfDerivations = 0;
-        numberderivationInput.Enabled = false;
-        return;
-      }
-
-      if ((int)numberderivationInput.SelectedItem == 1)
-        Content.NumberOfDerivations = 1;
-      else if ((int)numberderivationInput.SelectedItem == 2)
-        Content.NumberOfDerivations = 2;
-      else if ((int)numberderivationInput.SelectedItem == 3)
-        Content.NumberOfDerivations = 3;
-    }
-
-    private void weightInput_TextChanged(object sender, EventArgs e) {
-      var value = ParseDoubleValue(weightInput.Text, weightInput, errorProvider);
-      if (!double.IsNaN(value)) Content.Weight = value;
-    }
-
-
-    #endregion
-
-    #region content event handlers
-
-    private void Content_Changed(object sender, EventArgs e) {
-      UpdateControls();
-    }
-
-   #endregion
-  }
-}
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalConstraintView.resx
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/IntervalConstraintView.resx	(revision 17893)
+++ 	(revision )
@@ -1,123 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalCollectionView.Designer.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalCollectionView.Designer.cs	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalCollectionView.Designer.cs	(revision 17894)
@@ -0,0 +1,82 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.Problems.DataAnalysis.Views {
+  partial class IntervalCollectionView {
+    /// <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.dataGridView = new System.Windows.Forms.DataGridView();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataGridView.Location = new System.Drawing.Point(0, 0);
+      this.dataGridView.Margin = new System.Windows.Forms.Padding(4);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.RowHeadersWidth = 120;
+      this.dataGridView.Size = new System.Drawing.Size(643, 505);
+      this.dataGridView.TabIndex = 1;
+      this.dataGridView.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellEndEdit);
+      this.dataGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView_CellValidating);
+      this.dataGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellValueChanged);
+      // 
+      // IntervalCollectionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataGridView);
+      this.Margin = new System.Windows.Forms.Padding(4);
+      this.Name = "IntervalCollectionView";
+      this.Size = new System.Drawing.Size(643, 505);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+  }
+}
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalCollectionView.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalCollectionView.cs	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalCollectionView.cs	(revision 17894)
@@ -0,0 +1,153 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.Problems.DataAnalysis.Views {
+
+  [View("IntervalCollection View")]
+  [Content(typeof(IntervalCollection), true)]
+  public sealed partial class IntervalCollectionView : AsynchronousContentView {
+
+    public new IntervalCollection Content {
+      get => (IntervalCollection)base.Content;
+      set => base.Content = value;
+    }
+
+    private DataGridView DataGridView {
+      get => dataGridView;
+    }
+
+    public IntervalCollectionView() {
+      InitializeComponent();
+      dataGridView.AutoGenerateColumns = false;
+      dataGridView.AllowUserToAddRows = false;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        DataGridView.Rows.Clear();
+        DataGridView.Columns.Clear();
+      } else {
+        UpdateData();
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      dataGridView.Enabled = Content != null;
+      dataGridView.ReadOnly = ReadOnly;
+    }
+
+    private void UpdateData() {
+      DataGridView.Rows.Clear();
+      DataGridView.Columns.Clear();
+      SetColumnNames();
+
+
+      var variablesCount = Content.Count;
+
+      DataGridViewRow[] rows = new DataGridViewRow[variablesCount];
+      for (var i = 0; i < variablesCount; ++i) {
+        var row = new DataGridViewRow();
+        rows[i] = row;
+      }
+      dataGridView.Rows.AddRange(rows);
+
+      var j = 0;
+      foreach (var variableInterval in Content.GetVariableIntervals()) {
+        dataGridView.Rows[j].HeaderCell.Value = variableInterval.Item1;
+        dataGridView.Rows[j].Cells[0].Value = variableInterval.Item2.LowerBound;
+        dataGridView.Rows[j].Cells[1].Value = variableInterval.Item2.UpperBound;
+        j++;
+      }
+
+      dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
+      dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
+      dataGridView.Enabled = true;
+      //Disable Sorting
+      foreach (DataGridViewColumn column in dataGridView.Columns) {
+        column.SortMode = DataGridViewColumnSortMode.NotSortable;
+      }
+    }
+
+    private void SetColumnNames() {
+      dataGridView.Columns.Add("lowerBound", "Lower Bound");
+      dataGridView.Columns.Add("upperBound", "Upper Bound");
+    }
+
+    private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
+      if (e.ColumnIndex < 0 || e.RowIndex < 0) return;
+
+      var key = dataGridView.Rows[e.RowIndex].HeaderCell.Value.ToString();
+      var gridData = dataGridView[e.ColumnIndex, e.RowIndex].Value;
+      //Cells maybe null during initialization
+      var lowerBound = Content.GetInterval(key).LowerBound;
+      var upperBound = Content.GetInterval(key).UpperBound;
+
+      //Check if the input data is a string (user-defined input)
+      //if so parse the toString() of the value, otherwise do a hard-cast
+      //to not loose the double precision
+      double parsedValue;
+      if (gridData is string) {
+        parsedValue = double.Parse(gridData.ToString());
+      } else {
+        parsedValue = (double)gridData;
+      }
+
+      if (e.ColumnIndex == 0) lowerBound = parsedValue;
+      if (e.ColumnIndex == 1) upperBound = parsedValue;
+
+      var newInterval = new Interval(lowerBound, upperBound);
+
+      // update if there was a change
+      if (!Content.GetInterval(key).Equals(newInterval))
+        Content.SetInterval(key, newInterval);
+    }
+
+    private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
+      if (!double.TryParse(e.FormattedValue.ToString(), out var value)) {
+        e.Cancel = true;
+        dataGridView.Rows[e.RowIndex].ErrorText = "Value must be a double value.";
+        return;
+      }
+
+      var lowerBound = double.Parse(dataGridView.Rows[e.RowIndex].Cells[0].Value.ToString());
+      var upperBound = double.Parse(dataGridView.Rows[e.RowIndex].Cells[1].Value.ToString());
+
+      if (e.ColumnIndex == 0 && value > upperBound || e.ColumnIndex == 1 && value < lowerBound) {
+        e.Cancel = true;
+        dataGridView.Rows[e.RowIndex].ErrorText = "Lower bound of interval must be smaller than upper bound.";
+        return;
+      }
+
+      dataGridView[e.ColumnIndex, e.RowIndex].Value = value;
+    }
+
+    private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
+      dataGridView.Rows[e.RowIndex].ErrorText = string.Empty;
+    }
+  }
+}
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.Designer.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.Designer.cs	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.Designer.cs	(revision 17894)
@@ -0,0 +1,231 @@
+﻿namespace HeuristicLab.Problems.DataAnalysis.Views {
+  partial class IntervalConstraintView {
+    /// <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.lowerboundLabel = new System.Windows.Forms.Label();
+            this.upperboundLabel = new System.Windows.Forms.Label();
+            this.variableLabel = new System.Windows.Forms.Label();
+            this.numberderivationLabel = new System.Windows.Forms.Label();
+            this.upperboundInput = new System.Windows.Forms.TextBox();
+            this.lowerboundInput = new System.Windows.Forms.TextBox();
+            this.variableInput = new System.Windows.Forms.TextBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.weightInput = new System.Windows.Forms.TextBox();
+            this.WeightLab = new System.Windows.Forms.Label();
+            this.regionLab = new System.Windows.Forms.Label();
+            this.regionView = new HeuristicLab.Problems.DataAnalysis.Views.IntervalCollectionView();
+            this.label1 = new System.Windows.Forms.Label();
+            this.numberderivationInput = new System.Windows.Forms.ComboBox();
+            this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+            this.groupBox1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // lowerboundLabel
+            // 
+            this.lowerboundLabel.AutoSize = true;
+            this.lowerboundLabel.Location = new System.Drawing.Point(8, 101);
+            this.lowerboundLabel.Name = "lowerboundLabel";
+            this.lowerboundLabel.Size = new System.Drawing.Size(69, 13);
+            this.lowerboundLabel.TabIndex = 2;
+            this.lowerboundLabel.Text = "Lowerbound:";
+            // 
+            // upperboundLabel
+            // 
+            this.upperboundLabel.AutoSize = true;
+            this.upperboundLabel.Location = new System.Drawing.Point(8, 126);
+            this.upperboundLabel.Name = "upperboundLabel";
+            this.upperboundLabel.Size = new System.Drawing.Size(69, 13);
+            this.upperboundLabel.TabIndex = 3;
+            this.upperboundLabel.Text = "Upperbound:";
+            // 
+            // variableLabel
+            // 
+            this.variableLabel.AutoSize = true;
+            this.variableLabel.Location = new System.Drawing.Point(8, 47);
+            this.variableLabel.Name = "variableLabel";
+            this.variableLabel.Size = new System.Drawing.Size(48, 13);
+            this.variableLabel.TabIndex = 7;
+            this.variableLabel.Text = "Variable:";
+            // 
+            // numberderivationLabel
+            // 
+            this.numberderivationLabel.AutoSize = true;
+            this.numberderivationLabel.Location = new System.Drawing.Point(8, 74);
+            this.numberderivationLabel.Name = "numberderivationLabel";
+            this.numberderivationLabel.Size = new System.Drawing.Size(65, 13);
+            this.numberderivationLabel.TabIndex = 8;
+            this.numberderivationLabel.Text = "#Derivation:";
+            // 
+            // upperboundInput
+            // 
+            this.upperboundInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.upperboundInput.Location = new System.Drawing.Point(108, 123);
+            this.upperboundInput.Name = "upperboundInput";
+            this.upperboundInput.Size = new System.Drawing.Size(473, 20);
+            this.upperboundInput.TabIndex = 11;
+            this.upperboundInput.Validating += new System.ComponentModel.CancelEventHandler(this.upperboundInput_Validating);
+            this.upperboundInput.Validated += new System.EventHandler(this.upperboundInput_Validated);
+            // 
+            // lowerboundInput
+            // 
+            this.lowerboundInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.lowerboundInput.Location = new System.Drawing.Point(108, 98);
+            this.lowerboundInput.Name = "lowerboundInput";
+            this.lowerboundInput.Size = new System.Drawing.Size(473, 20);
+            this.lowerboundInput.TabIndex = 12;
+            this.lowerboundInput.Validating += new System.ComponentModel.CancelEventHandler(this.lowerboundInput_Validating);
+            this.lowerboundInput.Validated += new System.EventHandler(this.lowerboundInput_Validated);
+            // 
+            // variableInput
+            // 
+            this.variableInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.variableInput.Location = new System.Drawing.Point(108, 44);
+            this.variableInput.Name = "variableInput";
+            this.variableInput.Size = new System.Drawing.Size(473, 20);
+            this.variableInput.TabIndex = 15;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.weightInput);
+            this.groupBox1.Controls.Add(this.WeightLab);
+            this.groupBox1.Controls.Add(this.regionLab);
+            this.groupBox1.Controls.Add(this.regionView);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.numberderivationInput);
+            this.groupBox1.Controls.Add(this.variableInput);
+            this.groupBox1.Controls.Add(this.lowerboundInput);
+            this.groupBox1.Controls.Add(this.upperboundInput);
+            this.groupBox1.Controls.Add(this.numberderivationLabel);
+            this.groupBox1.Controls.Add(this.variableLabel);
+            this.groupBox1.Controls.Add(this.upperboundLabel);
+            this.groupBox1.Controls.Add(this.lowerboundLabel);
+            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox1.Location = new System.Drawing.Point(0, 0);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(587, 380);
+            this.groupBox1.TabIndex = 0;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Interval Constraints Detail";
+            // 
+            // weightInput
+            // 
+            this.weightInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.weightInput.Location = new System.Drawing.Point(108, 150);
+            this.weightInput.Name = "weightInput";
+            this.weightInput.Size = new System.Drawing.Size(473, 20);
+            this.weightInput.TabIndex = 33;
+            this.weightInput.TextChanged += new System.EventHandler(this.weightInput_TextChanged);
+            // 
+            // WeightLab
+            // 
+            this.WeightLab.AutoSize = true;
+            this.WeightLab.Location = new System.Drawing.Point(8, 153);
+            this.WeightLab.Name = "WeightLab";
+            this.WeightLab.Size = new System.Drawing.Size(44, 13);
+            this.WeightLab.TabIndex = 32;
+            this.WeightLab.Text = "Weight:";
+            // 
+            // regionLab
+            // 
+            this.regionLab.AutoSize = true;
+            this.regionLab.Location = new System.Drawing.Point(8, 188);
+            this.regionLab.Name = "regionLab";
+            this.regionLab.Size = new System.Drawing.Size(49, 13);
+            this.regionLab.TabIndex = 31;
+            this.regionLab.Text = "Regions:";
+            // 
+            // regionView
+            // 
+            this.regionView.Caption = "IntervalCollection View";
+            this.regionView.Content = null;
+            this.regionView.Location = new System.Drawing.Point(108, 188);
+            this.regionView.Name = "regionView";
+            this.regionView.ReadOnly = false;
+            this.regionView.Size = new System.Drawing.Size(473, 186);
+            this.regionView.TabIndex = 30;
+            this.regionView.TabStop = false;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(11, -105);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(49, 13);
+            this.label1.TabIndex = 28;
+            this.label1.Text = "Enabled:";
+            // 
+            // numberderivationInput
+            // 
+            this.numberderivationInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.numberderivationInput.FormattingEnabled = true;
+            this.numberderivationInput.Location = new System.Drawing.Point(108, 71);
+            this.numberderivationInput.Name = "numberderivationInput";
+            this.numberderivationInput.Size = new System.Drawing.Size(473, 21);
+            this.numberderivationInput.TabIndex = 27;
+            this.numberderivationInput.SelectedIndexChanged += new System.EventHandler(this.numberderivationInput_SelectedIndexChanged);
+            // 
+            // errorProvider
+            // 
+            this.errorProvider.ContainerControl = this;
+            this.errorProvider.RightToLeft = true;
+            // 
+            // IntervalConstraintView
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+            this.Controls.Add(this.groupBox1);
+            this.Name = "IntervalConstraintView";
+            this.Size = new System.Drawing.Size(587, 380);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+            this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label         lowerboundLabel;
+    private System.Windows.Forms.Label         upperboundLabel;
+    private System.Windows.Forms.Label         variableLabel;
+    private System.Windows.Forms.Label         numberderivationLabel;
+    private System.Windows.Forms.TextBox       upperboundInput;
+    private System.Windows.Forms.TextBox       lowerboundInput;
+    private System.Windows.Forms.TextBox       variableInput;
+    private System.Windows.Forms.GroupBox      groupBox1;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+    private System.Windows.Forms.ComboBox      numberderivationInput;
+    private System.Windows.Forms.Label         label1;
+    private IntervalCollectionView regionView;
+    private System.Windows.Forms.Label regionLab;
+        private System.Windows.Forms.TextBox weightInput;
+        private System.Windows.Forms.Label WeightLab;
+    }
+}
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.cs	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.cs	(revision 17894)
@@ -0,0 +1,204 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.ComponentModel;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  [View("Interval Constraint Detail View")]
+  [Content(typeof(ShapeConstraint), true)]
+  public sealed partial class IntervalConstraintView : ItemView {
+    public new ShapeConstraint Content {
+      get => (ShapeConstraint)base.Content;
+      set => base.Content = value;
+    }
+
+    public IntervalConstraintView() {
+      InitializeComponent();
+      int[] items = { 1, 2, 3 };
+      numberderivationInput.DataSource = items;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      this.regionView.Content = Content.Regions;
+      UpdateControls();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.Changed += Content_Changed;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.Changed -= Content_Changed;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      variableInput.Enabled = Content != null && !Locked && !ReadOnly;
+      numberderivationInput.Enabled = Content != null && !Locked && !ReadOnly;
+      lowerboundInput.Enabled = Content != null && !Locked && !ReadOnly;
+      upperboundInput.Enabled = Content != null && !Locked && !ReadOnly;
+      weightInput.Enabled = Content != null && !Locked && !ReadOnly;
+    }
+
+
+    #region helpers
+
+    private static double ParseDoubleValue(string input, Control control, ErrorProvider errorProvider) {
+      input = input.ToLower();
+      switch (input) {
+        case "inf.":
+        case "+inf.":
+        case "Infinity":
+          return double.PositiveInfinity;
+        case "-inf.":
+        case "-Infinity":
+          return double.NegativeInfinity;
+        default: {
+            if (double.TryParse(input, out var value)) {
+              return value;
+            }
+
+            errorProvider.SetError(control, "Invalid input: value must be a double.");
+            return double.NaN;
+          }
+      }
+    }
+
+    private void UpdateControls() {
+      if (Content == null) {
+        lowerboundInput.Text = string.Empty;
+        upperboundInput.Text = string.Empty;
+        weightInput.Text = string.Empty;
+        return;
+      }
+
+      lowerboundInput.Text = Content.Interval.LowerBound.ToString();
+      upperboundInput.Text = Content.Interval.UpperBound.ToString();
+      weightInput.Text = Content.Weight.ToString();
+
+      variableInput.Text = Content.Variable;
+      if (!Content.IsDerivative) {
+        numberderivationInput.Enabled = false;
+        numberderivationInput.SelectedItem = null;
+        numberderivationInput.Text = "0";
+      } else {
+        numberderivationLabel.Visible = true;
+        numberderivationInput.Visible = true;
+        numberderivationInput.Enabled = true;
+        numberderivationInput.SelectedItem = Content.NumberOfDerivations;
+      }
+
+      regionView.Content = Content.Regions;
+    }
+
+    #endregion
+
+    #region control event handlers
+
+    private void lowerboundInput_Validating(object sender, CancelEventArgs e) {
+      var value = ParseDoubleValue(lowerboundInput.Text, lowerboundInput, errorProvider);
+      if (double.IsNaN(value)) {
+        errorProvider.SetError(lowerboundInput, "Invalid input: lower bound must be a double value.");
+        e.Cancel = true;
+        return;
+      }
+
+      if (value > Content.Interval.UpperBound) {
+        errorProvider.SetError(lowerboundInput, "Invalid input: lower bound must be smaller than upper bound.");
+        e.Cancel = true;
+        return;
+      }
+
+      errorProvider.SetError(lowerboundInput, string.Empty);
+      e.Cancel = false;
+    }
+
+    private void lowerboundInput_Validated(object sender, EventArgs e) {
+      var value =
+        ParseDoubleValue(lowerboundInput.Text, lowerboundInput, errorProvider);
+      if (!double.IsNaN(value)) Content.Interval = new Interval(value, Content.Interval.UpperBound);
+    }
+
+    private void upperboundInput_Validating(object sender, CancelEventArgs e) {
+      var value = ParseDoubleValue(upperboundInput.Text, upperboundInput, errorProvider);
+      if (double.IsNaN(value)) {
+        errorProvider.SetError(upperboundInput, "Invalid Input: upper bound must be a double value.");
+        e.Cancel = true;
+        return;
+      }
+
+      if (value < Content.Interval.LowerBound) {
+        errorProvider.SetError(upperboundInput, "Invalid input: upper bound must be bigger than lower bound.");
+        e.Cancel = true;
+        return;
+      }
+
+      errorProvider.SetError(upperboundInput, string.Empty);
+      e.Cancel = false;
+    }
+
+    private void upperboundInput_Validated(object sender, EventArgs e) {
+      var value =
+        ParseDoubleValue(upperboundInput.Text, upperboundInput, errorProvider);
+      if (!double.IsNaN(value)) Content.Interval = new Interval(Content.Interval.LowerBound, value);
+    }
+
+    private void numberderivationInput_SelectedIndexChanged(object sender, EventArgs e) {
+      if (numberderivationInput.SelectedItem == null) {
+        Content.NumberOfDerivations = 0;
+        numberderivationInput.Enabled = false;
+        return;
+      }
+
+      if ((int)numberderivationInput.SelectedItem == 1)
+        Content.NumberOfDerivations = 1;
+      else if ((int)numberderivationInput.SelectedItem == 2)
+        Content.NumberOfDerivations = 2;
+      else if ((int)numberderivationInput.SelectedItem == 3)
+        Content.NumberOfDerivations = 3;
+    }
+
+    private void weightInput_TextChanged(object sender, EventArgs e) {
+      var value = ParseDoubleValue(weightInput.Text, weightInput, errorProvider);
+      if (!double.IsNaN(value)) Content.Weight = value;
+    }
+
+
+    #endregion
+
+    #region content event handlers
+
+    private void Content_Changed(object sender, EventArgs e) {
+      UpdateControls();
+    }
+
+   #endregion
+  }
+}
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.resx
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.resx	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/IntervalConstraintView.resx	(revision 17894)
@@ -0,0 +1,123 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.Designer.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.Designer.cs	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.Designer.cs	(revision 17894)
@@ -0,0 +1,185 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.Core.Views;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  partial class ShapeConstraintsView {
+    /// <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.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.constraintsInput = new System.Windows.Forms.TextBox();
+            this.parseBtn = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.errorOutput = new System.Windows.Forms.Label();
+            this.intervalConstraintsView = new HeuristicLab.Core.Views.CheckedItemListView<ShapeConstraint>();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+            this.splitContainer1.Panel1.SuspendLayout();
+            this.splitContainer1.Panel2.SuspendLayout();
+            this.splitContainer1.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // splitContainer1
+            // 
+            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainer1.Name = "splitContainer1";
+            // 
+            // splitContainer1.Panel1
+            // 
+            this.splitContainer1.Panel1.Controls.Add(this.groupBox1);
+            // 
+            // splitContainer1.Panel2
+            // 
+            this.splitContainer1.Panel2.Controls.Add(this.intervalConstraintsView);
+            this.splitContainer1.Size = new System.Drawing.Size(888, 629);
+            this.splitContainer1.SplitterDistance = 296;
+            this.splitContainer1.TabIndex = 0;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.constraintsInput);
+            this.groupBox1.Controls.Add(this.parseBtn);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.errorOutput);
+            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox1.Location = new System.Drawing.Point(0, 0);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(296, 629);
+            this.groupBox1.TabIndex = 3;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Constraints Input";
+            // 
+            // constraintsInput
+            // 
+            this.constraintsInput.AcceptsTab = true;
+            this.constraintsInput.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.constraintsInput.Location = new System.Drawing.Point(3, 29);
+            this.constraintsInput.Multiline = true;
+            this.constraintsInput.Name = "constraintsInput";
+            this.constraintsInput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+            this.constraintsInput.Size = new System.Drawing.Size(290, 561);
+            this.constraintsInput.TabIndex = 2;
+            this.constraintsInput.TextChanged += new System.EventHandler(this.constraintsInput_TextChanged);
+            // 
+            // parseBtn
+            // 
+            this.parseBtn.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.parseBtn.Location = new System.Drawing.Point(3, 590);
+            this.parseBtn.Name = "parseBtn";
+            this.parseBtn.Size = new System.Drawing.Size(290, 23);
+            this.parseBtn.TabIndex = 1;
+            this.parseBtn.Text = "Parse Constraints";
+            this.parseBtn.UseVisualStyleBackColor = true;
+            this.parseBtn.Click += new System.EventHandler(this.parseBtn_Click);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.label1.Image = global::HeuristicLab.Problems.DataAnalysis.Views.Properties.Resources.VS2008ImageLibrary_Annotations_Information;
+            this.label1.Location = new System.Drawing.Point(3, 16);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(19, 13);
+            this.label1.TabIndex = 4;
+            this.label1.Text = "    ";
+            this.toolTip1.SetToolTip(this.label1, "Double-click to open description.");
+            this.label1.DoubleClick += new System.EventHandler(this.label1_DoubleClick);
+            // 
+            // errorOutput
+            // 
+            this.errorOutput.AutoSize = true;
+            this.errorOutput.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.errorOutput.ForeColor = System.Drawing.Color.DarkRed;
+            this.errorOutput.Location = new System.Drawing.Point(3, 613);
+            this.errorOutput.MaximumSize = new System.Drawing.Size(350, 0);
+            this.errorOutput.Name = "errorOutput";
+            this.errorOutput.Size = new System.Drawing.Size(35, 13);
+            this.errorOutput.TabIndex = 3;
+            this.errorOutput.Text = "label2";
+            // 
+            // intervalConstraintsView
+            // 
+            this.intervalConstraintsView.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.intervalConstraintsView.Location = new System.Drawing.Point(0, 0);
+            this.intervalConstraintsView.Name = "intervalConstraintsView";
+            this.intervalConstraintsView.Size = new System.Drawing.Size(588, 629);
+            this.intervalConstraintsView.TabIndex = 2;
+            this.intervalConstraintsView.TabStop = false;
+            // 
+            // ShapeConstraintsView
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.splitContainer1);
+            this.Name = "ShapeConstraintsView";
+            this.Size = new System.Drawing.Size(888, 629);
+            this.splitContainer1.Panel1.ResumeLayout(false);
+            this.splitContainer1.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+            this.splitContainer1.ResumeLayout(false);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.ResumeLayout(false);
+
+    }
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.Button parseBtn;
+    private HeuristicLab.Core.Views.CheckedItemListView<ShapeConstraint> intervalConstraintsView;
+    //private System.Windows.Forms.GroupBox intervalConstraintsView;
+    private System.Windows.Forms.TextBox constraintsInput;
+    private Label errorOutput;
+    private Label label1;
+    protected ToolTip toolTip1;
+    }
+}
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.cs	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.cs	(revision 17894)
@@ -0,0 +1,191 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.Text;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  [View("ShapeConstraints View")]
+  [Content(typeof(ShapeConstraints), true)]
+  public partial class ShapeConstraintsView : AsynchronousContentView {
+    public new ShapeConstraints Content {
+      get => (ShapeConstraints)base.Content;
+      set => base.Content = value;
+    }
+
+    public bool suspendUpdates = false;
+
+    public ShapeConstraintsView() {
+      InitializeComponent();
+      errorOutput.Text = "";
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      this.intervalConstraintsView.Content = Content;
+      UpdateControl();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemsAdded += constraints_Added;
+      Content.ItemsRemoved += constraint_Removed;
+      Content.Changed += Content_Changed;
+      Content.CollectionReset += constraints_Reset;
+      Content.ItemsMoved += constraints_Moved;
+      Content.ItemsReplaced += Content_ItemsReplaced;
+      Content.CheckedItemsChanged += Content_CheckedItemsChanged;
+    }
+
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemsAdded -= constraints_Added;
+      Content.ItemsRemoved -= constraint_Removed;
+      Content.Changed -= Content_Changed;
+      Content.CollectionReset -= constraints_Reset;
+      Content.ItemsMoved -= constraints_Moved;
+      Content.ItemsReplaced -= Content_ItemsReplaced;
+      Content.CheckedItemsChanged -= Content_CheckedItemsChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      constraintsInput.Enabled = Content != null && !Locked && !ReadOnly;
+    }
+
+
+    private void parseBtn_Click(object sender, EventArgs e) {
+      if (constraintsInput.Text != null) {
+        suspendUpdates = true;
+        Content.Clear();
+        try {
+          var parsedConstraints = ShapeConstraintsParser.ParseConstraints(constraintsInput.Text);
+          Content = parsedConstraints;
+          errorOutput.Text = "Constraints successfully parsed.";
+          errorOutput.ForeColor = Color.DarkGreen;
+          //Catch the exception from the constraints parser and show it in the error dialog
+        } catch (ArgumentException ex) {
+          Content.Clear();
+          errorOutput.Text = ex.Message.Replace("Parameter name", "@Line");
+          errorOutput.ForeColor = Color.DarkRed;
+        }
+        suspendUpdates = false;
+        UpdateControl();
+      } else {
+        errorOutput.Text = "No constraints were found!";
+      }
+    }
+
+    private void UpdateControl() {
+      if (suspendUpdates) return;
+      if (Content == null) {
+        constraintsInput.Text = string.Empty;
+      } else {
+        this.intervalConstraintsView.Content = Content;
+        constraintsInput.Text = ToString(Content);
+      }
+    }
+
+    private string ToString(ShapeConstraints constraints) {
+      var sb = new StringBuilder();
+      foreach (var constraint in constraints) {
+        if (!constraints.ItemChecked(constraint)) {
+          sb.Append("# ").AppendLine(constraint.ToString());
+        } else {
+          sb.AppendLine(constraint.ToString());
+        }
+      }
+      return sb.ToString();
+    }
+
+    private void constraint_Changed(object sender, EventArgs e) {
+      UpdateControl();
+    }
+
+    private void constraints_Added(object sender,
+                                     CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
+      foreach (var addedItem in e.Items) addedItem.Value.Changed += constraint_Changed;
+      UpdateControl();
+    }
+
+    private void constraint_Removed(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
+      foreach (var removedItem in e.Items) removedItem.Value.Changed -= constraint_Changed;
+      UpdateControl();
+    }
+
+    private void constraints_Moved(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
+      UpdateControl();
+    }
+
+    private void constraints_Reset(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
+      foreach (var addedItem in e.Items) addedItem.Value.Changed += constraint_Changed;
+      foreach (var removedItem in e.OldItems) removedItem.Value.Changed -= constraint_Changed;
+      UpdateControl();
+    }
+
+    private void Content_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
+      UpdateControl();
+    }
+
+    private void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
+      foreach (var addedItem in e.Items) addedItem.Value.Changed += constraint_Changed;
+      foreach (var removedItem in e.OldItems) removedItem.Value.Changed -= constraint_Changed;
+      UpdateControl();
+    }
+
+    private void constraintsInput_TextChanged(object sender, EventArgs e) {
+      errorOutput.Text = "Unparsed changes! Press parse button to save changes.";
+      errorOutput.ForeColor = Color.DarkOrange;
+    }
+
+    private void Content_Changed(object sender, EventArgs e) {
+      UpdateControl();
+    }
+
+    private void label1_DoubleClick(object sender, EventArgs e) {
+      var infoText =
+        "Within the text field you can define different types of shape constraints e.g. range constraints, monotonicity constraints, ..." +
+        System.Environment.NewLine +
+        "To define a model constraint: f in [0 .. 100], f is used for the selected target, the 'in' key word specifies the target in which the constraint should be, the interval is defined between square bracket." +
+        System.Environment.NewLine +
+        "The interval contains two bounds (lower and upper) this bounds are given as double values, to seperate both bounds from each other you can use (.., ;, ' ')" +
+        System.Environment.NewLine +
+        "To define monotonic or concave constraints you need to define the partial derivatives:" +
+        System.Environment.NewLine +
+        "∂f/∂x in [0 .. 1], therefore you have to define the partial fraction first, which can be done by using the \\partial symbol or 'd' followed by the target and the variable in the numerator and denominator respectively, after defining the fraction the interval is defined like in the model constraint." +
+        System.Environment.NewLine +
+        "To define constraints only on a specific range of the function you can define interval ranges" +
+        System.Environment.NewLine +
+        "f in [0 .. 100], x in [0 .. 1] the ranges are separated by commas and follow the same rules as before (giving the variable with the interval definition)" +
+        System.Environment.NewLine + "To specify different weights on the constraints:" +
+        System.Environment.NewLine + "f in [0 .. 100], x in [0 .. 1] weight: 2.0, you can add the keyword 'weight:' followed by a double value.";
+
+      MessageBox.Show(infoText,"How to define shape constraints", MessageBoxButtons.OKCancel);
+    }
+  }
+}
Index: /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.resx
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.resx	(revision 17894)
+++ /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ShapeConstraintsView.resx	(revision 17894)
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/ShapeConstraintsView.Designer.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/ShapeConstraintsView.Designer.cs	(revision 17893)
+++ 	(revision )
@@ -1,185 +1,0 @@
-﻿#region License Information
-
-/* HeuristicLab
- * Copyright (C) 2002-2019 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.Core.Views;
-
-namespace HeuristicLab.Problems.DataAnalysis.Views {
-  partial class ShapeConstraintsView {
-    /// <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.splitContainer1 = new System.Windows.Forms.SplitContainer();
-            this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.constraintsInput = new System.Windows.Forms.TextBox();
-            this.parseBtn = new System.Windows.Forms.Button();
-            this.label1 = new System.Windows.Forms.Label();
-            this.errorOutput = new System.Windows.Forms.Label();
-            this.intervalConstraintsView = new HeuristicLab.Core.Views.CheckedItemListView<ShapeConstraint>();
-            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
-            this.splitContainer1.Panel1.SuspendLayout();
-            this.splitContainer1.Panel2.SuspendLayout();
-            this.splitContainer1.SuspendLayout();
-            this.groupBox1.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // splitContainer1
-            // 
-            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
-            this.splitContainer1.Name = "splitContainer1";
-            // 
-            // splitContainer1.Panel1
-            // 
-            this.splitContainer1.Panel1.Controls.Add(this.groupBox1);
-            // 
-            // splitContainer1.Panel2
-            // 
-            this.splitContainer1.Panel2.Controls.Add(this.intervalConstraintsView);
-            this.splitContainer1.Size = new System.Drawing.Size(888, 629);
-            this.splitContainer1.SplitterDistance = 296;
-            this.splitContainer1.TabIndex = 0;
-            // 
-            // groupBox1
-            // 
-            this.groupBox1.Controls.Add(this.constraintsInput);
-            this.groupBox1.Controls.Add(this.parseBtn);
-            this.groupBox1.Controls.Add(this.label1);
-            this.groupBox1.Controls.Add(this.errorOutput);
-            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox1.Location = new System.Drawing.Point(0, 0);
-            this.groupBox1.Name = "groupBox1";
-            this.groupBox1.Size = new System.Drawing.Size(296, 629);
-            this.groupBox1.TabIndex = 3;
-            this.groupBox1.TabStop = false;
-            this.groupBox1.Text = "Constraints Input";
-            // 
-            // constraintsInput
-            // 
-            this.constraintsInput.AcceptsTab = true;
-            this.constraintsInput.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.constraintsInput.Location = new System.Drawing.Point(3, 29);
-            this.constraintsInput.Multiline = true;
-            this.constraintsInput.Name = "constraintsInput";
-            this.constraintsInput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-            this.constraintsInput.Size = new System.Drawing.Size(290, 561);
-            this.constraintsInput.TabIndex = 2;
-            this.constraintsInput.TextChanged += new System.EventHandler(this.constraintsInput_TextChanged);
-            // 
-            // parseBtn
-            // 
-            this.parseBtn.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.parseBtn.Location = new System.Drawing.Point(3, 590);
-            this.parseBtn.Name = "parseBtn";
-            this.parseBtn.Size = new System.Drawing.Size(290, 23);
-            this.parseBtn.TabIndex = 1;
-            this.parseBtn.Text = "Parse Constraints";
-            this.parseBtn.UseVisualStyleBackColor = true;
-            this.parseBtn.Click += new System.EventHandler(this.parseBtn_Click);
-            // 
-            // label1
-            // 
-            this.label1.AutoSize = true;
-            this.label1.Dock = System.Windows.Forms.DockStyle.Top;
-            this.label1.Image = global::HeuristicLab.Problems.DataAnalysis.Views.Properties.Resources.VS2008ImageLibrary_Annotations_Information;
-            this.label1.Location = new System.Drawing.Point(3, 16);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(19, 13);
-            this.label1.TabIndex = 4;
-            this.label1.Text = "    ";
-            this.toolTip1.SetToolTip(this.label1, "Double-click to open description.");
-            this.label1.DoubleClick += new System.EventHandler(this.label1_DoubleClick);
-            // 
-            // errorOutput
-            // 
-            this.errorOutput.AutoSize = true;
-            this.errorOutput.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.errorOutput.ForeColor = System.Drawing.Color.DarkRed;
-            this.errorOutput.Location = new System.Drawing.Point(3, 613);
-            this.errorOutput.MaximumSize = new System.Drawing.Size(350, 0);
-            this.errorOutput.Name = "errorOutput";
-            this.errorOutput.Size = new System.Drawing.Size(35, 13);
-            this.errorOutput.TabIndex = 3;
-            this.errorOutput.Text = "label2";
-            // 
-            // intervalConstraintsView
-            // 
-            this.intervalConstraintsView.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.intervalConstraintsView.Location = new System.Drawing.Point(0, 0);
-            this.intervalConstraintsView.Name = "intervalConstraintsView";
-            this.intervalConstraintsView.Size = new System.Drawing.Size(588, 629);
-            this.intervalConstraintsView.TabIndex = 2;
-            this.intervalConstraintsView.TabStop = false;
-            // 
-            // ShapeConstraintsView
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.Controls.Add(this.splitContainer1);
-            this.Name = "ShapeConstraintsView";
-            this.Size = new System.Drawing.Size(888, 629);
-            this.splitContainer1.Panel1.ResumeLayout(false);
-            this.splitContainer1.Panel2.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
-            this.splitContainer1.ResumeLayout(false);
-            this.groupBox1.ResumeLayout(false);
-            this.groupBox1.PerformLayout();
-            this.ResumeLayout(false);
-
-    }
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.GroupBox groupBox1;
-    private System.Windows.Forms.Button parseBtn;
-    private HeuristicLab.Core.Views.CheckedItemListView<ShapeConstraint> intervalConstraintsView;
-    //private System.Windows.Forms.GroupBox intervalConstraintsView;
-    private System.Windows.Forms.TextBox constraintsInput;
-    private Label errorOutput;
-    private Label label1;
-    protected ToolTip toolTip1;
-    }
-}
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/ShapeConstraintsView.cs
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/ShapeConstraintsView.cs	(revision 17893)
+++ 	(revision )
@@ -1,191 +1,0 @@
-﻿#region License Information
-
-/* HeuristicLab
- * Copyright (C) 2002-2019 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.Text;
-using System.Windows.Forms;
-using HeuristicLab.Collections;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-
-namespace HeuristicLab.Problems.DataAnalysis.Views {
-  [View("ShapeConstraints View")]
-  [Content(typeof(ShapeConstraints), true)]
-  public partial class ShapeConstraintsView : AsynchronousContentView {
-    public new ShapeConstraints Content {
-      get => (ShapeConstraints)base.Content;
-      set => base.Content = value;
-    }
-
-    public bool suspendUpdates = false;
-
-    public ShapeConstraintsView() {
-      InitializeComponent();
-      errorOutput.Text = "";
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      this.intervalConstraintsView.Content = Content;
-      UpdateControl();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ItemsAdded += constraints_Added;
-      Content.ItemsRemoved += constraint_Removed;
-      Content.Changed += Content_Changed;
-      Content.CollectionReset += constraints_Reset;
-      Content.ItemsMoved += constraints_Moved;
-      Content.ItemsReplaced += Content_ItemsReplaced;
-      Content.CheckedItemsChanged += Content_CheckedItemsChanged;
-    }
-
-
-    protected override void DeregisterContentEvents() {
-      Content.ItemsAdded -= constraints_Added;
-      Content.ItemsRemoved -= constraint_Removed;
-      Content.Changed -= Content_Changed;
-      Content.CollectionReset -= constraints_Reset;
-      Content.ItemsMoved -= constraints_Moved;
-      Content.ItemsReplaced -= Content_ItemsReplaced;
-      Content.CheckedItemsChanged -= Content_CheckedItemsChanged;
-      base.DeregisterContentEvents();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      constraintsInput.Enabled = Content != null && !Locked && !ReadOnly;
-    }
-
-
-    private void parseBtn_Click(object sender, EventArgs e) {
-      if (constraintsInput.Text != null) {
-        suspendUpdates = true;
-        Content.Clear();
-        try {
-          var parsedConstraints = ShapeConstraintsParser.ParseConstraints(constraintsInput.Text);
-          Content = parsedConstraints;
-          errorOutput.Text = "Constraints successfully parsed.";
-          errorOutput.ForeColor = Color.DarkGreen;
-          //Catch the exception from the constraints parser and show it in the error dialog
-        } catch (ArgumentException ex) {
-          Content.Clear();
-          errorOutput.Text = ex.Message.Replace("Parameter name", "@Line");
-          errorOutput.ForeColor = Color.DarkRed;
-        }
-        suspendUpdates = false;
-        UpdateControl();
-      } else {
-        errorOutput.Text = "No constraints were found!";
-      }
-    }
-
-    private void UpdateControl() {
-      if (suspendUpdates) return;
-      if (Content == null) {
-        constraintsInput.Text = string.Empty;
-      } else {
-        this.intervalConstraintsView.Content = Content;
-        constraintsInput.Text = ToString(Content);
-      }
-    }
-
-    private string ToString(ShapeConstraints constraints) {
-      var sb = new StringBuilder();
-      foreach (var constraint in constraints) {
-        if (!constraints.ItemChecked(constraint)) {
-          sb.Append("# ").AppendLine(constraint.ToString());
-        } else {
-          sb.AppendLine(constraint.ToString());
-        }
-      }
-      return sb.ToString();
-    }
-
-    private void constraint_Changed(object sender, EventArgs e) {
-      UpdateControl();
-    }
-
-    private void constraints_Added(object sender,
-                                     CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
-      foreach (var addedItem in e.Items) addedItem.Value.Changed += constraint_Changed;
-      UpdateControl();
-    }
-
-    private void constraint_Removed(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
-      foreach (var removedItem in e.Items) removedItem.Value.Changed -= constraint_Changed;
-      UpdateControl();
-    }
-
-    private void constraints_Moved(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
-      UpdateControl();
-    }
-
-    private void constraints_Reset(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
-      foreach (var addedItem in e.Items) addedItem.Value.Changed += constraint_Changed;
-      foreach (var removedItem in e.OldItems) removedItem.Value.Changed -= constraint_Changed;
-      UpdateControl();
-    }
-
-    private void Content_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
-      UpdateControl();
-    }
-
-    private void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<ShapeConstraint>> e) {
-      foreach (var addedItem in e.Items) addedItem.Value.Changed += constraint_Changed;
-      foreach (var removedItem in e.OldItems) removedItem.Value.Changed -= constraint_Changed;
-      UpdateControl();
-    }
-
-    private void constraintsInput_TextChanged(object sender, EventArgs e) {
-      errorOutput.Text = "Unparsed changes! Press parse button to save changes.";
-      errorOutput.ForeColor = Color.DarkOrange;
-    }
-
-    private void Content_Changed(object sender, EventArgs e) {
-      UpdateControl();
-    }
-
-    private void label1_DoubleClick(object sender, EventArgs e) {
-      var infoText =
-        "Within the text field you can define different types of shape constraints e.g. range constraints, monotonicity constraints, ..." +
-        System.Environment.NewLine +
-        "To define a model constraint: f in [0 .. 100], f is used for the selected target, the 'in' key word specifies the target in which the constraint should be, the interval is defined between square bracket." +
-        System.Environment.NewLine +
-        "The interval contains two bounds (lower and upper) this bounds are given as double values, to seperate both bounds from each other you can use (.., ;, ' ')" +
-        System.Environment.NewLine +
-        "To define monotonic or concave constraints you need to define the partial derivatives:" +
-        System.Environment.NewLine +
-        "∂f/∂x in [0 .. 1], therefore you have to define the partial fraction first, which can be done by using the \\partial symbol or 'd' followed by the target and the variable in the numerator and denominator respectively, after defining the fraction the interval is defined like in the model constraint." +
-        System.Environment.NewLine +
-        "To define constraints only on a specific range of the function you can define interval ranges" +
-        System.Environment.NewLine +
-        "f in [0 .. 100], x in [0 .. 1] the ranges are separated by commas and follow the same rules as before (giving the variable with the interval definition)" +
-        System.Environment.NewLine + "To specify different weights on the constraints:" +
-        System.Environment.NewLine + "f in [0 .. 100], x in [0 .. 1] weight: 2.0, you can add the keyword 'weight:' followed by a double value.";
-
-      MessageBox.Show(infoText,"How to define shape constraints", MessageBoxButtons.OKCancel);
-    }
-  }
-}
Index: anches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/ShapeConstraintsView.resx
===================================================================
--- /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis.Views/3.4/ShapeConstraintsView.resx	(revision 17893)
+++ 	(revision )
@@ -1,126 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
