Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/Controller.cs
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/Controller.cs	(revision 3354)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/Controller.cs	(revision 3355)
@@ -56,4 +56,24 @@
       }
     }
+
+    public void RemoveTool(ITool tool) {
+      if (tool == null)
+        return;
+      tool.Controller = null;
+      registeredTools.Remove(tool);
+
+      IMouseListener mouseTool = tool as IMouseListener;
+      if (mouseTool != null)
+        mouseListeners.Remove(mouseTool);
+      IKeyboardListener keyboardTool = tool as IKeyboardListener;
+      if (keyboardTool != null)
+        keyboardListeners.Remove(keyboardTool);
+      IDragDropListener dragdropTool = tool as IDragDropListener;
+      if (dragdropTool != null)
+        dragdropListeners.Remove(dragdropTool);
+
+      tool.OnToolActivate -= new EventHandler<ToolEventArgs>(AddedTool_OnToolActivate);
+      tool.OnToolDeactivate -= new EventHandler<ToolEventArgs>(AddedTool_OnToolDeactivate);
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Core/ControllerBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Core/ControllerBase.cs	(revision 3354)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Core/ControllerBase.cs	(revision 3355)
@@ -155,10 +155,10 @@
     /// </summary>
     private IView mView;
-    private CollectionBase<IMouseListener> mouseListeners;
-    private CollectionBase<IKeyboardListener> keyboardListeners;
-    private CollectionBase<IDragDropListener> dragdropListeners;
-    private IDiagramControl parentControl;
-    private CollectionBase<ITool> registeredTools;
-    private CollectionBase<IActivity> registeredActivity;
+    protected CollectionBase<IMouseListener> mouseListeners;
+    protected CollectionBase<IKeyboardListener> keyboardListeners;
+    protected CollectionBase<IDragDropListener> dragdropListeners;
+    protected IDiagramControl parentControl;
+    protected CollectionBase<ITool> registeredTools;
+    protected CollectionBase<IActivity> registeredActivity;
 
     #endregion
@@ -811,5 +811,5 @@
     /// <param name="e">ToolEventArgs</param>
     // ------------------------------------------------------------------
-    void AddedTool_OnToolDeactivate(object sender, ToolEventArgs e) {
+    protected void AddedTool_OnToolDeactivate(object sender, ToolEventArgs e) {
       ITool nextActiveToolInList = null;
       if (this.activeTool == e.Properties) {
@@ -833,5 +833,5 @@
     /// <param name="e">ToolEventArgs</param>
     // ------------------------------------------------------------------
-    void AddedTool_OnToolActivate(object sender, ToolEventArgs e) {
+    protected void AddedTool_OnToolActivate(object sender, ToolEventArgs e) {
       this.RaiseOnToolActivate(e);
     }
Index: /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.cs	(revision 3354)
+++ /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/GraphVisualizationInfoView.cs	(revision 3355)
@@ -74,4 +74,22 @@
     }
 
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      this.SetEnableStateOfControls();
+    }
+
+    private void SetEnableStateOfControls() {
+      DeleteTool deleteTool = (DeleteTool) this.Controller.Tools.Where( t => t.Name == ControllerBase.DeleteToolName).FirstOrDefault();
+      HeuristicLab.Netron.Controller controller = this.Controller as HeuristicLab.Netron.Controller;
+      if (Content == null && deleteTool != null && controller != null)
+        controller.RemoveTool(deleteTool); 
+      else {
+        if (ReadOnly && deleteTool != null && controller != null)
+          controller.RemoveTool(deleteTool);
+        else if (!ReadOnly && deleteTool == null)
+          this.Controller.AddTool(new DeleteTool(ControllerBase.DeleteToolName));
+      }
+    }
+
     private void UpdateContent() {
       foreach (IOperatorShapeInfo shapeInfo in this.shapeInfoShapeMapping.FirstValues)
@@ -82,12 +100,15 @@
       this.connectionConnectorsMapping.Clear();
 
-      foreach (IOperatorShapeInfo shapeInfo in this.Content.OperatorShapeInfos)
-        if (!this.shapeInfoShapeMapping.ContainsFirst(shapeInfo))
-          this.AddShapeInfo(shapeInfo);
-
-      foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> connection in this.Content.Connections)
-        this.AddConnection(connection.Key.Key, connection.Key.Value, connection.Value);
-
-      this.UpdateLayoutRoot();
+      if (Content != null) {
+        foreach (IOperatorShapeInfo shapeInfo in this.Content.OperatorShapeInfos)
+          if (!this.shapeInfoShapeMapping.ContainsFirst(shapeInfo))
+            this.AddShapeInfo(shapeInfo);
+
+        foreach (KeyValuePair<KeyValuePair<IOperatorShapeInfo, string>, IOperatorShapeInfo> connection in this.Content.Connections)
+          this.AddConnection(connection.Key.Key, connection.Key.Value, connection.Value);
+
+        this.UpdateLayoutRoot();
+      }
+      this.SetEnableStateOfControls();
     }
 
Index: /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.cs	(revision 3354)
+++ /trunk/sources/HeuristicLab.Operators.Views.GraphVisualization/3.3/OperatorGraphView.cs	(revision 3355)
@@ -72,5 +72,40 @@
       if (createdVisualizationInfo)
         this.graphVisualizationInfoView.RelayoutGraph();
-    }
+
+      this.SetEnableStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      this.SetEnableStateOfControls();
+    }
+
+    private void SetEnableStateOfControls() {
+      if (Content == null) {
+        selectButton.Enabled = false;
+        panButton.Enabled = false;
+        relayoutButton.Enabled = false;
+        zoomAreaButton.Enabled = false;
+        zoomInButton.Enabled = false;
+        zoomOutButton.Enabled = false;
+        screenshotButton.Enabled = false;
+        detailsViewHost.Enabled = false;
+        graphVisualizationInfoView.ReadOnly = true;
+        connectButton.Enabled = false;
+        
+      } else {
+        selectButton.Enabled = true;
+        panButton.Enabled = true;
+        relayoutButton.Enabled = true;
+        zoomAreaButton.Enabled = true;
+        zoomInButton.Enabled = true;
+        zoomOutButton.Enabled = true;
+        screenshotButton.Enabled = true;
+        detailsViewHost.Enabled = true;
+        detailsViewHost.ReadOnly = ReadOnly;
+        graphVisualizationInfoView.ReadOnly = ReadOnly;
+        connectButton.Enabled = !ReadOnly;
+      }
+    } 
 
     private GraphVisualizationInfo VisualizationInfo {
@@ -160,16 +195,20 @@
 
     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;
+      if (!ReadOnly) {
+        IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
+        if (this.VisualizationInfo.InitialShape == shapeInfo)
+          this.VisualizationInfo.InitialShape = null;
+        else
+          this.VisualizationInfo.InitialShape = shapeInfo;
+      }
     }
 
     private void breakPointToolStripMenuItem_Click(object sender, EventArgs e) {
-      IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
-      if (shapeInfo != null) {
-        IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
-        op.Breakpoint = !op.Breakpoint;
+      if (!ReadOnly) {
+        IOperatorShapeInfo shapeInfo = this.shapeContextMenu.Tag as IOperatorShapeInfo;
+        if (shapeInfo != null) {
+          IOperator op = this.VisualizationInfo.GetOperatorForShapeInfo(shapeInfo);
+          op.Breakpoint = !op.Breakpoint;
+        }
       }
     }
@@ -179,4 +218,6 @@
     private void OperatorGraphView_DragEnter(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
+      if (ReadOnly)
+        return;
       Type type = e.Data.GetData("Type") as Type;
       if ((type != null) && (typeof(IOperator).IsAssignableFrom(type))) {
