Index: /branches/OptimizationNetworks/HeuristicLab.Common.Resources/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Common.Resources/3.3/Properties/AssemblyInfo.cs.frame	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Common.Resources/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
@@ -1,2 +1,23 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
 using System.Reflection;
 using System.Runtime.CompilerServices;
@@ -11,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2014 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -30,4 +51,7 @@
 //      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.10.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
Index: /branches/OptimizationNetworks/HeuristicLab.Modeler/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Modeler/3.3/Properties/AssemblyInfo.cs.frame	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Modeler/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2014 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.11.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/AddNodesChartMode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/AddNodesChartMode.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/AddNodesChartMode.cs	(revision 13077)
@@ -0,0 +1,124 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Networks.Programmable;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
+  public class AddNodesChartMode : ChartMode {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    public override Image Image { get { return VSImageLibrary.RadialChart; } }
+    public override string ToolTip { get { return "Add Nodes"; } }
+
+    public AddNodesChartMode(ChartControl control) : base(control) { }
+
+    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
+      base.HandleOnMouseMove(sender, e);
+
+      if (!(chartControl.Tag is IUserDefinedNetwork)) return;
+
+      try {
+        chartControl.PictureBox.Refresh();
+
+        var size = new Size(200, 100);
+        using (var graphics = chartControl.PictureBox.CreateGraphics())
+        using (var pen = new Pen(Color.Gray) { DashStyle = DashStyle.Dash }) {
+          graphics.DrawRectangle(pen,
+            (int)Math.Round(e.X - size.Width * 0.5),
+            (int)Math.Round(e.Y - size.Height * 0.5),
+            size.Width,
+            size.Height);
+        }
+      } finally {
+        chartControl.PictureBox.Update();
+      }
+    }
+
+    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
+      base.HandleOnMouseUp(sender, e);
+
+      switch (e.Button) {
+        case MouseButtons.Left:
+          var network = chartControl.Tag as IUserDefinedNetwork;
+          if (network == null) return;
+
+          var node = CreateNode(network);
+          var visualizableNode = node as IVisualizableNode;
+          if (visualizableNode == null) return;
+
+          var center = chartControl.Chart.TransformPixelToWorld(e.Location);
+          var size = chartControl.Chart.TransformPixelToWorld(new Size(200, 100));
+
+          visualizableNode.VisualProperties.X = center.X;
+          visualizableNode.VisualProperties.Y = center.Y;
+          visualizableNode.VisualProperties.Width = size.Width;
+          visualizableNode.VisualProperties.Height = size.Height;
+
+          network.Nodes.Add(node);
+          break;
+      }
+    }
+
+    #region Helpers
+    protected virtual INode CreateNode(INetwork network) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Node";
+        typeSelectorDialog.TypeSelector.Caption = "Available Nodes";
+        typeSelectorDialog.TypeSelector.Configure(typeof(INode), false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(chartControl) == DialogResult.OK) {
+        try {
+          var n = (INode)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          n.Name = GetUniqueName(n.Name, network);
+          return n;
+        } catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(chartControl, ex);
+        }
+      }
+      return null;
+    }
+
+    protected virtual string GetUniqueName(string originalName, INetwork network) {
+      if (!network.Nodes.ContainsKey(originalName))
+        return originalName;
+
+      string name;
+      int index = 0;
+      do {
+        index++;
+        name = originalName + index;
+      } while (network.Nodes.ContainsKey(name));
+      return name;
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/AddPortsChartMode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/AddPortsChartMode.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/AddPortsChartMode.cs	(revision 13077)
@@ -0,0 +1,136 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Networks.Programmable;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
+  public class AddPortsChartMode : ChartMode {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    public override Image Image { get { return VSImageLibrary.Interface; } }
+    public override string ToolTip { get { return "Add Ports"; } }
+
+    public AddPortsChartMode(ChartControl control) : base(control) { }
+
+    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
+      base.HandleOnMouseMove(sender, e);
+
+      if (!(chartControl.Tag is IUserDefinedNetwork)) return;
+
+      try {
+        chartControl.PictureBox.Refresh();
+
+        var nodeRectangles = chartControl.Chart.GetAllPrimitives(e.Location).OfType<NodeRectangle>();
+        var nodeRectangle = nodeRectangles.FirstOrDefault();
+        if (nodeRectangle == null) return;
+
+        var size = chartControl.Chart.TransformWorldToPixel(nodeRectangle.Size);
+        var ll = chartControl.Chart.TransformWorldToPixel(nodeRectangle.LowerLeft);
+        var ur = chartControl.Chart.TransformWorldToPixel(nodeRectangle.UpperRight);
+
+        using (var graphics = chartControl.PictureBox.CreateGraphics())
+        using (var pen = new Pen(Color.Green) { Width = 2f }) {
+          graphics.DrawRectangle(pen,
+            ll.X,
+            ur.Y,
+            size.Width,
+            size.Height);
+        }
+      } finally {
+        chartControl.PictureBox.Update();
+      }
+    }
+
+    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
+      base.HandleOnMouseUp(sender, e);
+
+      switch (e.Button) {
+        case MouseButtons.Left:
+          var network = chartControl.Tag as IUserDefinedNetwork;
+          if (network == null) return;
+
+          var nodeRectangles = chartControl.Chart.GetAllPrimitives(e.Location).OfType<NodeRectangle>();
+          var nodeRectangle = nodeRectangles.FirstOrDefault();
+          if (nodeRectangle == null) return;
+
+          var node = nodeRectangle.NetworkItem;
+          var port = CreatePort(node);
+
+          var algNode = node as IAlgorithmNode;
+          if (algNode != null) {
+            algNode.Ports.Add(port);
+            return;
+          }
+
+          var userDefNode = node as IUserDefinedNode;
+          if (userDefNode != null) {
+            userDefNode.Ports.Add(port);
+            return;
+          }
+          break;
+      }
+    }
+
+    #region Helpers
+    protected virtual IPort CreatePort(INode node) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Port";
+        typeSelectorDialog.TypeSelector.Caption = "Available Ports";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IPort), false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(chartControl) == DialogResult.OK) {
+        try {
+          var n = (IPort)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          n.Name = GetUniqueName(n.Name, node);
+          return n;
+        } catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(chartControl, ex);
+        }
+      }
+      return null;
+    }
+
+    protected virtual string GetUniqueName(string originalName, INode node) {
+      if (!node.Ports.ContainsKey(originalName))
+        return originalName;
+
+      string name;
+      int index = 0;
+      do {
+        index++;
+        name = originalName + index;
+      } while (node.Ports.ContainsKey(name));
+      return name;
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/ConnectPortsChartMode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/ConnectPortsChartMode.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/ConnectPortsChartMode.cs	(revision 13077)
@@ -0,0 +1,142 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Networks.Programmable;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization.Views.ChartModes {
+  public class ConnectPortsChartMode : ChartMode {
+    protected PortRectangle startPortRectangle, endPortRectangle;
+
+    public override Image Image { get { return VSImageLibrary.OrgChart; } }
+    public override string ToolTip { get { return "Connect Ports"; } }
+
+    public ConnectPortsChartMode(ChartControl control) : base(control) { }
+
+    public override void HandleOnMouseDown(object sender, MouseEventArgs e) {
+      base.HandleOnMouseDown(sender, e);
+
+      if (!(chartControl.Tag is IUserDefinedNetwork)) return;
+
+      switch (e.Button) {
+        case MouseButtons.Left:
+          var worldLocation = chartControl.Chart.TransformPixelToWorld(e.Location);
+          var nodeRectangles = chartControl.Chart.Group.Primitives.OfType<NodeRectangle>();
+          var portRectangles = nodeRectangles.SelectMany(x => x.NetworkItem.Ports.Select(x.GetPortRectangle));
+          startPortRectangle = portRectangles.FirstOrDefault(x => x.ContainsPoint(worldLocation));
+          break;
+      }
+    }
+
+    public override void HandleOnMouseMove(object sender, MouseEventArgs e) {
+      base.HandleOnMouseMove(sender, e);
+
+      if (!(chartControl.Tag is IUserDefinedNetwork)) return;
+
+      try {
+        chartControl.PictureBox.Refresh();
+
+        var worldLocation = chartControl.Chart.TransformPixelToWorld(e.Location);
+        var nodeRectangles = chartControl.Chart.Group.Primitives.OfType<NodeRectangle>();
+        var portRectangles = nodeRectangles.SelectMany(x => x.NetworkItem.Ports.Select(x.GetPortRectangle)).ToList();
+        var currentPortRectangle = portRectangles.FirstOrDefault(x => x.ContainsPoint(worldLocation));
+
+        // TODO: highlight allowed port connections only
+
+        Point startLocation = Point.Empty;
+        if (startPortRectangle != null) {
+          DrawCircleAroundPortRectangle(startPortRectangle);
+          startLocation = chartControl.Chart.TransformWorldToPixel(startPortRectangle.Point);
+        }
+
+        Point endLocation = e.Location;
+        if (currentPortRectangle != null) {
+          DrawCircleAroundPortRectangle(currentPortRectangle);
+          endLocation = chartControl.Chart.TransformWorldToPixel(currentPortRectangle.Point);
+        }
+
+        if (startPortRectangle != null)
+          DrawLineBetweenLocations(startLocation, endLocation);
+      } finally {
+        chartControl.PictureBox.Update();
+      }
+    }
+
+    public override void HandleOnMouseUp(object sender, MouseEventArgs e) {
+      base.HandleOnMouseUp(sender, e);
+
+      if (!(chartControl.Tag is IUserDefinedNetwork)) return;
+
+      switch (e.Button) {
+        case MouseButtons.Left:
+          var worldLocation = chartControl.Chart.TransformPixelToWorld(e.Location);
+          var nodeRectangles = chartControl.Chart.Group.Primitives.OfType<NodeRectangle>();
+          var portRectangles = nodeRectangles.SelectMany(x => x.NetworkItem.Ports.Select(x.GetPortRectangle)).ToList();
+          endPortRectangle = portRectangles.FirstOrDefault(x => x.ContainsPoint(worldLocation));
+
+          if (startPortRectangle == endPortRectangle && startPortRectangle == null || endPortRectangle == null) {
+            startPortRectangle = null;
+            endPortRectangle = null;
+            return;
+          }
+
+          var startPort = (IConnectablePort)startPortRectangle.NetworkItem;
+          var endPort = (IConnectablePort)endPortRectangle.NetworkItem;
+
+          // TODO: check if port connection is allowed
+
+          startPort.ConnectedPort = endPort;
+
+          startPortRectangle = null;
+          endPortRectangle = null;
+          break;
+      }
+    }
+
+    protected virtual void DrawCircleAroundPortRectangle(PortRectangle portRectangle) {
+      var centerP = chartControl.Chart.TransformWorldToPixel(portRectangle.Point);
+      int a = (int)Math.Round(portRectangle.Size.Width / 2.0 * Math.Sqrt(2));
+      int b = (int)Math.Round(portRectangle.Size.Height / 2.0 * Math.Sqrt(2));
+
+      using (var graphics = chartControl.PictureBox.CreateGraphics())
+      using (var pen = new Pen(Color.Green) { Width = 2f }) {
+        graphics.DrawEllipse(pen,
+          centerP.X - a,
+          centerP.Y - b,
+          a * 2,
+          b * 2);
+      }
+    }
+
+    protected virtual void DrawLineBetweenLocations(Point startLocation, Point endLocation) {
+      using (var graphics = chartControl.PictureBox.CreateGraphics())
+      using (var pen = new Pen(Color.Green) { DashStyle = DashStyle.Dash, Width = 2f })
+        graphics.DrawLine(pen, startLocation.X, startLocation.Y, endLocation.X, endLocation.Y);
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/NetworkSelectChartMode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/NetworkSelectChartMode.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/ChartModes/NetworkSelectChartMode.cs	(revision 13077)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
+  public class NetworkSelectChartMode : SelectChartMode {
+    public NetworkSelectChartMode(ChartControl control) : base(control) { }
+
+    public override void HandleOnKeyDown(object sender, KeyEventArgs e) {
+      switch (e.KeyCode) {
+        case Keys.Delete:
+          if (e.KeyCode == Keys.Delete) {
+            try {
+              chartControl.SuspendRendering();
+              var primitives = chartControl.Chart.Group.SelectedPrimitives.ToList();
+              foreach (var connectionLine in primitives.OfType<ConnectionLine>()) {
+                chartControl.Chart.Group.Remove(connectionLine);
+                var startPortRectangle = connectionLine.StartPortRectangle;
+                if (startPortRectangle != null) {
+                  var startPort = (IMessagePort)startPortRectangle.NetworkItem;
+                  if (startPort != null) startPort.ConnectedPort = null;
+                }
+              }
+
+              foreach (var nodeRectangle in primitives.OfType<NodeRectangle>()) {
+                chartControl.Chart.Group.Remove(nodeRectangle);
+                var node = nodeRectangle.NetworkItem;
+                if (node != null) {
+                  var deletedPorts = node.Ports.OfType<IMessagePort>().ToList();
+                  foreach (var port in deletedPorts)
+                    port.ConnectedPort = null;
+
+                  var connectionLines = chartControl.Chart.Group.Primitives.OfType<ConnectionLine>();
+                  foreach (var connectionLine in connectionLines) {
+                    var startPortRectangle = connectionLine.StartPortRectangle;
+                    var endPortRectangle = connectionLine.EndPortRectangle;
+                    if (startPortRectangle != null && endPortRectangle != null) {
+                      var startPort = (IMessagePort)startPortRectangle.NetworkItem;
+                      var endPort = (IMessagePort)endPortRectangle.NetworkItem;
+                      if (startPort != null && endPort != null && deletedPorts.Contains(endPort))
+                        startPort.ConnectedPort = null;
+                    }
+                  }
+
+                  var parent = node.Parent;
+                  if (parent != null)
+                    parent.Nodes.Remove(node);
+                }
+              }
+            } finally { chartControl.ResumeRendering(); }
+          }
+          break;
+      }
+    }
+
+    public override void HandleOnMouseDoubleClick(object sender, MouseEventArgs e) {
+      base.HandleOnMouseDoubleClick(sender, e);
+
+      switch (e.Button) {
+        case MouseButtons.Left:
+          var p = chartControl.Chart.GetPrimitive(e.Location) as NodeRectangle;
+          if (p != null)
+            MainForm.MainFormManager.MainForm.ShowContent(p.NetworkItem);
+          break;
+      }
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/HeuristicLab.Networks.Views.NetworkVisualization.Views-3.3.csproj
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/HeuristicLab.Networks.Views.NetworkVisualization.Views-3.3.csproj	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/HeuristicLab.Networks.Views.NetworkVisualization.Views-3.3.csproj	(revision 13077)
@@ -0,0 +1,172 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{A1EFA7B2-C288-4342-8318-27F4D2F29C18}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Networks.Views.NetworkVisualization.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Networks.Views.NetworkVisualization.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</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\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Visualization-3.3, Version=3.3.0.12537, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="ChartModes\AddNodesChartMode.cs" />
+    <Compile Include="ChartModes\AddPortsChartMode.cs" />
+    <Compile Include="ChartModes\NetworkSelectChartMode.cs" />
+    <Compile Include="ChartModes\ConnectPortsChartMode.cs" />
+    <Compile Include="NetworkVisualizationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NetworkVisualizationView.Designer.cs">
+      <DependentUpon>NetworkVisualizationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0e27a536-1c4a-4624-a65e-dc4f4f23e3e1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Networks.Views.NetworkVisualization\3.3\HeuristicLab.Networks.Views.NetworkVisualization-3.3.csproj">
+      <Project>{b76a8cf7-be2a-4ce7-943d-ab19a7cc7798}</Project>
+      <Name>HeuristicLab.Networks.Views.NetworkVisualization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Networks.Views\3.3\HeuristicLab.Networks.Views-3.3.csproj">
+      <Project>{792b263d-92ba-453a-bfdf-261511c2f63b}</Project>
+      <Name>HeuristicLab.Networks.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Networks\3.3\HeuristicLab.Networks-3.3.csproj">
+      <Project>{7cf51332-0e37-447c-8017-82a258c59ef2}</Project>
+      <Name>HeuristicLab.Networks-3.3</Name>
+      <Private>False</Private>
+    </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
+</PreBuildEvent>
+  </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: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.Designer.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.Designer.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.Designer.cs	(revision 13077)
@@ -0,0 +1,67 @@
+﻿namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
+  partial class NetworkVisualizationView {
+    /// <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.chartControl = new HeuristicLab.Visualization.ChartControl();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // chartControl
+      // 
+      this.chartControl.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.chartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.chartControl.Location = new System.Drawing.Point(3, 26);
+      this.chartControl.Name = "chartControl";
+      this.chartControl.ScaleOnResize = true;
+      this.chartControl.Size = new System.Drawing.Size(639, 488);
+      this.chartControl.TabIndex = 3;
+      // 
+      // NetworkVisualizationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chartControl);
+      this.Name = "NetworkVisualizationView";
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.chartControl, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private Visualization.ChartControl chartControl;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.cs	(revision 13077)
@@ -0,0 +1,152 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Core.Networks.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Networks.Views.NetworkVisualization.Views.ChartModes;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
+  [View("Network Visualization View")]
+  [Content(typeof(Network), false)]
+  [Content(typeof(INetwork), false)]
+  public partial class NetworkVisualizationView : NetworkItemView {
+    public new INetwork Content {
+      get { return (INetwork)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NetworkVisualizationView() {
+      InitializeComponent();
+
+      var initialMode = new NetworkSelectChartMode(chartControl);
+      chartControl.AddChartModes(
+        initialMode,
+        new MoveChartMode(chartControl),
+        new ZoomInChartMode(chartControl),
+        new ZoomOutChartMode(chartControl),
+        new AddNodesChartMode(chartControl),
+        new AddPortsChartMode(chartControl),
+        new ConnectPortsChartMode(chartControl)
+      );
+      chartControl.Mode = initialMode;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      UpdateContent();
+      chartControl.Tag = Content;
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.Nodes.ItemsAdded += Nodes_ItemsAdded;
+      Content.Nodes.ItemsRemoved += Nodes_ItemsRemoved;
+      Content.Nodes.ItemsReplaced += Nodes_ItemsReplaced;
+      Content.Ports.ItemsAdded += Ports_ItemsAdded;
+      Content.Ports.ItemsRemoved += Ports_ItemsRemoved;
+      Content.Ports.ItemsReplaced += Ports_ItemsReplaced;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.Nodes.ItemsAdded -= Nodes_ItemsAdded;
+      Content.Nodes.ItemsRemoved -= Nodes_ItemsRemoved;
+      Content.Nodes.ItemsReplaced -= Nodes_ItemsReplaced;
+      Content.Ports.ItemsAdded -= Ports_ItemsAdded;
+      Content.Ports.ItemsRemoved -= Ports_ItemsRemoved;
+      Content.Ports.ItemsReplaced -= Ports_ItemsReplaced;
+      base.DeregisterContentEvents();
+    }
+
+    private void UpdateContent() {
+      if (Content == null) return;
+
+      chartControl.Chart.Group.Clear();
+      DrawNodes(Content.Nodes);
+      ConnectNodes(Content.Nodes);
+    }
+
+    private void DrawNodes(IKeyedItemCollection<string, INode> nodes) {
+      var chart = chartControl.Chart;
+
+      foreach (var node in nodes.OfType<IVisualizableNode>()) {
+        var nodeShape = new NodeRectangle(chart, node);
+        chart.Group.Add(nodeShape);
+      }
+    }
+
+    private void ConnectNodes(IKeyedItemCollection<string, INode> nodes) {
+      var chart = chartControl.Chart;
+      var nodeRectangles = chart.Group.Primitives.OfType<NodeRectangle>();
+      var node2NodeShape = nodeRectangles.ToDictionary(k => k.NetworkItem.Name, v => v);
+
+      foreach (var node in nodes) {
+        var nodeShape = node2NodeShape[node.Name];
+        foreach (var port in node.Ports.OfType<IConnectablePort>()) {
+          var connectedPort = port.ConnectedPort as IConnectablePort;
+          if (connectedPort == null) continue;
+
+          var connectedNode = connectedPort.Parent;
+          if (connectedNode == null) continue;
+
+          var connectedShape = node2NodeShape[connectedNode.Name];
+          var leftPortRectangle = nodeShape.GetPortRectangle(port);
+          var rightPortRectangle = connectedShape.GetPortRectangle(connectedPort);
+
+          var connectionShape = new ConnectionLine(chart, leftPortRectangle, rightPortRectangle);
+
+          chart.Group.Add(connectionShape);
+        }
+      }
+    }
+
+    #region Event Handlers
+    #region Nodes Event Handlers
+    private void Nodes_ItemsAdded(object sender, CollectionItemsChangedEventArgs<INode> e) {
+      // TODO: don't update everything
+      UpdateContent();
+    }
+
+    private void Nodes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<INode> e) {
+      // TODO: don't update everything
+      UpdateContent();
+    }
+
+    private void Nodes_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<INode> e) {
+      // TODO: don't update everything
+      UpdateContent();
+    }
+    #endregion
+
+    #region Ports Event Handlers
+    private void Ports_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IPort> e) { }
+
+    private void Ports_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IPort> e) { }
+
+    private void Ports_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IPort> e) { }
+    #endregion
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/Plugin.cs.frame	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/Plugin.cs.frame	(revision 13077)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Networks.Views.NetworkVisualization.Views plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Networks.Views.NetworkVisualization.Views", "3.3.12.$WCREV$")]
+  [PluginFile("HeuristicLab.Networks.Views.NetworkVisualization.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.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.Networks", "3.3")]
+  [PluginDependency("HeuristicLab.Networks.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Networks.Views.NetworkVisualization", "3.3")]
+  [PluginDependency("HeuristicLab.Visualization", "3.3")]
+  public class HeuristicLabNetworksViewsNetworkVisualizationViewsPlugin : PluginBase {
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Networks.Views.NetworkVisualization.Views")]
+[assembly: AssemblyDescription("Views of the HeuristicLab network visualization classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a1efa7b2-c288-4342-8318-27f4d2f29c18")]
+
+// 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.12.$WCREV$")]
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/HeuristicLab.Networks.Views.NetworkVisualization-3.3.csproj
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/HeuristicLab.Networks.Views.NetworkVisualization-3.3.csproj	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/HeuristicLab.Networks.Views.NetworkVisualization-3.3.csproj	(revision 13077)
@@ -0,0 +1,142 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Networks.Views.NetworkVisualization</RootNamespace>
+    <AssemblyName>HeuristicLab.Networks.Views.NetworkVisualization-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</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\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Visualization-3.3, Version=3.3.0.12537, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Visualization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interfaces\INetworkItemPrimitive.cs" />
+    <Compile Include="Primitives\ConnectionLine.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Primitives\NodeRectangle.cs" />
+    <Compile Include="Primitives\PortRectangle.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Networks\3.3\HeuristicLab.Networks-3.3.csproj">
+      <Project>{7cf51332-0e37-447c-8017-82a258c59ef2}</Project>
+      <Name>HeuristicLab.Networks-3.3</Name>
+      <Private>False</Private>
+    </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
+</PreBuildEvent>
+  </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: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Interfaces/INetworkItemPrimitive.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Interfaces/INetworkItemPrimitive.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Interfaces/INetworkItemPrimitive.cs	(revision 13077)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization {
+  public interface INetworkItemPrimitive<T> : IPrimitive where T : INetworkItem {
+    T NetworkItem { get; set; }
+
+    event EventHandler NetworkItemChanged;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Plugin.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Plugin.cs.frame	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Plugin.cs.frame	(revision 13077)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Networks.Views.NetworkVisualization plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Networks.Views.NetworkVisualization", "3.3.12.$WCREV$")]
+  [PluginFile("HeuristicLab.Networks.Views.NetworkVisualization-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Networks", "3.3")]
+  [PluginDependency("HeuristicLab.Visualization", "3.3")]
+  public class HeuristicLabNetworksViewsNetworkVisualizationPlugin : PluginBase {
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/ConnectionLine.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/ConnectionLine.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/ConnectionLine.cs	(revision 13077)
@@ -0,0 +1,166 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization {
+  public class ConnectionLine : Line {
+    protected PortRectangle startPortRectangle;
+    public PortRectangle StartPortRectangle {
+      get { return startPortRectangle; }
+      set {
+        if (startPortRectangle == value) return;
+        if (startPortRectangle != null) DeregisterPortRectangleEvents(startPortRectangle);
+        startPortRectangle = value;
+        if (startPortRectangle != null) RegisterPortRectangleEvents(startPortRectangle);
+        OnStartPortRectangleChanged();
+      }
+    }
+
+    protected PortRectangle endPortRectangle;
+    public PortRectangle EndPortRectangle {
+      get { return endPortRectangle; }
+      set {
+        if (endPortRectangle == value) return;
+        if (endPortRectangle != null) DeregisterPortRectangleEvents(endPortRectangle);
+        endPortRectangle = value;
+        if (endPortRectangle != null) RegisterPortRectangleEvents(endPortRectangle);
+        OnEndPortRectangleChanged();
+      }
+    }
+
+    public ConnectionLine(IChart chart, PortRectangle start, PortRectangle end)
+      : base(chart, start.Point, end.Point) {
+      StartPortRectangle = start;
+      EndPortRectangle = end;
+    }
+
+    protected virtual void RegisterPortRectangleEvents(PortRectangle portRectangle) {
+      portRectangle.RedrawRequired += PortRectangle_RedrawRequired;
+      portRectangle.NetworkItemChanged += PortRectangleNetworkItemChanged;
+      if (portRectangle.NetworkItem != null) {
+        var port = portRectangle.NetworkItem;
+        port.NameChanged += Port_NameChanged;
+      }
+    }
+
+    protected virtual void DeregisterPortRectangleEvents(PortRectangle portRectangle) {
+      portRectangle.RedrawRequired -= PortRectangle_RedrawRequired;
+      portRectangle.NetworkItemChanged -= PortRectangleNetworkItemChanged;
+      if (portRectangle.NetworkItem != null) {
+        var port = portRectangle.NetworkItem;
+        port.NameChanged -= Port_NameChanged;
+      }
+    }
+
+    #region Overrides
+    public override void Move(Offset delta) { }
+    public override void Move(PointD point, Offset delta) { }
+
+    public override void Draw(Graphics graphics) {
+      base.Draw(graphics);
+
+      var startP = Chart.TransformWorldToPixel(Start);
+      var endP = Chart.TransformWorldToPixel(End);
+
+      if (startP == endP) return;
+
+      double length = Math.Sqrt(Math.Pow(startP.X - endP.X, 2.0) + Math.Pow(startP.Y - endP.Y, 2));
+      double ax = (endP.X - startP.X) / length, ay = (endP.Y - startP.Y) / length;
+      double bx = -2.5 * ax - ay, by = -2.5 * ay + ax;
+      double cx = -2.5 * ax + ay, cy = -2.5 * ay - ax;
+      double mul = 4 * Chart.WorldToPixelRatio.Width;
+      bx *= mul; by *= mul;
+      cx *= mul; cy *= mul;
+      var p1 = new Point((int)Math.Round(endP.X + bx), (int)Math.Round(endP.Y + by));
+      var p2 = new Point((int)Math.Round(endP.X + cx), (int)Math.Round(endP.Y + cy));
+      graphics.FillPolygon(Pen.Brush, new[] { p1, endP, p2 });
+    }
+
+    public override void PostDraw(Graphics graphics) {
+      if (Selected) {
+        using (var pen = new Pen(Color.LightGray, 3) { DashStyle = DashStyle.Dash })
+          graphics.DrawLine(pen, Chart.TransformWorldToPixel(Start), Chart.TransformWorldToPixel(End));
+      }
+    }
+
+    #endregion
+
+    #region Events
+    public event EventHandler StartPortRectangleChanged;
+    protected virtual void OnStartPortRectangleChanged() {
+      UpdateToolTip();
+      var handler = StartPortRectangleChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler EndPortRectangleChanged;
+    protected virtual void OnEndPortRectangleChanged() {
+      UpdateToolTip();
+      var handler = EndPortRectangleChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region Event Handlers
+    private void PortRectangle_RedrawRequired(object sender, EventArgs e) {
+      SetPosition(startPortRectangle.Point, endPortRectangle.Point);
+    }
+
+    private void PortRectangleNetworkItemChanged(object sender, EventArgs e) {
+      UpdateToolTip();
+    }
+
+    private void Port_NameChanged(object sender, EventArgs e) {
+      UpdateToolTip();
+    }
+    #endregion
+
+    #region Helpers
+    private void UpdateToolTip() {
+      string startText = "null", endText = "null";
+
+      if (startPortRectangle != null) {
+        var startPort = startPortRectangle.NetworkItem;
+        if (startPort != null) {
+          startText = startPort.Name;
+          var startNode = startPort.Parent;
+          startText = (startNode != null ? startNode.Name : "null") + "." + startText;
+        }
+      }
+
+      if (endPortRectangle != null) {
+        var endPort = endPortRectangle.NetworkItem;
+        if (endPort != null) {
+          endText = endPort.Name;
+          var endNode = endPort.Parent;
+          endText = (endNode != null ? endNode.Name : "null") + "." + endText;
+        }
+      }
+
+      ToolTipText = string.Format("[{0}] --> [{1}]", startText, endText);
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/NodeRectangle.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/NodeRectangle.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/NodeRectangle.cs	(revision 13077)
@@ -0,0 +1,225 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization {
+  public class NodeRectangle : Visualization.Rectangle, INetworkItemPrimitive<IVisualizableNode> {
+    private readonly Dictionary<IPort, PortRectangle> port2PortRectangle = new Dictionary<IPort, PortRectangle>();
+
+    protected IGroup portRectangles;
+
+    protected bool IgnoreVisualPropertiesChanges { get; set; }
+
+    protected IVisualizableNode networkItem;
+    public IVisualizableNode NetworkItem {
+      get { return networkItem; }
+      set {
+        if (networkItem == value) return;
+        if (networkItem != null) DeregisterNetworkItemEvents();
+        networkItem = value;
+        if (networkItem != null) RegisterNetworkItemEvents();
+        UpdateToolTip();
+        LoadVisualProperties();
+        OnNetworkItemChanged();
+      }
+    }
+
+    public NodeRectangle(IChart chart, IVisualizableNode node)
+      : base(chart, Point.Empty, Point.Empty) {
+      NetworkItem = node;
+
+      portRectangles = new Group(chart);
+      foreach (var port in node.Ports) {
+        var portRectangle = new PortRectangle(this, port);
+        port2PortRectangle.Add(port, portRectangle);
+        portRectangles.Add(portRectangle);
+      }
+      UpdatePortRectangles();
+      portRectangles.RedrawRequired += (sender, args) => OnRedrawRequired();
+    }
+
+    protected virtual void RegisterNetworkItemEvents() {
+      networkItem.NameChanged += NetworkItemNameChanged;
+      if (networkItem.VisualProperties != null) {
+        networkItem.VisualProperties.Changed += VisualProperties_Changed;
+      }
+      if (networkItem.Ports != null) {
+        networkItem.Ports.ItemsAdded += Ports_ItemsAdded;
+        networkItem.Ports.ItemsRemoved += Ports_ItemsRemoved;
+      }
+    }
+
+    protected virtual void DeregisterNetworkItemEvents() {
+      networkItem.NameChanged -= NetworkItemNameChanged;
+      if (networkItem.VisualProperties != null) {
+        networkItem.VisualProperties.Changed -= VisualProperties_Changed;
+      }
+      if (networkItem.Ports != null) {
+        networkItem.Ports.ItemsAdded -= Ports_ItemsAdded;
+        networkItem.Ports.ItemsRemoved -= Ports_ItemsRemoved;
+      }
+    }
+
+    #region Overrides
+    public override void SetPosition(PointD lowerLeft, PointD upperRight) {
+      SuppressEvents = true;
+      try {
+        base.SetPosition(lowerLeft, upperRight);
+        SaveVisualProperties();
+        UpdatePortRectangles();
+      } finally {
+        SuppressEvents = false;
+        OnRedrawRequired();
+      }
+    }
+
+    public override void Draw(Graphics graphics) {
+      base.Draw(graphics);
+
+      var p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y + Size.Height));
+
+      using (var font = new Font(FontFamily.GenericSansSerif, (float)Math.Round(8.25 * Chart.WorldToPixelRatio.Width))) {
+        graphics.DrawString(ToolTipText, font, Brushes.Black, p.X + 5, p.Y + 5);
+      }
+
+      portRectangles.Draw(graphics);
+    }
+    #endregion
+
+    public PortRectangle GetPortRectangle(IPort name) {
+      PortRectangle portRectangle;
+      port2PortRectangle.TryGetValue(name, out portRectangle);
+      return portRectangle;
+    }
+
+    #region Events
+    public event EventHandler NetworkItemChanged;
+    protected virtual void OnNetworkItemChanged() {
+      var handler = NetworkItemChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region Event Handlers
+    private void NetworkItemNameChanged(object sender, EventArgs e) {
+      UpdateToolTip();
+    }
+
+    private void VisualProperties_Changed(object sender, EventArgs e) {
+      if (IgnoreVisualPropertiesChanges) return;
+      LoadVisualProperties();
+    }
+
+    private void Ports_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      foreach (var port in e.Items) {
+        var portRectangle = new PortRectangle(this, port);
+        port2PortRectangle.Add(port, portRectangle);
+        portRectangles.Add(portRectangle);
+      }
+
+      SuppressEvents = true;
+      try {
+        UpdatePortRectangles();
+      } finally {
+        SuppressEvents = false;
+        OnRedrawRequired();
+      }
+    }
+
+    private void Ports_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IPort> e) {
+      foreach (var port in e.Items) {
+        var portRectangle = port2PortRectangle[port];
+        port2PortRectangle.Remove(port);
+        portRectangles.Remove(portRectangle);
+      }
+
+      UpdatePortRectangles();
+      OnRedrawRequired();
+    }
+    #endregion
+
+    #region Helpers
+    private void UpdateToolTip() {
+      ToolTipText = networkItem.Name;
+    }
+
+    private void LoadVisualProperties() {
+      var offset = Chart.UpperRight - Chart.LowerLeft;
+      var center = new PointD(Chart.LowerLeft.X + offset.DX * 0.5, Chart.LowerLeft.Y + offset.DY * 0.5);
+      var size = Chart.TransformPixelToWorld(new Size(200, 100));
+
+      bool vpAvailable = networkItem != null && networkItem.VisualProperties != null;
+      bool useDefaultLocation = !vpAvailable || double.IsNaN(networkItem.VisualProperties.X);
+      bool useDefaultSize = !vpAvailable || double.IsNaN(networkItem.VisualProperties.Width);
+
+      if (!useDefaultLocation) {
+        center.X = networkItem.VisualProperties.X;
+        center.Y = networkItem.VisualProperties.Y;
+      }
+
+      if (!useDefaultSize) {
+        size.Width = networkItem.VisualProperties.Width;
+        size.Height = networkItem.VisualProperties.Height;
+      }
+
+      var ll = new PointD(center.X - size.Width * 0.5, center.Y - size.Height * 0.5);
+      var ur = ll + new Offset(size.Width, size.Height);
+
+      SetPosition(ll, ur);
+    }
+
+    private void SaveVisualProperties() {
+      if (networkItem == null) return;
+
+      var visualProperties = networkItem.VisualProperties;
+      var centerW = new PointD(LowerLeft.X + Size.Width * 0.5, UpperRight.Y - Size.Height * 0.5);
+
+      IgnoreVisualPropertiesChanges = true;
+      try {
+        visualProperties.X = centerW.X;
+        visualProperties.Y = centerW.Y;
+        visualProperties.Width = Size.Width;
+        visualProperties.Height = Size.Height;
+      } finally { IgnoreVisualPropertiesChanges = false; }
+
+      OnRedrawRequired();
+    }
+
+    private void UpdatePortRectangles() {
+      if (portRectangles == null) return;
+
+      var rectangles = portRectangles.OfType<PortRectangle>().ToArray();
+      double space = Size.Width / (rectangles.Length + 1);
+      for (int i = 0; i < rectangles.Length; i++) {
+        double dx = Math.Round(space * (i + 1));
+        var point = LowerLeft + new Offset(dx, 0);
+        rectangles[i].SetPosition(point);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/PortRectangle.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/PortRectangle.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Primitives/PortRectangle.cs	(revision 13077)
@@ -0,0 +1,128 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Visualization;
+
+namespace HeuristicLab.Networks.Views.NetworkVisualization {
+  public class PortRectangle : FixedSizeRectangle, INetworkItemPrimitive<IPort> {
+    private const int size = 10;
+
+    public override Size Size {
+      get {
+        return new Size((int)Math.Round(size * Chart.WorldToPixelRatio.Width),
+                        (int)Math.Round(size * Chart.WorldToPixelRatio.Height));
+      }
+    }
+
+    protected IPort networkItem;
+    public IPort NetworkItem {
+      get { return networkItem; }
+      set {
+        if (networkItem == value) return;
+        if (networkItem != null) DeregisterNetworkItemEvents();
+        networkItem = value;
+        if (networkItem != null) RegisterNetworkItemEvents();
+        OnNetworkItemChanged();
+      }
+    }
+
+    public PortRectangle(NodeRectangle nodeRectangle, IPort port)
+      : base(nodeRectangle.Chart, PointD.Empty, Size.Empty, Pens.Black, Brushes.Red) {
+      NetworkItem = port;
+    }
+
+    protected virtual void RegisterNetworkItemEvents() {
+      networkItem.NameChanged += NetworkItemNameChanged;
+      var connectablePort = networkItem as IConnectablePort;
+      if (connectablePort != null) {
+        connectablePort.ConnectedPortChanged += Port_ConnectedPortChanged;
+      }
+    }
+
+    protected virtual void DeregisterNetworkItemEvents() {
+      networkItem.NameChanged -= NetworkItemNameChanged;
+      var connectablePort = networkItem as IConnectablePort;
+      if (connectablePort != null) {
+        connectablePort.ConnectedPortChanged -= Port_ConnectedPortChanged;
+      }
+    }
+
+    #region Events
+    public event EventHandler NetworkItemChanged;
+    protected virtual void OnNetworkItemChanged() {
+      UpdateToolTip();
+      var handler = NetworkItemChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler NodeRectangleChanged;
+    protected virtual void OnNodeRectangleChanged() {
+      var handler = NodeRectangleChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region Event Handlers
+    private void NetworkItemNameChanged(object sender, EventArgs e) {
+      UpdateToolTip();
+    }
+
+    private void Port_ConnectedPortChanged(object sender, EventArgs e) {
+      var connectablePort = (IConnectablePort)networkItem;
+
+      var connectionLines = Chart.Group.GetAllPrimitives(Point).OfType<ConnectionLine>();
+      var outgoingLines = connectionLines.Where(x => x.StartPortRectangle == this);
+
+      foreach (var l in outgoingLines)
+        Chart.Group.Remove(l);
+
+      var connectedPort = connectablePort.ConnectedPort as IConnectablePort;
+      if (connectedPort == null) return;
+
+      var connectedNode = connectedPort.Parent;
+      if (connectedNode == null) return;
+
+      var nodeRectangles = Chart.Group.Primitives.OfType<NodeRectangle>();
+      PortRectangle endPortRectangle = null;
+      foreach (var nodeRectangle in nodeRectangles) {
+        endPortRectangle = nodeRectangle.GetPortRectangle(connectedPort);
+        if (endPortRectangle != null) break;
+      }
+
+      if (endPortRectangle == null) return;
+
+      var connectionShape = new ConnectionLine(Chart, this, endPortRectangle);
+      Chart.Group.Add(connectionShape);
+
+    }
+    #endregion
+
+    #region Helpers
+    private void UpdateToolTip() {
+      ToolTipText = networkItem.Name;
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Networks.Views")]
+[assembly: AssemblyDescription("Views of the HeuristicLab optimization networks classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6852d9f7-2a82-4662-918e-95e61dad3274")]
+
+// 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.12.$WCREV$")]
Index: /branches/OptimizationNetworks/HeuristicLab.Networks.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -27,10 +27,10 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Optimization.Networks.Views")]
+[assembly: AssemblyTitle("HeuristicLab.Networks.Views")]
 [assembly: AssemblyDescription("Views of the HeuristicLab optimization networks classes")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2014 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -51,6 +51,7 @@
 //      Revision
 //
-// You can specify all the values or you can default the Revision and Build Numbers 
+// You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.11.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/INetworkItem.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/INetworkItem.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/INetworkItem.cs	(revision 13077)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -20,5 +20,4 @@
 #endregion
 
-using System;
 using System.Collections.Generic;
 
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/INodeVisualProperties.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/INodeVisualProperties.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/INodeVisualProperties.cs	(revision 13077)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+
+namespace HeuristicLab.Core.Networks {
+  public interface INodeVisualProperties : IVisualProperties {
+    double X { get; set; }
+    double Y { get; set; }
+    double Width { get; set; }
+    double Height { get; set; }
+    Color Color { get; set; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IPort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IPort.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IPort.cs	(revision 13077)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IPortVisualProperties.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IPortVisualProperties.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IPortVisualProperties.cs	(revision 13077)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IPortVisualProperties : IVisualProperties {
+    double X { get; set; }
+    double Y { get; set; }
+    double Width { get; set; }
+    double Height { get; }
+    Color Color { get; set; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualProperties.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualProperties.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualProperties.cs	(revision 13077)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Core.Networks {
+  public interface IVisualProperties {
+    event EventHandler Changed;
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualizableNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualizableNode.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualizableNode.cs	(revision 13077)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface IVisualizableNode : INode {
+    INodeVisualProperties VisualProperties { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualizablePort.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualizablePort.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/IVisualizablePort.cs	(revision 13077)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Networks {
+  public interface IVisualizablePort {
+    IPortVisualProperties VisualProperties { get; }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/NetworkItem.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/NetworkItem.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/NetworkItem.cs	(revision 13077)
@@ -20,10 +20,9 @@
 #endregion
 
-using HeuristicLab.Common;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System;
 using System.Collections.Generic;
 using System.Drawing;
 using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Core.Networks {
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/Node.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/Node.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/Node.cs	(revision 13077)
@@ -20,14 +20,14 @@
 #endregion
 
-using HeuristicLab.Common;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using System.Collections.Generic;
 using System.Drawing;
 using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Core.Networks {
   [Item("Node", "Abstract base class for nodes of a network.")]
   [StorableClass]
-  public abstract class Node : NetworkItem, INode {
+  public abstract class Node : NetworkItem, IVisualizableNode {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.RadialChart; }
@@ -55,4 +55,16 @@
         if (readOnlyPorts == null) readOnlyPorts = ports.AsReadOnly();
         return readOnlyPorts;
+      }
+    }
+
+    public string VisualName { get { return Name; } }
+
+    [Storable]
+    private INodeVisualProperties visualProperties;
+    public INodeVisualProperties VisualProperties {
+      get {
+        if (visualProperties == null)
+          visualProperties = new NodeVisualProperties();
+        return visualProperties;
       }
     }
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/NodeVisualProperties.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/NodeVisualProperties.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/NodeVisualProperties.cs	(revision 13077)
@@ -0,0 +1,108 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  public sealed class NodeVisualProperties : VisualProperties, INodeVisualProperties {
+    [Storable]
+    private double x;
+    public double X {
+      get { return x; }
+      set {
+        if (x == value) return;
+        x = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private double y;
+    public double Y {
+      get { return y; }
+      set {
+        if (y == value) return;
+        y = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private double width;
+    public double Width {
+      get { return width; }
+      set {
+        if (width == value) return;
+        width = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private double height;
+    public double Height {
+      get { return height; }
+      set {
+        if (height == value) return;
+        height = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private Color color;
+    public Color Color {
+      get { return color; }
+      set {
+        if (color == value) return;
+        color = value;
+        OnChanged();
+      }
+    }
+
+    #region Constructors & Cloning
+    [StorableConstructor]
+    private NodeVisualProperties(bool deserializing) : base(deserializing) { }
+    private NodeVisualProperties(NodeVisualProperties original, Cloner cloner)
+      : base(original, cloner) {
+      x = original.x;
+      y = original.y;
+      width = original.width;
+      height = original.height;
+      color = original.color;
+    }
+
+    public NodeVisualProperties() {
+      x = double.NaN;
+      y = double.NaN;
+      width = double.NaN;
+      height = double.NaN;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NodeVisualProperties(this, cloner);
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/Port.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/Port.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/Port.cs	(revision 13077)
@@ -20,12 +20,12 @@
 #endregion
 
+using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Drawing;
 
 namespace HeuristicLab.Core.Networks {
   [Item("Port", "Abstract base class for ports of network nodes.")]
   [StorableClass]
-  public abstract class Port : NetworkItem, IPort {
+  public abstract class Port : NetworkItem, IVisualizablePort {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Interface; }
@@ -40,4 +40,14 @@
     }
 
+    [Storable]
+    private IPortVisualProperties visualProperties;
+    public IPortVisualProperties VisualProperties {
+      get {
+        if (visualProperties == null)
+          visualProperties = new PortVisualProperties();
+        return visualProperties;
+      }
+    }
+
     [StorableConstructor]
     protected Port(bool deserializing) : base(deserializing) { }
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/PortVisualProperties.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/PortVisualProperties.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/PortVisualProperties.cs	(revision 13077)
@@ -0,0 +1,108 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  public sealed class PortVisualProperties : VisualProperties, IPortVisualProperties {
+    [Storable]
+    private double x;
+    public double X {
+      get { return x; }
+      set {
+        if (x == value) return;
+        x = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private double y;
+    public double Y {
+      get { return y; }
+      set {
+        if (y == value) return;
+        y = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private double width;
+    public double Width {
+      get { return width; }
+      set {
+        if (width == value) return;
+        width = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private double height;
+    public double Height {
+      get { return height; }
+      set {
+        if (height == value) return;
+        height = value;
+        OnChanged();
+      }
+    }
+
+    [Storable]
+    private Color color;
+    public Color Color {
+      get { return color; }
+      set {
+        if (color == value) return;
+        color = value;
+        OnChanged();
+      }
+    }
+
+    #region Constructors & Cloning
+    [StorableConstructor]
+    private PortVisualProperties(bool deserializing) : base(deserializing) { }
+    private PortVisualProperties(PortVisualProperties original, Cloner cloner)
+      : base(original, cloner) {
+      x = original.x;
+      y = original.y;
+      width = original.width;
+      height = original.height;
+      color = original.color;
+    }
+
+    public PortVisualProperties() {
+      x = double.NaN;
+      y = double.NaN;
+      width = double.NaN;
+      height = double.NaN;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PortVisualProperties(this, cloner);
+    }
+    #endregion
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/VisualProperties.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/VisualProperties.cs	(revision 13077)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Core/VisualProperties.cs	(revision 13077)
@@ -0,0 +1,27 @@
+﻿using System;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core.Networks {
+  [StorableClass]
+  public class VisualProperties : DeepCloneable, IVisualProperties {
+    #region Constructors & Cloning
+    [StorableConstructor]
+    protected VisualProperties(bool deserializing) : base() { }
+    protected VisualProperties(VisualProperties original, Cloner cloner)
+      : base(original, cloner) { }
+
+    public VisualProperties() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VisualProperties(this, cloner);
+    }
+    #endregion
+
+    public event EventHandler Changed;
+    protected virtual void OnChanged() {
+      var handler = Changed;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/HeuristicLab.Networks-3.3.csproj
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/HeuristicLab.Networks-3.3.csproj	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/HeuristicLab.Networks-3.3.csproj	(revision 13077)
@@ -80,8 +80,4 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="HeuristicLab.Algorithms.CMAEvolutionStrategy-3.3">
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Algorithms.CMAEvolutionStrategy-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
     <Reference Include="HeuristicLab.Algorithms.DataAnalysis-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -120,8 +116,4 @@
     <Reference Include="HeuristicLab.Encodings.PermutationEncoding-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.PermutationEncoding-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Encodings.RealVectorEncoding-3.3">
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -211,4 +203,12 @@
     </Compile>
     <Compile Include="ConfigurationPort.cs" />
+    <Compile Include="Core\INodeVisualProperties.cs" />
+    <Compile Include="Core\IPortVisualProperties.cs" />
+    <Compile Include="Core\IVisualizableNode.cs" />
+    <Compile Include="Core\IVisualizablePort.cs" />
+    <Compile Include="Core\IVisualProperties.cs" />
+    <Compile Include="Core\NodeVisualProperties.cs" />
+    <Compile Include="Core\PortVisualProperties.cs" />
+    <Compile Include="Core\VisualProperties.cs" />
     <Compile Include="ExecutionPort.cs" />
     <Compile Include="FeatureSelection Network\FeatureSelectionConnector.cs" />
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Plugin.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Plugin.cs.frame	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Plugin.cs.frame	(revision 13077)
@@ -28,4 +28,7 @@
   [Plugin("HeuristicLab.Networks", "3.3.11.$WCREV$")]
   [PluginFile("HeuristicLab.Networks-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Algorithms.DataAnalysis", "3.4")]
+  [PluginDependency("HeuristicLab.Algorithms.GeneticAlgorithm", "3.3")]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
@@ -37,6 +40,15 @@
   [PluginDependency("HeuristicLab.Operators", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Binary", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances.DataAnalysis", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Knapsack", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.TravelingSalesman", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
   [PluginDependency("HeuristicLab.Scripting", "3.3")]
+  [PluginDependency("HeuristicLab.Selection", "3.3")]
   public class HeuristicLabNetworksPlugin : PluginBase {
   }
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Programmable/ProgrammableNetworkItem.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Programmable/ProgrammableNetworkItem.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Programmable/ProgrammableNetworkItem.cs	(revision 13077)
@@ -20,10 +20,4 @@
 #endregion
 
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Networks;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Scripting;
-using Microsoft.CSharp;
 using System;
 using System.CodeDom.Compiler;
@@ -34,4 +28,10 @@
 using System.Reflection;
 using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Networks;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Scripting;
+using Microsoft.CSharp;
 
 namespace HeuristicLab.Networks.Programmable {
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Programmable/ProgrammableNode.cs
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Programmable/ProgrammableNode.cs	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Programmable/ProgrammableNode.cs	(revision 13077)
@@ -20,17 +20,17 @@
 #endregion
 
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Threading;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Core.Networks;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Threading;
 
 namespace HeuristicLab.Networks.Programmable {
   [Item("ProgrammableNode", "Abstract base class for programmable nodes of a network.")]
   [StorableClass]
-  public abstract class ProgrammableNode : ProgrammableNetworkItem, IProgrammableNode {
+  public abstract class ProgrammableNode : ProgrammableNetworkItem, IProgrammableNode, IVisualizableNode {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.RadialChart; }
@@ -58,4 +58,16 @@
       }
     }
+
+    public string VisualName { get { return Name; } }
+
+    [Storable]
+    private INodeVisualProperties visualProperties;
+    public INodeVisualProperties VisualProperties {
+      get {
+        if (visualProperties == null)
+          visualProperties = new NodeVisualProperties();
+        return visualProperties;
+      }
+    }
     #endregion
 
@@ -115,4 +127,10 @@
       IKeyedItemCollection<string, IPort> INode.Ports {
         get { return Ports; }
+      }
+
+      public string VisualName { get { return Context.VisualName; } }
+
+      public INodeVisualProperties VisualProperties {
+        get { return Context.VisualProperties; }
       }
       #endregion
Index: /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Properties/AssemblyInfo.cs.frame	(revision 13076)
+++ /branches/OptimizationNetworks/HeuristicLab.Networks/3.3/Properties/AssemblyInfo.cs.frame	(revision 13077)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -27,10 +27,10 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Optimization.Networks")]
+[assembly: AssemblyTitle("HeuristicLab.Networks")]
 [assembly: AssemblyDescription("HeuristicLab optimization networks classes")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2014 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -51,6 +51,7 @@
 //      Revision
 //
-// You can specify all the values or you can default the Revision and Build Numbers 
+// You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.11.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
Index: /branches/OptimizationNetworks/OptimizationNetworks.sln
===================================================================
--- /branches/OptimizationNetworks/OptimizationNetworks.sln	(revision 13076)
+++ /branches/OptimizationNetworks/OptimizationNetworks.sln	(revision 13077)
@@ -1,6 +1,6 @@
 ﻿
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.31101.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Modeler-3.3", "HeuristicLab.Modeler\3.3\HeuristicLab.Modeler-3.3.csproj", "{37B08E61-93B1-4184-AE21-F2B5DE8A40F8}"
@@ -11,4 +11,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Common.Resources-3.3", "HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj", "{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Networks.Views.NetworkVisualization-3.3", "HeuristicLab.Networks.Views.NetworkVisualization\3.3\HeuristicLab.Networks.Views.NetworkVisualization-3.3.csproj", "{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Networks.Views.NetworkVisualization.Views-3.3", "HeuristicLab.Networks.Views.NetworkVisualization.Views\3.3\HeuristicLab.Networks.Views.NetworkVisualization.Views-3.3.csproj", "{A1EFA7B2-C288-4342-8318-27F4D2F29C18}"
 EndProject
 Global
@@ -70,4 +74,28 @@
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Release|x86.ActiveCfg = Release|x86
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Release|x86.Build.0 = Release|x86
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Debug|x64.ActiveCfg = Debug|x64
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Debug|x64.Build.0 = Debug|x64
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Debug|x86.ActiveCfg = Debug|x86
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Debug|x86.Build.0 = Debug|x86
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Release|x64.ActiveCfg = Release|x64
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Release|x64.Build.0 = Release|x64
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Release|x86.ActiveCfg = Release|x86
+		{B76A8CF7-BE2A-4CE7-943D-AB19A7CC7798}.Release|x86.Build.0 = Release|x86
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Debug|x64.ActiveCfg = Debug|x64
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Debug|x64.Build.0 = Debug|x64
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Debug|x86.ActiveCfg = Debug|x86
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Debug|x86.Build.0 = Debug|x86
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Release|x64.ActiveCfg = Release|x64
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Release|x64.Build.0 = Release|x64
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Release|x86.ActiveCfg = Release|x86
+		{A1EFA7B2-C288-4342-8318-27F4D2F29C18}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
