Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseItemDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseItemDialog.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Core.Views {
-  partial class ChooseItemDialog {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.okButton = new System.Windows.Forms.Button();
-      this.cancelButton = new System.Windows.Forms.Button();
-      this.typesGroupBox = new System.Windows.Forms.GroupBox();
-      this.treeView = new System.Windows.Forms.TreeView();
-      this.typesGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // okButton
-      // 
-      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.okButton.Location = new System.Drawing.Point(305, 368);
-      this.okButton.Name = "okButton";
-      this.okButton.Size = new System.Drawing.Size(75, 23);
-      this.okButton.TabIndex = 1;
-      this.okButton.Text = "&OK";
-      this.okButton.UseVisualStyleBackColor = true;
-      this.okButton.Click += new System.EventHandler(this.okButton_Click);
-      // 
-      // cancelButton
-      // 
-      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.cancelButton.Location = new System.Drawing.Point(386, 368);
-      this.cancelButton.Name = "cancelButton";
-      this.cancelButton.Size = new System.Drawing.Size(75, 23);
-      this.cancelButton.TabIndex = 2;
-      this.cancelButton.Text = "&Cancel";
-      this.cancelButton.UseVisualStyleBackColor = true;
-      // 
-      // typesGroupBox
-      // 
-      this.typesGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.typesGroupBox.Controls.Add(this.treeView);
-      this.typesGroupBox.Location = new System.Drawing.Point(12, 12);
-      this.typesGroupBox.Name = "typesGroupBox";
-      this.typesGroupBox.Size = new System.Drawing.Size(449, 350);
-      this.typesGroupBox.TabIndex = 0;
-      this.typesGroupBox.TabStop = false;
-      this.typesGroupBox.Text = "&Available Item Types";
-      // 
-      // treeView
-      // 
-      this.treeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.treeView.HideSelection = false;
-      this.treeView.Location = new System.Drawing.Point(3, 16);
-      this.treeView.Name = "treeView";
-      this.treeView.Size = new System.Drawing.Size(443, 331);
-      this.treeView.TabIndex = 0;
-      this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
-      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
-      // 
-      // ChooseItemDialog
-      // 
-      this.AcceptButton = this.okButton;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.CancelButton = this.cancelButton;
-      this.ClientSize = new System.Drawing.Size(473, 403);
-      this.Controls.Add(this.typesGroupBox);
-      this.Controls.Add(this.cancelButton);
-      this.Controls.Add(this.okButton);
-      this.MaximizeBox = false;
-      this.MinimizeBox = false;
-      this.Name = "ChooseItemDialog";
-      this.ShowIcon = false;
-      this.ShowInTaskbar = false;
-      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
-      this.Text = "Choose Item";
-      this.Load += new System.EventHandler(this.ChooseItemDialog_Load);
-      this.typesGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Button okButton;
-    private System.Windows.Forms.Button cancelButton;
-    private System.Windows.Forms.GroupBox typesGroupBox;
-    private System.Windows.Forms.TreeView treeView;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseItemDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseItemDialog.cs	(revision 2654)
+++ 	(revision )
@@ -1,191 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// A dialog to select an item. 
-  /// </summary>
-  public partial class ChooseItemDialog : Form {
-    #region Inner Class TreeNodeSorter
-    private class TreeNodeSorter : IComparer {
-      public int Compare(object x, object y) {
-        TreeNode tx = x as TreeNode;
-        TreeNode ty = y as TreeNode;
-
-        int result = string.Compare(tx.Text, ty.Text);
-        if (result == 0)
-          result = tx.Index.CompareTo(ty.Index);
-        return result;
-      }
-    }
-    #endregion
-
-    /// <summary>
-    /// Gets or sets the caption of the dialog.
-    /// </summary>
-    /// <remarks>Uses property <see cref="Form.Text"/> of base class <see cref="System.Windows.Forms.Form"/>.
-    /// No own data storage present.</remarks>
-    public string Caption {
-      get { return Text; }
-      set { Text = value; }
-    }
-
-    private IItem myItem;
-    /// <summary>
-    /// Gets the selected item.
-    /// </summary>
-    public IItem Item {
-      get { return myItem; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChooseItemDialog"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ChooseItemDialog(System.Type)"/> with the type of <see cref="IItem"/>
-    /// as parameter.</remarks>
-    public ChooseItemDialog()
-      : this(typeof(IItem)) {
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChooseItemDialog"/> with 
-    /// the given <paramref name="itemType"/>.
-    /// </summary>
-    /// <param name="itemType">The type of the items to choose from.</param>
-    public ChooseItemDialog(Type itemType) {
-      InitializeComponent();
-
-      treeView.TreeViewNodeSorter = new TreeNodeSorter();
-
-      if (itemType == null) {
-        itemType = typeof(IItem);
-      }
-
-      DiscoveryService discoveryService = new DiscoveryService();
-      foreach (PluginInfo plugin in discoveryService.Plugins) {
-        TreeNode pluginNode = new TreeNode(plugin.Name);
-        pluginNode.Tag = null;
-
-        Type[] types = discoveryService.GetTypes(itemType, plugin);
-        foreach (Type type in types) {
-          if (!type.IsAbstract) {
-            TreeNode itemNode = new TreeNode();
-            itemNode.Text = type.Name;
-            itemNode.Tag = type;
-            pluginNode.Nodes.Add(itemNode);
-          }
-        }
-        if (pluginNode.Nodes.Count > 0) {
-          treeView.Nodes.Add(pluginNode);
-        }
-      }
-      if (treeView.Nodes.Count == 0) {
-        treeView.Enabled = false;
-        treeView.Nodes.Add(new TreeNode("No item types available"));
-      }
-      okButton.Enabled = false;
-
-      if (treeView.Nodes.Count == 1) {
-        TreeNodeCollection items = treeView.Nodes[0].Nodes;
-        treeView.Nodes.Clear();
-        foreach (TreeNode i in items) {
-          treeView.Nodes.Add(i);
-        }
-      }
-    }
-
-    private void okButton_Click(object sender, EventArgs e) {
-      Type type = (Type)treeView.SelectedNode.Tag;
-
-      if (type.ContainsGenericParameters) {
-        type = type.GetGenericTypeDefinition();
-        Type[] args = new Type[type.GetGenericArguments().Length];
-        ChooseTypeDialog dialog = new ChooseTypeDialog();
-        for (int i = 0; i < args.Length; i++) {
-          dialog.Caption = "Choose type of generic parameter " + (i + 1).ToString();
-          if (dialog.ShowDialog(this) == DialogResult.OK)
-            args[i] = dialog.Type;
-          else
-            args[i] = null;
-        }
-        dialog.Dispose();
-        type = type.MakeGenericType(args);
-      }
-
-      myItem = (IItem)Activator.CreateInstance(type);
-      this.DialogResult = DialogResult.OK;
-      this.Close();
-    }
-
-    private void treeView_DoubleClick(object sender, EventArgs e) {
-      // plugin groups have a null-tag
-      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null)) {
-        Type type = (Type)treeView.SelectedNode.Tag;
-
-        if (type.ContainsGenericParameters) {
-          type = type.GetGenericTypeDefinition();
-          Type[] args = new Type[type.GetGenericArguments().Length];
-          ChooseTypeDialog dialog = new ChooseTypeDialog();
-          for (int i = 0; i < args.Length; i++) {
-            dialog.Caption = "Choose type of generic parameter " + (i + 1).ToString();
-            if (dialog.ShowDialog(this) == DialogResult.OK)
-              args[i] = dialog.Type;
-            else
-              args[i] = null;
-          }
-          dialog.Dispose();
-          type = type.MakeGenericType(args);
-        }
-
-        myItem = (IItem)Activator.CreateInstance(type);
-        this.DialogResult = DialogResult.OK;
-        this.Close();
-      }
-    }
-
-    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      okButton.Enabled = false;
-      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null))
-        okButton.Enabled = true;
-    }
-
-    private void ChooseItemDialog_Load(object sender, EventArgs e) {
-      myItem = null;
-      if (treeView.Nodes.Count == 1) {
-        Type type = (Type)treeView.Nodes[0].Tag;
-        if (!type.ContainsGenericParameters) {
-          myItem = (IItem)Activator.CreateInstance(type);
-          this.DialogResult = DialogResult.OK;
-          this.Close();
-        }
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseItemDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseItemDialog.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseOperatorDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseOperatorDialog.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,342 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Core.Views {
-  partial class ChooseOperatorDialog {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.okButton = new System.Windows.Forms.Button();
-      this.cancelButton = new System.Windows.Forms.Button();
-      this.builtinOperatorsGroupBox = new System.Windows.Forms.GroupBox();
-      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
-      this.builtinOperatorsTreeView = new System.Windows.Forms.TreeView();
-      this.builtinOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.operatorLibrariesTabPage = new System.Windows.Forms.TabPage();
-      this.operatorLibraryTextBox = new System.Windows.Forms.TextBox();
-      this.operatorLibraryLabel = new System.Windows.Forms.Label();
-      this.operatorLibraryOperatorsGroupBox = new System.Windows.Forms.GroupBox();
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.operatorLibraryOperatorsTreeView = new System.Windows.Forms.TreeView();
-      this.operatorLibraryOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
-      this.loadButton = new System.Windows.Forms.Button();
-      this.builtinTabPage = new System.Windows.Forms.TabPage();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      this.builtinOperatorsGroupBox.SuspendLayout();
-      this.splitContainer2.Panel1.SuspendLayout();
-      this.splitContainer2.Panel2.SuspendLayout();
-      this.splitContainer2.SuspendLayout();
-      this.tabControl.SuspendLayout();
-      this.operatorLibrariesTabPage.SuspendLayout();
-      this.operatorLibraryOperatorsGroupBox.SuspendLayout();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.builtinTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // okButton
-      // 
-      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.okButton.Enabled = false;
-      this.okButton.Location = new System.Drawing.Point(305, 368);
-      this.okButton.Name = "okButton";
-      this.okButton.Size = new System.Drawing.Size(75, 23);
-      this.okButton.TabIndex = 1;
-      this.okButton.Text = "&OK";
-      this.okButton.UseVisualStyleBackColor = true;
-      this.okButton.Click += new System.EventHandler(this.okButton_Click);
-      // 
-      // cancelButton
-      // 
-      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.cancelButton.Location = new System.Drawing.Point(386, 368);
-      this.cancelButton.Name = "cancelButton";
-      this.cancelButton.Size = new System.Drawing.Size(75, 23);
-      this.cancelButton.TabIndex = 2;
-      this.cancelButton.Text = "&Cancel";
-      this.cancelButton.UseVisualStyleBackColor = true;
-      // 
-      // builtinOperatorsGroupBox
-      // 
-      this.builtinOperatorsGroupBox.Controls.Add(this.splitContainer2);
-      this.builtinOperatorsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.builtinOperatorsGroupBox.Location = new System.Drawing.Point(3, 3);
-      this.builtinOperatorsGroupBox.Name = "builtinOperatorsGroupBox";
-      this.builtinOperatorsGroupBox.Size = new System.Drawing.Size(435, 318);
-      this.builtinOperatorsGroupBox.TabIndex = 0;
-      this.builtinOperatorsGroupBox.TabStop = false;
-      this.builtinOperatorsGroupBox.Text = "&Available Operators";
-      // 
-      // splitContainer2
-      // 
-      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.splitContainer2.Location = new System.Drawing.Point(3, 16);
-      this.splitContainer2.Name = "splitContainer2";
-      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
-      // 
-      // splitContainer2.Panel1
-      // 
-      this.splitContainer2.Panel1.Controls.Add(this.builtinOperatorsTreeView);
-      // 
-      // splitContainer2.Panel2
-      // 
-      this.splitContainer2.Panel2.Controls.Add(this.builtinOperatorsDescriptionTextBox);
-      this.splitContainer2.Size = new System.Drawing.Size(429, 299);
-      this.splitContainer2.SplitterDistance = 220;
-      this.splitContainer2.TabIndex = 2;
-      // 
-      // builtinOperatorsTreeView
-      // 
-      this.builtinOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.builtinOperatorsTreeView.HideSelection = false;
-      this.builtinOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
-      this.builtinOperatorsTreeView.Name = "builtinOperatorsTreeView";
-      this.builtinOperatorsTreeView.Size = new System.Drawing.Size(429, 220);
-      this.builtinOperatorsTreeView.TabIndex = 0;
-      this.builtinOperatorsTreeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
-      this.builtinOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.builtinOperatorsTreeView_AfterSelect);
-      // 
-      // builtinOperatorsDescriptionTextBox
-      // 
-      this.builtinOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.builtinOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.builtinOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
-      this.builtinOperatorsDescriptionTextBox.Multiline = true;
-      this.builtinOperatorsDescriptionTextBox.Name = "builtinOperatorsDescriptionTextBox";
-      this.builtinOperatorsDescriptionTextBox.ReadOnly = true;
-      this.builtinOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.builtinOperatorsDescriptionTextBox.Size = new System.Drawing.Size(429, 75);
-      this.builtinOperatorsDescriptionTextBox.TabIndex = 0;
-      // 
-      // tabControl
-      // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.operatorLibrariesTabPage);
-      this.tabControl.Controls.Add(this.builtinTabPage);
-      this.tabControl.Location = new System.Drawing.Point(12, 12);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(449, 350);
-      this.tabControl.TabIndex = 0;
-      // 
-      // operatorLibrariesTabPage
-      // 
-      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryTextBox);
-      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryLabel);
-      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryOperatorsGroupBox);
-      this.operatorLibrariesTabPage.Controls.Add(this.loadButton);
-      this.operatorLibrariesTabPage.Location = new System.Drawing.Point(4, 22);
-      this.operatorLibrariesTabPage.Name = "operatorLibrariesTabPage";
-      this.operatorLibrariesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.operatorLibrariesTabPage.Size = new System.Drawing.Size(441, 324);
-      this.operatorLibrariesTabPage.TabIndex = 0;
-      this.operatorLibrariesTabPage.Text = "Operator Libraries";
-      this.operatorLibrariesTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorLibraryTextBox
-      // 
-      this.operatorLibraryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.operatorLibraryTextBox.Location = new System.Drawing.Point(97, 8);
-      this.operatorLibraryTextBox.Name = "operatorLibraryTextBox";
-      this.operatorLibraryTextBox.ReadOnly = true;
-      this.operatorLibraryTextBox.Size = new System.Drawing.Size(257, 20);
-      this.operatorLibraryTextBox.TabIndex = 2;
-      // 
-      // operatorLibraryLabel
-      // 
-      this.operatorLibraryLabel.AutoSize = true;
-      this.operatorLibraryLabel.Location = new System.Drawing.Point(6, 11);
-      this.operatorLibraryLabel.Name = "operatorLibraryLabel";
-      this.operatorLibraryLabel.Size = new System.Drawing.Size(85, 13);
-      this.operatorLibraryLabel.TabIndex = 1;
-      this.operatorLibraryLabel.Text = "&Operator Library:";
-      // 
-      // operatorLibraryOperatorsGroupBox
-      // 
-      this.operatorLibraryOperatorsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.operatorLibraryOperatorsGroupBox.Controls.Add(this.splitContainer1);
-      this.operatorLibraryOperatorsGroupBox.Enabled = false;
-      this.operatorLibraryOperatorsGroupBox.Location = new System.Drawing.Point(6, 35);
-      this.operatorLibraryOperatorsGroupBox.Name = "operatorLibraryOperatorsGroupBox";
-      this.operatorLibraryOperatorsGroupBox.Size = new System.Drawing.Size(429, 283);
-      this.operatorLibraryOperatorsGroupBox.TabIndex = 3;
-      this.operatorLibraryOperatorsGroupBox.TabStop = false;
-      this.operatorLibraryOperatorsGroupBox.Text = "&Available Operators";
-      // 
-      // splitContainer1
-      // 
-      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.splitContainer1.Location = new System.Drawing.Point(3, 16);
-      this.splitContainer1.Name = "splitContainer1";
-      this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
-      // 
-      // splitContainer1.Panel1
-      // 
-      this.splitContainer1.Panel1.Controls.Add(this.operatorLibraryOperatorsTreeView);
-      // 
-      // splitContainer1.Panel2
-      // 
-      this.splitContainer1.Panel2.Controls.Add(this.operatorLibraryOperatorsDescriptionTextBox);
-      this.splitContainer1.Size = new System.Drawing.Size(423, 264);
-      this.splitContainer1.SplitterDistance = 187;
-      this.splitContainer1.TabIndex = 1;
-      // 
-      // operatorLibraryOperatorsTreeView
-      // 
-      this.operatorLibraryOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorLibraryOperatorsTreeView.HideSelection = false;
-      this.operatorLibraryOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
-      this.operatorLibraryOperatorsTreeView.Name = "operatorLibraryOperatorsTreeView";
-      this.operatorLibraryOperatorsTreeView.ShowNodeToolTips = true;
-      this.operatorLibraryOperatorsTreeView.Size = new System.Drawing.Size(423, 187);
-      this.operatorLibraryOperatorsTreeView.TabIndex = 0;
-      this.operatorLibraryOperatorsTreeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
-      this.operatorLibraryOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
-      // 
-      // operatorLibraryOperatorsDescriptionTextBox
-      // 
-      this.operatorLibraryOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorLibraryOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.operatorLibraryOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
-      this.operatorLibraryOperatorsDescriptionTextBox.Multiline = true;
-      this.operatorLibraryOperatorsDescriptionTextBox.Name = "operatorLibraryOperatorsDescriptionTextBox";
-      this.operatorLibraryOperatorsDescriptionTextBox.ReadOnly = true;
-      this.operatorLibraryOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.operatorLibraryOperatorsDescriptionTextBox.Size = new System.Drawing.Size(423, 73);
-      this.operatorLibraryOperatorsDescriptionTextBox.TabIndex = 0;
-      // 
-      // loadButton
-      // 
-      this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.loadButton.Location = new System.Drawing.Point(360, 6);
-      this.loadButton.Name = "loadButton";
-      this.loadButton.Size = new System.Drawing.Size(75, 23);
-      this.loadButton.TabIndex = 0;
-      this.loadButton.Text = "&Load...";
-      this.loadButton.UseVisualStyleBackColor = true;
-      this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
-      // 
-      // builtinTabPage
-      // 
-      this.builtinTabPage.Controls.Add(this.builtinOperatorsGroupBox);
-      this.builtinTabPage.Location = new System.Drawing.Point(4, 22);
-      this.builtinTabPage.Name = "builtinTabPage";
-      this.builtinTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.builtinTabPage.Size = new System.Drawing.Size(441, 324);
-      this.builtinTabPage.TabIndex = 1;
-      this.builtinTabPage.Text = "Built-In";
-      this.builtinTabPage.UseVisualStyleBackColor = true;
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "library";
-      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
-      this.openFileDialog.Title = "Open file ...";
-      // 
-      // ChooseOperatorDialog
-      // 
-      this.AcceptButton = this.okButton;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.CancelButton = this.cancelButton;
-      this.ClientSize = new System.Drawing.Size(473, 403);
-      this.Controls.Add(this.tabControl);
-      this.Controls.Add(this.cancelButton);
-      this.Controls.Add(this.okButton);
-      this.MaximizeBox = false;
-      this.MinimizeBox = false;
-      this.Name = "ChooseOperatorDialog";
-      this.ShowIcon = false;
-      this.ShowInTaskbar = false;
-      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
-      this.Text = "Choose Operator";
-      this.Shown += new System.EventHandler(this.ChooseOperatorDialog_Shown);
-      this.builtinOperatorsGroupBox.ResumeLayout(false);
-      this.splitContainer2.Panel1.ResumeLayout(false);
-      this.splitContainer2.Panel2.ResumeLayout(false);
-      this.splitContainer2.Panel2.PerformLayout();
-      this.splitContainer2.ResumeLayout(false);
-      this.tabControl.ResumeLayout(false);
-      this.operatorLibrariesTabPage.ResumeLayout(false);
-      this.operatorLibrariesTabPage.PerformLayout();
-      this.operatorLibraryOperatorsGroupBox.ResumeLayout(false);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      this.splitContainer1.Panel2.PerformLayout();
-      this.splitContainer1.ResumeLayout(false);
-      this.builtinTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Button okButton;
-    private System.Windows.Forms.Button cancelButton;
-    private System.Windows.Forms.GroupBox builtinOperatorsGroupBox;
-    private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage operatorLibrariesTabPage;
-    private System.Windows.Forms.TabPage builtinTabPage;
-    private System.Windows.Forms.TextBox operatorLibraryTextBox;
-    private System.Windows.Forms.Label operatorLibraryLabel;
-    private System.Windows.Forms.GroupBox operatorLibraryOperatorsGroupBox;
-    private System.Windows.Forms.TreeView operatorLibraryOperatorsTreeView;
-    private System.Windows.Forms.Button loadButton;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.ToolTip toolTip;
-    private System.Windows.Forms.TreeView builtinOperatorsTreeView;
-    private System.Windows.Forms.SplitContainer splitContainer2;
-    private System.Windows.Forms.TextBox builtinOperatorsDescriptionTextBox;
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.TextBox operatorLibraryOperatorsDescriptionTextBox;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseOperatorDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseOperatorDialog.cs	(revision 2654)
+++ 	(revision )
@@ -1,185 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// A dialog to select an operator out of a library.
-  /// </summary>
-  public partial class ChooseOperatorDialog : Form {
-    #region Inner Class TreeNodeSorter
-    private class TreeNodeSorter : IComparer {
-      public int Compare(object x, object y) {
-        TreeNode tx = x as TreeNode;
-        TreeNode ty = y as TreeNode;
-
-        int result = string.Compare(tx.Text, ty.Text);
-        if (result == 0)
-          result = tx.Index.CompareTo(ty.Index);
-        return result;
-      }
-    }
-    #endregion
-
-    private IOperatorLibrary operatorLibrary;
-
-    private IOperator myOperator;
-    /// <summary>
-    /// Gets the selected operator.
-    /// </summary>
-    public IOperator Operator {
-      get { return myOperator; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChooseOperatorDialog"/>.
-    /// </summary>
-    public ChooseOperatorDialog() {
-      InitializeComponent();
-      operatorLibrary = null;
-      myOperator = null;
-      TreeNodeSorter nodeSorter = new TreeNodeSorter();
-      operatorLibraryOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
-      builtinOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
-
-      DiscoveryService discoveryService = new DiscoveryService();
-      PluginInfo[] plugins = discoveryService.Plugins;
-      foreach(PluginInfo plugin in plugins) {
-        TreeNode pluginItem = new TreeNode();
-        pluginItem.Text = plugin.Name;
-        pluginItem.Tag = plugin;
-
-        Type[] operators = discoveryService.GetTypes(typeof(IOperator), plugin);
-        foreach(Type type in operators) {
-          if(!type.IsAbstract) {
-            TreeNode operatorItem = new TreeNode();
-            operatorItem.Text = type.Name;
-            operatorItem.Tag = type;
-            pluginItem.Nodes.Add(operatorItem);
-          }
-        }
-        // add plugin node only if it contains operators
-        if(pluginItem.Nodes.Count > 0) {
-          builtinOperatorsTreeView.Nodes.Add(pluginItem);
-        }
-      }
-      if (builtinOperatorsTreeView.Nodes.Count == 0) {
-        builtinOperatorsTreeView.Enabled = false;
-        builtinOperatorsTreeView.Nodes.Add("No operators available");
-      }
-      builtinOperatorsTreeView.Sort();
-    }
-
-    private void UpdateOperatorsTreeView() {
-      operatorLibraryOperatorsTreeView.Nodes.Clear();
-      operatorLibraryOperatorsTreeView.Nodes.Add(CreateTreeNode(operatorLibrary.Group));
-      operatorLibraryOperatorsTreeView.Sort();
-    }
-
-    private TreeNode CreateTreeNode(IOperatorGroup group) {
-      TreeNode node = new TreeNode();
-      node.Text = group.Name;
-      node.ForeColor = Color.LightGray;
-      node.Tag = group;
-
-      foreach (IOperator op in group.Operators)
-        node.Nodes.Add(CreateTreeNode(op));
-      foreach (IOperatorGroup subGroup in group.SubGroups)
-        node.Nodes.Add(CreateTreeNode(subGroup));
-      return node;
-    }
-    private TreeNode CreateTreeNode(IOperator op) {
-      TreeNode node = new TreeNode();
-      node.Text = op.Name;
-      node.ToolTipText = op.GetType().Name;
-      node.Tag = op;
-      return node;
-    }
-
-    #region Form Events
-    private void ChooseOperatorDialog_Shown(object sender, EventArgs e) {
-      operatorLibraryOperatorsTreeView.SelectedNode = null;
-      operatorLibraryOperatorsDescriptionTextBox.Text = "";
-      myOperator = null;
-      builtinOperatorsTreeView.SelectedNode = null;
-      builtinOperatorsDescriptionTextBox.Text = "";
-      okButton.Enabled = false;
-    }
-    #endregion
-
-    #region Selection Events
-    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      okButton.Enabled = false;
-      myOperator = null;
-      operatorLibraryOperatorsDescriptionTextBox.Text = "";
-      if ((operatorLibraryOperatorsTreeView.SelectedNode != null) && (operatorLibraryOperatorsTreeView.SelectedNode.Tag is IOperator)) {
-        myOperator = (IOperator)operatorLibraryOperatorsTreeView.SelectedNode.Tag;
-        myOperator = (IOperator)myOperator.Clone();
-        operatorLibraryOperatorsDescriptionTextBox.Text = myOperator.Description;
-        okButton.Enabled = true;
-      }
-    }
-    private void builtinOperatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      okButton.Enabled = false;
-      myOperator = null;
-      builtinOperatorsDescriptionTextBox.Text = "";
-      if ((builtinOperatorsTreeView.SelectedNode != null) && (builtinOperatorsTreeView.SelectedNode.Tag is Type)) {
-        okButton.Enabled = true;
-        myOperator = (IOperator)Activator.CreateInstance((Type)builtinOperatorsTreeView.SelectedNode.Tag);
-        builtinOperatorsDescriptionTextBox.Text = myOperator.Description;
-      }
-    }
-    #endregion
-
-    #region Click Events
-    private void loadButton_Click(object sender, EventArgs e) {
-      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        operatorLibrary = (IOperatorLibrary)PersistenceManager.Load(openFileDialog.FileName);
-        operatorLibraryTextBox.Text = openFileDialog.FileName;
-        toolTip.SetToolTip(operatorLibraryTextBox, openFileDialog.FileName);
-        operatorLibraryOperatorsGroupBox.Enabled = true;
-        UpdateOperatorsTreeView();
-      }
-    }
-    private void okButton_Click(object sender, EventArgs e) {
-      if (Operator != null) {
-        this.DialogResult = DialogResult.OK;
-        this.Close();
-      }
-    }
-    private void treeView_DoubleClick(object sender, EventArgs e) {
-      if (Operator != null) {
-        this.DialogResult = DialogResult.OK;
-        this.Close();
-      }
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseOperatorDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseOperatorDialog.resx	(revision 2654)
+++ 	(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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>141, 17</value>
-  </metadata>
-</root>
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseTypeDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseTypeDialog.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Core.Views {
-  partial class ChooseTypeDialog {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.okButton = new System.Windows.Forms.Button();
-      this.cancelButton = new System.Windows.Forms.Button();
-      this.typesGroupBox = new System.Windows.Forms.GroupBox();
-      this.treeView = new System.Windows.Forms.TreeView();
-      this.typesGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // okButton
-      // 
-      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.okButton.Location = new System.Drawing.Point(305, 368);
-      this.okButton.Name = "okButton";
-      this.okButton.Size = new System.Drawing.Size(75, 23);
-      this.okButton.TabIndex = 1;
-      this.okButton.Text = "&OK";
-      this.okButton.UseVisualStyleBackColor = true;
-      this.okButton.Click += new System.EventHandler(this.okButton_Click);
-      // 
-      // cancelButton
-      // 
-      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.cancelButton.Location = new System.Drawing.Point(386, 368);
-      this.cancelButton.Name = "cancelButton";
-      this.cancelButton.Size = new System.Drawing.Size(75, 23);
-      this.cancelButton.TabIndex = 2;
-      this.cancelButton.Text = "&Cancel";
-      this.cancelButton.UseVisualStyleBackColor = true;
-      // 
-      // typesGroupBox
-      // 
-      this.typesGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.typesGroupBox.Controls.Add(this.treeView);
-      this.typesGroupBox.Location = new System.Drawing.Point(12, 12);
-      this.typesGroupBox.Name = "typesGroupBox";
-      this.typesGroupBox.Size = new System.Drawing.Size(449, 350);
-      this.typesGroupBox.TabIndex = 0;
-      this.typesGroupBox.TabStop = false;
-      this.typesGroupBox.Text = "&Available Types";
-      // 
-      // treeView
-      // 
-      this.treeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.treeView.HideSelection = false;
-      this.treeView.Location = new System.Drawing.Point(3, 16);
-      this.treeView.Name = "treeView";
-      this.treeView.Size = new System.Drawing.Size(443, 331);
-      this.treeView.TabIndex = 0;
-      this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
-      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
-      // 
-      // ChooseTypeDialog
-      // 
-      this.AcceptButton = this.okButton;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.CancelButton = this.cancelButton;
-      this.ClientSize = new System.Drawing.Size(473, 403);
-      this.Controls.Add(this.typesGroupBox);
-      this.Controls.Add(this.cancelButton);
-      this.Controls.Add(this.okButton);
-      this.MaximizeBox = false;
-      this.MinimizeBox = false;
-      this.Name = "ChooseTypeDialog";
-      this.ShowIcon = false;
-      this.ShowInTaskbar = false;
-      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
-      this.Text = "Choose Type";
-      this.Load += new System.EventHandler(this.ChooseTypeDialog_Load);
-      this.typesGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Button okButton;
-    private System.Windows.Forms.Button cancelButton;
-    private System.Windows.Forms.GroupBox typesGroupBox;
-    private System.Windows.Forms.TreeView treeView;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseTypeDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseTypeDialog.cs	(revision 2654)
+++ 	(revision )
@@ -1,153 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// A dialog to select a specific type.
-  /// </summary>
-  public partial class ChooseTypeDialog : Form {
-    #region Inner Class TreeNodeSorter
-    private class TreeNodeSorter : IComparer {
-      public int Compare(object x, object y) {
-        TreeNode tx = x as TreeNode;
-        TreeNode ty = y as TreeNode;
-
-        int result = string.Compare(tx.Text, ty.Text);
-        if (result == 0)
-          result = tx.Index.CompareTo(ty.Index);
-        return result;
-      }
-    }
-    #endregion
-
-    /// <summary>
-    /// Gets or sets the caption of the dialog.
-    /// </summary>
-    /// <remarks>Uses property <see cref="Form.Text"/> of base class <see cref="Form"/>.
-    /// No own data storage present.</remarks>
-    public string Caption {
-      get { return Text; }
-      set { Text = value; }
-    }
-
-    private Type myType;
-    /// <summary>
-    /// Gets the selected type.
-    /// </summary>
-    public Type Type {
-      get { return myType; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChooseTypeDialog"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ChooseTypeDialog(Type)"/> with the type of <see cref="IItem"/> as
-    /// parameter.</remarks>
-    public ChooseTypeDialog()
-      : this(typeof(IItem)) {
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChooseTypeDialog"/> with the given 
-    /// <paramref name="baseType"/>.
-    /// </summary>
-    /// <param name="baseType">The base type of all chooseable types.</param>
-    public ChooseTypeDialog(Type baseType) {
-      InitializeComponent();
-
-      treeView.TreeViewNodeSorter = new TreeNodeSorter();
-
-      if (baseType == null) {
-        baseType = typeof(IItem);
-      }
-
-      DiscoveryService discoveryService = new DiscoveryService();
-      foreach (PluginInfo plugin in discoveryService.Plugins) {
-        TreeNode pluginNode = new TreeNode(plugin.Name);
-        pluginNode.Tag = null;
-
-        Type[] types = discoveryService.GetTypes(baseType, plugin);
-        foreach (Type type in types) {
-          TreeNode itemNode = new TreeNode();
-          itemNode.Text = type.Name;
-          itemNode.Tag = type;
-          pluginNode.Nodes.Add(itemNode);
-        }
-        if (pluginNode.Nodes.Count > 0) {
-          treeView.Nodes.Add(pluginNode);
-        }
-      }
-      if (treeView.Nodes.Count == 0) {
-        treeView.Enabled = false;
-        treeView.Nodes.Add(new TreeNode("No item types available"));
-      }
-      okButton.Enabled = false;
-
-      if (treeView.Nodes.Count == 1) {
-        TreeNodeCollection items = treeView.Nodes[0].Nodes;
-        treeView.Nodes.Clear();
-        foreach (TreeNode i in items) {
-          treeView.Nodes.Add(i);
-        }
-      }
-    }
-
-    private void okButton_Click(object sender, EventArgs e) {
-      myType = (Type)treeView.SelectedNode.Tag;
-      this.DialogResult = DialogResult.OK;
-      this.Close();
-    }
-
-    private void treeView_DoubleClick(object sender, EventArgs e) {
-      // plugin groups have a null-tag
-      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null)) {
-        myType = (Type)treeView.SelectedNode.Tag;
-        this.DialogResult = DialogResult.OK;
-        this.Close();
-      }
-    }
-
-    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      okButton.Enabled = false;
-      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null))
-        okButton.Enabled = true;
-    }
-
-    private void ChooseTypeDialog_Load(object sender, EventArgs e) {
-      myType = null;
-      if (treeView.Nodes.Count == 1) {
-        myType = (Type)treeView.Nodes[0].Tag;
-        this.DialogResult = DialogResult.OK;
-        this.Close();
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ChooseTypeDialog.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ChooseTypeDialog.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/CreateParameterDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/CreateParameterDialog.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/CreateParameterDialog.Designer.cs	(revision 2655)
@@ -0,0 +1,215 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class CreateParameterDialog {
+    /// <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) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.okButton = new System.Windows.Forms.Button();
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.setDataTypeButton = new System.Windows.Forms.Button();
+      this.parameterTypeSelector = new HeuristicLab.Core.Views.TypeSelector();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.SuspendLayout();
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(455, 450);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 9;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(374, 450);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 8;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(12, 289);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 1;
+      this.nameLabel.Text = "&Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(81, 286);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(449, 20);
+      this.nameTextBox.TabIndex = 2;
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(12, 315);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 3;
+      this.descriptionLabel.Text = "&Description:";
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(81, 312);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(449, 103);
+      this.descriptionTextBox.TabIndex = 4;
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(12, 426);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 5;
+      this.dataTypeLabel.Text = "Data &Type:";
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Enabled = false;
+      this.dataTypeTextBox.Location = new System.Drawing.Point(81, 423);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(420, 20);
+      this.dataTypeTextBox.TabIndex = 6;
+      // 
+      // setDataTypeButton
+      // 
+      this.setDataTypeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.setDataTypeButton.Enabled = false;
+      this.setDataTypeButton.Location = new System.Drawing.Point(507, 421);
+      this.setDataTypeButton.Name = "setDataTypeButton";
+      this.setDataTypeButton.Size = new System.Drawing.Size(23, 23);
+      this.setDataTypeButton.TabIndex = 7;
+      this.toolTip.SetToolTip(this.setDataTypeButton, "Set Data Type");
+      this.setDataTypeButton.UseVisualStyleBackColor = true;
+      this.setDataTypeButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setDataTypeButton.Click += new System.EventHandler(this.setDataTypeButton_Click);
+      // 
+      // parameterTypeSelector
+      // 
+      this.parameterTypeSelector.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.parameterTypeSelector.Caption = "Available &Parameters";
+      this.parameterTypeSelector.Location = new System.Drawing.Point(12, 12);
+      this.parameterTypeSelector.Name = "parameterTypeSelector";
+      this.parameterTypeSelector.Size = new System.Drawing.Size(518, 268);
+      this.parameterTypeSelector.TabIndex = 0;
+      this.parameterTypeSelector.SelectedTypeChanged += new System.EventHandler(this.parameterTypeSelector_SelectedTypeChanged);
+      // 
+      // CreateParameterDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(542, 485);
+      this.Controls.Add(this.setDataTypeButton);
+      this.Controls.Add(this.parameterTypeSelector);
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.descriptionLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "CreateParameterDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Create Parameter";
+      this.Load += new System.EventHandler(this.CreateParameterDialog_Load);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Label descriptionLabel;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private TypeSelector parameterTypeSelector;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.TextBox dataTypeTextBox;
+    private System.Windows.Forms.Button setDataTypeButton;
+    private System.Windows.Forms.ToolTip toolTip;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/CreateParameterDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/CreateParameterDialog.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/CreateParameterDialog.cs	(revision 2655)
@@ -0,0 +1,95 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Core.Views {
+  public partial class CreateParameterDialog : Form {
+    TypeSelectorDialog typeSelectorDialog;
+
+    public IParameter Parameter {
+      get {
+        try {
+          Type type = parameterTypeSelector.SelectedType;
+          if (type.ContainsGenericParameters) {
+            type = type.MakeGenericType((Type)dataTypeTextBox.Tag);
+          }
+          return (IParameter)Activator.CreateInstance(type, nameTextBox.Text, descriptionTextBox.Text);
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+        return null;
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AddVariableInfoDialog"/>.
+    /// </summary>
+    public CreateParameterDialog() {
+      InitializeComponent();
+    }
+
+    private void setDataTypeButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Data Type";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IItem), true, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        dataTypeTextBox.Text = typeSelectorDialog.TypeSelector.SelectedType.FullName;
+        dataTypeTextBox.Tag = typeSelectorDialog.TypeSelector.SelectedType;
+      }
+      okButton.Enabled = dataTypeTextBox.Tag != null;
+    }
+
+    private void CreateParameterDialog_Load(object sender, EventArgs e) {
+      parameterTypeSelector.Configure(typeof(IParameter), false, true);
+    }
+
+    private void parameterTypeSelector_SelectedTypeChanged(object sender, EventArgs e) {
+      dataTypeTextBox.Text = "-";
+      dataTypeTextBox.Tag = null;
+      dataTypeTextBox.Enabled = false;
+      setDataTypeButton.Enabled = false;
+      okButton.Enabled = false;
+
+      if (parameterTypeSelector.SelectedType != null) {
+        if (parameterTypeSelector.SelectedType.ContainsGenericParameters) {
+          dataTypeTextBox.Enabled = true;
+          setDataTypeButton.Enabled = true;
+        } else {
+          okButton.Enabled = true;
+        }
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.Designer.cs	(revision 2655)
@@ -32,6 +32,6 @@
     /// <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();
+      if (disposing) {
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
@@ -45,19 +45,17 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.executionTimeTextBox = new System.Windows.Forms.TextBox();
       this.executionTimeLabel = new System.Windows.Forms.Label();
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.operatorGraphGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
       this.operatorGraphView = new HeuristicLab.Core.Views.OperatorGraphView();
-      this.globalScopeGroupBox = new System.Windows.Forms.GroupBox();
       this.scopeView = new HeuristicLab.Core.Views.ScopeView();
       this.resetButton = new System.Windows.Forms.Button();
-      this.abortButton = new System.Windows.Forms.Button();
-      this.executeButton = new System.Windows.Forms.Button();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.operatorGraphGroupBox.SuspendLayout();
-      this.globalScopeGroupBox.SuspendLayout();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.startButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -65,9 +63,9 @@
       // 
       this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.executionTimeTextBox.Location = new System.Drawing.Point(499, 460);
+      this.executionTimeTextBox.Location = new System.Drawing.Point(661, 620);
       this.executionTimeTextBox.Name = "executionTimeTextBox";
       this.executionTimeTextBox.ReadOnly = true;
       this.executionTimeTextBox.Size = new System.Drawing.Size(141, 20);
-      this.executionTimeTextBox.TabIndex = 5;
+      this.executionTimeTextBox.TabIndex = 4;
       // 
       // executionTimeLabel
@@ -75,39 +73,28 @@
       this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
       this.executionTimeLabel.AutoSize = true;
-      this.executionTimeLabel.Location = new System.Drawing.Point(496, 444);
+      this.executionTimeLabel.Location = new System.Drawing.Point(572, 623);
       this.executionTimeLabel.Name = "executionTimeLabel";
       this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
-      this.executionTimeLabel.TabIndex = 4;
+      this.executionTimeLabel.TabIndex = 3;
       this.executionTimeLabel.Text = "&Execution Time:";
       // 
-      // splitContainer1
+      // splitContainer
       // 
-      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
       // 
-      // splitContainer1.Panel1
+      // splitContainer.Panel1
       // 
-      this.splitContainer1.Panel1.Controls.Add(this.operatorGraphGroupBox);
+      this.splitContainer.Panel1.Controls.Add(this.operatorGraphView);
       // 
-      // splitContainer1.Panel2
+      // splitContainer.Panel2
       // 
-      this.splitContainer1.Panel2.Controls.Add(this.globalScopeGroupBox);
-      this.splitContainer1.Size = new System.Drawing.Size(640, 441);
-      this.splitContainer1.SplitterDistance = 320;
-      this.splitContainer1.TabIndex = 0;
-      // 
-      // operatorGraphGroupBox
-      // 
-      this.operatorGraphGroupBox.Controls.Add(this.operatorGraphView);
-      this.operatorGraphGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorGraphGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.operatorGraphGroupBox.Name = "operatorGraphGroupBox";
-      this.operatorGraphGroupBox.Size = new System.Drawing.Size(320, 441);
-      this.operatorGraphGroupBox.TabIndex = 0;
-      this.operatorGraphGroupBox.TabStop = false;
-      this.operatorGraphGroupBox.Text = "Operator &Graph";
+      this.splitContainer.Panel2.Controls.Add(this.scopeView);
+      this.splitContainer.Size = new System.Drawing.Size(802, 611);
+      this.splitContainer.SplitterDistance = 401;
+      this.splitContainer.TabIndex = 0;
       // 
       // operatorGraphView
@@ -115,20 +102,10 @@
       this.operatorGraphView.Caption = "Operator Graph";
       this.operatorGraphView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorGraphView.Location = new System.Drawing.Point(3, 16);
+      this.operatorGraphView.Item = null;
+      this.operatorGraphView.Location = new System.Drawing.Point(0, 0);
       this.operatorGraphView.Name = "operatorGraphView";
       this.operatorGraphView.OperatorGraph = null;
-      this.operatorGraphView.Size = new System.Drawing.Size(314, 422);
+      this.operatorGraphView.Size = new System.Drawing.Size(401, 611);
       this.operatorGraphView.TabIndex = 0;
-      // 
-      // globalScopeGroupBox
-      // 
-      this.globalScopeGroupBox.Controls.Add(this.scopeView);
-      this.globalScopeGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.globalScopeGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.globalScopeGroupBox.Name = "globalScopeGroupBox";
-      this.globalScopeGroupBox.Size = new System.Drawing.Size(316, 441);
-      this.globalScopeGroupBox.TabIndex = 0;
-      this.globalScopeGroupBox.TabStop = false;
-      this.globalScopeGroupBox.Text = "Global &Scope";
       // 
       // scopeView
@@ -136,8 +113,9 @@
       this.scopeView.Caption = "Scope";
       this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.scopeView.Location = new System.Drawing.Point(3, 16);
+      this.scopeView.Item = null;
+      this.scopeView.Location = new System.Drawing.Point(0, 0);
       this.scopeView.Name = "scopeView";
       this.scopeView.Scope = null;
-      this.scopeView.Size = new System.Drawing.Size(310, 422);
+      this.scopeView.Size = new System.Drawing.Size(397, 611);
       this.scopeView.TabIndex = 0;
       // 
@@ -145,36 +123,39 @@
       // 
       this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.resetButton.Location = new System.Drawing.Point(196, 457);
+      this.resetButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Restart;
+      this.resetButton.Location = new System.Drawing.Point(58, 617);
       this.resetButton.Name = "resetButton";
-      this.resetButton.Size = new System.Drawing.Size(92, 23);
-      this.resetButton.TabIndex = 3;
-      this.resetButton.Text = "&Reset";
+      this.resetButton.Size = new System.Drawing.Size(23, 23);
+      this.resetButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.resetButton, "Reset Engine");
       this.resetButton.UseVisualStyleBackColor = true;
       this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
       // 
-      // abortButton
+      // stopButton
       // 
-      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.abortButton.Enabled = false;
-      this.abortButton.Location = new System.Drawing.Point(98, 457);
-      this.abortButton.Name = "abortButton";
-      this.abortButton.Size = new System.Drawing.Size(92, 23);
-      this.abortButton.TabIndex = 2;
-      this.abortButton.Text = "&Abort";
-      this.abortButton.UseVisualStyleBackColor = true;
-      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Enabled = false;
+      this.stopButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Stop;
+      this.stopButton.Location = new System.Drawing.Point(29, 617);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(23, 23);
+      this.stopButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.stopButton, "Stop Engine");
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
       // 
-      // executeButton
+      // startButton
       // 
-      this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.executeButton.Location = new System.Drawing.Point(0, 457);
-      this.executeButton.Name = "executeButton";
-      this.executeButton.Size = new System.Drawing.Size(92, 23);
-      this.executeButton.TabIndex = 1;
-      this.executeButton.Text = "&Execute";
-      this.executeButton.UseVisualStyleBackColor = true;
-      this.executeButton.Click += new System.EventHandler(this.executeButton_Click);
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Play;
+      this.startButton.Location = new System.Drawing.Point(0, 617);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(23, 23);
+      this.startButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.startButton, "Start Engine");
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
       // 
-      // EngineBaseEditor
+      // EngineBaseView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -182,15 +163,13 @@
       this.Controls.Add(this.executionTimeTextBox);
       this.Controls.Add(this.executionTimeLabel);
-      this.Controls.Add(this.splitContainer1);
+      this.Controls.Add(this.splitContainer);
       this.Controls.Add(this.resetButton);
-      this.Controls.Add(this.abortButton);
-      this.Controls.Add(this.executeButton);
-      this.Name = "EngineBaseEditor";
-      this.Size = new System.Drawing.Size(640, 480);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      this.splitContainer1.ResumeLayout(false);
-      this.operatorGraphGroupBox.ResumeLayout(false);
-      this.globalScopeGroupBox.ResumeLayout(false);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.startButton);
+      this.Name = "EngineBaseView";
+      this.Size = new System.Drawing.Size(802, 640);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -202,12 +181,11 @@
     protected System.Windows.Forms.TextBox executionTimeTextBox;
     protected System.Windows.Forms.Label executionTimeLabel;
-    protected System.Windows.Forms.SplitContainer splitContainer1;
-    protected System.Windows.Forms.GroupBox operatorGraphGroupBox;
-    protected System.Windows.Forms.GroupBox globalScopeGroupBox;
+    protected System.Windows.Forms.SplitContainer splitContainer;
     protected System.Windows.Forms.Button resetButton;
-    protected System.Windows.Forms.Button abortButton;
-    protected System.Windows.Forms.Button executeButton;
+    protected System.Windows.Forms.Button stopButton;
+    protected System.Windows.Forms.Button startButton;
     protected HeuristicLab.Core.Views.OperatorGraphView operatorGraphView;
     protected HeuristicLab.Core.Views.ScopeView scopeView;
+    private System.Windows.Forms.ToolTip toolTip;
 
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.cs	(revision 2655)
@@ -43,6 +43,6 @@
     /// </summary>
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
-    public IEngine Engine {
-      get { return (IEngine)Item; }
+    public EngineBase Engine {
+      get { return (EngineBase)Item; }
       set { base.Item = value; }
     }
@@ -54,4 +54,8 @@
       InitializeComponent();
     }
+    public EngineBaseView(EngineBase engine)
+      : this() {
+      Engine = engine;
+    }
 
     /// <summary>
@@ -59,25 +63,26 @@
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
+    protected override void DeregisterObjectEvents() {
+      Engine.OperatorGraphChanged -= new EventHandler(Engine_OperatorGraphChanged);
       Engine.Initialized -= new EventHandler(Engine_Initialized);
+      Engine.Started -= new EventHandler(Engine_Started);
+      Engine.Stopped -= new EventHandler(Engine_Stopped);
+      Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
       Engine.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
-      Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
-      Engine.Finished -= new EventHandler(Engine_Finished);
-      operatorGraphView.OperatorGraph = null;
-      scopeView.Scope = null;
-      base.RemoveItemEvents();
+      base.DeregisterObjectEvents();
     }
+
     /// <summary>
     /// Adds event handlers to the underlying <see cref="IEngine"/>.
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      Engine.OperatorGraphChanged += new EventHandler(Engine_OperatorGraphChanged);
       Engine.Initialized += new EventHandler(Engine_Initialized);
+      Engine.Started += new EventHandler(Engine_Started);
+      Engine.Stopped += new EventHandler(Engine_Stopped);
+      Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
       Engine.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
-      Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
-      Engine.Finished += new EventHandler(Engine_Finished);
-      operatorGraphView.OperatorGraph = Engine.OperatorGraph;
-      scopeView.Scope = Engine.GlobalScope;
     }
 
@@ -86,15 +91,18 @@
     /// </summary>
     /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      abortButton.Enabled = false;
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      stopButton.Enabled = false;
       if (Engine == null) {
-        executeButton.Enabled = false;
+        operatorGraphView.Enabled = false;
+        scopeView.Enabled = false;
+        startButton.Enabled = false;
         resetButton.Enabled = false;
         executionTimeTextBox.Enabled = false;
       } else {
-        executeButton.Enabled = true;
+        operatorGraphView.OperatorGraph = Engine.OperatorGraph;
+        scopeView.Scope = Engine.GlobalScope;
+        startButton.Enabled = !Engine.Finished;
         resetButton.Enabled = true;
-        executionTimeCounter = 0;
         executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
         executionTimeTextBox.Enabled = true;
@@ -103,69 +111,74 @@
 
     #region Engine Events
+    private void Engine_OperatorGraphChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_OperatorGraphChanged), sender, e);
+      else
+        operatorGraphView.OperatorGraph = Engine.OperatorGraph;
+    }
     private void Engine_Initialized(object sender, EventArgs e) {
-      Refresh();
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_Initialized), sender, e);
+      else {
+        operatorGraphView.Enabled = true;
+        scopeView.Enabled = true;
+        startButton.Enabled = !Engine.Finished;
+        stopButton.Enabled = false;
+        resetButton.Enabled = true;
+        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+      }
     }
-    private delegate void OnExceptionEventDelegate(object sender, EventArgs<Exception> e);
-    private void Engine_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+    private void Engine_Started(object sender, EventArgs e) {
+      executionTimeCounter = 0;
       if (InvokeRequired)
-        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
-      else
-        Auxiliary.ShowErrorMessageBox(e.Value);
+        Invoke(new EventHandler(Engine_Started), sender, e);
+      else {
+        operatorGraphView.Enabled = false;
+        scopeView.Enabled = false;
+        startButton.Enabled = false;
+        stopButton.Enabled = true;
+        resetButton.Enabled = false;
+        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+      }
+    }
+    private void Engine_Stopped(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_Stopped), sender, e);
+      else {
+        operatorGraphView.Enabled = true;
+        scopeView.Enabled = true;
+        startButton.Enabled = !Engine.Finished;
+        stopButton.Enabled = false;
+        resetButton.Enabled = true;
+        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+      }
     }
     private void Engine_ExecutionTimeChanged(object sender, EventArgs e) {
       executionTimeCounter++;
-      if (executionTimeCounter == 1000)
-        UpdateExecutionTimeTextBox();
-    }
-    private void Engine_Finished(object sender, EventArgs e) {
-      UpdateExecutionTimeTextBox();
-      if (globalScopeGroupBox.Controls.Count > 0) {
-        ScopeView scopeEditor = (ScopeView)globalScopeGroupBox.Controls[0];
-        if (!scopeEditor.AutomaticUpdating)
-          scopeEditor.Refresh();
-      }
-      EnableDisableControls();
-    }
-    private void UpdateExecutionTimeTextBox() {
-      if (InvokeRequired)
-        Invoke(new MethodInvoker(UpdateExecutionTimeTextBox));
-      else {
+      if ((executionTimeCounter == 1000) || !Engine.Running) {
         executionTimeCounter = 0;
-        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+        if (InvokeRequired)
+          Invoke(new EventHandler(Engine_ExecutionTimeChanged), sender, e);
+        else
+          executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
       }
     }
-    private void EnableDisableControls() {
+    private void Engine_ExceptionOccurred(object sender, EventArgs<Exception> e) {
       if (InvokeRequired)
-        Invoke(new MethodInvoker(EnableDisableControls));
-      else {
-        executeButton.Enabled = true;
-        abortButton.Enabled = false;
-        resetButton.Enabled = true;
-        operatorGraphGroupBox.Enabled = true;
-        globalScopeGroupBox.Enabled = true;
-      }
+        Invoke(new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Value);
     }
     #endregion
 
     #region Button events
-    private void executeButton_Click(object sender, EventArgs e) {
-      executeButton.Enabled = false;
-      abortButton.Enabled = true;
-      resetButton.Enabled = false;
-      operatorGraphGroupBox.Enabled = false;
-      globalScopeGroupBox.Enabled = false;
-      Engine.Execute();
+    private void startButton_Click(object sender, EventArgs e) {
+      Engine.Start();
     }
-    private void abortButton_Click(object sender, EventArgs e) {
-      Engine.Abort();
+    private void stopButton_Click(object sender, EventArgs e) {
+      Engine.Stop();
     }
     private void resetButton_Click(object sender, EventArgs e) {
-      Engine.Reset();
-      UpdateExecutionTimeTextBox();
-      if (globalScopeGroupBox.Controls.Count > 0) {
-        ScopeView scopeEditor = (ScopeView)globalScopeGroupBox.Controls[0];
-        if (!scopeEditor.AutomaticUpdating)
-          scopeEditor.Refresh();
-      }
+      Engine.Initialize();
     }
     #endregion
Index: unk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.resx	(revision 2654)
+++ 	(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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 2655)
@@ -39,4 +39,5 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Design" />
     <Reference Include="System.Drawing" />
     <Reference Include="System.Windows.Forms" />
@@ -51,23 +52,11 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CreateParameterDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="CreateParameterDialog.Designer.cs">
+      <DependentUpon>CreateParameterDialog.cs</DependentUpon>
+    </Compile>
     <Compile Include="Auxiliary.cs" />
-    <Compile Include="ChooseItemDialog.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="ChooseItemDialog.Designer.cs">
-      <DependentUpon>ChooseItemDialog.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ChooseOperatorDialog.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="ChooseOperatorDialog.Designer.cs">
-      <DependentUpon>ChooseOperatorDialog.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ChooseTypeDialog.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="ChooseTypeDialog.Designer.cs">
-      <DependentUpon>ChooseTypeDialog.cs</DependentUpon>
-    </Compile>
     <Compile Include="EngineBaseView.cs">
       <SubType>UserControl</SubType>
@@ -76,6 +65,144 @@
       <DependentUpon>EngineBaseView.cs</DependentUpon>
     </Compile>
+    <Compile Include="OperatorGraphView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorGraphView.Designer.cs">
+      <DependentUpon>OperatorGraphView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorsSidebar.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorsSidebar.Designer.cs">
+      <DependentUpon>OperatorsSidebar.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorTreeView.Designer.cs">
+      <DependentUpon>OperatorTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TypeSelectorDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="TypeSelectorDialog.Designer.cs">
+      <DependentUpon>TypeSelectorDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TypeSelector.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TypeSelector.Designer.cs">
+      <DependentUpon>TypeSelector.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ViewHost.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ViewHost.Designer.cs">
+      <DependentUpon>ViewHost.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterBaseView.Designer.cs">
+      <DependentUpon>ParameterBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorCollectionView.Designer.cs">
+      <DependentUpon>OperatorCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorSetView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorSetView.Designer.cs">
+      <DependentUpon>OperatorSetView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemSetView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemSetView.Designer.cs">
+      <DependentUpon>ItemSetView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemCollectionView.Designer.cs">
+      <DependentUpon>ItemCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ScopeListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScopeListView.Designer.cs">
+      <DependentUpon>ScopeListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorListView.Designer.cs">
+      <DependentUpon>OperatorListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemListView.Designer.cs">
+      <DependentUpon>ItemListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IObjectView.cs" />
+    <Compile Include="ObjectViewBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ObjectViewBase.Designer.cs">
+      <DependentUpon>ObjectViewBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorBaseView.Designer.cs">
+      <DependentUpon>OperatorBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NamedItemBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NamedItemBaseView.Designer.cs">
+      <DependentUpon>NamedItemBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IntDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IntDataView.Designer.cs">
+      <DependentUpon>IntDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterView.Designer.cs">
+      <DependentUpon>ParameterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ScopeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScopeView.Designer.cs">
+      <DependentUpon>ScopeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="VariableCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableCollectionView.Designer.cs">
+      <DependentUpon>VariableCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterCollectionView.Designer.cs">
+      <DependentUpon>ParameterCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NamedItemCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NamedItemCollectionView.Designer.cs">
+      <DependentUpon>NamedItemCollectionView.cs</DependentUpon>
+    </Compile>
     <Compile Include="HeuristicLabCoreViewsPlugin.cs" />
-    <Compile Include="IItemView.cs" />
     <Compile Include="ItemBaseView.cs">
       <SubType>UserControl</SubType>
@@ -90,59 +217,5 @@
       <DependentUpon>ItemViewBase.cs</DependentUpon>
     </Compile>
-    <Compile Include="OperatorBaseDescriptionView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorBaseDescriptionView.Designer.cs">
-      <DependentUpon>OperatorBaseDescriptionView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OperatorBaseVariableInfosView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorBaseVariableInfosView.Designer.cs">
-      <DependentUpon>OperatorBaseVariableInfosView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OperatorBaseVariablesView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorBaseVariablesView.Designer.cs">
-      <DependentUpon>OperatorBaseVariablesView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OperatorBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorBaseView.Designer.cs">
-      <DependentUpon>OperatorBaseView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OperatorGraphView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorGraphView.Designer.cs">
-      <DependentUpon>OperatorGraphView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OperatorLibraryView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorLibraryView.Designer.cs">
-      <DependentUpon>OperatorLibraryView.cs</DependentUpon>
-    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ScopeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ScopeView.Designer.cs">
-      <DependentUpon>ScopeView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="VariableInfoView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="VariableInfoView.Designer.cs">
-      <DependentUpon>VariableInfoView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="VariablesScopeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="VariablesScopeView.Designer.cs">
-      <DependentUpon>VariablesScopeView.cs</DependentUpon>
-    </Compile>
     <Compile Include="VariableView.cs">
       <SubType>UserControl</SubType>
@@ -157,4 +230,8 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.2\HeuristicLab.Common.Resources-3.2.csproj">
       <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
@@ -177,61 +254,12 @@
       <Name>HeuristicLab.MainForm-3.2</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
       <Name>HeuristicLab.PluginInfrastructure</Name>
     </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="Resources\CombinedOperator.bmp" />
-    <Content Include="Resources\HeuristicLab.ico" />
-    <Content Include="Resources\Operator.bmp" />
-    <Content Include="Resources\ProgrammableOperator.bmp" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="ChooseItemDialog.resx">
-      <DependentUpon>ChooseItemDialog.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ChooseOperatorDialog.resx">
-      <DependentUpon>ChooseOperatorDialog.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ChooseTypeDialog.resx">
-      <DependentUpon>ChooseTypeDialog.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="EngineBaseView.resx">
-      <DependentUpon>EngineBaseView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ItemBaseView.resx">
-      <DependentUpon>ItemBaseView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OperatorBaseDescriptionView.resx">
-      <DependentUpon>OperatorBaseDescriptionView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OperatorBaseVariableInfosView.resx">
-      <DependentUpon>OperatorBaseVariableInfosView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OperatorBaseVariablesView.resx">
-      <DependentUpon>OperatorBaseVariablesView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OperatorBaseView.resx">
-      <DependentUpon>OperatorBaseView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OperatorGraphView.resx">
-      <DependentUpon>OperatorGraphView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="OperatorLibraryView.resx">
-      <DependentUpon>OperatorLibraryView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ScopeView.resx">
-      <DependentUpon>ScopeView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="VariableInfoView.resx">
-      <DependentUpon>VariableInfoView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="VariablesScopeView.resx">
-      <DependentUpon>VariablesScopeView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="VariableView.resx">
-      <DependentUpon>VariableView.cs</DependentUpon>
-    </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs	(revision 2655)
@@ -29,11 +29,13 @@
   /// Plugin class for HeuristicLab.Core.Views plugin.
   /// </summary>
-  [ClassInfo(Name = "HeuristicLab.Core.Views-3.3")]
-  [PluginFile(Filename = "HeuristicLab.Core.Views-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Common-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Common.Resources-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Core-3.3")]
-  [Dependency(Dependency = "HeuristicLab.MainForm-3.2")]
-  [Dependency(Dependency = "HeuristicLab.MainForm.WindowsForms-3.2")]
+  [Plugin("HeuristicLab.Core.Views-3.3")]
+  [PluginFile("HeuristicLab.Core.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections-3.3")]
+  [PluginDependency("HeuristicLab.Common-3.2")]
+  [PluginDependency("HeuristicLab.Common.Resources-3.2")]
+  [PluginDependency("HeuristicLab.Persistence-3.3")]
+  [PluginDependency("HeuristicLab.Core-3.3")]
+  [PluginDependency("HeuristicLab.MainForm-3.2")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms-3.2")]
   public class HeuristicLabCoreViewsPlugin : PluginBase {
   }
Index: unk/sources/HeuristicLab.Core.Views/3.3/IItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/IItemView.cs	(revision 2654)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// An interface for all kinds visual representations of items (objects, operators...).
-  /// </summary>
-  public interface IItemView : IView {
-    /// <summary>
-    /// Gets the current item instance.
-    /// </summary>
-    IItem Item { get; }
-
-    /// <summary>
-    /// Occurs when the item was changed.
-    /// </summary>
-    event EventHandler ItemChanged;
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/IObjectView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/IObjectView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/IObjectView.cs	(revision 2655)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// An interface for all kinds visual representations of items (objects, operators...).
+  /// </summary>
+  public interface IObjectView : IView {
+    /// <summary>
+    /// Gets the current item instance.
+    /// </summary>
+    object Object { get; }
+
+    /// <summary>
+    /// Occurs when the current item was changed.
+    /// </summary>
+    event EventHandler ObjectChanged;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/IntDataView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/IntDataView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/IntDataView.Designer.cs	(revision 2655)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class IntDataView {
+    /// <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) {
+        if (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.valueLabel = new System.Windows.Forms.Label();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(3, 3);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(37, 13);
+      this.valueLabel.TabIndex = 0;
+      this.valueLabel.Text = "&Value:";
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(46, 0);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(204, 20);
+      this.valueTextBox.TabIndex = 1;
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      this.valueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.valueTextBox_Validating);
+      // 
+      // IntDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueTextBox);
+      this.Controls.Add(this.valueLabel);
+      this.Name = "IntDataView";
+      this.Size = new System.Drawing.Size(250, 50);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.TextBox valueTextBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/IntDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/IntDataView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/IntDataView.cs	(revision 2655)
@@ -0,0 +1,96 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Variable"/>.
+  /// </summary>
+  [Content(typeof(IntData), true)]
+  public partial class IntDataView : ItemViewBase {
+    public IntData IntData {
+      get { return (IntData)Item; }
+      set { base.Item = value; }
+    }
+
+    public IntDataView() {
+      InitializeComponent();
+      Caption = "IntData";
+    }
+    public IntDataView(IntData intData)
+      : this() {
+      IntData = intData;
+    }
+
+    protected override void DeregisterObjectEvents() {
+      IntData.ValueChanged -= new EventHandler(IntData_ValueChanged);
+      base.DeregisterObjectEvents();
+    }
+
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      IntData.ValueChanged += new EventHandler(IntData_ValueChanged);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (IntData == null) {
+        Caption = "IntData";
+        valueTextBox.Text = "-";
+        valueTextBox.Enabled = false;
+      } else {
+        Caption = IntData.Value.ToString() + " (" + IntData.GetType().Name + ")";
+        valueTextBox.Text = IntData.Value.ToString();
+        valueTextBox.Enabled = true;
+      }
+    }
+
+    private void IntData_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(IntData_ValueChanged), sender, e);
+      else
+        valueTextBox.Text = IntData.Value.ToString();
+    }
+
+    private void valueTextBox_Validating(object sender, CancelEventArgs e) {
+      int oldValue = IntData.Value;
+      int value;
+      e.Cancel = !int.TryParse(valueTextBox.Text, out value);
+      if (e.Cancel) {
+        MessageBox.Show(this, "\"" + valueTextBox.Text + "\" is not a valid integer value.", "Invalid Value", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        valueTextBox.Text = oldValue.ToString();
+        valueTextBox.SelectAll();
+        valueTextBox.Focus();
+      }
+    }
+    private void valueTextBox_Validated(object sender, EventArgs e) {
+      IntData.Value = int.Parse(valueTextBox.Text);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.Designer.cs	(revision 2655)
@@ -32,6 +32,6 @@
     /// <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();
+      if (disposing) {
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.cs	(revision 2655)
@@ -45,5 +45,5 @@
     /// </summary>
     /// <param name="item">The item that should be displayed.</param>
-    public ItemBaseView(IItem item)
+    public ItemBaseView(ItemBase item)
       : this() {
       Item = item;
Index: unk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs	(revision 2655)
@@ -0,0 +1,239 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Windows.Forms;
+using System.ComponentModel;
+
+namespace HeuristicLab.Core.Views {
+  partial class ItemCollectionView<T> {
+    /// <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) {
+        foreach (ListViewItem item in itemsListView.Items)
+          ((T)item.Tag).Changed -= new ChangedEventHandler(Item_Changed);
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.itemsListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.sortDescendingButton = new System.Windows.Forms.Button();
+      this.sortAscendingButton = new System.Windows.Forms.Button();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.itemsGroupBox = new System.Windows.Forms.GroupBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.itemsListView);
+      this.splitContainer1.Panel1.Controls.Add(this.sortDescendingButton);
+      this.splitContainer1.Panel1.Controls.Add(this.sortAscendingButton);
+      this.splitContainer1.Panel1.Controls.Add(this.removeButton);
+      this.splitContainer1.Panel1.Controls.Add(this.addButton);
+      this.splitContainer1.Panel1MinSize = 100;
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(526, 364);
+      this.splitContainer1.SplitterDistance = 250;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.AllowDrop = true;
+      this.itemsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.itemsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.itemsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.itemsListView.HideSelection = false;
+      this.itemsListView.Location = new System.Drawing.Point(3, 32);
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.ShowItemToolTips = true;
+      this.itemsListView.Size = new System.Drawing.Size(244, 329);
+      this.itemsListView.SmallImageList = this.imageList;
+      this.itemsListView.TabIndex = 4;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
+      this.itemsListView.SizeChanged += new System.EventHandler(this.itemsListView_SizeChanged);
+      this.itemsListView.DoubleClick += new System.EventHandler(this.itemsListView_DoubleClick);
+      this.itemsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragDrop);
+      this.itemsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
+      this.itemsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.itemsListView_KeyDown);
+      this.itemsListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.itemsListView_ItemDrag);
+      this.itemsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // sortDescendingButton
+      // 
+      this.sortDescendingButton.Enabled = false;
+      this.sortDescendingButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.SortUp;
+      this.sortDescendingButton.Location = new System.Drawing.Point(32, 3);
+      this.sortDescendingButton.Name = "sortDescendingButton";
+      this.sortDescendingButton.Size = new System.Drawing.Size(23, 23);
+      this.sortDescendingButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.sortDescendingButton, "Sort Descending");
+      this.sortDescendingButton.UseVisualStyleBackColor = true;
+      this.sortDescendingButton.Click += new System.EventHandler(this.sortDescendingButton_Click);
+      // 
+      // sortAscendingButton
+      // 
+      this.sortAscendingButton.Enabled = false;
+      this.sortAscendingButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Sort;
+      this.sortAscendingButton.Location = new System.Drawing.Point(61, 3);
+      this.sortAscendingButton.Name = "sortAscendingButton";
+      this.sortAscendingButton.Size = new System.Drawing.Size(23, 23);
+      this.sortAscendingButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.sortAscendingButton, "Sort Ascending");
+      this.sortAscendingButton.UseVisualStyleBackColor = true;
+      this.sortAscendingButton.Click += new System.EventHandler(this.sortAscendingButton_Click);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Enabled = false;
+      this.removeButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.removeButton.Location = new System.Drawing.Point(90, 3);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(23, 23);
+      this.removeButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.addButton.Location = new System.Drawing.Point(3, 3);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(23, 23);
+      this.addButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.detailsGroupBox.Controls.Add(this.viewHost);
+      this.detailsGroupBox.Location = new System.Drawing.Point(3, 26);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(266, 335);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "&Details";
+      // 
+      // viewHost
+      // 
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(3, 16);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Object = null;
+      this.viewHost.Size = new System.Drawing.Size(260, 316);
+      this.viewHost.TabIndex = 0;
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Controls.Add(this.splitContainer1);
+      this.itemsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.itemsGroupBox.Name = "itemsGroupBox";
+      this.itemsGroupBox.Size = new System.Drawing.Size(532, 383);
+      this.itemsGroupBox.TabIndex = 0;
+      this.itemsGroupBox.TabStop = false;
+      this.itemsGroupBox.Text = "&Items";
+      // 
+      // ItemCollectionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.itemsGroupBox);
+      this.Name = "ItemCollectionView";
+      this.Size = new System.Drawing.Size(532, 383);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.SplitContainer splitContainer1;
+    protected System.Windows.Forms.ColumnHeader columnHeader1;
+    protected GroupBox itemsGroupBox;
+    protected ListView itemsListView;
+    protected GroupBox detailsGroupBox;
+    protected Button addButton;
+    protected Button removeButton;
+    protected ToolTip toolTip;
+    protected ImageList imageList;
+    private ViewHost viewHost;
+    protected Button sortAscendingButton;
+    protected Button sortDescendingButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 2655)
@@ -0,0 +1,270 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  public partial class ItemCollectionView<T> : ObjectViewBase where T : class, IItem {
+    public IObservableCollection<T> ItemCollection {
+      get { return (IObservableCollection<T>)Object; }
+      set { base.Object = value; }
+    }
+
+    public ListView ItemsListView {
+      get { return itemsListView; }
+    }
+
+    public ItemCollectionView() {
+      InitializeComponent();
+      Caption = "Item Collection";
+    }
+
+    protected override void DeregisterObjectEvents() {
+      ItemCollection.ItemsAdded -= new CollectionItemsChangedEventHandler<T>(ItemCollection_ItemsAdded);
+      ItemCollection.ItemsRemoved -= new CollectionItemsChangedEventHandler<T>(ItemCollection_ItemsRemoved);
+      ItemCollection.CollectionReset -= new CollectionItemsChangedEventHandler<T>(ItemCollection_CollectionReset);
+      base.DeregisterObjectEvents();
+    }
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      ItemCollection.ItemsAdded += new CollectionItemsChangedEventHandler<T>(ItemCollection_ItemsAdded);
+      ItemCollection.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(ItemCollection_ItemsRemoved);
+      ItemCollection.CollectionReset += new CollectionItemsChangedEventHandler<T>(ItemCollection_CollectionReset);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      Caption = "Item Collection";
+      while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]);
+      itemsListView.Enabled = false;
+      detailsGroupBox.Enabled = false;
+      viewHost.Object = null;
+      addButton.Enabled = false;
+      sortAscendingButton.Enabled = false;
+      sortDescendingButton.Enabled = false;
+      removeButton.Enabled = false;
+
+      if (ItemCollection != null) {
+        Caption += " (" + ItemCollection.GetType().Name + ")";
+        itemsListView.Enabled = true;
+        addButton.Enabled = !ItemCollection.IsReadOnly;
+        foreach (T item in ItemCollection)
+          AddListViewItem(CreateListViewItem(item));
+        sortAscendingButton.Enabled = itemsListView.Items.Count > 0;
+        sortDescendingButton.Enabled = itemsListView.Items.Count > 0;
+        SortItemsListView(SortOrder.Ascending);
+      }
+    }
+
+    protected virtual T CreateItem() {
+      try {
+        return (T)Activator.CreateInstance(typeof(T));
+      } catch(Exception ex) {
+        Auxiliary.ShowErrorMessageBox(ex);
+        return null;
+      }
+    }
+    protected virtual ListViewItem CreateListViewItem(T item) {
+      if (!itemsListView.SmallImageList.Images.ContainsKey(item.GetType().FullName))
+        itemsListView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
+
+      ListViewItem listViewItem = new ListViewItem();
+      listViewItem.Text = item.ToString();
+      listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
+      listViewItem.ImageIndex = itemsListView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
+      listViewItem.Tag = item;
+      return listViewItem;
+    }
+    protected virtual void AddListViewItem(ListViewItem listViewItem) {
+      itemsListView.Items.Add(listViewItem);
+      ((T)listViewItem.Tag).Changed += new ChangedEventHandler(Item_Changed);
+      sortAscendingButton.Enabled = itemsListView.Items.Count > 0;
+      sortDescendingButton.Enabled = itemsListView.Items.Count > 0;
+    }
+    protected virtual void RemoveListViewItem(ListViewItem listViewItem) {
+      ((T)listViewItem.Tag).Changed -= new ChangedEventHandler(Item_Changed);
+      listViewItem.Remove();
+      sortAscendingButton.Enabled = itemsListView.Items.Count > 0;
+      sortDescendingButton.Enabled = itemsListView.Items.Count > 0;
+    }
+    protected virtual void UpdateListViewItem(ListViewItem listViewItem) {
+      if (!listViewItem.Text.Equals(listViewItem.Tag.ToString())) {
+        listViewItem.Text = listViewItem.Tag.ToString();
+        itemsListView.Sort();
+      }
+    }
+    protected virtual IEnumerable<ListViewItem> GetListViewItemsForItem(T item) {
+      foreach (ListViewItem listViewItem in itemsListView.Items) {
+        if (((T)listViewItem.Tag) == item)
+          yield return listViewItem;
+      }
+    }
+
+    #region ListView Events
+    protected virtual void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && !ItemCollection.IsReadOnly;
+      if (itemsListView.SelectedItems.Count == 1) {
+        T item = (T)itemsListView.SelectedItems[0].Tag;
+        viewHost.Object = item;
+        detailsGroupBox.Enabled = true;
+      } else {
+        viewHost.Object = null;
+        detailsGroupBox.Enabled = false;
+      }
+    }
+    private void itemsListView_SizeChanged(object sender, EventArgs e) {
+      if (itemsListView.Columns.Count > 0)
+        itemsListView.Columns[0].Width = Math.Max(0, itemsListView.Width - 25);
+    }
+    protected virtual void itemsListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if ((itemsListView.SelectedItems.Count > 0) && !ItemCollection.IsReadOnly) {
+          foreach (ListViewItem item in itemsListView.SelectedItems)
+            ItemCollection.Remove((T)item.Tag);
+        }
+      }
+    }
+    protected virtual void itemsListView_DoubleClick(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        T item = (T)itemsListView.SelectedItems[0].Tag;
+        IView view = MainFormManager.CreateDefaultView(item);
+        if (view != null) MainFormManager.MainForm.ShowView(view);
+      }
+    }
+    protected virtual void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      ListViewItem listViewItem = (ListViewItem)e.Item;
+      T item = (T)listViewItem.Tag;
+      DataObject data = new DataObject();
+      data.SetData("Type", item.GetType());
+      data.SetData("Value", item);
+      if (ItemCollection.IsReadOnly) {
+        DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+      } else {
+        DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
+        if ((result & DragDropEffects.Move) == DragDropEffects.Move)
+          ItemCollection.Remove(item);
+      }
+    }
+    protected virtual void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((!ItemCollection.IsReadOnly) && (type != null) && (typeof(T).IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
+        else e.Effect = DragDropEffects.Link;
+      }
+    }
+    protected virtual void itemsListView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        T item = e.Data.GetData("Value") as T;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (T)item.Clone();
+        ItemCollection.Add(item);
+      }
+    }
+    #endregion
+
+    #region Button Events
+    protected virtual void addButton_Click(object sender, EventArgs e) {
+      T item = CreateItem();
+      if (item != null)
+        ItemCollection.Add(item);
+    }
+    protected void sortAscendingButton_Click(object sender, EventArgs e) {
+      SortItemsListView(SortOrder.Ascending);
+    }
+    protected void sortDescendingButton_Click(object sender, EventArgs e) {
+      SortItemsListView(SortOrder.Descending);
+    }
+    protected virtual void removeButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in itemsListView.SelectedItems)
+          ItemCollection.Remove((T)item.Tag);
+        itemsListView.SelectedItems.Clear();
+      }
+    }
+    #endregion
+
+    #region ItemCollection Events
+    private void ItemCollection_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(ItemCollection_ItemsAdded), sender, e);
+      else
+        foreach (T item in e.Items)
+          AddListViewItem(CreateListViewItem(item));
+    }
+    private void ItemCollection_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(ItemCollection_ItemsRemoved), sender, e);
+      else {
+        foreach (T item in e.Items) {
+          foreach (ListViewItem listViewItem in GetListViewItemsForItem(item)) {
+            RemoveListViewItem(listViewItem);
+            break;
+          }
+        }
+      }
+    }
+    private void ItemCollection_CollectionReset(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(ItemCollection_CollectionReset), sender, e);
+      else {
+        foreach (T item in e.OldItems) {
+          foreach (ListViewItem listViewItem in GetListViewItemsForItem(item)) {
+            RemoveListViewItem(listViewItem);
+            break;
+          }
+        }
+        foreach (T item in e.Items)
+          AddListViewItem(CreateListViewItem(item));
+      }
+    }
+    #endregion
+
+    #region Item Events
+    private void Item_Changed(object sender, ChangedEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new ChangedEventHandler(Item_Changed), sender, e);
+      else {
+        T item = (T)sender;
+        foreach (ListViewItem listViewItem in GetListViewItemsForItem(item))
+          UpdateListViewItem(listViewItem);
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void SortItemsListView(SortOrder sortOrder) {
+      itemsListView.Sorting = sortOrder;
+      itemsListView.Sort();
+      itemsListView.Sorting = SortOrder.None;
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.Designer.cs	(revision 2655)
@@ -0,0 +1,237 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Windows.Forms;
+
+namespace HeuristicLab.Core.Views {
+  partial class ItemListView<T> {
+    /// <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) {
+        foreach (ListViewItem item in itemsListView.Items)
+          ((T)item.Tag).Changed -= new ChangedEventHandler(Item_Changed);
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.moveUpButton = new System.Windows.Forms.Button();
+      this.moveDownButton = new System.Windows.Forms.Button();
+      this.itemsListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.addButton = new System.Windows.Forms.Button();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.itemsGroupBox = new System.Windows.Forms.GroupBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.removeButton);
+      this.splitContainer1.Panel1.Controls.Add(this.moveUpButton);
+      this.splitContainer1.Panel1.Controls.Add(this.moveDownButton);
+      this.splitContainer1.Panel1.Controls.Add(this.itemsListView);
+      this.splitContainer1.Panel1.Controls.Add(this.addButton);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(493, 323);
+      this.splitContainer1.SplitterDistance = 200;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // removeButton
+      // 
+      this.removeButton.Enabled = false;
+      this.removeButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.removeButton.Location = new System.Drawing.Point(90, 3);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(23, 23);
+      this.removeButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // moveUpButton
+      // 
+      this.moveUpButton.Enabled = false;
+      this.moveUpButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.ArrowUp;
+      this.moveUpButton.Location = new System.Drawing.Point(32, 3);
+      this.moveUpButton.Name = "moveUpButton";
+      this.moveUpButton.Size = new System.Drawing.Size(23, 23);
+      this.moveUpButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.moveUpButton, "Move Up");
+      this.moveUpButton.UseVisualStyleBackColor = true;
+      this.moveUpButton.Click += new System.EventHandler(this.moveUpButton_Click);
+      // 
+      // moveDownButton
+      // 
+      this.moveDownButton.Enabled = false;
+      this.moveDownButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.ArrowDown;
+      this.moveDownButton.Location = new System.Drawing.Point(61, 3);
+      this.moveDownButton.Name = "moveDownButton";
+      this.moveDownButton.Size = new System.Drawing.Size(23, 23);
+      this.moveDownButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.moveDownButton, "Move Down");
+      this.moveDownButton.UseVisualStyleBackColor = true;
+      this.moveDownButton.Click += new System.EventHandler(this.moveDownButton_Click);
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.AllowDrop = true;
+      this.itemsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.itemsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.itemsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.itemsListView.HideSelection = false;
+      this.itemsListView.Location = new System.Drawing.Point(3, 32);
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.ShowItemToolTips = true;
+      this.itemsListView.Size = new System.Drawing.Size(194, 288);
+      this.itemsListView.SmallImageList = this.imageList;
+      this.itemsListView.TabIndex = 4;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
+      this.itemsListView.SizeChanged += new System.EventHandler(this.itemsListView_SizeChanged);
+      this.itemsListView.DoubleClick += new System.EventHandler(this.itemsListView_DoubleClick);
+      this.itemsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragDrop);
+      this.itemsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
+      this.itemsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.itemsListView_KeyDown);
+      this.itemsListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.itemsListView_ItemDrag);
+      this.itemsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // addButton
+      // 
+      this.addButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.addButton.Location = new System.Drawing.Point(3, 3);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(23, 23);
+      this.addButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.detailsGroupBox.Controls.Add(this.viewHost);
+      this.detailsGroupBox.Location = new System.Drawing.Point(3, 26);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(283, 294);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "&Details";
+      // 
+      // viewHost
+      // 
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(3, 16);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Object = null;
+      this.viewHost.Size = new System.Drawing.Size(277, 275);
+      this.viewHost.TabIndex = 0;
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Controls.Add(this.splitContainer1);
+      this.itemsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.itemsGroupBox.Name = "itemsGroupBox";
+      this.itemsGroupBox.Size = new System.Drawing.Size(499, 342);
+      this.itemsGroupBox.TabIndex = 0;
+      this.itemsGroupBox.TabStop = false;
+      this.itemsGroupBox.Text = "&Items";
+      // 
+      // ItemListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.itemsGroupBox);
+      this.Name = "ItemListView";
+      this.Size = new System.Drawing.Size(499, 342);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    protected GroupBox itemsGroupBox;
+    protected ListView itemsListView;
+    protected GroupBox detailsGroupBox;
+    protected Button addButton;
+    protected Button removeButton;
+    protected Button moveUpButton;
+    protected Button moveDownButton;
+    private ToolTip toolTip;
+    private ImageList imageList;
+    protected ViewHost viewHost;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 2655)
@@ -0,0 +1,342 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of all variables in a specified scope.
+  /// </summary>
+  public partial class ItemListView<T> : ObjectViewBase where T : class, IItem {
+    /// <summary>
+    /// Gets or sets the scope whose variables to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No won data storage present.</remarks>
+    public IObservableList<T> ItemList {
+      get { return (IObservableList<T>)Object; }
+      set { base.Object = value; }
+    }
+
+    public ListView ItemsListView {
+      get { return itemsListView; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public ItemListView() {
+      InitializeComponent();
+      Caption = "Item List";
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IScope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterObjectEvents() {
+      ItemList.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsAdded);
+      ItemList.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsRemoved);
+      ItemList.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsReplaced);
+      ItemList.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsMoved);
+      ItemList.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_CollectionReset);
+      base.DeregisterObjectEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IScope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      ItemList.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsAdded);
+      ItemList.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsRemoved);
+      ItemList.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsReplaced);
+      ItemList.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsMoved);
+      ItemList.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_CollectionReset);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      Caption = "Item List";
+      while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]);
+      itemsListView.Enabled = false;
+      detailsGroupBox.Enabled = false;
+      viewHost.Object = null;
+      addButton.Enabled = false;
+      moveUpButton.Enabled = false;
+      moveDownButton.Enabled = false;
+      removeButton.Enabled = false;
+
+      if (ItemList != null) {
+        Caption += " (" + ItemList.GetType().Name + ")";
+        itemsListView.Enabled = true;
+        addButton.Enabled = !ItemList.IsReadOnly;
+        foreach (T item in ItemList)
+          AddListViewItem(CreateListViewItem(item));
+      }
+    }
+
+    protected virtual T CreateItem() {
+      try {
+        return (T)Activator.CreateInstance(typeof(T));
+      }
+      catch (Exception ex) {
+        Auxiliary.ShowErrorMessageBox(ex);
+        return null;
+      }
+    }
+    protected virtual ListViewItem CreateListViewItem(T item) {
+      if (!itemsListView.SmallImageList.Images.ContainsKey(item.GetType().FullName))
+        itemsListView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
+
+      ListViewItem listViewItem = new ListViewItem();
+      listViewItem.Text = item.ToString();
+      listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
+      listViewItem.ImageIndex = itemsListView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
+      listViewItem.Tag = item;
+      return listViewItem;
+    }
+    protected virtual void AddListViewItem(ListViewItem listViewItem) {
+      itemsListView.Items.Add(listViewItem);
+      ((T)listViewItem.Tag).Changed += new ChangedEventHandler(Item_Changed);
+    }
+    protected virtual void InsertListViewItem(int index, ListViewItem listViewItem) {
+      itemsListView.Items.Insert(index, listViewItem);
+      ((T)listViewItem.Tag).Changed += new ChangedEventHandler(Item_Changed);
+    }
+    protected virtual void RemoveListViewItem(ListViewItem listViewItem) {
+      ((T)listViewItem.Tag).Changed -= new ChangedEventHandler(Item_Changed);
+      listViewItem.Remove();
+    }
+    protected virtual void UpdateListViewItem(ListViewItem listViewItem) {
+      T item = (T)listViewItem.Tag;
+      if (!itemsListView.SmallImageList.Images.ContainsKey(item.GetType().FullName))
+        itemsListView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
+
+      listViewItem.Text = item.ToString();
+      listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
+      listViewItem.ImageIndex = itemsListView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
+    }
+
+    protected virtual void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      moveUpButton.Enabled = itemsListView.SelectedItems.Count == 1 &&
+                             itemsListView.SelectedIndices[0] != 0 &&
+                             !ItemList.IsReadOnly;
+      moveDownButton.Enabled = itemsListView.SelectedItems.Count == 1 &&
+                               itemsListView.SelectedIndices[0] != itemsListView.Items.Count - 1 &&
+                               !ItemList.IsReadOnly;
+      removeButton.Enabled = itemsListView.SelectedItems.Count > 0 &&
+                             !ItemList.IsReadOnly;
+
+      if (itemsListView.SelectedItems.Count == 1) {
+        T item = (T)itemsListView.SelectedItems[0].Tag;
+        viewHost.Object = item;
+        detailsGroupBox.Enabled = true;
+      } else {
+        viewHost.Object = null;
+        detailsGroupBox.Enabled = false;
+      }
+    }
+
+    #region ListView Events
+    private void itemsListView_SizeChanged(object sender, EventArgs e) {
+      if (itemsListView.Columns.Count > 0)
+        itemsListView.Columns[0].Width = Math.Max(0, itemsListView.Width - 25);
+    }
+
+    protected virtual void itemsListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if ((itemsListView.SelectedItems.Count > 0) && !ItemList.IsReadOnly) {
+          foreach (ListViewItem item in itemsListView.SelectedItems)
+            ItemList.RemoveAt(item.Index);
+        }
+      }
+    }
+
+    protected virtual void itemsListView_DoubleClick(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        T item = (T)itemsListView.SelectedItems[0].Tag;
+        IView view = MainFormManager.CreateDefaultView(item);
+        if (view != null) MainFormManager.MainForm.ShowView(view);
+      }
+    }
+
+    protected virtual void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      ListViewItem listViewItem = (ListViewItem)e.Item;
+      T item = (T)listViewItem.Tag;
+      DataObject data = new DataObject();
+      data.SetData("Type", item.GetType());
+      data.SetData("Value", item);
+      if (ItemList.IsReadOnly) {
+        DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+      } else {
+        DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
+        if ((result & DragDropEffects.Move) == DragDropEffects.Move)
+          ItemList.RemoveAt(listViewItem.Index);
+      }
+    }
+    protected virtual void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((!ItemList.IsReadOnly) && (type != null) && (typeof(T).IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
+        else e.Effect = DragDropEffects.Link;
+      }
+    }
+    protected virtual void itemsListView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        T item = e.Data.GetData("Value") as T;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (T)item.Clone();
+
+        Point p = itemsListView.PointToClient(new Point(e.X, e.Y));
+        ListViewItem listViewItem = itemsListView.GetItemAt(p.X, p.Y);
+        if (listViewItem != null) ItemList.Insert(listViewItem.Index, item);
+        else ItemList.Add(item);
+      }
+    }
+    #endregion
+
+    #region Button Events
+    protected virtual void addButton_Click(object sender, EventArgs e) {
+      T item = CreateItem();
+      if (item != null)
+        ItemList.Add(item);
+    }
+    protected virtual void moveUpButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        int index = itemsListView.SelectedIndices[0];
+        T item = ItemList[index - 1];
+        ItemList[index - 1] = ItemList[index];
+        itemsListView.Items[index].Selected = false;
+        itemsListView.Items[index - 1].Selected = true;
+        ItemList[index] = item;
+      }
+    }
+    protected virtual void moveDownButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        int index = itemsListView.SelectedIndices[0];
+        T item = ItemList[index + 1];
+        ItemList[index + 1] = ItemList[index];
+        itemsListView.Items[index].Selected = false;
+        itemsListView.Items[index + 1].Selected = true;
+        ItemList[index] = item;
+      }
+    }
+    protected virtual void removeButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in itemsListView.SelectedItems)
+          ItemList.RemoveAt(item.Index);
+      }
+    }
+    #endregion
+
+    #region NamedItemCollection Events
+    private void ItemList_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsAdded), sender, e);
+      else
+        foreach (IndexedItem<T> item in e.Items)
+          InsertListViewItem(item.Index, CreateListViewItem(item.Value));
+    }
+    private void ItemList_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsRemoved), sender, e);
+      else {
+        List<ListViewItem> listViewItems = new List<ListViewItem>();
+        foreach (IndexedItem<T> item in e.Items)
+          listViewItems.Add(itemsListView.Items[item.Index]);
+        foreach (ListViewItem listViewItem in listViewItems)
+          RemoveListViewItem(listViewItem);
+      }
+    }
+    private void ItemList_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsReplaced), sender, e);
+      else {
+        int[] selected = new int[itemsListView.SelectedIndices.Count];
+        itemsListView.SelectedIndices.CopyTo(selected, 0);
+
+        List<ListViewItem> listViewItems = new List<ListViewItem>();
+        foreach (IndexedItem<T> item in e.OldItems)
+          listViewItems.Add(itemsListView.Items[item.Index]);
+        foreach (ListViewItem listViewItem in listViewItems)
+          RemoveListViewItem(listViewItem);
+
+        foreach (IndexedItem<T> item in e.Items)
+          InsertListViewItem(item.Index, CreateListViewItem(item.Value));
+
+        for (int i = 0; i < selected.Length; i++)
+          itemsListView.Items[selected[i]].Selected = true;
+      }
+    }
+    private void ItemList_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_ItemsMoved), sender, e);
+      else {
+        foreach (IndexedItem<T> item in e.Items) {
+          ListViewItem listViewItem = itemsListView.Items[item.Index];
+          listViewItem.Tag = item.Value;
+          UpdateListViewItem(listViewItem);
+        }
+      }
+    }
+    private void ItemList_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(ItemList_CollectionReset), sender, e);
+      else {
+        List<ListViewItem> listViewItems = new List<ListViewItem>();
+        foreach (IndexedItem<T> item in e.OldItems)
+          listViewItems.Add(itemsListView.Items[item.Index]);
+        foreach (ListViewItem listViewItem in listViewItems)
+          RemoveListViewItem(listViewItem);
+
+        foreach (IndexedItem<T> item in e.Items)
+          InsertListViewItem(item.Index, CreateListViewItem(item.Value));
+      }
+    }
+    #endregion
+
+    #region Item Events
+    private void Item_Changed(object sender, ChangedEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new ChangedEventHandler(Item_Changed), sender, e);
+      else {
+        T item = (T)sender;
+        foreach (ListViewItem listViewItem in itemsListView.Items) {
+          if (((T)listViewItem.Tag) == item)
+            UpdateListViewItem(listViewItem);
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.Designer.cs	(revision 2655)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Windows.Forms;
+using System.ComponentModel;
+
+namespace HeuristicLab.Core.Views {
+  partial class ItemSetView<T> {
+    /// <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) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // ItemSetView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "ItemSetView";
+      this.Size = new System.Drawing.Size(532, 383);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemSetView.cs	(revision 2655)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  public partial class ItemSetView<T> : ItemCollectionView<T> where T : class, IItem {
+    public IObservableSet<T> ItemSet {
+      get { return (IObservableSet<T>)Object; }
+      set { base.Object = value; }
+    }
+
+    private Dictionary<T, ListViewItem> listViewItemDictionary;
+    protected Dictionary<T, ListViewItem> ListViewItemDictionary {
+      get { return listViewItemDictionary; }
+    }
+
+    public ItemSetView() {
+      listViewItemDictionary = new Dictionary<T, ListViewItem>();
+      InitializeComponent();
+      Caption = "Item Set";
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      Caption = "Item Set";
+      if (ItemSet != null)
+        Caption += " (" + ItemCollection.GetType().Name + ")";
+    }
+
+    protected override void AddListViewItem(ListViewItem listViewItem) {
+      ListViewItemDictionary.Add((T)listViewItem.Tag, listViewItem);
+      base.AddListViewItem(listViewItem);
+    }
+    protected override void RemoveListViewItem(ListViewItem listViewItem) {
+      base.RemoveListViewItem(listViewItem);
+      ListViewItemDictionary.Remove((T)listViewItem.Tag);
+    }
+    protected override IEnumerable<ListViewItem> GetListViewItemsForItem(T item) {
+      return new ListViewItem[] { listViewItemDictionary[item] };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.Designer.cs	(revision 2655)
@@ -34,8 +34,6 @@
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
     protected override void Dispose(bool disposing) {
-      if (Item != null)
-        RemoveItemEvents();
-      if (disposing && (components != null)) {
-        components.Dispose();
+      if (disposing) {
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.cs	(revision 2655)
@@ -34,25 +34,8 @@
   /// Base class for all visual representations.
   /// </summary>
-  public partial class ItemViewBase : ViewBase, IItemView {
-    private IItem myItem;
-    /// <summary>
-    /// Gets or sets the item to represent visually.
-    /// </summary>
-    /// <remarks>Calls <see cref="OnItemChanged"/>, <see cref="Refresh"/>, 
-    /// <see cref="RemoveItemEvents"/> (if the current item is not null) and 
-    /// <see cref="AddItemEvents"/> (if the new item is not null) in the setter.</remarks>
+  public partial class ItemViewBase : ObjectViewBase {
     public IItem Item {
-      get { return myItem; }
-      protected set {
-        if (value != myItem) {
-          if (myItem != null)
-            RemoveItemEvents();
-          myItem = value;
-          if (myItem != null)
-            AddItemEvents();
-          OnItemChanged();
-          Refresh();
-        }
-      }
+      get { return (IItem)base.Object; }
+      set { base.Object = value; }
     }
 
@@ -65,77 +48,10 @@
     }
 
-    /// <summary>
-    /// Removes the eventhandlers from the current instance.
-    /// </summary>
-    protected virtual void RemoveItemEvents() { }
-    /// <summary>
-    /// Adds eventhandlers to the current instance.
-    /// </summary>
-    protected virtual void AddItemEvents() { }
-
-    /// <summary>
-    /// Refreshes the current view.
-    /// </summary>
-    /// <remarks>Creates a new <see cref="MethodInvoker"/> if an invoke is required 
-    /// (see <see cref="Control.InvokeRequired"/>.<br/>
-    /// Otherwise calls <see cref="UpdateControls"/> and <see cref="Control.Refresh"/> of base class 
-    /// <see cref="System.Windows.Forms.UserControl"/>.</remarks>
-    public override void Refresh() {
-      if (InvokeRequired) {
-        Invoke(new Action(Refresh));
+    protected override void OnObjectChanged() {
+      if (Item == null) {
+        Caption = "View";
       } else {
-        UpdateControls();
-        base.Refresh();
+        Caption = Item.ItemName;
       }
-    }
-    /// <summary>
-    /// Updates the controls with the latest values of the model.
-    /// </summary>
-    protected virtual void UpdateControls() {
-      if (Item == null)
-        Caption = "View";
-      else
-        Caption = Item.Name;
-      
-    }
-
-    /// <summary>
-    /// Occurs when the current item was changed.
-    /// </summary>
-    public event EventHandler ItemChanged;
-    /// <summary>
-    /// Fires a new <c>ItemChanged</c> event.
-    /// </summary>
-    protected virtual void OnItemChanged() {
-      if (ItemChanged != null)
-        ItemChanged(this, new EventArgs());
-    }
-
-    /// <summary>
-    /// Asynchron call of GUI updating.
-    /// </summary>
-    /// <param name="method">The delegate to invoke.</param>
-    protected new void Invoke(Delegate method) {
-      // enforce context switch to improve GUI response time
-      System.Threading.Thread.Sleep(0);
-
-      // prevent blocking of worker thread in Invoke, if the control is disposed
-      IAsyncResult result = BeginInvoke(method);
-      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
-      if (!IsDisposed) EndInvoke(result);
-    }
-    /// <summary>
-    /// Asynchron call of GUI updating.
-    /// </summary>
-    /// <param name="method">The delegate to invoke.</param>
-    /// <param name="args">The invoke arguments.</param>
-    protected new void Invoke(Delegate method, params object[] args) {
-      // enforce context switch to improve GUI response time
-      System.Threading.Thread.Sleep(0);
-
-      // prevent blocking of worker thread in Invoke, if the control is disposed
-      IAsyncResult result = BeginInvoke(method, args);
-      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
-      if (!IsDisposed) EndInvoke(result);
     }
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.Designer.cs	(revision 2655)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class NamedItemBaseView {
+    /// <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) {
+        if (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.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 3);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 0;
+      this.nameLabel.Text = "&Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(72, 0);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(279, 20);
+      this.nameTextBox.TabIndex = 1;
+      this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 29);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 2;
+      this.descriptionLabel.Text = "&Description:";
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(72, 26);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(279, 62);
+      this.descriptionTextBox.TabIndex = 3;
+      this.descriptionTextBox.Validated += new System.EventHandler(this.descriptionTextBox_Validated);
+      // 
+      // NamedItemBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.descriptionLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Name = "NamedItemBaseView";
+      this.Size = new System.Drawing.Size(351, 88);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox nameTextBox;
+    protected System.Windows.Forms.Label nameLabel;
+    protected System.Windows.Forms.Label descriptionLabel;
+    protected System.Windows.Forms.TextBox descriptionTextBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.cs	(revision 2655)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Variable"/>.
+  /// </summary>
+  [Content(typeof(NamedItemBase), true)]
+  public partial class NamedItemBaseView : ItemViewBase {
+    public NamedItemBase NamedItemBase {
+      get { return (NamedItemBase)Item; }
+      set { base.Item = value; }
+    }
+
+    public NamedItemBaseView() {
+      InitializeComponent();
+      Caption = "NamedItem";
+    }
+    public NamedItemBaseView(NamedItemBase namedItemBase)
+      : this() {
+      NamedItemBase = namedItemBase;
+    }
+
+    protected override void DeregisterObjectEvents() {
+      NamedItemBase.NameChanged -= new EventHandler(NamedItemBase_NameChanged);
+      NamedItemBase.DescriptionChanged -= new EventHandler(NamedItemBase_DescriptionChanged);
+      base.DeregisterObjectEvents();
+    }
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      NamedItemBase.NameChanged += new EventHandler(NamedItemBase_NameChanged);
+      NamedItemBase.DescriptionChanged += new EventHandler(NamedItemBase_DescriptionChanged);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (NamedItemBase == null) {
+        Caption = "NamedItem";
+        nameTextBox.Text = "-";
+        nameTextBox.ReadOnly = false;
+        nameTextBox.Enabled = false;
+        descriptionTextBox.Text = "";
+        nameTextBox.ReadOnly = false;
+        descriptionTextBox.Enabled = false;
+      } else {
+        Caption = NamedItemBase.Name + " (" + NamedItemBase.GetType().Name + ")";
+        nameTextBox.Text = NamedItemBase.Name;
+        nameTextBox.ReadOnly = !NamedItemBase.CanChangeName;
+        nameTextBox.Enabled = true;
+        descriptionTextBox.Text = NamedItemBase.Description;
+        descriptionTextBox.ReadOnly = !NamedItemBase.CanChangeDescription;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+
+    protected virtual void NamedItemBase_NameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(NamedItemBase_NameChanged), sender, e);
+      else
+        nameTextBox.Text = NamedItemBase.Name;
+    }
+    protected virtual void NamedItemBase_DescriptionChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(NamedItemBase_DescriptionChanged), sender, e);
+      else
+        descriptionTextBox.Text = NamedItemBase.Description;
+    }
+
+    protected virtual void nameTextBox_Validating(object sender, CancelEventArgs e) {
+      if (NamedItemBase.CanChangeName) {
+        string oldName = NamedItemBase.Name;
+        NamedItemBase.Name = nameTextBox.Text;
+
+        // check if variable name was set successfully
+        e.Cancel = !NamedItemBase.Name.Equals(nameTextBox.Text);
+        if (e.Cancel) {
+          MessageBox.Show(this, "\"" + nameTextBox.Text + "\" is not a valid name.", "Invalid Value", MessageBoxButtons.OK, MessageBoxIcon.Error);
+          nameTextBox.Text = oldName;
+          nameTextBox.SelectAll();
+          nameTextBox.Focus();
+        }
+      }
+    }
+    protected virtual void descriptionTextBox_Validated(object sender, EventArgs e) {
+      if (NamedItemBase.CanChangeDescription)
+        NamedItemBase.Description = descriptionTextBox.Text;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.Designer.cs	(revision 2655)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Windows.Forms;
+using System.ComponentModel;
+
+namespace HeuristicLab.Core.Views {
+  partial class NamedItemCollectionView<T> {
+    /// <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) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // NamedItemCollectionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "NamedItemCollectionView";
+      this.Size = new System.Drawing.Size(532, 383);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs	(revision 2655)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  public partial class NamedItemCollectionView<T> : ItemCollectionView<T> where T : class, INamedItem {
+    public IObservableKeyedCollection<string, T> NamedItemCollection {
+      get { return (IObservableKeyedCollection<string, T>)Object; }
+      set { base.Object = value; }
+    }
+
+    private Dictionary<T, ListViewItem> listViewItemDictionary;
+    protected Dictionary<T, ListViewItem> ListViewItemDictionary {
+      get { return listViewItemDictionary; }
+    }
+
+    public NamedItemCollectionView() {
+      listViewItemDictionary = new Dictionary<T, ListViewItem>();
+      InitializeComponent();
+      Caption = "Named Item Collection";
+    }
+
+    protected override void DeregisterObjectEvents() {
+      NamedItemCollection.ItemsReplaced -= new CollectionItemsChangedEventHandler<T>(NamedItemCollection_ItemsReplaced);
+      base.DeregisterObjectEvents();
+    }
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      NamedItemCollection.ItemsReplaced += new CollectionItemsChangedEventHandler<T>(NamedItemCollection_ItemsReplaced);
+    }
+
+    protected override T CreateItem() {
+      T item = base.CreateItem();
+      if (item != null) {
+        item.Name = GetUniqueName(item.Name);
+      }
+      return item;
+    }
+    protected override void AddListViewItem(ListViewItem listViewItem) {
+      ListViewItemDictionary.Add((T)listViewItem.Tag, listViewItem);
+      base.AddListViewItem(listViewItem);
+    }
+    protected override void RemoveListViewItem(ListViewItem listViewItem) {
+      base.RemoveListViewItem(listViewItem);
+      ListViewItemDictionary.Remove((T)listViewItem.Tag);
+    }
+    protected override IEnumerable<ListViewItem> GetListViewItemsForItem(T item) {
+      return new ListViewItem[] { listViewItemDictionary[item] };
+    }
+ 
+    #region ListView Events
+    protected override void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
+      base.itemsListView_DragEnterOver(sender, e);
+      if (e.Effect != DragDropEffects.None) {
+        T item = e.Data.GetData("Value") as T;
+        if ((item == null) || (NamedItemCollection.ContainsKey(item.Name)))
+          e.Effect = DragDropEffects.None;
+      }
+    }
+    #endregion
+
+    #region NamedItemCollection Events
+    private void NamedItemCollection_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(NamedItemCollection_ItemsReplaced), sender, e);
+      else {
+        foreach (T item in e.Items) {
+          foreach (ListViewItem listViewItem in GetListViewItemsForItem(item))
+            UpdateListViewItem(listViewItem);
+        }
+      }
+    }
+    #endregion
+
+    #region Helpers
+    protected string GetUniqueName(string originalName) {
+      if (!NamedItemCollection.ContainsKey(originalName))
+        return originalName;
+      else {
+        string name = null;
+        int index = 0;
+        do {
+          index++;
+          name = originalName + index.ToString();
+        } while (NamedItemCollection.ContainsKey(name));
+        return name;
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.Designer.cs	(revision 2655)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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;
+
+namespace HeuristicLab.Core.Views {
+  partial class ObjectViewBase {
+    /// <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) {
+        if (Object != null) DeregisterObjectEvents();
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.cs	(revision 2655)
@@ -0,0 +1,120 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Xml;
+using System.Windows.Forms;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// Base class for all visual representations.
+  /// </summary>
+  public partial class ObjectViewBase : ViewBase, IObjectView {
+    private object obj;
+    /// <summary>
+    /// Gets or sets the item to represent visually.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemChanged"/>, <see cref="Refresh"/>, 
+    /// <see cref="RemoveItemEvents"/> (if the current item is not null) and 
+    /// <see cref="AddItemEvents"/> (if the new item is not null) in the setter.</remarks>
+    public object Object {
+      get { return obj; }
+      protected set {
+        if (InvokeRequired) {
+          Invoke(new Action<object>(delegate(object o) { Object = o; }), value);
+        } else {
+          if (value != obj) {
+            if (obj != null)
+              DeregisterObjectEvents();
+            obj = value;
+            OnObjectChanged();
+            if (obj != null)
+              RegisterObjectEvents();
+          }
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ViewBase"/> with the caption "View".
+    /// </summary>
+    public ObjectViewBase() {
+      InitializeComponent();
+      Caption = "View";
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the current instance.
+    /// </summary>
+    protected virtual void DeregisterObjectEvents() { }
+    /// <summary>
+    /// Adds eventhandlers to the current instance.
+    /// </summary>
+    protected virtual void RegisterObjectEvents() { }
+
+    /// <summary>
+    /// Occurs when the current item was changed.
+    /// </summary>
+    public event EventHandler ObjectChanged;
+    /// <summary>
+    /// Fires a new <c>ItemChanged</c> event.
+    /// </summary>
+    protected virtual void OnObjectChanged() {
+      Caption = "View";
+      if (ObjectChanged != null)
+        ObjectChanged(this, new EventArgs());
+    }
+
+    /// <summary>
+    /// Asynchron call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    protected new void Invoke(Delegate method) {
+      // enforce context switch to improve GUI response time
+      System.Threading.Thread.Sleep(0);
+
+      // prevent blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method);
+      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
+      if (!IsDisposed) EndInvoke(result);
+    }
+    /// <summary>
+    /// Asynchron call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    /// <param name="args">The invoke arguments.</param>
+    protected new void Invoke(Delegate method, params object[] args) {
+      // enforce context switch to improve GUI response time
+      System.Threading.Thread.Sleep(0);
+
+      // prevent blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method, args);
+      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
+      if (!IsDisposed) EndInvoke(result);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseDescriptionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseDescriptionView.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,84 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Windows.Forms;
-
-namespace HeuristicLab.Core.Views {
-  partial class OperatorBaseDescriptionView {
-    /// <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.descriptionTextBox = new System.Windows.Forms.TextBox();
-      this.SuspendLayout();
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.descriptionTextBox.Location = new System.Drawing.Point(0, 0);
-      this.descriptionTextBox.Multiline = true;
-      this.descriptionTextBox.Name = "descriptionTextBox";
-      this.descriptionTextBox.ReadOnly = true;
-      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.descriptionTextBox.Size = new System.Drawing.Size(423, 333);
-      this.descriptionTextBox.TabIndex = 0;
-      // 
-      // OperatorBaseDescriptionView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.descriptionTextBox);
-      this.Name = "OperatorBaseDescriptionView";
-      this.Size = new System.Drawing.Size(423, 333);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private TextBox descriptionTextBox;
-
-
-
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseDescriptionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseDescriptionView.cs	(revision 2654)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of the description of operators.
-  /// </summary>
-  public partial class OperatorBaseDescriptionView : ItemViewBase {
-    /// <summary>
-    /// Gets or sets the operator whose description should be displayed.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.</remarks>
-    public IOperator Operator {
-      get { return (IOperator)Item; }
-      set { base.Item = value; }
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseDescriptionView"/> with caption "Operator".
-    /// </summary>
-    public OperatorBaseDescriptionView() {
-      InitializeComponent();
-      Caption = "Operator";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseDescriptionView"/> 
-    /// with the operator <paramref name="op"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="OperatorBaseDescriptionView()"/>.</remarks>
-    /// <param name="op">The operator whose description to display.</param>
-    public OperatorBaseDescriptionView(IOperator op)
-      : this() {
-      Operator = op;
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if (Operator == null) {
-        Caption = "Operator";
-        descriptionTextBox.Text = "";
-        descriptionTextBox.Enabled = false;
-      } else {
-        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
-        descriptionTextBox.Text = Operator.Description;
-        descriptionTextBox.Enabled = true;
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseDescriptionView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseDescriptionView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariableInfosView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariableInfosView.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,144 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Windows.Forms;
-
-namespace HeuristicLab.Core.Views {
-  partial class OperatorBaseVariableInfosView {
-    /// <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) {
-      foreach (ListViewItem item in variableInfosListView.Items) {
-        ((IVariableInfo)item.Tag).ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
-      }
-      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.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.variableInfosGroupBox = new System.Windows.Forms.GroupBox();
-      this.variableInfosListView = new System.Windows.Forms.ListView();
-      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
-      this.variableInfoDetailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.variableInfosGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // splitContainer
-      // 
-      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.splitContainer.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer.Name = "splitContainer";
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.variableInfosGroupBox);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.variableInfoDetailsGroupBox);
-      this.splitContainer.Size = new System.Drawing.Size(423, 333);
-      this.splitContainer.SplitterDistance = 203;
-      this.splitContainer.TabIndex = 0;
-      // 
-      // variableInfosGroupBox
-      // 
-      this.variableInfosGroupBox.Controls.Add(this.variableInfosListView);
-      this.variableInfosGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variableInfosGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.variableInfosGroupBox.Name = "variableInfosGroupBox";
-      this.variableInfosGroupBox.Size = new System.Drawing.Size(203, 333);
-      this.variableInfosGroupBox.TabIndex = 0;
-      this.variableInfosGroupBox.TabStop = false;
-      this.variableInfosGroupBox.Text = "&Variable Infos";
-      // 
-      // variableInfosListView
-      // 
-      this.variableInfosListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.columnHeader1});
-      this.variableInfosListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variableInfosListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
-      this.variableInfosListView.HideSelection = false;
-      this.variableInfosListView.Location = new System.Drawing.Point(3, 16);
-      this.variableInfosListView.Name = "variableInfosListView";
-      this.variableInfosListView.Size = new System.Drawing.Size(197, 314);
-      this.variableInfosListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
-      this.variableInfosListView.TabIndex = 0;
-      this.variableInfosListView.UseCompatibleStateImageBehavior = false;
-      this.variableInfosListView.View = System.Windows.Forms.View.Details;
-      this.variableInfosListView.SelectedIndexChanged += new System.EventHandler(this.variableInfosListView_SelectedIndexChanged);
-      this.variableInfosListView.SizeChanged += new System.EventHandler(this.variableInfosListView_SizeChanged);
-      // 
-      // variableInfoDetailsGroupBox
-      // 
-      this.variableInfoDetailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variableInfoDetailsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.variableInfoDetailsGroupBox.Name = "variableInfoDetailsGroupBox";
-      this.variableInfoDetailsGroupBox.Size = new System.Drawing.Size(216, 333);
-      this.variableInfoDetailsGroupBox.TabIndex = 0;
-      this.variableInfoDetailsGroupBox.TabStop = false;
-      this.variableInfoDetailsGroupBox.Text = "&Details";
-      // 
-      // OperatorBaseVariableInfosView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.splitContainer);
-      this.Name = "OperatorBaseVariableInfosView";
-      this.Size = new System.Drawing.Size(423, 333);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.ResumeLayout(false);
-      this.variableInfosGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.ColumnHeader columnHeader1;
-    protected SplitContainer splitContainer;
-    protected GroupBox variableInfosGroupBox;
-    protected ListView variableInfosListView;
-    protected GroupBox variableInfoDetailsGroupBox;
-
-
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariableInfosView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariableInfosView.cs	(revision 2654)
+++ 	(revision )
@@ -1,190 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Common;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of the information of the variables of an operator.
-  /// </summary>
-  public partial class OperatorBaseVariableInfosView : ItemViewBase {
-    /// <summary>
-    /// Gets or sets the operator whose variable infos should be represented visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public IOperator Operator {
-      get { return (IOperator)Item; }
-      set { base.Item = value; }
-    }
-    /// <summary>
-    /// Gets all selected variable infos.
-    /// <note type="caution"> Variable infos are returned read-only!</note>
-    /// </summary>
-    public ICollection<IVariableInfo> SelectedVariableInfos {
-      get {
-        List<IVariableInfo> selected = new List<IVariableInfo>();
-        foreach (ListViewItem item in variableInfosListView.SelectedItems)
-          selected.Add((IVariableInfo)item.Tag);
-        return selected.AsReadOnly();
-      }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseVariableInfosView"/> with caption "Operator".
-    /// </summary>
-    public OperatorBaseVariableInfosView() {
-      InitializeComponent();
-      variableInfosListView.Columns[0].Width = Math.Max(0, variableInfosListView.Width - 25);
-      Caption = "Operator";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseVariableInfosView"/> with the given operator
-    /// <paramref name="op"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="OperatorBaseVariableInfosView()"/>.</remarks>
-    /// <param name="op">The operator whose variable infos should be displayed.</param>
-    public OperatorBaseVariableInfosView(IOperator op)
-      : this() {
-      Operator = op;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IOperator"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      Operator.VariableInfoAdded -= new EventHandler<EventArgs<IVariableInfo>>(OperatorBase_VariableInfoAdded);
-      Operator.VariableInfoRemoved -= new EventHandler<EventArgs<IVariableInfo>>(OperatorBase_VariableInfoRemoved);
-      base.RemoveItemEvents();
-    }
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IOperator"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      Operator.VariableInfoAdded += new EventHandler<EventArgs<IVariableInfo>>(OperatorBase_VariableInfoAdded);
-      Operator.VariableInfoRemoved += new EventHandler<EventArgs<IVariableInfo>>(OperatorBase_VariableInfoRemoved);
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      variableInfoDetailsGroupBox.Controls.Clear();
-      if (Operator == null) {
-        Caption = "Operator";
-        variableInfosListView.Enabled = false;
-        variableInfoDetailsGroupBox.Enabled = false;
-      } else {
-        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
-        variableInfosListView.Enabled = true;
-        foreach (ListViewItem item in variableInfosListView.Items) {
-          ((IVariableInfo)item.Tag).ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
-        }
-        variableInfosListView.Items.Clear();
-        foreach (IVariableInfo variableInfo in Operator.VariableInfos) {
-          ListViewItem item = new ListViewItem();
-          item.Text = variableInfo.ActualName;
-          item.Tag = variableInfo;
-          variableInfosListView.Items.Add(item);
-          variableInfo.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
-        }
-        if (variableInfosListView.Items.Count > 0)
-          variableInfosListView.SelectedIndices.Add(0);
-      }
-    }
-
-    private void variableInfosListView_SelectedIndexChanged(object sender, EventArgs e) {
-      if (variableInfoDetailsGroupBox.Controls.Count > 0)
-        variableInfoDetailsGroupBox.Controls[0].Dispose();
-      variableInfoDetailsGroupBox.Controls.Clear();
-      variableInfoDetailsGroupBox.Enabled = false;
-      if (variableInfosListView.SelectedItems.Count == 1) {
-        IVariableInfo variableInfo = (IVariableInfo)variableInfosListView.SelectedItems[0].Tag;
-        Control control = (Control)MainFormManager.CreateDefaultView(variableInfo);
-        variableInfoDetailsGroupBox.Controls.Add(control);
-        control.Dock = DockStyle.Fill;
-        variableInfoDetailsGroupBox.Enabled = true;
-      }
-      OnSelectedVariableInfosChanged();
-    }
-
-    /// <summary>
-    /// Occurs when the variables were changed, whose infos should be displayed.
-    /// </summary>
-    public event EventHandler SelectedVariableInfosChanged;
-    /// <summary>
-    /// Fires a new <c>SelectedVariableInfosChanged</c>.
-    /// </summary>
-    protected virtual void OnSelectedVariableInfosChanged() {
-      if (SelectedVariableInfosChanged != null)
-        SelectedVariableInfosChanged(this, new EventArgs());
-    }
-
-    #region Size Changed Events
-    private void variableInfosListView_SizeChanged(object sender, EventArgs e) {
-      if (variableInfosListView.Columns.Count > 0)
-        variableInfosListView.Columns[0].Width = Math.Max(0, variableInfosListView.Width - 25);
-    }
-    #endregion
-
-    #region VariableInfo Events
-    private void VariableInfo_ActualNameChanged(object sender, EventArgs e) {
-      IVariableInfo variableInfo = (IVariableInfo)sender;
-      foreach (ListViewItem item in variableInfosListView.Items) {
-        if (item.Tag == variableInfo)
-          item.Text = variableInfo.ActualName;
-      }
-    }
-    #endregion
-
-    #region OperatorBase Events
-    private void OperatorBase_VariableInfoAdded(object sender, EventArgs<IVariableInfo> e) {
-      ListViewItem item = new ListViewItem();
-      item.Text = e.Value.ActualName;
-      item.Tag = e.Value;
-      variableInfosListView.Items.Add(item);
-      e.Value.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
-    }
-    private void OperatorBase_VariableInfoRemoved(object sender, EventArgs<IVariableInfo> e) {
-      ListViewItem itemToDelete = null;
-      foreach (ListViewItem item in variableInfosListView.Items) {
-        if (item.Tag == e.Value)
-          itemToDelete = item;
-      }
-      e.Value.ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
-      variableInfosListView.Items.Remove(itemToDelete);
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariableInfosView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariableInfosView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariablesView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariablesView.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,177 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Windows.Forms;
-
-namespace HeuristicLab.Core.Views {
-  partial class OperatorBaseVariablesView {
-    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
-      foreach (ListViewItem item in variablesListView.Items) {
-        ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
-      }
-      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.removeVariableButton = new System.Windows.Forms.Button();
-      this.addVariableButton = new System.Windows.Forms.Button();
-      this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.variablesGroupBox = new System.Windows.Forms.GroupBox();
-      this.variablesListView = new System.Windows.Forms.ListView();
-      this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
-      this.variableDetailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.variablesGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // removeVariableButton
-      // 
-      this.removeVariableButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeVariableButton.Enabled = false;
-      this.removeVariableButton.Location = new System.Drawing.Point(81, 310);
-      this.removeVariableButton.Name = "removeVariableButton";
-      this.removeVariableButton.Size = new System.Drawing.Size(75, 23);
-      this.removeVariableButton.TabIndex = 2;
-      this.removeVariableButton.Text = "&Remove";
-      this.removeVariableButton.UseVisualStyleBackColor = true;
-      this.removeVariableButton.Click += new System.EventHandler(this.removeVariableButton_Click);
-      // 
-      // addVariableButton
-      // 
-      this.addVariableButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addVariableButton.Location = new System.Drawing.Point(0, 310);
-      this.addVariableButton.Name = "addVariableButton";
-      this.addVariableButton.Size = new System.Drawing.Size(75, 23);
-      this.addVariableButton.TabIndex = 1;
-      this.addVariableButton.Text = "&Add...";
-      this.addVariableButton.UseVisualStyleBackColor = true;
-      this.addVariableButton.Click += new System.EventHandler(this.addVariableButton_Click);
-      // 
-      // splitContainer
-      // 
-      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer.Name = "splitContainer";
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.variablesGroupBox);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.variableDetailsGroupBox);
-      this.splitContainer.Size = new System.Drawing.Size(423, 304);
-      this.splitContainer.SplitterDistance = 212;
-      this.splitContainer.TabIndex = 0;
-      // 
-      // variablesGroupBox
-      // 
-      this.variablesGroupBox.Controls.Add(this.variablesListView);
-      this.variablesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variablesGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.variablesGroupBox.Name = "variablesGroupBox";
-      this.variablesGroupBox.Size = new System.Drawing.Size(212, 304);
-      this.variablesGroupBox.TabIndex = 0;
-      this.variablesGroupBox.TabStop = false;
-      this.variablesGroupBox.Text = "&Variables";
-      // 
-      // variablesListView
-      // 
-      this.variablesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.columnHeader2});
-      this.variablesListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variablesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
-      this.variablesListView.HideSelection = false;
-      this.variablesListView.Location = new System.Drawing.Point(3, 16);
-      this.variablesListView.Name = "variablesListView";
-      this.variablesListView.Size = new System.Drawing.Size(206, 285);
-      this.variablesListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
-      this.variablesListView.TabIndex = 0;
-      this.variablesListView.UseCompatibleStateImageBehavior = false;
-      this.variablesListView.View = System.Windows.Forms.View.Details;
-      this.variablesListView.SelectedIndexChanged += new System.EventHandler(this.variablesListView_SelectedIndexChanged);
-      this.variablesListView.SizeChanged += new System.EventHandler(this.variablesListView_SizeChanged);
-      this.variablesListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.variablesListView_KeyDown);
-      // 
-      // variableDetailsGroupBox
-      // 
-      this.variableDetailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variableDetailsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.variableDetailsGroupBox.Name = "variableDetailsGroupBox";
-      this.variableDetailsGroupBox.Size = new System.Drawing.Size(207, 304);
-      this.variableDetailsGroupBox.TabIndex = 0;
-      this.variableDetailsGroupBox.TabStop = false;
-      this.variableDetailsGroupBox.Text = "&Details";
-      // 
-      // OperatorBaseVariablesView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.splitContainer);
-      this.Controls.Add(this.removeVariableButton);
-      this.Controls.Add(this.addVariableButton);
-      this.Name = "OperatorBaseVariablesView";
-      this.Size = new System.Drawing.Size(423, 333);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.ResumeLayout(false);
-      this.variablesGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private ColumnHeader columnHeader2;
-    protected SplitContainer splitContainer;
-    protected GroupBox variablesGroupBox;
-    protected ListView variablesListView;
-    protected GroupBox variableDetailsGroupBox;
-    protected Button removeVariableButton;
-    protected Button addVariableButton;
-
-
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariablesView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariablesView.cs	(revision 2654)
+++ 	(revision )
@@ -1,221 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Common;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of the variables of an operator.
-  /// </summary>
-  public partial class OperatorBaseVariablesView : ItemViewBase {
-    private ChooseItemDialog chooseItemDialog;
-
-    /// <summary>
-    /// Gets or sets the operator whose variables to represent.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public IOperator Operator {
-      get { return (IOperator)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseVariablesView"/> with caption "Operator".
-    /// </summary>
-    public OperatorBaseVariablesView() {
-      InitializeComponent();
-      variablesListView.Columns[0].Width = Math.Max(0, variablesListView.Width - 25);
-      Caption = "Operator";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseVariablesView"/> with the given 
-    /// operator <paramref name="op"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="OperatorBaseVariablesView"/>.</remarks>
-    /// <param name="op">The operator whose variables should be represented visually.</param>
-    public OperatorBaseVariablesView(IOperator op)
-      : this() {
-      Operator = op;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the unterlying <see cref="IOperator"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      Operator.VariableAdded -= new EventHandler<EventArgs<IVariable>>(OperatorBase_VariableAdded);
-      Operator.VariableRemoved -= new EventHandler<EventArgs<IVariable>>(OperatorBase_VariableRemoved);
-      base.RemoveItemEvents();
-    }
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IOperator"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      Operator.VariableAdded += new EventHandler<EventArgs<IVariable>>(OperatorBase_VariableAdded);
-      Operator.VariableRemoved += new EventHandler<EventArgs<IVariable>>(OperatorBase_VariableRemoved);
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      variableDetailsGroupBox.Controls.Clear();
-      if (Operator == null) {
-        Caption = "Operator";
-        variablesListView.Enabled = false;
-        variableDetailsGroupBox.Enabled = false;
-        removeVariableButton.Enabled = false;
-      } else {
-        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
-        variablesListView.Enabled = true;
-        foreach (ListViewItem item in variablesListView.Items) {
-          ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
-        }
-        variablesListView.Items.Clear();
-        foreach (IVariable variable in Operator.Variables) {
-          ListViewItem item = new ListViewItem();
-          item.Text = variable.Name;
-          item.Tag = variable;
-          variablesListView.Items.Add(item);
-          variable.NameChanged += new EventHandler(Variable_NameChanged);
-        }
-        if (variablesListView.Items.Count > 0)
-          variablesListView.SelectedIndices.Add(0);
-      }
-    }
-
-    private void variablesListView_SelectedIndexChanged(object sender, EventArgs e) {
-      if (variableDetailsGroupBox.Controls.Count > 0)
-        variableDetailsGroupBox.Controls[0].Dispose();
-      variableDetailsGroupBox.Controls.Clear();
-      variableDetailsGroupBox.Enabled = false;
-      removeVariableButton.Enabled = false;
-      if (variablesListView.SelectedItems.Count > 0) {
-        removeVariableButton.Enabled = true;
-      }
-      if (variablesListView.SelectedItems.Count == 1) {
-        IVariable variable = (IVariable)variablesListView.SelectedItems[0].Tag;
-        Control editor = (Control)MainFormManager.CreateDefaultView(variable);
-        variableDetailsGroupBox.Controls.Add(editor);
-        editor.Dock = DockStyle.Fill;
-        variableDetailsGroupBox.Enabled = true;
-      }
-    }
-
-    #region Size Changed Events
-    private void variablesListView_SizeChanged(object sender, EventArgs e) {
-      if (variablesListView.Columns.Count > 0)
-        variablesListView.Columns[0].Width = Math.Max(0, variablesListView.Width - 25);
-    }
-    #endregion
-
-    #region Key Events
-    private void variablesListView_KeyDown(object sender, KeyEventArgs e) {
-      if (e.KeyCode == Keys.Delete) {
-        if (variablesListView.SelectedItems.Count > 0) {
-          foreach (ListViewItem item in variablesListView.SelectedItems)
-            Operator.RemoveVariable(((IVariable)item.Tag).Name);
-        }
-      }
-    }
-    #endregion
-
-    #region Button Events
-    private void addVariableButton_Click(object sender, EventArgs e) {
-      if (chooseItemDialog == null) {
-        chooseItemDialog = new ChooseItemDialog();
-        chooseItemDialog.Caption = "Add Variable";
-      }
-      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK) {
-        IVariable newVariable = new Variable(chooseItemDialog.Item.GetType().Name, chooseItemDialog.Item);
-        int index = 1;
-        bool valid = true;
-        string name = null;
-        do {
-          valid = true;
-          name = newVariable.Name + " (" + index.ToString() + ")";
-          foreach (IVariable existingVariable in Operator.Variables) {
-            if (existingVariable.Name == name) {
-              valid = false;
-              index++;
-            }
-          }
-        } while (!valid);
-        newVariable.Name = name;
-        Operator.AddVariable(newVariable);
-      }
-    }
-    private void removeVariableButton_Click(object sender, EventArgs e) {
-      if (variablesListView.SelectedItems.Count > 0) {
-        foreach (ListViewItem item in variablesListView.SelectedItems)
-          Operator.RemoveVariable(((IVariable)item.Tag).Name);
-      }
-    }
-    #endregion
-
-    #region Variable Events
-    private void Variable_NameChanged(object sender, EventArgs e) {
-      IVariable variable = (IVariable)sender;
-      foreach (ListViewItem item in variablesListView.Items) {
-        if (item.Tag == variable)
-          item.Text = variable.Name;
-      }
-    }
-    #endregion
-
-    #region OperatorBase Events
-    private void OperatorBase_VariableAdded(object sender, EventArgs<IVariable> e) {
-      ListViewItem item = new ListViewItem();
-      item.Text = e.Value.Name;
-      item.Tag = e.Value;
-      variablesListView.Items.Add(item);
-      // select the new item
-      foreach(ListViewItem oldSelected in variablesListView.SelectedItems) {
-        oldSelected.Selected = false;
-      }
-      item.Selected = true;
-      e.Value.NameChanged += new EventHandler(Variable_NameChanged);
-    }
-    private void OperatorBase_VariableRemoved(object sender, EventArgs<IVariable> e) {
-      ListViewItem itemToDelete = null;
-      foreach (ListViewItem item in variablesListView.Items) {
-        if (item.Tag == e.Value)
-          itemToDelete = item;
-      }
-      e.Value.NameChanged -= new EventHandler(Variable_NameChanged);
-      variablesListView.Items.Remove(itemToDelete);
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariablesView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseVariablesView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.Designer.cs	(revision 2655)
@@ -20,7 +20,4 @@
 #endregion
 
-using System;
-using System.Windows.Forms;
-
 namespace HeuristicLab.Core.Views {
   partial class OperatorBaseView {
@@ -35,6 +32,6 @@
     /// <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();
+      if (disposing) {
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
@@ -48,92 +45,29 @@
     /// </summary>
     private void InitializeComponent() {
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
-      this.operatorBaseVariableInfosView = new HeuristicLab.Core.Views.OperatorBaseVariableInfosView();
-      this.variablesTabPage = new System.Windows.Forms.TabPage();
-      this.operatorBaseVariablesView = new HeuristicLab.Core.Views.OperatorBaseVariablesView();
-      this.descriptionTabPage = new System.Windows.Forms.TabPage();
-      this.operatorBaseDescriptionView = new HeuristicLab.Core.Views.OperatorBaseDescriptionView();
-      this.tabControl.SuspendLayout();
-      this.variableInfosTabPage.SuspendLayout();
-      this.variablesTabPage.SuspendLayout();
-      this.descriptionTabPage.SuspendLayout();
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
       this.SuspendLayout();
       // 
-      // tabControl
+      // nameTextBox
       // 
-      this.tabControl.Controls.Add(this.variableInfosTabPage);
-      this.tabControl.Controls.Add(this.variablesTabPage);
-      this.tabControl.Controls.Add(this.descriptionTabPage);
-      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tabControl.Location = new System.Drawing.Point(0, 0);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(423, 333);
-      this.tabControl.TabIndex = 0;
+      this.nameTextBox.Size = new System.Drawing.Size(418, 20);
       // 
-      // variableInfosTabPage
+      // descriptionTextBox
       // 
-      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
-      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
-      this.variableInfosTabPage.Name = "variableInfosTabPage";
-      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.variableInfosTabPage.Size = new System.Drawing.Size(415, 307);
-      this.variableInfosTabPage.TabIndex = 0;
-      this.variableInfosTabPage.Text = "Variable Infos";
-      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Size = new System.Drawing.Size(418, 90);
       // 
-      // operatorBaseVariableInfosView
+      // parameterCollectionView
       // 
-      this.operatorBaseVariableInfosView.Caption = "Operator";
-      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
-      this.operatorBaseVariableInfosView.Operator = null;
-      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(409, 301);
-      this.operatorBaseVariableInfosView.TabIndex = 0;
-      // 
-      // variablesTabPage
-      // 
-      this.variablesTabPage.Controls.Add(this.operatorBaseVariablesView);
-      this.variablesTabPage.Location = new System.Drawing.Point(4, 22);
-      this.variablesTabPage.Name = "variablesTabPage";
-      this.variablesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.variablesTabPage.Size = new System.Drawing.Size(415, 307);
-      this.variablesTabPage.TabIndex = 1;
-      this.variablesTabPage.Text = "Local Variables";
-      this.variablesTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorBaseVariablesView
-      // 
-      this.operatorBaseVariablesView.Caption = "Operator";
-      this.operatorBaseVariablesView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorBaseVariablesView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseVariablesView.Name = "operatorBaseVariablesView";
-      this.operatorBaseVariablesView.Operator = null;
-      this.operatorBaseVariablesView.Size = new System.Drawing.Size(409, 301);
-      this.operatorBaseVariablesView.TabIndex = 0;
-      // 
-      // descriptionTabPage
-      // 
-      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
-      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
-      this.descriptionTabPage.Name = "descriptionTabPage";
-      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.descriptionTabPage.Size = new System.Drawing.Size(415, 307);
-      this.descriptionTabPage.TabIndex = 3;
-      this.descriptionTabPage.Text = "Description";
-      this.descriptionTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorBaseDescriptionView
-      // 
-      this.operatorBaseDescriptionView.Caption = "Operator";
-      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorBaseDescriptionView.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
-      this.operatorBaseDescriptionView.Operator = null;
-      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(409, 301);
-      this.operatorBaseDescriptionView.TabIndex = 0;
+      this.parameterCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.parameterCollectionView.Caption = "ParameterCollection";
+      this.parameterCollectionView.ItemCollection = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(0, 122);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.NamedItemCollection = null;
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 231);
+      this.parameterCollectionView.TabIndex = 4;
       // 
       // OperatorBaseView
@@ -141,12 +75,14 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.parameterCollectionView);
       this.Name = "OperatorBaseView";
-      this.Size = new System.Drawing.Size(423, 333);
-      this.tabControl.ResumeLayout(false);
-      this.variableInfosTabPage.ResumeLayout(false);
-      this.variablesTabPage.ResumeLayout(false);
-      this.descriptionTabPage.ResumeLayout(false);
+      this.Size = new System.Drawing.Size(490, 353);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       this.ResumeLayout(false);
+      this.PerformLayout();
 
     }
@@ -154,11 +90,5 @@
     #endregion
 
-    protected TabControl tabControl;
-    protected TabPage variableInfosTabPage;
-    protected TabPage variablesTabPage;
-    protected OperatorBaseVariableInfosView operatorBaseVariableInfosView;
-    protected OperatorBaseVariablesView operatorBaseVariablesView;
-    private TabPage descriptionTabPage;
-    private OperatorBaseDescriptionView operatorBaseDescriptionView;
+    protected ParameterCollectionView parameterCollectionView;
 
 
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.cs	(revision 2655)
@@ -29,70 +29,36 @@
 using HeuristicLab.MainForm;
 
-namespace HeuristicLab.Core.Views {
+namespace HeuristicLab.Core.Views { 
   /// <summary>
-  /// The base class for visual representation of operators (contains description view, variable view, 
-  /// variable info view,...).
+  /// The base class for visual representations of items.
   /// </summary>
   [Content(typeof(OperatorBase), true)]
-  public partial class OperatorBaseView : ItemViewBase {
-    /// <summary>
-    /// Gets or sets the operator to represent visually. 
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public IOperator Operator {
-      get { return (IOperator)Item; }
-      set {base.Item = value; }
+  public partial class OperatorBaseView : NamedItemBaseView {
+    public OperatorBase OperatorBase {
+      get { return (OperatorBase)base.Item; }
+      set { base.Item = value; }
     }
 
     /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseView"/> with caption "Operator".
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
     /// </summary>
     public OperatorBaseView() {
       InitializeComponent();
-      Caption = "Operator";
     }
     /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBaseView"/> 
-    /// with the given operator <paramref name="op"/>. 
+    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
     /// </summary>
-    /// <remarks>Calls <see cref="OperatorBaseView()"/>.</remarks>
-    /// <param name="op">The operator to represent visually.</param>
-    public OperatorBaseView(IOperator op)
+    /// <param name="item">The item that should be displayed.</param>
+    public OperatorBaseView(OperatorBase operatorBase)
       : this() {
-      Operator = op;
+      OperatorBase = operatorBase;
     }
 
-    /// <summary>
-    /// Removes event handlers in all children.
-    /// </summary>
-    protected override void RemoveItemEvents() {
-      operatorBaseVariableInfosView.Operator = null;
-      operatorBaseVariablesView.Operator = null;
-      operatorBaseDescriptionView.Operator = null;
-      base.RemoveItemEvents();
-    }
-    /// <summary>
-    /// Adds event handlers in all children.
-    /// </summary>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      operatorBaseVariableInfosView.Operator = Operator;
-      operatorBaseVariablesView.Operator = Operator;
-      operatorBaseDescriptionView.Operator = Operator;
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if (Operator == null) {
-        Caption = "Operator";
-        tabControl.Enabled = false;
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (OperatorBase == null) {
+        parameterCollectionView.NamedItemCollection = null;
       } else {
-        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
-        tabControl.Enabled = true;
+        parameterCollectionView.NamedItemCollection = ((IOperator)OperatorBase).Parameters;
       }
     }
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorBaseView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.Designer.cs	(revision 2655)
@@ -0,0 +1,33 @@
+﻿namespace HeuristicLab.Core.Views {
+  partial class OperatorCollectionView {
+    /// <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) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.cs	(revision 2655)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  [Content(typeof(OperatorCollection), true)]
+  [Content(typeof(IObservableCollection<IOperator>), true)]
+  public partial class OperatorCollectionView : ItemCollectionView<IOperator> {
+    private TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public OperatorCollectionView() {
+      InitializeComponent();
+      Caption = "Operator Collection";
+      itemsGroupBox.Text = "&Operators";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public OperatorCollectionView(IObservableCollection<IOperator> operatorCollection)
+      : this() {
+      ItemCollection = operatorCollection;
+    }
+
+    protected override IOperator CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.TypeSelector.Caption = "&Available Operators";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IOperator), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+      else
+        return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.Designer.cs	(revision 2655)
@@ -32,11 +32,6 @@
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
     protected override void Dispose(bool disposing) {
-      if (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
-      if (graphTreeView.Nodes.Count > 0) {
-        RemoveTreeNode(graphTreeView.Nodes[0]);
-        graphTreeView.Nodes.Clear();
-      }
-      if (disposing && (components != null)) {
-        components.Dispose();
+      if (disposing) {
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
@@ -51,64 +46,23 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OperatorGraphView));
-      this.operatorsListView = new System.Windows.Forms.ListView();
-      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
       this.operatorsContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
       this.initialOperatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.imageList = new System.Windows.Forms.ImageList(this.components);
-      this.addOperatorButton = new System.Windows.Forms.Button();
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.operatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.operatorsView = new HeuristicLab.Core.Views.OperatorSetView();
+      this.graphView = new HeuristicLab.Core.Views.OperatorTreeView();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
       this.graphGroupBox = new System.Windows.Forms.GroupBox();
-      this.graphTreeView = new System.Windows.Forms.TreeView();
-      this.graphContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
-      this.breakpointToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.viewToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
-      this.removeButton = new System.Windows.Forms.Button();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
       this.operatorsContextMenuStrip.SuspendLayout();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.operatorsGroupBox.SuspendLayout();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
       this.graphGroupBox.SuspendLayout();
-      this.graphContextMenuStrip.SuspendLayout();
       this.SuspendLayout();
-      // 
-      // operatorsListView
-      // 
-      this.operatorsListView.AllowDrop = true;
-      this.operatorsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.columnHeader1});
-      this.operatorsListView.ContextMenuStrip = this.operatorsContextMenuStrip;
-      this.operatorsListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
-      this.operatorsListView.HideSelection = false;
-      this.operatorsListView.LabelEdit = true;
-      this.operatorsListView.Location = new System.Drawing.Point(3, 16);
-      this.operatorsListView.Name = "operatorsListView";
-      this.operatorsListView.Size = new System.Drawing.Size(169, 243);
-      this.operatorsListView.SmallImageList = this.imageList;
-      this.operatorsListView.TabIndex = 0;
-      this.operatorsListView.UseCompatibleStateImageBehavior = false;
-      this.operatorsListView.View = System.Windows.Forms.View.Details;
-      this.operatorsListView.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.operatorsListView_AfterLabelEdit);
-      this.operatorsListView.SelectedIndexChanged += new System.EventHandler(this.operatorsListView_SelectedIndexChanged);
-      this.operatorsListView.SizeChanged += new System.EventHandler(this.operatorsListView_SizeChanged);
-      this.operatorsListView.DoubleClick += new System.EventHandler(this.operatorsListView_DoubleClick);
-      this.operatorsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.operatorsListView_DragDrop);
-      this.operatorsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.operatorsListView_DragEnter);
-      this.operatorsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.operatorsListView_KeyDown);
-      this.operatorsListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorsListView_ItemDrag);
-      this.operatorsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.operatorsListView_DragOver);
       // 
       // operatorsContextMenuStrip
       // 
       this.operatorsContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.initialOperatorToolStripMenuItem,
-            this.viewToolStripMenuItem});
+            this.initialOperatorToolStripMenuItem});
       this.operatorsContextMenuStrip.Name = "operatorsContextMenuStrip";
-      this.operatorsContextMenuStrip.Size = new System.Drawing.Size(159, 48);
+      this.operatorsContextMenuStrip.Size = new System.Drawing.Size(154, 26);
       this.operatorsContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.operatorsContextMenuStrip_Opening);
       // 
@@ -117,133 +71,60 @@
       this.initialOperatorToolStripMenuItem.CheckOnClick = true;
       this.initialOperatorToolStripMenuItem.Name = "initialOperatorToolStripMenuItem";
-      this.initialOperatorToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
+      this.initialOperatorToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
       this.initialOperatorToolStripMenuItem.Text = "&Initial Operator";
       this.initialOperatorToolStripMenuItem.ToolTipText = "Set as initial operator";
       this.initialOperatorToolStripMenuItem.Click += new System.EventHandler(this.initialOperatorToolStripMenuItem_Click);
       // 
-      // viewToolStripMenuItem
+      // operatorsView
       // 
-      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
-      this.viewToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
-      this.viewToolStripMenuItem.Text = "&View...";
-      this.viewToolStripMenuItem.ToolTipText = "View operator";
-      this.viewToolStripMenuItem.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
+      this.operatorsView.Caption = "Operator Set";
+      this.operatorsView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorsView.ItemCollection = null;
+      this.operatorsView.ItemSet = null;
+      this.operatorsView.Location = new System.Drawing.Point(0, 0);
+      this.operatorsView.Name = "operatorsView";
+      this.operatorsView.Size = new System.Drawing.Size(608, 316);
+      this.operatorsView.TabIndex = 0;
+      this.operatorsView.Load += new System.EventHandler(this.operatorsView_Load);
       // 
-      // imageList
+      // graphView
       // 
-      this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
-      this.imageList.TransparentColor = System.Drawing.Color.Magenta;
-      this.imageList.Images.SetKeyName(0, "Operator.bmp");
-      this.imageList.Images.SetKeyName(1, "CombinedOperator.bmp");
-      this.imageList.Images.SetKeyName(2, "ProgrammableOperator.bmp");
+      this.graphView.Caption = "Operator";
+      this.graphView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.graphView.Item = null;
+      this.graphView.Location = new System.Drawing.Point(3, 16);
+      this.graphView.Name = "graphView";
+      this.graphView.Operator = null;
+      this.graphView.Size = new System.Drawing.Size(602, 194);
+      this.graphView.TabIndex = 0;
       // 
-      // addOperatorButton
+      // splitContainer
       // 
-      this.addOperatorButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addOperatorButton.Location = new System.Drawing.Point(0, 268);
-      this.addOperatorButton.Name = "addOperatorButton";
-      this.addOperatorButton.Size = new System.Drawing.Size(75, 23);
-      this.addOperatorButton.TabIndex = 0;
-      this.addOperatorButton.Text = "&Add...";
-      this.addOperatorButton.UseVisualStyleBackColor = true;
-      this.addOperatorButton.Click += new System.EventHandler(this.addOperatorButton_Click);
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
       // 
-      // splitContainer1
+      // splitContainer.Panel1
       // 
-      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer.Panel1.Controls.Add(this.operatorsView);
       // 
-      // splitContainer1.Panel1
+      // splitContainer.Panel2
       // 
-      this.splitContainer1.Panel1.Controls.Add(this.operatorsGroupBox);
-      // 
-      // splitContainer1.Panel2
-      // 
-      this.splitContainer1.Panel2.Controls.Add(this.graphGroupBox);
-      this.splitContainer1.Size = new System.Drawing.Size(475, 262);
-      this.splitContainer1.SplitterDistance = 175;
-      this.splitContainer1.TabIndex = 4;
-      // 
-      // operatorsGroupBox
-      // 
-      this.operatorsGroupBox.Controls.Add(this.operatorsListView);
-      this.operatorsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.operatorsGroupBox.Name = "operatorsGroupBox";
-      this.operatorsGroupBox.Size = new System.Drawing.Size(175, 262);
-      this.operatorsGroupBox.TabIndex = 3;
-      this.operatorsGroupBox.TabStop = false;
-      this.operatorsGroupBox.Text = "&Operators";
+      this.splitContainer.Panel2.Controls.Add(this.graphGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(608, 533);
+      this.splitContainer.SplitterDistance = 316;
+      this.splitContainer.TabIndex = 3;
       // 
       // graphGroupBox
       // 
-      this.graphGroupBox.Controls.Add(this.graphTreeView);
+      this.graphGroupBox.Controls.Add(this.graphView);
       this.graphGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
       this.graphGroupBox.Location = new System.Drawing.Point(0, 0);
       this.graphGroupBox.Name = "graphGroupBox";
-      this.graphGroupBox.Size = new System.Drawing.Size(296, 262);
+      this.graphGroupBox.Size = new System.Drawing.Size(608, 213);
       this.graphGroupBox.TabIndex = 0;
       this.graphGroupBox.TabStop = false;
-      this.graphGroupBox.Text = "&Graph";
-      // 
-      // graphTreeView
-      // 
-      this.graphTreeView.AllowDrop = true;
-      this.graphTreeView.ContextMenuStrip = this.graphContextMenuStrip;
-      this.graphTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.graphTreeView.HideSelection = false;
-      this.graphTreeView.Location = new System.Drawing.Point(3, 16);
-      this.graphTreeView.Name = "graphTreeView";
-      this.graphTreeView.ShowNodeToolTips = true;
-      this.graphTreeView.Size = new System.Drawing.Size(290, 243);
-      this.graphTreeView.TabIndex = 0;
-      this.graphTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.graphTreeView_BeforeExpand);
-      this.graphTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragDrop);
-      this.graphTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.graphTreeView_AfterSelect);
-      this.graphTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.graphTreeView_MouseDown);
-      this.graphTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragEnter);
-      this.graphTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.graphTreeView_KeyDown);
-      this.graphTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.graphTreeView_ItemDrag);
-      this.graphTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragOver);
-      // 
-      // graphContextMenuStrip
-      // 
-      this.graphContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.breakpointToolStripMenuItem,
-            this.viewToolStripMenuItem1});
-      this.graphContextMenuStrip.Name = "graphContextMenuStrip";
-      this.graphContextMenuStrip.Size = new System.Drawing.Size(137, 48);
-      this.graphContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.graphContextMenuStrip_Opening);
-      // 
-      // breakpointToolStripMenuItem
-      // 
-      this.breakpointToolStripMenuItem.CheckOnClick = true;
-      this.breakpointToolStripMenuItem.Name = "breakpointToolStripMenuItem";
-      this.breakpointToolStripMenuItem.Size = new System.Drawing.Size(136, 22);
-      this.breakpointToolStripMenuItem.Text = "&Breakpoint";
-      this.breakpointToolStripMenuItem.ToolTipText = "Halt engine execution after executing the operator";
-      this.breakpointToolStripMenuItem.Click += new System.EventHandler(this.breakpointToolStripMenuItem_Click);
-      // 
-      // viewToolStripMenuItem1
-      // 
-      this.viewToolStripMenuItem1.Name = "viewToolStripMenuItem1";
-      this.viewToolStripMenuItem1.Size = new System.Drawing.Size(136, 22);
-      this.viewToolStripMenuItem1.Text = "&View...";
-      this.viewToolStripMenuItem1.ToolTipText = "View operator";
-      this.viewToolStripMenuItem1.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
-      // 
-      // removeButton
-      // 
-      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeButton.Location = new System.Drawing.Point(81, 268);
-      this.removeButton.Name = "removeButton";
-      this.removeButton.Size = new System.Drawing.Size(75, 23);
-      this.removeButton.TabIndex = 1;
-      this.removeButton.Text = "&Remove";
-      this.removeButton.UseVisualStyleBackColor = true;
-      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      this.graphGroupBox.Text = "Operator &Graph";
       // 
       // OperatorGraphView
@@ -251,16 +132,12 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.splitContainer1);
-      this.Controls.Add(this.addOperatorButton);
-      this.Controls.Add(this.removeButton);
+      this.Controls.Add(this.splitContainer);
       this.Name = "OperatorGraphView";
-      this.Size = new System.Drawing.Size(475, 291);
+      this.Size = new System.Drawing.Size(608, 533);
       this.operatorsContextMenuStrip.ResumeLayout(false);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      this.splitContainer1.ResumeLayout(false);
-      this.operatorsGroupBox.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
       this.graphGroupBox.ResumeLayout(false);
-      this.graphContextMenuStrip.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -269,20 +146,10 @@
     #endregion
 
-    private System.Windows.Forms.Button addOperatorButton;
-    private System.Windows.Forms.ListView operatorsListView;
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.GroupBox operatorsGroupBox;
-    private System.Windows.Forms.Button removeButton;
-    private System.Windows.Forms.ColumnHeader columnHeader1;
     private System.Windows.Forms.ContextMenuStrip operatorsContextMenuStrip;
-    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
     private System.Windows.Forms.ToolStripMenuItem initialOperatorToolStripMenuItem;
-    private System.Windows.Forms.ToolTip toolTip;
+    private OperatorSetView operatorsView;
+    private OperatorTreeView graphView;
+    private System.Windows.Forms.SplitContainer splitContainer;
     private System.Windows.Forms.GroupBox graphGroupBox;
-    private System.Windows.Forms.TreeView graphTreeView;
-    private System.Windows.Forms.ImageList imageList;
-    private System.Windows.Forms.ContextMenuStrip graphContextMenuStrip;
-    private System.Windows.Forms.ToolStripMenuItem breakpointToolStripMenuItem;
-    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem1;
   }
 }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.cs	(revision 2655)
@@ -30,14 +30,12 @@
 using HeuristicLab.Common;
 using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
 
 namespace HeuristicLab.Core.Views {
   /// <summary>
-  /// The visual representation of an <see cref="IOperatorGraph"/>.
+  /// The visual representation of an <see cref="OperatorGraph"/>.
   /// </summary>
   [Content(typeof(OperatorGraph), true)]
   public partial class OperatorGraphView : ItemViewBase {
-    private ChooseOperatorDialog chooseOperatorDialog;
-    private Dictionary<IOperator, IList<TreeNode>> operatorNodeTable;
-
     /// <summary>
     /// Gets or sets the operator graph to represent visually.
@@ -45,6 +43,6 @@
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
     /// No own data storage present.</remarks>
-    public IOperatorGraph OperatorGraph {
-      get { return (IOperatorGraph)Item; }
+    public OperatorGraph OperatorGraph {
+      get { return (OperatorGraph)Item; }
       set { base.Item = value; }
     }
@@ -55,6 +53,4 @@
     public OperatorGraphView() {
       InitializeComponent();
-      operatorNodeTable = new Dictionary<IOperator, IList<TreeNode>>();
-      operatorsListView.Columns[0].Width = Math.Max(0, operatorsListView.Width - 25);
       Caption = "Operator Graph";
     }
@@ -65,5 +61,5 @@
     /// <remarks>Calls <see cref="OperatorGraphView()"/>.</remarks>
     /// <param name="operatorGraph">The operator graph to represent visually.</param>
-    public OperatorGraphView(IOperatorGraph operatorGraph)
+    public OperatorGraphView(OperatorGraph operatorGraph)
       : this() {
       OperatorGraph = operatorGraph;
@@ -74,18 +70,15 @@
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      OperatorGraph.OperatorAdded -= new EventHandler<EventArgs<IOperator>>(OperatorGraph_OperatorAdded);
-      OperatorGraph.OperatorRemoved -= new EventHandler<EventArgs<IOperator>>(OperatorGraph_OperatorRemoved);
+    protected override void DeregisterObjectEvents() {
       OperatorGraph.InitialOperatorChanged -= new EventHandler(OperatorGraph_InitialOperatorChanged);
-      base.RemoveItemEvents();
+      base.DeregisterObjectEvents();
     }
+
     /// <summary>
     /// Adds eventhandlers to the underlying <see cref="IOperatorGraph"/>.
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      OperatorGraph.OperatorAdded += new EventHandler<EventArgs<IOperator>>(OperatorGraph_OperatorAdded);
-      OperatorGraph.OperatorRemoved += new EventHandler<EventArgs<IOperator>>(OperatorGraph_OperatorRemoved);
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
       OperatorGraph.InitialOperatorChanged += new EventHandler(OperatorGraph_InitialOperatorChanged);
     }
@@ -95,289 +88,41 @@
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if (graphTreeView.Nodes.Count > 0)
-        RemoveTreeNode(graphTreeView.Nodes[0]);
-      graphTreeView.SelectedNode = null;
-      graphTreeView.Nodes.Clear();
-      graphTreeView.Enabled = false;
-      operatorsListView.Items.Clear();
-      removeButton.Enabled = false;
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      operatorsView.ItemSet = null;
+      operatorsView.Enabled = false;
+      graphView.Operator = null;
+      graphView.Enabled = false;
       if (OperatorGraph == null) {
         Caption = "Operator Graph";
-        operatorsListView.Enabled = false;
-        addOperatorButton.Enabled = false;
+        operatorsView.ItemSet = null;
+        operatorsView.Enabled = false;
+        graphView.Operator = null;
+        graphView.Enabled = false;
       } else {
-        Caption = "Operator Graph (" + OperatorGraph.GetType().Name + ")";
-        foreach (IOperator op in OperatorGraph.Operators) {
-          operatorsListView.Items.Add(CreateListViewItem(op));
-        }
-        operatorsListView.Enabled = true;
-        addOperatorButton.Enabled = true;
-        if (OperatorGraph.InitialOperator != null) {
-          graphTreeView.Nodes.Add(CreateTreeNode(OperatorGraph.InitialOperator));
-          graphTreeView.Enabled = true;
-        }
+        Caption = OperatorGraph.ItemName + " (" + OperatorGraph.GetType().Name + ")";
+        operatorsView.ItemSet = OperatorGraph.Operators;
+        operatorsView.Enabled = true;
+        MarkInitialOperator();
+        graphView.Operator = OperatorGraph.InitialOperator;
+        graphView.Enabled = true;
       }
     }
 
-    private ListViewItem CreateListViewItem(IOperator op) {
-      ListViewItem item = new ListViewItem();
-      item.Text = op.Name;
-      item.Tag = op;
-      item.ImageIndex = 0;
-      if (op.GetType().Name == "CombinedOperator")
-        item.ImageIndex = 1;
-      else if (op.GetType().Name == "ProgrammableOperator")
-        item.ImageIndex = 2;
-      if (op == OperatorGraph.InitialOperator)
-        item.Font = new Font(operatorsListView.Font, FontStyle.Bold);
-      return item;
-    }
-
-    private TreeNode CreateTreeNode(IOperator op) {
-      TreeNode node = new TreeNode();
-      node.Text = op.Name;
-      node.Tag = op;
-      if (op.Breakpoint)
-        node.ForeColor = Color.Red;
-
-      if (!operatorNodeTable.ContainsKey(op)) {
-        operatorNodeTable.Add(op, new List<TreeNode>());
-        op.NameChanged += new EventHandler(Operator_NameChanged);
-        op.BreakpointChanged += new EventHandler(Operator_BreakpointChanged);
-        op.SubOperatorAdded += new EventHandler<EventArgs<IOperator, int>>(Operator_SubOperatorAdded);
-        op.SubOperatorRemoved += new EventHandler<EventArgs<IOperator, int>>(Operator_SubOperatorRemoved);
-      }
-      operatorNodeTable[op].Add(node);
-
-      for (int i = 0; i < op.SubOperators.Count; i++)
-        node.Nodes.Add(new TreeNode());
-      return node;
-    }
-
-    private void RemoveTreeNode(TreeNode node) {
-      foreach (TreeNode child in node.Nodes)
-        RemoveTreeNode(child);
-
-      IOperator op = (IOperator)node.Tag;
-      if (op != null) {
-        operatorNodeTable[op].Remove(node);
-        if (operatorNodeTable[op].Count == 0) {
-          op.NameChanged -= new EventHandler(Operator_NameChanged);
-          op.BreakpointChanged -= new EventHandler(Operator_BreakpointChanged);
-          op.SubOperatorAdded -= new EventHandler<EventArgs<IOperator, int>>(Operator_SubOperatorAdded);
-          op.SubOperatorRemoved -= new EventHandler<EventArgs<IOperator, int>>(Operator_SubOperatorRemoved);
-          operatorNodeTable.Remove(op);
-        }
+    private void MarkInitialOperator() {
+      foreach (ListViewItem item in operatorsView.ItemsListView.Items) {
+        if ((OperatorGraph.InitialOperator != null) && (((IOperator)item.Tag) == OperatorGraph.InitialOperator))
+          item.Font = new Font(operatorsView.ItemsListView.Font, FontStyle.Bold);
+        else
+          item.Font = operatorsView.ItemsListView.Font;
       }
     }
 
-    #region ListView Events
-    private void operatorsListView_SelectedIndexChanged(object sender, EventArgs e) {
-      removeButton.Enabled = false;
-      if (operatorsListView.SelectedItems.Count > 0) {
-        removeButton.Enabled = true;
-      }
-    }
-    private void operatorsListView_DoubleClick(object sender, EventArgs e) {
-      if (operatorsListView.SelectedItems.Count == 1) {
-        IOperator op = (IOperator)operatorsListView.SelectedItems[0].Tag;
-        IView view = MainFormManager.CreateDefaultView(op);
-        if (view != null) MainFormManager.MainForm.ShowView(view);
-      }
-    }
-    #endregion
-
-    #region TreeView Events
-    private void graphTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
-      TreeNode node = e.Node;
-      IOperator op = (IOperator)node.Tag;
-      for (int i = 0; i < node.Nodes.Count; i++) {
-        if (node.Nodes[i].Tag == null) {
-          node.Nodes[i].Remove();
-          node.Nodes.Insert(i, CreateTreeNode(op.SubOperators[i]));
-        }
-      }
-    }
-    private void graphTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      IOperator op = (IOperator)e.Node.Tag;
-      foreach (ListViewItem item in operatorsListView.Items)
-        item.Selected = item.Tag == op;
-    }
-    #endregion
-
-    #region Size Changed Events
-    private void operatorsListView_SizeChanged(object sender, EventArgs e) {
-      if (operatorsListView.Columns.Count > 0)
-        operatorsListView.Columns[0].Width = Math.Max(0, operatorsListView.Width - 25);
-    }
-    #endregion
-
-    #region Key Events
-    private void operatorsListView_KeyDown(object sender, KeyEventArgs e) {
-      if (e.KeyCode == Keys.Delete) {
-        if (operatorsListView.SelectedItems.Count > 0) {
-          foreach (ListViewItem item in operatorsListView.SelectedItems)
-            OperatorGraph.RemoveOperator((IOperator)item.Tag);
-        }
-      }
-      if (e.KeyCode == Keys.F2) {
-        if (operatorsListView.SelectedItems.Count == 1)
-          operatorsListView.SelectedItems[0].BeginEdit();
-      }
-    }
-    private void graphTreeView_KeyDown(object sender, KeyEventArgs e) {
-      if (e.KeyCode == Keys.Delete) {
-        TreeNode node = graphTreeView.SelectedNode;
-        if ((node != null) && (node.Parent != null)) {
-          IOperator parent = (IOperator)node.Parent.Tag;
-          parent.RemoveSubOperator(node.Index);
-        }
-      }
-    }
-    #endregion
-
-    #region Edit Events
-    private void operatorsListView_AfterLabelEdit(object sender, LabelEditEventArgs e) {
-      e.CancelEdit = false;
-
-      string name = e.Label;
-      if (name != null) {
-        IOperator op = (IOperator)operatorsListView.Items[e.Item].Tag;
-        op.Name = name;
-      }
-    }
-    #endregion
-
-    #region Button Events
-    private void addOperatorButton_Click(object sender, EventArgs e) {
-      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
-      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK)
-        OperatorGraph.AddOperator(chooseOperatorDialog.Operator);
-    }
-    private void removeButton_Click(object sender, EventArgs e) {
-      if (operatorsListView.SelectedItems.Count > 0) {
-        foreach (ListViewItem item in operatorsListView.SelectedItems)
-          OperatorGraph.RemoveOperator((IOperator)item.Tag);
-      }
-    }
-    #endregion
-
-    #region Drag and Drop Events
-    private void operatorsListView_ItemDrag(object sender, ItemDragEventArgs e) {
-      ListViewItem item = (ListViewItem)e.Item;
-      IOperator op = (IOperator)item.Tag;
-      DataObject data = new DataObject();
-      data.SetData("IOperator", op);
-      data.SetData("DragSource", operatorsListView);
-      DoDragDrop(data, DragDropEffects.Copy);
-    }
-    private void operatorsListView_DragEnter(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (e.Data.GetDataPresent("IOperator"))
-        e.Effect = DragDropEffects.Copy;
-    }
-    private void operatorsListView_DragOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (e.Data.GetDataPresent("IOperator"))
-        e.Effect = DragDropEffects.Copy;
-    }
-    private void operatorsListView_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        if (e.Data.GetDataPresent("IOperator")) {
-          IOperator op = (IOperator)e.Data.GetData("IOperator");
-          op = (IOperator)op.Clone();
-          OperatorGraph.AddOperator(op);
-        }
-      }
-    }
-    private void graphTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
-      TreeNode node = (TreeNode)e.Item;
-      if (node.Parent != null) {
-        IOperator op = (IOperator)node.Tag;
-        IOperator parent = (IOperator)node.Parent.Tag;
-        int index = node.Index;
-        DataObject data = new DataObject();
-        data.SetData("IOperator", op);
-        data.SetData("DragSource", graphTreeView);
-        data.SetData("ParentOperator", parent);
-        data.SetData("Index", index);
-        DoDragDrop(data, DragDropEffects.Move);
-      }
-    }
-    private void graphTreeView_DragEnter(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (e.Data.GetDataPresent("IOperator")) {
-        Point p = graphTreeView.PointToClient(new Point(e.X, e.Y));
-        TreeNode node = graphTreeView.GetNodeAt(p);
-        if (node != null) {
-          if ((e.Data.GetDataPresent("ParentOperator")) && (node.Parent != null)) {
-            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == graphTreeView))
-              e.Effect = DragDropEffects.Move;
-          } else {
-            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == operatorsListView))
-              e.Effect = DragDropEffects.Copy;
-          }
-        }
-      }
-    }
-    private void graphTreeView_DragOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (e.Data.GetDataPresent("IOperator")) {
-        Point p = graphTreeView.PointToClient(new Point(e.X, e.Y));
-        TreeNode node = graphTreeView.GetNodeAt(p);
-        if (node != null) {
-          if ((e.Data.GetDataPresent("ParentOperator")) && (node.Parent != null)) {
-            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == graphTreeView))
-              e.Effect = DragDropEffects.Move;
-          } else {
-            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == operatorsListView))
-              e.Effect = DragDropEffects.Copy;
-          }
-        }
-      }
-    }
-    private void graphTreeView_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        if (e.Data.GetDataPresent("IOperator")) {
-          IOperator op = (IOperator)e.Data.GetData("IOperator");
-          Point p = graphTreeView.PointToClient(new Point(e.X, e.Y));
-          TreeNode node = graphTreeView.GetNodeAt(p);
-          if (e.Data.GetDataPresent("ParentOperator")) {
-            if (node.Parent != null) {
-              TreeNode parentNode = node.Parent;
-              IOperator oldParent = (IOperator)e.Data.GetData("ParentOperator");
-              int oldIndex = (int)e.Data.GetData("Index");
-              IOperator newParent = (IOperator)node.Parent.Tag;
-              int newIndex = node.Index;
-              oldParent.RemoveSubOperator(oldIndex);
-              newParent.AddSubOperator(op, newIndex);
-              graphTreeView.SelectedNode = parentNode.Nodes[newIndex];
-            }
-          } else {
-            if (node != null) {
-              IOperator parent = (IOperator)node.Tag;
-              parent.AddSubOperator(op);
-              graphTreeView.SelectedNode = node.Nodes[node.Nodes.Count - 1];
-            }
-          }
-        }
-      }
-    }
-    #endregion
-
     #region Context Menu Events
     private void operatorsContextMenuStrip_Opening(object sender, CancelEventArgs e) {
-      viewToolStripMenuItem.Enabled = false;
       initialOperatorToolStripMenuItem.Enabled = false;
       initialOperatorToolStripMenuItem.Checked = false;
-      if (operatorsListView.SelectedItems.Count == 1) {
-        IOperator op = (IOperator)operatorsListView.SelectedItems[0].Tag;
-        IView view = MainFormManager.CreateDefaultView(op);
-        if (view != null) {
-          viewToolStripMenuItem.Enabled = true;
-          viewToolStripMenuItem.Tag = view;
-        }
+      if (operatorsView.ItemsListView.SelectedItems.Count == 1) {
+        IOperator op = (IOperator)operatorsView.ItemsListView.SelectedItems[0].Tag;
         initialOperatorToolStripMenuItem.Enabled = true;
         initialOperatorToolStripMenuItem.Tag = op;
@@ -386,107 +131,26 @@
       }
     }
-    private void viewToolStripMenuItem_Click(object sender, EventArgs e) {
-      IView view = ((ToolStripMenuItem)sender).Tag as IView;
-      if (view != null) MainFormManager.MainForm.ShowView(view);
-    }
     private void initialOperatorToolStripMenuItem_Click(object sender, EventArgs e) {
-      if (initialOperatorToolStripMenuItem.Checked) {
-        foreach (ListViewItem item in operatorsListView.Items)
-          item.Font = operatorsListView.Font;
-        operatorsListView.SelectedItems[0].Font = new Font(operatorsListView.Font, FontStyle.Bold);
+      if (initialOperatorToolStripMenuItem.Checked)
         OperatorGraph.InitialOperator = (IOperator)initialOperatorToolStripMenuItem.Tag;
-      } else {
-        operatorsListView.SelectedItems[0].Font = operatorsListView.Font;
+      else
         OperatorGraph.InitialOperator = null;
-      }
-    }
-    private void graphContextMenuStrip_Opening(object sender, CancelEventArgs e) {
-      viewToolStripMenuItem1.Enabled = false;
-      breakpointToolStripMenuItem.Enabled = false;
-      breakpointToolStripMenuItem.Checked = false;
-      if (graphTreeView.SelectedNode != null) {
-        IOperator op = (IOperator)graphTreeView.SelectedNode.Tag;
-        IView view = MainFormManager.CreateDefaultView(op);
-        if (view != null) {
-          viewToolStripMenuItem1.Enabled = true;
-          viewToolStripMenuItem1.Tag = view;
-        }
-        breakpointToolStripMenuItem.Enabled = true;
-        breakpointToolStripMenuItem.Tag = op;
-        if (op.Breakpoint)
-          breakpointToolStripMenuItem.Checked = true;
-      }
-    }
-    private void breakpointToolStripMenuItem_Click(object sender, EventArgs e) {
-      IOperator op = (IOperator)breakpointToolStripMenuItem.Tag;
-      op.Breakpoint = breakpointToolStripMenuItem.Checked;
     }
     #endregion
 
     #region OperatorGraph Events
-    private void OperatorGraph_OperatorAdded(object sender, EventArgs<IOperator> e) {
-      operatorsListView.Items.Add(CreateListViewItem(e.Value));
-    }
-    private void OperatorGraph_OperatorRemoved(object sender, EventArgs<IOperator> e) {
-      ListViewItem itemToDelete = null;
-      foreach (ListViewItem item in operatorsListView.Items) {
-        if (item.Tag == e.Value)
-          itemToDelete = item;
-      }
-      itemToDelete.Remove();
-    }
     private void OperatorGraph_InitialOperatorChanged(object sender, EventArgs e) {
-      Refresh();
-    }
-    #endregion
-
-    #region Operator Events
-    private void Operator_NameChanged(object sender, EventArgs e) {
-      IOperator op = (IOperator)sender;
-      foreach (TreeNode node in operatorNodeTable[op])
-        node.Text = op.Name;
-    }
-    private void Operator_BreakpointChanged(object sender, EventArgs e) {
-      IOperator op = (IOperator)sender;
-      foreach (TreeNode node in operatorNodeTable[op]) {
-        if (op.Breakpoint)
-          node.ForeColor = Color.Red;
-        else
-          node.ForeColor = graphTreeView.ForeColor;
-      }
-    }
-    private void Operator_SubOperatorAdded(object sender, EventArgs<IOperator, int> e) {
-      IOperator op = (IOperator)sender;
-      if (operatorNodeTable.ContainsKey(op)) {
-        TreeNode[] nodes = new TreeNode[operatorNodeTable[op].Count];
-        operatorNodeTable[op].CopyTo(nodes, 0);
-        foreach (TreeNode node in nodes)
-          node.Nodes.Insert(e.Value2, CreateTreeNode(e.Value));
-      }
-    }
-    private void Operator_SubOperatorRemoved(object sender, EventArgs<IOperator, int> e) {
-      IOperator op = (IOperator)sender;
-      if (operatorNodeTable.ContainsKey(op)) {
-        TreeNode[] nodes = new TreeNode[operatorNodeTable[op].Count];
-        operatorNodeTable[op].CopyTo(nodes, 0);
-        foreach (TreeNode node in nodes) {
-          RemoveTreeNode(node.Nodes[e.Value2]);
-          node.Nodes.RemoveAt(e.Value2);
-        }
+      if (InvokeRequired)
+        Invoke(new EventHandler(OperatorGraph_InitialOperatorChanged), sender, e);
+      else {
+        MarkInitialOperator();
+        graphView.Operator = OperatorGraph.InitialOperator;
       }
     }
     #endregion
 
-    #region Mouse Events
-    private void graphTreeView_MouseDown(object sender, MouseEventArgs e) {
-      if (e.Button != MouseButtons.Right) return;
-      TreeNode clickedNode = graphTreeView.GetNodeAt(e.X, e.Y);
-      if (clickedNode != null) {
-        graphTreeView.SelectedNode = clickedNode;
-        graphTreeView.Refresh();
-      }
+    private void operatorsView_Load(object sender, EventArgs e) {
+      operatorsView.ItemsListView.ContextMenuStrip = operatorsContextMenuStrip;
     }
-    #endregion
-
   }
 }
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.resx	(revision 2654)
+++ 	(revision )
@@ -1,185 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="operatorsContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>434, 17</value>
-  </metadata>
-  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
-        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6
-        CgAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABEAMAAQEBAAEYBgABDP8APwABuQGiAZIBYAFIATQBYgFJATUBYQFJATcBZgFJATQBYgFKATQBYgFJ
-        ATUBYQFIATQBYQFIATgBZQFIATMBZQFKATYBYQFHATaBAAHlAssBnQFNASUBnQFNASUBnQFNASUB3QK7
-        DAABuwGhAZMB/QH/Af4BuQGiAZIBuQGiAZIBtQGgAZgBswGkAZEBtAGhAZIBuQGiAZMBtQGiAZMBugGk
-        AZIBuAGhAZEBYwFKATZRAAHsAdIB7AFyASQBcQHmAcwB5gkAAfsBwwH7AcsBHwHNAfwB1QH8EgAB8ALh
-        AZ0BTQElAfoBnQFiAeEBhgFYAeEBhgFYAZ0BTQElDAABtwGiAZMG/wH+AfoB+QH8AfoB+QH2AfEB8AHx
-        AeYB4gHsAd0B1AHlAdMByAHhAckBvQG3AaMBkgFhAUgBNE4AAe0B2AHtAakBUAGoAYABMAF/AXUBJwF1
-        AesB0QHrAwAB/QHpAf4BywEfAc0BywEfAc0BywEfAc0DAAHpAfAB6QEnAW8BKAEaAWcBHAEaAWcBHAHp
-        AfAB6QHnAZoBcwH8Ab4BlwH7AcABoQH7AbEBggGiAVYBMQHyAuQB1QHdAeIBQAF5AY4BNwFiAXUBKAFV
-        AWoBKwFVAWwBKgFVAWgBJwFRAWgBMwFcAXUBLAFYAWkB+QL3AfUB7AHoAfEB5AHcAeoB2QHQAeUBzwHE
-        AbcBogGTAWIBSQE1SwAB6AHRAegBqgFQAakBzAFnAcsBfgEuAX4BlgE4AZUBewErAXoB8AHVAfAB2AFr
-        AdcB/wFeAfwBywEfAc0BywEfAc0B6QHwAekBLAGCATMBWgGvAV8BWwGpAV8BTQGcAU8BGQF3ARwB9wLw
-        AecBmgFzAecBmgFzAecBmgFzAfMC5wMAATwBdAGNAaYB1wHfAbcB5wHzAa4B5QHyAbAB5gHxAa4B5gHx
-        AaQB3gHqAUYBeAGUAUEBowHTATkBeQGSAfsB8gHvAfIB6QHlAewB3wHXAecB1AHMAbQBoQGSAWIBSQE1
-        NgABqwHwAfcBqwHiAeUBrAHOAcwBrQG7AbUBrgGnAZwDAAHkAcoB5AGpAVABqAHTAWsB0gHUAW4B0wF/
-        ATABfgGfATwBnwGOATUBjQF9AS0BfAHYAWsB1wHkAUIB5gH/AaYB/wHLAR8BzQErAYIBOQGIAdcBkwF+
-        Ac0BiAFkAbMBaQEiAXoBJwHpAfAB6QYAAVYBUAFKCQABYAGVAaoBUAGEAZsBRgF8AZMBVwGJAZ8BVgGK
-        AaEBVgGIAZ4BVAGDAZkBXAGFAZwBRwGtAdgBPQF/AZwB/AH7AfcB9gHvAewB7wHlAd4B6wHbAdQBtwGi
-        AZMBYgFJATVIAAGqAVIBqQHSAWoB0QHVAW8B1QG9AXABvAHeAZgB3QGPAUYBjgGdATwBnAF+AS4BfgHY
-        AWsB1wH/AaYB/wHYAWsB1wH8AdUB/AHpAfAB6QErAYIBOQEmAX4BLgEiAXoBJwHpAfAB6QFWAVABSgMA
-        AVYBUAFKDwAB1QHdAeIBfgGpAbwBiAHUAesBXwHBAekBXwHBAesBTwG5AegBTAGyAeIBPgGEAaEBYQGL
-        AZ4B+gH9AfsB+QH2AfIB9AHrAecB7AHgAdoBuQGiAZIBYgFJATUzAAGrAfAB9wGrAeUB6QGsAtUBrAHE
-        AcEBrQG1AawBrgGkAZgDAAGoAU8BpwHSAW0B0QG8AW8BuwHvAaUB7gH7AZ8B+gHvAZ0B7gGXAVIBlgF8
-        AS4BfAH9AekB/gHYAWsB1wH9AekB/gFWAVABShIAAVYBUAFKFQABPgF2AY8BhQHZAfIBcQHNAfABZwHE
-        AesBWAG+AegBPQF6AZQBdAGhAbYD/gL/Af4B/wH6AfkB9wHwAe0B8QHmAeIBuQGiAZIBYgFJATVIAAGn
-        AVABpgG8AW8BuwHvAaUB7gH7AZsB+gH7AZgB+gH7AZkB+gHnAZgB5gGRAU4BkAwAAVYBUAFKDAABVgFQ
-        AUoDAAFWAVABSgH7AcMB+wHLAR8BzQH8AdUB/AYAAV0BjwGhAXcBoAGvAZUB5AH3AYoB3AH1AXwB1AHy
-        AWoBxAHmAT0BeAGYAe4B9gH1Af0C/wH7Av8D/gH6AfYC9QHvAeoBuQGiAZIBYgFJATU5AAGrAfAB9wGs
-        AtUBrgG0AawBrgGZAYoD/QHPAYgBzwHiAa8B4gH7AasB+gH7AZgB+gH7AZgB+gHqAZAB6QHPAYgBzwH0
-        AeYB9A8AA4YBEgFbAYUBhwGwAcgBVgFQAUoGAAH9AekB/gHLAR8BzQHLAR8BzQHLAR8BzQYAAW0BmwGs
-        Aa4B9AH7AasB8AH/AZ0B6wH4AZcB5AH3ATUBdgGVAVEBpAHDATgBbgGFATkBawF/Af8B/gH/Af0B/wH+
-        A/8B+gH3AfMBuQGiAZIBYgFJATVIAAHwAdQB8AHPAYgBzwHuAb4B7gH7Aa4B+gHsAZEB6wHPAYgBzwHz
-        AeAB8hIAASgBfAGrAQwBrQHuARoBZwGTAZsBvgHRBgAB2AFrAdcB/wFeAfwBywEfAc0BywEfAc0GAAE2
-        AW4BhwGtAfIB+wGvAfQB/QGxAfQB/QGnAe0B+gEkAWEBewFUAaMBxAFfAbIB0QEaAUkBXgP+A/8B/gH8
-        AfsBtwGiAZMBuwGiAZIBYwFKATZLAAHyAdsB8gHPAYgBzwHjAawB4wHPAYgBzwHzAeMB8xUAAQwBrQHu
-        ASgBfAGrAQwBrQHuARoBZwGTBgAB2AFrAdcB5AFCAeYB/wGmAf8BywEfAc0GAAHVAd0B4gF7Aa0BvwF3
-        AaYBuwFwAZ4BtgFoAZcBrQFjAY4BowEwAWQBdQE0AWQBdgH/Af4D/wL+Af0B/wG3AaIBkwFhAUkBNQFk
-        AUwBNgFiAUsBNU4AAfIB2wHyAc8BiAHPAfAB4wHwGAABBAG0AfwBZgHMAf8BKAF8AasBIQFyAaAGAAHY
-        AWsB1wH/AaYB/wHYAWsB1wH8AdUB/A8AAdIBwAGvAf8B/gP/Af4B/Qf/Af4B/wH+A/8B/AG4AaQBkwHU
-        AcQBvQFlAUoBNQHgAdsB11EAAf4B+wH+GwAB2QHlAewBBAG0AfwBZgHMAf8BKAF8AasGAAH9AekB/gHY
-        AWsB1wH9AekB/hIAAdkBwgGyAf4B/wL9A/8B/gX/Af0C/wH+Af8B/AH/Af0BvgGrAZwBZQFKATUB4AHb
-        Add1AAHZAeUB7AEEAbQB/AG4AdAB3SEAAdgBwgGwAdsBwQGzAdcBwgGzAdgBwgGwAdkBwgGzAdIBwwGw
-        AdUBvgGvAc4BuQGqAcoBswGjAeAB2wHXNgABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGA
-        FwAD/wEABv8CAAT/AfADAAP/AeAB8AMAAf8B4wGPAcAB8AMAAf8BwQEIBQAB/wGAAQABAQQAAcECAAE3
-        BAAB/wIAAS8BgAMAAYEBAAEPAd8BwAMAAf8BAAH3AaEBgAMAAeABAAH4AWEBgAMAAf8BAQH4AWEBgAMA
-        Af8BgwH4AWEBgAMAAf8BxwH4AWEB8AMAAf8B7wH4AWMB8AEBAgAC/wH8AX8B8AEDAgAL
-</value>
-  </data>
-  <metadata name="graphContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>204, 17</value>
-  </metadata>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>349, 17</value>
-  </metadata>
-</root>
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorLibraryView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorLibraryView.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,196 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Core.Views {
-  partial class OperatorLibraryView {
-    /// <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 (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
-      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.operatorsGroupBox = new System.Windows.Forms.GroupBox();
-      this.operatorsTreeView = new System.Windows.Forms.TreeView();
-      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
-      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.removeButton = new System.Windows.Forms.Button();
-      this.addGroupButton = new System.Windows.Forms.Button();
-      this.addOperatorButton = new System.Windows.Forms.Button();
-      this.importButton = new System.Windows.Forms.Button();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.operatorsGroupBox.SuspendLayout();
-      this.contextMenuStrip.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // operatorsGroupBox
-      // 
-      this.operatorsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.operatorsGroupBox.Controls.Add(this.operatorsTreeView);
-      this.operatorsGroupBox.Enabled = false;
-      this.operatorsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.operatorsGroupBox.Name = "operatorsGroupBox";
-      this.operatorsGroupBox.Size = new System.Drawing.Size(522, 366);
-      this.operatorsGroupBox.TabIndex = 0;
-      this.operatorsGroupBox.TabStop = false;
-      this.operatorsGroupBox.Text = "&Operators";
-      // 
-      // operatorsTreeView
-      // 
-      this.operatorsTreeView.AllowDrop = true;
-      this.operatorsTreeView.ContextMenuStrip = this.contextMenuStrip;
-      this.operatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorsTreeView.HideSelection = false;
-      this.operatorsTreeView.LabelEdit = true;
-      this.operatorsTreeView.Location = new System.Drawing.Point(3, 16);
-      this.operatorsTreeView.Name = "operatorsTreeView";
-      this.operatorsTreeView.ShowNodeToolTips = true;
-      this.operatorsTreeView.Size = new System.Drawing.Size(516, 347);
-      this.operatorsTreeView.TabIndex = 0;
-      this.operatorsTreeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.operatorsTreeView_AfterLabelEdit);
-      this.operatorsTreeView.DoubleClick += new System.EventHandler(this.operatorsTreeView_DoubleClick);
-      this.operatorsTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragDrop);
-      this.operatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
-      this.operatorsTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.operatorsTreeView_MouseDown);
-      this.operatorsTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragEnter);
-      this.operatorsTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.operatorsTreeView_KeyDown);
-      this.operatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorsTreeView_ItemDrag);
-      this.operatorsTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragOver);
-      // 
-      // contextMenuStrip
-      // 
-      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.viewToolStripMenuItem});
-      this.contextMenuStrip.Name = "contextMenuStrip";
-      this.contextMenuStrip.Size = new System.Drawing.Size(120, 26);
-      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
-      // 
-      // viewToolStripMenuItem
-      // 
-      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
-      this.viewToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
-      this.viewToolStripMenuItem.Text = "&View...";
-      this.viewToolStripMenuItem.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
-      // 
-      // removeButton
-      // 
-      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeButton.Enabled = false;
-      this.removeButton.Location = new System.Drawing.Point(220, 372);
-      this.removeButton.Name = "removeButton";
-      this.removeButton.Size = new System.Drawing.Size(104, 23);
-      this.removeButton.TabIndex = 3;
-      this.removeButton.Text = "&Remove";
-      this.removeButton.UseVisualStyleBackColor = true;
-      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
-      // 
-      // addGroupButton
-      // 
-      this.addGroupButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addGroupButton.Enabled = false;
-      this.addGroupButton.Location = new System.Drawing.Point(0, 372);
-      this.addGroupButton.Name = "addGroupButton";
-      this.addGroupButton.Size = new System.Drawing.Size(104, 23);
-      this.addGroupButton.TabIndex = 1;
-      this.addGroupButton.Text = "&Add &Group...";
-      this.addGroupButton.UseVisualStyleBackColor = true;
-      this.addGroupButton.Click += new System.EventHandler(this.addGroupButton_Click);
-      // 
-      // addOperatorButton
-      // 
-      this.addOperatorButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addOperatorButton.Enabled = false;
-      this.addOperatorButton.Location = new System.Drawing.Point(110, 372);
-      this.addOperatorButton.Name = "addOperatorButton";
-      this.addOperatorButton.Size = new System.Drawing.Size(104, 23);
-      this.addOperatorButton.TabIndex = 2;
-      this.addOperatorButton.Text = "Add &Operator...";
-      this.addOperatorButton.UseVisualStyleBackColor = true;
-      this.addOperatorButton.Click += new System.EventHandler(this.addOperatorButton_Click);
-      // 
-      // importButton
-      // 
-      this.importButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.importButton.Location = new System.Drawing.Point(330, 372);
-      this.importButton.Name = "importButton";
-      this.importButton.Size = new System.Drawing.Size(104, 23);
-      this.importButton.TabIndex = 4;
-      this.importButton.Text = "&Import...";
-      this.importButton.UseVisualStyleBackColor = true;
-      this.importButton.Click += new System.EventHandler(this.importButton_Click);
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "item";
-      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
-      this.openFileDialog.Title = "Import ...";
-      // 
-      // OperatorLibraryEditor
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.importButton);
-      this.Controls.Add(this.operatorsGroupBox);
-      this.Controls.Add(this.addGroupButton);
-      this.Controls.Add(this.removeButton);
-      this.Controls.Add(this.addOperatorButton);
-      this.Name = "OperatorLibraryEditor";
-      this.Size = new System.Drawing.Size(522, 395);
-      this.operatorsGroupBox.ResumeLayout(false);
-      this.contextMenuStrip.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.GroupBox operatorsGroupBox;
-    private System.Windows.Forms.TreeView operatorsTreeView;
-    private System.Windows.Forms.Button removeButton;
-    private System.Windows.Forms.Button addGroupButton;
-    private System.Windows.Forms.Button addOperatorButton;
-    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
-    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
-    private System.Windows.Forms.Button importButton;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorLibraryView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorLibraryView.cs	(revision 2654)
+++ 	(revision )
@@ -1,347 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// Visual representation of the class <see cref="IOperatorLibrary"/>.
-  /// </summary>
-  [Content(typeof(OperatorLibrary), true)]
-  public partial class OperatorLibraryView : ItemViewBase {
-    private ChooseOperatorDialog chooseOperatorDialog;
-
-    /// <summary>
-    /// Gets or sets the operator library that should be displayed.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
-    public IOperatorLibrary OperatorLibrary {
-      get { return (IOperatorLibrary)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorLibraryEditor"/> with caption 
-    /// <c>Operator Library</c>.
-    /// </summary>
-    public OperatorLibraryView() {
-      InitializeComponent();
-      operatorsTreeView.TreeViewNodeSorter = new NodeSorter();
-      Caption = "Operator Library";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorLibraryEditor"/> with the 
-    /// specified <paramref name="operatorLibrary"/>.
-    /// </summary>
-    /// <param name="operatorLibrary">The operator library to display.</param>
-    public OperatorLibraryView(IOperatorLibrary operatorLibrary)
-      : this() {
-      OperatorLibrary = operatorLibrary;
-    }
-
-    private class NodeSorter : IComparer {
-      public int Compare(object x, object y) {
-        TreeNode tx = x as TreeNode;
-        TreeNode ty = y as TreeNode;
-
-        int result = string.Compare(tx.Text, ty.Text);
-        if (result == 0)
-          result = tx.Index.CompareTo(ty.Index);
-        return result;
-      }
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      operatorsTreeView.Nodes.Clear();
-      addGroupButton.Enabled = false;
-      addOperatorButton.Enabled = false;
-      removeButton.Enabled = false;
-      if (OperatorLibrary == null) {
-        Caption = "Operator Library";
-        operatorsGroupBox.Enabled = false;
-      } else {
-        Caption = OperatorLibrary.Group.Name + " (" + OperatorLibrary.GetType().Name + ")";
-        operatorsGroupBox.Enabled = true;
-        operatorsTreeView.Nodes.Add(CreateTreeNode(OperatorLibrary.Group));
-        operatorsTreeView.Sort();
-      }
-    }
-
-    private TreeNode CreateTreeNode(IOperatorGroup group) {
-      TreeNode node = new TreeNode();
-      node.Text = group.Name;
-      node.ForeColor = Color.LightGray;
-      node.Tag = group;
-
-      foreach (IOperator op in group.Operators)
-        node.Nodes.Add(CreateTreeNode(op));
-      foreach (IOperatorGroup subGroup in group.SubGroups)
-        node.Nodes.Add(CreateTreeNode(subGroup));
-      return node;
-    }
-    private TreeNode CreateTreeNode(IOperator op) {
-      TreeNode node = new TreeNode();
-      node.Text = op.Name;
-      node.ToolTipText = op.GetType().Name;
-      node.Tag = op;
-      return node;
-    }
-    private void RemoveTreeNode(TreeNode node) {
-      if (node.Tag is IOperatorGroup) {
-        IOperatorGroup group = node.Tag as IOperatorGroup;
-        IOperatorGroup parent = node.Parent.Tag as IOperatorGroup;
-        parent.RemoveSubGroup(group);
-      } else if (node.Tag is IOperator) {
-        IOperator op = node.Tag as IOperator;
-        IOperatorGroup group = node.Parent.Tag as IOperatorGroup;
-        group.RemoveOperator(op);
-      }
-      node.Remove();
-      EnableDisableButtons();
-    }
-
-    private void EnableDisableButtons() {
-      addGroupButton.Enabled = false;
-      addOperatorButton.Enabled = false;
-      removeButton.Enabled = false;
-      operatorsTreeView.Focus();
-
-      if (operatorsTreeView.SelectedNode != null) {
-        if (operatorsTreeView.SelectedNode.Parent != null)
-          removeButton.Enabled = true;
-        if (operatorsTreeView.SelectedNode.Tag is IOperatorGroup) {
-          addGroupButton.Enabled = true;
-          addOperatorButton.Enabled = true;
-        }
-      }
-    }
-
-    private void MergeOperatorLibrary(IOperatorGroup src, IOperatorGroup dest) {
-      foreach(IOperator op in src.Operators) {
-        if(!Contains(dest, op)) {
-          dest.AddOperator(op);
-        }
-      }
-
-      foreach(OperatorGroup group in src.SubGroups) {
-        bool mergedIntoExistingGroup = false;
-        // try to find a group in dest with matching name
-        foreach(OperatorGroup destGroup in dest.SubGroups) {
-          if(group.Name == destGroup.Name) {
-            MergeOperatorLibrary(group, destGroup);
-            mergedIntoExistingGroup = true;
-            break;
-          }
-        }
-        if(!mergedIntoExistingGroup) {
-          OperatorGroup newGroup = new OperatorGroup();
-          newGroup.Name = group.Name;
-          dest.AddSubGroup(newGroup);
-          MergeOperatorLibrary(group, newGroup);
-        }
-      }
-    }
-
-    private bool Contains(IOperatorGroup group, IOperator op) {
-      foreach(IOperator destOp in group.Operators) {
-        if(op.Name == destOp.Name) {
-          return true;
-        }
-      }
-      return false;
-    }
-
-
-    #region TreeView Events
-    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      EnableDisableButtons();
-    }
-    private void operatorsTreeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
-      e.CancelEdit = false;
-
-      string name = e.Label;
-      if (name != null) {
-        if (e.Node.Tag is IOperatorGroup)
-          ((IOperatorGroup)e.Node.Tag).Name = name;
-        else if (e.Node.Tag is IOperator)
-          ((IOperator)e.Node.Tag).Name = name;
-      }
-    }
-    private void operatorsTreeView_DoubleClick(object sender, EventArgs e) {
-      if (operatorsTreeView.SelectedNode != null) {
-        IOperator op = operatorsTreeView.SelectedNode.Tag as IOperator;
-        if (op != null) {
-          IView view = MainFormManager.CreateDefaultView(op);
-          if (view != null) MainFormManager.MainForm.ShowView(view);
-        }
-      }
-    }
-    #endregion
-
-    #region Button Events
-    private void addOperatorButton_Click(object sender, EventArgs e) {
-      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
-      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
-        TreeNode node = operatorsTreeView.SelectedNode;
-        IOperatorGroup group = node.Tag as IOperatorGroup;
-        group.AddOperator(chooseOperatorDialog.Operator);
-        node.Nodes.Add(CreateTreeNode(chooseOperatorDialog.Operator));
-        operatorsTreeView.Sort();
-        EnableDisableButtons();
-      }
-    }
-    private void addGroupButton_Click(object sender, EventArgs e) {
-      TreeNode node = operatorsTreeView.SelectedNode;
-      IOperatorGroup newGroup = new OperatorGroup();
-      IOperatorGroup group = node.Tag as OperatorGroup;
-      group.AddSubGroup(newGroup);
-      node.Nodes.Add(CreateTreeNode(newGroup));
-      operatorsTreeView.Sort();
-      EnableDisableButtons();
-    }
-    private void removeButton_Click(object sender, EventArgs e) {
-      TreeNode node = operatorsTreeView.SelectedNode;
-      RemoveTreeNode(node);
-    }
-    private void importButton_Click(object sender, EventArgs e) {
-      if(openFileDialog.ShowDialog() == DialogResult.OK) {
-        IOperatorLibrary loadedLibrary = (PersistenceManager.Load(openFileDialog.FileName) as IOperatorLibrary);
-        if(loadedLibrary == null) {
-          Auxiliary.ShowErrorMessageBox("The selected file does not contain an operator library");
-        } else {
-          MergeOperatorLibrary(loadedLibrary.Group, OperatorLibrary.Group);
-          Refresh();
-        }
-      }
-    }
-    #endregion
-
-    #region Key Events
-    private void operatorsTreeView_KeyDown(object sender, KeyEventArgs e) {
-      TreeNode node = operatorsTreeView.SelectedNode;
-      if ((e.KeyCode == Keys.Delete) && (node != null) && (node.Parent != null))
-        RemoveTreeNode(operatorsTreeView.SelectedNode);
-      if ((e.KeyCode == Keys.F2) && (node != null))
-        node.BeginEdit();
-    }
-    #endregion
-
-
-    #region Mouse Events
-    private void operatorsTreeView_MouseDown(object sender, MouseEventArgs e) {
-      if (e.Button != MouseButtons.Right) return;
-      TreeNode clickedNode = operatorsTreeView.GetNodeAt(e.X, e.Y);
-      if (clickedNode != null) {
-        operatorsTreeView.SelectedNode = clickedNode;
-        operatorsTreeView.Refresh();
-      }
-    }
-    #endregion
-
-
-    #region Context Menu Events
-    private void contextMenuStrip_Opening(object sender, CancelEventArgs e) {
-      viewToolStripMenuItem.Enabled = false;
-      if (operatorsTreeView.SelectedNode != null) {
-        IOperator op = operatorsTreeView.SelectedNode.Tag as IOperator;
-        if (op != null) {
-          IItemView view = (IItemView)MainFormManager.CreateDefaultView(op);
-          if (view != null) {
-            viewToolStripMenuItem.Enabled = true;
-            viewToolStripMenuItem.Tag = view;
-          }
-        }
-      }
-    }
-    private void viewToolStripMenuItem_Click(object sender, EventArgs e) {
-      IView view = viewToolStripMenuItem.Tag as IView;
-      if (view != null) MainFormManager.MainForm.ShowView(view);
-    }
-    #endregion
-
-    #region Drag and Drop Events
-    private void operatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
-      TreeNode node = (TreeNode)e.Item;
-      IOperator op = node.Tag as IOperator;
-      if (op != null) {
-        DataObject data = new DataObject();
-        data.SetData("IOperator", op);
-        data.SetData("DragSource", operatorsTreeView);
-        DoDragDrop(data, DragDropEffects.Copy);
-      }
-    }
-    private void operatorsTreeView_DragEnter(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (e.Data.GetDataPresent("IOperator")) {
-        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
-        TreeNode node = operatorsTreeView.GetNodeAt(p);
-        if ((node != null) && (node.Tag is IOperatorGroup))
-          e.Effect = DragDropEffects.Copy;
-      }
-    }
-    private void operatorsTreeView_DragOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (e.Data.GetDataPresent("IOperator")) {
-        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
-        TreeNode node = operatorsTreeView.GetNodeAt(p);
-        if ((node != null) && (node.Tag is IOperatorGroup))
-          e.Effect = DragDropEffects.Copy;
-      }
-    }
-    private void operatorsTreeView_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        if (e.Data.GetDataPresent("IOperator")) {
-          IOperator op = (IOperator)e.Data.GetData("IOperator");
-          Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
-          TreeNode node = operatorsTreeView.GetNodeAt(p);
-          if (node != null) {
-            op = (IOperator)op.Clone();
-
-            while (op.SubOperators.Count > 0)
-              op.RemoveSubOperator(0);
-
-            IOperatorGroup group = (IOperatorGroup)node.Tag;
-            group.AddOperator(op);
-            node.Nodes.Add(CreateTreeNode(op));
-            operatorsTreeView.Sort();
-            EnableDisableButtons();
-          }
-        }
-      }
-    }
-    #endregion
-
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/OperatorLibraryView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorLibraryView.resx	(revision 2654)
+++ 	(revision )
@@ -1,129 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>139, 17</value>
-  </metadata>
-  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>277, 17</value>
-  </metadata>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.Designer.cs	(revision 2655)
@@ -0,0 +1,33 @@
+﻿namespace HeuristicLab.Core.Views {
+  partial class OperatorListView {
+    /// <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) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs	(revision 2655)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  [Content(typeof(OperatorList), true)]
+  [Content(typeof(IObservableList<IOperator>), true)]
+  public partial class OperatorListView : ItemListView<IOperator> {
+    TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public OperatorListView() {
+      InitializeComponent();
+      Caption = "Operator List";
+      itemsGroupBox.Text = "&Operators";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public OperatorListView(IObservableList<IOperator> operatorList)
+      : this() {
+      ItemList = operatorList;
+    }
+
+    protected override IOperator CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.TypeSelector.Caption = "&Available Operators";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IOperator), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+      else
+        return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.Designer.cs	(revision 2655)
@@ -0,0 +1,33 @@
+﻿namespace HeuristicLab.Core.Views {
+  partial class OperatorSetView {
+    /// <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) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.cs	(revision 2655)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  [Content(typeof(OperatorSet), true)]
+  [Content(typeof(IObservableSet<IOperator>), true)]
+  public partial class OperatorSetView : ItemSetView<IOperator> {
+    TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public OperatorSetView() {
+      InitializeComponent();
+      Caption = "Operator Set";
+      itemsGroupBox.Text = "&Operators";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public OperatorSetView(IObservableSet<IOperator> operatorSet)
+      : this() {
+      ItemSet = operatorSet;
+    }
+
+    protected override IOperator CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.TypeSelector.Caption = "&Available Operators";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IOperator), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+      else
+        return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.Designer.cs	(revision 2655)
@@ -0,0 +1,134 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class OperatorTreeView {
+    /// <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) {
+        if (graphTreeView.Nodes.Count > 0) {
+          RemoveTreeNode(graphTreeView.Nodes[0]);
+          graphTreeView.Nodes.Clear();
+        }
+        if (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.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.graphTreeView = new System.Windows.Forms.TreeView();
+      this.graphContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.breakpointToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.graphContextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // graphTreeView
+      // 
+      this.graphTreeView.AllowDrop = true;
+      this.graphTreeView.ContextMenuStrip = this.graphContextMenuStrip;
+      this.graphTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.graphTreeView.HideSelection = false;
+      this.graphTreeView.ImageIndex = 0;
+      this.graphTreeView.ImageList = this.imageList;
+      this.graphTreeView.Location = new System.Drawing.Point(0, 0);
+      this.graphTreeView.Name = "graphTreeView";
+      this.graphTreeView.SelectedImageIndex = 0;
+      this.graphTreeView.ShowNodeToolTips = true;
+      this.graphTreeView.Size = new System.Drawing.Size(475, 291);
+      this.graphTreeView.TabIndex = 0;
+      this.graphTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.graphTreeView_BeforeExpand);
+      this.graphTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragDrop);
+      this.graphTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.graphTreeView_MouseDown);
+      this.graphTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragEnterOver);
+      this.graphTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.graphTreeView_KeyDown);
+      this.graphTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.graphTreeView_ItemDrag);
+      this.graphTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragEnterOver);
+      // 
+      // graphContextMenuStrip
+      // 
+      this.graphContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.breakpointToolStripMenuItem,
+            this.viewToolStripMenuItem});
+      this.graphContextMenuStrip.Name = "graphContextMenuStrip";
+      this.graphContextMenuStrip.Size = new System.Drawing.Size(153, 70);
+      this.graphContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.graphContextMenuStrip_Opening);
+      // 
+      // breakpointToolStripMenuItem
+      // 
+      this.breakpointToolStripMenuItem.CheckOnClick = true;
+      this.breakpointToolStripMenuItem.Name = "breakpointToolStripMenuItem";
+      this.breakpointToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.breakpointToolStripMenuItem.Text = "&Breakpoint";
+      this.breakpointToolStripMenuItem.ToolTipText = "Halt engine execution after executing the operator";
+      this.breakpointToolStripMenuItem.Click += new System.EventHandler(this.breakpointToolStripMenuItem_Click);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.viewToolStripMenuItem.Text = "&View...";
+      this.viewToolStripMenuItem.ToolTipText = "View operator";
+      this.viewToolStripMenuItem.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
+      // 
+      // OperatorTreeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.graphTreeView);
+      this.Name = "OperatorTreeView";
+      this.Size = new System.Drawing.Size(475, 291);
+      this.graphContextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TreeView graphTreeView;
+    private System.Windows.Forms.ContextMenuStrip graphContextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem breakpointToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.ImageList imageList;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 2655)
@@ -0,0 +1,427 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of an <see cref="OperatorGraph"/>.
+  /// </summary>
+  [Content(typeof(IOperator), false)]
+  public partial class OperatorTreeView : ItemViewBase {
+    private Dictionary<IOperatorParameter, List<TreeNode>> operatorParameterNodeTable;
+    private Dictionary<IOperator, List<TreeNode>> operatorNodeTable;
+    private Dictionary<IObservableKeyedCollection<string, IParameter>, IOperator> parametersOperatorTable;
+
+    /// <summary>
+    /// Gets or sets the operator graph to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorGraphView"/> with caption "Operator Graph".
+    /// </summary>
+    public OperatorTreeView() {
+      InitializeComponent();
+      graphTreeView.Sorted = true;
+      operatorParameterNodeTable = new Dictionary<IOperatorParameter, List<TreeNode>>();
+      operatorNodeTable = new Dictionary<IOperator, List<TreeNode>>();
+      parametersOperatorTable = new Dictionary<IObservableKeyedCollection<string, IParameter>, IOperator>();
+      Caption = "Operator";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorGraphView"/> 
+    /// with the given <paramref name="operatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorGraphView()"/>.</remarks>
+    /// <param name="operatorGraph">The operator graph to represent visually.</param>
+    public OperatorTreeView(IOperator op)
+      : this() {
+      Operator = op;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (graphTreeView.Nodes.Count > 0)
+        RemoveTreeNode(graphTreeView.Nodes[0]);
+      graphTreeView.Enabled = false;
+      Caption = "Operator";
+      if (Operator != null) {
+        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
+        TreeNode root = new TreeNode();
+        FillTreeNode(root, Operator);
+        graphTreeView.Nodes.Add(root);
+        graphTreeView.Enabled = true;
+      }
+    }
+
+    #region TreeNode Management
+    private TreeNode CreateTreeNode(IOperatorParameter operatorParameter) {
+      TreeNode node = new TreeNode();
+      node.Text = operatorParameter.Name + ": ";
+      SetOperatorParameterTag(node, operatorParameter);
+
+      if (!operatorParameterNodeTable.ContainsKey(operatorParameter)) {
+        operatorParameterNodeTable.Add(operatorParameter, new List<TreeNode>());
+        operatorParameter.ActualNameChanged += new EventHandler(operatorParameter_ActualNameChanged);
+        operatorParameter.ValueChanged += new EventHandler(operatorParameter_ValueChanged);
+      }
+      operatorParameterNodeTable[operatorParameter].Add(node);
+
+      IOperator op = operatorParameter.Value;
+      if (op == null)
+        node.Text += operatorParameter.ActualName;
+      else
+        FillTreeNode(node, op);
+
+      return node;
+    }
+    private void FillTreeNode(TreeNode node, IOperator op) {
+      if (!graphTreeView.ImageList.Images.ContainsKey(op.GetType().FullName))
+        graphTreeView.ImageList.Images.Add(op.GetType().FullName, op.ItemImage);
+
+      node.Text += op.Name;
+      node.ToolTipText = op.ItemName + ": " + op.ItemDescription;
+      node.ImageIndex = graphTreeView.ImageList.Images.IndexOfKey(op.GetType().FullName);
+      node.SelectedImageIndex = node.ImageIndex;
+      SetOperatorTag(node, op);
+
+      if (!operatorNodeTable.ContainsKey(op)) {
+        operatorNodeTable.Add(op, new List<TreeNode>());
+        op.NameChanged += new EventHandler(op_NameChanged);
+        op.BreakpointChanged += new EventHandler(op_BreakpointChanged);
+        parametersOperatorTable.Add(op.Parameters, op);
+        op.Parameters.ItemsAdded += new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsAdded);
+        op.Parameters.ItemsRemoved += new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsRemoved);
+        op.Parameters.ItemsReplaced += new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsReplaced);
+        op.Parameters.CollectionReset += new CollectionItemsChangedEventHandler<IParameter>(Parameters_CollectionReset);
+      }
+      operatorNodeTable[op].Add(node);
+
+      if (op.Breakpoint)
+        node.ForeColor = Color.Red;
+
+      foreach (IParameter param in op.Parameters) {
+        if (param is IOperatorParameter)
+          node.Nodes.Add(new TreeNode());
+      }
+      node.Collapse();
+    }
+    private void ClearTreeNode(TreeNode node) {
+      while (node.Nodes.Count > 0)
+        RemoveTreeNode(node.Nodes[0]);
+
+      IOperator op = GetOperatorTag(node);
+      if (op != null) {
+        operatorNodeTable[op].Remove(node);
+        if (operatorNodeTable[op].Count == 0) {
+          op.NameChanged -= new EventHandler(op_NameChanged);
+          op.BreakpointChanged -= new EventHandler(op_BreakpointChanged);
+          operatorNodeTable.Remove(op);
+          op.Parameters.ItemsAdded -= new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsAdded);
+          op.Parameters.ItemsRemoved -= new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsRemoved);
+          op.Parameters.ItemsReplaced -= new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsReplaced);
+          op.Parameters.CollectionReset -= new CollectionItemsChangedEventHandler<IParameter>(Parameters_CollectionReset);
+          parametersOperatorTable.Remove(op.Parameters);
+        }
+      }
+      SetOperatorTag(node, null);
+    }
+    private void RemoveTreeNode(TreeNode node) {
+      ClearTreeNode(node);
+
+      IOperatorParameter opParam = GetOperatorParameterTag(node);
+      if (opParam != null) {
+        operatorParameterNodeTable[opParam].Remove(node);
+        if (operatorParameterNodeTable[opParam].Count == 0) {
+          opParam.ActualNameChanged -= new EventHandler(operatorParameter_ActualNameChanged);
+          opParam.ValueChanged -= new EventHandler(operatorParameter_ValueChanged);
+          operatorParameterNodeTable.Remove(opParam);
+        }
+      }
+      SetOperatorParameterTag(node, null);
+      node.Remove();
+    }
+    private void AddParameterNodes(IOperator op, IEnumerable<IParameter> parameters) {
+      foreach (IParameter param in parameters) {
+        IOperatorParameter opParam = param as IOperatorParameter;
+        if (opParam != null) {
+          foreach (TreeNode node in operatorNodeTable[op])
+            node.Nodes.Add(CreateTreeNode(opParam));
+        }
+      }
+    }
+    private void RemoveParameterNodes(IEnumerable<IParameter> parameters) {
+      foreach (IParameter param in parameters) {
+        IOperatorParameter opParam = param as IOperatorParameter;
+        if (opParam != null) {
+          while (operatorParameterNodeTable.ContainsKey(opParam))
+            RemoveTreeNode(operatorParameterNodeTable[opParam][0]);
+        }
+      }
+    }
+    #endregion
+
+    #region Parameter and Operator Events
+    private void operatorParameter_ActualNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(operatorParameter_ActualNameChanged), sender, e);
+      else {
+        IOperatorParameter opParam = (IOperatorParameter)sender;
+        if (opParam.Value == null) {
+          foreach (TreeNode node in operatorParameterNodeTable[opParam])
+            node.Text = opParam.Name + ": " + opParam.ActualName;
+        }
+      }
+    }
+    private void operatorParameter_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(operatorParameter_ValueChanged), sender, e);
+      else {
+        IOperatorParameter opParam = (IOperatorParameter)sender;
+        foreach (TreeNode node in operatorParameterNodeTable[opParam].ToArray())
+          ClearTreeNode(node);
+        foreach (TreeNode node in operatorParameterNodeTable[opParam]) {
+          node.Text = opParam.Name + ": ";
+          if (opParam.Value == null)
+            node.Text += opParam.ActualName;
+          else
+            FillTreeNode(node, opParam.Value);
+        }
+      }
+    }
+    private void op_NameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(op_NameChanged), sender, e);
+      else {
+        IOperator op = (IOperator)sender;
+        foreach (TreeNode node in operatorNodeTable[op]) {
+          IOperatorParameter opParam = GetOperatorParameterTag(node);
+          if (opParam == null)
+            node.Text = op.Name + " (" + op.ItemName + ")";
+          else
+            node.Text = opParam.Name + ": " + op.Name;
+        }
+      }
+    }
+    private void op_BreakpointChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(op_BreakpointChanged), sender, e);
+      else {
+        IOperator op = (IOperator)sender;
+        foreach (TreeNode node in operatorNodeTable[op]) {
+          if (op.Breakpoint)
+            node.ForeColor = Color.Red;
+          else
+            node.ForeColor = graphTreeView.ForeColor;
+        }
+      }
+    }
+
+    private void Parameters_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsAdded), sender, e);
+      else {
+        IObservableKeyedCollection<string, IParameter> coll = (IObservableKeyedCollection<string, IParameter>)sender;
+        IOperator op = parametersOperatorTable[coll];
+        AddParameterNodes(op, e.Items);
+      }
+    }
+    private void Parameters_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsRemoved), sender, e);
+      else
+        RemoveParameterNodes(e.Items);
+    }
+    private void Parameters_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IParameter>(Parameters_ItemsReplaced), sender, e);
+      else {
+        RemoveParameterNodes(e.Items);
+        IObservableKeyedCollection<string, IParameter> coll = (IObservableKeyedCollection<string, IParameter>)sender;
+        IOperator op = parametersOperatorTable[coll];
+        AddParameterNodes(op, e.Items);
+      }
+    }
+    private void Parameters_CollectionReset(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IParameter>(Parameters_CollectionReset), sender, e);
+      else {
+        RemoveParameterNodes(e.Items);
+        IObservableKeyedCollection<string, IParameter> coll = (IObservableKeyedCollection<string, IParameter>)sender;
+        IOperator op = parametersOperatorTable[coll];
+        AddParameterNodes(op, e.Items);
+      }
+    }
+    #endregion
+
+    #region TreeView Events
+    private void graphTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
+      TreeNode node = e.Node;
+      if ((node.Nodes.Count > 0) && (node.Nodes[0].Tag == null)) {
+        node.Nodes.Clear();
+        IOperator op = GetOperatorTag(node);
+        foreach (IParameter param in op.Parameters) {
+          IOperatorParameter opParam = param as IOperatorParameter;
+          if (opParam != null) node.Nodes.Add(CreateTreeNode(opParam));
+        }
+      }
+    }
+    private void graphTreeView_MouseDown(object sender, MouseEventArgs e) {
+      TreeNode node = graphTreeView.GetNodeAt(e.X, e.Y);
+      graphTreeView.SelectedNode = node;
+      graphTreeView.Refresh();
+    }
+    private void graphTreeView_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Delete) && (graphTreeView.SelectedNode != null)) {
+        IOperatorParameter opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
+        if (opParam != null) opParam.Value = null;
+      }
+    }
+    private void graphContextMenuStrip_Opening(object sender, CancelEventArgs e) {
+      viewToolStripMenuItem.Enabled = false;
+      breakpointToolStripMenuItem.Enabled = false;
+      breakpointToolStripMenuItem.Checked = false;
+      if (graphTreeView.SelectedNode != null) {
+        IOperator op = GetOperatorTag(graphTreeView.SelectedNode);
+        if (op != null) {
+          IView view = MainFormManager.CreateDefaultView(op);
+          if (view != null) {
+            viewToolStripMenuItem.Enabled = true;
+            viewToolStripMenuItem.Tag = view;
+          }
+          breakpointToolStripMenuItem.Enabled = true;
+          breakpointToolStripMenuItem.Tag = op;
+          if (op.Breakpoint)
+            breakpointToolStripMenuItem.Checked = true;
+        }
+      }
+    }
+    private void graphTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = (TreeNode)e.Item;
+      IOperatorParameter opParam = GetOperatorParameterTag(node);
+      IOperator op = GetOperatorTag(node);
+      DataObject data = new DataObject();
+      data.SetData("Type", op.GetType());
+      data.SetData("Value", op);
+      if (opParam == null) {
+        DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+      } else {
+        DragDropEffects action = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
+        if ((action & DragDropEffects.Move) == DragDropEffects.Move)
+          opParam.Value = null;
+      }
+    }
+    private void graphTreeView_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (typeof(IOperator).IsAssignableFrom(type))) {
+        TreeNode node = graphTreeView.GetNodeAt(graphTreeView.PointToClient(new Point(e.X, e.Y)));
+        if ((node != null) && (GetOperatorParameterTag(node) != null)) {
+          if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+          else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
+          else e.Effect = DragDropEffects.Link;
+        }
+      }
+    }
+    private void graphTreeView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IOperator op = e.Data.GetData("Value") as IOperator;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) op = (IOperator)op.Clone();
+        TreeNode node = graphTreeView.GetNodeAt(graphTreeView.PointToClient(new Point(e.X, e.Y)));
+        IOperatorParameter opParam = GetOperatorParameterTag(node);
+        opParam.Value = op;
+      }
+    }
+    #endregion
+
+    #region Context Menu Events
+    private void viewToolStripMenuItem_Click(object sender, EventArgs e) {
+      IView view = ((ToolStripMenuItem)sender).Tag as IView;
+      if (view != null) MainFormManager.MainForm.ShowView(view);
+    }
+    private void breakpointToolStripMenuItem_Click(object sender, EventArgs e) {
+      IOperator op = (IOperator)breakpointToolStripMenuItem.Tag;
+      op.Breakpoint = breakpointToolStripMenuItem.Checked;
+    }
+    #endregion
+
+    #region Helpers
+    private class Tuple<T1, T2> {
+      public T1 Item1 { get; set; }
+      public T2 Item2 { get; set; }
+
+      public Tuple() {
+        Item1 = default(T1);
+        Item2 = default(T2);
+      }
+      public Tuple(T1 item1, T2 item2) {
+        Item1 = item1;
+        Item2 = item2;
+      }
+    }
+
+    private IOperatorParameter GetOperatorParameterTag(TreeNode node) {
+      if (node.Tag != null)
+        return ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item1;
+      else
+        return null;
+    }
+    private void SetOperatorParameterTag(TreeNode node, IOperatorParameter operatorParameter) {
+      if (node.Tag == null)
+        node.Tag = new Tuple<IOperatorParameter, IOperator>(operatorParameter, null);
+      else
+        ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item1 = operatorParameter;
+    }
+    private IOperator GetOperatorTag(TreeNode node) {
+      if (node.Tag != null)
+        return ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item2;
+      else
+        return null;
+    }
+    private void SetOperatorTag(TreeNode node, IOperator op) {
+      if (node.Tag == null)
+        node.Tag = new Tuple<IOperatorParameter, IOperator>(null, op);
+      else
+        ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item2 = op;
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorsSidebar.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorsSidebar.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorsSidebar.Designer.cs	(revision 2655)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class OperatorsSidebar {
+    /// <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) {
+        if (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.typeSelector = new HeuristicLab.Core.Views.TypeSelector();
+      this.SuspendLayout();
+      // 
+      // typeSelector
+      // 
+      this.typeSelector.Caption = "&Available Operators";
+      this.typeSelector.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.typeSelector.Location = new System.Drawing.Point(0, 0);
+      this.typeSelector.Name = "typeSelector";
+      this.typeSelector.Size = new System.Drawing.Size(316, 296);
+      this.typeSelector.TabIndex = 0;
+      // 
+      // OperatorsSidebar
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Caption = "Operators";
+      this.Controls.Add(this.typeSelector);
+      this.Name = "OperatorsSidebar";
+      this.Size = new System.Drawing.Size(316, 296);
+      this.Load += new System.EventHandler(this.OperatorsSidebar_Load);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private TypeSelector typeSelector;
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorsSidebar.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorsSidebar.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorsSidebar.cs	(revision 2655)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using System.Linq;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Core.Views { 
+  public partial class OperatorsSidebar : ViewBase {
+    public OperatorsSidebar() {
+      InitializeComponent();
+    }
+
+    private void OperatorsSidebar_Load(object sender, EventArgs e) {
+      typeSelector.Configure(typeof(IOperator), false, false);
+    }
+
+    public override void OnClosing(object sender, CancelEventArgs e) {
+      base.OnClosing(sender, e);
+      e.Cancel = true;
+      MainFormManager.MainForm.HideView(this);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.Designer.cs	(revision 2655)
@@ -0,0 +1,107 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class ParameterBaseView {
+    /// <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) {
+        if (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.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(313, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
+      this.descriptionTextBox.Size = new System.Drawing.Size(313, 62);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 97);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 4;
+      this.dataTypeLabel.Text = "Data &Type:";
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 94);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(313, 20);
+      this.dataTypeTextBox.TabIndex = 5;
+      // 
+      // ParameterBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Name = "ParameterBaseView";
+      this.Size = new System.Drawing.Size(393, 117);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Label dataTypeLabel;
+    protected System.Windows.Forms.TextBox dataTypeTextBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.cs	(revision 2655)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [Content(typeof(IParameter), true)]
+  public partial class ParameterBaseView : NamedItemBaseView {
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IParameter Parameter {
+      get { return (IParameter)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public ParameterBaseView() {
+      InitializeComponent();
+      Caption = "Parameter";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public ParameterBaseView(IParameter parameter)
+      : this() {
+      Parameter = parameter;
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (Parameter == null) {
+        Caption = "Parameter";
+        dataTypeTextBox.Text = "-";
+        dataTypeTextBox.Enabled = false;
+      } else {
+        Caption = Parameter.Name + " (" + Parameter.GetType().Name + ")";
+        dataTypeTextBox.Text = Parameter.DataType.Name;
+        dataTypeTextBox.Enabled = true;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.Designer.cs	(revision 2655)
@@ -0,0 +1,33 @@
+﻿namespace HeuristicLab.Core.Views {
+  partial class ParameterCollectionView {
+    /// <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) {
+        if (createParameterDialog != null) createParameterDialog.Dispose();
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs	(revision 2655)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  [Content(typeof(ParameterCollection), true)]
+  [Content(typeof(IObservableKeyedCollection<string, IParameter>), true)]
+  public partial class ParameterCollectionView : NamedItemCollectionView<IParameter> {
+    CreateParameterDialog createParameterDialog;
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public ParameterCollectionView() {
+      InitializeComponent();
+      Caption = "ParameterCollection";
+      itemsGroupBox.Text = "&Parameters";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public ParameterCollectionView(IObservableKeyedCollection<string, IParameter> parameterCollection)
+      : this() {
+      NamedItemCollection = parameterCollection;
+    }
+
+    protected override IParameter CreateItem() {
+      if (createParameterDialog == null) createParameterDialog = new CreateParameterDialog();
+
+      if (createParameterDialog.ShowDialog(this) == DialogResult.OK) {
+        IParameter param = createParameterDialog.Parameter;
+        if (NamedItemCollection.ContainsKey(param.Name))
+          param = (IParameter)Activator.CreateInstance(param.GetType(), GetUniqueName(param.Name), param.Description);
+        return param;
+      } else
+        return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.Designer.cs	(revision 2655)
@@ -0,0 +1,201 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class ParameterView {
+    /// <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) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (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.valueGroupBox = new System.Windows.Forms.GroupBox();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.actualNameTextBox = new System.Windows.Forms.TextBox();
+      this.actualNameLabel = new System.Windows.Forms.Label();
+      this.setValueButton = new System.Windows.Forms.Button();
+      this.clearValueButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.valueGroupBox.SuspendLayout();
+      this.valuePanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
+      this.dataTypeLabel.TabIndex = 6;
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
+      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
+      this.dataTypeTextBox.TabIndex = 7;
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
+      this.descriptionLabel.TabIndex = 4;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
+      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
+      this.descriptionTextBox.TabIndex = 5;
+      // 
+      // valueGroupBox
+      // 
+      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Controls.Add(this.clearValueButton);
+      this.valueGroupBox.Controls.Add(this.setValueButton);
+      this.valueGroupBox.Location = new System.Drawing.Point(0, 146);
+      this.valueGroupBox.Name = "valueGroupBox";
+      this.valueGroupBox.Size = new System.Drawing.Size(386, 169);
+      this.valueGroupBox.TabIndex = 10;
+      this.valueGroupBox.TabStop = false;
+      this.valueGroupBox.Text = "&Value:";
+      // 
+      // valuePanel
+      // 
+      this.valuePanel.AllowDrop = true;
+      this.valuePanel.Controls.Add(this.viewHost);
+      this.valuePanel.Location = new System.Drawing.Point(3, 48);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(380, 118);
+      this.valuePanel.TabIndex = 0;
+      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
+      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      // 
+      // viewHost
+      // 
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Object = null;
+      this.viewHost.Size = new System.Drawing.Size(380, 118);
+      this.viewHost.TabIndex = 0;
+      // 
+      // actualNameTextBox
+      // 
+      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
+      this.actualNameTextBox.Name = "actualNameTextBox";
+      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
+      this.actualNameTextBox.TabIndex = 3;
+      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // actualNameLabel
+      // 
+      this.actualNameLabel.AutoSize = true;
+      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
+      this.actualNameLabel.Name = "actualNameLabel";
+      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
+      this.actualNameLabel.TabIndex = 2;
+      this.actualNameLabel.Text = "&Actual Name:";
+      // 
+      // setValueButton
+      // 
+      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setValueButton.Name = "setValueButton";
+      this.setValueButton.Size = new System.Drawing.Size(23, 23);
+      this.setValueButton.TabIndex = 8;
+      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
+      this.setValueButton.UseVisualStyleBackColor = true;
+      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
+      // 
+      // clearValueButton
+      // 
+      this.clearValueButton.Enabled = false;
+      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
+      this.clearValueButton.Name = "clearValueButton";
+      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
+      this.clearValueButton.TabIndex = 9;
+      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
+      this.clearValueButton.UseVisualStyleBackColor = true;
+      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
+      // 
+      // ParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueGroupBox);
+      this.Controls.Add(this.actualNameLabel);
+      this.Controls.Add(this.actualNameTextBox);
+      this.Name = "ParameterView";
+      this.Size = new System.Drawing.Size(386, 315);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
+      this.Controls.SetChildIndex(this.actualNameLabel, 0);
+      this.Controls.SetChildIndex(this.valueGroupBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.valueGroupBox.ResumeLayout(false);
+      this.valuePanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox valueGroupBox;
+    private System.Windows.Forms.TextBox actualNameTextBox;
+    private System.Windows.Forms.Label actualNameLabel;
+    private System.Windows.Forms.Panel valuePanel;
+    private ViewHost viewHost;
+    private System.Windows.Forms.Button setValueButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Button clearValueButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.cs	(revision 2655)
@@ -0,0 +1,156 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [Content(typeof(Parameter), true)]
+  public partial class ParameterView : ParameterBaseView {
+    private TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public new Parameter Parameter {
+      get { return (Parameter)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public ParameterView() {
+      InitializeComponent();
+      Caption = "Parameter";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public ParameterView(Parameter parameter)
+      : this() {
+      Parameter = parameter;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterObjectEvents() {
+      Parameter.ActualNameChanged -= new EventHandler(Parameter_ActualNameChanged);
+      Parameter.ValueChanged -= new EventHandler(Parameter_ValueChanged);
+      base.DeregisterObjectEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      Parameter.ActualNameChanged += new EventHandler(Parameter_ActualNameChanged);
+      Parameter.ValueChanged += new EventHandler(Parameter_ValueChanged);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (Parameter == null) {
+        Caption = "Parameter";
+        actualNameTextBox.Text = "-";
+        actualNameTextBox.Enabled = false;
+        setValueButton.Enabled = false;
+        clearValueButton.Enabled = false;
+        valueGroupBox.Enabled = false;
+        viewHost.Object = null;
+      } else {
+        Caption = Parameter.Name + " (" + Parameter.GetType().Name + ")";
+        actualNameTextBox.Text = Parameter.ActualName;
+        actualNameTextBox.Enabled = Parameter.Value == null;
+        setValueButton.Enabled = Parameter.Value == null;
+        clearValueButton.Enabled = Parameter.Value != null;
+        valueGroupBox.Enabled = true;
+        viewHost.Object = Parameter.Value;
+      }
+    }
+
+    private void Parameter_ActualNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Parameter_ActualNameChanged), sender, e);
+      else
+        actualNameTextBox.Text = Parameter.ActualName;
+    }
+    private void Parameter_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Parameter_ValueChanged), sender, e);
+      else {
+        actualNameTextBox.Enabled = Parameter.Value == null;
+        setValueButton.Enabled = Parameter.Value == null;
+        clearValueButton.Enabled = Parameter.Value != null;
+        viewHost.Object = Parameter.Value;
+      }
+    }
+
+    private void actualNameTextBox_Validated(object sender, EventArgs e) {
+      Parameter.ActualName = actualNameTextBox.Text;
+    }
+    private void setValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Value Type";
+      }
+      typeSelectorDialog.TypeSelector.Configure(Parameter.DataType, false, false);
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        Parameter.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+    }
+    private void clearValueButton_Click(object sender, EventArgs e) {
+      Parameter.Value = null;
+    }
+    private void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (Parameter.DataType.IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
+        else e.Effect = DragDropEffects.Link;
+      }
+    }
+    private void valuePanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IItem item = e.Data.GetData("Value") as IItem;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (IItem)item.Clone();
+        Parameter.Value = item;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeListView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeListView.Designer.cs	(revision 2655)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Core.Views {
+  partial class ScopeListView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeListView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeListView.cs	(revision 2655)
@@ -0,0 +1,35 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  [Content(typeof(ScopeList), true)]
+  [Content(typeof(IObservableList<Scope>), true)]
+  public partial class ScopeListView : ItemListView<Scope> {
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public ScopeListView() {
+      InitializeComponent();
+      Caption = "ScopeList";
+      itemsGroupBox.Text = "&Scopes";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public ScopeListView(IObservableList<Scope> scopeList)
+      : this() {
+      ItemList = scopeList;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.Designer.cs	(revision 2655)
@@ -32,10 +32,10 @@
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
     protected override void Dispose(bool disposing) {
-      if (scopesTreeView.Nodes.Count > 0) {
-        RemoveTreeNode(scopesTreeView.Nodes[0]);
-        scopesTreeView.Nodes.Clear();
-      }
-      if (disposing && (components != null)) {
-        components.Dispose();
+      if (disposing) {
+        if (scopesTreeView.Nodes.Count > 0) {
+          RemoveTreeNode(scopesTreeView.Nodes[0]);
+          scopesTreeView.Nodes.Clear();
+        }
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
@@ -49,76 +49,67 @@
     /// </summary>
     private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
       this.scopesTreeView = new System.Windows.Forms.TreeView();
-      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
-      this.automaticUpdatingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
-      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.variablesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.contextMenuStrip.SuspendLayout();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.scopesGroupBox = new System.Windows.Forms.GroupBox();
+      this.variableCollectionView = new HeuristicLab.Core.Views.VariableCollectionView();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.scopesGroupBox.SuspendLayout();
       this.SuspendLayout();
       // 
       // scopesTreeView
       // 
-      this.scopesTreeView.ContextMenuStrip = this.contextMenuStrip;
       this.scopesTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
       this.scopesTreeView.HideSelection = false;
-      this.scopesTreeView.Location = new System.Drawing.Point(0, 0);
+      this.scopesTreeView.Location = new System.Drawing.Point(3, 16);
       this.scopesTreeView.Name = "scopesTreeView";
       this.scopesTreeView.ShowNodeToolTips = true;
-      this.scopesTreeView.Size = new System.Drawing.Size(400, 400);
+      this.scopesTreeView.Size = new System.Drawing.Size(394, 181);
       this.scopesTreeView.TabIndex = 0;
       this.scopesTreeView.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.scopesTreeView_AfterCollapse);
       this.scopesTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.scopesTreeView_BeforeExpand);
-      this.scopesTreeView.DoubleClick += new System.EventHandler(this.scopesTreeView_DoubleClick);
       this.scopesTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.scopesTreeView_MouseDown);
       this.scopesTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.scopesTreeView_ItemDrag);
       // 
-      // contextMenuStrip
+      // splitContainer
       // 
-      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.automaticUpdatingToolStripMenuItem,
-            this.refreshToolStripMenuItem,
-            this.toolStripMenuItem1,
-            this.variablesToolStripMenuItem,
-            this.viewToolStripMenuItem});
-      this.contextMenuStrip.Name = "contextMenuStrip";
-      this.contextMenuStrip.Size = new System.Drawing.Size(180, 98);
-      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
       // 
-      // automaticUpdatingToolStripMenuItem
+      // splitContainer.Panel1
       // 
-      this.automaticUpdatingToolStripMenuItem.CheckOnClick = true;
-      this.automaticUpdatingToolStripMenuItem.Name = "automaticUpdatingToolStripMenuItem";
-      this.automaticUpdatingToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
-      this.automaticUpdatingToolStripMenuItem.Text = "Automatic &Updating";
-      this.automaticUpdatingToolStripMenuItem.ToolTipText = "Automatically update scope editor during execution";
-      this.automaticUpdatingToolStripMenuItem.Click += new System.EventHandler(this.automaticUpdatingToolStripMenuItem_Click);
+      this.splitContainer.Panel1.Controls.Add(this.scopesGroupBox);
       // 
-      // refreshToolStripMenuItem
+      // splitContainer.Panel2
       // 
-      this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem";
-      this.refreshToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
-      this.refreshToolStripMenuItem.Text = "&Refresh";
-      this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click);
+      this.splitContainer.Panel2.Controls.Add(this.variableCollectionView);
+      this.splitContainer.Size = new System.Drawing.Size(400, 400);
+      this.splitContainer.SplitterDistance = 200;
+      this.splitContainer.TabIndex = 1;
       // 
-      // toolStripMenuItem1
+      // scopesGroupBox
       // 
-      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
-      this.toolStripMenuItem1.Size = new System.Drawing.Size(176, 6);
+      this.scopesGroupBox.Controls.Add(this.scopesTreeView);
+      this.scopesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopesGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.scopesGroupBox.Name = "scopesGroupBox";
+      this.scopesGroupBox.Size = new System.Drawing.Size(400, 200);
+      this.scopesGroupBox.TabIndex = 0;
+      this.scopesGroupBox.TabStop = false;
+      this.scopesGroupBox.Text = "&Scopes";
       // 
-      // viewToolStripMenuItem
+      // variableCollectionView
       // 
-      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
-      this.viewToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
-      this.viewToolStripMenuItem.Text = "&View";
-      // 
-      // variablesToolStripMenuItem
-      // 
-      this.variablesToolStripMenuItem.Name = "variablesToolStripMenuItem";
-      this.variablesToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
-      this.variablesToolStripMenuItem.Text = "&Variables...";
-      this.variablesToolStripMenuItem.Click += new System.EventHandler(this.variablesToolStripMenuItem_Click);
+      this.variableCollectionView.Caption = "VariableCollection";
+      this.variableCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableCollectionView.ItemCollection = null;
+      this.variableCollectionView.Location = new System.Drawing.Point(0, 0);
+      this.variableCollectionView.Name = "variableCollectionView";
+      this.variableCollectionView.NamedItemCollection = null;
+      this.variableCollectionView.Size = new System.Drawing.Size(400, 196);
+      this.variableCollectionView.TabIndex = 0;
       // 
       // ScopeView
@@ -126,8 +117,11 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.scopesTreeView);
+      this.Controls.Add(this.splitContainer);
       this.Name = "ScopeView";
       this.Size = new System.Drawing.Size(400, 400);
-      this.contextMenuStrip.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.scopesGroupBox.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -137,10 +131,7 @@
 
     private System.Windows.Forms.TreeView scopesTreeView;
-    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
-    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
-    private System.Windows.Forms.ToolStripMenuItem automaticUpdatingToolStripMenuItem;
-    private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem;
-    private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
-    private System.Windows.Forms.ToolStripMenuItem variablesToolStripMenuItem;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.GroupBox scopesGroupBox;
+    private VariableCollectionView variableCollectionView;
   }
 }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 2655)
@@ -30,13 +30,14 @@
 using HeuristicLab.Common;
 using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
 
 namespace HeuristicLab.Core.Views {
   /// <summary>
-  /// The visual represenation of <see cref="IScope"/>.
+  /// The visual represenation of <see cref="Scope"/>.
   /// </summary>
   [Content(typeof(Scope), true)]
   public partial class ScopeView : ItemViewBase {
-    private Dictionary<IScope, TreeNode> scopeNodeTable;
-    private Dictionary<IScope, bool> scopeExpandedTable;
+    private Dictionary<Scope, TreeNode> scopeNodeTable;
+    private Dictionary<ScopeList, Scope> subScopesScopeTable;
 
     /// <summary>
@@ -45,14 +46,7 @@
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
     /// No own data storage present.</remarks>
-    public IScope Scope {
-      get { return (IScope)Item; }
+    public Scope Scope {
+      get { return (Scope)Item; }
       set { base.Item = value; }
-    }
-    private bool myAutomaticUpdating;
-    /// <summary>
-    /// Gets information whether the scope is automatically updating. 
-    /// </summary>
-    public bool AutomaticUpdating {
-      get { return myAutomaticUpdating; }
     }
 
@@ -64,7 +58,7 @@
       InitializeComponent();
       Caption = "Scope";
-      scopeNodeTable = new Dictionary<IScope, TreeNode>();
-      scopeExpandedTable = new Dictionary<IScope, bool>();
-      myAutomaticUpdating = false;
+      scopeNodeTable = new Dictionary<Scope, TreeNode>();
+      subScopesScopeTable = new Dictionary<ScopeList, Scope>();
+
     }
     /// <summary>
@@ -73,5 +67,5 @@
     /// <remarks>Calls <see cref="ScopeView()"/>.</remarks>
     /// <param name="scope">The scope to represent visually.</param>
-    public ScopeView(IScope scope)
+    public ScopeView(Scope scope)
       : this() {
       Scope = scope;
@@ -82,10 +76,12 @@
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      if (scopesTreeView.Nodes.Count > 0)
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (scopesTreeView.Nodes.Count > 0) {
         RemoveTreeNode(scopesTreeView.Nodes[0]);
-      scopesTreeView.SelectedNode = null;
-      scopesTreeView.Nodes.Clear();
+        scopesTreeView.Nodes.Clear();
+      }
+      variableCollectionView.NamedItemCollection = null;
+      variableCollectionView.Enabled = false;
       if (Scope == null) {
         Caption = "Scope";
@@ -93,10 +89,10 @@
       } else {
         Caption = Scope.Name + " (" + Scope.GetType().Name + ")";
+        scopesTreeView.Enabled = true;
         scopesTreeView.Nodes.Add(CreateTreeNode(Scope));
-        scopesTreeView.Enabled = true;
-      }
-    }
-
-    private TreeNode CreateTreeNode(IScope scope) {
+      }
+    }
+
+    private TreeNode CreateTreeNode(Scope scope) {
       TreeNode node = new TreeNode();
       node.Text = scope.Name;
@@ -104,48 +100,56 @@
 
       scopeNodeTable.Add(scope, node);
-      scopeExpandedTable.Add(scope, false);
-      if (myAutomaticUpdating) {
-        scope.SubScopeAdded += new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeAdded);
-        scope.SubScopeRemoved += new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeRemoved);
-        scope.SubScopesReordered += new EventHandler(Scope_SubScopesReordered);
-      }
+      scope.NameChanged += new EventHandler(Scope_NameChanged);
+      scope.SubScopes.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsAdded);
+      scope.SubScopes.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsRemoved);
+      scope.SubScopes.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsReplaced);
+      scope.SubScopes.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsMoved);
+      scope.SubScopes.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_CollectionReset);
+      subScopesScopeTable.Add(scope.SubScopes, scope);
       if (scope.SubScopes.Count > 0)
         node.Nodes.Add(new TreeNode());
       return node;
     }
+
     private void RemoveTreeNode(TreeNode node) {
       foreach (TreeNode child in node.Nodes)
         RemoveTreeNode(child);
 
-      IScope scope = node.Tag as IScope;
-      if ((scope != null) && (scopeNodeTable.ContainsKey(scope))) {
+      Scope scope = node.Tag as Scope;
+      if (scope != null) {
         scopeNodeTable.Remove(scope);
-        scopeExpandedTable.Remove(scope);
-        scope.SubScopeAdded -= new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeAdded);
-        scope.SubScopeRemoved -= new EventHandler<EventArgs<IScope, int>>(Scope_SubScopeRemoved);
-        scope.SubScopesReordered -= new EventHandler(Scope_SubScopesReordered);
+        scope.NameChanged -= new EventHandler(Scope_NameChanged);
+        scope.SubScopes.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsAdded);
+        scope.SubScopes.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsRemoved);
+        scope.SubScopes.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsReplaced);
+        scope.SubScopes.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsMoved);
+        scope.SubScopes.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_CollectionReset);
+        subScopesScopeTable.Remove(scope.SubScopes);
       }
     }
 
     #region TreeView Events
-    private void scopesTreeView_DoubleClick(object sender, EventArgs e) {
-      // make sure that we can't get NullPointerExceptions
-      if(scopesTreeView.SelectedNode != null && scopesTreeView.SelectedNode.Tag != null) {
-        IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
-        MainFormManager.MainForm.ShowView(new VariablesScopeView(scope));
+    private void scopesTreeView_MouseDown(object sender, MouseEventArgs e) {
+      TreeNode node = scopesTreeView.GetNodeAt(e.X, e.Y);
+      if ((node != null) && (node.Tag is Scope)) {
+        variableCollectionView.NamedItemCollection = ((Scope)node.Tag).Variables;
+        variableCollectionView.Enabled = true;
+      } else {
+        variableCollectionView.NamedItemCollection = null;
+        variableCollectionView.Enabled = false;
+        if (node == null) scopesTreeView.SelectedNode = null;
       }
     }
     private void scopesTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
       TreeNode node = e.Node;
-      IScope scope = (IScope)node.Tag;
+      Scope scope = (Scope)node.Tag;
 
       node.Nodes.Clear();
       for (int i = 0; i < scope.SubScopes.Count; i++)
         node.Nodes.Add(CreateTreeNode(scope.SubScopes[i]));
-      scopeExpandedTable[scope] = true;
     }
     private void scopesTreeView_AfterCollapse(object sender, System.Windows.Forms.TreeViewEventArgs e) {
       TreeNode node = e.Node;
-      IScope scope = (IScope)node.Tag;
+      Scope scope = (Scope)node.Tag;
 
       if (node.Nodes.Count > 0) {
@@ -155,12 +159,11 @@
         node.Nodes.Add(new TreeNode());
       }
-      scopeExpandedTable[scope] = false;
     }
     private void scopesTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
       TreeNode node = (TreeNode)e.Item;
-      IScope scope = node.Tag as IScope;
+      Scope scope = node.Tag as Scope;
       if (scope != null) {
         DataObject data = new DataObject();
-        data.SetData("IScope", scope);
+        data.SetData("Scope", scope);
         data.SetData("DragSource", scopesTreeView);
         DoDragDrop(data, DragDropEffects.Copy);
@@ -169,113 +172,98 @@
     #endregion
 
-    #region Context Menu Events
-    private void contextMenuStrip_Opening(object sender, CancelEventArgs e) {
-      variablesToolStripMenuItem.Enabled = false;
-      viewToolStripMenuItem.DropDownItems.Clear();
-      viewToolStripMenuItem.Enabled = false;
-      if (scopesTreeView.SelectedNode != null) {
-        variablesToolStripMenuItem.Enabled = true;
-        IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
-        foreach (IVariable variable in scope.Variables) {
-          if (variable.Value is IVisualizationItem) {
-            ToolStripMenuItem item = new ToolStripMenuItem();
-            item.Text = variable.Name + "...";
-            item.Tag = variable.Value;
-            item.Click += new EventHandler(showViewToolStripMenuItem_Click);
-            viewToolStripMenuItem.DropDownItems.Add(item);
-          }
-        }
-        if (viewToolStripMenuItem.DropDownItems.Count > 0)
-          viewToolStripMenuItem.Enabled = true;
-      }
-    }
-    private void automaticUpdatingToolStripMenuItem_Click(object sender, EventArgs e) {
-      ToolStripMenuItem item = (ToolStripMenuItem)sender;
-      myAutomaticUpdating = item.Checked;
-      if (myAutomaticUpdating)
-        Refresh();
-    }
-    private void refreshToolStripMenuItem_Click(object sender, EventArgs e) {
-      Refresh();
-    }
-    private void variablesToolStripMenuItem_Click(object sender, EventArgs e) {
-      IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
-      MainFormManager.MainForm.ShowView(new VariablesScopeView(scope));
-    }
-    private void showViewToolStripMenuItem_Click(object sender, EventArgs e) {
-      IItem item = (IItem)((ToolStripMenuItem)sender).Tag;
-      IView view = MainFormManager.CreateDefaultView(item);
-      if (view != null) MainFormManager.MainForm.ShowView(view);
+    #region Scope Events
+    private void Scope_NameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Scope_NameChanged), sender, e);
+      else {
+        Scope scope = (Scope)sender;
+        scopeNodeTable[scope].Text = scope.Name;
+      }
     }
     #endregion
 
-    #region Scope Events
-    private delegate void ScopeDelegate(IScope scope);
-    private delegate void ScopeScopeIndexDelegate(IScope scope, IScope subScope, int index);
-    private void Scope_SubScopeAdded(object sender, EventArgs<IScope, int> e) {
-      IScope scope = (IScope)sender;
-      TreeNode node = scopeNodeTable[scope];
-      if (scopeExpandedTable[scope] || (scope.SubScopes.Count == 1))
-        AddSubScope(scope, e.Value, e.Value2);
-    }
-    private void AddSubScope(IScope scope, IScope subScope, int index) {
-      if (InvokeRequired) {
-        Invoke(new ScopeScopeIndexDelegate(AddSubScope), scope, subScope, index);
-      } else {
-        TreeNode parent = scopeNodeTable[scope];
-        TreeNode child;
-        if (parent.IsExpanded)
-          child = CreateTreeNode(subScope);
-        else
-          child = new TreeNode();
-        parent.Nodes.Insert(index, child);
-      }
-    }
-    private void Scope_SubScopeRemoved(object sender, EventArgs<IScope, int> e) {
-      IScope scope = (IScope)sender;
-      TreeNode node = scopeNodeTable[scope];
-      if (scopeExpandedTable[scope] || (scope.SubScopes.Count == 0))
-        RemoveSubScope(scope, e.Value, e.Value2);
-    }
-    private void RemoveSubScope(IScope scope, IScope subScope, int index) {
-      if (InvokeRequired) {
-        Invoke(new ScopeScopeIndexDelegate(RemoveSubScope), scope, subScope, index);
-      } else {
-        if (scopeNodeTable.ContainsKey(subScope)) {
-          TreeNode node = scopeNodeTable[subScope];
-          RemoveTreeNode(scopeNodeTable[subScope]);
-          node.Remove();
+    #region SubScopes Events
+    private void SubScopes_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsAdded), sender, e);
+      else {
+        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
+        TreeNode parentNode = scopeNodeTable[parentScope];
+        if (parentNode.IsExpanded) {
+          foreach (IndexedItem<Scope> item in e.Items) {
+            TreeNode node = CreateTreeNode(item.Value);
+            parentNode.Nodes.Insert(item.Index, node);
+          }
+        } else if (parentNode.Nodes.Count == 0) {
+          parentNode.Nodes.Add(new TreeNode());
+        }
+      }
+    }
+    private void SubScopes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsRemoved), sender, e);
+      else {
+        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
+        TreeNode parentNode = scopeNodeTable[parentScope];
+        if (parentNode.IsExpanded) {
+          foreach (IndexedItem<Scope> item in e.Items) {
+            TreeNode node = scopeNodeTable[item.Value];
+            RemoveTreeNode(node);
+            node.Remove();
+          }
+        } else if (parentScope.SubScopes.Count == 0) {
+          parentNode.Nodes.Clear();
+        }
+      }
+    }
+    private void SubScopes_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsReplaced), sender, e);
+      else {
+        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
+        TreeNode parentNode = scopeNodeTable[parentScope];
+        if (parentNode.IsExpanded) {
+          foreach (IndexedItem<Scope> item in e.Items) {
+            TreeNode node = parentNode.Nodes[item.Index];
+            RemoveTreeNode(node);
+            node.Remove();
+            node = CreateTreeNode(item.Value);
+            parentNode.Nodes.Insert(item.Index, node);
+          }
+        }
+      }
+    }
+    private void SubScopes_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_ItemsMoved), sender, e);
+      else {
+        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
+        TreeNode parentNode = scopeNodeTable[parentScope];
+        if (parentNode.IsExpanded) {
+          parentNode.Nodes.Clear();
+          foreach (IndexedItem<Scope> item in e.Items)
+            parentNode.Nodes.Insert(item.Index, scopeNodeTable[item.Value]);
+        }
+      }
+    }
+    private void SubScopes_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<Scope>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<Scope>>(SubScopes_CollectionReset), sender, e);
+      else {
+        Scope parentScope = subScopesScopeTable[(ScopeList)sender];
+        TreeNode parentNode = scopeNodeTable[parentScope];
+        if (parentNode.IsExpanded) {
+          foreach (TreeNode node in parentNode.Nodes)
+            RemoveTreeNode(node);
+          parentNode.Nodes.Clear();
+          foreach (IndexedItem<Scope> item in e.Items) {
+            TreeNode node = CreateTreeNode(item.Value);
+            parentNode.Nodes.Insert(item.Index, node);
+          }
         } else {
-          TreeNode node = scopeNodeTable[scope];
-          node.Nodes[0].Remove();
-        }
-      }
-    }
-    private void Scope_SubScopesReordered(object sender, EventArgs e) {
-      IScope scope = (IScope)sender;
-      TreeNode node = scopeNodeTable[scope];
-      if (scopeExpandedTable[scope])
-        ReorderSubScopes(scope);
-    }
-    private void ReorderSubScopes(IScope scope) {
-      if (InvokeRequired) {
-        Invoke(new ScopeDelegate(ReorderSubScopes), scope);
-      } else {
-        TreeNode node = scopeNodeTable[scope];
-        node.Nodes.Clear();
-        for (int i = 0; i < scope.SubScopes.Count; i++)
-          node.Nodes.Add(scopeNodeTable[scope.SubScopes[i]]);
-      }
-    }
-    #endregion
-
-    #region Mouse Events
-    private void scopesTreeView_MouseDown(object sender, MouseEventArgs e) {
-      if (e.Button != MouseButtons.Right)
-        return;
-      TreeNode clickedNode = scopesTreeView.GetNodeAt(e.X, e.Y);
-      if (clickedNode != null) {
-        scopesTreeView.SelectedNode = clickedNode;
-        scopesTreeView.Refresh();
+          parentNode.Nodes.Clear();
+          if (parentScope.SubScopes.Count > 0)
+            parentNode.Nodes.Add(new TreeNode());
+        }
       }
     }
