Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 3436)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 3437)
@@ -110,9 +110,5 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Common.Resources-3.2", "HeuristicLab.Common.Resources\3.2\HeuristicLab.Common.Resources-3.2.csproj", "{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.MainForm-3.2", "HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj", "{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Optimizer-3.3", "HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj", "{C664305E-497C-4533-A140-967DEDB05C19}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.MainForm.WindowsForms-3.2", "HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj", "{AB687BBE-1BFE-476B-906D-44237135431D}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Core.Views-3.3", "HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj", "{E226881D-315F-423D-B419-A766FE0D8685}"
@@ -248,4 +244,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.PermutationEncoding.Views-3.3", "HeuristicLab.Encodings.PermutationEncoding.Views\3.3\HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj", "{3EAF1454-086D-44A2-8509-B1BA24DB1865}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.MainForm-3.3", "HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj", "{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.MainForm.WindowsForms-3.3", "HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj", "{AB687BBE-1BFE-476B-906D-44237135431D}"
 EndProject
 Global
@@ -477,19 +477,4 @@
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Services|x64.ActiveCfg = Release|x64
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Services|x86.ActiveCfg = Release|x86
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x64.ActiveCfg = Debug|x64
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x64.Build.0 = Debug|x64
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x86.ActiveCfg = Debug|x86
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x86.Build.0 = Debug|x86
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x64.ActiveCfg = Release|x64
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x64.Build.0 = Release|x64
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x86.ActiveCfg = Release|x86
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x86.Build.0 = Release|x86
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|Any CPU.ActiveCfg = Release|Any CPU
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|x64.ActiveCfg = Release|x64
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|x86.ActiveCfg = Release|x86
 		{C664305E-497C-4533-A140-967DEDB05C19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C664305E-497C-4533-A140-967DEDB05C19}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -507,19 +492,4 @@
 		{C664305E-497C-4533-A140-967DEDB05C19}.Services|x64.ActiveCfg = Release|x64
 		{C664305E-497C-4533-A140-967DEDB05C19}.Services|x86.ActiveCfg = Release|x86
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x64.ActiveCfg = Debug|x64
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x64.Build.0 = Debug|x64
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x86.ActiveCfg = Debug|x86
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x86.Build.0 = Debug|x86
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x64.ActiveCfg = Release|x64
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x64.Build.0 = Release|x64
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x86.ActiveCfg = Release|x86
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x86.Build.0 = Release|x86
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|Any CPU.ActiveCfg = Release|Any CPU
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|x64.ActiveCfg = Release|x64
-		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|x86.ActiveCfg = Release|x86
 		{E226881D-315F-423D-B419-A766FE0D8685}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E226881D-315F-423D-B419-A766FE0D8685}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -1384,4 +1354,36 @@
 		{3EAF1454-086D-44A2-8509-B1BA24DB1865}.Services|x64.ActiveCfg = Release|Any CPU
 		{3EAF1454-086D-44A2-8509-B1BA24DB1865}.Services|x86.ActiveCfg = Release|Any CPU
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x64.ActiveCfg = Debug|x64
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x64.Build.0 = Debug|x64
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x86.ActiveCfg = Debug|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Debug|x86.Build.0 = Debug|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x64.ActiveCfg = Release|x64
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x64.Build.0 = Release|x64
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x86.ActiveCfg = Release|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|x86.Build.0 = Release|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|Any CPU.ActiveCfg = Release|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|x64.ActiveCfg = Release|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|x86.ActiveCfg = Release|x86
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Services|x86.Build.0 = Release|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x64.ActiveCfg = Debug|x64
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x64.Build.0 = Debug|x64
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x86.ActiveCfg = Debug|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Debug|x86.Build.0 = Debug|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x64.ActiveCfg = Release|x64
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x64.Build.0 = Release|x64
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x86.ActiveCfg = Release|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Release|x86.Build.0 = Release|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|Any CPU.ActiveCfg = Release|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|x64.ActiveCfg = Release|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|x86.ActiveCfg = Release|x86
+		{AB687BBE-1BFE-476B-906D-44237135431D}.Services|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab 3.3/Files.txt
===================================================================
--- /trunk/sources/HeuristicLab 3.3/Files.txt	(revision 3436)
+++ /trunk/sources/HeuristicLab 3.3/Files.txt	(revision 3437)
@@ -29,6 +29,6 @@
 HeuristicLab.Encodings.SymbolicExpressionTreeEncoding\3.3:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll
 HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views\3.3:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.dll
-HeuristicLab.MainForm\3.2:HeuristicLab.MainForm-3.2.dll
-HeuristicLab.MainForm.WindowsForms\3.2:HeuristicLab.MainForm.WindowsForms-3.2.dll
+HeuristicLab.MainForm\3.3:HeuristicLab.MainForm-3.3.dll
+HeuristicLab.MainForm.WindowsForms\3.3:HeuristicLab.MainForm.WindowsForms-3.3.dll
 HeuristicLab.Operators\3.3:HeuristicLab.Operators-3.3.dll
 HeuristicLab.Operators.Views\3.3:HeuristicLab.Operators.Views-3.3.dll
Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 3437)
@@ -121,11 +121,11 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLabAnalysisViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLabAnalysisViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLabAnalysisViewsPlugin.cs.frame	(revision 3437)
@@ -33,6 +33,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   public class HeuristicLabAnalysisViewsPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Common/3.2/Content/Content.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/Content/Content.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.Common/3.2/Content/Content.cs	(revision 3437)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.Common {
+  public class Content : DeepCloneable, IContent { }
+}
Index: /trunk/sources/HeuristicLab.Common/3.2/Content/ContentManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/Content/ContentManager.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.Common/3.2/Content/ContentManager.cs	(revision 3437)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Threading;
+
+namespace HeuristicLab.Common {
+  public abstract class ContentManager {
+    protected ContentManager() {
+    }
+
+    private static ContentManager instance;
+    public static ContentManager Instance {
+      get { return instance; }
+    }
+    public static void CreateInstance<T>() where T : ContentManager {
+      if (instance != null)
+        throw new InvalidOperationException("ContentManager was already created.");
+      instance = Activator.CreateInstance<T>();
+    }
+
+    public static void Save(IStorableContent content) {
+      content.Save();
+    }
+    public static void Save(IStorableContent content, string filename) {
+      content.Save(filename);
+    }
+
+    protected abstract void Load(string filename, bool flag);
+    public static void Load(string filename) {
+      if (instance == null)
+        throw new InvalidOperationException("ContentManager must be created before access is allowed.");
+
+      Exception ex = null;
+      instance.OnLoadOperationStarted();
+      try {
+        instance.Load(filename, false);
+      }
+      catch (Exception e) {
+        ex = e;
+      }
+      instance.OnLoadOperationFinished(ex);
+    }
+
+    public static void LoadAsynchronous(string filename) {
+      if (instance == null)
+        throw new InvalidOperationException("ContentManager must be created before access is allowed.");
+
+      ThreadPool.QueueUserWorkItem(
+        new WaitCallback(delegate(object arg) {
+        Load(filename);
+      })
+      );
+    }
+    
+
+    public event EventHandler LoadOperationStarted;
+    protected virtual void OnLoadOperationStarted() {
+      EventHandler handler = LoadOperationStarted;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<EventArgs<Exception>> LoadOperationFinished;
+    protected virtual void OnLoadOperationFinished(Exception e) {
+      EventHandler<EventArgs<Exception>> handler = LoadOperationFinished;
+      if (handler != null)
+        handler(this, new EventArgs<Exception>(e));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.2/Content/IContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/Content/IContent.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.Common/3.2/Content/IContent.cs	(revision 3437)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.Common {
+  public interface IContent : IDeepCloneable { }
+}
Index: /trunk/sources/HeuristicLab.Common/3.2/Content/IStorableContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/Content/IStorableContent.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.Common/3.2/Content/IStorableContent.cs	(revision 3437)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.Common {
+  public interface IStorableContent : IContent {
+    string Filename { get; set; }
+
+    void Save();
+    void Save(string filename);
+    void SaveAsynchronous();
+    void SaveAsynchronous(string filename);
+
+    event EventHandler FilenameChanged;
+    event EventHandler SaveOperationStarted;
+    event EventHandler<EventArgs<Exception>> SaveOperationFinished;
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.2/Content/StorableContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/Content/StorableContent.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.Common/3.2/Content/StorableContent.cs	(revision 3437)
@@ -0,0 +1,101 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Threading;
+using System.Reflection;
+
+namespace HeuristicLab.Common {
+  public abstract class StorableContent : Content, IStorableContent {
+    public StorableContent()
+      : base() {
+      this.filename = string.Empty;
+    }
+    public StorableContent(string filename)
+      : base() {
+      this.Filename = filename;
+    }
+
+    private string filename;
+    public string Filename {
+      get { return this.filename; }
+      set {
+        if (this.filename != value) {
+          this.filename = value;
+          this.OnFilenameChanged();
+        }
+      }
+    }
+
+    protected abstract void Save();
+    void IStorableContent.Save() {
+      this.OnSaveOperationStarted();
+      Exception ex = null;
+      try {
+        this.Save();
+      }
+      catch (Exception e) {
+        ex = e;
+      }
+      this.OnSaveOperationFinished(ex);
+    }
+    public void Save(string filename) {
+      this.Filename = filename;
+      ((IStorableContent)this).Save();
+    }
+
+    protected virtual void SaveAsnychronous() {
+      ThreadPool.QueueUserWorkItem(
+        new WaitCallback(delegate(object arg) {
+        this.Save();
+      })
+      );
+    }
+    void IStorableContent.SaveAsynchronous() {
+      this.OnSaveOperationStarted();
+      this.SaveAsnychronous();
+      this.OnSaveOperationFinished(null);
+    }
+    public void SaveAsynchronous(string filename) {
+      this.Filename = filename;
+      ((IStorableContent)this).SaveAsynchronous();
+    }
+
+    public event EventHandler FilenameChanged;
+    protected virtual void OnFilenameChanged() {
+      EventHandler handler = FilenameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler SaveOperationStarted;
+    protected virtual void OnSaveOperationStarted() {
+      EventHandler handler = SaveOperationStarted;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<EventArgs<Exception>> SaveOperationFinished;
+    protected virtual void OnSaveOperationFinished(Exception ex) {
+      EventHandler<EventArgs<Exception>> handler = SaveOperationFinished;
+      if (handler != null) handler(this, new EventArgs<Exception>(ex));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.2/DeepCloneable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/DeepCloneable.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.Common/3.2/DeepCloneable.cs	(revision 3437)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Common {
+  /// <summary>
+  /// Represents a base class for all deeply cloneable objects.
+  /// </summary>
+  public abstract class DeepCloneable : IDeepCloneable {
+    protected DeepCloneable() { }
+
+    /// <summary>
+    /// Creates a deep clone of this instance.
+    /// </summary>
+    /// <remarks>
+    /// This method is the entry point for creating a deep clone of a whole object graph.
+    /// </remarks>
+    /// <returns>A clone of this instance.</returns>
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    /// <summary>
+    /// Creates a deep clone of this instance.
+    /// </summary>
+    /// <remarks>This method should not be called directly. It is used for creating clones of
+    /// objects which are contained in the object that is currently cloned.</remarks>
+    /// <param name="cloner">The cloner which is responsible for keeping track of all already
+    /// cloned objects.</param>
+    /// <returns>A clone of this instance.</returns>
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      DeepCloneable clone = (DeepCloneable)Activator.CreateInstance(this.GetType(),true);
+      cloner.RegisterClonedObject(this, clone);
+      return clone;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.2/HeuristicLab.Common-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/HeuristicLab.Common-3.2.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Common/3.2/HeuristicLab.Common-3.2.csproj	(revision 3437)
@@ -89,6 +89,11 @@
     <None Include="HeuristicLabCommonPlugin.cs.frame" />
     <Compile Include="Cloner.cs" />
+    <Compile Include="Content\Content.cs" />
+    <Compile Include="Content\ContentManager.cs" />
+    <Compile Include="Content\IContent.cs" />
+    <Compile Include="Content\IStorableContent.cs" />
+    <Compile Include="Content\StorableContent.cs" />
+    <Compile Include="DeepCloneable.cs" />
     <Compile Include="EnumerableEventArgs.cs" />
-    <Compile Include="IContent.cs" />
     <Compile Include="IDeepCloneable.cs" />
     <Compile Include="NotificationDictionary.cs" />
Index: unk/sources/HeuristicLab.Common/3.2/IContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/IContent.cs	(revision 3436)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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.Text;
-
-namespace HeuristicLab.Common {
-  public interface IContent {
-    bool ReadOnlyView { get; set; }
-
-    event EventHandler ReadOnlyViewChanged;
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 3437)
@@ -280,11 +280,11 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs.frame	(revision 3437)
@@ -32,6 +32,6 @@
   [PluginDependency("HeuristicLab.Common.Resources", "3.2")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabCoreViewsPlugin : PluginBase {
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 3437)
@@ -146,11 +146,11 @@
       <Name>HeuristicLab.Data-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/HeuristicLabDataViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/HeuristicLabDataViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/HeuristicLabDataViewsPlugin.cs.frame	(revision 3437)
@@ -35,6 +35,6 @@
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   public class HeuristicLabDataViewsPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj	(revision 3437)
@@ -117,11 +117,11 @@
       <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLabEncodingsPermutationEncodingViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLabEncodingsPermutationEncodingViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLabEncodingsPermutationEncodingViewsPlugin.cs.frame	(revision 3437)
@@ -33,6 +33,6 @@
   [PluginDependency("HeuristicLab.Data", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.PermutationEncoding", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   public class HeuristicLabEncodingsPermutationEncodingViewsPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.csproj	(revision 3437)
@@ -126,11 +126,11 @@
       <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin.cs.frame	(revision 3437)
@@ -31,6 +31,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3.0.0")]
   [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.3.0.0")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2.0.0")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2.0.0")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3.0.0")]
   public class HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/HeuristicLab.MainForm.WindowsForms-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/HeuristicLab.MainForm.WindowsForms-3.2.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/HeuristicLab.MainForm.WindowsForms-3.2.csproj	(revision 3437)
@@ -180,7 +180,7 @@
       <Name>HeuristicLab.Common.Resources-3.2</Name>
     </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>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
+      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
+      <Name>HeuristicLab.Common-3.2</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.WinFormsUI\2.3.1\WinFormsUI-2.3.1\WinFormsUI-2.3.1.csproj">
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/HeuristicLabMainFormWindowsFormsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/HeuristicLabMainFormWindowsFormsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/HeuristicLabMainFormWindowsFormsPlugin.cs.frame	(revision 3437)
@@ -28,4 +28,5 @@
   [Plugin("HeuristicLab.MainForm.WindowsForms", "3.2.0.$WCREV$")]
   [PluginFile("HeuristicLab.MainForm.WindowsForms-3.2.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.2")]
   [PluginDependency("HeuristicLab.Common.Resources", "3.2")]
   [PluginDependency("HeuristicLab.MainForm", "3.2")]
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ActionUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ActionUserInterfaceItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ActionUserInterfaceItem.cs	(revision 3437)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public abstract class ActionUserInterfaceItem : HeuristicLab.MainForm.ActionUserInterfaceItem {
+    private ToolStripItem toolStripItem;
+    public ToolStripItem ToolStripItem {
+      get { return this.toolStripItem; }
+      internal set {
+        if (this.toolStripItem != value) {
+          bool firstTimeSet = this.toolStripItem == null;
+          this.toolStripItem = value;
+          if (firstTimeSet)
+            this.OnToolStripItemSet(EventArgs.Empty);
+        }
+      }
+    }
+
+    public virtual ToolStripItemDisplayStyle ToolStripItemDisplayStyle {
+      get { return ToolStripItemDisplayStyle.ImageAndText; }
+    }
+
+    protected virtual void OnToolStripItemSet(EventArgs e) {
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousContentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousContentView.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousContentView.Designer.cs	(revision 3437)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.MainForm.WindowsForms {
+  partial class AsynchronousContentView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousContentView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousContentView.cs	(revision 3437)
@@ -0,0 +1,56 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Threading;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class AsynchronousContentView : ContentView {
+    public AsynchronousContentView() {
+      InitializeComponent();
+    }
+
+    public AsynchronousContentView(IContent content)
+      : this() {
+      this.Content = content;
+    }
+
+    /// <summary>
+    /// Asynchronous call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    protected new void Invoke(Delegate method) {
+      // prevents blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method);
+      result.AsyncWaitHandle.WaitOne(1000, false);
+      if (result.IsCompleted) try { EndInvoke(result); }
+        catch (ObjectDisposedException) { } else {
+        ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
+          new WaitOrTimerCallback((x, b) => { try { EndInvoke(result); } catch (ObjectDisposedException) { } }),
+          null, -1, true);
+      }
+    }
+
+    /// <summary>
+    /// Asynchronous call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    /// <param name="args">The invoke arguments.</param>
+    protected new void Invoke(Delegate method, params object[] args) {
+      // prevents blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method, args);
+      result.AsyncWaitHandle.WaitOne(1000, false);
+      if (result.IsCompleted) try { EndInvoke(result); } catch (ObjectDisposedException) { }
+      else {
+        ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
+          new WaitOrTimerCallback((x, b) => { try { EndInvoke(result); } catch (ObjectDisposedException) { } }),
+          null, -1, true);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousStorableContentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousStorableContentView.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousStorableContentView.Designer.cs	(revision 3437)
@@ -0,0 +1,40 @@
+﻿namespace HeuristicLab.MainForm.WindowsForms {
+  partial class AsynchronousStorableContentView {
+    /// <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 (Content != null) DeregisterContentEvents();
+        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.SuspendLayout();
+      // 
+      // ContentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "ContentView";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousStorableContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousStorableContentView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/AsynchronousStorableContentView.cs	(revision 3437)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using System.Threading;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class AsynchronousStorableContentView : StorableContentView {
+    public AsynchronousStorableContentView()
+      : base() {
+      InitializeComponent();
+    }
+    public AsynchronousStorableContentView(IStorableContent content)
+      : base() {
+      this.Content = content;
+    }
+
+    /// <summary>
+    /// Asynchronous call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    protected new void Invoke(Delegate method) {
+      // prevents blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method);
+      result.AsyncWaitHandle.WaitOne(1000, false);
+      if (result.IsCompleted) try { EndInvoke(result); }
+        catch (ObjectDisposedException) { } else {
+        ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
+          new WaitOrTimerCallback((x, b) => { try { EndInvoke(result); } catch (ObjectDisposedException) { } }),
+          null, -1, true);
+      }
+    }
+
+    /// <summary>
+    /// Asynchronous call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    /// <param name="args">The invoke arguments.</param>
+    protected new void Invoke(Delegate method, params object[] args) {
+      // prevents blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method, args);
+      result.AsyncWaitHandle.WaitOne(1000, false);
+      if (result.IsCompleted) try { EndInvoke(result); }
+        catch (ObjectDisposedException) { } else {
+        ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
+          new WaitOrTimerCallback((x, b) => { try { EndInvoke(result); } catch (ObjectDisposedException) { } }),
+          null, -1, true);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ContentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ContentView.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ContentView.Designer.cs	(revision 3437)
@@ -0,0 +1,40 @@
+﻿namespace HeuristicLab.MainForm.WindowsForms {
+  partial class ContentView {
+    /// <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 (Content != null) DeregisterContentEvents();
+        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.SuspendLayout();
+      // 
+      // ContentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "ContentView";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ContentView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ContentView.cs	(revision 3437)
@@ -0,0 +1,111 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using System.Reflection;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class ContentView : View, IContentView {
+    private IContent content;
+    public IContent Content {
+      get { return content; }
+      set {
+        if ((value != null) && (!MainFormManager.ViewCanViewObject(this, value)))
+          throw new ArgumentException(string.Format("View \"{0}\" cannot view object \"{1}\".", this.GetType().Name, value.GetType().Name));
+        if (InvokeRequired) {
+          Invoke(new Action<IContent>(delegate(IContent o) { this.Content = o; }), value);
+        } else {
+          if (this.content != value) {
+            if (this.content != null) this.DeregisterContentEvents();
+            this.content = value;
+            if (this.content != null) this.RegisterContentEvents();
+            this.OnContentChanged();
+          }
+        }
+      }
+    }
+
+    public ContentView()
+      : base() {
+      InitializeComponent();
+      this.locked = false;
+    }
+    public ContentView(IContent content)
+      : this() {
+      this.content = content;
+    }
+
+    private bool locked;
+    public virtual bool Locked {
+      get { return this.locked; }
+      set {
+        if (InvokeRequired) {
+          Action<bool> action = delegate(bool b) { this.Locked = b; };
+          Invoke(action, value);
+        } else {
+          if (value != locked) {
+            locked = value;
+            PropertyInfo prop = typeof(IContentView).GetProperty("Locked");
+            PropagateStateChanges(this, typeof(IContentView), prop);
+            OnLockedChanged();
+            OnChanged();
+          }
+        }
+      }
+    }
+    public event EventHandler LockedChanged;
+    protected virtual void OnLockedChanged() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)OnLockedChanged);
+      else {
+        EventHandler handler = LockedChanged;
+        if (handler != null)
+          handler(this, EventArgs.Empty);
+      }
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the current instance.
+    /// </summary>
+    protected virtual void RegisterContentEvents() {
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the current instance.
+    /// </summary>
+    protected virtual void DeregisterContentEvents() {
+    }
+
+    /// <summary>
+    /// Is called when the content property changes.
+    /// </summary>
+    protected virtual void OnContentChanged() {
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ControlExtensions.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ControlExtensions.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ControlExtensions.cs	(revision 3437)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Runtime.InteropServices;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public static class ControlExtensions {
+    [DllImport("user32.dll")]
+    private static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
+
+    private const int WM_SETREDRAW = 11;
+
+    public static void SuspendRepaint(this Control control) {
+      if (control.InvokeRequired)
+        control.Invoke(new Action<Control>(c => c.SuspendRepaint()), control);
+      else
+        SendMessage(control.Handle, WM_SETREDRAW, false, 0);
+    }
+    public static void ResumeRepaint(this Control control, bool refresh) {
+      if (control.InvokeRequired)
+        control.Invoke(new Action<Control, bool>((c, b) => c.ResumeRepaint(b)), control, refresh);
+      else {
+        SendMessage(control.Handle, WM_SETREDRAW, true, 0);
+        if (refresh) control.Refresh();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockForm.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockForm.Designer.cs	(revision 3437)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class DockForm {
+    /// <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 (View != null)
+        View.CaptionChanged -= new System.EventHandler(View_CaptionChanged);
+      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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DockForm));
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewPanel.Location = new System.Drawing.Point(12, 12);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(608, 422);
+      this.viewPanel.TabIndex = 0;
+      // 
+      // DockForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.viewPanel);
+      this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.Name = "DockForm";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.ResumeLayout(false);
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockForm.cs	(revision 3437)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  /// <summary>
+  /// Displays the used view.
+  /// </summary>
+  internal partial class DockForm : DockContent {
+    public DockForm(IView view) {
+      InitializeComponent();
+      this.view = view;
+      if (view != null) {
+        if (view is UserControl) {
+          switch (((UserControl)view).Dock) {
+            case DockStyle.Left:
+              this.ShowHint = DockState.DockLeft;
+              break;
+            case DockStyle.Right:
+              this.ShowHint = DockState.DockRight;
+              break;
+            case DockStyle.Top:
+              this.ShowHint = DockState.DockTop;
+              break;
+            case DockStyle.Bottom:
+              this.ShowHint = DockState.DockBottom;
+              break;
+          }
+          Type viewType = view.GetType();
+          Control control = (Control)view;
+          control.Dock = DockStyle.Fill;
+          this.view.CaptionChanged += new EventHandler(View_CaptionChanged);
+          UpdateText();
+          viewPanel.Controls.Add(control);
+        }
+      } else {
+        Label errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No view available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(errorLabel);
+      }
+    }
+    private IView view;
+    public IView View {
+      get { return this.view; }
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else
+        this.Text = this.View.Caption;
+    }
+
+    #region View Events
+    private void View_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockingMainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockingMainForm.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockingMainForm.Designer.cs	(revision 3437)
@@ -0,0 +1,137 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class DockingMainForm {
+    /// <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() {
+      WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
+      WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
+      WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
+      WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
+      this.dockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel();
+      this.SuspendLayout();
+      // 
+      // dockPanel
+      // 
+      this.dockPanel.ActiveAutoHideContent = null;
+      this.dockPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dockPanel.DockBackColor = System.Drawing.SystemColors.Control;
+      this.dockPanel.Location = new System.Drawing.Point(0, 49);
+      this.dockPanel.Name = "dockPanel";
+      this.dockPanel.Size = new System.Drawing.Size(624, 341);
+      dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
+      dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
+      autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
+      tabGradient1.EndColor = System.Drawing.SystemColors.Control;
+      tabGradient1.StartColor = System.Drawing.SystemColors.Control;
+      tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
+      autoHideStripSkin1.TabGradient = tabGradient1;
+      dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
+      tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
+      tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
+      tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
+      dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
+      dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
+      dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
+      tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
+      tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
+      tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
+      dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
+      tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
+      tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
+      tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
+      tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
+      dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
+      tabGradient5.EndColor = System.Drawing.SystemColors.Control;
+      tabGradient5.StartColor = System.Drawing.SystemColors.Control;
+      tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
+      dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
+      dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
+      dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
+      tabGradient6.EndColor = System.Drawing.SystemColors.GradientInactiveCaption;
+      tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
+      tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
+      tabGradient6.TextColor = System.Drawing.SystemColors.ControlText;
+      dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
+      tabGradient7.EndColor = System.Drawing.Color.Transparent;
+      tabGradient7.StartColor = System.Drawing.Color.Transparent;
+      tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
+      dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
+      dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
+      dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
+      this.dockPanel.Skin = dockPanelSkin1;
+      this.dockPanel.TabIndex = 3;
+      this.dockPanel.ActiveContentChanged += new System.EventHandler(this.dockPanel_ActiveContentChanged);
+      // 
+      // DockingMainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(624, 412);
+      this.Controls.Add(this.dockPanel);
+      this.IsMdiContainer = true;
+      this.Name = "DockingMainForm";
+      this.Controls.SetChildIndex(this.dockPanel, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel;
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockingMainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockingMainForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DockingMainForm.cs	(revision 3437)
@@ -0,0 +1,88 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class DockingMainForm : MainForm {
+    public DockingMainForm()
+      : base() {
+      InitializeComponent();
+    }
+    public DockingMainForm(Type userInterfaceItemType)
+      : base(userInterfaceItemType) {
+      InitializeComponent();
+    }
+    public DockingMainForm(Type userInterfaceItemType, bool showViewsInViewHost)
+      : this(userInterfaceItemType) {
+      this.ShowViewsInViewHost = showViewsInViewHost;
+    }
+
+    protected override void ShowView(IView view, bool firstTimeShown) {
+      if (InvokeRequired) Invoke((Action<IView, bool>)ShowView, view, firstTimeShown);
+      else {
+        base.ShowView(view, firstTimeShown);
+        if (firstTimeShown)
+          ((DockForm)GetForm(view)).Show(dockPanel);
+        else
+          ((DockForm)GetForm(view)).Activate();
+      }
+    }
+
+    protected override void Hide(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)HideView, view);
+      else {
+        Form form = this.GetForm(view);
+        if (form != null) {
+          ((DockForm)form).Hide();
+        }
+      }
+    }
+
+    protected override Form CreateForm(IView view) {
+      DockForm form;
+      IContentView contentView = view as IContentView;
+      if (ShowViewsInViewHost && contentView != null && contentView.GetType() != typeof(ViewHost)) {
+        ViewHost viewHost = new ViewHost(contentView);
+        form = new DockForm(viewHost);
+        this.AddViewFormCombination(viewHost, form);
+      } else {
+        form = new DockForm(view);
+        this.AddViewFormCombination(view, form);
+      }
+      return form;
+    }
+
+    private void dockPanel_ActiveContentChanged(object sender, EventArgs e) {
+      DockForm content = this.dockPanel.ActiveContent as DockForm;
+      if (content != null)
+        this.ActiveView = content.View;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DocumentForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DocumentForm.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DocumentForm.Designer.cs	(revision 3437)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class DocumentForm {
+    /// <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 (view != null)
+        view.CaptionChanged -= new System.EventHandler(View_CaptionChanged);
+      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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocumentForm));
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewPanel.Location = new System.Drawing.Point(12, 12);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(608, 422);
+      this.viewPanel.TabIndex = 0;
+      // 
+      // ViewForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.viewPanel);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "ViewForm";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "View";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DocumentForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DocumentForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/DocumentForm.cs	(revision 3437)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  internal partial class DocumentForm : Form {
+    private IView view;
+
+    public DocumentForm() {
+      InitializeComponent();
+    }
+    public DocumentForm(IView view)
+      : this() {
+      this.view = view;
+      if (view != null) {
+        Type viewType = view.GetType();
+        Control control = (Control)view;
+        control.Dock = DockStyle.Fill;
+        view.CaptionChanged += new EventHandler(View_CaptionChanged);
+        UpdateText();
+        viewPanel.Controls.Add(control);
+      } else {
+        Label errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No view available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(errorLabel);
+      }
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else
+        Text = view.Caption;
+    }
+
+    #region View Events
+    private void View_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 3437)
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" 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>{AB687BBE-1BFE-476B-906D-44237135431D}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.MainForm.WindowsForms</RootNamespace>
+    <AssemblyName>HeuristicLab.MainForm.WindowsForms-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.MainForm.WindowsForms-3.3.xml</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x64\Release\HeuristicLab.MainForm.WindowsForms-3.3.xml</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x86\Release\HeuristicLab.MainForm.WindowsForms-3.3.xml</DocumentationFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <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>
+    <Compile Include="ActionUserInterfaceItem.cs" />
+    <Compile Include="AsynchronousContentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AsynchronousContentView.Designer.cs">
+      <DependentUpon>AsynchronousContentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ContentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ContentView.Designer.cs">
+      <DependentUpon>ContentView.cs</DependentUpon>
+    </Compile>
+    <None Include="HeuristicLabMainFormWindowsFormsPlugin.cs.frame" />
+    <Compile Include="ControlExtensions.cs" />
+    <Compile Include="AsynchronousStorableContentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AsynchronousStorableContentView.Designer.cs">
+      <DependentUpon>AsynchronousStorableContentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StorableContentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StorableContentView.Designer.cs">
+      <DependentUpon>StorableContentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DockForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="DockForm.Designer.cs">
+      <DependentUpon>DockForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DockingMainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="DockingMainForm.Designer.cs">
+      <DependentUpon>DockingMainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DocumentForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="DocumentForm.Designer.cs">
+      <DependentUpon>DocumentForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabMainFormWindowsFormsPlugin.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MenuItem.cs" />
+    <Compile Include="MultipleDocumentMainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MultipleDocumentMainForm.Designer.cs">
+      <DependentUpon>MultipleDocumentMainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SingleDocumentMainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="SingleDocumentMainForm.Designer.cs">
+      <DependentUpon>SingleDocumentMainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ToolBarItem.cs" />
+    <Compile Include="View.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="View.Designer.cs">
+      <DependentUpon>View.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ViewContextMenuStrip.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="ViewContextMenuStrip.Designer.cs">
+      <DependentUpon>ViewContextMenuStrip.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ViewHost.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ViewHost.Designer.cs">
+      <DependentUpon>ViewHost.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.2\HeuristicLab.Common.Resources-3.2.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.2</Name>
+    </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>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.WinFormsUI\2.3.1\WinFormsUI-2.3.1\WinFormsUI-2.3.1.csproj">
+      <Project>{1849A92E-DCFC-4E05-BB0A-D7B7A3DAFCFB}</Project>
+      <Name>WinFormsUI-2.3.1</Name>
+    </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>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </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>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabMainFormWindowsFormsPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabMainFormWindowsFormsPlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj.user
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj.user	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj.user	(revision 3437)
@@ -0,0 +1,5 @@
+﻿<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ShowAllFiles</ProjectView>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLabMainFormWindowsFormsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLabMainFormWindowsFormsPlugin.cs.frame	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLabMainFormWindowsFormsPlugin.cs.frame	(revision 3437)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  [Plugin("HeuristicLab.MainForm.WindowsForms", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.MainForm.WindowsForms-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.WinFormsUI", "2.3.1")]
+  public class HeuristicLabMainFormTestPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForm.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForm.Designer.cs	(revision 3437)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class MainForm {
+    /// <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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+      this.menuStrip = new System.Windows.Forms.MenuStrip();
+      this.toolStrip = new System.Windows.Forms.ToolStrip();
+      this.statusStrip = new System.Windows.Forms.StatusStrip();
+      this.SuspendLayout();
+      // 
+      // menuStrip
+      // 
+      this.menuStrip.Location = new System.Drawing.Point(0, 0);
+      this.menuStrip.Name = "menuStrip";
+      this.menuStrip.Size = new System.Drawing.Size(624, 24);
+      this.menuStrip.TabIndex = 0;
+      this.menuStrip.Text = "menuStrip";
+      // 
+      // toolStrip
+      // 
+      this.toolStrip.Location = new System.Drawing.Point(0, 24);
+      this.toolStrip.Name = "toolStrip";
+      this.toolStrip.Size = new System.Drawing.Size(624, 25);
+      this.toolStrip.TabIndex = 1;
+      // 
+      // statusStrip
+      // 
+      this.statusStrip.Location = new System.Drawing.Point(0, 390);
+      this.statusStrip.Name = "statusStrip";
+      this.statusStrip.Size = new System.Drawing.Size(624, 22);
+      this.statusStrip.TabIndex = 2;
+      this.statusStrip.Text = "statusStrip";
+      // 
+      // MainFormBase
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(624, 412);
+      this.Controls.Add(this.statusStrip);
+      this.Controls.Add(this.toolStrip);
+      this.Controls.Add(this.menuStrip);
+      this.MainMenuStrip = this.menuStrip;
+      this.Name = "MainFormBase";
+      this.Load += new System.EventHandler(this.MainFormBase_Load);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ToolStrip toolStrip;
+    protected System.Windows.Forms.StatusStrip statusStrip;
+    protected System.Windows.Forms.MenuStrip menuStrip;
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForm.cs	(revision 3437)
@@ -0,0 +1,431 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.PluginInfrastructure;
+using System.Collections;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class MainForm : Form, IMainForm {
+    private bool initialized;
+
+    protected MainForm()
+      : base() {
+      InitializeComponent();
+      this.views = new Dictionary<IView, Form>();
+      this.userInterfaceItems = new List<IUserInterfaceItem>();
+      this.initialized = false;
+      this.showViewsInViewHost = false;
+    }
+
+    protected MainForm(Type userInterfaceItemType)
+      : this() {
+      this.userInterfaceItemType = userInterfaceItemType;
+    }
+
+    #region properties
+    private bool showViewsInViewHost;
+    public bool ShowViewsInViewHost {
+      get { return this.showViewsInViewHost; }
+      set { this.showViewsInViewHost = value; }
+    }
+
+    public string Title {
+      get { return this.Text; }
+      set {
+        if (InvokeRequired) {
+          Action<string> action = delegate(string s) { this.Title = s; };
+          Invoke(action, value);
+        } else
+          this.Text = value;
+      }
+    }
+
+    public override Cursor Cursor {
+      get { return base.Cursor; }
+      set {
+        if (InvokeRequired) {
+          Action<Cursor> action = delegate(Cursor c) { this.Cursor = c; };
+          Invoke(action, value);
+        } else
+          base.Cursor = value;
+      }
+    }
+
+    private Type userInterfaceItemType;
+    public Type UserInterfaceItemType {
+      get { return this.userInterfaceItemType; }
+    }
+
+    private Dictionary<IView, Form> views;
+    public IEnumerable<IView> Views {
+      get { return views.Keys; }
+    }
+    protected void AddViewFormCombination(IView view, Form form) {
+      this.views.Add(view, form);
+      view.Changed += new EventHandler(ViewChanged);
+    }
+
+    private IView activeView;
+    public IView ActiveView {
+      get { return this.activeView; }
+      protected set {
+        if (this.activeView != value) {
+          if (InvokeRequired) {
+            Action<IView> action = delegate(IView activeView) { this.ActiveView = activeView; };
+            Invoke(action, value);
+          } else {
+            this.activeView = value;
+            OnActiveViewChanged();
+          }
+        }
+      }
+    }
+
+    private List<IUserInterfaceItem> userInterfaceItems;
+    protected IEnumerable<IUserInterfaceItem> UserInterfaceItems {
+      get { return this.userInterfaceItems; }
+    }
+    #endregion
+
+    #region events
+    public event EventHandler ActiveViewChanged;
+    protected virtual void OnActiveViewChanged() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)OnActiveViewChanged);
+      else if (ActiveViewChanged != null)
+        ActiveViewChanged(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<ViewEventArgs> ViewClosed;
+    protected virtual void OnViewClosed(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)OnViewClosed, view);
+      else {
+        EventHandler<ViewEventArgs> handler = ViewClosed;
+        if (handler != null)
+          handler(this, new ViewEventArgs(view));
+      }
+    }
+
+    public event EventHandler<ViewShownEventArgs> ViewShown;
+    protected virtual void OnViewShown(IView view, bool firstTimeShown) {
+      if (InvokeRequired) Invoke((Action<IView, bool>)OnViewShown, view, firstTimeShown);
+      else {
+        EventHandler<ViewShownEventArgs> handler = ViewShown;
+        if (handler != null)
+          handler(this, new ViewShownEventArgs(view, firstTimeShown));
+      }
+    }
+
+    public event EventHandler<ViewEventArgs> ViewHidden;
+    protected virtual void OnViewHidden(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)OnViewHidden, view);
+      else {
+        EventHandler<ViewEventArgs> handler = ViewHidden;
+        if (handler != null)
+          handler(this, new ViewEventArgs(view));
+      }
+    }
+
+    public event EventHandler Changed;
+    protected void FireMainFormChanged() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)FireMainFormChanged);
+      else {
+        EventHandler handler = Changed;
+        if (handler != null)
+          Changed(this, EventArgs.Empty);
+      }
+    }
+
+    private void MainFormBase_Load(object sender, EventArgs e) {
+      if (!DesignMode) {
+        MainFormManager.RegisterMainForm(this);
+        if (!this.initialized) {
+          this.initialized = true;
+          this.OnInitialized(EventArgs.Empty);
+        }
+        this.CreateGUI();
+      }
+    }
+
+    protected virtual void OnInitialized(EventArgs e) {
+    }
+
+    private void FormActivated(object sender, EventArgs e) {
+      this.ActiveView = GetView((Form)sender);
+    }
+
+    protected override void OnFormClosing(FormClosingEventArgs e) {
+      foreach (KeyValuePair<IView, Form> pair in this.views) {
+        DockForm dockForm = pair.Value as DockForm;
+        View view = pair.Key as View;
+        if (view != null && dockForm != null && dockForm.DockState != DockState.Document) {
+          view.CloseReason = CloseReason.ApplicationExitCall;
+          view.OnClosingHelper(dockForm, e);
+        }
+      }
+      base.OnFormClosing(e);
+    }
+
+    protected override void OnFormClosed(FormClosedEventArgs e) {
+      foreach (KeyValuePair<IView, Form> pair in this.views.ToList()) {
+        DockForm dockForm = pair.Value as DockForm;
+        View view = pair.Key as View;
+        if (view != null && dockForm != null && dockForm.DockState != DockState.Document) {
+          view.CloseReason = CloseReason.ApplicationExitCall;
+          view.OnClosedHelper(dockForm, e);
+          dockForm.Close();
+        }
+      }
+      base.OnFormClosed(e);
+    }
+    #endregion
+
+    #region create, get, show, hide, close views
+    protected virtual Form CreateForm(IView view) {
+      throw new NotImplementedException("CreateForm must be implemented in subclasses of MainForm.");
+    }
+
+    internal Form GetForm(IView view) {
+      IView internalView = GetView(view);
+      if (internalView != null && views.ContainsKey(internalView))
+        return views[internalView];
+      return null;
+    }
+    protected IView GetView(Form form) {
+      return views.Where(x => x.Value == form).Single().Key;
+    }
+    private IView GetView(IView view) {
+      if (view == null || views.ContainsKey(view))
+        return view;
+      IContentView contentView = view as IContentView;
+      if (contentView != null) {
+        IView viewHost =
+          (from ViewHost v in views.Keys.OfType<ViewHost>()
+           where v.Views.Contains(contentView)
+           select v).SingleOrDefault();
+        return viewHost;
+      }
+      return contentView;
+    }
+
+    internal void ShowView(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)ShowView, view);
+      else {
+        Form form = GetForm(view);
+        bool firstTimeShown = form == null;
+        if (form == null) {
+          form = CreateForm(view);
+          form.Activated += new EventHandler(FormActivated);
+          form.FormClosed += new FormClosedEventHandler(ChildFormClosed);
+        }
+        IView internalView = GetView(form);
+        this.ShowView(internalView, firstTimeShown);
+        this.OnViewShown(internalView, firstTimeShown);
+      }
+    }
+
+    private void ViewChanged(object sender, EventArgs e) {
+      IView view = (IView)sender;
+      if (view == this.ActiveView)
+        this.OnActiveViewChanged();
+    }
+
+    protected virtual void ShowView(IView view, bool firstTimeShown) {
+    }
+
+    internal void HideView(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)HideView, view);
+      else {
+        IView internalView = this.GetView(view);
+        if (internalView != null && this.views.ContainsKey(internalView)) {
+          this.Hide(internalView);
+          if (this.activeView == internalView)
+            this.ActiveView = null;
+          this.OnViewHidden(internalView);
+        }
+      }
+    }
+
+    protected virtual void Hide(IView view) {
+    }
+
+    private void ChildFormClosed(object sender, FormClosedEventArgs e) {
+      Form form = (Form)sender;
+      IView view = GetView(form);
+
+      view.Changed -= new EventHandler(ViewChanged);
+      form.Activated -= new EventHandler(FormActivated);
+      form.FormClosed -= new FormClosedEventHandler(ChildFormClosed);
+
+      views.Remove(view);
+      this.OnViewClosed(view);
+      if (ActiveView == view)
+        ActiveView = null;
+    }
+
+    internal void CloseView(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)CloseView, view);
+      else {
+        IView internalView = GetView(view);
+        if (internalView != null && this.views.ContainsKey(internalView)) {
+          this.views[internalView].Close();
+          this.OnViewClosed(internalView);
+        }
+      }
+    }
+
+    internal void CloseView(IView view, CloseReason closeReason) {
+      if (InvokeRequired) Invoke((Action<IView>)CloseView, view);
+      else {
+        IView internalView = GetView(view);
+        if (internalView != null && this.views.ContainsKey(internalView)) {
+          ((View)internalView).CloseReason = closeReason;
+          this.CloseView(internalView);
+        }
+      }
+    }
+
+    public void CloseAllViews() {
+      foreach (IView view in views.Keys.ToArray())
+        CloseView(view);
+    }
+
+    public void CloseAllViews(CloseReason closeReason) {
+      foreach (IView view in views.Keys.ToArray())
+        CloseView(view, closeReason);
+    }
+    #endregion
+
+    #region create menu and toolbar
+    private void CreateGUI() {
+      IEnumerable<object> allUserInterfaceItems = ApplicationManager.Manager.GetInstances(userInterfaceItemType);
+
+      IEnumerable<IPositionableUserInterfaceItem> toolStripMenuItems =
+        from mi in allUserInterfaceItems
+        where (mi is IPositionableUserInterfaceItem) &&
+              (mi is IMenuItem || mi is IMenuSeparatorItem)
+        orderby ((IPositionableUserInterfaceItem)mi).Position
+        select (IPositionableUserInterfaceItem)mi;
+
+      foreach (IPositionableUserInterfaceItem menuItem in toolStripMenuItems) {
+        if (menuItem is IMenuItem)
+          AddToolStripMenuItem((IMenuItem)menuItem);
+        else if (menuItem is IMenuSeparatorItem)
+          AddToolStripMenuItem((IMenuSeparatorItem)menuItem);
+      }
+
+      IEnumerable<IPositionableUserInterfaceItem> toolStripButtonItems =
+        from bi in allUserInterfaceItems
+        where (bi is IPositionableUserInterfaceItem) &&
+              (bi is IToolBarItem || bi is IToolBarSeparatorItem)
+        orderby ((IPositionableUserInterfaceItem)bi).Position
+        select (IPositionableUserInterfaceItem)bi;
+
+      foreach (IPositionableUserInterfaceItem toolStripButtonItem in toolStripButtonItems) {
+        if (toolStripButtonItem is IToolBarItem)
+          AddToolStripButtonItem((IToolBarItem)toolStripButtonItem);
+        else if (toolStripButtonItem is IToolBarSeparatorItem)
+          AddToolStripButtonItem((IToolBarSeparatorItem)toolStripButtonItem);
+      }
+
+      this.AdditionalCreationOfGuiElements();
+    }
+
+    protected virtual void AdditionalCreationOfGuiElements() {
+    }
+
+    private void AddToolStripMenuItem(IMenuItem menuItem) {
+      ToolStripMenuItem item = new ToolStripMenuItem();
+      this.SetToolStripItemProperties(item, menuItem);
+      if (menuItem is MenuItem) {
+        MenuItem menuItemBase = (MenuItem)menuItem;
+        menuItemBase.ToolStripItem = item;
+        item.ShortcutKeys = menuItemBase.ShortCutKeys;
+        item.DisplayStyle = menuItemBase.ToolStripItemDisplayStyle;
+      }
+      this.InsertItem(menuItem.Structure, typeof(ToolStripMenuItem), item, menuStrip.Items);
+    }
+
+    private void AddToolStripMenuItem(IMenuSeparatorItem menuItem) {
+      this.InsertItem(menuItem.Structure, typeof(ToolStripMenuItem), new ToolStripSeparator(), menuStrip.Items);
+    }
+
+    private void AddToolStripButtonItem(IToolBarItem buttonItem) {
+      ToolStripItem item = new ToolStripButton();
+      if (buttonItem is ToolBarItem) {
+        ToolBarItem buttonItemBase = (ToolBarItem)buttonItem;
+        if (buttonItemBase.IsDropDownButton)
+          item = new ToolStripDropDownButton();
+
+        item.DisplayStyle = buttonItemBase.ToolStripItemDisplayStyle;
+        buttonItemBase.ToolStripItem = item;
+      }
+
+      this.SetToolStripItemProperties(item, buttonItem);
+      this.InsertItem(buttonItem.Structure, typeof(ToolStripDropDownButton), item, toolStrip.Items);
+    }
+
+    private void AddToolStripButtonItem(IToolBarSeparatorItem buttonItem) {
+      this.InsertItem(buttonItem.Structure, typeof(ToolStripDropDownButton), new ToolStripSeparator(), toolStrip.Items);
+    }
+
+    private void InsertItem(IEnumerable<string> structure, Type t, ToolStripItem item, ToolStripItemCollection parentItems) {
+      ToolStripDropDownItem parent = null;
+      foreach (string s in structure) {
+        if (parentItems.ContainsKey(s))
+          parent = (ToolStripDropDownItem)parentItems[s];
+        else {
+          parent = (ToolStripDropDownItem)Activator.CreateInstance(t, s, null, null, s); ;
+          parentItems.Add(parent);
+        }
+        parentItems = parent.DropDownItems;
+      }
+      parentItems.Add(item);
+    }
+
+    private void SetToolStripItemProperties(ToolStripItem toolStripItem, IActionUserInterfaceItem userInterfaceItem) {
+      toolStripItem.Name = userInterfaceItem.Name;
+      toolStripItem.Text = userInterfaceItem.Name;
+      toolStripItem.ToolTipText = userInterfaceItem.ToolTipText;
+      toolStripItem.Tag = userInterfaceItem;
+      toolStripItem.Image = userInterfaceItem.Image;
+      toolStripItem.Click += new EventHandler(ToolStripItemClicked);
+      this.userInterfaceItems.Add(userInterfaceItem);
+    }
+
+    private void ToolStripItemClicked(object sender, EventArgs e) {
+      System.Windows.Forms.ToolStripItem item = (System.Windows.Forms.ToolStripItem)sender;
+      ((IActionUserInterfaceItem)item.Tag).Execute();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MenuItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MenuItem.cs	(revision 3437)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public abstract class MenuItem : ActionUserInterfaceItem,IMenuItem{
+    public virtual Keys ShortCutKeys {
+      get { return Keys.None; }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MultipleDocumentMainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MultipleDocumentMainForm.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MultipleDocumentMainForm.Designer.cs	(revision 3437)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class MultipleDocumentMainForm {
+    /// <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();
+      // 
+      // MultipleDocumentMainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(596, 407);
+      this.IsMdiContainer = true;
+      this.Name = "MultipleDocumentMainForm";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MultipleDocumentMainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MultipleDocumentMainForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MultipleDocumentMainForm.cs	(revision 3437)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class MultipleDocumentMainForm : MainForm {
+    public MultipleDocumentMainForm()
+      : base() {
+      InitializeComponent();
+    }
+    public MultipleDocumentMainForm(Type userInterfaceType)
+      : base(userInterfaceType) {
+      InitializeComponent();
+    }
+    public MultipleDocumentMainForm(Type userInterfaceItemType, bool showViewsInViewHost)
+      : this(userInterfaceItemType) {
+      this.ShowViewsInViewHost = showViewsInViewHost;
+    }
+
+    protected override void AdditionalCreationOfGuiElements() {
+      base.AdditionalCreationOfGuiElements();
+      ToolStripMenuItem window = new ToolStripMenuItem("Windows");
+      this.menuStrip.MdiWindowListItem = window;
+      this.menuStrip.Items.Add(window);
+    }
+
+    protected override void ShowView(IView view, bool firstTimeShown) {
+      if (InvokeRequired) Invoke((Action<IView, bool>)ShowView, view, firstTimeShown);
+      else {
+        base.ShowView(view, firstTimeShown);
+        if (firstTimeShown)
+          this.GetForm(view).Show();
+        else {
+          this.GetForm(view).Visible = true;
+          this.GetForm(view).Activate();
+        }
+      }
+    }
+
+    protected override void Hide(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)Hide, view);
+      else {
+        base.Hide(view);
+        Form form = this.GetForm(view);
+        if (form != null) {
+          form.Hide();
+        }
+      }
+    }
+
+    protected override Form CreateForm(IView view) {
+      Form form;
+      IContentView contentView = view as IContentView;
+      if (ShowViewsInViewHost && contentView != null && contentView.GetType() != typeof(ViewHost)) {
+        ViewHost viewHost = new ViewHost(contentView);
+        form = new DocumentForm(viewHost);
+        this.AddViewFormCombination(viewHost, form);
+      } else {
+        form = new DocumentForm(view);
+        this.AddViewFormCombination(view, form);
+      }
+
+      form.MdiParent = this;
+      return form;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.frame	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.frame	(revision 3437)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms")]
+[assembly: AssemblyDescription("Windows Forms specific classes for HeuristicLab Mainform")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 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("f9718239-4d37-4410-84d7-9c3468b01cbf")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/SingleDocumentMainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/SingleDocumentMainForm.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/SingleDocumentMainForm.Designer.cs	(revision 3437)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class SingleDocumentMainForm {
+    /// <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();
+      // 
+      // SingleDocumentMainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(624, 412);
+      this.Name = "SingleDocumentMainForm";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/SingleDocumentMainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/SingleDocumentMainForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/SingleDocumentMainForm.cs	(revision 3437)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class SingleDocumentMainForm : MainForm {
+    public SingleDocumentMainForm()
+      : base() {
+      InitializeComponent();
+    }
+    public SingleDocumentMainForm(Type userInterfaceItemType)
+      : base(userInterfaceItemType) {
+      InitializeComponent();
+    }
+    public SingleDocumentMainForm(Type userInterfaceItemType, bool showViewsInViewHost)
+      : this(userInterfaceItemType) {
+      this.ShowViewsInViewHost = showViewsInViewHost;
+    }
+
+    protected override void ShowView(IView view, bool firstTimeShown) {
+      if (InvokeRequired) Invoke((Action<IView, bool>)ShowView, view, firstTimeShown);
+      else {
+        base.ShowView(view, firstTimeShown);
+        if (firstTimeShown)
+          this.GetForm(view).Show(this);
+        else {
+          this.GetForm(view).Visible = true;
+          this.GetForm(view).Activate();
+        }
+      }
+    }
+
+    protected override void Hide(IView view) {
+      if (InvokeRequired) Invoke((Action<IView>)Hide, view);
+      else {
+        base.Hide(view);
+        Form form = this.GetForm(view);
+        if (form != null) {
+          form.Hide();
+        }
+      }
+    }
+
+    protected override Form CreateForm(IView view) {
+      Form form;
+      IContentView contentView = view as IContentView;
+      if (ShowViewsInViewHost && contentView != null && contentView.GetType() != typeof(ViewHost)) {
+        ViewHost viewHost = new ViewHost(contentView);
+        form = new DocumentForm(viewHost);
+        this.AddViewFormCombination(viewHost, form);
+      } else {
+        form = new DocumentForm(view);
+        this.AddViewFormCombination(view, form);
+      }
+
+      form.ShowInTaskbar = true;
+      return form;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/StorableContentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/StorableContentView.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/StorableContentView.Designer.cs	(revision 3437)
@@ -0,0 +1,40 @@
+﻿namespace HeuristicLab.MainForm.WindowsForms {
+  partial class StorableContentView {
+    /// <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 (Content != null) DeregisterContentEvents();
+        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.SuspendLayout();
+      // 
+      // ContentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "ContentView";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/StorableContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/StorableContentView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/StorableContentView.cs	(revision 3437)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class StorableContentView : ContentView, IStorableContentView {
+    public StorableContentView()
+      : base() {
+      InitializeComponent();
+    }
+    public StorableContentView(IStorableContent content)
+      : this() {
+      this.Content = content;
+    }
+
+    public new IStorableContent Content {
+      get { return (IStorableContent)base.Content; }
+      set { base.Content = value; }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ToolBarItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ToolBarItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ToolBarItem.cs	(revision 3437)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public abstract class ToolBarItem : ActionUserInterfaceItem, IToolBarItem {
+    public virtual bool IsDropDownButton {
+      get { return false; }
+    }
+
+    public override ToolStripItemDisplayStyle ToolStripItemDisplayStyle {
+      get { return ToolStripItemDisplayStyle.Image; }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/View.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/View.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/View.Designer.cs	(revision 3437)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class View {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // ViewBase
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "ViewBase";
+      this.Load += new System.EventHandler(this.View_Load);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/View.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/View.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/View.cs	(revision 3437)
@@ -0,0 +1,244 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Linq;
+using System.Windows.Forms;
+using System.Reflection;
+using System.ComponentModel;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public partial class View : UserControl, IView {
+    private bool initialized;
+    public View() {
+      InitializeComponent();
+      this.initialized = false;
+      this.isShown = false;
+      this.closeReason = CloseReason.None;
+      this.readOnly = false;
+    }
+
+    public View(bool readOnly)
+      : this() {
+      this.readOnly = readOnly;
+    }
+
+    private string caption;
+    public string Caption {
+      get { return caption; }
+      set {
+        if (InvokeRequired) {
+          Action<string> action = delegate(string s) { this.Caption = s; };
+          Invoke(action, value);
+        } else {
+          if (value != caption) {
+            caption = value;
+            OnCaptionChanged();
+          }
+        }
+      }
+    }
+
+    private bool readOnly;
+    public virtual bool ReadOnly {
+      get { return this.readOnly; }
+      set {
+        if (InvokeRequired) {
+          Action<bool> action = delegate(bool b) { this.ReadOnly = b; };
+          Invoke(action, value);
+        } else {
+          if (value != readOnly) {
+            readOnly = value;
+            PropertyInfo prop = typeof(IView).GetProperty("ReadOnly");
+            PropagateStateChanges(this, typeof(IView), prop);
+            OnReadOnlyChanged();
+          }
+        }
+      }
+    }
+
+    private bool isShown;
+    public bool IsShown {
+      get { return this.isShown; }
+      private set { this.isShown = value; }
+    }
+
+    public new void Show() {
+      MainForm mainform = MainFormManager.GetMainForm<MainForm>();
+      bool firstTimeShown = mainform.GetForm(this) == null;
+
+      this.IsShown = true;
+      mainform.ShowView(this);
+      if (firstTimeShown) {
+        Form form = mainform.GetForm(this);
+        form.FormClosed += new FormClosedEventHandler(OnClosedHelper);
+        form.FormClosing += new FormClosingEventHandler(OnClosingHelper);
+      }
+      this.OnShown(new ViewShownEventArgs(this, firstTimeShown));
+    }
+
+    public void Close() {
+      MainForm mainform = MainFormManager.GetMainForm<MainForm>();
+      Form form = mainform.GetForm(this);
+      if (form != null) {
+        this.IsShown = false;
+        mainform.CloseView(this);
+      }
+    }
+
+    public void Close(CloseReason closeReason) {
+      MainForm mainform = MainFormManager.GetMainForm<MainForm>();
+      Form form = mainform.GetForm(this);
+      if (form != null) {
+        this.IsShown = false;
+        mainform.CloseView(this, closeReason);
+      }
+    }
+
+    public new void Hide() {
+      this.IsShown = false;
+      MainFormManager.GetMainForm<MainForm>().HideView(this);
+      this.OnHidden(EventArgs.Empty);
+    }
+
+    public event EventHandler CaptionChanged;
+    protected virtual void OnCaptionChanged() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)OnCaptionChanged);
+      else {
+        EventHandler handler = CaptionChanged;
+        if (handler != null)
+          handler(this, EventArgs.Empty);
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected virtual void OnReadOnlyChanged() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)OnReadOnlyChanged);
+      else {
+        EventHandler handler = ReadOnlyChanged;
+        if (handler != null)
+          handler(this, EventArgs.Empty);
+      }
+    }
+    protected void PropagateStateChanges(Control control, Type type, PropertyInfo propertyInfo) {
+      if (!type.GetProperties().Contains(propertyInfo))
+        throw new ArgumentException("The specified type " + type + "implement the property " + propertyInfo.Name + ".");
+      if (!type.IsAssignableFrom(this.GetType()))
+        throw new ArgumentException("The specified type " + type + "must be the same or a base class / interface of this object.");
+      if (!propertyInfo.CanWrite)
+        throw new ArgumentException("The specified property " + propertyInfo.Name + " must have a setter.");
+
+      foreach (Control c in control.Controls) {
+        Type controlType = c.GetType();
+        PropertyInfo controlPropertyInfo = controlType.GetProperty(propertyInfo.Name, propertyInfo.PropertyType);
+        if (type.IsAssignableFrom(controlType) && controlPropertyInfo != null) {
+          var thisValue = propertyInfo.GetValue(this, null);
+          controlPropertyInfo.SetValue(c, thisValue, null);
+        } else
+          PropagateStateChanges(c, type, propertyInfo);
+      }
+    }
+    public event EventHandler Changed;
+    protected virtual void OnChanged() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)OnChanged);
+      else {
+        EventHandler handler = Changed;
+        if (handler != null)
+          handler(this, EventArgs.Empty);
+      }
+    }
+
+    internal protected virtual void OnShown(ViewShownEventArgs e) {
+    }
+
+    internal protected virtual void OnHidden(EventArgs e) {
+    }
+
+    private CloseReason closeReason;
+    internal CloseReason CloseReason {
+      get { return this.closeReason; }
+      set { this.closeReason = value; }
+    }
+
+    internal void OnClosingHelper(object sender, FormClosingEventArgs e) {
+      FormClosingEventArgs eventArgs = new FormClosingEventArgs(this.closeReason, e.Cancel);
+      if (this.closeReason != CloseReason.None) {
+        this.OnClosing(eventArgs);
+        if (eventArgs.Cancel != e.Cancel)
+          e.Cancel = eventArgs.Cancel;
+      } else
+        this.OnClosing(e);
+      this.closeReason = CloseReason.None;
+    }
+
+    internal protected virtual void OnClosing(FormClosingEventArgs e) {
+    }
+
+    internal void OnClosedHelper(object sender, FormClosedEventArgs e) {
+      if (this.closeReason != CloseReason.None)
+        this.OnClosed(new FormClosedEventArgs(this.closeReason));
+      else
+        this.OnClosed(e);
+
+      Form form = (Form)sender;
+      form.FormClosed -= new FormClosedEventHandler(OnClosedHelper);
+      form.FormClosing -= new FormClosingEventHandler(OnClosingHelper);
+      this.closeReason = CloseReason.None;
+    }
+
+    internal protected virtual void OnClosed(FormClosedEventArgs e) {
+    }
+
+    private void View_Load(object sender, EventArgs e) {
+      if (!this.initialized && !this.DesignMode) {
+        this.OnInitialized(e);
+        this.initialized = true;
+      }
+    }
+
+    protected virtual void OnInitialized(EventArgs e) {
+    }
+
+    public new bool Enabled {
+      get { return base.Enabled; }
+      set {
+        SuspendRepaint();
+        base.Enabled = value;
+        ResumeRepaint(true);
+      }
+    }
+
+    public void SuspendRepaint() {
+      if (InvokeRequired)
+        Invoke((MethodInvoker)SuspendRepaint);
+      else
+        ((Control)this).SuspendRepaint();
+    }
+    public void ResumeRepaint(bool refresh) {
+      if (InvokeRequired)
+        Invoke((Action<bool>)ResumeRepaint, refresh);
+      else
+        ((Control)this).ResumeRepaint(refresh);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewContextMenuStrip.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewContextMenuStrip.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewContextMenuStrip.Designer.cs	(revision 3437)
@@ -0,0 +1,35 @@
+﻿namespace HeuristicLab.MainForm.WindowsForms {
+  partial class ViewContextMenuStrip {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // ViewContextMenuStrip
+      // 
+      this.ResumeLayout(false);
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewContextMenuStrip.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewContextMenuStrip.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewContextMenuStrip.cs	(revision 3437)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  public sealed partial class ViewContextMenuStrip : ContextMenuStrip {
+    public ViewContextMenuStrip() {
+      InitializeComponent();
+      this.menuItems = new Dictionary<Type, ToolStripMenuItem>();
+      this.ignoredViewTypes = new List<Type>();
+    }
+
+    public ViewContextMenuStrip(object item)
+      : this() {
+      this.Item = item;
+    }
+
+    private object item;
+    public object Item {
+      get { return this.item; }
+      set {
+        if (this.item != value) {
+          this.item = value;
+          this.RefreshMenuItems();
+        }
+      }
+    }
+
+    private List<Type> ignoredViewTypes;
+    public IEnumerable<Type> IgnoredViewTypes {
+      get { return this.ignoredViewTypes; }
+      set { this.ignoredViewTypes = new List<Type>(value); RefreshMenuItems(); }
+    }
+
+    private Dictionary<Type, ToolStripMenuItem> menuItems;
+    public IEnumerable<KeyValuePair<Type, ToolStripMenuItem>> MenuItems {
+      get { return this.menuItems; }
+    }
+
+    private void RefreshMenuItems() {
+      this.Items.Clear();
+      this.menuItems.Clear();
+
+      if (this.item != null) {
+        ToolStripMenuItem menuItem;
+        IEnumerable<Type> types = MainFormManager.GetViewTypes(item.GetType(),true);
+        foreach (Type t in types.Except(IgnoredViewTypes)) {
+          menuItem = new ToolStripMenuItem();
+          menuItem.Tag = t;
+          menuItem.Text = ViewAttribute.GetViewName(t);
+
+          this.menuItems.Add(t, menuItem);
+          this.Items.Add(menuItem);
+        }
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewHost.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewHost.Designer.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewHost.Designer.cs	(revision 3437)
@@ -0,0 +1,120 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm.WindowsForms {
+  partial class ViewHost {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ViewHost));
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.messageLabel = new System.Windows.Forms.Label();
+      this.viewsLabel = new System.Windows.Forms.Label();
+      this.viewContextMenuStrip = new HeuristicLab.MainForm.WindowsForms.ViewContextMenuStrip();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewPanel.Location = new System.Drawing.Point(0, 0);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(205, 184);
+      this.viewPanel.TabIndex = 1;
+      // 
+      // messageLabel
+      // 
+      this.messageLabel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.messageLabel.Location = new System.Drawing.Point(0, 0);
+      this.messageLabel.Name = "messageLabel";
+      this.messageLabel.Size = new System.Drawing.Size(227, 184);
+      this.messageLabel.TabIndex = 2;
+      this.messageLabel.Text = "No view available.";
+      this.messageLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      // 
+      // viewsLabel
+      // 
+      this.viewsLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewsLabel.ContextMenuStrip = this.viewContextMenuStrip;
+      this.viewsLabel.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Windows;
+      this.viewsLabel.Location = new System.Drawing.Point(211, 0);
+      this.viewsLabel.Name = "viewsLabel";
+      this.viewsLabel.Size = new System.Drawing.Size(16, 16);
+      this.viewsLabel.TabIndex = 0;
+      this.toolTip.SetToolTip(this.viewsLabel, "Double-click to open a new window of the current view.\r\nRight-click to change cur" +
+              "rent view.\r\nDrag icon to copy or link content to another view.");
+      this.viewsLabel.MouseLeave += new System.EventHandler(this.viewsLabel_MouseLeave);
+      this.viewsLabel.DoubleClick += new System.EventHandler(this.viewsLabel_DoubleClick);
+      this.viewsLabel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.viewsLabel_MouseDown);
+      // 
+      // viewContextMenuStrip
+      // 
+      this.viewContextMenuStrip.Item = null;
+      this.viewContextMenuStrip.Name = "viewContextMenuStrip";
+      this.viewContextMenuStrip.Size = new System.Drawing.Size(61, 4);
+      this.viewContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.viewContextMenuStrip_ItemClicked);
+      // 
+      // ViewHost
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.viewPanel);
+      this.Controls.Add(this.viewsLabel);
+      this.Controls.Add(this.messageLabel);
+      this.Name = "ViewHost";
+      this.Size = new System.Drawing.Size(227, 184);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+    private System.Windows.Forms.Label viewsLabel;
+    private System.Windows.Forms.Label messageLabel;
+    private System.Windows.Forms.ToolTip toolTip;
+    private HeuristicLab.MainForm.WindowsForms.ViewContextMenuStrip viewContextMenuStrip;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewHost.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewHost.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/ViewHost.cs	(revision 3437)
@@ -0,0 +1,282 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Common;
+
+namespace HeuristicLab.MainForm.WindowsForms {
+  [Content(typeof(object))]
+  public sealed partial class ViewHost : AsynchronousContentView {
+    public ViewHost() {
+      InitializeComponent();
+      cachedViews = new Dictionary<Type, IContentView>();
+      viewType = null;
+      Content = null;
+      startDragAndDrop = false;
+      viewContextMenuStrip.IgnoredViewTypes = new List<Type>() { typeof(ViewHost) };
+      activeView = null;
+    }
+    public ViewHost(IContent content)
+      : this() {
+      this.Content = content;
+    }
+
+    public ViewHost(IContentView contentView)
+      : this() {
+      this.viewType = contentView.GetType();
+      this.Content = contentView.Content;
+      this.cachedViews.Add(contentView.GetType(), contentView);
+      this.activeView = contentView;
+      this.RegisterActiveViewEvents();
+      this.OnViewTypeChanged();
+      this.ActiveViewChanged();
+    }
+
+    private Dictionary<Type, IContentView> cachedViews;
+    public IEnumerable<IContentView> Views {
+      get { return cachedViews.Values; }
+    }
+
+    private IContentView activeView;
+    public IContentView ActiveView {
+      get { return this.activeView; }
+      private set {
+        if (activeView != value) {
+          if (activeView != null) {
+            DeregisterActiveViewEvents();
+            View view = activeView as View;
+            if (view != null)
+              view.OnHidden(EventArgs.Empty);
+          }
+          activeView = value;
+          if (activeView != null) {
+            RegisterActiveViewEvents();
+            View view = activeView as View;
+            if (view != null)
+              view.OnShown(new ViewShownEventArgs(view, false));
+          }
+          ActiveViewChanged();
+          OnViewTypeChanged();
+        }
+      }
+    }
+    private Type viewType;
+    public Type ViewType {
+      get { return this.viewType; }
+      set {
+        if (viewType != value) {
+          if (value != null && !ViewCanShowContent(value, Content))
+            throw new ArgumentException(string.Format("View \"{0}\" cannot display content \"{1}\".",
+                                                      value, Content.GetType()));
+          viewType = value;
+          OnViewTypeChanged();
+        }
+      }
+    }
+    public new IContent Content {
+      get { return base.Content; }
+      set {
+        if (value == null || this.Content == null || value.GetType() != this.Content.GetType())
+          cachedViews.Clear();
+        viewContextMenuStrip.Item = value;
+        this.viewsLabel.Enabled = value != null;
+        base.Content = value;
+      }
+    }
+
+    public new bool Enabled {
+      get { return base.Enabled; }
+      set {
+        this.SuspendRepaint();
+        base.Enabled = value;
+        this.viewsLabel.Enabled = value;
+        this.ResumeRepaint(true);
+      }
+    }
+
+
+
+    protected override void OnContentChanged() {
+      messageLabel.Visible = false;
+      viewsLabel.Visible = false;
+      viewPanel.Visible = false;
+
+      if (Content != null) {
+        if (viewContextMenuStrip.Items.Count == 0)
+          messageLabel.Visible = true;
+        else
+          viewsLabel.Visible = true;
+
+        if (!ViewCanShowContent(viewType, Content)) {
+          ViewType = MainFormManager.GetDefaultViewType(Content.GetType());
+          if ((viewType == null) && (viewContextMenuStrip.Items.Count > 0))  // create first available view if default view is not available
+            ViewType = (Type)viewContextMenuStrip.Items[0].Tag;
+        }
+
+        foreach (IContentView view in cachedViews.Values)
+          view.Content = this.Content;
+      } else {
+        if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
+        viewPanel.Controls.Clear();
+        cachedViews.Clear();
+      }
+    }
+
+
+    private void OnViewTypeChanged() {
+      viewPanel.Controls.Clear();
+      if (viewType == null || Content == null)
+        return;
+      if (!ViewCanShowContent(viewType, Content))
+        throw new InvalidOperationException(string.Format("View \"{0}\" cannot display content \"{1}\".",
+                                                          viewType, Content.GetType()));
+
+      UpdateActiveMenuItem();
+      IContentView view;
+      if (cachedViews.ContainsKey(ViewType))
+        view = cachedViews[ViewType];
+      else {
+        view = MainFormManager.CreateView(viewType, Content);
+        view.ReadOnly = this.ReadOnly;
+        view.Locked = this.Locked;
+        cachedViews.Add(viewType, view);
+      }
+      this.ActiveView = view;
+
+      Control control = (Control)view;
+      control.Dock = DockStyle.Fill;
+      viewPanel.Controls.Add(control);
+      viewPanel.Visible = true;
+    }
+
+
+
+    private void RegisterActiveViewEvents() {
+      activeView.Changed += new EventHandler(activeView_Changed);
+      activeView.CaptionChanged += new EventHandler(activeView_CaptionChanged);
+    }
+    private void DeregisterActiveViewEvents() {
+      activeView.Changed -= new EventHandler(activeView_Changed);
+      activeView.CaptionChanged -= new EventHandler(activeView_CaptionChanged);
+    }
+    private void activeView_CaptionChanged(object sender, EventArgs e) {
+      this.ActiveViewChanged();
+    }
+    private void activeView_Changed(object sender, EventArgs e) {
+      this.ActiveViewChanged();
+    }
+    private void ActiveViewChanged() {
+      if (ActiveView != null) {
+        this.Caption = this.ActiveView.Caption;
+        this.Locked = this.ActiveView.Locked;
+      }
+    }
+
+    #region forwarding of view events
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      foreach (IContentView view in cachedViews.Values)
+        view.ReadOnly = this.ReadOnly;
+    }
+    protected override void OnLockedChanged() {
+      base.OnLockedChanged();
+      foreach (IContentView view in cachedViews.Values)
+        view.Locked = this.Locked;
+    }
+    internal protected override void OnShown(ViewShownEventArgs e) {
+      base.OnShown(e);
+      View view = this.ActiveView as View;
+      if (view != null)
+        view.OnShown(e);
+    }
+    internal protected override void OnHidden(EventArgs e) {
+      base.OnHidden(e);
+      View view = this.ActiveView as View;
+      if (view != null)
+        view.OnHidden(e);
+    }
+    internal protected override void OnClosing(FormClosingEventArgs e) {
+      base.OnClosing(e);
+      foreach (View view in this.Views.OfType<View>())
+        view.OnClosing(e);
+    }
+    internal protected override void OnClosed(FormClosedEventArgs e) {
+      base.OnClosed(e);
+      foreach (View view in this.Views.OfType<View>())
+        view.OnClosed(e);
+    }
+    #endregion
+
+    #region GUI actions
+    private void UpdateActiveMenuItem() {
+      foreach (KeyValuePair<Type, ToolStripMenuItem> item in viewContextMenuStrip.MenuItems) {
+        if (item.Key == viewType) {
+          item.Value.Checked = true;
+          item.Value.Enabled = false;
+        } else {
+          item.Value.Checked = false;
+          item.Value.Enabled = true;
+        }
+      }
+    }
+
+    private bool ViewCanShowContent(Type viewType, object content) {
+      if (content == null) // every view can display null
+        return true;
+      if (viewType == null)
+        return false;
+      return ContentAttribute.CanViewType(viewType, Content.GetType()) && viewContextMenuStrip.MenuItems.Any(item => item.Key == viewType);
+    }
+
+    private void viewsLabel_DoubleClick(object sender, EventArgs e) {
+      IContentView view = MainFormManager.CreateView(viewType, Content);
+      view.ReadOnly = this.ReadOnly;
+      view.Locked = this.Locked;
+      view.Show();
+    }
+    private void viewContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {
+      Type viewType = (Type)e.ClickedItem.Tag;
+      ViewType = viewType;
+    }
+
+    private bool startDragAndDrop;
+    private void viewsLabel_MouseDown(object sender, MouseEventArgs e) {
+      if (!Locked) {
+        startDragAndDrop = true;
+        viewsLabel.Capture = false;
+      }
+    }
+    private void viewsLabel_MouseLeave(object sender, EventArgs e) {
+      if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left && startDragAndDrop) {
+        DataObject data = new DataObject();
+        data.SetData("Type", Content.GetType());
+        data.SetData("Value", Content);
+        DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+      } else
+        startDragAndDrop = false;
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm-3.2.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm-3.2.csproj	(revision 3437)
@@ -110,7 +110,7 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
-      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
-      <Name>HeuristicLab.Common-3.3</Name>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
+      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
+      <Name>HeuristicLab.Common-3.2</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLabMainFormPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLabMainFormPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLabMainFormPlugin.cs.frame	(revision 3437)
@@ -28,4 +28,5 @@
   [Plugin("HeuristicLab.MainForm", "3.2.0.$WCREV$")]
   [PluginFile("HeuristicLab.MainForm-3.2.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.2")]
   public class HeuristicLabMainFormPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.MainForm/3.3/ActionUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/ActionUserInterfaceItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/ActionUserInterfaceItem.cs	(revision 3437)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public abstract class ActionUserInterfaceItem : PositionableUserInterfaceItem, IActionUserInterfaceItem {
+    protected ActionUserInterfaceItem() {
+      MainFormManager.MainForm.ActiveViewChanged += this.OnActiveViewChanged;
+      MainFormManager.MainForm.Changed += this.OnMainFormChanged;
+      MainFormManager.MainForm.ViewShown += this.OnViewShown;
+      MainFormManager.MainForm.ViewClosed += this.OnViewClosed;
+    }
+
+    public abstract string Name { get; }
+
+    public virtual System.Drawing.Image Image {
+      get { return null; }
+    }
+
+    public virtual string ToolTipText {
+      get { return string.Empty; }
+    }
+
+    public abstract void Execute();
+
+    protected virtual void OnActiveViewChanged(object sender, EventArgs e) {
+    }
+
+    protected virtual void OnMainFormChanged(object sender, EventArgs e) {
+    }
+
+    protected virtual void OnViewChanged(object sender, EventArgs e) {
+    }
+
+    private void OnViewShown(object sender, ViewShownEventArgs e) {
+      if (e.FirstTimeShown)
+        e.View.Changed += this.OnViewChanged;
+    }
+
+    private void OnViewClosed(object sender, ViewEventArgs e) {
+      e.View.Changed -= this.OnViewChanged;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/ContentAttribute.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/ContentAttribute.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/ContentAttribute.cs	(revision 3437)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Reflection;
+
+namespace HeuristicLab.MainForm {
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
+  public sealed class ContentAttribute : Attribute {
+    public ContentAttribute(Type contentType) {
+      this.contentType = contentType;
+    }
+
+    public ContentAttribute(Type contentType, bool isDefaultView)
+      : this(contentType) {
+      this.isDefaultView = isDefaultView;
+    }
+
+    private bool isDefaultView;
+    public bool IsDefaultView {
+      get { return this.isDefaultView; }
+      set { this.isDefaultView = value; }
+    }
+
+    private Type contentType;
+    public Type ContentType {
+      get { return this.contentType; }
+    }
+
+    public static bool HasContentAttribute(MemberInfo viewType) {
+      ContentAttribute[] attributes = (ContentAttribute[])viewType.GetCustomAttributes(typeof(ContentAttribute), false);
+      return attributes.Length != 0;
+    }
+
+    public static bool CanViewType(MemberInfo viewType, Type content) {
+      ContentAttribute[] attributes = (ContentAttribute[])viewType.GetCustomAttributes(typeof(ContentAttribute), false);
+      return attributes.Any(a => content.IsAssignableTo(a.contentType));
+    }
+
+    internal static IEnumerable<Type> GetDefaultViewableTypes(Type viewType) {
+      ContentAttribute[] attributes = (ContentAttribute[])viewType.GetCustomAttributes(typeof(ContentAttribute), false);
+      return from a in attributes
+             where a.isDefaultView
+             select a.contentType;
+    }
+
+    internal static IEnumerable<Type> GetViewableTypes(Type viewType) {
+      ContentAttribute[] attributes = (ContentAttribute[])viewType.GetCustomAttributes(typeof(ContentAttribute), false);
+      return from a in attributes
+             select a.contentType;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj	(revision 3437)
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" 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>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.MainForm</RootNamespace>
+    <AssemblyName>HeuristicLab.MainForm-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.MainForm-3.3.xml</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x64\Release\HeuristicLab.MainForm-3.3.xml</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x86\Release\HeuristicLab.MainForm-3.3.xml</DocumentationFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <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>
+    <None Include="HeuristicLabMainFormPlugin.cs.frame" />
+    <Compile Include="Interfaces\IStorableContentView.cs" />
+    <Compile Include="ViewAttribute.cs" />
+    <Compile Include="Interfaces\IContentView.cs" />
+    <Compile Include="Interfaces\IActionUserInterfaceItem.cs" />
+    <Compile Include="Interfaces\IPositionableUserInterfaceItem.cs" />
+    <Compile Include="PositionableUserInterfaceItem.cs" />
+    <Compile Include="TypeExtension.cs" />
+    <Compile Include="ViewShownEventArgs.cs" />
+    <Compile Include="ViewEventArgs.cs" />
+    <Compile Include="ToolBarSeparatorItem.cs" />
+    <Compile Include="Interfaces\IToolBarSeparatorItem.cs" />
+    <Compile Include="Interfaces\IMenuItem.cs" />
+    <Compile Include="Interfaces\IMenuSeparatorItem.cs" />
+    <Compile Include="Interfaces\IToolBarItem.cs" />
+    <Compile Include="MainFormManager.cs" />
+    <Compile Include="MenuSeparatorItem.cs" />
+    <Compile Include="HeuristicLabMainFormPlugin.cs" />
+    <Compile Include="Interfaces\IMainForm.cs" />
+    <Compile Include="Interfaces\IUserInterfaceItem.cs" />
+    <Compile Include="Interfaces\IView.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ActionUserInterfaceItem.cs" />
+    <Compile Include="ContentAttribute.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </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>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabMainFormPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabMainFormPlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.MainForm/3.3/HeuristicLabMainFormPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/HeuristicLabMainFormPlugin.cs.frame	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/HeuristicLabMainFormPlugin.cs.frame	(revision 3437)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Modeling.Database {
+  [Plugin("HeuristicLab.MainForm", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.MainForm-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  public class HeuristicLabMainFormPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IActionUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IActionUserInterfaceItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IActionUserInterfaceItem.cs	(revision 3437)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Drawing;
+
+namespace HeuristicLab.MainForm {
+  public interface IActionUserInterfaceItem : IPositionableUserInterfaceItem {
+    string Name { get; }
+
+    Image Image { get; }
+    string ToolTipText { get; }
+
+    void Execute();
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IContentView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IContentView.cs	(revision 3437)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm {
+  public interface IContentView : IView {
+    IContent Content { get; set; }
+    bool Locked { get; set; }
+    event EventHandler LockedChanged;
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMainForm.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMainForm.cs	(revision 3437)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Drawing;
+using System.ComponentModel;
+
+namespace HeuristicLab.MainForm {
+  public interface IMainForm {
+    string Title { get; set; }
+
+    IView ActiveView { get; }
+    IEnumerable<IView> Views { get; }
+
+    event EventHandler ActiveViewChanged;
+    event EventHandler Changed;
+
+    event EventHandler<ViewEventArgs> ViewClosed;
+    event EventHandler<ViewShownEventArgs> ViewShown;
+    event EventHandler<ViewEventArgs> ViewHidden;
+
+    Type UserInterfaceItemType { get; }
+    void CloseAllViews();
+    void Close();
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMenuItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMenuItem.cs	(revision 3437)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Drawing;
+
+namespace HeuristicLab.MainForm {
+  public interface IMenuItem : IActionUserInterfaceItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMenuSeparatorItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMenuSeparatorItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IMenuSeparatorItem.cs	(revision 3437)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public interface IMenuSeparatorItem : IPositionableUserInterfaceItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IPositionableUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IPositionableUserInterfaceItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IPositionableUserInterfaceItem.cs	(revision 3437)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public interface IPositionableUserInterfaceItem : IUserInterfaceItem {
+    int Position { get; }
+    IEnumerable<string> Structure { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IStorableContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IStorableContentView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IStorableContentView.cs	(revision 3437)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm {
+  public interface IStorableContentView : IContentView {
+    new IStorableContent Content { get; set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IToolBarItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IToolBarItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IToolBarItem.cs	(revision 3437)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public interface IToolBarItem : IActionUserInterfaceItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IToolBarSeparatorItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IToolBarSeparatorItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IToolBarSeparatorItem.cs	(revision 3437)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public interface IToolBarSeparatorItem : IPositionableUserInterfaceItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IUserInterfaceItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IUserInterfaceItem.cs	(revision 3437)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Drawing;
+
+namespace HeuristicLab.MainForm {
+  public interface IUserInterfaceItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IView.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IView.cs	(revision 3437)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+
+namespace HeuristicLab.MainForm {
+  public interface IView {
+    bool IsShown { get; }
+    string Caption { get; set; }
+    bool ReadOnly { get; set; }
+    event EventHandler ReadOnlyChanged;
+    event EventHandler CaptionChanged;
+    event EventHandler Changed;
+
+    void Show();
+    void Hide();
+    void Close();
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/MainFormManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/MainFormManager.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/MainFormManager.cs	(revision 3437)
@@ -0,0 +1,228 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using HeuristicLab.PluginInfrastructure;
+using System.Diagnostics;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm {
+  public static class MainFormManager {
+    private static object locker;
+    private static IMainForm mainform;
+    private static HashSet<Type> views;
+    private static Dictionary<Type, Type> defaultViews;
+
+    static MainFormManager() {
+      locker = new object();
+      mainform = null;
+      views = new HashSet<Type>();
+      defaultViews = new Dictionary<Type, Type>();
+    }
+
+    public static void RegisterMainForm(IMainForm mainForm) {
+      lock (locker) {
+        if (MainFormManager.mainform != null)
+          throw new ArgumentException("A mainform was already associated with the mainform manager.");
+        if (mainForm == null)
+          throw new ArgumentException("Could not associate null as a mainform in the mainform manager.");
+
+        MainFormManager.mainform = mainForm;
+        IEnumerable<Type> types =
+          from t in ApplicationManager.Manager.GetTypes(typeof(IContentView))
+          where !t.IsAbstract && !t.IsInterface && ContentAttribute.HasContentAttribute(t)
+          select t;
+
+        foreach (Type viewType in types) {
+          views.Add(viewType);
+          foreach (Type contentType in ContentAttribute.GetDefaultViewableTypes(viewType)) {
+            if (defaultViews.ContainsKey(contentType))
+              throw new ArgumentException("DefaultView for type " + contentType + " is " + defaultViews[contentType] +
+                ". Can't register additional DefaultView " + viewType + ".");
+            defaultViews[contentType] = viewType;
+          }
+        }
+      }
+    }
+
+    public static IMainForm MainForm {
+      get { return mainform; }
+    }
+
+    public static T GetMainForm<T>() where T : IMainForm {
+      return (T)mainform;
+    }
+
+    public static IEnumerable<Type> GetViewTypes(Type contentType) {
+      CheckForContentType(contentType);
+      List<Type> viewTypes = (from v in views
+                              where ContentAttribute.CanViewType(v, contentType)
+                              select v).ToList();
+      //transform generic type definitions to generic types
+      for (int i = 0; i < viewTypes.Count; i++) {
+        viewTypes[i] = TransformGenericTypeDefinition(viewTypes[i], contentType);
+      }
+      return viewTypes.Where(t => t != null);
+    }
+
+    public static IEnumerable<Type> GetViewTypes(Type contentType, bool returnOnlyMostSpecificViewTypes) {
+      CheckForContentType(contentType);
+      List<Type> viewTypes = new List<Type>(GetViewTypes(contentType));
+      if (returnOnlyMostSpecificViewTypes) {
+        Type defaultViewType = null;
+        try {
+          defaultViewType = GetDefaultViewType(contentType);
+        }
+        catch (InvalidOperationException) { }
+
+        foreach (Type viewType in viewTypes.ToList()) {
+          if ((viewType != defaultViewType) && viewTypes.Any(t => t.IsSubclassOf(viewType)))
+            viewTypes.Remove(viewType);
+        }
+      }
+      return viewTypes;
+    }
+
+    public static bool ViewCanViewObject(IContentView view, IContent content) {
+      return ContentAttribute.CanViewType(view.GetType(), content.GetType());
+    }
+
+    public static Type GetDefaultViewType(Type contentType) {
+      CheckForContentType(contentType);
+      //check base classes for default view
+      Type type = contentType;
+      while (type != null) {
+        //check classes
+        foreach (Type defaultContentType in defaultViews.Keys) {
+          if (type == defaultContentType || type.CheckGenericTypes(defaultContentType))
+            return TransformGenericTypeDefinition(defaultViews[defaultContentType], contentType);
+        }
+
+        //check interfaces
+        IEnumerable<Type> nonInheritedInterfaces = type.GetInterfaces().Where(i => !i.IsAssignableFrom(type.BaseType));
+        List<Type> defaultViewList = new List<Type>();
+        foreach (Type defaultContentType in defaultViews.Keys) {
+          if (nonInheritedInterfaces.Contains(defaultContentType) || nonInheritedInterfaces.Any(i => i.CheckGenericTypes(defaultContentType)))
+            defaultViewList.Add(defaultViews[defaultContentType]);
+        }
+
+        //return only most spefic view as default view
+        foreach (Type viewType in defaultViewList.ToList()) {
+          if (defaultViewList.Any(t => t.IsSubclassOf(viewType)))
+            defaultViewList.Remove(viewType);
+        }
+
+        if (defaultViewList.Count == 1)
+          return TransformGenericTypeDefinition(defaultViewList[0], contentType);
+        else if (defaultViewList.Count > 1)
+          throw new InvalidOperationException("Could not determine which is the default view for type " + contentType.ToString() + ". Because more than one implemented interfaces have a default view.");
+
+        type = type.BaseType;
+      }
+
+      return null;
+    }
+
+    public static IContentView CreateDefaultView(object content) {
+      Type t = GetDefaultViewType(content.GetType());
+      if (t == null)
+        return null;
+
+      return (IContentView)Activator.CreateInstance(t, content);
+    }
+    public static IContentView CreateView(Type viewType) {
+      if (!typeof(IView).IsAssignableFrom(viewType))
+        throw new ArgumentException("View can not be created becaues given type " + viewType.ToString() + " is not of type IView.");
+      if (viewType.IsGenericTypeDefinition)
+        throw new ArgumentException("View can not be created becaues given type " + viewType.ToString() + " is a generic type definition.");
+
+      return (IContentView)Activator.CreateInstance(viewType);
+    }
+    public static IContentView CreateView(Type viewType, object content) {
+      CheckForContentType(content.GetType());
+      CheckForContentViewType(viewType);
+
+      Type view = viewType;
+      if (view.IsGenericTypeDefinition)
+        view = TransformGenericTypeDefinition(view, content.GetType());
+
+      return (IContentView)Activator.CreateInstance(view, content);
+    }
+
+    private static void CheckForContentType(Type contentType) {
+          if (!typeof(IContent).IsAssignableFrom(contentType))
+        throw new ArgumentException("DefaultViews are only specified for types of IContent and not for " + contentType + ".");
+    }
+    private static void CheckForContentViewType(Type viewType) {
+      if (!typeof(IContentView).IsAssignableFrom(viewType))
+        throw new ArgumentException("View can not be created becaues given type " + viewType.ToString() + " is not of type IContentView.");
+    }
+
+    private static Type TransformGenericTypeDefinition(Type viewType, Type contentType) {
+      if (contentType.IsGenericTypeDefinition)
+        throw new ArgumentException("The content type " + contentType.ToString() + " must not be a generic type definition.");
+
+      if (!viewType.IsGenericTypeDefinition)
+        return viewType;
+
+      Type contentTypeBaseType = null;
+      foreach (Type type in ContentAttribute.GetViewableTypes(viewType)) {
+        contentTypeBaseType = contentType;
+        while (contentTypeBaseType != null && (!contentTypeBaseType.IsGenericType ||
+              type.GetGenericTypeDefinition() != contentTypeBaseType.GetGenericTypeDefinition()))
+          contentTypeBaseType = contentTypeBaseType.BaseType;
+
+        //check interfaces for generic type arguments
+        if (contentTypeBaseType == null) {
+          IEnumerable<Type> implementedInterfaces = contentType.GetInterfaces().Where(t => t.IsGenericType);
+          foreach (Type implementedInterface in implementedInterfaces) {
+            if (implementedInterface.CheckGenericTypes(type))
+              contentTypeBaseType = implementedInterface;
+          }
+        }
+        if (contentTypeBaseType != null) break;
+      }
+
+      if (!contentTypeBaseType.IsGenericType)
+        throw new ArgumentException("Neither content type itself nor any of its base classes is a generic type. Could not determine generic type argument for the view.");
+
+      Type[] viewTypeGenericArguments = viewType.GetGenericArguments();
+      Type[] contentTypeGenericArguments = contentTypeBaseType.GetGenericArguments();
+
+      if (contentTypeGenericArguments.Length != viewTypeGenericArguments.Length)
+        throw new ArgumentException("Neiter the type (" + contentType.ToString() + ") nor any of its base types specifies " +
+          viewTypeGenericArguments.Length + " generic type arguments.");
+
+      for (int i = 0; i < viewTypeGenericArguments.Length; i++) {
+        foreach (Type typeConstraint in viewTypeGenericArguments[i].GetGenericParameterConstraints()) {
+          if (!typeConstraint.IsAssignableFrom(contentTypeGenericArguments[i]))
+            return null;
+        }
+      }
+
+      Type returnType = viewType.MakeGenericType(contentTypeGenericArguments);
+      return returnType;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/MenuSeparatorItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/MenuSeparatorItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/MenuSeparatorItem.cs	(revision 3437)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public abstract class MenuSeparatorItem : PositionableUserInterfaceItem, IMenuSeparatorItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/PositionableUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/PositionableUserInterfaceItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/PositionableUserInterfaceItem.cs	(revision 3437)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public abstract class PositionableUserInterfaceItem : IPositionableUserInterfaceItem {
+    public abstract int Position { get; }
+
+    public virtual IEnumerable<string> Structure {
+      get { return Enumerable.Empty<string>(); }
+    } 
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Properties/AssemblyInfo.frame	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Properties/AssemblyInfo.frame	(revision 3437)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.MainForm")]
+[assembly: AssemblyDescription("HeuristicLab mainform classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 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("f9718239-4d37-4410-84d7-9c3468b01cbf")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /trunk/sources/HeuristicLab.MainForm/3.3/ToolBarSeparatorItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/ToolBarSeparatorItem.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/ToolBarSeparatorItem.cs	(revision 3437)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public abstract class ToolBarSeparatorItem : PositionableUserInterfaceItem,IToolBarSeparatorItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/TypeExtension.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/TypeExtension.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/TypeExtension.cs	(revision 3437)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Diagnostics;
+
+namespace HeuristicLab.MainForm {
+  internal static class TypeExtension {
+    internal static bool IsAssignableTo(this Type type, Type other) {
+      if (other.IsAssignableFrom(type))
+        return true;
+
+      if (RecursiveCheckGenericTypes(type, other))
+        return true;
+
+      IEnumerable<Type> implementedInterfaces = type.GetInterfaces().Where(t => t.IsGenericType);
+      foreach (Type implementedInterface in implementedInterfaces) {
+        if (implementedInterface.CheckGenericTypes(other))
+          return true;
+      }
+
+      return false;
+    }
+
+    private static bool RecursiveCheckGenericTypes(Type type, Type other) {
+      if (type.CheckGenericTypes(other))
+        return true;
+
+      if (type.BaseType == null)
+        return false;
+
+      return RecursiveCheckGenericTypes(type.BaseType, other);
+    }
+
+    internal static bool CheckGenericTypes(this Type type, Type other) {
+      if (!type.IsGenericType || !other.IsGenericType)
+        return false;
+
+      if (type.GetGenericTypeDefinition() == other.GetGenericTypeDefinition())
+        return type.CheckGenericArguments(other);
+
+      return false;
+    }
+
+    private static bool CheckGenericArguments(this Type type, Type other) {
+      Type[] typeGenericArguments = type.GetGenericArguments();
+      Type[] otherGenericArguments = other.GetGenericArguments();
+
+      if (typeGenericArguments.Length != otherGenericArguments.Length)
+        return false;
+
+      for (int i = 0; i < typeGenericArguments.Length; i++) {
+        if (typeGenericArguments[i] != otherGenericArguments[i]
+          && !otherGenericArguments[i].IsGenericParameter)
+          return false;
+      }
+      return true;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/ViewAttribute.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/ViewAttribute.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/ViewAttribute.cs	(revision 3437)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+using System.Reflection;
+
+namespace HeuristicLab.MainForm {
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
+  public sealed class ViewAttribute : Attribute {
+    public ViewAttribute(string name) {
+      this.name = name;
+    }
+
+    private string name;
+    public string Name {
+      get { return this.name; }
+      set { this.name = value; }
+    }
+
+    public static bool HasViewAttribute(MemberInfo viewType) {
+      ViewAttribute[] attributes = (ViewAttribute[])viewType.GetCustomAttributes(typeof(ViewAttribute), false);
+      return attributes.Length != 0;
+    }
+
+    public static string GetViewName(MemberInfo viewType) {
+      ViewAttribute[] attributes = (ViewAttribute[])viewType.GetCustomAttributes(typeof(ViewAttribute), false);
+      if (attributes.Length == 1)
+        return attributes[0].Name;
+      return viewType.Name;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/ViewEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/ViewEventArgs.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/ViewEventArgs.cs	(revision 3437)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public class ViewEventArgs : EventArgs {
+    public ViewEventArgs(IView view)
+      : base() {
+      this.view = view;
+    }
+
+    private IView view;
+    public IView View {
+      get { return this.view; }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.3/ViewShownEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/ViewShownEventArgs.cs	(revision 3437)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/ViewShownEventArgs.cs	(revision 3437)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Text;
+
+namespace HeuristicLab.MainForm {
+  public class ViewShownEventArgs : ViewEventArgs {
+    public ViewShownEventArgs(IView view, bool firstTimeShown)
+      : base(view) {
+      this.firstTimeShown = firstTimeShown;
+    }
+
+    private bool firstTimeShown;
+    public bool  FirstTimeShown {
+      get { return this.firstTimeShown; }
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.Designer.cs	(revision 3436)
+++ 	(revision )
@@ -1,67 +1,0 @@
-﻿namespace HeuristicLab.Operators.Views.GraphVisualization {
-  partial class GraphVisualizationInfoView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.graphVisualization = new HeuristicLab.Netron.NetronVisualization();
-      ((System.ComponentModel.ISupportInitialize)(this.graphVisualization)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // graphVisualization
-      // 
-      this.graphVisualization.AllowDrop = false;
-      this.graphVisualization.AutoScroll = true;
-      this.graphVisualization.BackColor = System.Drawing.Color.DarkGray;
-      this.graphVisualization.BackgroundType = global::Netron.Diagramming.Core.CanvasBackgroundTypes.FlatColor;
-      this.graphVisualization.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.graphVisualization.EnableAddConnection = true;
-      this.graphVisualization.FileName = "";
-      this.graphVisualization.Location = new System.Drawing.Point(0, 0);
-      this.graphVisualization.Magnification = new System.Drawing.SizeF(80F, 80F);
-      this.graphVisualization.Name = "graphVisualization";
-      this.graphVisualization.Origin = new System.Drawing.Point(0, 0);
-      this.graphVisualization.PageSize = new System.Drawing.Size(100000, 100000);
-      this.graphVisualization.ShowConnectors = true;
-      this.graphVisualization.ShowRulers = false;
-      this.graphVisualization.Size = new System.Drawing.Size(665, 444);
-      this.graphVisualization.TabIndex = 0;
-      this.graphVisualization.OnEntityRemoved += new System.EventHandler<global::Netron.Diagramming.Core.EntityEventArgs>(this.graphVisualization_OnEntityRemoved);
-      this.graphVisualization.OnEntityAdded += new System.EventHandler<global::Netron.Diagramming.Core.EntityEventArgs>(this.graphVisualization_OnEntityAdded);
-     
-      // 
-      // GraphVisualizationInfoView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.graphVisualization);
-      this.Name = "GraphVisualizationInfoView";
-      this.Size = new System.Drawing.Size(665, 444);
-      ((System.ComponentModel.ISupportInitialize)(this.graphVisualization)).EndInit();
-      this.ResumeLayout(false);
-    }
-    #endregion
-
-    private HeuristicLab.Netron.NetronVisualization graphVisualization;
-  }
-}
Index: unk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.cs	(revision 3436)
+++ 	(revision )
@@ -1,398 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using Netron.Diagramming.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.Collections;
-using System.Diagnostics;
-using System.Threading;
-
-namespace HeuristicLab.Operators.Views.GraphVisualization {
-  [View("GraphVisualizationInfo View")]
-  [Content(typeof(GraphVisualizationInfo), false)]
-  public partial class GraphVisualizationInfoView : ContentView {
-    private BidirectionalLookup<IOperatorShapeInfo, IShape> shapeInfoShapeMapping;
-    private BidirectionalLookup<IOperatorShapeInfo, INotifyObservableDictionaryItemsChanged<string, IOperatorShapeInfo>> shapeInfoConnectionsMapping;
-    private BidirectionalLookup<IConnection, KeyValuePair<IConnector, IConnector>> connectionConnectorsMapping;
-
-    private bool causedUpdateOfShapeInfo;
-    public GraphVisualizationInfoView() {
-      InitializeComponent();
-      this.causedUpdateOfShapeInfo = false;
-      this.shapeInfoShapeMapping = new BidirectionalLookup<IOperatorShapeInfo, IShape>();
-      this.shapeInfoConnectionsMapping = new BidirectionalLookup<IOperatorShapeInfo, INotifyObservableDictionaryItemsChanged<string, IOperatorShapeInfo>>();
-      this.connectionConnectorsMapping = new BidirectionalLookup<IConnection, KeyValuePair<IConnector, IConnector>>();
-    }
-
-    public GraphVisualizationInfoView(GraphVisualizationInfo content)
-      : this() {
-      this.Content = content;
-    }
-
-    public IController Controller {
-      get { return this.graphVisualization.Controller; }
-    }
-
-    public new GraphVisualizationInfo Content {
-      get { return (GraphVisualizationInfo)base.Content; }
-      set { base.Content = value; }
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      this.UpdateContent();
-    }
-
-    protected override void OnReadOnlyChanged() {
-      base.OnReadOnlyChanged();
-      this.SetEnabledStateOfControls();
-    }
-
-    private void SetEnabledStateOfControls() {
-      DeleteTool deleteTool = (DeleteTool) this.Controller.Tools.Where( t => t.Name == ControllerBase.DeleteToolName).FirstOrDefault();
-      HeuristicLab.Netron.Controller controller = this.Controller as HeuristicLab.Netron.Controller;
-      if (Content == null && deleteTool != null && controller != null)
-        controller.RemoveTool(deleteTool); 
-      else {
-        if (ReadOnly && deleteTool != null && controller != null)
-          controller.RemoveTool(deleteTool);
-        else if (!ReadOnly && deleteTool == null)
-          this.Controller.AddTool(new DeleteTool(ControllerBase.DeleteToolName));
-      }
-    }
-
-    private void UpdateContent() {
-      foreach (IOperatorShapeInfo shapeInfo in this.shapeInfoShapeMapping.FirstValues)
-        this.RemoveShapeInfo(shapeInfo);
-
-      this.shapeInfoShapeMapping.Clear();
-      this.shapeInfoConnectionsMapping.Clear();
-      this.connectionConnectorsMapping.Clear();
-
-      if (Content != null) {
-        foreach (IOperatorShapeInfo shapeInfo in this.Content.OperatorShapeInfos)
-          if (!this.shapeInfoShapeMapping.ContainsFirst(shapeInfo))
-            this.AddShapeInfo(shapeInfo);
-
-        foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> connection in this.Content.Connections)
-          this.AddConnection(connection.Key.Key, connection.Key.Value, connection.Value);
-
-        this.UpdateLayoutRoot();
-      }
-      this.SetEnabledStateOfControls();
-    }
-
-    private void UpdateLayoutRoot() {
-      IOperatorShapeInfo shapeInfo = this.Content.InitialShape;
-      if (shapeInfo != null)
-        this.graphVisualization.Controller.Model.LayoutRoot = this.shapeInfoShapeMapping.GetByFirst(shapeInfo);
-      else
-        this.graphVisualization.Controller.Model.LayoutRoot = null;
-    }
-
-    private void VisualizationInfo_InitialShapeChanged(object sender, EventArgs e) {
-      this.UpdateLayoutRoot();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      this.Content.InitialShapeChanged += new EventHandler(VisualizationInfo_InitialShapeChanged);
-      this.Content.ObserveableShapeInfos.ItemsAdded += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IOperatorShapeInfo>(ShapeInfos_ItemsAdded);
-      this.Content.ObserveableShapeInfos.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IOperatorShapeInfo>(ShapeInfos_ItemsRemoved);
-      this.Content.ObserveableShapeInfos.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IOperatorShapeInfo>(ShapeInfos_CollectionReset);
-
-      this.Content.ObservableConnections.ItemsAdded += new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_ItemsAdded);
-      this.Content.ObservableConnections.ItemsRemoved += new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_ItemsRemoved);
-      this.Content.ObservableConnections.ItemsReplaced += new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_ItemsReplaced);
-      this.Content.ObservableConnections.CollectionReset += new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_CollectionReset);
-    }
-
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-      this.Content.InitialShapeChanged -= new EventHandler(VisualizationInfo_InitialShapeChanged);
-      this.Content.ObserveableShapeInfos.ItemsAdded -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IOperatorShapeInfo>(ShapeInfos_ItemsAdded);
-      this.Content.ObserveableShapeInfos.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IOperatorShapeInfo>(ShapeInfos_ItemsRemoved);
-      this.Content.ObserveableShapeInfos.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IOperatorShapeInfo>(ShapeInfos_CollectionReset);
-
-      this.Content.ObservableConnections.ItemsAdded -= new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_ItemsAdded);
-      this.Content.ObservableConnections.ItemsRemoved -= new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_ItemsRemoved);
-      this.Content.ObservableConnections.ItemsReplaced -= new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_ItemsReplaced);
-      this.Content.ObservableConnections.CollectionReset -= new CollectionItemsChangedEventHandler<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>>(Connections_CollectionReset);
-    }
-
-    private void ShapeInfos_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IOperatorShapeInfo> e) {
-      foreach (IOperatorShapeInfo shapeInfo in e.OldItems)
-        this.RemoveShapeInfo(shapeInfo);
-      foreach (IOperatorShapeInfo shapeInfo in e.Items)
-        this.AddShapeInfo(shapeInfo);
-    }
-
-    private void ShapeInfos_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IOperatorShapeInfo> e) {
-      foreach (IOperatorShapeInfo shapeInfo in e.Items)
-        this.AddShapeInfo(shapeInfo);
-    }
-
-    private void ShapeInfos_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IOperatorShapeInfo> e) {
-      foreach (IOperatorShapeInfo shapeInfo in e.Items)
-        this.RemoveShapeInfo(shapeInfo);
-    }
-
-    private void AddShapeInfo(IOperatorShapeInfo shapeInfo) {
-      this.RegisterShapeInfoEvents(shapeInfo);
-
-      IShape shape = shapeInfo.CreateShape();
-      shape.OnEntityChange += new EventHandler<EntityEventArgs>(shape_OnEntityChange);
-      shape.OnMouseEnter += new EventHandler<EntityMouseEventArgs>(shape_OnMouseEnter);
-      shape.OnMouseLeave += new EventHandler<EntityMouseEventArgs>(shape_OnMouseLeave);
-      this.shapeInfoShapeMapping.Add(shapeInfo, shape);
-
-      this.graphVisualization.Controller.Model.AddShape(shape);
-      this.graphVisualization.Invalidate();
-    }
-
-    private void RemoveShapeInfo(IOperatorShapeInfo shapeInfo) {
-      this.DeregisterShapeInfoEvents(shapeInfo);
-      IShape shape = this.shapeInfoShapeMapping.GetByFirst(shapeInfo);
-      shape.OnEntityChange -= new EventHandler<EntityEventArgs>(shape_OnEntityChange);
-      shape.OnMouseEnter -= new EventHandler<EntityMouseEventArgs>(shape_OnMouseEnter);
-      shape.OnMouseLeave -= new EventHandler<EntityMouseEventArgs>(shape_OnMouseLeave);
-
-      IConnection connection;
-      foreach (IConnector connector in shape.Connectors) {
-        connection = this.GetConnection(shapeInfo, connector.Name);
-        this.RemoveConnection(connection);
-      }
-
-      this.shapeInfoShapeMapping.RemoveByFirst(shapeInfo);
-      this.shapeInfoConnectionsMapping.RemoveByFirst(shapeInfo);
-
-      if (this.graphVisualization.Controller.Model.Shapes.Contains(shape)) {
-        this.graphVisualization.Controller.Model.RemoveShape(shape);
-      }
-      this.graphVisualization.Invalidate();
-    }
-
-    private void RegisterShapeInfoEvents(IShapeInfo shapeInfo) {
-      shapeInfo.Changed += new EventHandler(shapeInfo_Changed);
-    }
-
-    private void DeregisterShapeInfoEvents(IShapeInfo shapeInfo) {
-      shapeInfo.Changed -= new EventHandler(shapeInfo_Changed);
-    }
-
-    private void Connections_CollectionReset(object sender, CollectionItemsChangedEventArgs<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>> e) {
-      IConnection connection;
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> pair in e.Items) {
-        connection = this.GetConnection(pair.Key.Key, pair.Key.Value);
-        this.RemoveConnection(connection);
-      }
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> pair in e.Items)
-        this.AddConnection(pair.Key.Key, pair.Key.Value, pair.Value);
-    }
-
-    private void Connections_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>> e) {
-      IConnection connection;
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> pair in e.Items) {
-        connection = this.GetConnection(pair.Key.Key, pair.Key.Value);
-        this.RemoveConnection(connection);
-      }
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> pair in e.Items)
-        this.AddConnection(pair.Key.Key, pair.Key.Value, pair.Value);
-    }
-
-    private void Connections_ItemsAdded(object sender, CollectionItemsChangedEventArgs<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>> e) {
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> pair in e.Items)
-        this.AddConnection(pair.Key.Key, pair.Key.Value, pair.Value);
-    }
-
-    private void Connections_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo>> e) {
-      IConnection connection;
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> pair in e.Items) {
-        connection = this.GetConnection(pair.Key.Key, pair.Key.Value);
-        this.RemoveConnection(connection);
-      }
-    }
-
-    private void AddConnection(IOperatorShapeInfo shapeInfoFrom, string connectorName, IOperatorShapeInfo shapeInfoTo) {
-      IShape shapeFrom = this.shapeInfoShapeMapping.GetByFirst(shapeInfoFrom);
-      IShape shapeTo = this.shapeInfoShapeMapping.GetByFirst(shapeInfoTo);
-
-      IConnector connectorFrom = shapeFrom.Connectors.Where(c => c.Name == connectorName).First();
-      IConnector connectorTo = shapeTo.Connectors.Where(c => c.Name == "Predecessor").FirstOrDefault();
-      KeyValuePair<IConnector, IConnector> connectorPair = new KeyValuePair<IConnector, IConnector>(connectorFrom, connectorTo);
-      if (!this.connectionConnectorsMapping.ContainsSecond(connectorPair)) {
-        IConnection connection = Factory.CreateConnection(connectorFrom, connectorTo);
-        this.connectionConnectorsMapping.Add(connection, connectorPair);
-        this.graphVisualization.Controller.Model.AddConnection(connection);
-        this.graphVisualization.Invalidate();
-      }
-    }
-
-    private IConnection GetConnection(IOperatorShapeInfo shapeInfoFrom, string connectorName) {
-      IShape shape = this.shapeInfoShapeMapping.GetByFirst(shapeInfoFrom);
-      IConnector connector = shape.Connectors.Where(c => c.Name == connectorName).First();
-
-      if (!this.connectionConnectorsMapping.SecondValues.Any(p => p.Key == connector))
-        return null;
-
-      KeyValuePair<IConnector, IConnector> connectorPair = this.connectionConnectorsMapping.SecondValues.Where(p => p.Key == connector).FirstOrDefault();
-      return this.connectionConnectorsMapping.GetBySecond(connectorPair);
-    }
-
-    private void ChangeConnection(IOperatorShapeInfo shapeInfoFrom, string connectorName, IOperatorShapeInfo shapeInfoTo) {
-      IConnection connection = this.GetConnection(shapeInfoFrom, connectorName);
-      IShape shapeTo = this.shapeInfoShapeMapping.GetByFirst(shapeInfoFrom);
-      IConnector connectorTo = shapeTo.Connectors.Where(c => c.Name == "Predecessor").First();
-
-      connection.To.DetachFromParent();
-      connection.To.AttachTo(connectorTo);
-      this.graphVisualization.Invalidate();
-    }
-
-    private void RemoveConnection(IConnection connection) {
-      if (connection == null)
-        return;
-
-      if (connection.From.AttachedTo != null)
-        connection.From.DetachFromParent();
-      if (connection.To.AttachedTo != null)
-        connection.To.DetachFromParent();
-
-      if (this.connectionConnectorsMapping.ContainsFirst(connection))
-        this.connectionConnectorsMapping.RemoveByFirst(connection);
-      if (this.graphVisualization.Controller.Model.Connections.Contains(connection))
-        this.graphVisualization.Controller.Model.Remove(connection);
-      this.graphVisualization.Invalidate();
-    }
-
-
-    private void shapeInfo_Changed(object sender, EventArgs e) {
-      if (this.causedUpdateOfShapeInfo)
-        return;
-
-      this.causedUpdateOfShapeInfo = true;
-      IOperatorShapeInfo shapeInfo = (IOperatorShapeInfo)sender;
-      IShape shape = this.shapeInfoShapeMapping.GetByFirst(shapeInfo);
-      shapeInfo.UpdateShape(shape);
-      shape.Invalidate();
-      this.causedUpdateOfShapeInfo = false;
-    }
-
-    private Cursor oldCursor;
-    private void shape_OnMouseEnter(object sender, EntityMouseEventArgs e) {
-      this.oldCursor = this.Cursor;
-      this.Controller.View.CurrentCursor = CursorPalette.Move;
-    }
-
-    private void shape_OnMouseLeave(object sender, EntityMouseEventArgs e) {
-      this.Controller.View.CurrentCursor = this.oldCursor;
-      this.oldCursor = null;
-    }
-
-    private void shape_OnEntityChange(object sender, EntityEventArgs e) {
-      if (this.causedUpdateOfShapeInfo)
-        return;
-
-      this.causedUpdateOfShapeInfo = true;
-      IShape shape = e.Entity as IShape;
-      IOperatorShapeInfo shapeInfo = this.shapeInfoShapeMapping.GetBySecond(shape);
-      shapeInfo.Location = shape.Location;
-
-      OperatorShape operatorShape = shape as OperatorShape;
-      if (operatorShape != null)
-        shapeInfo.Collapsed = operatorShape.Collapsed;
-
-      this.graphVisualization.Invalidate();
-      this.causedUpdateOfShapeInfo = false;
-    }
-
-    private void graphVisualization_OnEntityAdded(object sender, EntityEventArgs e) {
-      IConnection connection = e.Entity as IConnection;
-      if (connection != null && !this.connectionConnectorsMapping.ContainsFirst(connection)) {
-        IConnector connectorFrom = connection.From.AttachedTo;
-        IConnector connectorTo = connection.To.AttachedTo;
-        this.RemoveConnection(connection); //is added again by the model events
-
-        if (connectorFrom != null && connectorTo != null && connectorFrom.Name != "Predecessor") {
-          IShape shapeFrom = (IShape)connectorFrom.Parent;
-          IShape shapeTo = (IShape)connectorTo.Parent;
-          IOperatorShapeInfo shapeInfoFrom = this.shapeInfoShapeMapping.GetBySecond(shapeFrom);
-          IOperatorShapeInfo shapeInfoTo = this.shapeInfoShapeMapping.GetBySecond(shapeTo);
-          string connectorName = connectorFrom.Name;
-
-          if (shapeFrom != shapeTo) //avoid self references
-            this.Content.AddConnection(shapeInfoFrom, connectorName, shapeInfoTo);
-        }
-      }
-    }
-
-    private void graphVisualization_OnEntityRemoved(object sender, EntityEventArgs e) {
-      IShape shape = e.Entity as IShape;
-      if (shape != null && this.shapeInfoShapeMapping.ContainsSecond(shape)) {
-        IOperatorShapeInfo shapeInfo = this.shapeInfoShapeMapping.GetBySecond(shape);
-        this.Content.RemoveShapeInfo(shapeInfo);
-      }
-
-      IConnection connection = e.Entity as IConnection;
-      if (connection != null && this.connectionConnectorsMapping.ContainsFirst(connection)) {
-        IShape parentShape = (IShape)connection.From.AttachedTo.Parent;
-        IOperatorShapeInfo shapeInfo = this.shapeInfoShapeMapping.GetBySecond(parentShape);
-        string connectorName = connection.From.AttachedTo.Name;
-
-        this.Content.RemoveConnection(shapeInfo, connectorName);
-      }
-    }
-
-    internal void RelayoutGraph() {
-      if (this.shapeInfoShapeMapping.Count > 0
-        && this.connectionConnectorsMapping.Count > 0
-        && this.Content.InitialShape != null) { //otherwise the layout does not work
-        string layoutName = "Standard TreeLayout";
-        this.graphVisualization.Controller.RunActivity(layoutName);
-        this.graphVisualization.Invalidate();
-
-        //fix to avoid negative shape positions after layouting
-        Thread.Sleep(300);
-        int minX = this.graphVisualization.Controller.Model.Shapes.Min(s => s.Location.X);
-        int shiftX = minX < 0 ? Math.Abs(minX) + 50 : 0;
-        int minY = this.graphVisualization.Controller.Model.Shapes.Min(s => s.Location.Y);
-        int shiftY = minY < 0 ? Math.Abs(minY) + 50 : 0;
-        if (minX < 0 || minY < 0) {
-          foreach (IShape s in this.Controller.Model.Shapes)
-            s.MoveBy(new Point(shiftX, shiftY));
-        }
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj	(revision 3437)
@@ -150,11 +150,11 @@
       <Name>Netron.Diagramming.Core-3.0.2672.12446</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators.Views\3.3\HeuristicLab.Operators.Views-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame	(revision 3437)
@@ -35,6 +35,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Netron", "3.0")]
   [PluginDependency("HeuristicLab.Operators", "3.3")]
Index: unk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.Designer.cs	(revision 3436)
+++ 	(revision )
@@ -1,267 +1,0 @@
-﻿namespace HeuristicLab.Operators.Views.GraphVisualization {
-  partial class OperatorGraphView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.graphVisualizationInfoView = new HeuristicLab.Operators.Views.GraphVisualization.GraphVisualizationInfoView();
-      this.shapeContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
-      this.openViewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.initialToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.breakPointToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.detailsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.selectButton = new System.Windows.Forms.Button();
-      this.panButton = new System.Windows.Forms.Button();
-      this.connectButton = new System.Windows.Forms.Button();
-      this.relayoutButton = new System.Windows.Forms.Button();
-      this.zoomAreaButton = new System.Windows.Forms.Button();
-      this.zoomInButton = new System.Windows.Forms.Button();
-      this.zoomOutButton = new System.Windows.Forms.Button();
-      this.screenshotButton = new System.Windows.Forms.Button();
-      this.buttonToolTip = new System.Windows.Forms.ToolTip();
-      this.shapeContextMenu.SuspendLayout();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.detailsGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // graphVisualizationInfoView
-      // 
-      this.graphVisualizationInfoView.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.graphVisualizationInfoView.Caption = null;
-      this.graphVisualizationInfoView.Content = null;
-      this.graphVisualizationInfoView.Location = new System.Drawing.Point(3, 30);
-      this.graphVisualizationInfoView.Name = "graphVisualizationInfoView";
-      this.graphVisualizationInfoView.Size = new System.Drawing.Size(662, 248);
-      this.graphVisualizationInfoView.TabIndex = 0;
-      // 
-      // shapeContextMenu
-      // 
-      this.shapeContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.openViewToolStripMenuItem,
-            this.initialToolStripMenuItem,
-            this.breakPointToolStripMenuItem});
-      this.shapeContextMenu.Name = "shapeContextMenu";
-      this.shapeContextMenu.Size = new System.Drawing.Size(154, 70);
-      this.shapeContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.shapeContextMenu_Opening);
-      // 
-      // openViewToolStripMenuItem
-      // 
-      this.openViewToolStripMenuItem.Name = "openViewToolStripMenuItem";
-      this.openViewToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
-      this.openViewToolStripMenuItem.Text = "Open View";
-      this.openViewToolStripMenuItem.Click += new System.EventHandler(this.openViewToolStripMenuItem_Click);
-      // 
-      // initialToolStripMenuItem
-      // 
-      this.initialToolStripMenuItem.Name = "initialToolStripMenuItem";
-      this.initialToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
-      this.initialToolStripMenuItem.Text = "Initial Operator";
-      this.initialToolStripMenuItem.Click += new System.EventHandler(this.initialOperatorToolStripMenuItem_Click);
-      // 
-      // breakPointToolStripMenuItem
-      // 
-      this.breakPointToolStripMenuItem.Name = "breakPointToolStripMenuItem";
-      this.breakPointToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
-      this.breakPointToolStripMenuItem.Text = "Break Point";
-      this.breakPointToolStripMenuItem.Click += new System.EventHandler(this.breakPointToolStripMenuItem_Click);
-      // 
-      // splitContainer
-      // 
-      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.splitContainer.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer.Name = "splitContainer";
-      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.screenshotButton);
-      this.splitContainer.Panel1.Controls.Add(this.zoomOutButton);
-      this.splitContainer.Panel1.Controls.Add(this.zoomInButton);
-      this.splitContainer.Panel1.Controls.Add(this.zoomAreaButton);
-      this.splitContainer.Panel1.Controls.Add(this.relayoutButton);
-      this.splitContainer.Panel1.Controls.Add(this.connectButton);
-      this.splitContainer.Panel1.Controls.Add(this.panButton);
-      this.splitContainer.Panel1.Controls.Add(this.selectButton);
-      this.splitContainer.Panel1.Controls.Add(this.graphVisualizationInfoView);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.detailsGroupBox);
-      this.splitContainer.Size = new System.Drawing.Size(665, 444);
-      this.splitContainer.SplitterDistance = 279;
-      this.splitContainer.TabIndex = 1;
-      // 
-      // detailsGroupBox
-      // 
-      this.detailsGroupBox.Controls.Add(this.detailsViewHost);
-      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.detailsGroupBox.Name = "detailsGroupBox";
-      this.detailsGroupBox.Size = new System.Drawing.Size(665, 161);
-      this.detailsGroupBox.TabIndex = 0;
-      this.detailsGroupBox.TabStop = false;
-      this.detailsGroupBox.Text = "Details";
-      // 
-      // detailsViewHost
-      // 
-      this.detailsViewHost.Content = null;
-      this.detailsViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.detailsViewHost.Location = new System.Drawing.Point(3, 16);
-      this.detailsViewHost.Name = "detailsViewHost";
-      this.detailsViewHost.Size = new System.Drawing.Size(659, 142);
-      this.detailsViewHost.TabIndex = 0;
-      this.detailsViewHost.ViewType = null;
-      // 
-      // selectButton
-      // 
-      this.selectButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Pointer;
-      this.selectButton.Location = new System.Drawing.Point(3, 3);
-      this.selectButton.Name = "selectButton";
-      this.selectButton.Size = new System.Drawing.Size(24, 24);
-      this.selectButton.TabIndex = 1;
-      this.selectButton.UseVisualStyleBackColor = true;
-      this.selectButton.Click += new System.EventHandler(selectButton_Click);
-      this.buttonToolTip.SetToolTip(this.selectButton, "Select Tool");
-      // 
-      // panButton
-      // 
-      this.panButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Breakpoint;
-      this.panButton.Location = new System.Drawing.Point(33, 3);
-      this.panButton.Name = "panButton";
-      this.panButton.Size = new System.Drawing.Size(24, 24);
-      this.panButton.TabIndex = 2;
-      this.panButton.UseVisualStyleBackColor = true;
-      this.panButton.Click += new System.EventHandler(panButton_Click);
-      this.buttonToolTip.SetToolTip(this.panButton, "Pan Tool");
-      // 
-      // connectButton
-      // 
-      this.connectButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Interface;
-      this.connectButton.Location = new System.Drawing.Point(63, 3);
-      this.connectButton.Name = "connectButton";
-      this.connectButton.Size = new System.Drawing.Size(24, 24);
-      this.connectButton.TabIndex = 3;
-      this.connectButton.UseVisualStyleBackColor = true;
-      this.connectButton.Click += new System.EventHandler(connectButton_Click);
-      this.buttonToolTip.SetToolTip(this.connectButton, "Connection Tool");
-      // 
-      // relayoutButton
-      // 
-      this.relayoutButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.RefreshDocument;
-      this.relayoutButton.Location = new System.Drawing.Point(123, 3);
-      this.relayoutButton.Name = "relayoutButton";
-      this.relayoutButton.Size = new System.Drawing.Size(24, 24);
-      this.relayoutButton.TabIndex = 4;
-      this.relayoutButton.UseVisualStyleBackColor = true;
-      this.relayoutButton.Click += new System.EventHandler(relayoutButton_Click);
-      this.buttonToolTip.SetToolTip(this.relayoutButton, "Relayout Graph");
-      // 
-      // zoomAreaButton
-      // 
-      this.zoomAreaButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Zoom;
-      this.zoomAreaButton.Location = new System.Drawing.Point(153, 3);
-      this.zoomAreaButton.Name = "zoomAreaButton";
-      this.zoomAreaButton.Size = new System.Drawing.Size(24, 24);
-      this.zoomAreaButton.TabIndex = 5;
-      this.zoomAreaButton.UseVisualStyleBackColor = true;
-      this.zoomAreaButton.Click += new System.EventHandler(zoomAreaButton_Click);
-      this.buttonToolTip.SetToolTip(this.zoomAreaButton, "Zoom Area Tool");
-      // 
-      // zoomInButton
-      // 
-      this.zoomInButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.ZoomIn;
-      this.zoomInButton.Location = new System.Drawing.Point(183, 3);
-      this.zoomInButton.Name = "zoomInButton";
-      this.zoomInButton.Size = new System.Drawing.Size(24, 24);
-      this.zoomInButton.TabIndex = 6;
-      this.zoomInButton.UseVisualStyleBackColor = true;
-      this.zoomInButton.Click += new System.EventHandler(zoomInButton_Click);
-      this.buttonToolTip.SetToolTip(this.zoomInButton, "Zoom In");
-      // 
-      // zoomOutButton
-      // 
-      this.zoomOutButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.ZoomOut;
-      this.zoomOutButton.Location = new System.Drawing.Point(213, 3);
-      this.zoomOutButton.Name = "zoomOutButton";
-      this.zoomOutButton.Size = new System.Drawing.Size(24, 24);
-      this.zoomOutButton.TabIndex = 7;
-      this.zoomOutButton.UseVisualStyleBackColor = true;
-      this.zoomOutButton.Click += new System.EventHandler(zoomOutButton_Click);
-      this.buttonToolTip.SetToolTip(this.zoomOutButton, "Zoom Out");
-      // 
-      // screenshotButton
-      // 
-      this.screenshotButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Copy;
-      this.screenshotButton.Location = new System.Drawing.Point(243, 3);
-      this.screenshotButton.Name = "screenshotButton";
-      this.screenshotButton.Size = new System.Drawing.Size(24, 24);
-      this.screenshotButton.TabIndex = 8;
-      this.screenshotButton.UseVisualStyleBackColor = true;
-      this.screenshotButton.Click += new System.EventHandler(screenshotButton_Click);
-      this.buttonToolTip.SetToolTip(this.screenshotButton, "Screenshot");
-      // 
-      // OperatorGraphView
-      // 
-      this.AllowDrop = true;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.splitContainer);
-      this.Name = "OperatorGraphView";
-      this.Size = new System.Drawing.Size(665, 444);
-      this.DragDrop += new System.Windows.Forms.DragEventHandler(this.OperatorGraphView_DragDrop);
-      this.DragEnter += new System.Windows.Forms.DragEventHandler(this.OperatorGraphView_DragEnter);
-      this.shapeContextMenu.ResumeLayout(false);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.ResumeLayout(false);
-      this.detailsGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-    #endregion
-
-    private GraphVisualizationInfoView graphVisualizationInfoView;
-    private System.Windows.Forms.ContextMenuStrip shapeContextMenu;
-    private System.Windows.Forms.ToolStripMenuItem openViewToolStripMenuItem;
-    private System.Windows.Forms.ToolStripMenuItem initialToolStripMenuItem;
-    private System.Windows.Forms.ToolStripMenuItem breakPointToolStripMenuItem;
-    private System.Windows.Forms.SplitContainer splitContainer;
-    private System.Windows.Forms.GroupBox detailsGroupBox;
-    private HeuristicLab.MainForm.WindowsForms.ViewHost detailsViewHost;
-    private System.Windows.Forms.Button selectButton;
-    private System.Windows.Forms.Button zoomOutButton;
-    private System.Windows.Forms.Button zoomInButton;
-    private System.Windows.Forms.Button zoomAreaButton;
-    private System.Windows.Forms.Button relayoutButton;
-    private System.Windows.Forms.Button connectButton;
-    private System.Windows.Forms.Button panButton;
-    private System.Windows.Forms.Button screenshotButton;
-    private System.Windows.Forms.ToolTip buttonToolTip;
-  }
-}
Index: unk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.cs	(revision 3436)
+++ 	(revision )
@@ -1,321 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using Netron.Diagramming.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.Collections;
-
-namespace HeuristicLab.Operators.Views.GraphVisualization {
-  [View("OperatorGraph View (Chart)")]
-  [Content(typeof(OperatorGraph), true)]
-  public partial class OperatorGraphView : ContentView {
-    public OperatorGraphView() {
-      InitializeComponent();
-      Caption = "Operator Graph Visualization";
-
-      this.graphVisualizationInfoView.Controller.OnShowContextMenu += new EventHandler<EntityMenuEventArgs>(Controller_OnShowContextMenu);
-      this.graphVisualizationInfoView.Controller.Model.Selection.OnNewSelection += new EventHandler(Controller_SelectionChanged);
-      this.graphVisualizationInfoView.Controller.OnMouseDown += new EventHandler<MouseEventArgs>(Controller_OnMouseDown);
-      foreach (ITool tool in this.graphVisualizationInfoView.Controller.Tools) {
-        tool.OnToolActivate += new EventHandler<ToolEventArgs>(tool_OnToolActivate);
-        tool.OnToolDeactivate += new EventHandler<ToolEventArgs>(tool_OnToolDeactivate);
-      }
-    }
-
-    public OperatorGraphView(OperatorGraph content)
-      : this() {
-      this.Content = content;
-    }
-
-    public new OperatorGraph Content {
-      get { return (OperatorGraph)base.Content; }
-      set { base.Content = value; }
-    }
-
-    protected override void OnContentChanged() {
-      bool createdVisualizationInfo = false;
-      if (this.VisualizationInfo == null) {
-        this.VisualizationInfo = new GraphVisualizationInfo(this.Content);
-        createdVisualizationInfo = true;
-      }
-      this.graphVisualizationInfoView.Content = this.VisualizationInfo;
-      if (createdVisualizationInfo)
-        this.graphVisualizationInfoView.RelayoutGraph();
-
-      this.SetEnabledStateOfControls();
-    }
-
-    protected override void OnReadOnlyChanged() {
-      base.OnReadOnlyChanged();
-      this.SetEnabledStateOfControls();
-    }
-
-    private void SetEnabledStateOfControls() {
-      if (Content == null) {
-        selectButton.Enabled = false;
-        panButton.Enabled = false;
-        relayoutButton.Enabled = false;
-        zoomAreaButton.Enabled = false;
-        zoomInButton.Enabled = false;
-        zoomOutButton.Enabled = false;
-        screenshotButton.Enabled = false;
-        detailsViewHost.Enabled = false;
-        graphVisualizationInfoView.ReadOnly = true;
-        connectButton.Enabled = false;
-      } else {
-        selectButton.Enabled = true;
-        panButton.Enabled = true;
-        relayoutButton.Enabled = true;
-        zoomAreaButton.Enabled = true;
-        zoomInButton.Enabled = true;
-        zoomOutButton.Enabled = true;
-        screenshotButton.Enabled = true;
-        detailsViewHost.Enabled = true;
-        detailsViewHost.ReadOnly = ReadOnly;
-        graphVisualizationInfoView.ReadOnly = ReadOnly;
-        connectButton.Enabled = !ReadOnly;
-      }
-    } 
-
-    private GraphVisualizationInfo VisualizationInfo {
-      get { return Content.VisualizationInfo as GraphVisualizationInfo; }
-      set { this.Content.VisualizationInfo = value; }
-    }
-
-    private void Controller_SelectionChanged(object sender, EventArgs e) {
-      CollectionBase<IDiagramEntity> selectedObjects = this.graphVisualizationInfoView.Controller.Model.Selection.SelectedItems;
-      this.detailsViewHost.ViewType = null;
-      if (selectedObjects.Count == 1) {
-        IShape shape = selectedObjects[0] as IShape;
-        if (shape != null) {
-          IOperatorShapeInfo shapeInfo = shape.Tag as IOperatorShapeInfo;
-          IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-          this.detailsViewHost.ViewType = null;
-          this.detailsViewHost.Content = op;
-          return;
-        }
-      }
-      IConnector connector = this.graphVisualizationInfoView.Controller.Model.Selection.Connector;
-      if (connector != null) {
-        IShape shape = connector.Parent as IShape;
-        string connectorName = connector.Name;
-        if (shape == null) {
-          shape = connector.AttachedTo.Parent as IShape; //connection connector selected
-          connectorName = connector.AttachedTo.Name;
-        }
-        if (shape != null) {
-          IOperatorShapeInfo shapeInfo = shape.Tag as IOperatorShapeInfo;
-          IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-          if (connectorName != "Predecessor") {
-            IParameter parameter = op.Parameters.Where(p => p.Name == connectorName).First();
-            this.detailsViewHost.ViewType = null;
-            this.detailsViewHost.Content = parameter;
-            return;
-          }
-        }
-      }
-      this.detailsViewHost.ViewType = null;
-      this.detailsViewHost.Content = null;
-    }
-
-    private void Controller_OnMouseDown(object sender, MouseEventArgs e) {
-      if (e.Clicks >= 2) {
-        IShape shape = this.graphVisualizationInfoView.Controller.Model.GetShapeAt(e.Location);
-        if (shape != null) {
-          IOperatorShapeInfo shapeInfo = shape.Tag as IOperatorShapeInfo;
-          if (shapeInfo != null) {
-            IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-            MainFormManager.CreateDefaultView(op).Show();
-            HandledMouseEventArgs eventArgs = e as HandledMouseEventArgs;
-            if (eventArgs != null)
-              eventArgs.Handled = true;
-          }
-        }
-      }
-    }
-
-    #region context menu
-    private void Controller_OnShowContextMenu(object sender, EntityMenuEventArgs e) {
-      IShape shape = this.graphVisualizationInfoView.Controller.Model.GetShapeAt(e.MouseEventArgs.Location);
-      if (shape != null) {
-        IShapeInfo shapeInfo = shape.Tag as IShapeInfo;
-        this.shapeContextMenu.Tag = shapeInfo;
-        PointF worldPoint = this.graphVisualizationInfoView.Controller.View.WorldToView(e.MouseEventArgs.Location);
-        this.shapeContextMenu.Show(this, Point.Round(worldPoint));
-      }
-    }
-
-    private void shapeContextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
-      IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
-      if (shapeInfo != null) {
-        IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-        this.initialToolStripMenuItem.Checked = this.Content.InitialOperator == op;
-        this.breakPointToolStripMenuItem.Checked = op.Breakpoint;
-      }
-    }
-
-    private void openViewToolStripMenuItem_Click(object sender, EventArgs e) {
-      IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
-      if (shapeInfo != null) {
-        IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-        MainFormManager.CreateDefaultView(op).Show();
-      }
-    }
-
-    private void initialOperatorToolStripMenuItem_Click(object sender, EventArgs e) {
-      if (!ReadOnly) {
-        IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
-        if (this.VisualizationInfo.InitialShape == shapeInfo)
-          this.VisualizationInfo.InitialShape = null;
-        else
-          this.VisualizationInfo.InitialShape = shapeInfo;
-      }
-    }
-
-    private void breakPointToolStripMenuItem_Click(object sender, EventArgs e) {
-      if (!ReadOnly) {
-        IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
-        if (shapeInfo != null) {
-          IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-          op.Breakpoint = !op.Breakpoint;
-        }
-      }
-    }
-    #endregion
-
-    #region drag and drop
-    private void OperatorGraphView_DragEnter(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (ReadOnly)
-        return;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (typeof(IOperator).IsAssignableFrom(type))) {
-        e.Effect = DragDropEffects.Copy;
-      }
-    }
-
-    private void OperatorGraphView_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        IOperator op = e.Data.GetData("Value") as IOperator;
-        IOperatorShapeInfo shapeInfo = Factory.CreateOperatorShapeInfo(op);
-        Point mouse = new Point(MousePosition.X, MousePosition.Y);
-        Point screen = this.graphVisualizationInfoView.PointToScreen(new Point(0, 0));
-        Point control = new Point(mouse.X - screen.X, mouse.Y - screen.Y);
-        PointF worldPoint = this.graphVisualizationInfoView.Controller.View.ViewToWorld(control);
-
-        if (worldPoint.X < 0)
-          worldPoint.X = 0;
-        if (worldPoint.Y < 0)
-          worldPoint.Y = 0;
-
-        shapeInfo.Location = Point.Round(worldPoint);
-        this.VisualizationInfo.AddShapeInfo(op, shapeInfo);
-      }
-    }
-    #endregion
-
-    private void tool_OnToolActivate(object sender, ToolEventArgs e) {
-      Button button = GetButtonForTool(e.Properties.Name);
-      if (button != null)
-        button.Enabled = false;
-    }
-
-    private void tool_OnToolDeactivate(object sender, ToolEventArgs e) {
-      Button button = GetButtonForTool(e.Properties.Name);
-      if (button != null)
-        button.Enabled = true;
-    }
-
-    private Button GetButtonForTool(string toolName) {
-      Button button = null;
-      switch (toolName) {
-        case ControllerBase.SelectionToolName:
-          button = this.selectButton;
-          break;
-        case ControllerBase.PanToolName:
-          button = this.panButton;
-          break;
-        case ControllerBase.ConnectionToolName:
-          button = this.connectButton;
-          break;
-        case ControllerBase.ZoomAreaToolName:
-          button = this.zoomAreaButton;
-          break;
-      }
-      return button;
-    }
-
-    private void selectButton_Click(object sender, EventArgs e) {
-      ITool tool = this.graphVisualizationInfoView.Controller.Tools.Where(t => t.Name == ControllerBase.SelectionToolName).First();
-      this.graphVisualizationInfoView.Controller.DeactivateAllTools();
-    }
-
-    private void panButton_Click(object sender, EventArgs e) {
-      this.graphVisualizationInfoView.Controller.ActivateTool(ControllerBase.PanToolName);
-    }
-
-    private void connectButton_Click(object sender, EventArgs e) {
-      this.graphVisualizationInfoView.Controller.ActivateTool(ControllerBase.ConnectionToolName);
-    }
-
-    private void relayoutButton_Click(object sender, EventArgs e) {
-      this.graphVisualizationInfoView.RelayoutGraph();
-    }
-
-    private void zoomAreaButton_Click(object sender, EventArgs e) {
-      this.graphVisualizationInfoView.Controller.View.ZoomFit();
-    }
-
-    private void zoomInButton_Click(object sender, EventArgs e) {
-      this.graphVisualizationInfoView.Controller.ActivateTool(ControllerBase.ZoomInToolName);
-    }
-
-    private void zoomOutButton_Click(object sender, EventArgs e) {
-      this.graphVisualizationInfoView.Controller.ActivateTool(ControllerBase.ZoomOutToolName);
-    }
-
-    private void screenshotButton_Click(object sender, EventArgs e) {
-      Bitmap bitmap = ImageExporter.FromBundle(new Bundle(this.graphVisualizationInfoView.Controller.Model.Paintables), this.graphVisualizationInfoView.Controller.View.Graphics);
-      SaveFileDialog saveFileDialog = new SaveFileDialog();
-      saveFileDialog.Title = "Save Screenshot";
-      saveFileDialog.DefaultExt = "bmp";
-      saveFileDialog.Filter = "Bitmap|*.bmp|All Files|*.*";
-      saveFileDialog.FilterIndex = 1;
-
-      if (saveFileDialog.ShowDialog() == DialogResult.OK) {
-        bitmap.Save(saveFileDialog.FileName);
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 3437)
@@ -134,11 +134,11 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLabOperatorsViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLabOperatorsViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLabOperatorsViewsPlugin.cs.frame	(revision 3437)
@@ -32,6 +32,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Operators", "3.3")]
   public class HeuristicLabOperatorsViewsPlugin : PluginBase {
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 3437)
@@ -202,11 +202,11 @@
       <Name>HeuristicLab.Data-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLabOptimizationViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLabOptimizationViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLabOptimizationViewsPlugin.cs.frame	(revision 3437)
@@ -33,6 +33,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 3437)
@@ -163,11 +163,11 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLabOptimizerPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLabOptimizerPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLabOptimizerPlugin.cs.frame	(revision 3437)
@@ -31,6 +31,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   public class HeuristicLabOptimizerPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 3437)
@@ -144,11 +144,11 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLabParametersViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLabParametersViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLabParametersViewsPlugin.cs.frame	(revision 3437)
@@ -33,6 +33,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   public class HeuristicLabParametersViewsPlugin : PluginBase {
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLab.PluginAdministrator-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLab.PluginAdministrator-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLab.PluginAdministrator-3.3.csproj	(revision 3437)
@@ -159,11 +159,11 @@
       <Name>HeuristicLab.Common.Resources-3.2</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLabPluginAdministratorPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLabPluginAdministratorPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLabPluginAdministratorPlugin.cs.frame	(revision 3437)
@@ -29,6 +29,6 @@
   [PluginFile("HeuristicLab.PluginAdministrator-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.2.0.0")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2.0.0")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2.0.0")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3.0.0")]
   public class HeuristicLabPluginAdministratorPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLab.Problems.ArtificialAnt.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLab.Problems.ArtificialAnt.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLab.Problems.ArtificialAnt.Views-3.3.csproj	(revision 3437)
@@ -117,11 +117,11 @@
       <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame	(revision 3437)
@@ -33,6 +33,6 @@
   [PluginDependency("HeuristicLab.Data", "3.3.0.0")]
   [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.3.0.0")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2.0.0")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2.0.0")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3.0.0")]
   [PluginDependency("HeuristicLab.Optimization", "3.3.0.0")]
   [PluginDependency("HeuristicLab.Optimization.Views", "3.3.0.0")]
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLab.Problems.DataAnalysis.Views-3.3.csproj	(revision 3437)
@@ -122,11 +122,11 @@
       <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj	(revision 3437)
@@ -103,11 +103,11 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLabProblemsKnapsackViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLabProblemsKnapsackViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLabProblemsKnapsackViewsPlugin.cs.frame	(revision 3437)
@@ -31,6 +31,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj	(revision 3437)
@@ -111,11 +111,11 @@
       <Name>HeuristicLab.Encodings.RealVectorEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLabProblemsTestFunctionsViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLabProblemsTestFunctionsViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLabProblemsTestFunctionsViewsPlugin.cs.frame	(revision 3437)
@@ -33,6 +33,6 @@
   [PluginDependency("HeuristicLab.Data", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj	(revision 3437)
@@ -140,11 +140,11 @@
       <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.2\HeuristicLab.MainForm.WindowsForms-3.2.csproj">
+    <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.2</Name>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm-3.2.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
-      <Name>HeuristicLab.MainForm-3.2</Name>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLabProblemsTravelingSalesmanViewsPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLabProblemsTravelingSalesmanViewsPlugin.cs.frame	(revision 3436)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLabProblemsTravelingSalesmanViewsPlugin.cs.frame	(revision 3437)
@@ -35,6 +35,6 @@
   [PluginDependency("HeuristicLab.Data", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.PermutationEncoding", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.2")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.2")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
Index: /trunk/sources/HeuristicLab/MergeConfigs.cmd
===================================================================
--- /trunk/sources/HeuristicLab/MergeConfigs.cmd	(revision 3436)
+++ /trunk/sources/HeuristicLab/MergeConfigs.cmd	(revision 3437)
@@ -1,7 +1,7 @@
 ConfigMerger "%SolutionDir%\HeuristicLab.PluginInfrastructure\%Outdir%\HeuristicLab.PluginInfrastructure.dll.config" "HeuristicLab.exe.config"
-ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Core\3.2\%Outdir%\HeuristicLab.Hive.Client.Core-3.2.dll.config" "HeuristicLab.exe.config"
-ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Console\3.2\%Outdir%\HeuristicLab.Hive.Client.Console-3.2.dll.config" "HeuristicLab.exe.config"
-ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server\3.2\%Outdir%\HeuristicLab.Hive.Server-3.2.dll.config" "HeuristicLab.exe.config"
-ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server.Core\3.2\%Outdir%\HeuristicLab.Hive.Server.Core-3.2.dll.config" "HeuristicLab.exe.config"
+;ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Core\3.2\%Outdir%\HeuristicLab.Hive.Client.Core-3.2.dll.config" "HeuristicLab.exe.config"
+;ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Console\3.2\%Outdir%\HeuristicLab.Hive.Client.Console-3.2.dll.config" "HeuristicLab.exe.config"
+;ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server\3.2\%Outdir%\HeuristicLab.Hive.Server-3.2.dll.config" "HeuristicLab.exe.config"
+;ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server.Core\3.2\%Outdir%\HeuristicLab.Hive.Server.Core-3.2.dll.config" "HeuristicLab.exe.config"
 ConfigMerger "%SolutionDir%\HeuristicLab.Tracing\3.2\%Outdir%\HeuristicLab.Tracing-3.2.dll.config" "HeuristicLab.exe.config"
 ConfigMerger "%SolutionDir%\HeuristicLab.ExtLibs\HeuristicLab.SQLServerCompact\3.5.1.0\%Outdir%\HeuristicLab.SQLServerCompact-3.5.1.0.dll.config" "HeuristicLab.exe.config"
