Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 12176)
@@ -0,0 +1,509 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class CreateExperimentDialog {
+    /// <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();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CreateExperimentDialog));
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.createBatchRunCheckBox = new System.Windows.Forms.CheckBox();
+      this.createBatchRunLabel = new System.Windows.Forms.Label();
+      this.repetitionsLabel = new System.Windows.Forms.Label();
+      this.repetitionsNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.experimentCreationBackgroundWorker = new System.ComponentModel.BackgroundWorker();
+      this.instanceDiscoveryProgressBar = new System.Windows.Forms.ProgressBar();
+      this.instanceDiscoveryProgressLabel = new System.Windows.Forms.Label();
+      this.selectAllCheckBox = new System.Windows.Forms.CheckBox();
+      this.selectNoneCheckBox = new System.Windows.Forms.CheckBox();
+      this.instanceDiscoveryBackgroundWorker = new System.ComponentModel.BackgroundWorker();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.parametersSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.parametersListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.generateButton = new System.Windows.Forms.Button();
+      this.stringConvertibleArrayView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
+      this.detailsTypeLabel = new System.Windows.Forms.Label();
+      this.choicesListView = new System.Windows.Forms.ListView();
+      this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.instancesTabPage = new System.Windows.Forms.TabPage();
+      this.label1 = new System.Windows.Forms.Label();
+      this.instancesTreeView = new System.Windows.Forms.TreeView();
+      this.experimentsToCreateDescriptionLabel = new System.Windows.Forms.Label();
+      this.variationsLabel = new System.Windows.Forms.Label();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      this.warningProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      this.experimentCreationProgressBar = new System.Windows.Forms.ProgressBar();
+      ((System.ComponentModel.ISupportInitialize)(this.repetitionsNumericUpDown)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.parametersSplitContainer)).BeginInit();
+      this.parametersSplitContainer.Panel1.SuspendLayout();
+      this.parametersSplitContainer.Panel2.SuspendLayout();
+      this.parametersSplitContainer.SuspendLayout();
+      this.instancesTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.warningProvider)).BeginInit();
+      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.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(246, 377);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 7;
+      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(327, 377);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 8;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // createBatchRunCheckBox
+      // 
+      this.createBatchRunCheckBox.AutoSize = true;
+      this.createBatchRunCheckBox.Checked = true;
+      this.createBatchRunCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.createBatchRunCheckBox.Location = new System.Drawing.Point(113, 8);
+      this.createBatchRunCheckBox.Name = "createBatchRunCheckBox";
+      this.createBatchRunCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.createBatchRunCheckBox.TabIndex = 1;
+      this.toolTip.SetToolTip(this.createBatchRunCheckBox, "Check to create a batch run for executing an optimizer multiple times.");
+      this.createBatchRunCheckBox.UseVisualStyleBackColor = true;
+      this.createBatchRunCheckBox.CheckedChanged += new System.EventHandler(this.createBatchRunCheckBox_CheckedChanged);
+      // 
+      // createBatchRunLabel
+      // 
+      this.createBatchRunLabel.AutoSize = true;
+      this.createBatchRunLabel.Location = new System.Drawing.Point(12, 9);
+      this.createBatchRunLabel.Name = "createBatchRunLabel";
+      this.createBatchRunLabel.Size = new System.Drawing.Size(95, 13);
+      this.createBatchRunLabel.TabIndex = 0;
+      this.createBatchRunLabel.Text = "&Create Batch Run:";
+      // 
+      // repetitionsLabel
+      // 
+      this.repetitionsLabel.AutoSize = true;
+      this.repetitionsLabel.Location = new System.Drawing.Point(12, 31);
+      this.repetitionsLabel.Name = "repetitionsLabel";
+      this.repetitionsLabel.Size = new System.Drawing.Size(63, 13);
+      this.repetitionsLabel.TabIndex = 2;
+      this.repetitionsLabel.Text = "&Repetitions:";
+      // 
+      // repetitionsNumericUpDown
+      // 
+      this.repetitionsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.repetitionsNumericUpDown.Location = new System.Drawing.Point(113, 28);
+      this.repetitionsNumericUpDown.Maximum = new decimal(new int[] {
+            1000000,
+            0,
+            0,
+            0});
+      this.repetitionsNumericUpDown.Minimum = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
+      this.repetitionsNumericUpDown.Name = "repetitionsNumericUpDown";
+      this.repetitionsNumericUpDown.Size = new System.Drawing.Size(289, 20);
+      this.repetitionsNumericUpDown.TabIndex = 3;
+      this.repetitionsNumericUpDown.ThousandsSeparator = true;
+      this.toolTip.SetToolTip(this.repetitionsNumericUpDown, "Number of repetitions executed by the batch run.");
+      this.repetitionsNumericUpDown.Value = new decimal(new int[] {
+            10,
+            0,
+            0,
+            0});
+      this.repetitionsNumericUpDown.Validated += new System.EventHandler(this.repetitionsNumericUpDown_Validated);
+      // 
+      // experimentCreationBackgroundWorker
+      // 
+      this.experimentCreationBackgroundWorker.WorkerReportsProgress = true;
+      this.experimentCreationBackgroundWorker.WorkerSupportsCancellation = true;
+      this.experimentCreationBackgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.experimentCreationBackgroundWorker_DoWork);
+      this.experimentCreationBackgroundWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.experimentCreationBackgroundWorker_ProgressChanged);
+      this.experimentCreationBackgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.experimentCreationBackgroundWorker_RunWorkerCompleted);
+      // 
+      // instanceDiscoveryProgressBar
+      // 
+      this.instanceDiscoveryProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.instanceDiscoveryProgressBar.Location = new System.Drawing.Point(6, 141);
+      this.instanceDiscoveryProgressBar.Name = "instanceDiscoveryProgressBar";
+      this.instanceDiscoveryProgressBar.Size = new System.Drawing.Size(367, 23);
+      this.instanceDiscoveryProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+      this.instanceDiscoveryProgressBar.TabIndex = 4;
+      this.instanceDiscoveryProgressBar.Visible = false;
+      // 
+      // instanceDiscoveryProgressLabel
+      // 
+      this.instanceDiscoveryProgressLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.instanceDiscoveryProgressLabel.BackColor = System.Drawing.SystemColors.Control;
+      this.instanceDiscoveryProgressLabel.Location = new System.Drawing.Point(6, 167);
+      this.instanceDiscoveryProgressLabel.Name = "instanceDiscoveryProgressLabel";
+      this.instanceDiscoveryProgressLabel.Size = new System.Drawing.Size(367, 23);
+      this.instanceDiscoveryProgressLabel.TabIndex = 5;
+      this.instanceDiscoveryProgressLabel.Text = "label1";
+      this.instanceDiscoveryProgressLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      this.instanceDiscoveryProgressLabel.Visible = false;
+      // 
+      // selectAllCheckBox
+      // 
+      this.selectAllCheckBox.AutoSize = true;
+      this.selectAllCheckBox.Location = new System.Drawing.Point(52, 12);
+      this.selectAllCheckBox.Name = "selectAllCheckBox";
+      this.selectAllCheckBox.Size = new System.Drawing.Size(36, 17);
+      this.selectAllCheckBox.TabIndex = 1;
+      this.selectAllCheckBox.Text = "all";
+      this.selectAllCheckBox.UseVisualStyleBackColor = true;
+      this.selectAllCheckBox.CheckedChanged += new System.EventHandler(this.selectAllCheckBox_CheckedChanged);
+      // 
+      // selectNoneCheckBox
+      // 
+      this.selectNoneCheckBox.AutoSize = true;
+      this.selectNoneCheckBox.Location = new System.Drawing.Point(94, 12);
+      this.selectNoneCheckBox.Name = "selectNoneCheckBox";
+      this.selectNoneCheckBox.Size = new System.Drawing.Size(50, 17);
+      this.selectNoneCheckBox.TabIndex = 2;
+      this.selectNoneCheckBox.Text = "none";
+      this.selectNoneCheckBox.UseVisualStyleBackColor = true;
+      this.selectNoneCheckBox.CheckedChanged += new System.EventHandler(this.selectNoneCheckBox_CheckedChanged);
+      // 
+      // instanceDiscoveryBackgroundWorker
+      // 
+      this.instanceDiscoveryBackgroundWorker.WorkerReportsProgress = true;
+      this.instanceDiscoveryBackgroundWorker.WorkerSupportsCancellation = true;
+      this.instanceDiscoveryBackgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.instanceDiscoveryBackgroundWorker_DoWork);
+      this.instanceDiscoveryBackgroundWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.instanceDiscoveryBackgroundWorker_ProgressChanged);
+      this.instanceDiscoveryBackgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.instanceDiscoveryBackgroundWorker_RunWorkerCompleted);
+      // 
+      // 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.parametersTabPage);
+      this.tabControl.Controls.Add(this.instancesTabPage);
+      this.tabControl.Location = new System.Drawing.Point(15, 54);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(387, 317);
+      this.tabControl.TabIndex = 4;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.parametersSplitContainer);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(379, 291);
+      this.parametersTabPage.TabIndex = 1;
+      this.parametersTabPage.Text = "Parameter Variations";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // parametersSplitContainer
+      // 
+      this.parametersSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.parametersSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.parametersSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.parametersSplitContainer.Name = "parametersSplitContainer";
+      // 
+      // parametersSplitContainer.Panel1
+      // 
+      this.parametersSplitContainer.Panel1.Controls.Add(this.parametersListView);
+      // 
+      // parametersSplitContainer.Panel2
+      // 
+      this.parametersSplitContainer.Panel2.Controls.Add(this.generateButton);
+      this.parametersSplitContainer.Panel2.Controls.Add(this.stringConvertibleArrayView);
+      this.parametersSplitContainer.Panel2.Controls.Add(this.detailsTypeLabel);
+      this.parametersSplitContainer.Panel2.Controls.Add(this.choicesListView);
+      this.parametersSplitContainer.Size = new System.Drawing.Size(373, 285);
+      this.parametersSplitContainer.SplitterDistance = 155;
+      this.parametersSplitContainer.TabIndex = 1;
+      // 
+      // parametersListView
+      // 
+      this.parametersListView.CheckBoxes = true;
+      this.parametersListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.parametersListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.parametersListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.parametersListView.Location = new System.Drawing.Point(0, 0);
+      this.parametersListView.MultiSelect = false;
+      this.parametersListView.Name = "parametersListView";
+      this.parametersListView.Size = new System.Drawing.Size(155, 285);
+      this.parametersListView.TabIndex = 0;
+      this.parametersListView.UseCompatibleStateImageBehavior = false;
+      this.parametersListView.View = System.Windows.Forms.View.Details;
+      this.parametersListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.parametersListView_ItemChecked);
+      this.parametersListView.SelectedIndexChanged += new System.EventHandler(this.parametersListView_SelectedIndexChanged);
+      // 
+      // columnHeader1
+      // 
+      this.columnHeader1.Width = 150;
+      // 
+      // generateButton
+      // 
+      this.generateButton.Location = new System.Drawing.Point(16, 10);
+      this.generateButton.Name = "generateButton";
+      this.generateButton.Size = new System.Drawing.Size(75, 23);
+      this.generateButton.TabIndex = 8;
+      this.generateButton.Text = "Generate...";
+      this.generateButton.UseVisualStyleBackColor = true;
+      this.generateButton.Click += new System.EventHandler(this.generateButton_Click);
+      // 
+      // stringConvertibleArrayView
+      // 
+      this.stringConvertibleArrayView.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.stringConvertibleArrayView.Caption = "StringConvertibleArray View";
+      this.stringConvertibleArrayView.Content = null;
+      this.stringConvertibleArrayView.Location = new System.Drawing.Point(16, 39);
+      this.stringConvertibleArrayView.Name = "stringConvertibleArrayView";
+      this.stringConvertibleArrayView.ReadOnly = false;
+      this.stringConvertibleArrayView.Size = new System.Drawing.Size(183, 233);
+      this.stringConvertibleArrayView.TabIndex = 7;
+      // 
+      // detailsTypeLabel
+      // 
+      this.detailsTypeLabel.AutoSize = true;
+      this.detailsTypeLabel.Location = new System.Drawing.Point(13, 15);
+      this.detailsTypeLabel.Name = "detailsTypeLabel";
+      this.detailsTypeLabel.Size = new System.Drawing.Size(48, 13);
+      this.detailsTypeLabel.TabIndex = 0;
+      this.detailsTypeLabel.Text = "Choices:";
+      // 
+      // choicesListView
+      // 
+      this.choicesListView.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.choicesListView.CheckBoxes = true;
+      this.choicesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader2});
+      this.choicesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.choicesListView.Location = new System.Drawing.Point(16, 34);
+      this.choicesListView.Name = "choicesListView";
+      this.choicesListView.Size = new System.Drawing.Size(183, 238);
+      this.choicesListView.TabIndex = 6;
+      this.choicesListView.UseCompatibleStateImageBehavior = false;
+      this.choicesListView.View = System.Windows.Forms.View.Details;
+      this.choicesListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.choiceListView_ItemChecked);
+      // 
+      // columnHeader2
+      // 
+      this.columnHeader2.Width = 150;
+      // 
+      // instancesTabPage
+      // 
+      this.instancesTabPage.Controls.Add(this.label1);
+      this.instancesTabPage.Controls.Add(this.instanceDiscoveryProgressBar);
+      this.instancesTabPage.Controls.Add(this.selectNoneCheckBox);
+      this.instancesTabPage.Controls.Add(this.instanceDiscoveryProgressLabel);
+      this.instancesTabPage.Controls.Add(this.selectAllCheckBox);
+      this.instancesTabPage.Controls.Add(this.instancesTreeView);
+      this.instancesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.instancesTabPage.Name = "instancesTabPage";
+      this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.instancesTabPage.Size = new System.Drawing.Size(379, 291);
+      this.instancesTabPage.TabIndex = 0;
+      this.instancesTabPage.Text = "Problem Instances";
+      this.instancesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(6, 13);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(40, 13);
+      this.label1.TabIndex = 0;
+      this.label1.Text = "Select:";
+      // 
+      // instancesTreeView
+      // 
+      this.instancesTreeView.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.instancesTreeView.CheckBoxes = true;
+      this.instancesTreeView.Location = new System.Drawing.Point(6, 35);
+      this.instancesTreeView.Name = "instancesTreeView";
+      this.instancesTreeView.Size = new System.Drawing.Size(367, 250);
+      this.instancesTreeView.TabIndex = 6;
+      this.instancesTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.instancesTreeView_AfterCheck);
+      // 
+      // experimentsToCreateDescriptionLabel
+      // 
+      this.experimentsToCreateDescriptionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.experimentsToCreateDescriptionLabel.AutoSize = true;
+      this.experimentsToCreateDescriptionLabel.Location = new System.Drawing.Point(12, 382);
+      this.experimentsToCreateDescriptionLabel.Name = "experimentsToCreateDescriptionLabel";
+      this.experimentsToCreateDescriptionLabel.Size = new System.Drawing.Size(56, 13);
+      this.experimentsToCreateDescriptionLabel.TabIndex = 5;
+      this.experimentsToCreateDescriptionLabel.Text = "Variations:";
+      // 
+      // variationsLabel
+      // 
+      this.variationsLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.variationsLabel.AutoSize = true;
+      this.variationsLabel.Location = new System.Drawing.Point(74, 382);
+      this.variationsLabel.Name = "variationsLabel";
+      this.variationsLabel.Size = new System.Drawing.Size(13, 13);
+      this.variationsLabel.TabIndex = 6;
+      this.variationsLabel.Text = "1";
+      this.variationsLabel.TextChanged += new System.EventHandler(this.experimentsLabel_TextChanged);
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // warningProvider
+      // 
+      this.warningProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.warningProvider.ContainerControl = this;
+      this.warningProvider.Icon = ((System.Drawing.Icon)(resources.GetObject("warningProvider.Icon")));
+      // 
+      // experimentCreationProgressBar
+      // 
+      this.experimentCreationProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.experimentCreationProgressBar.Location = new System.Drawing.Point(187, 377);
+      this.experimentCreationProgressBar.Name = "experimentCreationProgressBar";
+      this.experimentCreationProgressBar.Size = new System.Drawing.Size(134, 23);
+      this.experimentCreationProgressBar.TabIndex = 9;
+      this.experimentCreationProgressBar.Visible = false;
+      // 
+      // CreateExperimentDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(414, 412);
+      this.Controls.Add(this.experimentCreationProgressBar);
+      this.Controls.Add(this.variationsLabel);
+      this.Controls.Add(this.experimentsToCreateDescriptionLabel);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.repetitionsNumericUpDown);
+      this.Controls.Add(this.repetitionsLabel);
+      this.Controls.Add(this.createBatchRunLabel);
+      this.Controls.Add(this.createBatchRunCheckBox);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "CreateExperimentDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Create Experiment";
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CreateExperimentDialog_FormClosing);
+      this.Load += new System.EventHandler(this.CreateExperimentDialog_Load);
+      ((System.ComponentModel.ISupportInitialize)(this.repetitionsNumericUpDown)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersSplitContainer.Panel1.ResumeLayout(false);
+      this.parametersSplitContainer.Panel2.ResumeLayout(false);
+      this.parametersSplitContainer.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.parametersSplitContainer)).EndInit();
+      this.parametersSplitContainer.ResumeLayout(false);
+      this.instancesTabPage.ResumeLayout(false);
+      this.instancesTabPage.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.warningProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.CheckBox createBatchRunCheckBox;
+    private System.Windows.Forms.Label createBatchRunLabel;
+    private System.Windows.Forms.Label repetitionsLabel;
+    private System.Windows.Forms.NumericUpDown repetitionsNumericUpDown;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.ComponentModel.BackgroundWorker experimentCreationBackgroundWorker;
+    private System.Windows.Forms.ProgressBar instanceDiscoveryProgressBar;
+    private System.Windows.Forms.Label instanceDiscoveryProgressLabel;
+    private System.Windows.Forms.CheckBox selectAllCheckBox;
+    private System.Windows.Forms.CheckBox selectNoneCheckBox;
+    private System.ComponentModel.BackgroundWorker instanceDiscoveryBackgroundWorker;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.TabPage instancesTabPage;
+    private System.Windows.Forms.SplitContainer parametersSplitContainer;
+    private System.Windows.Forms.ListView parametersListView;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    private System.Windows.Forms.Label experimentsToCreateDescriptionLabel;
+    private System.Windows.Forms.Label variationsLabel;
+    private System.Windows.Forms.Label detailsTypeLabel;
+    private System.Windows.Forms.ListView choicesListView;
+    private System.Windows.Forms.ColumnHeader columnHeader2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+    private System.Windows.Forms.ErrorProvider warningProvider;
+    private System.Windows.Forms.TreeView instancesTreeView;
+    private Data.Views.StringConvertibleArrayView stringConvertibleArrayView;
+    private System.Windows.Forms.ProgressBar experimentCreationProgressBar;
+    private System.Windows.Forms.Button generateButton;
+
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 12176)
@@ -0,0 +1,889 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Problems.Instances;
+
+namespace HeuristicLab.Optimizer {
+  public partial class CreateExperimentDialog : Form {
+    private enum DialogMode { Normal = 1, DiscoveringInstances = 2, CreatingExperiment = 3, PreparingExperiment = 4 };
+
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer; }
+      set {
+        optimizer = value;
+        Experiment = null;
+        okButton.Enabled = optimizer != null;
+        SetTabControlVisibility();
+        FillInstanceTreeViewAsync();
+        FillParametersListView();
+      }
+    }
+
+    public Experiment Experiment { get; private set; }
+
+    private bool createBatchRun;
+    private int repetitions;
+    private Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>> instances;
+    private Dictionary<IValueParameter, IntArray> intParameters;
+    private Dictionary<IValueParameter, DoubleArray> doubleParameters;
+    private HashSet<IValueParameter> boolParameters;
+    private Dictionary<IValueParameter, HashSet<IItem>> multipleChoiceParameters;
+    private IItem optionalNullChoice = new BoolValue(); // any item will do
+
+    private StringBuilder failedInstances;
+    private EventWaitHandle backgroundWorkerWaitHandle = new ManualResetEvent(false);
+    private bool suppressTreeViewEventHandling, suppressCheckAllNoneEventHandling;
+
+    public CreateExperimentDialog() : this(null) { }
+    public CreateExperimentDialog(IOptimizer optimizer) {
+      InitializeComponent();
+      instanceDiscoveryProgressLabel.BackColor = instancesTabPage.BackColor;
+      createBatchRun = createBatchRunCheckBox.Checked;
+      repetitions = (int)repetitionsNumericUpDown.Value;
+      // do not set the Optimizer property here, because we want to delay instance discovery to the time when the form loads
+      this.optimizer = optimizer;
+      Experiment = null;
+      okButton.Enabled = optimizer != null;
+
+      instances = new Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>>();
+      intParameters = new Dictionary<IValueParameter, IntArray>();
+      doubleParameters = new Dictionary<IValueParameter, DoubleArray>();
+      boolParameters = new HashSet<IValueParameter>();
+      multipleChoiceParameters = new Dictionary<IValueParameter, HashSet<IItem>>();
+    }
+
+    #region Event handlers
+    private void CreateExperimentDialog_Load(object sender, EventArgs e) {
+      SetTabControlVisibility();
+      FillInstanceTreeViewAsync();
+      FillParametersListView();
+    }
+
+    private void CreateExperimentDialog_FormClosing(object sender, FormClosingEventArgs e) {
+      if (experimentCreationBackgroundWorker.IsBusy) {
+        if (DialogResult != System.Windows.Forms.DialogResult.OK) {
+          if (experimentCreationBackgroundWorker.IsBusy) experimentCreationBackgroundWorker.CancelAsync();
+          if (instanceDiscoveryBackgroundWorker.IsBusy) instanceDiscoveryBackgroundWorker.CancelAsync();
+        }
+        e.Cancel = true;
+      }
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      SetMode(DialogMode.CreatingExperiment);
+      experimentCreationBackgroundWorker.RunWorkerAsync();
+      backgroundWorkerWaitHandle.WaitOne(); // make sure the background worker has started before exiting
+    }
+
+    #region Parameters variation
+    private void parametersListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
+      var parameter = (IValueParameter)e.Item.Tag;
+      var isConstrainedValueParameter = typeof(OptionalConstrainedValueParameter<>).Equals(parameter.GetType().GetGenericTypeDefinition())
+        || typeof(ConstrainedValueParameter<>).Equals(parameter.GetType().GetGenericTypeDefinition());
+
+      if (!isConstrainedValueParameter && parameter.Value == null) {
+        if (e.Item.Checked) e.Item.Checked = false;
+        return;
+      }
+
+      if (isConstrainedValueParameter) {
+        if (e.Item.Checked) multipleChoiceParameters.Add(parameter, new HashSet<IItem>());
+        else multipleChoiceParameters.Remove(parameter);
+      } else {
+
+        var intValue = parameter.Value as ValueTypeValue<int>;
+        if (intValue != null) {
+          if (e.Item.Checked) {
+            IntArray initialValues;
+            if (intValue.Value == int.MinValue)
+              initialValues = new IntArray(new int[] { -100, -50, 5 });
+            else if (intValue.Value == int.MaxValue)
+              initialValues = new IntArray(new int[] { 5, 50, 100 });
+            else if (intValue.Value == 0)
+              initialValues = new IntArray(new int[] { 0, 1, 2 });
+            else if (Math.Abs(intValue.Value) < 10)
+              initialValues = new IntArray(new int[] { intValue.Value - 1, intValue.Value, intValue.Value + 1 });
+            else initialValues = new IntArray(new int[] { intValue.Value / 2, intValue.Value, intValue.Value * 2 });
+            intParameters.Add(parameter, initialValues);
+            intParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
+          } else intParameters.Remove(parameter);
+        }
+
+        var doubleValue = parameter.Value as ValueTypeValue<double>;
+        if (doubleValue != null) {
+          if (e.Item.Checked) {
+            DoubleArray initialValues;
+            if (doubleValue.Value == double.MinValue)
+              initialValues = new DoubleArray(new double[] { -1, -0.5, 0 });
+            else if (doubleValue.Value == double.MaxValue)
+              initialValues = new DoubleArray(new double[] { 0, 0.5, 1 });
+            else if (doubleValue.Value == 0.0)
+              initialValues = new DoubleArray(new double[] { 0, 0.1, 0.2 });
+            else if (Math.Abs(doubleValue.Value) <= 1.0) {
+              if (doubleValue.Value > 0.9 || (doubleValue.Value < 0.0 && doubleValue.Value > -0.1))
+                initialValues = new DoubleArray(new double[] { doubleValue.Value - 0.2, doubleValue.Value - 0.1, doubleValue.Value });
+              else if (doubleValue.Value < -0.9 || (doubleValue.Value > 0 && doubleValue.Value < 0.1))
+                initialValues = new DoubleArray(new double[] { doubleValue.Value, doubleValue.Value + 0.1, doubleValue.Value + 0.2 });
+              else initialValues = new DoubleArray(new double[] { doubleValue.Value - 0.1, doubleValue.Value, doubleValue.Value + 0.1 });
+            } else initialValues = new DoubleArray(new double[] { doubleValue.Value / 2.0, doubleValue.Value, doubleValue.Value * 2.0 });
+            doubleParameters.Add(parameter, initialValues);
+            doubleParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
+          } else doubleParameters.Remove(parameter);
+        }
+
+        var boolValue = parameter.Value as ValueTypeValue<bool>;
+        if (boolValue != null) {
+          if (e.Item.Checked) boolParameters.Add(parameter);
+          else boolParameters.Remove(parameter);
+        }
+      }
+
+      UpdateVariationsLabel();
+      if (e.Item.Selected) UpdateDetailsView(parameter);
+      else e.Item.Selected = true;
+    }
+
+    private void parametersListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if (parametersListView.SelectedItems.Count == 0) {
+        ClearDetailsView();
+      } else {
+        var parameter = parametersListView.SelectedItems[0].Tag as IValueParameter;
+        UpdateDetailsView(parameter);
+      }
+    }
+
+    private void UpdateDetailsView(IValueParameter parameter) {
+      ClearDetailsView();
+
+      var isOptionalConstrainedValueParameter = typeof(OptionalConstrainedValueParameter<>).IsAssignableFrom(parameter.GetType().GetGenericTypeDefinition());
+      var isConstrainedValueParameter =
+        isOptionalConstrainedValueParameter
+        || typeof(ConstrainedValueParameter<>).Equals(parameter.GetType().GetGenericTypeDefinition());
+
+      if (isConstrainedValueParameter) {
+        detailsTypeLabel.Text = "Choices:";
+        choicesListView.Tag = parameter;
+
+        if (isOptionalConstrainedValueParameter) {
+          choicesListView.Items.Add(new ListViewItem("-") {
+            Tag = optionalNullChoice,
+            Checked = multipleChoiceParameters.ContainsKey(parameter)
+            && multipleChoiceParameters[parameter].Contains(optionalNullChoice)
+          });
+        }
+        dynamic constrainedValuedParameter = parameter;
+        dynamic validValues = constrainedValuedParameter.ValidValues;
+        foreach (var choice in validValues) {
+          choicesListView.Items.Add(new ListViewItem(choice.ToString()) {
+            Tag = choice,
+            Checked = multipleChoiceParameters.ContainsKey(parameter)
+            && multipleChoiceParameters[parameter].Contains(choice)
+          });
+        }
+        choicesListView.Enabled = multipleChoiceParameters.ContainsKey(parameter);
+        detailsTypeLabel.Visible = true;
+        choicesListView.Visible = true;
+        return;
+      }
+
+      if (parameter.Value is ValueTypeValue<bool>) {
+        detailsTypeLabel.Text = "Boolean parameter: True / False";
+        detailsTypeLabel.Visible = true;
+      }
+
+      var intValue = parameter.Value as ValueTypeValue<int>;
+      if (intValue != null) {
+        if (intParameters.ContainsKey(parameter))
+          stringConvertibleArrayView.Content = intParameters[parameter];
+        stringConvertibleArrayView.Visible = true;
+        stringConvertibleArrayView.ReadOnly = !intParameters.ContainsKey(parameter);
+        generateButton.Tag = parameter;
+        generateButton.Enabled = intParameters.ContainsKey(parameter);
+        generateButton.Visible = true;
+        return;
+      }
+
+      var doubleValue = parameter.Value as ValueTypeValue<double>;
+      if (doubleValue != null) {
+        if (doubleParameters.ContainsKey(parameter))
+          stringConvertibleArrayView.Content = doubleParameters[parameter];
+        stringConvertibleArrayView.Visible = true;
+        stringConvertibleArrayView.ReadOnly = !doubleParameters.ContainsKey(parameter);
+        generateButton.Tag = parameter;
+        generateButton.Enabled = doubleParameters.ContainsKey(parameter);
+        generateButton.Visible = true;
+        return;
+      }
+    }
+
+    #region Detail controls
+    private void choiceListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
+      var parameter = (IValueParameter)choicesListView.Tag;
+      if (multipleChoiceParameters.ContainsKey(parameter)) {
+        if (e.Item.Checked) {
+          multipleChoiceParameters[parameter].Add((IItem)e.Item.Tag);
+        } else multipleChoiceParameters[parameter].Remove((IItem)e.Item.Tag);
+
+        UpdateVariationsLabel();
+      }
+    }
+
+    private void generateButton_Click(object sender, EventArgs e) {
+      var parameter = (IValueParameter)generateButton.Tag;
+      bool integerOnly = intParameters.ContainsKey(parameter);
+      double min = 0, max = 1, step = 1;
+      #region Try to calculate some meaningful values
+      if (integerOnly) {
+        int len = intParameters[parameter].Length;
+        if (len > 0) {
+          min = intParameters[parameter].Min();
+          max = intParameters[parameter].Max();
+          step = len >= 2 ? Math.Abs((intParameters[parameter][len - 1] - intParameters[parameter][len - 2])) : 1;
+        }
+      } else {
+        int len = doubleParameters[parameter].Length;
+        if (len > 0) {
+          min = doubleParameters[parameter].Min();
+          max = doubleParameters[parameter].Max();
+          step = len >= 2 ? Math.Abs((doubleParameters[parameter][len - 1] - doubleParameters[parameter][len - 2])) : 1;
+        }
+      }
+      #endregion
+      using (var dialog = new DefineArithmeticProgressionDialog(integerOnly, min, max, step)) {
+        if (dialog.ShowDialog(this) == DialogResult.OK) {
+          var values = dialog.Values;
+          if (integerOnly) {
+            intParameters[parameter].Reset -= new EventHandler(ValuesArray_Reset);
+            intParameters[parameter] = new IntArray(values.Select(x => (int)x).ToArray());
+            intParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
+            stringConvertibleArrayView.Content = intParameters[parameter];
+          } else {
+            doubleParameters[parameter].Reset -= new EventHandler(ValuesArray_Reset);
+            doubleParameters[parameter] = new DoubleArray(values.ToArray());
+            doubleParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
+            stringConvertibleArrayView.Content = doubleParameters[parameter];
+          }
+          UpdateVariationsLabel();
+        }
+      }
+    }
+
+    private void ValuesArray_Reset(object sender, EventArgs e) {
+      UpdateVariationsLabel();
+    }
+    #endregion
+    #endregion
+
+    #region Instances
+    private void instancesTreeView_AfterCheck(object sender, TreeViewEventArgs e) {
+      if (!suppressTreeViewEventHandling) {
+        if (e.Node.Nodes.Count > 0) { // provider node was (un)checked
+          SyncProviderNode(e.Node);
+        } else { // descriptor node was (un)checked
+          SyncInstanceNode(e.Node);
+        }
+
+        suppressCheckAllNoneEventHandling = true;
+        try {
+          var treeViewNodes = instancesTreeView.Nodes.OfType<TreeNode>().SelectMany(x => x.Nodes.OfType<TreeNode>());
+          selectAllCheckBox.Checked = treeViewNodes.Count() == instances.SelectMany(x => x.Value).Count();
+          selectNoneCheckBox.Checked = !treeViewNodes.Any(x => x.Checked);
+        } finally { suppressCheckAllNoneEventHandling = false; }
+        UpdateVariationsLabel();
+      }
+    }
+
+    private void SyncProviderNode(TreeNode node) {
+      suppressTreeViewEventHandling = true;
+      try {
+        foreach (TreeNode n in node.Nodes) {
+          if (n.Checked != node.Checked) {
+            n.Checked = node.Checked;
+            SyncInstanceNode(n, false);
+          }
+        }
+      } finally { suppressTreeViewEventHandling = false; }
+    }
+
+    private void SyncInstanceNode(TreeNode node, bool providerCheck = true) {
+      var provider = (IProblemInstanceProvider)node.Parent.Tag;
+      var descriptor = (IDataDescriptor)node.Tag;
+      if (node.Checked) {
+        if (!instances.ContainsKey(provider))
+          instances.Add(provider, new HashSet<IDataDescriptor>());
+        instances[provider].Add(descriptor);
+      } else {
+        if (instances.ContainsKey(provider)) {
+          instances[provider].Remove(descriptor);
+          if (instances[provider].Count == 0)
+            instances.Remove(provider);
+        }
+      }
+      if (providerCheck) {
+        bool allChecked = node.Parent.Nodes.OfType<TreeNode>().All(x => x.Checked);
+        suppressTreeViewEventHandling = true;
+        try {
+          node.Parent.Checked = allChecked;
+        } finally { suppressTreeViewEventHandling = false; }
+      }
+    }
+
+    private void selectAllCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (!suppressCheckAllNoneEventHandling) {
+        if (selectAllCheckBox.Checked) {
+          suppressCheckAllNoneEventHandling = true;
+          try { selectNoneCheckBox.Checked = false; } finally { suppressCheckAllNoneEventHandling = false; }
+          try {
+            suppressTreeViewEventHandling = true;
+            foreach (TreeNode node in instancesTreeView.Nodes) {
+              if (!node.Checked) {
+                node.Checked = true;
+                SyncProviderNode(node);
+              }
+            }
+          } finally { suppressTreeViewEventHandling = false; }
+        }
+        UpdateVariationsLabel();
+      }
+    }
+
+    private void selectNoneCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (!suppressCheckAllNoneEventHandling) {
+        if (selectNoneCheckBox.Checked) {
+          suppressCheckAllNoneEventHandling = true;
+          try { selectAllCheckBox.Checked = false; } finally { suppressCheckAllNoneEventHandling = false; }
+          try {
+            suppressTreeViewEventHandling = true;
+            foreach (TreeNode node in instancesTreeView.Nodes) {
+              if (node.Checked) {
+                node.Checked = false;
+                SyncProviderNode(node);
+              }
+            }
+          } finally { suppressTreeViewEventHandling = false; }
+        }
+        UpdateVariationsLabel();
+      }
+    }
+    #endregion
+
+    private void createBatchRunCheckBox_CheckedChanged(object sender, EventArgs e) {
+      repetitionsNumericUpDown.Enabled = createBatchRunCheckBox.Checked;
+      createBatchRun = createBatchRunCheckBox.Checked;
+    }
+
+    private void repetitionsNumericUpDown_Validated(object sender, EventArgs e) {
+      if (repetitionsNumericUpDown.Text == string.Empty)
+        repetitionsNumericUpDown.Text = repetitionsNumericUpDown.Value.ToString();
+      repetitions = (int)repetitionsNumericUpDown.Value;
+    }
+
+    private void experimentsLabel_TextChanged(object sender, EventArgs e) {
+      long number;
+      if (long.TryParse(variationsLabel.Text, NumberStyles.AllowThousands, CultureInfo.CurrentCulture.NumberFormat, out number)) {
+        if (number > 1000) warningProvider.SetError(variationsLabel, "Consider reducing the number of variations!");
+        else warningProvider.SetError(variationsLabel, null);
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void SetTabControlVisibility() {
+      bool isAlgorithm = optimizer != null && optimizer is IAlgorithm;
+      bool instancesAvailable = isAlgorithm
+        && ((IAlgorithm)optimizer).Problem != null
+        && ProblemInstanceManager.GetProviders(((IAlgorithm)optimizer).Problem).Any();
+      if (instancesAvailable && tabControl.TabCount == 1)
+        tabControl.TabPages.Add(instancesTabPage);
+      else if (!instancesAvailable && tabControl.TabCount == 2)
+        tabControl.TabPages.Remove(instancesTabPage);
+      tabControl.Visible = isAlgorithm;
+      if (isAlgorithm) {
+        variationsLabel.Visible = true;
+        experimentsToCreateDescriptionLabel.Visible = true;
+        Height = 450;
+      } else {
+        variationsLabel.Visible = false;
+        experimentsToCreateDescriptionLabel.Visible = false;
+        Height = 130;
+      }
+    }
+
+    private void FillParametersListView() {
+      parametersListView.Items.Clear();
+      intParameters.Clear();
+      doubleParameters.Clear();
+      boolParameters.Clear();
+      multipleChoiceParameters.Clear();
+
+      if (Optimizer is IAlgorithm) {
+        var parameters = ((IAlgorithm)optimizer).Parameters;
+        foreach (var param in parameters) {
+          var valueParam = param as IValueParameter;
+          if (valueParam != null && (valueParam.Value is ValueTypeValue<bool>
+              || valueParam.Value is ValueTypeValue<int>
+              || valueParam.Value is ValueTypeValue<double>)
+            || typeof(OptionalConstrainedValueParameter<>).IsAssignableFrom(param.GetType().GetGenericTypeDefinition())
+            || typeof(ConstrainedValueParameter<>).IsAssignableFrom(param.GetType().GetGenericTypeDefinition()))
+            parametersListView.Items.Add(new ListViewItem(param.Name) { Tag = param });
+        }
+      }
+    }
+
+    private void FillInstanceTreeViewAsync() {
+      instances.Clear();
+      instancesTreeView.Nodes.Clear();
+
+      if (Optimizer is IAlgorithm && ((IAlgorithm)Optimizer).Problem != null) {
+        SetMode(DialogMode.DiscoveringInstances);
+        instanceDiscoveryBackgroundWorker.RunWorkerAsync();
+      }
+    }
+
+    private void AddOptimizer(IOptimizer optimizer, Experiment experiment) {
+      if (createBatchRun) {
+        var batchRun = new BatchRun(repetitions.ToString() + "x " + optimizer.Name) {
+          Repetitions = repetitions,
+          Optimizer = optimizer
+        };
+        experiment.Optimizers.Add(batchRun);
+      } else {
+        experiment.Optimizers.Add(optimizer);
+      }
+    }
+
+    private int GetNumberOfVariations() {
+      int instancesCount = 1;
+      if (instances.Values.Any())
+        instancesCount = Math.Max(instances.Values.SelectMany(x => x).Count(), 1);
+
+      int intParameterVariations = 1;
+      foreach (var intParam in intParameters.Values) {
+        intParameterVariations *= Math.Max(intParam.Length, 1);
+      }
+      int doubleParameterVariations = 1;
+      foreach (var doubleParam in doubleParameters.Values) {
+        doubleParameterVariations *= Math.Max(doubleParam.Length, 1);
+      }
+      int boolParameterVariations = 1;
+      foreach (var boolParam in boolParameters) {
+        boolParameterVariations *= 2;
+      }
+      int choiceParameterVariations = 1;
+      foreach (var choiceParam in multipleChoiceParameters.Values) {
+        choiceParameterVariations *= Math.Max(choiceParam.Count, 1);
+      }
+
+      return (instancesCount * intParameterVariations * doubleParameterVariations * boolParameterVariations * choiceParameterVariations);
+    }
+
+    private void SetMode(DialogMode mode) {
+      if (InvokeRequired) Invoke((Action<DialogMode>)SetMode, mode);
+      else {
+        createBatchRunCheckBox.Enabled = mode == DialogMode.Normal;
+        repetitionsNumericUpDown.Enabled = mode == DialogMode.Normal;
+        parametersSplitContainer.Enabled = mode == DialogMode.Normal || mode == DialogMode.DiscoveringInstances;
+        selectAllCheckBox.Enabled = mode == DialogMode.Normal;
+        selectNoneCheckBox.Enabled = mode == DialogMode.Normal;
+        instancesTreeView.Enabled = mode == DialogMode.Normal;
+        instancesTreeView.Visible = mode == DialogMode.Normal || mode == DialogMode.CreatingExperiment || mode == DialogMode.PreparingExperiment;
+        okButton.Enabled = mode == DialogMode.Normal;
+        okButton.Visible = mode != DialogMode.CreatingExperiment && mode != DialogMode.PreparingExperiment;
+        cancelButton.Enabled = mode != DialogMode.PreparingExperiment;
+        instanceDiscoveryProgressLabel.Visible = mode == DialogMode.DiscoveringInstances;
+        instanceDiscoveryProgressBar.Visible = mode == DialogMode.DiscoveringInstances;
+        experimentCreationProgressBar.Visible = mode == DialogMode.CreatingExperiment || mode == DialogMode.PreparingExperiment;
+      }
+    }
+
+    private void ClearDetailsView() {
+      stringConvertibleArrayView.Visible = false;
+      stringConvertibleArrayView.Content = null;
+      stringConvertibleArrayView.ReadOnly = true;
+      generateButton.Visible = false;
+      detailsTypeLabel.Visible = false;
+      choicesListView.Items.Clear();
+      choicesListView.Enabled = false;
+      choicesListView.Visible = false;
+    }
+
+    private void UpdateVariationsLabel() {
+      variationsLabel.Text = GetNumberOfVariations().ToString("#,#", CultureInfo.CurrentCulture);
+    }
+
+    #region Retrieve parameter combinations
+    private IEnumerable<Dictionary<IValueParameter, int>> GetIntParameterConfigurations() {
+      var configuration = new Dictionary<IValueParameter, int>();
+      var enumerators = new Dictionary<IValueParameter, IEnumerator<int>>();
+      bool finished;
+      do {
+        foreach (var p in intParameters) {
+          if (!enumerators.ContainsKey(p.Key)) {
+            enumerators[p.Key] = p.Value.GetEnumerator();
+            enumerators[p.Key].MoveNext();
+          }
+          configuration[p.Key] = enumerators[p.Key].Current;
+        }
+        yield return configuration;
+
+        finished = true;
+        foreach (var p in intParameters) {
+          if (!enumerators[p.Key].MoveNext()) {
+            enumerators[p.Key] = p.Value.GetEnumerator();
+            enumerators[p.Key].MoveNext();
+          } else {
+            finished = false;
+            break;
+          }
+        }
+      } while (!finished);
+    }
+
+    private IEnumerable<Dictionary<IValueParameter, double>> GetDoubleParameterConfigurations() {
+      var configuration = new Dictionary<IValueParameter, double>();
+      var enumerators = new Dictionary<IValueParameter, IEnumerator<double>>();
+      bool finished;
+      do {
+        foreach (var p in doubleParameters) {
+          if (!enumerators.ContainsKey(p.Key)) {
+            enumerators[p.Key] = p.Value.GetEnumerator();
+            enumerators[p.Key].MoveNext();
+          }
+          configuration[p.Key] = enumerators[p.Key].Current;
+        }
+        yield return configuration;
+
+        finished = true;
+        foreach (var p in doubleParameters) {
+          if (!enumerators[p.Key].MoveNext()) {
+            enumerators[p.Key] = p.Value.GetEnumerator();
+            enumerators[p.Key].MoveNext();
+          } else {
+            finished = false;
+            break;
+          }
+        }
+      } while (!finished);
+    }
+
+    private IEnumerable<Dictionary<IValueParameter, bool>> GetBoolParameterConfigurations() {
+      var configuration = new Dictionary<IValueParameter, bool>();
+      bool finished;
+      do {
+        finished = true;
+        foreach (var p in boolParameters) {
+          if (!configuration.ContainsKey(p)) configuration.Add(p, false);
+          else {
+            if (configuration[p]) {
+              configuration[p] = false;
+            } else {
+              configuration[p] = true;
+              finished = false;
+              break;
+            }
+          }
+        }
+        yield return configuration;
+      } while (!finished);
+    }
+
+    private IEnumerable<Dictionary<IValueParameter, IItem>> GetMultipleChoiceConfigurations() {
+      var configuration = new Dictionary<IValueParameter, IItem>();
+      var enumerators = new Dictionary<IValueParameter, IEnumerator<IItem>>();
+      bool finished;
+      do {
+        foreach (var p in multipleChoiceParameters.Keys.ToArray()) {
+          if (!enumerators.ContainsKey(p)) {
+            enumerators.Add(p, multipleChoiceParameters[p].GetEnumerator());
+            if (!enumerators[p].MoveNext()) {
+              multipleChoiceParameters.Remove(p);
+              continue;
+            }
+          }
+          configuration[p] = enumerators[p].Current;
+        }
+
+        finished = true;
+        foreach (var p in multipleChoiceParameters.Keys) {
+          if (!enumerators[p].MoveNext()) {
+            enumerators[p] = multipleChoiceParameters[p].GetEnumerator();
+            enumerators[p].MoveNext();
+          } else {
+            finished = false;
+            break;
+          }
+        }
+        yield return configuration;
+      } while (!finished);
+    }
+    #endregion
+    #endregion
+
+    #region Background workers
+    #region Instance discovery
+    private void instanceDiscoveryBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      instanceDiscoveryBackgroundWorker.ReportProgress(0, "Finding instance providers...");
+      var instanceProviders = ProblemInstanceManager.GetProviders(((IAlgorithm)Optimizer).Problem).ToArray();
+      var nodes = new List<TreeNode>(instanceProviders.Length);
+      for (int i = 0; i < instanceProviders.Length; i++) {
+        var provider = instanceProviders[i];
+        var providerNode = new TreeNode(provider.Name) { Tag = provider };
+        var descriptors = ProblemInstanceManager.GetDataDescriptors(provider);
+        foreach (var desc in descriptors) {
+          #region Check cancellation request
+          if (instanceDiscoveryBackgroundWorker.CancellationPending) {
+            e.Cancel = true;
+            e.Result = nodes.ToArray();
+            return;
+          }
+          #endregion
+          var node = new TreeNode(desc.Name) { Tag = desc };
+          providerNode.Nodes.Add(node);
+          if (providerNode.Nodes.Count == 1)
+            nodes.Add(providerNode);
+        }
+        double progress = nodes.Count > 0 ? i / (double)nodes.Count : 0.0;
+        instanceDiscoveryBackgroundWorker.ReportProgress((int)(100 * progress), provider.Name);
+      }
+      e.Result = nodes.ToArray();
+      instanceDiscoveryBackgroundWorker.ReportProgress(100, string.Empty);
+    }
+
+    private void instanceDiscoveryBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) {
+      if (instanceDiscoveryProgressBar.Value != e.ProgressPercentage)
+        instanceDiscoveryProgressBar.Value = e.ProgressPercentage;
+      instanceDiscoveryProgressLabel.Text = (string)e.UserState;
+    }
+
+    private void instanceDiscoveryBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      try {
+        if (((TreeNode[])e.Result).Length > 0) {
+          instancesTreeView.Nodes.AddRange((TreeNode[])e.Result);
+          foreach (TreeNode node in instancesTreeView.Nodes)
+            node.Collapse();
+        }
+        selectNoneCheckBox.Checked = true;
+      } catch { }
+      try {
+        SetMode(DialogMode.Normal);
+        if (e.Error != null) MessageBox.Show(e.Error.Message, "Error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } catch { }
+    }
+    #endregion
+
+    #region Experiment creation
+    private void experimentCreationBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      backgroundWorkerWaitHandle.Set(); // notify the ok button that we're busy now
+      failedInstances = new StringBuilder();
+      var localExperiment = new Experiment();
+
+      int counter = 0, totalVariations = GetNumberOfVariations();
+      int totalInstances = instances.Values.SelectMany(x => x).Count();
+      if (totalInstances == 0) {
+        try {
+          AddParameterVariations(Optimizer, localExperiment, ref counter, totalVariations);
+        } catch (OperationCanceledException) {
+          e.Cancel = true;
+          return;
+        }
+        experimentCreationBackgroundWorker.ReportProgress(100, string.Empty);
+      } else {
+        foreach (var provider in instances.Keys) {
+          foreach (var descriptor in instances[provider]) {
+            var algorithm = (IAlgorithm)Optimizer.Clone();
+            bool failed = false;
+            try {
+              ProblemInstanceManager.LoadData(provider, descriptor, (IProblemInstanceConsumer)algorithm.Problem);
+            } catch (Exception ex) {
+              failedInstances.AppendLine(descriptor.Name + ": " + ex.Message);
+              failed = true;
+            }
+            if (!failed) {
+              try {
+                if (totalInstances > 1 && totalVariations / totalInstances > 1) {
+                  var experiment = new Experiment(descriptor.Name);
+                  AddParameterVariations(algorithm, experiment, ref counter, totalVariations);
+                  localExperiment.Optimizers.Add(experiment);
+                } else {
+                  AddParameterVariations(algorithm, localExperiment, ref counter, totalVariations);
+                }
+              } catch (OperationCanceledException) {
+                e.Cancel = true;
+                return;
+              }
+            } else experimentCreationBackgroundWorker.ReportProgress((int)Math.Round((100.0 * counter) / totalVariations), "Loading failed (" + descriptor.Name + ")");
+          }
+        }
+      }
+      // this step can take some time
+      SetMode(DialogMode.PreparingExperiment);
+      experimentCreationBackgroundWorker.ReportProgress(-1);
+      localExperiment.Prepare(true);
+      experimentCreationBackgroundWorker.ReportProgress(100);
+      Experiment = localExperiment;
+    }
+
+    private void AddParameterVariations(IOptimizer optimizer, Experiment localExperiment, ref int counter, int totalVariations) {
+      var variations = CalculateParameterVariations(optimizer);
+      foreach (var v in variations) {
+        if (experimentCreationBackgroundWorker.CancellationPending)
+          throw new OperationCanceledException();
+        AddOptimizer(v, localExperiment);
+        counter++;
+        experimentCreationBackgroundWorker.ReportProgress((int)Math.Round((100.0 * counter) / totalVariations), string.Empty);
+      }
+    }
+
+    private IEnumerable<IOptimizer> CalculateParameterVariations(IOptimizer optimizer) {
+      if (!boolParameters.Any() && !intParameters.Any() && !doubleParameters.Any() && !multipleChoiceParameters.Any()) {
+        var o = (IOptimizer)optimizer.Clone();
+        o.Runs.Clear();
+        yield return o;
+        yield break;
+      }
+      bool finished;
+      var mcEnumerator = GetMultipleChoiceConfigurations().GetEnumerator();
+      var boolEnumerator = GetBoolParameterConfigurations().GetEnumerator();
+      var intEnumerator = GetIntParameterConfigurations().GetEnumerator();
+      var doubleEnumerator = GetDoubleParameterConfigurations().GetEnumerator();
+      mcEnumerator.MoveNext(); boolEnumerator.MoveNext(); intEnumerator.MoveNext(); doubleEnumerator.MoveNext();
+      do {
+        var variant = (IAlgorithm)optimizer.Clone();
+        variant.Runs.Clear();
+        variant.Name += " {";
+        finished = true;
+        if (doubleParameters.Any()) {
+          foreach (var d in doubleEnumerator.Current) {
+            var value = (ValueTypeValue<double>)((IValueParameter)variant.Parameters[d.Key.Name]).Value;
+            value.Value = d.Value;
+            variant.Name += d.Key.Name + "=" + d.Value.ToString() + ", ";
+          }
+          if (finished) {
+            if (doubleEnumerator.MoveNext()) {
+              finished = false;
+            } else {
+              doubleEnumerator = GetDoubleParameterConfigurations().GetEnumerator();
+              doubleEnumerator.MoveNext();
+            }
+          }
+        }
+        if (intParameters.Any()) {
+          foreach (var i in intEnumerator.Current) {
+            var value = (ValueTypeValue<int>)((IValueParameter)variant.Parameters[i.Key.Name]).Value;
+            value.Value = i.Value;
+            variant.Name += i.Key.Name + "=" + i.Value.ToString() + ", ";
+          }
+          if (finished) {
+            if (intEnumerator.MoveNext()) {
+              finished = false;
+            } else {
+              intEnumerator = GetIntParameterConfigurations().GetEnumerator();
+              intEnumerator.MoveNext();
+            }
+          }
+        }
+        if (boolParameters.Any()) {
+          foreach (var b in boolEnumerator.Current) {
+            var value = (ValueTypeValue<bool>)((IValueParameter)variant.Parameters[b.Key.Name]).Value;
+            value.Value = b.Value;
+            variant.Name += b.Key.Name + "=" + b.Value.ToString() + ", ";
+          }
+          if (finished) {
+            if (boolEnumerator.MoveNext()) {
+              finished = false;
+            } else {
+              boolEnumerator = GetBoolParameterConfigurations().GetEnumerator();
+              boolEnumerator.MoveNext();
+            }
+          }
+        }
+        if (multipleChoiceParameters.Any()) {
+          foreach (var m in mcEnumerator.Current) {
+            dynamic variantParam = variant.Parameters[m.Key.Name];
+            if (m.Value == optionalNullChoice) {
+              variantParam.Value = null;
+              variant.Name += m.Key.Name + "=null, ";
+              continue;
+            }
+            var variantEnumerator = ((IEnumerable<object>)variantParam.ValidValues).GetEnumerator();
+            var originalEnumerator = ((IEnumerable<object>)((dynamic)m.Key).ValidValues).GetEnumerator();
+            while (variantEnumerator.MoveNext() && originalEnumerator.MoveNext()) {
+              if (m.Value == (IItem)originalEnumerator.Current) {
+                variantParam.Value = (dynamic)variantEnumerator.Current;
+                if (m.Value is INamedItem)
+                  variant.Name += m.Key.Name + "=" + ((INamedItem)m.Value).Name + ", ";
+                else variant.Name += m.Key.Name + "=" + m.Value.ToString() + ", ";
+                break;
+              }
+            }
+          }
+          if (finished) {
+            if (mcEnumerator.MoveNext()) {
+              finished = false;
+            } else {
+              mcEnumerator = GetMultipleChoiceConfigurations().GetEnumerator();
+              mcEnumerator.MoveNext();
+            }
+          }
+        }
+        variant.Name = variant.Name.Substring(0, variant.Name.Length - 2) + "}";
+        yield return variant;
+      } while (!finished);
+    }
+
+    private void experimentCreationBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) {
+      if (e.ProgressPercentage >= 0 && e.ProgressPercentage <= 100) {
+        experimentCreationProgressBar.Style = ProgressBarStyle.Continuous;
+        experimentCreationProgressBar.Value = e.ProgressPercentage;
+      } else {
+        experimentCreationProgressBar.Style = ProgressBarStyle.Marquee;
+      }
+    }
+
+    private void experimentCreationBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      try {
+        SetMode(DialogMode.Normal);
+        if (e.Error != null) MessageBox.Show(e.Error.Message, "Error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (failedInstances.Length > 0) MessageBox.Show("Some instances could not be loaded: " + Environment.NewLine + failedInstances.ToString(), "Some instances failed to load", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (!e.Cancelled && e.Error == null) {
+          DialogResult = System.Windows.Forms.DialogResult.OK;
+          Close();
+        }
+      } catch { }
+    }
+    #endregion
+    #endregion
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.resx
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.resx	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.resx	(revision 12176)
@@ -0,0 +1,188 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>394, 17</value>
+  </metadata>
+  <metadata name="experimentCreationBackgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>484, 17</value>
+  </metadata>
+  <metadata name="instanceDiscoveryBackgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>271, 17</value>
+  </metadata>
+  <metadata name="warningProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 56</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="warningProvider.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAMAEBAQAAAAAAAoAQAANgAAABAQAAABAAgAaAUAAF4BAAAQEAAAAQAgAGgEAADGBgAAKAAAABAA
+        AAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAgACAAAAAgACAAICA
+        AACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wARERERERERERMAAAAAAAARP7+/v7+/
+        vwE7+/twe/v7AT+/v3B/v78BE/v7+/v78HETv7+wv7+wERE7+zA7+wcRET+/AA+/ARERE/sAC/BxERET
+        vwAPsBERERE78PsHERERET+/vwERERERE/vwcRERERETv7AREREREREzMREREf//AACAAwAAAAEAAAAB
+        AAAAAQAAgAEAAIADAADAAwAAwAcAAOAHAADgDwAA8A8AAPAfAAD4HwAA+D8AAPx/AAAoAAAAEAAAACAA
+        AAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA
+        gADA3MAA8MqmAKo/KgD/PyoAAF8qAFVfKgCqXyoA/18qAAB/KgBVfyoAqn8qAP9/KgAAnyoAVZ8qAKqf
+        KgD/nyoAAL8qAFW/KgCqvyoA/78qAADfKgBV3yoAqt8qAP/fKgAA/yoAVf8qAKr/KgD//yoAAABVAFUA
+        VQCqAFUA/wBVAAAfVQBVH1UAqh9VAP8fVQAAP1UAVT9VAKo/VQD/P1UAAF9VAFVfVQCqX1UA/19VAAB/
+        VQBVf1UAqn9VAP9/VQAAn1UAVZ9VAKqfVQD/n1UAAL9VAFW/VQCqv1UA/79VAADfVQBV31UAqt9VAP/f
+        VQAA/1UAVf9VAKr/VQD//1UAAAB/AFUAfwCqAH8A/wB/AAAffwBVH38Aqh9/AP8ffwAAP38AVT9/AKo/
+        fwD/P38AAF9/AFVffwCqX38A/19/AAB/fwBVf38Aqn9/AP9/fwAAn38AVZ9/AKqffwD/n38AAL9/AFW/
+        fwCqv38A/79/AADffwBV338Aqt9/AP/ffwAA/38AVf9/AKr/fwD//38AAACqAFUAqgCqAKoA/wCqAAAf
+        qgBVH6oAqh+qAP8fqgAAP6oAVT+qAKo/qgD/P6oAAF+qAFVfqgCqX6oA/1+qAAB/qgBVf6oAqn+qAP9/
+        qgAAn6oAVZ+qAKqfqgD/n6oAAL+qAFW/qgCqv6oA/7+qAADfqgBV36oAqt+qAP/fqgAA/6oAVf+qAKr/
+        qgD//6oAAADUAFUA1ACqANQA/wDUAAAf1ABVH9QAqh/UAP8f1AAAP9QAVT/UAKo/1AD/P9QAAF/UAFVf
+        1ACqX9QA/1/UAAB/1ABVf9QAqn/UAP9/1AAAn9QAVZ/UAKqf1AD/n9QAAL/UAFW/1ACqv9QA/7/UAADf
+        1ABV39QAqt/UAP/f1AAA/9QAVf/UAKr/1AD//9QAVQD/AKoA/wAAH/8AVR//AKof/wD/H/8AAD//AFU/
+        /wCqP/8A/z//AABf/wBVX/8Aql//AP9f/wAAf/8AVX//AKp//wD/f/8AAJ//AFWf/wCqn/8A/5//AAC/
+        /wBVv/8Aqr//AP+//wAA3/8AVd//AKrf/wD/3/8AVf//AKr//wD/zMwA/8z/AP//MwD//2YA//+ZAP//
+        zAAAfwAAVX8AAKp/AAD/fwAAAJ8AAFWfAACqnwAA/58AAAC/AABVvwAAqr8AAP+/AAAA3wAAVd8AAKrf
+        AAD/3wAAVf8AAKr/AAAAACoAVQAqAKoAKgD/ACoAAB8qAFUfKgCqHyoA/x8qAAA/KgBVPyoA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAAAAAAD//wAA////AP2pfHx4A3x8A3wDeAN8fH39gKioqKiofFWl
+        qKioqKh8/anO+87OzvQEVc7Oys6off3QztLOzs6ALIDOys7OfIH9/anS0vvOzs7Ozs7PrAP9/f3Qz9LS
+        +6wtrM7OznyB/f39/anS0vuo8azO+84D/f39/f3Qz9LShe2p+/uAff39/f39/anT0gMEA/vOA/39/f39
+        /f3Qz9Ix7S37gH39/f39/f39/a3SgfFZ+wP9/f39/f39/f3Qz9Ks+4R9/f39/f39/f39/ajS0vt8/f39
+        /f39/f39/f3QztKoA/39/f39/f39/f39/anLqf39/f39/f39/f39/f39/f39/f39/f2AAAAAgAAAAIAA
+        AACAAAAAwAEAAMABAADgAwAA4AMAAPAHAADwBwAA+A8AAPgPAAD8HwAA/B8AAP4/AAD//wAAKAAAABAA
+        AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEpAoFm7+bBHqX/AR1kv0EdZL9BHWR/QR1
+        kv0EeZX9A3mV/QN3k/0DdZH9BHWR/QR1kv0EdZL9A3iU/Qt3k+AEf5szB5S19wu84v8Gw+j/Arvk/wK4
+        4v8Bwuf/Aoun/0Zkev82rM//Abzj/wG03P8Btd//Arri/wG+6P8LiaryAm+LIASkzcob3Pf/GvP//wba
+        //8D2v//AOb3/wE1Ov9eAAD/YWRz/wDo//8Azfr/Ac73/xHk/P8CweX/FmR60gAAAAAAueJXGc7q+Tn/
+        /v8c8v//B+D//wPs/v8ElqP/B01P/wehsv8A5v//AM76/wza9f8V7f3/A4ak/RBnfq0AAAAAAM70Dwq+
+        4MBK8/f/Rv///xjz//8F6f//AvP//wnO5v8A7f//ANz//wLU+f8Z7/r/Cc/l/wVyjfcMa4MQAAAAAAAA
+        AAAAxOlZNtXp+W7///9A////D/3//wrQ1f8sSWD/Btnn/wDm//8N4vn/FPD8/wKMqP4MaYKuAAAAAAAA
+        AAAAAAAAANL0DhO+38Zz9vr/bv///yb///8VwsT/Xh8s/xHU3f8A8P//FfD6/wbX7P8Eco36IlVpKAAA
+        AAAAAAAAAAAAAAAAAAAAt95kTNrs/43///9F////HrK6/4EPIP8ixNH/BPz//xf3/f8Cl7L8C2qDyAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAKvWDhm83s+C+v7/af///zGGi/9gAAL/J4ua/w////8L6fX/BXOO+hle
+        cz4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAstpqTd/y/33///88Y2H/TQAA/ztKVP8S////Aqy//wdu
+        idkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHgGhfF5NRw/f//TqKg/ysfIf8wi47/Dv///wN4
+        k/kWYHZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwuFyPt7v/VX//v8d4OL/Hf79/gW4
+        xfsEco3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALncDw7A39dB/P7/Sf///xn/
+        //8FeJL5BWyIZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtZtJOLw/1H2
+        +P8MxNT9BXCL6yhQYAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKrUGzTH
+        4vk5zeb/BqK6yQlshl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8AAB8fAAAA3iAAHx9gACoqMAB
+        qHzAAaio4AOofOADzvvwB8708AfOzvgPqH34D87S/A/OgPwfzsr//3yB
+</value>
+  </data>
+</root>
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/FileManager.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/FileManager.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/FileManager.cs	(revision 12176)
@@ -0,0 +1,170 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.IO;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Optimizer {
+  internal static class FileManager {
+    private static NewItemDialog newItemDialog;
+    private static OpenFileDialog openFileDialog;
+    private static SaveFileDialog saveFileDialog;
+
+    static FileManager() {
+      newItemDialog = null;
+      openFileDialog = null;
+      saveFileDialog = null;
+    }
+
+    public static void New() {
+      if (newItemDialog == null) newItemDialog = new NewItemDialog();
+      if (newItemDialog.ShowDialog() == DialogResult.OK) {
+        IView view = MainFormManager.MainForm.ShowContent(newItemDialog.Item);
+        if (view == null)
+          ErrorHandling.ShowErrorDialog("There is no view for the new item. It cannot be displayed.", new InvalidOperationException("No View Available"));
+      }
+    }
+
+    public static void Open() {
+      if (openFileDialog == null) {
+        openFileDialog = new OpenFileDialog();
+        openFileDialog.Title = "Open Item";
+        openFileDialog.FileName = "Item";
+        openFileDialog.Multiselect = true;
+        openFileDialog.DefaultExt = "hl";
+        openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      }
+
+      if (openFileDialog.ShowDialog() == DialogResult.OK) {
+        OpenFiles(openFileDialog.FileNames);
+      }
+    }
+
+    public static void OpenFiles(IEnumerable<string> fileNames) {
+      foreach (string filename in fileNames) {
+        ((MainForm.WindowsForms.MainForm)MainFormManager.MainForm).SetAppStartingCursor();
+        ContentManager.LoadAsync(filename, LoadingCompleted);
+      }
+    }
+
+    private static void LoadingCompleted(IStorableContent content, Exception error) {
+      try {
+        if (error != null) throw error;
+        IView view = MainFormManager.MainForm.ShowContent(content);
+        if (view == null)
+          ErrorHandling.ShowErrorDialog("There is no view for the loaded item. It cannot be displayed.", new InvalidOperationException("No View Available"));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog((Control)MainFormManager.MainForm, "Cannot open file.", ex);
+      }
+      finally {
+        ((MainForm.WindowsForms.MainForm)MainFormManager.MainForm).ResetAppStartingCursor();
+      }
+    }
+
+    public static void Save() {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      if (activeView != null) {
+        Save(activeView);
+      }
+    }
+    private static void Save(IContentView view) {
+      IStorableContent content = view.Content as IStorableContent;
+      if (!view.Locked && content != null) {
+        if (string.IsNullOrEmpty(content.Filename))
+          SaveAs(view);
+        else {
+          MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().SetAppStartingCursor();
+          SetSaveOperationProgressInContentViews(content, true);
+          ContentManager.SaveAsync(content, content.Filename, true, SavingCompleted);
+        }
+      }
+    }
+    public static void SaveAs() {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      if (activeView != null) {
+        SaveAs(activeView);
+      }
+    }
+    public static void SaveAs(IContentView view) {
+      IStorableContent content = view.Content as IStorableContent;
+      if (!view.Locked && content != null) {
+        if (saveFileDialog == null) {
+          saveFileDialog = new SaveFileDialog();
+          saveFileDialog.Title = "Save Item";
+          saveFileDialog.DefaultExt = "hl";
+          saveFileDialog.Filter = "Uncompressed HeuristicLab Files|*.hl|HeuristicLab Files|*.hl|All Files|*.*";
+          saveFileDialog.FilterIndex = 2;
+        }
+
+        INamedItem namedItem = content as INamedItem;
+        string suggestedFileName = string.Empty;
+        if (!string.IsNullOrEmpty(content.Filename)) suggestedFileName = content.Filename;
+        else if (namedItem != null) suggestedFileName = namedItem.Name;
+        else suggestedFileName = "Item";
+
+        saveFileDialog.FileName = suggestedFileName;
+
+        if (saveFileDialog.ShowDialog() == DialogResult.OK) {
+          MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().SetAppStartingCursor();
+          SetSaveOperationProgressInContentViews(content, true, saveFileDialog.FileName);
+          if (saveFileDialog.FilterIndex == 1) {
+            ContentManager.SaveAsync(content, saveFileDialog.FileName, false, SavingCompleted);
+          } else {
+            ContentManager.SaveAsync(content, saveFileDialog.FileName, true, SavingCompleted);
+          }
+        }
+      }
+    }
+    private static void SavingCompleted(IStorableContent content, Exception error) {
+      try {
+        if (error != null) throw error;
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().UpdateTitle();
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog((Control)MainFormManager.MainForm, "Cannot save file.", ex);
+      }
+      finally {
+        SetSaveOperationProgressInContentViews(content, false);
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().ResetAppStartingCursor();
+      }
+    }
+
+    private static void SetSaveOperationProgressInContentViews(IStorableContent content, bool showProgress, string fileName = null) {
+      HeuristicLab.MainForm.WindowsForms.MainForm mainForm = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>();
+      #region Mono Compatibility
+      // removed the InvokeRequired check because of Mono
+      mainForm.Invoke((Action)delegate {
+        if (showProgress) {
+          mainForm.AddOperationProgressToContent(content, string.Format("Saving to file \"{0}\"...", Path.GetFileName(fileName ?? content.Filename)));
+        } else
+          mainForm.RemoveOperationProgressFromContent(content);
+      });
+      #endregion
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 12176)
@@ -0,0 +1,370 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C664305E-497C-4533-A140-967DEDB05C19}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Optimizer</RootNamespace>
+    <AssemblyName>HeuristicLab.Optimizer-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="CreateExperimentDialog.resx">
+      <DependentUpon>CreateExperimentDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Documents\GA_VRP.hl" />
+    <EmbeddedResource Include="Documents\SGP_SymbClass.hl" />
+    <EmbeddedResource Include="Documents\SGP_SymbReg.hl" />
+    <EmbeddedResource Include="Documents\VNS_TSP.hl" />
+    <EmbeddedResource Include="Documents\PSO_Schwefel.hl" />
+    <EmbeddedResource Include="Documents\SS_VRP.hl" />
+    <EmbeddedResource Include="Documents\RAPGA_JSSP.hl" />
+    <EmbeddedResource Include="Documents\GPR.hl" />
+    <EmbeddedResource Include="Documents\TS_VRP.hl" />
+    <EmbeddedResource Include="Documents\GE_ArtificialAnt.hl" />
+    <EmbeddedResource Include="Documents\GE_SymbReg.hl" />
+    <EmbeddedResource Include="Documents\GA_QAP_Script.hl" />
+    <EmbeddedResource Include="Documents\GUI_Automation_Script.hl" />
+    <EmbeddedResource Include="Documents\OSGA_Rastrigin_Script.hl" />
+    <EmbeddedResource Include="Documents\GP_Multiplexer.hl" />
+    <EmbeddedResource Include="Documents\OSGP_TimeSeries.hl" />
+    <EmbeddedResource Include="Documents\GridSearch_RF_Classification_Script.hl" />
+    <EmbeddedResource Include="Documents\GridSearch_RF_Regression_Script.hl" />
+    <EmbeddedResource Include="Documents\GridSearch_SVM_Classification_Script.hl" />
+    <EmbeddedResource Include="Documents\GridSearch_SVM_Regression_Script.hl" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="OptimizerSingleDocumentMainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="OptimizerSingleDocumentMainForm.Designer.cs">
+      <DependentUpon>OptimizerSingleDocumentMainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MainFormTypeSelectionDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainFormTypeSelectionDialog.Designer.cs">
+      <DependentUpon>MainFormTypeSelectionDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MenuItems\ChangeMainFormTypeMenuItem.cs" />
+    <Compile Include="MenuItems\ChangeMainFormTypeSeperator.cs" />
+    <Compile Include="OptimizerMultipleDocumentMainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="OptimizerMultipleDocumentMainForm.Designer.cs">
+      <DependentUpon>OptimizerMultipleDocumentMainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CreateExperimentDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="CreateExperimentDialog.Designer.cs">
+      <DependentUpon>CreateExperimentDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FileManager.cs" />
+    <Compile Include="MenuItems\ClipboardMenuItem.cs" />
+    <Compile Include="MenuItems\AboutMenuItem.cs" />
+    <Compile Include="MenuItems\ConvertIntoUserDefinedAlgorithmMenuItem.cs" />
+    <Compile Include="MenuItems\UsernamePasswordMenuItem.cs" />
+    <Compile Include="MenuItems\CreateExperimentMenuItem.cs" />
+    <Compile Include="MenuItems\CopyToClipboardMenuItem.cs" />
+    <Compile Include="MenuItems\StartPageMenuItem.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="StartPage.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StartPage.Designer.cs">
+      <DependentUpon>StartPage.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MenuItems\CloseMenuItem.cs" />
+    <Compile Include="MenuItems\CloseAllMenuItem.cs" />
+    <Compile Include="MenuItems\OperatorsMenuItem.cs" />
+    <Compile Include="MenuItems\SaveAsMenuItem.cs" />
+    <Compile Include="MenuItems\SaveMenuItem.cs" />
+    <Compile Include="MenuItems\OpenMenuItem.cs" />
+    <Compile Include="MenuItems\ExitMenuItem.cs" />
+    <Compile Include="IOptimizerUserInterfaceItemProvider.cs" />
+    <Compile Include="MenuItems\NewMenuItem.cs" />
+    <Compile Include="MenuItems\Separators.cs" />
+    <Compile Include="NewItemDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="NewItemDialog.Designer.cs">
+      <DependentUpon>NewItemDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OptimizerDockingMainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="OptimizerDockingMainForm.Designer.cs">
+      <DependentUpon>OptimizerDockingMainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ToolBarItems\SaveToolBarItem.cs" />
+    <Compile Include="ToolBarItems\OpenToolBarItem.cs" />
+    <Compile Include="ToolBarItems\NewToolBarItem.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <EmbeddedResource Include="Documents\FirstSteps.rtf" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Access\3.3\HeuristicLab.Clients.Access-3.3.csproj">
+      <Project>{494F87F4-0F25-4D33-A382-10CDB2174D48}</Project>
+      <Name>HeuristicLab.Clients.Access-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Common\3.3\HeuristicLab.Clients.Common-3.3.csproj">
+      <Project>{730A9104-D4D1-4360-966B-E49B7571DDA3}</Project>
+      <Name>HeuristicLab.Clients.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104A0B-90E7-42F3-9ABE-9BBBADD4B943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+      <Private>False</Private>
+    </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>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
+      <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
+      <Name>HeuristicLab.Problems.Instances-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Documents\GA_TSP.hl" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Documents\ES_Griewank.hl" />
+    <None Include="Documents\Images\New.png" />
+    <None Include="Documents\Images\Open.png" />
+    <None Include="Documents\Images\Pause.png" />
+    <None Include="Documents\Images\Play.png" />
+    <None Include="Documents\Images\Restart.png" />
+    <None Include="Documents\Images\Stop.png" />
+    <EmbeddedResource Include="Documents\LS_Knapsack.hl" />
+    <EmbeddedResource Include="Documents\IslandGA_TSP.hl" />
+    <EmbeddedResource Include="Documents\SA_Rastrigin.hl" />
+    <EmbeddedResource Include="Documents\TS_TSP.hl" />
+    <EmbeddedResource Include="Documents\SGP_SantaFe.hl" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/IOptimizerUserInterfaceItemProvider.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/IOptimizerUserInterfaceItemProvider.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/IOptimizerUserInterfaceItemProvider.cs	(revision 12176)
@@ -0,0 +1,24 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  public interface IOptimizerUserInterfaceItemProvider { }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.Designer.cs	(revision 12176)
@@ -0,0 +1,184 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class MainFormTypeSelectionDialog {
+    /// <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.cancelButton = new System.Windows.Forms.Button();
+      this.okButton = new System.Windows.Forms.Button();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.rbSingleDocumentMainForm = new System.Windows.Forms.RadioButton();
+      this.rbMultipleDocumentMainForm = new System.Windows.Forms.RadioButton();
+      this.rbDockingMainForm = new System.Windows.Forms.RadioButton();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.labelRestart = new System.Windows.Forms.Label();
+      this.groupBox.SuspendLayout();
+      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(173, 167);
+      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.Location = new System.Drawing.Point(92, 167);
+      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;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // groupBox
+      // 
+      this.groupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBox.Controls.Add(this.rbSingleDocumentMainForm);
+      this.groupBox.Controls.Add(this.rbMultipleDocumentMainForm);
+      this.groupBox.Controls.Add(this.rbDockingMainForm);
+      this.groupBox.Location = new System.Drawing.Point(12, 12);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(234, 93);
+      this.groupBox.TabIndex = 10;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "MainForm Types";
+      // 
+      // rbSingleDocumentMainForm
+      // 
+      this.rbSingleDocumentMainForm.AutoSize = true;
+      this.rbSingleDocumentMainForm.Location = new System.Drawing.Point(6, 65);
+      this.rbSingleDocumentMainForm.Name = "rbSingleDocumentMainForm";
+      this.rbSingleDocumentMainForm.Size = new System.Drawing.Size(106, 17);
+      this.rbSingleDocumentMainForm.TabIndex = 2;
+      this.rbSingleDocumentMainForm.TabStop = true;
+      this.rbSingleDocumentMainForm.Text = "&Single Document";
+      this.toolTip.SetToolTip(this.rbSingleDocumentMainForm, "Creates for each open document an own window");
+      this.rbSingleDocumentMainForm.UseVisualStyleBackColor = true;
+      // 
+      // rbMultipleDocumentMainForm
+      // 
+      this.rbMultipleDocumentMainForm.AutoSize = true;
+      this.rbMultipleDocumentMainForm.Location = new System.Drawing.Point(6, 42);
+      this.rbMultipleDocumentMainForm.Name = "rbMultipleDocumentMainForm";
+      this.rbMultipleDocumentMainForm.Size = new System.Drawing.Size(113, 17);
+      this.rbMultipleDocumentMainForm.TabIndex = 1;
+      this.rbMultipleDocumentMainForm.TabStop = true;
+      this.rbMultipleDocumentMainForm.Text = "&Multiple Document";
+      this.toolTip.SetToolTip(this.rbMultipleDocumentMainForm, "Shows for each open document an own, nested window");
+      this.rbMultipleDocumentMainForm.UseVisualStyleBackColor = true;
+      // 
+      // rbDockingMainForm
+      // 
+      this.rbDockingMainForm.AutoSize = true;
+      this.rbDockingMainForm.Location = new System.Drawing.Point(6, 19);
+      this.rbDockingMainForm.Name = "rbDockingMainForm";
+      this.rbDockingMainForm.Size = new System.Drawing.Size(65, 17);
+      this.rbDockingMainForm.TabIndex = 0;
+      this.rbDockingMainForm.TabStop = true;
+      this.rbDockingMainForm.Text = "&Docking";
+      this.toolTip.SetToolTip(this.rbDockingMainForm, "Displays open documents as tab pages. \r\nIf you have resizing issues in the user i" +
+              "nterface, please try the other options.");
+      this.rbDockingMainForm.UseVisualStyleBackColor = true;
+      // 
+      // labelRestart
+      // 
+      this.labelRestart.AutoSize = true;
+      this.labelRestart.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.labelRestart.ForeColor = System.Drawing.Color.Red;
+      this.labelRestart.Location = new System.Drawing.Point(9, 123);
+      this.labelRestart.Name = "labelRestart";
+      this.labelRestart.Size = new System.Drawing.Size(241, 26);
+      this.labelRestart.TabIndex = 11;
+      this.labelRestart.Text = "Please note that you have to restart the \r\nOptimizer for the changes to take effe" +
+          "ct. ";
+      // 
+      // MainFormTypeSelectionDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(260, 202);
+      this.Controls.Add(this.labelRestart);
+      this.Controls.Add(this.groupBox);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "MainFormTypeSelectionDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Change MainForm Type";
+      this.Load += new System.EventHandler(this.MainFormTypeSelectionDialog_Load);
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.RadioButton rbMultipleDocumentMainForm;
+    private System.Windows.Forms.RadioButton rbDockingMainForm;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.RadioButton rbSingleDocumentMainForm;
+    private System.Windows.Forms.Label labelRestart;
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MainFormTypeSelectionDialog.cs	(revision 12176)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 HeuristicLab.Optimizer.Properties;
+
+namespace HeuristicLab.Optimizer {
+  public enum OptimizerMainFormTypes {
+    DockingMainForm,
+    MultipleDocumentMainForm,
+    SingleDocumentMainForm
+  }
+
+  public partial class MainFormTypeSelectionDialog : Form {
+    public MainFormTypeSelectionDialog() {
+      InitializeComponent();
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      if (rbDockingMainForm.Checked) {
+        Settings.Default.MainFormType = OptimizerMainFormTypes.DockingMainForm;
+      } else if (rbMultipleDocumentMainForm.Checked) {
+        Settings.Default.MainFormType = OptimizerMainFormTypes.MultipleDocumentMainForm;
+      } else if (rbSingleDocumentMainForm.Checked) {
+        Settings.Default.MainFormType = OptimizerMainFormTypes.SingleDocumentMainForm;
+      }
+      Settings.Default.Save();
+    }
+
+    private void MainFormTypeSelectionDialog_Load(object sender, EventArgs e) {
+      if (Settings.Default.MainFormType == OptimizerMainFormTypes.DockingMainForm) {
+        rbDockingMainForm.Checked = true;
+      } else if (Settings.Default.MainFormType == OptimizerMainFormTypes.MultipleDocumentMainForm) {
+        rbMultipleDocumentMainForm.Checked = true;
+      } else if (Settings.Default.MainFormType == OptimizerMainFormTypes.SingleDocumentMainForm) {
+        rbSingleDocumentMainForm.Checked = true;
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/AboutMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/AboutMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/AboutMenuItem.cs	(revision 12176)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure.Starter;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class AboutMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    private AboutDialog aboutDialog;
+
+    public override string Name {
+      get { return "&About..."; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Help" }; }
+    }
+    public override int Position {
+      get { return 9100; }
+    }
+
+    public override void Execute() {
+      if (aboutDialog == null)
+        aboutDialog = new AboutDialog();
+      aboutDialog.ShowDialog((IWin32Window)MainFormManager.MainForm);
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ChangeMainFormTypeMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ChangeMainFormTypeMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ChangeMainFormTypeMenuItem.cs	(revision 12176)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class ChangeMainFormTypeMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Change &MainForm Type..."; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&View" }; }
+    }
+    public override int Position {
+      get { return 3500; }
+    }
+    public override string ToolTipText {
+      get { return "Change the MainForm type of the HeuristicLab Optimizer"; }
+    }
+
+    public override void Execute() {
+      using (MainFormTypeSelectionDialog dialog = new MainFormTypeSelectionDialog()) {
+        dialog.ShowDialog((IWin32Window)MainFormManager.MainForm);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ChangeMainFormTypeSeperator.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ChangeMainFormTypeSeperator.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ChangeMainFormTypeSeperator.cs	(revision 12176)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class ChangeMainFormTypeSeperator : MenuSeparatorItem, IOptimizerUserInterfaceItemProvider {
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&View" }; }
+    }
+
+    public override int Position {
+      get { return 3400; }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ClipboardMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ClipboardMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ClipboardMenuItem.cs	(revision 12176)
@@ -0,0 +1,88 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class ClipboardMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    private ToolStripMenuItem menuItem;
+
+    public override string Name {
+      get { return "&Clipboard"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&View" }; }
+    }
+    public override int Position {
+      get { return 3200; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      MainFormManager.MainForm.ViewShown += new EventHandler<ViewShownEventArgs>(MainForm_ViewShown);
+      MainFormManager.MainForm.ViewHidden += new EventHandler<ViewEventArgs>(MainForm_ViewHidden);
+
+      menuItem = ToolStripItem as ToolStripMenuItem;
+      if (menuItem != null) {
+        menuItem.CheckOnClick = true;
+        menuItem.Checked = Properties.Settings.Default.ShowClipboard;
+      }
+    }
+
+    private void MainForm_ViewShown(object sender, ViewShownEventArgs e) {
+      if ((e.View is Clipboard<IItem>) && (menuItem != null)) {
+        menuItem.Checked = true;
+        Properties.Settings.Default.ShowClipboard = true;
+        Properties.Settings.Default.Save();
+      }
+    }
+    private void MainForm_ViewHidden(object sender, ViewEventArgs e) {
+      if ((e.View is Clipboard<IItem>) && (menuItem != null)) {
+        menuItem.Checked = false;
+        Properties.Settings.Default.ShowClipboard = false;
+        Properties.Settings.Default.Save();
+      }
+    }
+
+    public override void Execute() {
+      IView clipboard = null;
+      if (MainFormManager.MainForm is OptimizerDockingMainForm) {
+        clipboard = ((OptimizerDockingMainForm)MainFormManager.MainForm).Clipboard;
+      } else if (MainFormManager.MainForm is OptimizerMultipleDocumentMainForm) {
+        clipboard = ((OptimizerMultipleDocumentMainForm)MainFormManager.MainForm).Clipboard;
+      } else if (MainFormManager.MainForm is OptimizerSingleDocumentMainForm) {
+        clipboard = ((OptimizerSingleDocumentMainForm)MainFormManager.MainForm).Clipboard;
+      }
+
+      if (clipboard != null) {
+        if (clipboard.IsShown) {
+          clipboard.Hide();
+        } else {
+          clipboard.Show();
+        }
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CloseAllMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CloseAllMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CloseAllMenuItem.cs	(revision 12176)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class CloseAllMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Clos&e All"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override int Position {
+      get { return 1600; }
+    }
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.Shift | Keys.W; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = MainFormManager.MainForm.Views.Any<IView>(v => v.IsShown && !(v is Sidebar));
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      ToolStripItem.Enabled = MainFormManager.MainForm.Views.Any<IView>(v => v.IsShown && !(v is Sidebar));
+    }
+
+    public override void Execute() {
+      var views = MainFormManager.MainForm.Views.Where(x => !(x is Sidebar)).ToArray();
+      foreach (IView view in views)
+        view.Close();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CloseMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CloseMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CloseMenuItem.cs	(revision 12176)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class CloseMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Close"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override int Position {
+      get { return 1500; }
+    }
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.W; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = (MainFormManager.MainForm.ActiveView != null) && !(MainFormManager.MainForm.ActiveView is Sidebar);
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      ToolStripItem.Enabled = (MainFormManager.MainForm.ActiveView != null) && !(MainFormManager.MainForm.ActiveView is Sidebar);
+    }
+
+    public override void Execute() {
+      IView view = MainFormManager.MainForm.ActiveView;
+      if (!(view is Sidebar))
+        view.Close();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ConvertIntoUserDefinedAlgorithmMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ConvertIntoUserDefinedAlgorithmMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ConvertIntoUserDefinedAlgorithmMenuItem.cs	(revision 12176)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class ConvertIntoUserDefinedAlgorithmMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Convert into &User-Defined Algorithm"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Edit" }; }
+    }
+    public override int Position {
+      get { return 2200; }
+    }
+    public override string ToolTipText {
+      get { return "Convert the shown algorithm into a user-defined algorithm"; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && (activeView.Content is EngineAlgorithm) && !(activeView.Content is UserDefinedAlgorithm) && !activeView.Locked;
+    }
+
+    public override void Execute() {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      if ((activeView != null) && (activeView.Content != null) && (activeView.Content is EngineAlgorithm) && !activeView.Locked) {
+        IAlgorithm alg = ((EngineAlgorithm)activeView.Content).CreateUserDefinedAlgorithm();
+        MainFormManager.MainForm.ShowContent(alg);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CopyToClipboardMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CopyToClipboardMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CopyToClipboardMenuItem.cs	(revision 12176)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class CopyToClipboardMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Copy To Clipboard"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Edit" }; }
+    }
+    public override int Position {
+      get { return 2100; }
+    }
+    public override string ToolTipText {
+      get { return "Copy the shown content into the HeuristicLab Optimizer clipboard"; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && (activeView.Content is IItem) && !activeView.Locked;
+    }
+
+    public override void Execute() {
+      Clipboard<IItem> clipboard = null;
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+
+      if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IItem) && !activeView.Locked) {
+        if (MainFormManager.MainForm is OptimizerDockingMainForm) {
+          clipboard = ((OptimizerDockingMainForm)MainFormManager.MainForm).Clipboard;
+        } else if (MainFormManager.MainForm is OptimizerMultipleDocumentMainForm) {
+          clipboard = ((OptimizerMultipleDocumentMainForm)MainFormManager.MainForm).Clipboard;
+        } else if (MainFormManager.MainForm is OptimizerSingleDocumentMainForm) {
+          clipboard = ((OptimizerSingleDocumentMainForm)MainFormManager.MainForm).Clipboard;
+        }
+
+        if (clipboard != null) {
+          IItem content = (IItem)activeView.Content;
+          clipboard.AddItem((IItem)content.Clone());
+        }
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CreateExperimentMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CreateExperimentMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/CreateExperimentMenuItem.cs	(revision 12176)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class CreateExperimentMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Create &Experiment"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Edit" }; }
+    }
+    public override int Position {
+      get { return 2300; }
+    }
+    public override string ToolTipText {
+      get { return "Create an experiment for the shown optimizer"; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && (activeView.Content is IOptimizer) && !activeView.Locked;
+    }
+
+    public override void Execute() {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IOptimizer) && !activeView.Locked) {
+        using (CreateExperimentDialog dialog = new CreateExperimentDialog((IOptimizer)activeView.Content)) {
+          if (dialog.ShowDialog() == DialogResult.OK) MainFormManager.MainForm.ShowContent(dialog.Experiment);
+        }
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ExitMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ExitMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/ExitMenuItem.cs	(revision 12176)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class ExitMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override string Name {
+      get { return "E&xit"; }
+    }
+    public override int Position {
+      get { return 1999; }
+    }
+
+    public override void Execute() {
+      MainFormManager.MainForm.Close();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/NewMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/NewMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/NewMenuItem.cs	(revision 12176)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class NewMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&New..."; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override int Position {
+      get { return 1100; }
+    }
+    public override Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.NewDocument; }
+    }
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.N; }
+    }
+
+    public override void Execute() {
+      FileManager.New();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/OpenMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/OpenMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/OpenMenuItem.cs	(revision 12176)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class OpenMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Open..."; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override int Position {
+      get { return 1200; }
+    }
+    public override Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Open; }
+    }
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.O; }
+    }
+
+    public override void Execute() {
+      FileManager.Open();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/OperatorsMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/OperatorsMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/OperatorsMenuItem.cs	(revision 12176)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class OperatorsMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    private ToolStripMenuItem menuItem;
+
+    public override string Name {
+      get { return "&Operators"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&View" }; }
+    }
+    public override int Position {
+      get { return 3300; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      MainFormManager.MainForm.ViewShown += new EventHandler<ViewShownEventArgs>(MainForm_ViewShown);
+      MainFormManager.MainForm.ViewHidden += new EventHandler<ViewEventArgs>(MainForm_ViewHidden);
+
+      menuItem = ToolStripItem as ToolStripMenuItem;
+      if (menuItem != null) {
+        menuItem.CheckOnClick = true;
+        menuItem.Checked = Properties.Settings.Default.ShowOperatorsSidebar;
+      }
+    }
+
+    private void MainForm_ViewShown(object sender, ViewShownEventArgs e) {
+      if ((e.View is OperatorsSidebar) && (menuItem != null)) {
+        menuItem.Checked = true;
+        Properties.Settings.Default.ShowOperatorsSidebar = true;
+        Properties.Settings.Default.Save();
+      }
+    }
+    private void MainForm_ViewHidden(object sender, ViewEventArgs e) {
+      if ((e.View is OperatorsSidebar) && (menuItem != null)) {
+        menuItem.Checked = false;
+        Properties.Settings.Default.ShowOperatorsSidebar = false;
+        Properties.Settings.Default.Save();
+      }
+    }
+
+    public override void Execute() {
+      var view = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
+      if (view == null) {
+        OperatorsSidebar operatorsSidebar = new OperatorsSidebar();
+        operatorsSidebar.Dock = DockStyle.Left;
+        operatorsSidebar.Show();
+        operatorsSidebar.Collapsed = Properties.Settings.Default.CollapseOperatorsSidebar;
+      } else if (view.IsShown) {
+        view.Hide();
+      } else {
+        view.Show();
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/SaveAsMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/SaveAsMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/SaveAsMenuItem.cs	(revision 12176)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class SaveAsMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Save &As..."; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override int Position {
+      get { return 1400; }
+    }
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.Shift | Keys.S; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) &&
+                              (activeView.Content is IStorableContent) && !activeView.Locked && activeView.Enabled;
+    }
+
+    public override void Execute() {
+      FileManager.SaveAs();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/SaveMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/SaveMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/SaveMenuItem.cs	(revision 12176)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class SaveMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Save"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+    public override int Position {
+      get { return 1300; }
+    }
+    public override Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Save; }
+    }
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.S; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) &&
+                              (activeView.Content is IStorableContent) && !activeView.Locked && activeView.Enabled;
+    }
+
+    public override void Execute() {
+      FileManager.Save();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/Separators.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/Separators.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/Separators.cs	(revision 12176)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class SeparatorMenuItem : MenuSeparatorItem, IOptimizerUserInterfaceItemProvider {
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&File" }; }
+    }
+
+    public override int Position {
+      get { return 1998; }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/StartPageMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/StartPageMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/StartPageMenuItem.cs	(revision 12176)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class StartPageMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    private ToolStripMenuItem menuItem;
+
+    public override string Name {
+      get { return "&Start Page"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&View" }; }
+    }
+    public override int Position {
+      get { return 3100; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      MainFormManager.MainForm.ViewShown += new EventHandler<ViewShownEventArgs>(MainForm_ViewShown);
+      MainFormManager.MainForm.ViewHidden += new EventHandler<ViewEventArgs>(MainForm_ViewHidden);
+
+      menuItem = ToolStripItem as ToolStripMenuItem;
+      if (menuItem != null) {
+        menuItem.CheckOnClick = true;
+        menuItem.Checked = Properties.Settings.Default.ShowStartPage;
+      }
+    }
+
+    private void MainForm_ViewShown(object sender, ViewShownEventArgs e) {
+      if ((e.View is StartPage) && (menuItem != null))
+        menuItem.Checked = true;
+    }
+    private void MainForm_ViewHidden(object sender, ViewEventArgs e) {
+      if ((e.View is StartPage) && (menuItem != null))
+        menuItem.Checked = false;
+    }
+
+    public override void Execute() {
+      var view = MainFormManager.MainForm.Views.OfType<StartPage>().FirstOrDefault();
+      if (view == null) {
+        view = new StartPage();
+        view.Show();
+      } else if (view.IsShown) {
+        view.Hide();
+      } else {
+        view.Show();
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/UsernamePasswordMenuItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/UsernamePasswordMenuItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/MenuItems/UsernamePasswordMenuItem.cs	(revision 12176)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer.MenuItems {
+  internal class UserNamePasswordMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Set &Username / Password..."; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Services" }; }
+    }
+    public override int Position {
+      get { return 4100; }
+    }
+    public override string ToolTipText {
+      get { return "Set username and password for accessing HeuristicLab services"; }
+    }
+
+    public override void Execute() {
+      using (PasswordDialog dialog = new PasswordDialog()) {
+        dialog.ShowDialog((IWin32Window)MainFormManager.MainForm);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/NewItemDialog.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/NewItemDialog.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/NewItemDialog.Designer.cs	(revision 12176)
@@ -0,0 +1,153 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class NewItemDialog {
+    /// <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.itemsListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.descriptioncolumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.versionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      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.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(456, 409);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 2;
+      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(537, 409);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 3;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // itemsListView
+      // 
+      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.nameColumnHeader,
+            this.versionColumnHeader,
+            this.descriptioncolumnHeader});
+      this.itemsListView.FullRowSelect = true;
+      this.itemsListView.HideSelection = false;
+      this.itemsListView.Location = new System.Drawing.Point(12, 12);
+      this.itemsListView.MultiSelect = false;
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.Size = new System.Drawing.Size(600, 391);
+      this.itemsListView.TabIndex = 1;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemTypesListView_SelectedIndexChanged);
+      this.itemsListView.DoubleClick += new System.EventHandler(this.itemTypesListView_DoubleClick);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.DisplayIndex = 0;
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 91;
+      // 
+      // descriptioncolumnHeader
+      // 
+      this.descriptioncolumnHeader.DisplayIndex = 2;
+      this.descriptioncolumnHeader.Text = "Description";
+      this.descriptioncolumnHeader.Width = 190;
+      // 
+      // versionColumnHeader
+      // 
+      this.versionColumnHeader.DisplayIndex = 1;
+      this.versionColumnHeader.Text = "Version";
+      // 
+      // NewItemDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(624, 444);
+      this.Controls.Add(this.itemsListView);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "NewItemDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "New Item";
+      this.TopMost = true;
+      this.Load += new System.EventHandler(this.NewItemDialog_Load);
+      this.Shown += new System.EventHandler(this.NewItemDialog_Shown);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.ListView itemsListView;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader descriptioncolumnHeader;
+    private System.Windows.Forms.ColumnHeader versionColumnHeader;
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/NewItemDialog.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/NewItemDialog.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/NewItemDialog.cs	(revision 12176)
@@ -0,0 +1,101 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Optimizer {
+  internal partial class NewItemDialog : Form {
+    private bool initialized;
+
+    private IItem item;
+    public IItem Item {
+      get { return item; }
+    }
+
+    public NewItemDialog() {
+      initialized = false;
+      item = null;
+      InitializeComponent();
+    }
+
+    private void NewItemDialog_Load(object sender, EventArgs e) {
+      if (!initialized) {
+        var categories = from t in ApplicationManager.Manager.GetTypes(typeof(IItem))
+                         where CreatableAttribute.IsCreatable(t)
+                         orderby CreatableAttribute.GetCategory(t), ItemAttribute.GetName(t), ItemAttribute.GetVersion(t) ascending
+                         group t by CreatableAttribute.GetCategory(t) into c
+                         select c;
+
+        itemsListView.SmallImageList = new ImageList();
+        itemsListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Class);  // default icon
+        foreach (var category in categories) {
+          ListViewGroup group = new ListViewGroup(category.Key);
+          itemsListView.Groups.Add(group);
+          foreach (var creatable in category) {
+            string name = ItemAttribute.GetName(creatable);
+            string version = ItemAttribute.GetVersion(creatable).ToString();
+            string description = ItemAttribute.GetDescription(creatable);
+            ListViewItem item = new ListViewItem(new string[] { name, version, description }, group);
+            item.ImageIndex = 0;
+            Image image = ItemAttribute.GetImage(creatable);
+            if (image != null) {
+              itemsListView.SmallImageList.Images.Add(image);
+              item.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
+            }
+            item.Tag = creatable;
+            itemsListView.Items.Add(item);
+          }
+        }
+        for (int i = 0; i < itemsListView.Columns.Count; i++)
+          itemsListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        initialized = true;
+      }
+    }
+
+    private void NewItemDialog_Shown(object sender, EventArgs e) {
+      item = null;
+    }
+
+    private void itemTypesListView_SelectedIndexChanged(object sender, EventArgs e) {
+      okButton.Enabled = itemsListView.SelectedItems.Count == 1;
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        item = (IItem)Activator.CreateInstance((Type)itemsListView.SelectedItems[0].Tag);
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+    private void itemTypesListView_DoubleClick(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        item = (IItem)Activator.CreateInstance((Type)itemsListView.SelectedItems[0].Tag);
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.Designer.cs	(revision 12176)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class OptimizerDockingMainForm {
+    /// <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.SuspendLayout();
+      // 
+      // OptimizerMainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.ClientSize = new System.Drawing.Size(984, 714);
+      this.Name = "OptimizerMainForm";
+      this.Text = "HeuristicLab Optimizer";
+      this.Title = "HeuristicLab Optimizer";
+      this.Icon = HeuristicLab.Common.Resources.HeuristicLab.Icon;
+      this.ResumeLayout(false);
+      this.PerformLayout();
+      //
+      // toolStrip
+      //
+      this.toolStrip.AllowDrop = true;
+      this.toolStrip.DragEnter += optimizerMainForm_DragEnter;
+      this.toolStrip.DragDrop += optimizerMainForm_DragDrop;
+      //
+      // menuStrip
+      //
+      this.menuStrip.AllowDrop = true;
+      this.menuStrip.DragEnter += optimizerMainForm_DragEnter;
+      this.menuStrip.DragDrop += optimizerMainForm_DragDrop;
+    }
+
+    #endregion
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerDockingMainForm.cs	(revision 12176)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Optimizer {
+  internal partial class OptimizerDockingMainForm : DockingMainForm {
+    private string title;
+
+    private Clipboard<IItem> clipboard;
+    public Clipboard<IItem> Clipboard {
+      get { return clipboard; }
+    }
+
+    public OptimizerDockingMainForm()
+      : base() {
+      InitializeComponent();
+    }
+    public OptimizerDockingMainForm(Type userInterfaceItemType)
+      : base(userInterfaceItemType) {
+      InitializeComponent();
+    }
+    public OptimizerDockingMainForm(Type userInterfaceItemType, bool showContentInViewHost)
+      : this(userInterfaceItemType) {
+      this.ShowContentInViewHost = showContentInViewHost;
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      base.OnInitialized(e);
+
+      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                         Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      title = "HeuristicLab Optimizer";
+      if (version != null) title += " " + version.Version;
+      Title = title;
+
+      ContentManager.Initialize(new PersistenceContentManager());
+
+      clipboard = new Clipboard<IItem>();
+      clipboard.Dock = DockStyle.Left;
+      clipboard.Collapsed = Properties.Settings.Default.CollapseClipboard;
+      if (Properties.Settings.Default.ShowClipboard) {
+        clipboard.Show();
+      }
+      if (Properties.Settings.Default.ShowOperatorsSidebar) {
+        OperatorsSidebar operatorsSidebar = new OperatorsSidebar();
+        operatorsSidebar.Dock = DockStyle.Left;
+        operatorsSidebar.Show();
+        operatorsSidebar.Collapsed = Properties.Settings.Default.CollapseOperatorsSidebar;
+      }
+      if (Properties.Settings.Default.ShowStartPage) {
+        StartPage startPage = new StartPage();
+        startPage.Show();
+      }
+
+      WindowState = Properties.Settings.Default.ShowMaximized ? FormWindowState.Maximized : FormWindowState.Normal;
+    }
+
+    protected override void OnClosing(CancelEventArgs e) {
+      base.OnClosing(e);
+      if (MainFormManager.MainForm.Views.OfType<IContentView>().Any(v => v.Content is IStorableContent)) {
+        if (MessageBox.Show(this, "Some views are still opened. If their content has not been saved, it will be lost after closing. Do you really want to close HeuristicLab Optimizer?", "Close Optimizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No)
+          e.Cancel = true;
+      }
+    }
+    protected override void OnClosed(EventArgs e) {
+      base.OnClosed(e);
+      Properties.Settings.Default.ShowMaximized = WindowState == FormWindowState.Maximized;
+      Properties.Settings.Default.CollapseClipboard = clipboard.Collapsed;
+      OperatorsSidebar operatorsSidebar = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
+      if (operatorsSidebar != null) Properties.Settings.Default.CollapseOperatorsSidebar = operatorsSidebar.Collapsed;
+      Properties.Settings.Default.Save();
+    }
+
+    protected override void OnActiveViewChanged() {
+      base.OnActiveViewChanged();
+      UpdateTitle();
+    }
+
+    public override void UpdateTitle() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateTitle));
+      else {
+        IContentView activeView = ActiveView as IContentView;
+        if ((activeView != null) && (activeView.Content is IStorableContent)) {
+          IStorableContent content = (IStorableContent)activeView.Content;
+          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
+        } else {
+          Title = title;
+        }
+      }
+    }
+
+    private void optimizerMainForm_DragEnter(object sender, DragEventArgs e) {
+      // perform type checking to ensure that the data being dragged is of an acceptable type
+      e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
+
+    }
+
+    private void optimizerMainForm_DragDrop(object sender, DragEventArgs e) {
+      if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
+        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+        FileManager.OpenFiles(files);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.Designer.cs	(revision 12176)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class OptimizerMultipleDocumentMainForm {
+    /// <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.SuspendLayout();
+      // 
+      // OptimizerMainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.ClientSize = new System.Drawing.Size(984, 714);
+      this.Name = "OptimizerMainForm";
+      this.Text = "HeuristicLab Optimizer";
+      this.Title = "HeuristicLab Optimizer";
+      this.Icon = HeuristicLab.Common.Resources.HeuristicLab.Icon;
+      this.ResumeLayout(false);
+      this.PerformLayout();
+      //
+      // toolStrip
+      //
+      this.toolStrip.AllowDrop = true;
+      this.toolStrip.DragEnter += optimizerMainForm_DragEnter;
+      this.toolStrip.DragDrop += optimizerMainForm_DragDrop;
+      //
+      // menuStrip
+      //
+      this.menuStrip.AllowDrop = true;
+      this.menuStrip.DragEnter += optimizerMainForm_DragEnter;
+      this.menuStrip.DragDrop += optimizerMainForm_DragDrop;
+    }
+
+    #endregion
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerMultipleDocumentMainForm.cs	(revision 12176)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Optimizer {
+  internal partial class OptimizerMultipleDocumentMainForm : MultipleDocumentMainForm {
+    private string title;
+
+    private Clipboard<IItem> clipboard;
+    public Clipboard<IItem> Clipboard {
+      get { return clipboard; }
+    }
+
+    public OptimizerMultipleDocumentMainForm()
+      : base() {
+      InitializeComponent();
+    }
+    public OptimizerMultipleDocumentMainForm(Type userInterfaceItemType)
+      : base(userInterfaceItemType) {
+      InitializeComponent();
+    }
+    public OptimizerMultipleDocumentMainForm(Type userInterfaceItemType, bool showContentInViewHost)
+      : this(userInterfaceItemType) {
+      this.ShowContentInViewHost = showContentInViewHost;
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      base.OnInitialized(e);
+
+      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                         Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      title = "HeuristicLab Optimizer";
+      if (version != null) title += " " + version.Version;
+      Title = title;
+
+      ContentManager.Initialize(new PersistenceContentManager());
+
+      clipboard = new Clipboard<IItem>();
+      clipboard.Dock = DockStyle.Left;
+      clipboard.Collapsed = Properties.Settings.Default.CollapseClipboard;
+      if (Properties.Settings.Default.ShowClipboard) {
+        clipboard.Show();
+      }
+      if (Properties.Settings.Default.ShowOperatorsSidebar) {
+        OperatorsSidebar operatorsSidebar = new OperatorsSidebar();
+        operatorsSidebar.Dock = DockStyle.Left;
+        operatorsSidebar.Show();
+        operatorsSidebar.Collapsed = Properties.Settings.Default.CollapseOperatorsSidebar;
+      }
+      if (Properties.Settings.Default.ShowStartPage) {
+        StartPage startPage = new StartPage();
+        startPage.Show();
+      }
+
+      WindowState = Properties.Settings.Default.ShowMaximized ? FormWindowState.Maximized : FormWindowState.Normal;
+    }
+
+    protected override void OnClosing(CancelEventArgs e) {
+      base.OnClosing(e);
+      if (MainFormManager.MainForm.Views.OfType<IContentView>().Any(v => v.Content is IStorableContent)) {
+        if (MessageBox.Show(this, "Some views are still opened. If their content has not been saved, it will be lost after closing. Do you really want to close HeuristicLab Optimizer?", "Close Optimizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No)
+          e.Cancel = true;
+      }
+    }
+    protected override void OnClosed(EventArgs e) {
+      base.OnClosed(e);
+      Properties.Settings.Default.ShowMaximized = WindowState == FormWindowState.Maximized;
+      Properties.Settings.Default.CollapseClipboard = clipboard.Collapsed;
+      OperatorsSidebar operatorsSidebar = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
+      if (operatorsSidebar != null) Properties.Settings.Default.CollapseOperatorsSidebar = operatorsSidebar.Collapsed;
+      Properties.Settings.Default.Save();
+    }
+
+    protected override void OnActiveViewChanged() {
+      base.OnActiveViewChanged();
+      UpdateTitle();
+    }
+
+    public override void UpdateTitle() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateTitle));
+      else {
+        IContentView activeView = ActiveView as IContentView;
+        if ((activeView != null) && (activeView.Content is IStorableContent)) {
+          IStorableContent content = (IStorableContent)activeView.Content;
+          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
+        } else {
+          Title = title;
+        }
+      }
+    }
+
+    private void optimizerMainForm_DragEnter(object sender, DragEventArgs e) {
+      // perform type checking to ensure that the data being dragged is of an acceptable type
+      e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
+
+    }
+
+    private void optimizerMainForm_DragDrop(object sender, DragEventArgs e) {
+      if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
+        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+        FileManager.OpenFiles(files);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.Designer.cs	(revision 12176)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class OptimizerSingleDocumentMainForm {
+    /// <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.SuspendLayout();
+      // 
+      // OptimizerMainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.ClientSize = new System.Drawing.Size(984, 714);
+      this.Name = "OptimizerMainForm";
+      this.Text = "HeuristicLab Optimizer";
+      this.Title = "HeuristicLab Optimizer";
+      this.Icon = HeuristicLab.Common.Resources.HeuristicLab.Icon;
+      this.ResumeLayout(false);
+      this.PerformLayout();
+      //
+      // toolStrip
+      //
+      this.toolStrip.AllowDrop = true;
+      this.toolStrip.DragEnter += optimizerMainForm_DragEnter;
+      this.toolStrip.DragDrop += optimizerMainForm_DragDrop;
+      //
+      // menuStrip
+      //
+      this.menuStrip.AllowDrop = true;
+      this.menuStrip.DragEnter += optimizerMainForm_DragEnter;
+      this.menuStrip.DragDrop += optimizerMainForm_DragDrop;
+    }
+
+    #endregion
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/OptimizerSingleDocumentMainForm.cs	(revision 12176)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Optimizer {
+  internal partial class OptimizerSingleDocumentMainForm : SingleDocumentMainForm {
+    private string title;
+
+    private Clipboard<IItem> clipboard;
+    public Clipboard<IItem> Clipboard {
+      get { return clipboard; }
+    }
+
+    public OptimizerSingleDocumentMainForm()
+      : base() {
+      InitializeComponent();
+    }
+    public OptimizerSingleDocumentMainForm(Type userInterfaceItemType)
+      : base(userInterfaceItemType) {
+      InitializeComponent();
+    }
+    public OptimizerSingleDocumentMainForm(Type userInterfaceItemType, bool showContentInViewHost)
+      : this(userInterfaceItemType) {
+      this.ShowContentInViewHost = showContentInViewHost;
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      base.OnInitialized(e);
+
+      AssemblyFileVersionAttribute version = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                         Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      title = "HeuristicLab Optimizer";
+      if (version != null) title += " " + version.Version;
+      Title = title;
+
+      ContentManager.Initialize(new PersistenceContentManager());
+
+      clipboard = new Clipboard<IItem>();
+      clipboard.Dock = DockStyle.Left;
+      clipboard.Collapsed = Properties.Settings.Default.CollapseClipboard;
+      if (Properties.Settings.Default.ShowClipboard) {
+        clipboard.Show();
+      }
+      if (Properties.Settings.Default.ShowOperatorsSidebar) {
+        OperatorsSidebar operatorsSidebar = new OperatorsSidebar();
+        operatorsSidebar.Dock = DockStyle.Left;
+        operatorsSidebar.Show();
+        operatorsSidebar.Collapsed = Properties.Settings.Default.CollapseOperatorsSidebar;
+      }
+      if (Properties.Settings.Default.ShowStartPage) {
+        StartPage startPage = new StartPage();
+        startPage.Show();
+      }
+
+      WindowState = Properties.Settings.Default.ShowMaximized ? FormWindowState.Maximized : FormWindowState.Normal;
+    }
+
+    protected override void OnClosing(CancelEventArgs e) {
+      base.OnClosing(e);
+      if (MainFormManager.MainForm.Views.OfType<IContentView>().Any(v => v.Content is IStorableContent)) {
+        if (MessageBox.Show(this, "Some views are still opened. If their content has not been saved, it will be lost after closing. Do you really want to close HeuristicLab Optimizer?", "Close Optimizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No)
+          e.Cancel = true;
+      }
+    }
+    protected override void OnClosed(EventArgs e) {
+      base.OnClosed(e);
+      Properties.Settings.Default.ShowMaximized = WindowState == FormWindowState.Maximized;
+      Properties.Settings.Default.CollapseClipboard = clipboard.Collapsed;
+      OperatorsSidebar operatorsSidebar = MainFormManager.MainForm.Views.OfType<OperatorsSidebar>().FirstOrDefault();
+      if (operatorsSidebar != null) Properties.Settings.Default.CollapseOperatorsSidebar = operatorsSidebar.Collapsed;
+      Properties.Settings.Default.Save();
+    }
+
+    protected override void OnActiveViewChanged() {
+      base.OnActiveViewChanged();
+      UpdateTitle();
+    }
+
+    public override void UpdateTitle() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateTitle));
+      else {
+        IContentView activeView = ActiveView as IContentView;
+        if ((activeView != null) && (activeView.Content is IStorableContent)) {
+          IStorableContent content = (IStorableContent)activeView.Content;
+          Title = title + " [" + (string.IsNullOrEmpty(content.Filename) ? "Unsaved" : content.Filename) + "]";
+        } else {
+          Title = title;
+        }
+      }
+    }
+
+    private void optimizerMainForm_DragEnter(object sender, DragEventArgs e) {
+      // perform type checking to ensure that the data being dragged is of an acceptable type
+      e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
+
+    }
+
+    private void optimizerMainForm_DragDrop(object sender, DragEventArgs e) {
+      if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
+        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+        FileManager.OpenFiles(files);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Plugin.cs.frame
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 12176)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Access;
+using HeuristicLab.Optimizer.Properties;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Optimizer {
+  [Plugin("HeuristicLab.Optimizer", "3.3.11.$WCREV$")]
+  [PluginFile("HeuristicLab.Optimizer-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Access", "3.3")]
+  public class HeuristicLabOptimizerPlugin : PluginBase {
+  }
+
+  [Application("Optimizer", "HeuristicLab Optimizer 3.3.11.$WCREV$")]
+  internal class HeuristicLabOptimizerApplication : ApplicationBase {
+    public override void Run(ICommandLineArgument[] args) {
+      HeuristicLab.MainForm.WindowsForms.MainForm mainForm = null;
+
+      if (Settings.Default.MainFormType == OptimizerMainFormTypes.DockingMainForm) {
+        mainForm = new OptimizerDockingMainForm(typeof(IOptimizerUserInterfaceItemProvider));
+      } else if (Settings.Default.MainFormType == OptimizerMainFormTypes.MultipleDocumentMainForm) {
+        mainForm = new OptimizerMultipleDocumentMainForm(typeof(IOptimizerUserInterfaceItemProvider));
+      } else if (Settings.Default.MainFormType == OptimizerMainFormTypes.SingleDocumentMainForm) {
+        mainForm = new OptimizerSingleDocumentMainForm(typeof(IOptimizerUserInterfaceItemProvider));
+      }
+
+      if (mainForm != null) {
+        ClientInformation.InitializeAsync();
+        UserInformation.InitializeAsync();
+
+        mainForm.ShowContentInViewHost = true;
+        var filesToOpen = args.OfType<OpenArgument>().Select(x => x.Value);
+        mainForm.Load += (sender, eventArgs) => FileManager.OpenFiles(filesToOpen);
+        Application.Run(mainForm);
+      } else {
+        MessageBox.Show("Error loading setting for the MainForm Type. Please check your configuration file!", "HeuristicLab", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/AssemblyInfo.cs.frame	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/AssemblyInfo.cs.frame	(revision 12176)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Optimizer")]
+[assembly: AssemblyDescription("HeuristicLab application for heuristic optimization")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("ca725686-f020-4a7e-82c7-1b4d03e61bab")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.11.$WCREV$")]
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/Settings.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/Settings.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/Settings.Designer.cs	(revision 12176)
@@ -0,0 +1,110 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.34014
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Optimizer.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("True")]
+        public bool ShowStartPage {
+            get {
+                return ((bool)(this["ShowStartPage"]));
+            }
+            set {
+                this["ShowStartPage"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]
+        public bool ShowOperatorsSidebar {
+            get {
+                return ((bool)(this["ShowOperatorsSidebar"]));
+            }
+            set {
+                this["ShowOperatorsSidebar"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("True")]
+        public bool ShowClipboard {
+            get {
+                return ((bool)(this["ShowClipboard"]));
+            }
+            set {
+                this["ShowClipboard"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("True")]
+        public bool ShowMaximized {
+            get {
+                return ((bool)(this["ShowMaximized"]));
+            }
+            set {
+                this["ShowMaximized"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("True")]
+        public bool CollapseClipboard {
+            get {
+                return ((bool)(this["CollapseClipboard"]));
+            }
+            set {
+                this["CollapseClipboard"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]
+        public bool CollapseOperatorsSidebar {
+            get {
+                return ((bool)(this["CollapseOperatorsSidebar"]));
+            }
+            set {
+                this["CollapseOperatorsSidebar"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("DockingMainForm")]
+        public global::HeuristicLab.Optimizer.OptimizerMainFormTypes MainFormType {
+            get {
+                return ((global::HeuristicLab.Optimizer.OptimizerMainFormTypes)(this["MainFormType"]));
+            }
+            set {
+                this["MainFormType"] = value;
+            }
+        }
+    }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/Settings.settings
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/Settings.settings	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/Properties/Settings.settings	(revision 12176)
@@ -0,0 +1,27 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Optimizer.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="ShowStartPage" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">True</Value>
+    </Setting>
+    <Setting Name="ShowOperatorsSidebar" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">False</Value>
+    </Setting>
+    <Setting Name="ShowClipboard" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">True</Value>
+    </Setting>
+    <Setting Name="ShowMaximized" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">True</Value>
+    </Setting>
+    <Setting Name="CollapseClipboard" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">True</Value>
+    </Setting>
+    <Setting Name="CollapseOperatorsSidebar" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">False</Value>
+    </Setting>
+    <Setting Name="MainFormType" Type="HeuristicLab.Optimizer.OptimizerMainFormTypes" Scope="User">
+      <Value Profile="(Default)">DockingMainForm</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/StartPage.Designer.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/StartPage.Designer.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/StartPage.Designer.cs	(revision 12176)
@@ -0,0 +1,201 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimizer {
+  partial class StartPage {
+    /// <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.showStartPageCheckBox = new System.Windows.Forms.CheckBox();
+      this.firstStepsRichTextBox = new System.Windows.Forms.RichTextBox();
+      this.titleLabel = new System.Windows.Forms.Label();
+      this.samplesGroupBox = new System.Windows.Forms.GroupBox();
+      this.samplesListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.descriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.samplesGroupBox.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // showStartPageCheckBox
+      // 
+      this.showStartPageCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.showStartPageCheckBox.AutoSize = true;
+      this.showStartPageCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.showStartPageCheckBox.Location = new System.Drawing.Point(3, 620);
+      this.showStartPageCheckBox.Name = "showStartPageCheckBox";
+      this.showStartPageCheckBox.Size = new System.Drawing.Size(158, 17);
+      this.showStartPageCheckBox.TabIndex = 1;
+      this.showStartPageCheckBox.Text = "Show Start Page on Startup";
+      this.showStartPageCheckBox.UseVisualStyleBackColor = true;
+      this.showStartPageCheckBox.CheckedChanged += new System.EventHandler(this.showStartPageCheckBox_CheckedChanged);
+      // 
+      // firstStepsRichTextBox
+      // 
+      this.firstStepsRichTextBox.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.firstStepsRichTextBox.BackColor = System.Drawing.SystemColors.Control;
+      this.firstStepsRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.firstStepsRichTextBox.Cursor = System.Windows.Forms.Cursors.Arrow;
+      this.firstStepsRichTextBox.Location = new System.Drawing.Point(3, 33);
+      this.firstStepsRichTextBox.Name = "firstStepsRichTextBox";
+      this.firstStepsRichTextBox.ReadOnly = true;
+      this.firstStepsRichTextBox.Size = new System.Drawing.Size(389, 581);
+      this.firstStepsRichTextBox.TabIndex = 1;
+      this.firstStepsRichTextBox.Text = "First Steps";
+      this.firstStepsRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.firstStepsRichTextBox_LinkClicked);
+      // 
+      // titleLabel
+      // 
+      this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.titleLabel.Location = new System.Drawing.Point(-1, 0);
+      this.titleLabel.Name = "titleLabel";
+      this.titleLabel.Size = new System.Drawing.Size(393, 30);
+      this.titleLabel.TabIndex = 0;
+      this.titleLabel.Text = "Title";
+      this.titleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // samplesGroupBox
+      // 
+      this.samplesGroupBox.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.samplesGroupBox.Controls.Add(this.samplesListView);
+      this.samplesGroupBox.Location = new System.Drawing.Point(0, 3);
+      this.samplesGroupBox.Name = "samplesGroupBox";
+      this.samplesGroupBox.Size = new System.Drawing.Size(332, 637);
+      this.samplesGroupBox.TabIndex = 0;
+      this.samplesGroupBox.TabStop = false;
+      this.samplesGroupBox.Text = "Samples";
+      // 
+      // samplesListView
+      // 
+      this.samplesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.descriptionColumnHeader});
+      this.samplesListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.samplesListView.FullRowSelect = true;
+      this.samplesListView.Location = new System.Drawing.Point(3, 16);
+      this.samplesListView.MultiSelect = false;
+      this.samplesListView.Name = "samplesListView";
+      this.samplesListView.ShowItemToolTips = true;
+      this.samplesListView.Size = new System.Drawing.Size(326, 618);
+      this.samplesListView.SmallImageList = this.imageList;
+      this.samplesListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.samplesListView.TabIndex = 0;
+      this.samplesListView.UseCompatibleStateImageBehavior = false;
+      this.samplesListView.View = System.Windows.Forms.View.Details;
+      this.samplesListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.samplesListView_ItemDrag);
+      this.samplesListView.DoubleClick += new System.EventHandler(this.samplesListView_DoubleClick);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 150;
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 300;
+      // 
+      // 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;
+      // 
+      // 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.titleLabel);
+      this.splitContainer.Panel1.Controls.Add(this.showStartPageCheckBox);
+      this.splitContainer.Panel1.Controls.Add(this.firstStepsRichTextBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.samplesGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(728, 640);
+      this.splitContainer.SplitterDistance = 392;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // StartPage
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "StartPage";
+      this.Size = new System.Drawing.Size(728, 640);
+      this.samplesGroupBox.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel1.PerformLayout();
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox showStartPageCheckBox;
+    private System.Windows.Forms.RichTextBox firstStepsRichTextBox;
+    private System.Windows.Forms.Label titleLabel;
+    private System.Windows.Forms.GroupBox samplesGroupBox;
+    private System.Windows.Forms.ListView samplesListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
+    private System.Windows.Forms.SplitContainer splitContainer;
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/StartPage.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 12176)
@@ -0,0 +1,215 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.IO;
+using System.Linq;
+using System.Reflection;
+using System.Threading;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.Persistence.Default.Xml;
+
+namespace HeuristicLab.Optimizer {
+  [View("Start Page")]
+  public partial class StartPage : HeuristicLab.MainForm.WindowsForms.View {
+    private const string StandardProblemsGroupName = "Standard Problems";
+    private const string DataAnalysisGroupName = "Data Analysis";
+    private const string ScriptsGroupName = "Scripts";
+    private const string UncategorizedGroupName = "Uncategorized";
+    private const string SampleNamePrefix = "HeuristicLab.Optimizer.Documents.";
+    private const string SampleNameSuffix = ".hl";
+
+    private readonly Dictionary<ListViewGroup, List<string>> groupLookup = new Dictionary<ListViewGroup, List<string>>();
+    private readonly ListViewGroup standardProblemsGroup = new ListViewGroup(StandardProblemsGroupName);
+    private readonly ListViewGroup dataAnalysisGroup = new ListViewGroup(DataAnalysisGroupName);
+    private readonly ListViewGroup scriptsGroup = new ListViewGroup(ScriptsGroupName);
+    private readonly ListViewGroup uncategorizedGroup = new ListViewGroup(UncategorizedGroupName);
+
+    private IProgress progress;
+
+    public StartPage() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      base.OnInitialized(e);
+      Assembly assembly = Assembly.GetExecutingAssembly();
+      AssemblyFileVersionAttribute version = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).
+                                             Cast<AssemblyFileVersionAttribute>().FirstOrDefault();
+      titleLabel.Text = "HeuristicLab Optimizer";
+      if (version != null) titleLabel.Text += " " + version.Version;
+
+      try {
+        using (Stream stream = assembly.GetManifestResourceStream(typeof(StartPage), "Documents.FirstSteps.rtf"))
+          firstStepsRichTextBox.LoadFile(stream, RichTextBoxStreamType.RichText);
+      }
+      catch (Exception) { }
+
+      samplesListView.Enabled = false;
+      samplesListView.Groups.Add(standardProblemsGroup);
+      samplesListView.Groups.Add(dataAnalysisGroup);
+      samplesListView.Groups.Add(scriptsGroup);
+      samplesListView.Groups.Add(uncategorizedGroup);
+      FillGroupLookup();
+
+      showStartPageCheckBox.Checked = Properties.Settings.Default.ShowStartPage;
+
+      ThreadPool.QueueUserWorkItem(new WaitCallback(LoadSamples));
+    }
+
+    protected override void OnClosing(FormClosingEventArgs e) {
+      base.OnClosing(e);
+      if (e.CloseReason == CloseReason.UserClosing) {
+        e.Cancel = true;
+        this.Hide();
+      }
+    }
+
+    private void LoadSamples(object state) {
+      progress = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(samplesListView, "Loading...");
+      try {
+        var assembly = Assembly.GetExecutingAssembly();
+        var samples = assembly.GetManifestResourceNames().Where(x => x.EndsWith(SampleNameSuffix));
+        int count = samples.Count();
+
+        foreach (var entry in groupLookup) {
+          var group = entry.Key;
+          var sampleList = entry.Value;
+          foreach (var sampleName in sampleList) {
+            string resourceName = SampleNamePrefix + sampleName + SampleNameSuffix;
+            LoadSample(resourceName, assembly, group, count);
+          }
+        }
+
+        var categorizedSamples = groupLookup.Select(x => x.Value).SelectMany(x => x).Select(x => SampleNamePrefix + x + SampleNameSuffix);
+        var uncategorizedSamples = samples.Except(categorizedSamples);
+
+        foreach (var resourceName in uncategorizedSamples) {
+          LoadSample(resourceName, assembly, uncategorizedGroup, count);
+        }
+
+        OnAllSamplesLoaded();
+      }
+      finally {
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(samplesListView);
+      }
+    }
+
+    private void LoadSample(string name, Assembly assembly, ListViewGroup group, int count) {
+      string path = Path.GetTempFileName();
+      try {
+        using (var stream = assembly.GetManifestResourceStream(name)) {
+          WriteStreamToTempFile(stream, path); // create a file in a temporary folder (persistence cannot load these files directly from the stream)
+          var item = XmlParser.Deserialize<INamedItem>(path);
+          OnSampleLoaded(item, group, 1.0 / count);
+        }
+      }
+      catch (Exception) {
+      }
+      finally {
+        if (File.Exists(path)) {
+          File.Delete(path); // make sure we remove the temporary file
+        }
+      }
+    }
+
+    private void FillGroupLookup() {
+      var standardProblems = new List<string> { "ES_Griewank", "GA_TSP", "GA_VRP", "GE_ArtificialAnt",
+                "IslandGA_TSP", "LS_Knapsack", "PSO_Schwefel", "RAPGA_JSSP",
+                "SA_Rastrigin", "SGP_SantaFe","GP_Multiplexer", "SS_VRP", "TS_TSP", "TS_VRP", "VNS_TSP"
+        };
+      groupLookup[standardProblemsGroup] = standardProblems;
+      var dataAnalysisProblems = new List<string> { "SGP_SymbClass", "SGP_SymbReg", "OSGP_TimeSeries", "GE_SymbReg", "GPR" };
+      groupLookup[dataAnalysisGroup] = dataAnalysisProblems;
+      var scripts = new List<string> { "GA_QAP_Script", "GUI_Automation_Script", "OSGA_Rastrigin_Script", 
+                                       "GridSearch_RF_Classification_Script", "GridSearch_RF_Regression_Script",
+                                       "GridSearch_SVM_Classification_Script", "GridSearch_SVM_Regression_Script" };
+      groupLookup[scriptsGroup] = scripts;
+    }
+
+    private void OnSampleLoaded(INamedItem sample, ListViewGroup group, double progress) {
+      if (InvokeRequired)
+        Invoke(new Action<INamedItem, ListViewGroup, double>(OnSampleLoaded), sample, group, progress);
+      else {
+        ListViewItem item = new ListViewItem(new string[] { sample.Name, sample.Description }, group);
+        item.ToolTipText = sample.ItemName + ": " + sample.ItemDescription;
+        samplesListView.SmallImageList.Images.Add(sample.ItemImage);
+        item.ImageIndex = samplesListView.SmallImageList.Images.Count - 1;
+        item.Tag = sample;
+        samplesListView.Items.Add(item);
+        this.progress.ProgressValue += progress;
+      }
+    }
+    private void OnAllSamplesLoaded() {
+      if (InvokeRequired)
+        Invoke(new Action(OnAllSamplesLoaded));
+      else {
+        samplesListView.Enabled = samplesListView.Items.Count > 0;
+        if (samplesListView.Items.Count > 0) {
+          for (int i = 0; i < samplesListView.Columns.Count; i++)
+            samplesListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        }
+      }
+    }
+
+    private void firstStepsRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) {
+      System.Diagnostics.Process.Start(e.LinkText);
+    }
+
+    private void samplesListView_DoubleClick(object sender, EventArgs e) {
+      if (samplesListView.SelectedItems.Count == 1) {
+        var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
+        try {
+          mainForm.SetWaitCursor();
+          mainForm.ShowContent((IContent)((IItem)samplesListView.SelectedItems[0].Tag).Clone());
+        }
+        finally {
+          mainForm.ResetWaitCursor();
+        }
+
+      }
+    }
+    private void samplesListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      ListViewItem listViewItem = (ListViewItem)e.Item;
+      IItem item = (IItem)listViewItem.Tag;
+      DataObject data = new DataObject();
+      data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, item);
+      DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy);
+    }
+
+    private void showStartPageCheckBox_CheckedChanged(object sender, EventArgs e) {
+      Properties.Settings.Default.ShowStartPage = showStartPageCheckBox.Checked;
+      Properties.Settings.Default.Save();
+    }
+
+    #region Helpers
+    private void WriteStreamToTempFile(Stream stream, string path) {
+      using (FileStream output = new FileStream(path, FileMode.Create, FileAccess.Write)) {
+        stream.CopyTo(output);
+      }
+    }
+    #endregion
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/NewToolBarItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/NewToolBarItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/NewToolBarItem.cs	(revision 12176)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+
+namespace HeuristicLab.Optimizer {
+  internal class NewToolBarItem : HeuristicLab.MainForm.WindowsForms.ToolBarItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "New..."; }
+    }
+    public override string ToolTipText {
+      get { return "New Item (Ctrl + N)"; }
+    }
+    public override int Position {
+      get { return 10; }
+    }
+    public override Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.NewDocument; }
+    }
+
+    public override void Execute() {
+      FileManager.New();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/OpenToolBarItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/OpenToolBarItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/OpenToolBarItem.cs	(revision 12176)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+
+namespace HeuristicLab.Optimizer {
+  internal class OpenToolBarItem : HeuristicLab.MainForm.WindowsForms.ToolBarItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Open..."; }
+    }
+    public override string ToolTipText {
+      get { return "Open File (Ctrl + O)"; }
+    }
+    public override int Position {
+      get { return 20; }
+    }
+    public override Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Open; }
+    }
+
+    public override void Execute() {
+      FileManager.Open();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/SaveToolBarItem.cs
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/SaveToolBarItem.cs	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/ToolBarItems/SaveToolBarItem.cs	(revision 12176)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimizer {
+  internal class SaveToolBarItem : HeuristicLab.MainForm.WindowsForms.ToolBarItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Save"; }
+    }
+    public override string ToolTipText {
+      get { return "Save File (Ctrl + S)"; }
+    }
+    public override int Position {
+      get { return 30; }
+    }
+    public override Image Image {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Save; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) &&
+                              (activeView.Content is IStorableContent) && !activeView.Locked && activeView.Enabled;
+    }
+
+    public override void Execute() {
+      FileManager.Save();
+    }
+  }
+}
Index: branches/NewItemDialog/HeuristicLab.Optimizer/3.3/app.config
===================================================================
--- branches/NewItemDialog/HeuristicLab.Optimizer/3.3/app.config	(revision 12176)
+++ branches/NewItemDialog/HeuristicLab.Optimizer/3.3/app.config	(revision 12176)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+            <section name="HeuristicLab.Optimizer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
+        </sectionGroup>
+    </configSections>
+    <userSettings>
+        <HeuristicLab.Optimizer.Properties.Settings>
+            <setting name="ShowStartPage" serializeAs="String">
+                <value>True</value>
+            </setting>
+            <setting name="ShowOperatorsSidebar" serializeAs="String">
+                <value>False</value>
+            </setting>
+            <setting name="ShowClipboard" serializeAs="String">
+                <value>True</value>
+            </setting>
+            <setting name="ShowMaximized" serializeAs="String">
+                <value>True</value>
+            </setting>
+            <setting name="CollapseClipboard" serializeAs="String">
+                <value>True</value>
+            </setting>
+            <setting name="CollapseOperatorsSidebar" serializeAs="String">
+                <value>False</value>
+            </setting>
+            <setting name="MainFormType" serializeAs="String">
+                <value>DockingMainForm</value>
+            </setting>
+        </HeuristicLab.Optimizer.Properties.Settings>
+    </userSettings>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