Index: unk/sources/HeuristicLab.Core.Views/3.3/ScopeView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.resx	(revision 2654)
+++ 	(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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.Designer.cs	(revision 2655)
@@ -0,0 +1,148 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class TypeSelector {
+    /// <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) {
+        if (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.typesTreeView = new System.Windows.Forms.TreeView();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.groupBox.SuspendLayout();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // typesTreeView
+      // 
+      this.typesTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.typesTreeView.HideSelection = false;
+      this.typesTreeView.ImageIndex = 0;
+      this.typesTreeView.ImageList = this.imageList;
+      this.typesTreeView.Location = new System.Drawing.Point(0, 0);
+      this.typesTreeView.Name = "typesTreeView";
+      this.typesTreeView.SelectedImageIndex = 0;
+      this.typesTreeView.ShowNodeToolTips = true;
+      this.typesTreeView.Size = new System.Drawing.Size(297, 199);
+      this.typesTreeView.TabIndex = 0;
+      this.typesTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.typesTreeView_AfterSelect);
+      this.typesTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.typesTreeView_ItemDrag);
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // groupBox
+      // 
+      this.groupBox.Controls.Add(this.splitContainer);
+      this.groupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox.Location = new System.Drawing.Point(0, 0);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(303, 306);
+      this.groupBox.TabIndex = 0;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "&Available Types";
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.typesTreeView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.descriptionTextBox);
+      this.splitContainer.Size = new System.Drawing.Size(297, 287);
+      this.splitContainer.SplitterDistance = 199;
+      this.splitContainer.TabIndex = 2;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ReadOnly = true;
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(297, 84);
+      this.descriptionTextBox.TabIndex = 0;
+      // 
+      // TypeSelector
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox);
+      this.Name = "TypeSelector";
+      this.Size = new System.Drawing.Size(303, 306);
+      this.groupBox.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.Panel2.PerformLayout();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.TreeView typesTreeView;
+    private System.Windows.Forms.SplitContainer splitContainer;
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs	(revision 2655)
@@ -0,0 +1,210 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using System.Linq;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views { 
+  public partial class TypeSelector : UserControl {
+    private Type baseType;
+    public Type BaseType {
+      get { return baseType; }
+    }
+    private bool showNotInstantiableTypes;
+    public bool ShowNotInstantiableTypes {
+      get { return showNotInstantiableTypes; }
+    }
+    private bool showGenericTypes;
+    public bool ShowGenericTypes {
+      get { return showGenericTypes; }
+    }
+    public string Caption {
+      get { return groupBox.Text; }
+      set {
+        if (InvokeRequired)
+          Invoke(new Action<string>(delegate(string s) { Caption = s; }), value);
+        else
+          groupBox.Text = value;
+      }
+    }
+    public TreeView TypesTreeView {
+      get { return typesTreeView; }
+    }
+    private Type selectedType;
+    public Type SelectedType {
+      get { return selectedType; }
+      private set {
+        if (value != selectedType) {
+          selectedType = value;
+          OnSelectedTypeChanged();
+        }
+      }
+    }
+
+    public TypeSelector() {
+      InitializeComponent();
+      selectedType = null;
+    }
+
+    public void Configure(Type baseType, bool showNotInstantiableTypes, bool showGenericTypes) {
+      if (baseType == null) throw new ArgumentNullException();
+      if (InvokeRequired)
+        Invoke(new Action<Type, bool, bool>(Configure), baseType, showNotInstantiableTypes, showGenericTypes);
+      else {
+        this.baseType = baseType;
+        this.showNotInstantiableTypes = showNotInstantiableTypes;
+        this.showGenericTypes = showGenericTypes;
+
+        typesTreeView.Nodes.Clear();
+        imageList.Images.Clear();
+        imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Class);      // default icon
+        imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Namespace);  // plugins
+        imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Interface);  // interfaces
+        imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.OrgChart);   // abstract types
+        imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Template);   // generic types
+
+        TreeNode selectedNode = null;
+        var plugins = from p in ApplicationManager.Manager.Plugins
+                      orderby p.Name, p.Version ascending
+                      select p;
+        foreach (IPluginDescription plugin in plugins) {
+          TreeNode pluginNode = new TreeNode();
+          pluginNode.Text = plugin.Name;
+          pluginNode.ImageIndex = 1;
+          pluginNode.SelectedImageIndex = pluginNode.ImageIndex;
+          pluginNode.Tag = plugin;
+
+          var types = from t in ApplicationManager.Manager.GetTypes(BaseType, plugin, false)
+                      orderby t.Name ascending
+                      select t;
+          foreach (Type type in types) {
+            bool valid = true;
+            valid = valid && (ShowGenericTypes || !type.ContainsGenericParameters);
+            valid = valid && (ShowNotInstantiableTypes || !type.IsAbstract);
+            valid = valid && (ShowNotInstantiableTypes || !type.IsInterface);
+            valid = valid && (ShowNotInstantiableTypes || !type.HasElementType);
+            if (valid) {
+              TreeNode typeNode = new TreeNode();
+              string name = ItemAttribute.GetName(type);
+              typeNode.Text = name != null ? name : type.Name;
+              typeNode.ImageIndex = 0;
+              if (type.IsInterface) typeNode.ImageIndex = 2;
+              else if (type.IsAbstract) typeNode.ImageIndex = 3;
+              else if (type.ContainsGenericParameters) typeNode.ImageIndex = 4;
+              else if (imageList.Images.ContainsKey(type.FullName)) typeNode.ImageIndex = imageList.Images.IndexOfKey(type.FullName);
+              else if (typeof(IItem).IsAssignableFrom(type)) {
+                try {
+                  IItem item = (IItem)Activator.CreateInstance(type);
+                  imageList.Images.Add(type.FullName, item.ItemImage);
+                  typeNode.ImageIndex = imageList.Images.IndexOfKey(type.FullName);
+                }
+                catch (Exception) {
+                }
+              }
+              typeNode.SelectedImageIndex = typeNode.ImageIndex;
+              typeNode.Tag = type;
+              if (type == SelectedType) selectedNode = typeNode;
+              pluginNode.Nodes.Add(typeNode);
+            }
+          }
+          if (pluginNode.Nodes.Count > 0)
+            typesTreeView.Nodes.Add(pluginNode);
+        }
+        if (typesTreeView.Nodes.Count == 0) {
+          typesTreeView.Nodes.Add("No types of base type \"" + BaseType.Name + "\" found");
+          typesTreeView.Enabled = false;
+        }
+        if (selectedNode != null) {
+          typesTreeView.SelectedNode = selectedNode;
+          selectedNode.EnsureVisible();
+        } else {
+          SelectedType = null;
+        }
+      }
+    }
+
+    public object CreateInstanceOfSelectedType(params object[] args) {
+      if (SelectedType != null) {
+      try {
+        return Activator.CreateInstance(SelectedType, args);
+      } catch(Exception) { }
+      }
+      return null;
+    }
+
+    public event EventHandler SelectedTypeChanged;
+    protected virtual void OnSelectedTypeChanged() {
+      if (SelectedTypeChanged != null)
+        SelectedTypeChanged(this, EventArgs.Empty);
+    }
+
+    private void UpdateDescription() {
+      descriptionTextBox.Text = string.Empty;
+
+      if (typesTreeView.SelectedNode != null) {
+        IPluginDescription plugin = typesTreeView.SelectedNode.Tag as IPluginDescription;
+        if (plugin != null) {
+          StringBuilder sb = new StringBuilder();
+          sb.Append("Plugin: ").Append(plugin.Name).Append(Environment.NewLine);
+          sb.Append("Version: ").Append(plugin.Version.ToString()).Append(Environment.NewLine);
+          sb.Append("Build Date: ").Append(plugin.BuildDate.ToString());
+          descriptionTextBox.Text = sb.ToString();
+        }
+        Type type = typesTreeView.SelectedNode.Tag as Type;
+        if (type != null) {
+          string description = ItemAttribute.GetDescription(type);
+          if (description != null)
+            descriptionTextBox.Text = description;
+        }
+      }
+    }
+
+    private void typesTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      if (typesTreeView.SelectedNode != null) {
+        SelectedType = typesTreeView.SelectedNode.Tag as Type;
+      }
+      UpdateDescription();
+    }
+
+    private void typesTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = (TreeNode)e.Item;
+      Type type = node.Tag as Type;
+      if (type != null) {
+        try {
+          object o = Activator.CreateInstance(type);
+          DataObject data = new DataObject();
+          data.SetData("Type", type);
+          data.SetData("Value", o);
+          DoDragDrop(data, DragDropEffects.Link);
+        } catch (Exception) {
+        }
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelectorDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelectorDialog.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelectorDialog.Designer.cs	(revision 2655)
@@ -0,0 +1,111 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class TypeSelectorDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) components.Dispose();
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.typeSelector = new HeuristicLab.Core.Views.TypeSelector();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Location = new System.Drawing.Point(305, 368);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(386, 368);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // typeSelector
+      // 
+      this.typeSelector.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.typeSelector.Location = new System.Drawing.Point(12, 12);
+      this.typeSelector.Name = "typeSelector";
+      this.typeSelector.Size = new System.Drawing.Size(449, 350);
+      this.typeSelector.TabIndex = 3;
+      this.typeSelector.SelectedTypeChanged += new System.EventHandler(this.typeSelector_SelectedTypeChanged);
+      this.typeSelector.TypesTreeView.DoubleClick += new System.EventHandler(TypesTreeView_DoubleClick);
+      // 
+      // TypeSelectorDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(473, 403);
+      this.Controls.Add(this.typeSelector);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "TypeSelectorDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Select Type";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private TypeSelector typeSelector;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelectorDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelectorDialog.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelectorDialog.cs	(revision 2655)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// A dialog to select a specific type.
+  /// </summary>
+  public partial class TypeSelectorDialog : Form {
+    /// <summary>
+    /// Gets or sets the caption of the dialog.
+    /// </summary>
+    /// <remarks>Uses property <see cref="Form.Text"/> of base class <see cref="Form"/>.
+    /// No own data storage present.</remarks>
+    public string Caption {
+      get { return Text; }
+      set {
+        if (InvokeRequired)
+          Invoke(new Action<string>(delegate(string s) { Caption = s; }), value);
+        else
+          Text = value;
+      }
+    }
+    public TypeSelector TypeSelector {
+      get { return typeSelector; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChooseTypeDialog"/>.
+    /// </summary>
+    public TypeSelectorDialog() {
+      InitializeComponent();
+    }
+
+    private void typeSelector_SelectedTypeChanged(object sender, EventArgs e) {
+      okButton.Enabled = typeSelector.SelectedType != null;
+    }
+    private void TypesTreeView_DoubleClick(object sender, System.EventArgs e) {
+      if (typeSelector.SelectedType != null) {
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableCollectionView.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableCollectionView.Designer.cs	(revision 2655)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Core.Views {
+  partial class VariableCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableCollectionView.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableCollectionView.cs	(revision 2655)
@@ -0,0 +1,35 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Core.Views {
+  [Content(typeof(VariableCollection), true)]
+  [Content(typeof(IObservableKeyedCollection<string, Variable>), true)]
+  public partial class VariableCollectionView : NamedItemCollectionView<Variable> {
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public VariableCollectionView() {
+      InitializeComponent();
+      Caption = "VariableCollection";
+      itemsGroupBox.Text = "&Variables";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public VariableCollectionView(IObservableKeyedCollection<string, Variable> variableCollection)
+      : this() {
+      NamedItemCollection = variableCollection;
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariableInfoView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableInfoView.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,217 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Core.Views {
-  partial class VariableInfoView {
-    /// <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.actualNameLabel = new System.Windows.Forms.Label();
-      this.actualNameTextBox = new System.Windows.Forms.TextBox();
-      this.dataTypeLabel = new System.Windows.Forms.Label();
-      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
-      this.descriptionLabel = new System.Windows.Forms.Label();
-      this.descriptionTextBox = new System.Windows.Forms.TextBox();
-      this.kindLabel = new System.Windows.Forms.Label();
-      this.kindTextBox = new System.Windows.Forms.TextBox();
-      this.formalNameTextBox = new System.Windows.Forms.TextBox();
-      this.formalNameLabel = new System.Windows.Forms.Label();
-      this.localLabel = new System.Windows.Forms.Label();
-      this.localCheckBox = new System.Windows.Forms.CheckBox();
-      this.SuspendLayout();
-      // 
-      // actualNameLabel
-      // 
-      this.actualNameLabel.AutoSize = true;
-      this.actualNameLabel.Location = new System.Drawing.Point(3, 3);
-      this.actualNameLabel.Name = "actualNameLabel";
-      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
-      this.actualNameLabel.TabIndex = 0;
-      this.actualNameLabel.Text = "&Actual Name:";
-      // 
-      // actualNameTextBox
-      // 
-      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.actualNameTextBox.Location = new System.Drawing.Point(81, 0);
-      this.actualNameTextBox.Name = "actualNameTextBox";
-      this.actualNameTextBox.Size = new System.Drawing.Size(188, 20);
-      this.actualNameTextBox.TabIndex = 1;
-      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.AutoSize = true;
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 55);
-      this.dataTypeLabel.Name = "dataTypeLabel";
-      this.dataTypeLabel.Size = new System.Drawing.Size(34, 13);
-      this.dataTypeLabel.TabIndex = 4;
-      this.dataTypeLabel.Text = "&Type:";
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.dataTypeTextBox.Location = new System.Drawing.Point(81, 52);
-      this.dataTypeTextBox.Name = "dataTypeTextBox";
-      this.dataTypeTextBox.ReadOnly = true;
-      this.dataTypeTextBox.Size = new System.Drawing.Size(188, 20);
-      this.dataTypeTextBox.TabIndex = 5;
-      // 
-      // descriptionLabel
-      // 
-      this.descriptionLabel.AutoSize = true;
-      this.descriptionLabel.Location = new System.Drawing.Point(3, 127);
-      this.descriptionLabel.Name = "descriptionLabel";
-      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
-      this.descriptionLabel.TabIndex = 10;
-      this.descriptionLabel.Text = "&Description:";
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.descriptionTextBox.Location = new System.Drawing.Point(81, 124);
-      this.descriptionTextBox.Multiline = true;
-      this.descriptionTextBox.Name = "descriptionTextBox";
-      this.descriptionTextBox.ReadOnly = true;
-      this.descriptionTextBox.Size = new System.Drawing.Size(188, 85);
-      this.descriptionTextBox.TabIndex = 11;
-      this.descriptionTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
-      // 
-      // kindLabel
-      // 
-      this.kindLabel.AutoSize = true;
-      this.kindLabel.Location = new System.Drawing.Point(3, 81);
-      this.kindLabel.Name = "kindLabel";
-      this.kindLabel.Size = new System.Drawing.Size(31, 13);
-      this.kindLabel.TabIndex = 6;
-      this.kindLabel.Text = "&Kind:";
-      // 
-      // kindTextBox
-      // 
-      this.kindTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.kindTextBox.Location = new System.Drawing.Point(81, 78);
-      this.kindTextBox.Name = "kindTextBox";
-      this.kindTextBox.ReadOnly = true;
-      this.kindTextBox.Size = new System.Drawing.Size(188, 20);
-      this.kindTextBox.TabIndex = 7;
-      this.kindTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
-      // 
-      // formalNameTextBox
-      // 
-      this.formalNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.formalNameTextBox.Location = new System.Drawing.Point(81, 26);
-      this.formalNameTextBox.Name = "formalNameTextBox";
-      this.formalNameTextBox.ReadOnly = true;
-      this.formalNameTextBox.Size = new System.Drawing.Size(188, 20);
-      this.formalNameTextBox.TabIndex = 3;
-      // 
-      // formalNameLabel
-      // 
-      this.formalNameLabel.AutoSize = true;
-      this.formalNameLabel.Location = new System.Drawing.Point(3, 29);
-      this.formalNameLabel.Name = "formalNameLabel";
-      this.formalNameLabel.Size = new System.Drawing.Size(72, 13);
-      this.formalNameLabel.TabIndex = 2;
-      this.formalNameLabel.Text = "&Formal Name:";
-      // 
-      // localLabel
-      // 
-      this.localLabel.AutoSize = true;
-      this.localLabel.Location = new System.Drawing.Point(3, 104);
-      this.localLabel.Name = "localLabel";
-      this.localLabel.Size = new System.Drawing.Size(36, 13);
-      this.localLabel.TabIndex = 8;
-      this.localLabel.Text = "&Local:";
-      // 
-      // localCheckBox
-      // 
-      this.localCheckBox.AutoSize = true;
-      this.localCheckBox.Location = new System.Drawing.Point(81, 104);
-      this.localCheckBox.Name = "localCheckBox";
-      this.localCheckBox.Size = new System.Drawing.Size(15, 14);
-      this.localCheckBox.TabIndex = 9;
-      this.localCheckBox.UseVisualStyleBackColor = true;
-      this.localCheckBox.CheckedChanged += new System.EventHandler(this.localCheckBox_CheckedChanged);
-      // 
-      // VariableInfoEditor
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.localCheckBox);
-      this.Controls.Add(this.dataTypeTextBox);
-      this.Controls.Add(this.kindTextBox);
-      this.Controls.Add(this.descriptionTextBox);
-      this.Controls.Add(this.formalNameTextBox);
-      this.Controls.Add(this.actualNameTextBox);
-      this.Controls.Add(this.dataTypeLabel);
-      this.Controls.Add(this.kindLabel);
-      this.Controls.Add(this.formalNameLabel);
-      this.Controls.Add(this.localLabel);
-      this.Controls.Add(this.descriptionLabel);
-      this.Controls.Add(this.actualNameLabel);
-      this.Name = "VariableInfoEditor";
-      this.Size = new System.Drawing.Size(269, 209);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label actualNameLabel;
-    private System.Windows.Forms.TextBox actualNameTextBox;
-    private System.Windows.Forms.Label dataTypeLabel;
-    private System.Windows.Forms.TextBox dataTypeTextBox;
-    private System.Windows.Forms.Label descriptionLabel;
-    private System.Windows.Forms.TextBox descriptionTextBox;
-    private System.Windows.Forms.Label kindLabel;
-    private System.Windows.Forms.TextBox kindTextBox;
-    private System.Windows.Forms.TextBox formalNameTextBox;
-    private System.Windows.Forms.Label formalNameLabel;
-    private System.Windows.Forms.Label localLabel;
-    private System.Windows.Forms.CheckBox localCheckBox;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariableInfoView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableInfoView.cs	(revision 2654)
+++ 	(revision )
@@ -1,129 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of <see cref="IVariableInfo"/>.
-  /// </summary>
-  [Content(typeof(VariableInfo), true)]
-  public partial class VariableInfoView : ItemViewBase {
-    /// <summary>
-    /// Gets or sets the variable information to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public IVariableInfo VariableInfo {
-      get { return (IVariableInfo)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableInfoView"/> with caption "Variable Info".
-    /// </summary>
-    public VariableInfoView() {
-      InitializeComponent();
-      Caption = "Variable Info";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableInfoView"/> 
-    /// with the given <paramref name="variableInfo"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableInfoView()"/>.</remarks>
-    /// <param name="variableInfo">The variable info to represent visually.</param>
-    public VariableInfoView(IVariableInfo variableInfo)
-      : this() {
-      VariableInfo = variableInfo;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariableInfo"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class 
-    /// <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      VariableInfo.ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
-      VariableInfo.LocalChanged -= new EventHandler(VariableInfo_LocalChanged);
-      base.RemoveItemEvents();
-    }
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariableInfo"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      VariableInfo.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
-      VariableInfo.LocalChanged += new EventHandler(VariableInfo_LocalChanged);
-    }
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      Caption = "Variable Info";
-      if (VariableInfo == null) {
-        actualNameTextBox.Enabled = false;
-        formalNameTextBox.Enabled = false;
-        dataTypeTextBox.Enabled = false;
-        kindTextBox.Enabled = false;
-        localCheckBox.Enabled = false;
-        descriptionTextBox.Enabled = false;
-      } else {
-        Caption = VariableInfo.ActualName + " (" + VariableInfo.GetType().Name + ")";
-        actualNameTextBox.Text = VariableInfo.ActualName;
-        actualNameTextBox.Enabled = true;
-        formalNameTextBox.Text = VariableInfo.FormalName;
-        formalNameTextBox.Enabled = true;
-        dataTypeTextBox.Text = VariableInfo.DataType.FullName;
-        dataTypeTextBox.Enabled = true;
-        kindTextBox.Text = VariableInfo.Kind.ToString();
-        kindTextBox.Enabled = true;
-        localCheckBox.Checked = VariableInfo.Local;
-        localCheckBox.Enabled = true;
-        descriptionTextBox.Text = VariableInfo.Description;
-        descriptionTextBox.Enabled = true;
-      }
-    }
-
-    private void VariableInfo_ActualNameChanged(object sender, EventArgs e) {
-      actualNameTextBox.Text = VariableInfo.ActualName;
-    }
-    private void VariableInfo_LocalChanged(object sender, EventArgs e) {
-      localCheckBox.Checked = VariableInfo.Local;
-    }
-
-    private void actualNameTextBox_Validated(object sender, EventArgs e) {
-      VariableInfo.ActualName = actualNameTextBox.Text;
-    }
-    private void localCheckBox_CheckedChanged(object sender, EventArgs e) {
-      VariableInfo.Local = localCheckBox.Checked;
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariableInfoView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableInfoView.resx	(revision 2654)
+++ 	(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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.Designer.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.Designer.cs	(revision 2655)
@@ -32,7 +32,7 @@
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
     protected override void Dispose(bool disposing) {
-      if (chooseItemDialog != null) chooseItemDialog.Dispose();
-      if (disposing && (components != null)) {
-        components.Dispose();
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
       }
       base.Dispose(disposing);
@@ -46,72 +46,105 @@
     /// </summary>
     private void InitializeComponent() {
-      this.nameLabel = new System.Windows.Forms.Label();
-      this.nameTextBox = new System.Windows.Forms.TextBox();
-      this.valueLabel = new System.Windows.Forms.Label();
-      this.valueTextBox = new System.Windows.Forms.TextBox();
-      this.editorGroupBox = new System.Windows.Forms.GroupBox();
-      this.setVariableValueButton = new System.Windows.Forms.Button();
+      this.components = new System.ComponentModel.Container();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.valueGroupBox = new System.Windows.Forms.GroupBox();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.clearValueButton = new System.Windows.Forms.Button();
+      this.setValueButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.valueGroupBox.SuspendLayout();
+      this.valuePanel.SuspendLayout();
       this.SuspendLayout();
-      // 
-      // nameLabel
-      // 
-      this.nameLabel.AutoSize = true;
-      this.nameLabel.Location = new System.Drawing.Point(3, 3);
-      this.nameLabel.Name = "nameLabel";
-      this.nameLabel.Size = new System.Drawing.Size(38, 13);
-      this.nameLabel.TabIndex = 0;
-      this.nameLabel.Text = "&Name:";
       // 
       // nameTextBox
       // 
-      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+      this.nameTextBox.Size = new System.Drawing.Size(285, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.nameTextBox.Location = new System.Drawing.Point(50, 0);
-      this.nameTextBox.Name = "nameTextBox";
-      this.nameTextBox.Size = new System.Drawing.Size(153, 20);
-      this.nameTextBox.TabIndex = 1;
-      this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating);
+      this.descriptionTextBox.Size = new System.Drawing.Size(285, 62);
       // 
-      // valueLabel
+      // dataTypeLabel
       // 
-      this.valueLabel.AutoSize = true;
-      this.valueLabel.Location = new System.Drawing.Point(3, 29);
-      this.valueLabel.Name = "valueLabel";
-      this.valueLabel.Size = new System.Drawing.Size(37, 13);
-      this.valueLabel.TabIndex = 2;
-      this.valueLabel.Text = "&Value:";
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 98);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 4;
+      this.dataTypeLabel.Text = "Data &Type:";
       // 
-      // valueTextBox
+      // dataTypeTextBox
       // 
-      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueTextBox.Location = new System.Drawing.Point(50, 26);
-      this.valueTextBox.Name = "valueTextBox";
-      this.valueTextBox.ReadOnly = true;
-      this.valueTextBox.Size = new System.Drawing.Size(99, 20);
-      this.valueTextBox.TabIndex = 3;
+      this.dataTypeTextBox.Location = new System.Drawing.Point(72, 94);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(285, 20);
+      this.dataTypeTextBox.TabIndex = 5;
       // 
-      // editorGroupBox
+      // valueGroupBox
       // 
-      this.editorGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.editorGroupBox.Location = new System.Drawing.Point(0, 52);
-      this.editorGroupBox.Name = "editorGroupBox";
-      this.editorGroupBox.Size = new System.Drawing.Size(203, 102);
-      this.editorGroupBox.TabIndex = 5;
-      this.editorGroupBox.TabStop = false;
-      this.editorGroupBox.Text = "&Editor:";
+      this.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Controls.Add(this.clearValueButton);
+      this.valueGroupBox.Controls.Add(this.setValueButton);
+      this.valueGroupBox.Location = new System.Drawing.Point(0, 120);
+      this.valueGroupBox.Name = "valueGroupBox";
+      this.valueGroupBox.Size = new System.Drawing.Size(359, 154);
+      this.valueGroupBox.TabIndex = 7;
+      this.valueGroupBox.TabStop = false;
+      this.valueGroupBox.Text = "&Value:";
       // 
-      // setVariableValueButton
+      // valuePanel
       // 
-      this.setVariableValueButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.setVariableValueButton.Location = new System.Drawing.Point(155, 26);
-      this.setVariableValueButton.Name = "setVariableValueButton";
-      this.setVariableValueButton.Size = new System.Drawing.Size(45, 20);
-      this.setVariableValueButton.TabIndex = 4;
-      this.setVariableValueButton.Text = "Set...";
-      this.setVariableValueButton.UseVisualStyleBackColor = true;
-      this.setVariableValueButton.Click += new System.EventHandler(this.setVariableValueButton_Click);
+      this.valuePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valuePanel.Controls.Add(this.viewHost);
+      this.valuePanel.Location = new System.Drawing.Point(3, 48);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(353, 103);
+      this.valuePanel.TabIndex = 2;
+      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
+      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      // 
+      // viewHost
+      // 
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Object = null;
+      this.viewHost.Size = new System.Drawing.Size(353, 103);
+      this.viewHost.TabIndex = 0;
+      // 
+      // clearValueButton
+      // 
+      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
+      this.clearValueButton.Name = "clearValueButton";
+      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
+      this.clearValueButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
+      this.clearValueButton.UseVisualStyleBackColor = true;
+      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
+      // 
+      // setValueButton
+      // 
+      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setValueButton.Name = "setValueButton";
+      this.setValueButton.Size = new System.Drawing.Size(23, 23);
+      this.setValueButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
+      this.setValueButton.UseVisualStyleBackColor = true;
+      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
       // 
       // VariableView
@@ -119,12 +152,18 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.setVariableValueButton);
-      this.Controls.Add(this.editorGroupBox);
-      this.Controls.Add(this.valueTextBox);
-      this.Controls.Add(this.nameTextBox);
-      this.Controls.Add(this.valueLabel);
-      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.valueGroupBox);
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.dataTypeLabel);
       this.Name = "VariableView";
-      this.Size = new System.Drawing.Size(203, 154);
+      this.Size = new System.Drawing.Size(359, 274);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.valueGroupBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.valueGroupBox.ResumeLayout(false);
+      this.valuePanel.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -134,10 +173,12 @@
     #endregion
 
-    private System.Windows.Forms.Label nameLabel;
-    private System.Windows.Forms.TextBox nameTextBox;
-    private System.Windows.Forms.Label valueLabel;
-    private System.Windows.Forms.TextBox valueTextBox;
-    private System.Windows.Forms.GroupBox editorGroupBox;
-    private System.Windows.Forms.Button setVariableValueButton;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.TextBox dataTypeTextBox;
+    private System.Windows.Forms.GroupBox valueGroupBox;
+    private ViewHost viewHost;
+    private System.Windows.Forms.Button clearValueButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Button setValueButton;
+    private System.Windows.Forms.Panel valuePanel;
   }
 }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 2654)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 2655)
@@ -31,9 +31,9 @@
 namespace HeuristicLab.Core.Views {
   /// <summary>
-  /// The visual representation of an <see cref="IVariable"/>.
+  /// The visual representation of a <see cref="Variable"/>.
   /// </summary>
   [Content(typeof(Variable), true)]
-  public partial class VariableView : ItemViewBase {
-    private ChooseItemDialog chooseItemDialog;
+  public partial class VariableView : NamedItemBaseView {
+    private TypeSelectorDialog typeSelectorDialog;
 
     /// <summary>
@@ -42,6 +42,6 @@
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
     /// No own data storage present.</remarks>
-    public IVariable Variable {
-      get { return (IVariable)Item; }
+    public Variable Variable {
+      get { return (Variable)Item; }
       set { base.Item = value; }
     }
@@ -59,5 +59,5 @@
     /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
     /// <param name="variable">The variable to represent visually.</param>
-    public VariableView(IVariable variable)
+    public VariableView(Variable variable)
       : this() {
       Variable = variable;
@@ -68,76 +68,79 @@
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      Variable.NameChanged -= new EventHandler(Variable_NameChanged);
+    protected override void DeregisterObjectEvents() {
       Variable.ValueChanged -= new EventHandler(Variable_ValueChanged);
-      base.RemoveItemEvents();
+      base.DeregisterObjectEvents();
     }
+
     /// <summary>
     /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
     /// </summary>
     /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      Variable.NameChanged += new EventHandler(Variable_NameChanged);
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
       Variable.ValueChanged += new EventHandler(Variable_ValueChanged);
     }
 
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      valueTextBox.Text = "-";
-      valueTextBox.Enabled = false;
-      editorGroupBox.Controls.Clear();
-      editorGroupBox.Enabled = false;
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
       if (Variable == null) {
         Caption = "Variable";
-        nameTextBox.Enabled = false;
+        dataTypeTextBox.Text = "-";
+        dataTypeTextBox.Enabled = false;
+        setValueButton.Enabled = false;
+        clearValueButton.Enabled = false;
+        valueGroupBox.Enabled = false;
+        viewHost.Object = null;
       } else {
         Caption = Variable.Name + " (" + Variable.GetType().Name + ")";
-        nameTextBox.Text = Variable.Name;
-        nameTextBox.Enabled = true;
-        if (Variable.Value != null) {
-          valueTextBox.Text = Variable.Value.GetType().FullName;
-          valueTextBox.Enabled = true;
-          Control editor = (Control)MainFormManager.CreateDefaultView(Variable.Value);
-          if (editor != null) {
-            editorGroupBox.Controls.Add(editor);
-            editor.Dock = DockStyle.Fill;
-            editorGroupBox.Enabled = true;
-          }
-        }
+        dataTypeTextBox.Text = Variable.Value == null ? "-" : Variable.Value.GetType().FullName;
+        dataTypeTextBox.Enabled = Variable.Value != null;
+        setValueButton.Enabled = Variable.Value == null;
+        clearValueButton.Enabled = Variable.Value != null;
+        valueGroupBox.Enabled = true;
+        viewHost.Object = Variable.Value;
       }
     }
 
-    private void Variable_NameChanged(object sender, EventArgs e) {
-      UpdateText();
-    }
-    private void UpdateText() {
+    private void Variable_ValueChanged(object sender, EventArgs e) {
       if (InvokeRequired)
-        Invoke(new MethodInvoker(UpdateText));
-      else
-        nameTextBox.Text = Variable.Name;
-    }
-    private void Variable_ValueChanged(object sender, EventArgs e) {
-      Refresh();
+        Invoke(new EventHandler(Variable_ValueChanged), sender, e);
+      else {
+        dataTypeTextBox.Text = Variable.Value == null ? "-" : Variable.Value.GetType().FullName;
+        dataTypeTextBox.Enabled = Variable.Value != null;
+        setValueButton.Enabled = Variable.Value == null;
+        clearValueButton.Enabled = Variable.Value != null;
+        viewHost.Object = Variable.Value;
+      }
     }
 
-    private void nameTextBox_Validating(object sender, CancelEventArgs e) {
-      Variable.Name = nameTextBox.Text;
-
-      // check if variable name was set successfully
-      e.Cancel = Variable.Name != nameTextBox.Text;
+    private void setValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Value Type";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IItem), false, false);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        Variable.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+      }
     }
-
-    private void setVariableValueButton_Click(object sender, EventArgs e) {
-      if (chooseItemDialog == null) {
-        chooseItemDialog = new ChooseItemDialog();
-        chooseItemDialog.Caption = "Set Value";
+    private void clearValueButton_Click(object sender, EventArgs e) {
+      Variable.Value = null;
+    }
+    private void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (typeof(IItem).IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
+        else e.Effect = DragDropEffects.Link;
       }
-      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK)
-        Variable.Value = chooseItemDialog.Item;
+    }
+    private void valuePanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IItem item = e.Data.GetData("Value") as IItem;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (IItem)item.Clone();
+        Variable.Value = item;
+      }
     }
   }
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariableView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariablesScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariablesScopeView.Designer.cs	(revision 2654)
+++ 	(revision )
@@ -1,175 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Windows.Forms;
-
-namespace HeuristicLab.Core.Views {
-  partial class VariablesScopeView {
-    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
-      foreach (ListViewItem item in variablesListView.Items) {
-        ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
-      }
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.variablesGroupBox = new System.Windows.Forms.GroupBox();
-      this.variablesListView = new System.Windows.Forms.ListView();
-      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
-      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.addButton = new System.Windows.Forms.Button();
-      this.removeButton = new System.Windows.Forms.Button();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.variablesGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // splitContainer1
-      // 
-      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
-      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer1.Name = "splitContainer1";
-      // 
-      // splitContainer1.Panel1
-      // 
-      this.splitContainer1.Panel1.Controls.Add(this.variablesGroupBox);
-      // 
-      // splitContainer1.Panel2
-      // 
-      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
-      this.splitContainer1.Size = new System.Drawing.Size(276, 155);
-      this.splitContainer1.SplitterDistance = 135;
-      this.splitContainer1.TabIndex = 0;
-      // 
-      // variablesGroupBox
-      // 
-      this.variablesGroupBox.Controls.Add(this.variablesListView);
-      this.variablesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variablesGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.variablesGroupBox.Name = "variablesGroupBox";
-      this.variablesGroupBox.Size = new System.Drawing.Size(135, 155);
-      this.variablesGroupBox.TabIndex = 0;
-      this.variablesGroupBox.TabStop = false;
-      this.variablesGroupBox.Text = "&Variables";
-      // 
-      // variablesListView
-      // 
-      this.variablesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.columnHeader1});
-      this.variablesListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variablesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
-      this.variablesListView.HideSelection = false;
-      this.variablesListView.Location = new System.Drawing.Point(3, 16);
-      this.variablesListView.Name = "variablesListView";
-      this.variablesListView.Size = new System.Drawing.Size(129, 136);
-      this.variablesListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
-      this.variablesListView.TabIndex = 0;
-      this.variablesListView.UseCompatibleStateImageBehavior = false;
-      this.variablesListView.View = System.Windows.Forms.View.Details;
-      this.variablesListView.SelectedIndexChanged += new System.EventHandler(this.variablesListView_SelectedIndexChanged);
-      this.variablesListView.SizeChanged += new System.EventHandler(this.variablesListView_SizeChanged);
-      this.variablesListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.variablesListView_KeyDown);
-      // 
-      // detailsGroupBox
-      // 
-      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.detailsGroupBox.Name = "detailsGroupBox";
-      this.detailsGroupBox.Size = new System.Drawing.Size(137, 155);
-      this.detailsGroupBox.TabIndex = 0;
-      this.detailsGroupBox.TabStop = false;
-      this.detailsGroupBox.Text = "&Details";
-      // 
-      // addButton
-      // 
-      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addButton.Location = new System.Drawing.Point(0, 161);
-      this.addButton.Name = "addButton";
-      this.addButton.Size = new System.Drawing.Size(75, 23);
-      this.addButton.TabIndex = 1;
-      this.addButton.Text = "&Add...";
-      this.addButton.UseVisualStyleBackColor = true;
-      this.addButton.Click += new System.EventHandler(this.addButton_Click);
-      // 
-      // removeButton
-      // 
-      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeButton.Enabled = false;
-      this.removeButton.Location = new System.Drawing.Point(81, 161);
-      this.removeButton.Name = "removeButton";
-      this.removeButton.Size = new System.Drawing.Size(75, 23);
-      this.removeButton.TabIndex = 2;
-      this.removeButton.Text = "&Remove";
-      this.removeButton.UseVisualStyleBackColor = true;
-      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
-      // 
-      // VariablesScopeView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.Controls.Add(this.removeButton);
-      this.Controls.Add(this.addButton);
-      this.Controls.Add(this.splitContainer1);
-      this.Name = "VariablesScopeView";
-      this.Size = new System.Drawing.Size(276, 184);
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      this.splitContainer1.ResumeLayout(false);
-      this.variablesGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.GroupBox variablesGroupBox;
-    private System.Windows.Forms.ListView variablesListView;
-    private System.Windows.Forms.ColumnHeader columnHeader1;
-    private System.Windows.Forms.GroupBox detailsGroupBox;
-    private System.Windows.Forms.Button addButton;
-    private System.Windows.Forms.Button removeButton;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariablesScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariablesScopeView.cs	(revision 2654)
+++ 	(revision )
@@ -1,229 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Common;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of all variables in a specified scope.
-  /// </summary>
-  [Content(typeof(Scope))]
-  public partial class VariablesScopeView : ItemViewBase {
-    private ChooseItemDialog chooseItemDialog;
-
-    /// <summary>
-    /// Gets or sets the scope whose variables to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No won data storage present.</remarks>
-    public IScope Scope {
-      get { return (IScope)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
-    /// </summary>
-    public VariablesScopeView() {
-      InitializeComponent();
-      Caption = "Variables Scope View";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
-    /// the given <paramref name="scope"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
-    /// <param name="scope">The scope whose variables should be represented visually.</param>
-    public VariablesScopeView(IScope scope)
-      : this() {
-      Scope = scope;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IScope"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      Scope.VariableAdded -= new EventHandler<EventArgs<IVariable>>(Scope_VariableAdded);
-      Scope.VariableRemoved -= new EventHandler<EventArgs<IVariable>>(Scope_VariableRemoved);
-      base.RemoveItemEvents();
-    }
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IScope"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      Scope.VariableAdded += new EventHandler<EventArgs<IVariable>>(Scope_VariableAdded);
-      Scope.VariableRemoved += new EventHandler<EventArgs<IVariable>>(Scope_VariableRemoved);
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      detailsGroupBox.Controls.Clear();
-      detailsGroupBox.Enabled = false;
-      removeButton.Enabled = false;
-      if (Scope == null) {
-        Caption = "Variables Scope View";
-        variablesListView.Enabled = false;
-      } else {
-        Caption = "Variables Scope View of " + Scope.Name + " (" + Scope.GetType().Name + ")";
-        variablesListView.Enabled = true;
-        foreach (ListViewItem item in variablesListView.Items) {
-          ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
-        }
-        variablesListView.Items.Clear();
-        foreach (IVariable variable in Scope.Variables) {
-          ListViewItem item = new ListViewItem();
-          item.Text = variable.Name;
-          item.Tag = variable;
-          variablesListView.Items.Add(item);
-          variable.NameChanged += new EventHandler(Variable_NameChanged);
-        }
-      }
-    }
-
-    private void variablesListView_SelectedIndexChanged(object sender, EventArgs e) {
-      if (detailsGroupBox.Controls.Count > 0)
-        detailsGroupBox.Controls[0].Dispose();
-      detailsGroupBox.Controls.Clear();
-      detailsGroupBox.Enabled = false;
-      removeButton.Enabled = false;
-      if (variablesListView.SelectedItems.Count > 0) {
-        removeButton.Enabled = true;
-      }
-      if (variablesListView.SelectedItems.Count == 1) {
-        IVariable variable = (IVariable)variablesListView.SelectedItems[0].Tag;
-        Control control = (Control)new VariableView(variable);
-        detailsGroupBox.Controls.Add(control);
-        control.Dock = DockStyle.Fill;
-        detailsGroupBox.Enabled = true;
-      }
-    }
-
-    #region Size Changed Events
-    private void variablesListView_SizeChanged(object sender, EventArgs e) {
-      if (variablesListView.Columns.Count > 0)
-        variablesListView.Columns[0].Width = Math.Max(0, variablesListView.Width - 25);
-    }
-    #endregion
-
-    #region Key Events
-    private void variablesListView_KeyDown(object sender, KeyEventArgs e) {
-      if (e.KeyCode == Keys.Delete) {
-        if (variablesListView.SelectedItems.Count > 0) {
-          foreach (ListViewItem item in variablesListView.SelectedItems)
-            Scope.RemoveVariable(((IVariable)item.Tag).Name);
-        }
-      }
-    }
-    #endregion
-
-    #region Button Events
-    private void addButton_Click(object sender, EventArgs e) {
-      if (chooseItemDialog == null) {
-        chooseItemDialog = new ChooseItemDialog();
-        chooseItemDialog.Caption = "Add Variable";
-      }
-      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK) {
-        IVariable newVariable = new Variable(chooseItemDialog.Item.GetType().Name, chooseItemDialog.Item);
-        int index = 1;
-        bool valid = true;
-        string name = null;
-        do {
-          valid = true;
-          name = newVariable.Name + " (" + index.ToString() + ")";
-          foreach (IVariable existingVariable in Scope.Variables) {
-            if (existingVariable.Name == name) {
-              valid = false;
-              index++;
-            }
-          }
-        } while (!valid);
-        newVariable.Name = name;
-        Scope.AddVariable(newVariable);
-      }
-    }
-    private void removeButton_Click(object sender, EventArgs e) {
-      if (variablesListView.SelectedItems.Count > 0) {
-        foreach (ListViewItem item in variablesListView.SelectedItems)
-          Scope.RemoveVariable(((IVariable)item.Tag).Name);
-      }
-    }
-    #endregion
-
-    #region Scope Events
-    private delegate void OnVariableEventDelegate(object sender, EventArgs<IVariable> e);
-    private void Scope_VariableAdded(object sender, EventArgs<IVariable> e) {
-      if (InvokeRequired)
-        Invoke(new OnVariableEventDelegate(Scope_VariableAdded), sender, e);
-      else {
-        ListViewItem item = new ListViewItem();
-        item.Text = e.Value.Name;
-        item.Tag = e.Value;
-        variablesListView.Items.Add(item);
-        e.Value.NameChanged += new EventHandler(Variable_NameChanged);
-      }
-    }
-    private void Scope_VariableRemoved(object sender, EventArgs<IVariable> e) {
-      if (InvokeRequired)
-        Invoke(new OnVariableEventDelegate(Scope_VariableRemoved), sender, e);
-      else {
-        ListViewItem itemToDelete = null;
-        foreach (ListViewItem item in variablesListView.Items) {
-          if (item.Tag == e.Value)
-            itemToDelete = item;
-        }
-        e.Value.NameChanged -= new EventHandler(Variable_NameChanged);
-        variablesListView.Items.Remove(itemToDelete);
-      }
-    }
-    #endregion
-
-    #region Variable Events
-    private delegate void OnEventDelegate(object sender, EventArgs e);
-    private void Variable_NameChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new OnEventDelegate(Variable_NameChanged), sender, e);
-      else {
-        IVariable variable = (IVariable)sender;
-        foreach (ListViewItem item in variablesListView.Items) {
-          if (item.Tag == variable)
-            item.Text = variable.Name;
-        }
-      }
-    }
-    #endregion
-  }
-}
-
Index: unk/sources/HeuristicLab.Core.Views/3.3/VariablesScopeView.resx
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariablesScopeView.resx	(revision 2654)
+++ 	(revision )
@@ -1,120 +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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.Designer.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.Designer.cs	(revision 2655)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Core.Views {
+  partial class ViewHost {
+    /// <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) {
+        if (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.viewPanel = new System.Windows.Forms.Panel();
+      this.viewLabel = new System.Windows.Forms.Label();
+      this.viewComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewPanel.Location = new System.Drawing.Point(0, 27);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(227, 157);
+      this.viewPanel.TabIndex = 2;
+      // 
+      // viewLabel
+      // 
+      this.viewLabel.AutoSize = true;
+      this.viewLabel.Location = new System.Drawing.Point(3, 3);
+      this.viewLabel.Name = "viewLabel";
+      this.viewLabel.Size = new System.Drawing.Size(33, 13);
+      this.viewLabel.TabIndex = 0;
+      this.viewLabel.Text = "&View:";
+      // 
+      // viewComboBox
+      // 
+      this.viewComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.viewComboBox.FormattingEnabled = true;
+      this.viewComboBox.Location = new System.Drawing.Point(44, 0);
+      this.viewComboBox.Name = "viewComboBox";
+      this.viewComboBox.Size = new System.Drawing.Size(183, 21);
+      this.viewComboBox.TabIndex = 1;
+      this.viewComboBox.SelectedIndexChanged += new System.EventHandler(this.viewComboBox_SelectedIndexChanged);
+      // 
+      // ViewHost
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.viewComboBox);
+      this.Controls.Add(this.viewLabel);
+      this.Controls.Add(this.viewPanel);
+      this.Name = "ViewHost";
+      this.Size = new System.Drawing.Size(227, 184);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+    private System.Windows.Forms.Label viewLabel;
+    private System.Windows.Forms.ComboBox viewComboBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.cs	(revision 2655)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.cs	(revision 2655)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using System.Linq;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views { 
+  public partial class ViewHost : UserControl {
+    private object obj;
+    public object Object {
+      get { return obj; }
+      set {
+        if (value != obj) {
+          obj = value;
+          Initialize();
+        }
+      }
+    }
+
+    public ViewHost() {
+      InitializeComponent();
+      Initialize();
+    }
+
+    private void Initialize() {
+      viewLabel.Visible = false;
+      viewComboBox.Items.Clear();
+      viewComboBox.Enabled = false;
+      viewComboBox.Visible = false;
+      if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
+      viewPanel.Controls.Clear();
+      viewPanel.Enabled = false;
+
+      if (Object != null) {
+        var viewTypes = from t in MainFormManager.GetViewTypes(Object.GetType())
+                        orderby t.Name ascending
+                        select t;
+        foreach (Type viewType in viewTypes)
+          viewComboBox.Items.Add(viewType);
+        if (viewComboBox.Items.Count > 0) {
+          viewLabel.Visible = true;
+          viewComboBox.Enabled = true;
+          viewComboBox.Visible = true;
+        }
+
+        Control view = (Control)MainFormManager.CreateDefaultView(Object);
+        if (view != null) {
+          viewPanel.Controls.Add(view);
+          viewPanel.Tag = view;
+          view.Dock = DockStyle.Fill;
+          viewPanel.Enabled = true;
+          viewComboBox.SelectedItem = view.GetType();
+        }
+      }
+    }
+
+    private void viewComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (viewComboBox.SelectedItem != viewPanel.Tag) {
+        if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
+        viewPanel.Controls.Clear();
+        Control view = (Control)MainFormManager.CreateView((Type)viewComboBox.SelectedItem, Object);
+        viewPanel.Controls.Add(view);
+        viewPanel.Tag = view;
+        view.Dock = DockStyle.Fill;
+      }
+    }
+  }
+}
