Index: trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- trunk/sources/HeuristicLab 3.3.sln	(revision 6035)
+++ trunk/sources/HeuristicLab 3.3.sln	(revision 6036)
@@ -394,4 +394,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis.Tests-3.4", "HeuristicLab.Problems.DataAnalysis\3.4\Tests\HeuristicLab.Problems.DataAnalysis.Tests-3.4.csproj", "{F5013F6B-5A2D-4741-8FC9-31A6968E9C41}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "HeuristicLab.Operators.Views.GraphVisualization.Views\3.3\HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj", "{0C39A349-1979-419A-89BD-E4E2F26BD287}"
 EndProject
 Global
@@ -1836,4 +1838,16 @@
 		{F5013F6B-5A2D-4741-8FC9-31A6968E9C41}.Release|x86.ActiveCfg = Release|x86
 		{F5013F6B-5A2D-4741-8FC9-31A6968E9C41}.Release|x86.Build.0 = Release|x86
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Debug|x64.ActiveCfg = Debug|x64
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Debug|x64.Build.0 = Debug|x64
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Debug|x86.ActiveCfg = Debug|x86
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Debug|x86.Build.0 = Debug|x86
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|x64.ActiveCfg = Release|x64
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|x64.Build.0 = Release|x64
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|x86.ActiveCfg = Release|x86
+		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.Designer.cs	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.Designer.cs	(revision 6036)
@@ -0,0 +1,88 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  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: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.cs	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/GraphVisualizationInfoView.cs	(revision 6036)
@@ -0,0 +1,352 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using System.Threading;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using Netron.Diagramming.Core;
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  [View("GraphVisualizationInfo View")]
+  [Content(typeof(IGraphVisualizationInfo), true)]
+  public partial class GraphVisualizationInfoView : AsynchronousContentView {
+    private BidirectionalLookup<IShapeInfo, IShape> shapeInfoShapeMapping;
+    private BidirectionalLookup<IConnectionInfo, IConnection> connectionInfoConnectionMapping;
+    private LinePenStyle connectionPenStyle;
+
+    public GraphVisualizationInfoView() {
+      InitializeComponent();
+      this.shapeInfoShapeMapping = new BidirectionalLookup<IShapeInfo, IShape>();
+      this.connectionInfoConnectionMapping = new BidirectionalLookup<IConnectionInfo, IConnection>();
+      this.connectionPenStyle = new LinePenStyle();
+      this.connectionPenStyle.EndCap = LineCap.ArrowAnchor;
+
+      PasteTool pasteTool = (PasteTool)this.Controller.Tools.Where(t => t.Name == ControllerBase.PasteToolName).FirstOrDefault();
+      CopyTool copyTool = (CopyTool)this.Controller.Tools.Where(t => t.Name == ControllerBase.CopyToolName).FirstOrDefault();
+      HeuristicLab.Netron.Controller controller = this.Controller as HeuristicLab.Netron.Controller;
+      if (controller != null) {
+        if (pasteTool != null) controller.RemoveTool(pasteTool);
+        if (copyTool != null) controller.RemoveTool(copyTool);
+      }
+    }
+
+    public IController Controller {
+      get { return this.graphVisualization.Controller; }
+    }
+
+    public new IGraphVisualizationInfo Content {
+      get { return (IGraphVisualizationInfo)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      this.UpdateContent();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.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 || Locked) && deleteTool != null && controller != null)
+          controller.RemoveTool(deleteTool);
+        else if ((!ReadOnly && !Locked) && deleteTool == null)
+          this.Controller.AddTool(new DeleteTool(ControllerBase.DeleteToolName));
+      }
+    }
+
+    private void UpdateContent() {
+      foreach (IConnectionInfo connectionInfo in this.connectionInfoConnectionMapping.FirstValues.ToList())
+        this.RemoveConnectionInfo(connectionInfo);
+      this.connectionInfoConnectionMapping.Clear();
+      foreach (IShapeInfo shapeInfo in this.shapeInfoShapeMapping.FirstValues.ToList())
+        this.RemoveShapeInfo(shapeInfo);
+      this.shapeInfoShapeMapping.Clear();
+
+      if (Content != null) {
+        foreach (IShapeInfo shapeInfo in this.Content.ShapeInfos)
+          this.AddShapeInfo(shapeInfo);
+        foreach (IConnectionInfo connectionInfo in this.Content.ConnectionInfos)
+          this.AddConnectionInfo(connectionInfo);
+        this.UpdateLayoutRoot();
+      }
+    }
+    private void UpdateLayoutRoot() {
+      IShapeInfo 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 CollectionItemsChangedEventHandler<IShapeInfo>(ShapeInfos_ItemsAdded);
+      this.Content.ObserveableShapeInfos.ItemsRemoved += new CollectionItemsChangedEventHandler<IShapeInfo>(ShapeInfos_ItemsRemoved);
+      this.Content.ObserveableShapeInfos.CollectionReset += new CollectionItemsChangedEventHandler<IShapeInfo>(ShapeInfos_CollectionReset);
+
+      this.Content.ObservableConnectionInfos.ItemsAdded += new CollectionItemsChangedEventHandler<IConnectionInfo>(ConnectionInfos_ItemsAdded);
+      this.Content.ObservableConnectionInfos.ItemsRemoved += new CollectionItemsChangedEventHandler<IConnectionInfo>(ConnectionInfos_ItemsRemoved);
+      this.Content.ObservableConnectionInfos.CollectionReset += new CollectionItemsChangedEventHandler<IConnectionInfo>(ConnectionInfos_CollectionReset);
+    }
+
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      this.Content.InitialShapeChanged -= new EventHandler(VisualizationInfo_InitialShapeChanged);
+
+      this.Content.ObserveableShapeInfos.ItemsAdded -= new CollectionItemsChangedEventHandler<IShapeInfo>(ShapeInfos_ItemsAdded);
+      this.Content.ObserveableShapeInfos.ItemsRemoved -= new CollectionItemsChangedEventHandler<IShapeInfo>(ShapeInfos_ItemsRemoved);
+      this.Content.ObserveableShapeInfos.CollectionReset -= new CollectionItemsChangedEventHandler<IShapeInfo>(ShapeInfos_CollectionReset);
+
+      this.Content.ObservableConnectionInfos.ItemsAdded -= new CollectionItemsChangedEventHandler<IConnectionInfo>(ConnectionInfos_ItemsAdded);
+      this.Content.ObservableConnectionInfos.ItemsRemoved -= new CollectionItemsChangedEventHandler<IConnectionInfo>(ConnectionInfos_ItemsRemoved);
+      this.Content.ObservableConnectionInfos.CollectionReset -= new CollectionItemsChangedEventHandler<IConnectionInfo>(ConnectionInfos_CollectionReset);
+    }
+
+    #region ShapeInfos
+    private void ShapeInfos_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IShapeInfo> e) {
+      foreach (IShapeInfo shapeInfo in e.OldItems)
+        this.RemoveShapeInfo(shapeInfo);
+      foreach (IShapeInfo shapeInfo in e.Items)
+        this.AddShapeInfo(shapeInfo);
+    }
+    private void ShapeInfos_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IShapeInfo> e) {
+      foreach (IShapeInfo shapeInfo in e.Items)
+        this.AddShapeInfo(shapeInfo);
+    }
+    private void ShapeInfos_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IShapeInfo> e) {
+      foreach (IShapeInfo shapeInfo in e.Items)
+        this.RemoveShapeInfo(shapeInfo);
+    }
+
+    private void AddShapeInfo(IShapeInfo shapeInfo) {
+      this.RegisterShapeInfoEvents(shapeInfo);
+      IShape shape = shapeInfo.CreateShape();
+      this.RegisterShapeEvents(shape);
+      this.shapeInfoShapeMapping.Add(shapeInfo, shape);
+
+      this.graphVisualization.Controller.Model.AddShape(shape);
+      this.graphVisualization.Invalidate();
+    }
+    private void RemoveShapeInfo(IShapeInfo shapeInfo) {
+      this.DeregisterShapeInfoEvents(shapeInfo);
+      IShape shape = this.shapeInfoShapeMapping.GetByFirst(shapeInfo);
+      this.DeregisterShapeEvents(shape);
+      this.shapeInfoShapeMapping.RemoveByFirst(shapeInfo);
+
+      if (this.graphVisualization.Controller.Model.Shapes.Contains(shape)) {
+        this.graphVisualization.Controller.Model.RemoveShape(shape);
+        this.graphVisualization.Controller.Model.Selection.Clear();
+        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 shapeInfo_Changed(object sender, EventArgs e) {
+      IShapeInfo shapeInfo = (IShapeInfo)sender;
+      IShape shape = this.shapeInfoShapeMapping.GetByFirst(shapeInfo);
+      this.DeregisterShapeEvents(shape);
+      shapeInfo.UpdateShape(shape);
+      shape.Invalidate();
+      this.RegisterShapeEvents(shape);
+    }
+    #endregion
+
+    #region ConnectionInfos
+    private void ConnectionInfos_CollectionReset(object sender, CollectionItemsChangedEventArgs<IConnectionInfo> e) {
+      foreach (IConnectionInfo connectionInfo in e.Items)
+        this.RemoveConnectionInfo(connectionInfo);
+      foreach (IConnectionInfo connectionInfo in e.Items)
+        this.AddConnectionInfo(connectionInfo);
+    }
+    private void ConnectionInfos_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IConnectionInfo> e) {
+      foreach (IConnectionInfo connectionInfo in e.Items)
+        this.AddConnectionInfo(connectionInfo);
+    }
+    private void ConnectionInfos_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IConnectionInfo> e) {
+      foreach (IConnectionInfo connectionInfo in e.Items)
+        this.RemoveConnectionInfo(connectionInfo);
+    }
+
+    private void AddConnectionInfo(IConnectionInfo connectionInfo) {
+      this.RegisterConnectionInfoEvents(connectionInfo);
+      IShape shapeFrom = this.shapeInfoShapeMapping.GetByFirst(connectionInfo.From);
+      IShape shapeTo = this.shapeInfoShapeMapping.GetByFirst(connectionInfo.To);
+
+      IConnector connectorFrom = shapeFrom.Connectors.Where(c => c.Name == connectionInfo.ConnectorFrom).FirstOrDefault();
+      IConnector connectorTo = shapeTo.Connectors.Where(c => c.Name == connectionInfo.ConnectorTo).FirstOrDefault();
+      if (connectorFrom != null && connectorTo != null) {
+        Connection connection = new Connection(connectorFrom.Point, connectorTo.Point);
+        connection.From.AllowMove = false;
+        connection.To.AllowMove = false;
+        connectorFrom.AttachConnector(connection.From);
+        connectorTo.AttachConnector(connection.To);
+        connection.PenStyle = this.connectionPenStyle;
+        this.connectionInfoConnectionMapping.Add(connectionInfo, connection);
+        this.graphVisualization.Controller.Model.AddConnection(connection);
+        this.graphVisualization.Invalidate();
+      }
+    }
+
+    private void RemoveConnectionInfo(IConnectionInfo connectionInfo) {
+      DeregisterConnectionInfoEvents(connectionInfo);
+      IConnection connection = this.connectionInfoConnectionMapping.GetByFirst(connectionInfo);
+      this.connectionInfoConnectionMapping.RemoveByFirst(connectionInfo);
+      this.RemoveConnection(connection);
+
+    }
+    private void RemoveConnection(IConnection connection) {
+      if (connection.From.AttachedTo != null)
+        connection.From.DetachFromParent();
+      if (connection.To.AttachedTo != null)
+        connection.To.DetachFromParent();
+      if (this.Controller.Model.Connections.Contains(connection)) {
+        this.graphVisualization.Controller.Model.Remove(connection);
+        this.graphVisualization.Invalidate();
+      }
+    }
+
+    private void RegisterConnectionInfoEvents(IConnectionInfo connectionInfo) {
+      connectionInfo.Changed += new EventHandler(connectionInfo_Changed);
+    }
+    private void DeregisterConnectionInfoEvents(IConnectionInfo connectionInfo) {
+      connectionInfo.Changed -= new EventHandler(connectionInfo_Changed);
+    }
+    private void connectionInfo_Changed(object sender, EventArgs e) {
+      IConnectionInfo connectionInfo = (IConnectionInfo)sender;
+      IConnection connection = this.connectionInfoConnectionMapping.GetByFirst(connectionInfo);
+      this.RemoveConnectionInfo(connectionInfo);
+      this.AddConnectionInfo(connectionInfo);
+    }
+    #endregion
+
+    #region netron events - shapes, graphvisualization
+    private void RegisterShapeEvents(IShape shape) {
+      shape.OnEntityChange += new EventHandler<EntityEventArgs>(shape_OnEntityChange);
+      shape.OnMouseEnter += new EventHandler<EntityMouseEventArgs>(shape_OnMouseEnter);
+      shape.OnMouseLeave += new EventHandler<EntityMouseEventArgs>(shape_OnMouseLeave);
+    }
+
+    private void DeregisterShapeEvents(IShape shape) {
+      shape.OnEntityChange -= new EventHandler<EntityEventArgs>(shape_OnEntityChange);
+      shape.OnMouseEnter -= new EventHandler<EntityMouseEventArgs>(shape_OnMouseEnter);
+      shape.OnMouseLeave -= new EventHandler<EntityMouseEventArgs>(shape_OnMouseLeave);
+    }
+
+    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) {
+      IShape shape = e.Entity as IShape;
+      IShapeInfo shapeInfo = this.shapeInfoShapeMapping.GetBySecond(shape);
+      this.DeregisterShapeInfoEvents(shapeInfo);
+      shapeInfo.UpdateShapeInfo(shape);
+      this.RegisterShapeInfoEvents(shapeInfo);
+      this.graphVisualization.Invalidate();
+    }
+
+
+    private void graphVisualization_OnEntityAdded(object sender, EntityEventArgs e) {
+      IConnection connection = e.Entity as IConnection;
+      if (connection != null && !this.connectionInfoConnectionMapping.ContainsSecond(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) {
+          IShape shapeFrom = (IShape)connectorFrom.Parent;
+          IShape shapeTo = (IShape)connectorTo.Parent;
+          IShapeInfo shapeInfoFrom = this.shapeInfoShapeMapping.GetBySecond(shapeFrom);
+          IShapeInfo shapeInfoTo = this.shapeInfoShapeMapping.GetBySecond(shapeTo);
+          string connectorFromName = connectorFrom.Name;
+          string connectorToName = connectorTo.Name;
+
+          if (shapeInfoFrom != shapeInfoTo) //avoid self references
+            this.Content.AddConnectionInfo(new ConnectionInfo(shapeInfoFrom, connectorFromName, shapeInfoTo, connectorToName));
+        }
+      }
+    }
+
+    private void graphVisualization_OnEntityRemoved(object sender, EntityEventArgs e) {
+      IShape shape = e.Entity as IShape;
+      if (shape != null && this.shapeInfoShapeMapping.ContainsSecond(shape)) {
+        IShapeInfo shapeInfo = this.shapeInfoShapeMapping.GetBySecond(shape);
+        this.Content.RemoveShapeInfo(shapeInfo);
+      }
+
+      IConnection connection = e.Entity as IConnection;
+      if (connection != null && this.connectionInfoConnectionMapping.ContainsSecond(connection)) {
+        IConnectionInfo connectionInfo = connectionInfoConnectionMapping.GetBySecond(connection);
+        this.Content.RemoveConnectionInfo(connectionInfo);
+      }
+    }
+    #endregion
+
+    public void RelayoutGraph() {
+      if (this.shapeInfoShapeMapping.Count > 0
+        && this.connectionInfoConnectionMapping.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.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj	(revision 6036)
@@ -0,0 +1,215 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0C39A349-1979-419A-89BD-E4E2F26BD287}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Operators.Views.GraphVisualization.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Operators.Views.GraphVisualization.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </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>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </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>
+    <CodeAnalysisLogFile>bin\Debug\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+  </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>
+    <CodeAnalysisLogFile>bin\Debug\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ShapeInfoExtensions.cs" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="GraphVisualizationInfoView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GraphVisualizationInfoView.Designer.cs">
+      <DependentUpon>GraphVisualizationInfoView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorGraphView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorGraphView.Designer.cs">
+      <DependentUpon>OperatorGraphView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorShape.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</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.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446.csproj">
+      <Project>{BB994448-2B21-4564-BB2E-38D8FFF8CF18}</Project>
+      <Name>HeuristicLab.Netron-3.0.2672.12446 %28HeuristicLab.ExtLibs\HeuristicLab.Netron\HeuristicLab.Netron-3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446%29</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\Netron.Diagramming.Core-3.0.2672.12446\Netron.Diagramming.Core-3.0.2672.12446.csproj">
+      <Project>{96AEBBEE-4203-45F3-BCF5-7B73BF256BDA}</Project>
+      <Name>Netron.Diagramming.Core-3.0.2672.12446</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </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.Operators.Views.GraphVisualization\3.3\HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj">
+      <Project>{57F38579-409D-4DD8-AB19-3F2C4A665126}</Project>
+      <Name>HeuristicLab.Operators.Views.GraphVisualization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators.Views\3.3\HeuristicLab.Operators.Views-3.3.csproj">
+      <Project>{C49CB749-8B24-4628-8003-E86475749410}</Project>
+      <Name>HeuristicLab.Operators.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj">
+      <Project>{C664305E-497C-4533-A140-967DEDB05C19}</Project>
+      <Name>HeuristicLab.Optimizer-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <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\Plugin.cs.frame" "%25ProjectDir%25\Plugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- 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>
+  -->
+</Project>
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.Designer.cs	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.Designer.cs	(revision 6036)
@@ -0,0 +1,296 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  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();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OperatorGraphView));
+      this.graphVisualizationInfoView = new HeuristicLab.Operators.Views.GraphVisualization.Views.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.screenshotButton = new System.Windows.Forms.Button();
+      this.zoomOutButton = new System.Windows.Forms.Button();
+      this.zoomInButton = new System.Windows.Forms.Button();
+      this.zoomToFitButton = new System.Windows.Forms.Button();
+      this.relayoutButton = new System.Windows.Forms.Button();
+      this.connectButton = new System.Windows.Forms.Button();
+      this.panButton = new System.Windows.Forms.Button();
+      this.selectButton = new System.Windows.Forms.Button();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.detailsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.buttonToolTip = new System.Windows.Forms.ToolTip(this.components);
+      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.Content = null;
+      this.graphVisualizationInfoView.Location = new System.Drawing.Point(3, 30);
+      this.graphVisualizationInfoView.Name = "graphVisualizationInfoView";
+      this.graphVisualizationInfoView.ReadOnly = false;
+      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.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
+      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 = "Breakpoint";
+      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.zoomToFitButton);
+      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;
+      // 
+      // screenshotButton
+      // 
+      this.screenshotButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Image;
+      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.buttonToolTip.SetToolTip(this.screenshotButton, "Screenshot");
+      this.screenshotButton.UseVisualStyleBackColor = true;
+      this.screenshotButton.Click += new System.EventHandler(this.screenshotButton_Click);
+      // 
+      // zoomOutButton
+      // 
+      this.zoomOutButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.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.buttonToolTip.SetToolTip(this.zoomOutButton, "Zoom Out");
+      this.zoomOutButton.UseVisualStyleBackColor = true;
+      this.zoomOutButton.Click += new System.EventHandler(this.zoomOutButton_Click);
+      // 
+      // zoomInButton
+      // 
+      this.zoomInButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.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.buttonToolTip.SetToolTip(this.zoomInButton, "Zoom In");
+      this.zoomInButton.UseVisualStyleBackColor = true;
+      this.zoomInButton.Click += new System.EventHandler(this.zoomInButton_Click);
+      // 
+      // zoomAreaButton
+      // 
+      this.zoomToFitButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.ActualSize;
+      this.zoomToFitButton.Location = new System.Drawing.Point(153, 3);
+      this.zoomToFitButton.Name = "zoomAreaButton";
+      this.zoomToFitButton.Size = new System.Drawing.Size(24, 24);
+      this.zoomToFitButton.TabIndex = 5;
+      this.buttonToolTip.SetToolTip(this.zoomToFitButton, "Zoom to Fit");
+      this.zoomToFitButton.UseVisualStyleBackColor = true;
+      this.zoomToFitButton.Click += new System.EventHandler(this.zoomAreaButton_Click);
+      // 
+      // relayoutButton
+      // 
+      this.relayoutButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.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.buttonToolTip.SetToolTip(this.relayoutButton, "Relayout Graph");
+      this.relayoutButton.UseVisualStyleBackColor = true;
+      this.relayoutButton.Click += new System.EventHandler(this.relayoutButton_Click);
+      // 
+      // connectButton
+      // 
+      this.connectButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.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.buttonToolTip.SetToolTip(this.connectButton, "Connection Tool");
+      this.connectButton.UseVisualStyleBackColor = true;
+      this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
+      // 
+      // panButton
+      // 
+      this.panButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.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.buttonToolTip.SetToolTip(this.panButton, "Pan Tool");
+      this.panButton.UseVisualStyleBackColor = true;
+      this.panButton.Click += new System.EventHandler(this.panButton_Click);
+      // 
+      // selectButton
+      // 
+      this.selectButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.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.buttonToolTip.SetToolTip(this.selectButton, "Select Tool");
+      this.selectButton.UseVisualStyleBackColor = true;
+      this.selectButton.Click += new System.EventHandler(this.selectButton_Click);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.detailsGroupBox.Controls.Add(this.detailsViewHost);
+      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.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.detailsViewHost.Content = null;
+      this.detailsViewHost.Location = new System.Drawing.Point(3, 16);
+      this.detailsViewHost.Name = "detailsViewHost";
+      this.detailsViewHost.ReadOnly = false;
+      this.detailsViewHost.Size = new System.Drawing.Size(659, 142);
+      this.detailsViewHost.TabIndex = 0;
+      this.detailsViewHost.ViewType = null;
+      // 
+      // OperatorGraphView
+      // 
+      this.DragOver += new System.Windows.Forms.DragEventHandler(this.OperatorGraphView_DragEnterOver);
+      this.DragDrop += new System.Windows.Forms.DragEventHandler(this.OperatorGraphView_DragDrop);
+      this.DragEnter += new System.Windows.Forms.DragEventHandler(this.OperatorGraphView_DragEnterOver);
+      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.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 zoomToFitButton;
+    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: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.cs	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorGraphView.cs	(revision 6036)
@@ -0,0 +1,310 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using Netron.Diagramming.Core;
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  [View("OperatorGraph View (Chart)")]
+  [Content(typeof(OperatorGraph), true)]
+  public partial class OperatorGraphView : AsynchronousContentView {
+    public OperatorGraphView() {
+      InitializeComponent();
+
+      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 new OperatorGraph Content {
+      get { return (OperatorGraph)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      if (Content != null) {
+        bool createdVisualizationInfo = false;
+        if (this.VisualizationInfo == null) {
+          this.VisualizationInfo = new OperatorGraphVisualizationInfo(this.Content);
+          createdVisualizationInfo = true;
+        }
+        this.graphVisualizationInfoView.Content = this.VisualizationInfo;
+        if (createdVisualizationInfo)
+          this.graphVisualizationInfoView.RelayoutGraph();
+      } else {
+        this.graphVisualizationInfoView.Content = null;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) {
+        selectButton.Enabled = false;
+        panButton.Enabled = false;
+        relayoutButton.Enabled = false;
+        zoomToFitButton.Enabled = false;
+        zoomInButton.Enabled = false;
+        zoomOutButton.Enabled = false;
+        screenshotButton.Enabled = false;
+        detailsViewHost.Enabled = false;
+        connectButton.Enabled = false;
+      } else {
+        selectButton.Enabled = true;
+        panButton.Enabled = true;
+        relayoutButton.Enabled = true;
+        zoomToFitButton.Enabled = true;
+        zoomInButton.Enabled = true;
+        zoomOutButton.Enabled = true;
+        screenshotButton.Enabled = true;
+        detailsViewHost.Enabled = true;
+        connectButton.Enabled = !ReadOnly;
+      }
+    }
+
+    private OperatorGraphVisualizationInfo VisualizationInfo {
+      get { return Content.VisualizationInfo as OperatorGraphVisualizationInfo; }
+      set { this.Content.VisualizationInfo = value; }
+    }
+
+    private void Controller_SelectionChanged(object sender, EventArgs e) {
+      this.detailsViewHost.ViewType = null;
+      this.detailsViewHost.Content = null;
+
+      CollectionBase<IDiagramEntity> selectedObjects = this.graphVisualizationInfoView.Controller.Model.Selection.SelectedItems;
+      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.Content = op;
+        }
+      }
+
+      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;
+          }
+        }
+      }
+
+    }
+
+    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);
+            IContentView view = MainFormManager.MainForm.ShowContent(op);
+            if (view != null) {
+              view.ReadOnly = this.ReadOnly;
+              view.Locked = this.Locked;
+            }
+            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.initialToolStripMenuItem.Enabled = !ReadOnly && !Locked;
+        this.breakPointToolStripMenuItem.Checked = op.Breakpoint;
+        this.breakPointToolStripMenuItem.Enabled = !Locked;
+      }
+    }
+
+    private void openViewToolStripMenuItem_Click(object sender, EventArgs e) {
+      IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
+      if (shapeInfo != null) {
+        IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
+        IContentView view = MainFormManager.MainForm.ShowContent(op);
+        if (view != null) {
+          view.ReadOnly = this.ReadOnly;
+          view.Locked = this.Locked;
+        }
+      }
+    }
+
+    private void initialOperatorToolStripMenuItem_Click(object sender, EventArgs e) {
+      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) {
+      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_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IOperator)) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+      }
+    }
+
+    private void OperatorGraphView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IOperator op = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as IOperator;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) op = (IOperator)op.Clone();
+        IOperatorShapeInfo shapeInfo = OperatorShapeInfoFactory.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.zoomToFitButton;
+          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 = "png";
+      saveFileDialog.Filter = "Portable Network Graphics|*.png|All Files|*.*";
+      saveFileDialog.FilterIndex = 1;
+      saveFileDialog.AddExtension = true;
+
+      if (saveFileDialog.ShowDialog() == DialogResult.OK) {
+        bitmap.Save(saveFileDialog.FileName);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorShape.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorShape.cs	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/OperatorShape.cs	(revision 6036)
@@ -0,0 +1,280 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using HeuristicLab.Netron;
+using Netron.Diagramming.Core;
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  public class OperatorShape : ComplexShapeBase {
+    private static int LABEL_HEIGHT = 16;
+    private static int LABEL_WIDTH = 180;
+    private static int LABEL_SPACING = 3;
+    private int headerHeight = 30;
+
+    private ExpandableIconMaterial expandIconMaterial;
+    public OperatorShape()
+      : base() {
+      this.Resizable = false;
+      this.additionalConnectors = new List<IConnector>();
+      this.labels = new List<string>();
+    }
+
+    public override string EntityName {
+      get { return "Operator Shape"; }
+    }
+
+    public bool Collapsed {
+      get { return this.expandIconMaterial.Collapsed; }
+      set {
+        if (this.expandIconMaterial.Collapsed != value)
+          this.expandIconMaterial.Collapsed = value;
+      }
+    }
+
+    private Color lineColor;
+    public Color LineColor {
+      get { return this.lineColor; }
+      set { this.lineColor = value; }
+    }
+
+    private float lineWidth;
+    public float LineWidth {
+      get { return this.lineWidth; }
+      set { this.lineWidth = value; }
+    }
+
+    private Color color;
+    public Color Color {
+      get { return this.color; }
+      set { this.color = value; }
+    }
+
+    private string title;
+    public string Title {
+      get { return title; }
+      set { title = value; }
+    }
+
+    private IconMaterial iconMaterial;
+    public Bitmap Icon {
+      get { return this.iconMaterial.Icon; }
+      set {
+        this.iconMaterial.Icon = value;
+        this.iconMaterial.Transform(new Rectangle(new Point(Rectangle.X + 5, Rectangle.Y + 5), this.iconMaterial.Icon.Size));
+      }
+    }
+
+    #region additional connectors
+    private List<IConnector> additionalConnectors;
+    public IEnumerable<string> AdditionalConnectorNames {
+      get { return this.additionalConnectors.Select(c => c.Name); }
+    }
+
+    private IConnector predecessor;
+    public IConnector Predecessor {
+      get { return this.predecessor; }
+    }
+
+    private IConnector successor;
+    public IConnector Successor {
+      get { return this.successor; }
+    }
+
+    private IConnector CreateConnector(string connectorName, Point location) {
+      Connector connector = new Connector(location, this.Model);
+      connector.ConnectorStyle = ConnectorStyle.Square;
+      connector.Parent = this;
+      connector.Name = connectorName;
+      return connector;
+    }
+
+    public void AddConnector(string connectorName) {
+      IConnector connector = this.CreateConnector(connectorName, this.BottomRightCorner);
+
+      this.additionalConnectors.Add(connector);
+      this.Connectors.Add(connector);
+      this.UpdateConnectorLocation();
+    }
+
+    public void RemoveConnector(string connectorName) {
+      IConnector connector = this.additionalConnectors.Where(c => c.Name == connectorName).FirstOrDefault();
+      if (connector != null) {
+        this.additionalConnectors.Remove(connector);
+        this.Connectors.Remove(connector);
+        this.UpdateConnectorLocation();
+      }
+    }
+
+    private void UpdateConnectorLocation() {
+      if (this.additionalConnectors.Count == 0)
+        return;
+
+      int spacing = this.Rectangle.Width / this.additionalConnectors.Count;
+      int margin = spacing / 2;
+      int posX = margin + this.Rectangle.X;
+      for (int i = 0; i < this.additionalConnectors.Count; i++) {
+        this.additionalConnectors[i].MoveBy(new Point(posX - this.additionalConnectors[i].Point.X, 0));
+        posX += spacing;
+      }
+    }
+    #endregion
+
+    #region label material
+    private List<string> labels;
+    public IEnumerable<string> Labels {
+      get { return this.labels; }
+    }
+
+    public void UpdateLabels(IEnumerable<string> labels) {
+      this.labels = new List<string>(labels);
+      this.expandIconMaterial.Visible = this.labels.Count != 0;
+      this.UpdateLabels();
+    }
+    #endregion
+
+    private void expandIconMaterial_OnExpand(object sender, EventArgs e) {
+      this.UpdateLabels();
+    }
+
+    private void expandIconMaterial_OnCollapse(object sender, EventArgs e) {
+      this.UpdateLabels();
+    }
+
+    private Size CalculateSize() {
+      int width = this.Rectangle.Width;
+      int height = headerHeight;
+      if (!Collapsed)
+        height += this.labels.Count * (LABEL_HEIGHT + LABEL_SPACING);
+      return new Size(width, height);
+    }
+
+    private void UpdateLabels() {
+      Size newSize = CalculateSize();
+      if (this.Rectangle.Size != newSize) {
+        foreach (IConnector connector in this.additionalConnectors)
+          connector.MoveBy(new Point(0, newSize.Height - this.Rectangle.Height));
+        this.mRectangle = new Rectangle(this.Rectangle.Location, newSize);
+        this.Invalidate();
+        this.RaiseOnChange(this, new EntityEventArgs(this));
+      }
+    }
+
+    protected override void Initialize() {
+      base.Initialize();
+
+      //the initial size
+      this.Transform(0, 0, 200, headerHeight);
+      this.color = Color.LightBlue;
+
+      this.iconMaterial = new IconMaterial();
+      this.iconMaterial.Gliding = false;
+      this.Children.Add(iconMaterial);
+
+      Bitmap expandBitmap = new Bitmap(HeuristicLab.Common.Resources.VSImageLibrary.Expand);
+      Bitmap collapseBitmap = new Bitmap(HeuristicLab.Common.Resources.VSImageLibrary.Collapse);
+      this.expandIconMaterial = new ExpandableIconMaterial(expandBitmap, collapseBitmap);
+      this.expandIconMaterial.Gliding = false;
+      this.expandIconMaterial.Transform(new Rectangle(new Point(Rectangle.Right - 20, Rectangle.Y + 7), expandIconMaterial.Icon.Size));
+      this.expandIconMaterial.Visible = false;
+      this.expandIconMaterial.OnExpand += new EventHandler(expandIconMaterial_OnExpand);
+      this.expandIconMaterial.OnCollapse += new EventHandler(expandIconMaterial_OnCollapse);
+      this.Children.Add(expandIconMaterial);
+
+      this.predecessor = this.CreateConnector(OperatorShapeInfoFactory.PredecessorConnector, new Point(Rectangle.Left, Center.Y));
+      this.Connectors.Add(predecessor);
+
+      this.successor = this.CreateConnector(OperatorShapeInfoFactory.SuccessorConnector, (new Point(Rectangle.Right, Center.Y)));
+      this.Connectors.Add(successor);
+    }
+
+    public override void Paint(Graphics g) {
+      base.Paint(g);
+
+      g.SmoothingMode = SmoothingMode.HighQuality;
+
+      Pen pen = new Pen(lineColor, lineWidth);
+
+      SizeF titleSize = g.MeasureString(this.Title, ArtPalette.DefaultBoldFont, Rectangle.Width - 45);
+      if (titleSize.Height + 10 > Rectangle.Height) {
+        headerHeight = (int)titleSize.Height + 10;
+        this.UpdateLabels();
+      }
+
+      GraphicsPath path = new GraphicsPath();
+      path.AddArc(Rectangle.X, Rectangle.Y, 20, 20, -180, 90);
+      path.AddLine(Rectangle.X + 10, Rectangle.Y, Rectangle.X + Rectangle.Width - 10, Rectangle.Y);
+      path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y, 20, 20, -90, 90);
+      path.AddLine(Rectangle.X + Rectangle.Width, Rectangle.Y + 10, Rectangle.X + Rectangle.Width, Rectangle.Y + Rectangle.Height - 10);
+      path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y + Rectangle.Height - 20, 20, 20, 0, 90);
+      path.AddLine(Rectangle.X + Rectangle.Width - 10, Rectangle.Y + Rectangle.Height, Rectangle.X + 10, Rectangle.Y + Rectangle.Height);
+      path.AddArc(Rectangle.X, Rectangle.Y + Rectangle.Height - 20, 20, 20, 90, 90);
+      path.AddLine(Rectangle.X, Rectangle.Y + Rectangle.Height - 10, Rectangle.X, Rectangle.Y + 10);
+      //shadow
+      if (ArtPalette.EnableShadows) {
+        Region darkRegion = new Region(path);
+        darkRegion.Translate(5, 5);
+        g.FillRegion(ArtPalette.ShadowBrush, darkRegion);
+      }
+      //background
+      g.FillPath(Brush, path);
+
+      using (LinearGradientBrush gradientBrush = new LinearGradientBrush(Rectangle.Location, new Point(Rectangle.X + Rectangle.Width, Rectangle.Y), this.Color, Color.White)) {
+        Region gradientRegion = new Region(path);
+        g.FillRegion(gradientBrush, gradientRegion);
+      }
+
+      if (!this.Collapsed) {
+        TextStyle textStyle = new TextStyle(Color.Black, new Font("Arial", 7), StringAlignment.Near, StringAlignment.Near);
+        StringFormat stringFormat = textStyle.StringFormat;
+        stringFormat.Trimming = StringTrimming.EllipsisWord;
+        stringFormat.FormatFlags = StringFormatFlags.LineLimit;
+        Rectangle rect;
+
+        for (int i = 0; i < this.labels.Count; i++) {
+          rect = new Rectangle(Rectangle.X + 25, Rectangle.Y + headerHeight + i * (LABEL_HEIGHT + LABEL_SPACING), LABEL_WIDTH, LABEL_HEIGHT);
+          g.DrawString(textStyle.GetFormattedText(this.labels[i]), textStyle.Font, textStyle.GetBrush(), rect, stringFormat);
+        }
+      }
+
+      //the border
+      g.DrawPath(pen, path);
+
+      //the title
+      g.DrawString(this.Title, ArtPalette.DefaultBoldFont, Brushes.Black, new Rectangle(Rectangle.X + 25, Rectangle.Y + 5, Rectangle.Width - 45, Rectangle.Height - 5));
+
+
+      //the material
+      foreach (IPaintable material in Children)
+        material.Paint(g);
+
+      //the connectors
+      if (this.ShowConnectors) {
+        for (int k = 0; k < Connectors.Count; k++)
+          Connectors[k].Paint(g);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame	(revision 6036)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  [Plugin("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "3.3.3.$WCREV$")]
+  [PluginFile("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Netron", "3.0")]
+  [PluginDependency("HeuristicLab.Operators.Views.GraphVisualization", "3.3")]
+  public class HeuristicLabOperatorsViewsGraphVisualizationViewsPlugin : PluginBase {
+  }
+}
+
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Properties/AssemblyInfo.frame	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Properties/AssemblyInfo.frame	(revision 6036)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.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.Operators.Views.GraphVisualization.Views-3.3")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 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("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/ShapeInfoExtensions.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/ShapeInfoExtensions.cs	(revision 6036)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/ShapeInfoExtensions.cs	(revision 6036)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Netron.Diagramming.Core;
+
+namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
+  internal static class ShapeInfoExtensions {
+    public static IShape CreateShape(this IShapeInfo shapeInfo) {
+      if (shapeInfo is IOperatorShapeInfo) return CreateShape((IOperatorShapeInfo)shapeInfo);
+      throw new ArgumentException("Could not determine which shape object should be created.");
+    }
+
+    public static void UpdateShape(this IShapeInfo shapeInfo, IShape shape) {
+      shape.Location = shapeInfo.Location;
+      if (shapeInfo is IOperatorShapeInfo && shape is OperatorShape)
+        UpdateShape((IOperatorShapeInfo)shapeInfo, (OperatorShape)shape);
+    }
+
+    public static void UpdateShapeInfo(this IShapeInfo shapeInfo, IShape shape) {
+      shapeInfo.Location = shape.Location;
+      if (shapeInfo is IOperatorShapeInfo && shape is OperatorShape)
+        UpdateShapeInfo((IOperatorShapeInfo)shapeInfo, (OperatorShape)shape);
+    }
+
+    #region OperatorShapeInfo specific methos
+    public static OperatorShape CreateShape(IOperatorShapeInfo shapeInfo) {
+      OperatorShape shape = new OperatorShape();
+      shape.Tag = shapeInfo;
+      shape.Location = shapeInfo.Location;
+      shape.Title = shapeInfo.Title;
+      shape.Color = shapeInfo.Color;
+      shape.LineColor = shapeInfo.LineColor;
+      shape.LineWidth = shapeInfo.LineWidth;
+      shape.Icon = shapeInfo.Icon;
+      shape.Collapsed = shapeInfo.Collapsed;
+      foreach (string connectorName in shapeInfo.Connectors)
+        if (connectorName != OperatorShapeInfoFactory.SuccessorConnector && connectorName != OperatorShapeInfoFactory.PredecessorConnector)
+          shape.AddConnector(connectorName);
+
+      shape.UpdateLabels(shapeInfo.Labels);
+      return shape;
+    }
+
+    public static void UpdateShape(IOperatorShapeInfo operatorShapeInfo, OperatorShape operatorShape) {
+      operatorShape.Title = operatorShapeInfo.Title;
+      operatorShape.Color = operatorShapeInfo.Color;
+      operatorShape.LineColor = operatorShapeInfo.LineColor;
+      operatorShape.LineWidth = operatorShapeInfo.LineWidth;
+      operatorShape.Icon = operatorShapeInfo.Icon;
+      operatorShape.Collapsed = operatorShapeInfo.Collapsed;
+
+      int i = 0;
+      int j = 0;
+      //remove old connectors and skip correct connectors
+      List<string> oldConnectorNames = operatorShape.AdditionalConnectorNames.ToList();
+      while (i < operatorShapeInfo.Connectors.Count() && j < oldConnectorNames.Count) {
+        if (operatorShapeInfo.Connectors.ElementAt(i) == OperatorShapeInfoFactory.SuccessorConnector ||
+          operatorShapeInfo.Connectors.ElementAt(i) == OperatorShapeInfoFactory.PredecessorConnector)
+          i++;
+        else if (oldConnectorNames[j] == OperatorShapeInfoFactory.SuccessorConnector ||
+          oldConnectorNames[j] == OperatorShapeInfoFactory.PredecessorConnector)
+          j++;
+        else if (operatorShapeInfo.Connectors.ElementAt(i) != oldConnectorNames[j]) {
+          operatorShape.RemoveConnector(oldConnectorNames[j]);
+          j++;
+        } else {
+          i++;
+          j++;
+        }
+      }
+      //remove remaining old connectors
+      for (; j < oldConnectorNames.Count; j++)
+        operatorShape.RemoveConnector(oldConnectorNames[j]);
+
+      //add new connectors except successor and connector
+      for (; i < operatorShapeInfo.Connectors.Count(); i++)
+        if (operatorShapeInfo.Connectors.ElementAt(i) != OperatorShapeInfoFactory.SuccessorConnector &&
+          operatorShapeInfo.Connectors.ElementAt(i) != OperatorShapeInfoFactory.PredecessorConnector)
+          operatorShape.AddConnector(operatorShapeInfo.Connectors.ElementAt(i));
+
+      operatorShape.UpdateLabels(operatorShapeInfo.Labels);
+    }
+
+    public static void UpdateShapeInfo(IOperatorShapeInfo operatorShapeInfo, OperatorShape operatorShape) {
+      operatorShapeInfo.Title = operatorShape.Title;
+      operatorShapeInfo.Color = operatorShape.Color;
+      operatorShapeInfo.LineColor = operatorShape.LineColor;
+      operatorShapeInfo.LineWidth = operatorShape.LineWidth;
+      operatorShapeInfo.Icon = operatorShape.Icon;
+      operatorShapeInfo.Collapsed = operatorShape.Collapsed;
+    }
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/General/IShapeInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/General/IShapeInfo.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/General/IShapeInfo.cs	(revision 6036)
@@ -24,15 +24,9 @@
 using System.Drawing;
 using HeuristicLab.Common;
-using Netron.Diagramming.Core;
 
 namespace HeuristicLab.Operators.Views.GraphVisualization {
   public interface IShapeInfo : IDeepCloneable {
-    Type ShapeType { get; }
     Point Location { get; set; }
-
-    IShape CreateShape();
     IEnumerable<string> Connectors { get; }
-    void UpdateShape(IShape shape);
-    void UpdateShapeInfo(IShape shape);
 
     event EventHandler Changed;
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/General/ShapeInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/General/ShapeInfo.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/General/ShapeInfo.cs	(revision 6036)
@@ -25,5 +25,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using Netron.Diagramming.Core;
 
 namespace HeuristicLab.Operators.Views.GraphVisualization {
@@ -34,19 +33,8 @@
     protected ShapeInfo(ShapeInfo original, Cloner cloner)
       : base(original, cloner) {
-      shapeType = original.shapeType;
       location = original.location;
     }
 
-    protected ShapeInfo(Type shapeType) {
-      if (!typeof(IShape).IsAssignableFrom(shapeType))
-        throw new ArgumentException("The passed shape type " + shapeType + " must be derived from IShape.");
-      this.shapeType = shapeType;
-    }
-
-    [Storable]
-    private Type shapeType;
-    public Type ShapeType {
-      get { return this.shapeType; }
-    }
+    protected ShapeInfo() : base() { }
 
     [Storable]
@@ -69,19 +57,4 @@
       if (handler != null) this.Changed(this, EventArgs.Empty);
     }
-
-    public virtual IShape CreateShape() {
-      IShape shape = (IShape)Activator.CreateInstance(this.shapeType);
-      shape.Tag = this;
-      shape.Location = this.Location;
-      return shape;
-    }
-
-    public virtual void UpdateShape(IShape shape) {
-      shape.Location = this.Location;
-    }
-
-    public virtual void UpdateShapeInfo(IShape shape) {
-      this.Location = shape.Location;
-    }
   }
 }
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 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj	(revision 6036)
@@ -12,5 +12,6 @@
     <AssemblyName>HeuristicLab.Operators.Views.GraphVisualization-3.3</AssemblyName>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
     <SignAssembly>true</SignAssembly>
@@ -112,4 +113,6 @@
   <ItemGroup>
     <Compile Include="HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs" />
+    <Compile Include="OperatorGraphVisualization\OperatorShape.cs" />
+    <Compile Include="OperatorGraphVisualization\OperatorShapeInfoFactory.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
@@ -119,20 +122,8 @@
     <None Include="Properties\AssemblyInfo.frame" />
     <Compile Include="General\GraphVisualizationInfo.cs" />
-    <Compile Include="General\GraphVisualizationInfoView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="General\GraphVisualizationInfoView.Designer.cs">
-      <DependentUpon>GraphVisualizationInfoView.cs</DependentUpon>
-    </Compile>
     <Compile Include="General\ConnectionInfo.cs" />
     <Compile Include="General\IConnectionInfo.cs" />
     <Compile Include="General\IGraphVisualizationInfo.cs" />
     <Compile Include="OperatorGraphVisualization\IOperatorShapeInfo.cs" />
-    <Compile Include="OperatorGraphVisualization\OperatorGraphView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorGraphVisualization\OperatorGraphView.Designer.cs">
-      <DependentUpon>OperatorGraphView.cs</DependentUpon>
-    </Compile>
     <Compile Include="OperatorGraphVisualization\OperatorGraphVisualizationInfo.cs">
       <SubType>Code</SubType>
@@ -141,9 +132,7 @@
     <Compile Include="BidirectionalLookup.cs" />
     <Compile Include="General\IShapeInfo.cs" />
-    <Compile Include="OperatorGraphVisualization\OperatorShape.cs" />
     <Compile Include="General\ShapeInfo.cs">
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="OperatorGraphVisualization\OperatorShapeInfoFactory.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -152,15 +141,7 @@
       <Name>HeuristicLab.Collections-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
-      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
-      <Name>HeuristicLab.Common.Resources-3.3</Name>
-    </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.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
-      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
-      <Name>HeuristicLab.Core.Views-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
@@ -168,35 +149,7 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446.csproj">
-      <Project>{BB994448-2B21-4564-BB2E-38D8FFF8CF18}</Project>
-      <Name>HeuristicLab.Netron-3.0.2672.12446 %28HeuristicLab.ExtLibs\HeuristicLab.Netron\HeuristicLab.Netron-3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446%29</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\Netron.Diagramming.Core-3.0.2672.12446\Netron.Diagramming.Core-3.0.2672.12446.csproj">
-      <Project>{96AEBBEE-4203-45F3-BCF5-7B73BF256BDA}</Project>
-      <Name>Netron.Diagramming.Core-3.0.2672.12446</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
-      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
-      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
-    </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.Operators.Views\3.3\HeuristicLab.Operators.Views-3.3.csproj">
-      <Project>{C49CB749-8B24-4628-8003-E86475749410}</Project>
-      <Name>HeuristicLab.Operators.Views-3.3</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
       <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
       <Name>HeuristicLab.Operators-3.3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Optimizer\3.3\HeuristicLab.Optimizer-3.3.csproj">
-      <Project>{C664305E-497C-4533-A140-967DEDB05C19}</Project>
-      <Name>HeuristicLab.Optimizer-3.3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
-      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
-      <Name>HeuristicLab.Parameters-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-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 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame	(revision 6036)
@@ -33,9 +33,5 @@
   [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm", "3.3")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
-  [PluginDependency("HeuristicLab.Netron", "3.0")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabOperatorsViewsGraphVisualizationPlugin : PluginBase {
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/IOperatorShapeInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/IOperatorShapeInfo.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/IOperatorShapeInfo.cs	(revision 6036)
@@ -35,4 +35,5 @@
     void RemoveConnector(string connectorName);
 
+    IEnumerable<string> Labels { get; }
     void UpdateLabels(IEnumerable<string> labels);
   }
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorGraphVisualizationInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorGraphVisualizationInfo.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorGraphVisualizationInfo.cs	(revision 6036)
@@ -128,5 +128,5 @@
     }
 
-    internal IOperator GetOperatorForShapeInfo(IOperatorShapeInfo shapeInfo) {
+    public IOperator GetOperatorForShapeInfo(IOperatorShapeInfo shapeInfo) {
       return this.operatorShapeInfoMapping.GetBySecond(shapeInfo);
     }
@@ -192,5 +192,5 @@
 
     #region methods to manipulate operatorgraph by the shape info
-    internal void AddShapeInfo(IOperator op, IOperatorShapeInfo shapeInfo) {
+    public void AddShapeInfo(IOperator op, IOperatorShapeInfo shapeInfo) {
       this.RegisterOperatorEvents(op);
       this.operatorParameterCollectionMapping.Add(op, op.Parameters);
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShape.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShape.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShape.cs	(revision 6036)
@@ -20,262 +20,12 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Linq;
-using HeuristicLab.Netron;
-using Netron.Diagramming.Core;
 
 
 namespace HeuristicLab.Operators.Views.GraphVisualization {
-  public class OperatorShape : ComplexShapeBase {
-    private static int LABEL_HEIGHT = 16;
-    private static int LABEL_WIDTH = 180;
-    private static int LABEL_SPACING = 3;
-    private int headerHeight = 30;
-
-    private ExpandableIconMaterial expandIconMaterial;
-    public OperatorShape()
-      : base() {
-      this.Resizable = false;
-      this.additionalConnectors = new List<IConnector>();
-      this.labels = new List<string>();
-    }
-
-    public override string EntityName {
-      get { return "Operator Shape"; }
-    }
-
-    public bool Collapsed {
-      get { return this.expandIconMaterial.Collapsed; }
-      set {
-        if (this.expandIconMaterial.Collapsed != value)
-          this.expandIconMaterial.Collapsed = value;
-      }
-    }
-
-    private Color lineColor;
-    public Color LineColor {
-      get { return this.lineColor; }
-      set { this.lineColor = value; }
-    }
-
-    private float lineWidth;
-    public float LineWidth {
-      get { return this.lineWidth; }
-      set { this.lineWidth = value; }
-    }
-
-    private Color color;
-    public Color Color {
-      get { return this.color; }
-      set { this.color = value; }
-    }
-
-    private string title;
-    public string Title {
-      get { return title; }
-      set { title = value; }
-    }
-
-    private IconMaterial iconMaterial;
-    public Bitmap Icon {
-      get { return this.iconMaterial.Icon; }
-      set {
-        this.iconMaterial.Icon = value;
-        this.iconMaterial.Transform(new Rectangle(new Point(Rectangle.X + 5, Rectangle.Y + 5), this.iconMaterial.Icon.Size));
-      }
-    }
-
-    #region additional connectors
-    private List<IConnector> additionalConnectors;
-    public IEnumerable<string> AdditionalConnectorNames {
-      get { return this.additionalConnectors.Select(c => c.Name); }
-    }
-
-    private IConnector predecessor;
-    public IConnector Predecessor {
-      get { return this.predecessor; }
-    }
-
-    private IConnector successor;
-    public IConnector Successor {
-      get { return this.successor; }
-    }
-
-    private IConnector CreateConnector(string connectorName, Point location) {
-      Connector connector = new Connector(location, this.Model);
-      connector.ConnectorStyle = ConnectorStyle.Square;
-      connector.Parent = this;
-      connector.Name = connectorName;
-      return connector;
-    }
-
-    public void AddConnector(string connectorName) {
-      IConnector connector = this.CreateConnector(connectorName, this.BottomRightCorner);
-
-      this.additionalConnectors.Add(connector);
-      this.Connectors.Add(connector);
-      this.UpdateConnectorLocation();
-    }
-
-    public void RemoveConnector(string connectorName) {
-      IConnector connector = this.additionalConnectors.Where(c => c.Name == connectorName).FirstOrDefault();
-      if (connector != null) {
-        this.additionalConnectors.Remove(connector);
-        this.Connectors.Remove(connector);
-        this.UpdateConnectorLocation();
-      }
-    }
-
-    private void UpdateConnectorLocation() {
-      if (this.additionalConnectors.Count == 0)
-        return;
-
-      int spacing = this.Rectangle.Width / this.additionalConnectors.Count;
-      int margin = spacing / 2;
-      int posX = margin + this.Rectangle.X;
-      for (int i = 0; i < this.additionalConnectors.Count; i++) {
-        this.additionalConnectors[i].MoveBy(new Point(posX - this.additionalConnectors[i].Point.X, 0));
-        posX += spacing;
-      }
-    }
-    #endregion
-
-    #region label material
-    private List<string> labels;
-    public IEnumerable<string> Labels {
-      get { return this.labels; }
-    }
-
-    public void UpdateLabels(IEnumerable<string> labels) {
-      this.labels = new List<string>(labels);
-      this.expandIconMaterial.Visible = this.labels.Count != 0;
-      this.UpdateLabels();
-    }
-    #endregion
-
-    private void expandIconMaterial_OnExpand(object sender, EventArgs e) {
-      this.UpdateLabels();
-    }
-
-    private void expandIconMaterial_OnCollapse(object sender, EventArgs e) {
-      this.UpdateLabels();
-    }
-
-    private Size CalculateSize() {
-      int width = this.Rectangle.Width;
-      int height = headerHeight;
-      if (!Collapsed)
-        height += this.labels.Count * (LABEL_HEIGHT + LABEL_SPACING);
-      return new Size(width, height);
-    }
-
-    private void UpdateLabels() {
-      Size newSize = CalculateSize();
-      if (this.Rectangle.Size != newSize) {
-        foreach (IConnector connector in this.additionalConnectors)
-          connector.MoveBy(new Point(0, newSize.Height - this.Rectangle.Height));
-        this.mRectangle = new Rectangle(this.Rectangle.Location, newSize);
-        this.Invalidate();
-        this.RaiseOnChange(this, new EntityEventArgs(this));
-      }
-    }
-
-    protected override void Initialize() {
-      base.Initialize();
-
-      //the initial size
-      this.Transform(0, 0, 200, headerHeight);
-      this.color = Color.LightBlue;
-
-      this.iconMaterial = new IconMaterial();
-      this.iconMaterial.Gliding = false;
-      this.Children.Add(iconMaterial);
-
-      Bitmap expandBitmap = new Bitmap(HeuristicLab.Common.Resources.VSImageLibrary.Expand);
-      Bitmap collapseBitmap = new Bitmap(HeuristicLab.Common.Resources.VSImageLibrary.Collapse);
-      this.expandIconMaterial = new ExpandableIconMaterial(expandBitmap, collapseBitmap);
-      this.expandIconMaterial.Gliding = false;
-      this.expandIconMaterial.Transform(new Rectangle(new Point(Rectangle.Right - 20, Rectangle.Y + 7), expandIconMaterial.Icon.Size));
-      this.expandIconMaterial.Visible = false;
-      this.expandIconMaterial.OnExpand += new EventHandler(expandIconMaterial_OnExpand);
-      this.expandIconMaterial.OnCollapse += new EventHandler(expandIconMaterial_OnCollapse);
-      this.Children.Add(expandIconMaterial);
-
-      this.predecessor = this.CreateConnector(OperatorShapeInfoFactory.PredecessorConnector, new Point(Rectangle.Left, Center.Y));
-      this.Connectors.Add(predecessor);
-
-      this.successor = this.CreateConnector(OperatorShapeInfoFactory.SuccessorConnector, (new Point(Rectangle.Right, Center.Y)));
-      this.Connectors.Add(successor);
-    }
-
-    public override void Paint(Graphics g) {
-      base.Paint(g);
-
-      g.SmoothingMode = SmoothingMode.HighQuality;
-
-      Pen pen = new Pen(lineColor, lineWidth);
-
-      SizeF titleSize = g.MeasureString(this.Title, ArtPalette.DefaultBoldFont, Rectangle.Width - 45);
-      if (titleSize.Height + 10 > Rectangle.Height) {
-        headerHeight = (int)titleSize.Height + 10;
-        this.UpdateLabels();
-      }
-
-      GraphicsPath path = new GraphicsPath();
-      path.AddArc(Rectangle.X, Rectangle.Y, 20, 20, -180, 90);
-      path.AddLine(Rectangle.X + 10, Rectangle.Y, Rectangle.X + Rectangle.Width - 10, Rectangle.Y);
-      path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y, 20, 20, -90, 90);
-      path.AddLine(Rectangle.X + Rectangle.Width, Rectangle.Y + 10, Rectangle.X + Rectangle.Width, Rectangle.Y + Rectangle.Height - 10);
-      path.AddArc(Rectangle.X + Rectangle.Width - 20, Rectangle.Y + Rectangle.Height - 20, 20, 20, 0, 90);
-      path.AddLine(Rectangle.X + Rectangle.Width - 10, Rectangle.Y + Rectangle.Height, Rectangle.X + 10, Rectangle.Y + Rectangle.Height);
-      path.AddArc(Rectangle.X, Rectangle.Y + Rectangle.Height - 20, 20, 20, 90, 90);
-      path.AddLine(Rectangle.X, Rectangle.Y + Rectangle.Height - 10, Rectangle.X, Rectangle.Y + 10);
-      //shadow
-      if (ArtPalette.EnableShadows) {
-        Region darkRegion = new Region(path);
-        darkRegion.Translate(5, 5);
-        g.FillRegion(ArtPalette.ShadowBrush, darkRegion);
-      }
-      //background
-      g.FillPath(Brush, path);
-
-      using (LinearGradientBrush gradientBrush = new LinearGradientBrush(Rectangle.Location, new Point(Rectangle.X + Rectangle.Width, Rectangle.Y), this.Color, Color.White)) {
-        Region gradientRegion = new Region(path);
-        g.FillRegion(gradientBrush, gradientRegion);
-      }
-
-      if (!this.Collapsed) {
-        TextStyle textStyle = new TextStyle(Color.Black, new Font("Arial", 7), StringAlignment.Near, StringAlignment.Near);
-        StringFormat stringFormat = textStyle.StringFormat;
-        stringFormat.Trimming = StringTrimming.EllipsisWord;
-        stringFormat.FormatFlags = StringFormatFlags.LineLimit;
-        Rectangle rect;
-
-        for (int i = 0; i < this.labels.Count; i++) {
-          rect = new Rectangle(Rectangle.X + 25, Rectangle.Y + headerHeight + i * (LABEL_HEIGHT + LABEL_SPACING), LABEL_WIDTH, LABEL_HEIGHT);
-          g.DrawString(textStyle.GetFormattedText(this.labels[i]), textStyle.Font, textStyle.GetBrush(), rect, stringFormat);
-        }
-      }
-
-      //the border
-      g.DrawPath(pen, path);
-
-      //the title
-      g.DrawString(this.Title, ArtPalette.DefaultBoldFont, Brushes.Black, new Rectangle(Rectangle.X + 25, Rectangle.Y + 5, Rectangle.Width - 45, Rectangle.Height - 5));
-
-
-      //the material
-      foreach (IPaintable material in Children)
-        material.Paint(g);
-
-      //the connectors
-      if (this.ShowConnectors) {
-        for (int k = 0; k < Connectors.Count; k++)
-          Connectors[k].Paint(g);
-      }
-    }
+  internal class OperatorShape {
+    //21.04.2011 mkommend
+    //Do not delete this empty class, because this type was moved in to the plugin GraphVisualiation.Views
+    //But it is referenced in persisted ShapeInfo objects and thus these files could not be loaded without this type
+    //Should be removed with HL 3.4
   }
 }
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShapeInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShapeInfo.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShapeInfo.cs	(revision 6036)
@@ -22,14 +22,15 @@
 using System.Collections.Generic;
 using System.Drawing;
-using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using Netron.Diagramming.Core;
 
 namespace HeuristicLab.Operators.Views.GraphVisualization {
   [StorableClass]
-  internal class OperatorShapeInfo : ShapeInfo, IOperatorShapeInfo {
+  public class OperatorShapeInfo : ShapeInfo, IOperatorShapeInfo {
     [Storable]
     private List<string> labels;
+    public IEnumerable<string> Labels {
+      get { return labels; }
+    }
 
     private object lockObject = new object();
@@ -61,5 +62,5 @@
 
     public OperatorShapeInfo()
-      : base(typeof(OperatorShape)) {
+      : base() {
       this.connectorNames = new List<string>();
       this.labels = new List<string>();
@@ -173,72 +174,4 @@
       }
     }
-
-    public override IShape CreateShape() {
-      OperatorShape shape = (OperatorShape)base.CreateShape();
-      shape.Title = this.Title;
-      shape.Color = this.Color;
-      shape.LineColor = this.LineColor;
-      shape.LineWidth = this.LineWidth;
-      shape.Icon = this.Icon;
-      shape.Collapsed = this.Collapsed;
-      foreach (string connectorName in this.connectorNames)
-        if (connectorName != OperatorShapeInfoFactory.SuccessorConnector && connectorName != OperatorShapeInfoFactory.PredecessorConnector)
-          shape.AddConnector(connectorName);
-
-      shape.UpdateLabels(this.labels);
-      return shape;
-    }
-
-    public override void UpdateShape(IShape shape) {
-      base.UpdateShape(shape);
-      OperatorShape operatorShape = (OperatorShape)shape;
-      operatorShape.Title = this.Title;
-      operatorShape.Color = this.Color;
-      operatorShape.LineColor = this.LineColor;
-      operatorShape.LineWidth = this.LineWidth;
-      operatorShape.Icon = this.Icon;
-      operatorShape.Collapsed = this.Collapsed;
-
-      int i = 0;
-      int j = 0;
-      //remove old connectors and skip correct connectors
-      List<string> oldConnectorNames = operatorShape.AdditionalConnectorNames.ToList();
-      while (i < this.connectorNames.Count && j < oldConnectorNames.Count) {
-        if (connectorNames[i] == OperatorShapeInfoFactory.SuccessorConnector ||
-          connectorNames[i] == OperatorShapeInfoFactory.PredecessorConnector)
-          i++;
-        else if (oldConnectorNames[j] == OperatorShapeInfoFactory.SuccessorConnector ||
-          oldConnectorNames[j] == OperatorShapeInfoFactory.PredecessorConnector)
-          j++;
-        else if (this.connectorNames[i] != oldConnectorNames[j]) {
-          operatorShape.RemoveConnector(oldConnectorNames[j]);
-          j++;
-        } else {
-          i++;
-          j++;
-        }
-      }
-      //remove remaining old connectors
-      for (; j < oldConnectorNames.Count; j++)
-        operatorShape.RemoveConnector(oldConnectorNames[j]);
-
-      //add new connectors except successor and connector
-      for (; i < this.connectorNames.Count; i++)
-        if (this.connectorNames[i] != OperatorShapeInfoFactory.SuccessorConnector && this.connectorNames[i] != OperatorShapeInfoFactory.PredecessorConnector)
-          operatorShape.AddConnector(this.connectorNames[i]);
-
-      operatorShape.UpdateLabels(this.labels);
-    }
-
-    public override void UpdateShapeInfo(IShape shape) {
-      base.UpdateShapeInfo(shape);
-      OperatorShape operatorShape = (OperatorShape)shape;
-      this.Title = operatorShape.Title;
-      this.Color = operatorShape.Color;
-      this.LineColor = operatorShape.LineColor;
-      this.LineWidth = operatorShape.LineWidth;
-      this.Icon = operatorShape.Icon;
-      this.Collapsed = operatorShape.Collapsed;
-    }
   }
 }
Index: trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShapeInfoFactory.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShapeInfoFactory.cs	(revision 6035)
+++ trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphVisualization/OperatorShapeInfoFactory.cs	(revision 6036)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Operators.Views.GraphVisualization {
-  internal static class OperatorShapeInfoFactory {
+  public static class OperatorShapeInfoFactory {
     public const string PredecessorConnector = "Predecessor";
     public const string SuccessorConnector = "Successor";
Index: trunk/sources/HeuristicLab/3.3/Files.txt
===================================================================
--- trunk/sources/HeuristicLab/3.3/Files.txt	(revision 6035)
+++ trunk/sources/HeuristicLab/3.3/Files.txt	(revision 6036)
@@ -43,4 +43,5 @@
 HeuristicLab.Operators.Views\3.3:HeuristicLab.Operators.Views-3.3.dll
 HeuristicLab.Operators.Views.GraphVisualization\3.3:HeuristicLab.Operators.Views.GraphVisualization-3.3.dll
+HeuristicLab.Operators.Views.GraphVisualization.Views\3.3:HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.dll
 HeuristicLab.Operators.Programmable\3.3:HeuristicLab.Operators.Programmable-3.3.dll
 HeuristicLab.Optimization\3.3:HeuristicLab.Optimization-3.3.dll
Index: trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings
===================================================================
--- trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings	(revision 6035)
+++ trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings	(revision 6036)
@@ -46,4 +46,5 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Netron-3.0.2672.12446.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Programmable-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views.GraphVisualization-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views-3.3.dll" />
Index: trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj
===================================================================
--- trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj	(revision 6035)
+++ trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj	(revision 6036)
@@ -332,4 +332,8 @@
       <Name>HeuristicLab.Operators.Programmable-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Operators.Views.GraphVisualization.Views\3.3\HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj">
+      <Project>{0C39A349-1979-419A-89BD-E4E2F26BD287}</Project>
+      <Name>HeuristicLab.Operators.Views.GraphVisualization.Views-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Operators.Views.GraphVisualization\3.3\HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj">
       <Project>{57F38579-409D-4DD8-AB19-3F2C4A665126}</Project>
