Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesAction.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesAction.cs	(revision 3208)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal static class ConnectionPropertiesAction {
+    internal static void Execute(IMainForm mainForm) {
+      ConnectionPropertiesView connectionPropertiesView = new ConnectionPropertiesView();
+      connectionPropertiesView.Show();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesMenuItem.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesMenuItem.cs	(revision 3208)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal class ConnectionPropertiesMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Connection Properties"; }
+    }
+
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "Settings" }; }
+    }
+
+    public override int Position {
+      get { return 2100; }
+    }
+
+    public override void Execute() {
+      ConnectionPropertiesAction.Execute(MainFormManager.MainForm);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.Designer.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.Designer.cs	(revision 3208)
@@ -0,0 +1,201 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+namespace HeuristicLab.PluginAdministrator {
+  partial class ConnectionPropertiesView {
+    /// <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.updateAddressTextBox = new System.Windows.Forms.TextBox();
+      this.urlLabel = new System.Windows.Forms.Label();
+      this.userLabel = new System.Windows.Forms.Label();
+      this.userTextBox = new System.Windows.Forms.TextBox();
+      this.passwordLabel = new System.Windows.Forms.Label();
+      this.passwordTextBox = new System.Windows.Forms.TextBox();
+      this.applyButton = new System.Windows.Forms.Button();
+      this.saveCredentialsButton = new System.Windows.Forms.Button();
+      this.updateLocationGroupBox = new System.Windows.Forms.GroupBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.adminAddressTextBox = new System.Windows.Forms.TextBox();
+      this.updateLocationGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // updateAddressTextBox
+      // 
+      this.updateAddressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.updateAddressTextBox.Location = new System.Drawing.Point(126, 19);
+      this.updateAddressTextBox.Name = "updateAddressTextBox";
+      this.updateAddressTextBox.Size = new System.Drawing.Size(212, 20);
+      this.updateAddressTextBox.TabIndex = 0;
+      // 
+      // urlLabel
+      // 
+      this.urlLabel.AutoSize = true;
+      this.urlLabel.Location = new System.Drawing.Point(36, 22);
+      this.urlLabel.Name = "urlLabel";
+      this.urlLabel.Size = new System.Drawing.Size(84, 13);
+      this.urlLabel.TabIndex = 1;
+      this.urlLabel.Text = "Update Service:";
+      // 
+      // userLabel
+      // 
+      this.userLabel.AutoSize = true;
+      this.userLabel.Location = new System.Drawing.Point(88, 74);
+      this.userLabel.Name = "userLabel";
+      this.userLabel.Size = new System.Drawing.Size(32, 13);
+      this.userLabel.TabIndex = 3;
+      this.userLabel.Text = "User:";
+      // 
+      // userTextBox
+      // 
+      this.userTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.userTextBox.Location = new System.Drawing.Point(126, 71);
+      this.userTextBox.Name = "userTextBox";
+      this.userTextBox.Size = new System.Drawing.Size(212, 20);
+      this.userTextBox.TabIndex = 2;
+      // 
+      // passwordLabel
+      // 
+      this.passwordLabel.AutoSize = true;
+      this.passwordLabel.Location = new System.Drawing.Point(64, 100);
+      this.passwordLabel.Name = "passwordLabel";
+      this.passwordLabel.Size = new System.Drawing.Size(56, 13);
+      this.passwordLabel.TabIndex = 5;
+      this.passwordLabel.Text = "Password:";
+      // 
+      // passwordTextBox
+      // 
+      this.passwordTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.passwordTextBox.Location = new System.Drawing.Point(126, 97);
+      this.passwordTextBox.Name = "passwordTextBox";
+      this.passwordTextBox.Size = new System.Drawing.Size(212, 20);
+      this.passwordTextBox.TabIndex = 4;
+      this.passwordTextBox.UseSystemPasswordChar = true;
+      // 
+      // applyButton
+      // 
+      this.applyButton.Location = new System.Drawing.Point(3, 133);
+      this.applyButton.Name = "applyButton";
+      this.applyButton.Size = new System.Drawing.Size(75, 23);
+      this.applyButton.TabIndex = 6;
+      this.applyButton.Text = "Apply";
+      this.applyButton.UseVisualStyleBackColor = true;
+      this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
+      // 
+      // saveCredentialsButton
+      // 
+      this.saveCredentialsButton.Location = new System.Drawing.Point(84, 133);
+      this.saveCredentialsButton.Name = "saveCredentialsButton";
+      this.saveCredentialsButton.Size = new System.Drawing.Size(120, 23);
+      this.saveCredentialsButton.TabIndex = 8;
+      this.saveCredentialsButton.Text = "Store Credentials";
+      this.saveCredentialsButton.UseVisualStyleBackColor = true;
+      this.saveCredentialsButton.Click += new System.EventHandler(this.saveCredentialsButton_Click);
+      // 
+      // updateLocationGroupBox
+      // 
+      this.updateLocationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.updateLocationGroupBox.Controls.Add(this.adminAddressTextBox);
+      this.updateLocationGroupBox.Controls.Add(this.label1);
+      this.updateLocationGroupBox.Controls.Add(this.passwordTextBox);
+      this.updateLocationGroupBox.Controls.Add(this.updateAddressTextBox);
+      this.updateLocationGroupBox.Controls.Add(this.urlLabel);
+      this.updateLocationGroupBox.Controls.Add(this.userTextBox);
+      this.updateLocationGroupBox.Controls.Add(this.passwordLabel);
+      this.updateLocationGroupBox.Controls.Add(this.userLabel);
+      this.updateLocationGroupBox.Location = new System.Drawing.Point(3, 3);
+      this.updateLocationGroupBox.Name = "updateLocationGroupBox";
+      this.updateLocationGroupBox.Size = new System.Drawing.Size(344, 124);
+      this.updateLocationGroupBox.TabIndex = 10;
+      this.updateLocationGroupBox.TabStop = false;
+      this.updateLocationGroupBox.Text = "Update Location";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(6, 48);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(114, 13);
+      this.label1.TabIndex = 7;
+      this.label1.Text = "Administration Service:";
+      // 
+      // adminAddressTextBox
+      // 
+      this.adminAddressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.adminAddressTextBox.Location = new System.Drawing.Point(126, 45);
+      this.adminAddressTextBox.Name = "adminAddressTextBox";
+      this.adminAddressTextBox.Size = new System.Drawing.Size(212, 20);
+      this.adminAddressTextBox.TabIndex = 6;
+      // 
+      // ConnectionSetupView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.updateLocationGroupBox);
+      this.Controls.Add(this.saveCredentialsButton);
+      this.Controls.Add(this.applyButton);
+      this.Name = "ConnectionSetupView";
+      this.Size = new System.Drawing.Size(350, 161);
+      this.updateLocationGroupBox.ResumeLayout(false);
+      this.updateLocationGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox updateAddressTextBox;
+    private System.Windows.Forms.Label urlLabel;
+    private System.Windows.Forms.Label userLabel;
+    private System.Windows.Forms.TextBox userTextBox;
+    private System.Windows.Forms.Label passwordLabel;
+    private System.Windows.Forms.TextBox passwordTextBox;
+    private System.Windows.Forms.Button applyButton;
+    private System.Windows.Forms.Button saveCredentialsButton;
+    private System.Windows.Forms.GroupBox updateLocationGroupBox;
+    private System.Windows.Forms.TextBox adminAddressTextBox;
+    private System.Windows.Forms.Label label1;
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.cs	(revision 3208)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal partial class ConnectionPropertiesView : HeuristicLab.MainForm.WindowsForms.View {
+    public ConnectionPropertiesView() {
+      InitializeComponent();
+      Caption = "Connection Properties";
+      updateAddressTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation;
+      adminAddressTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress;
+      userTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationUserName;
+      passwordTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword;
+    }
+
+    private void applyButton_Click(object sender, EventArgs e) {
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation = updateAddressTextBox.Text;
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress = adminAddressTextBox.Text;
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationUserName = userTextBox.Text;
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword = passwordTextBox.Text;
+    }
+
+    private void saveCredentialsButton_Click(object sender, EventArgs e) {
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation = updateAddressTextBox.Text;
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress = adminAddressTextBox.Text;
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationUserName = userTextBox.Text;
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword = passwordTextBox.Text;
+      // save
+      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.Save();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.resx
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.resx	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionPropertiesView.resx	(revision 3208)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionSetupView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionSetupView.Designer.cs	(revision 3207)
+++ 	(revision )
@@ -1,201 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-namespace HeuristicLab.PluginAdministrator {
-  partial class ConnectionSetupView {
-    /// <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.updateAddressTextBox = new System.Windows.Forms.TextBox();
-      this.urlLabel = new System.Windows.Forms.Label();
-      this.userLabel = new System.Windows.Forms.Label();
-      this.userTextBox = new System.Windows.Forms.TextBox();
-      this.passwordLabel = new System.Windows.Forms.Label();
-      this.passwordTextBox = new System.Windows.Forms.TextBox();
-      this.applyButton = new System.Windows.Forms.Button();
-      this.saveCredentialsButton = new System.Windows.Forms.Button();
-      this.updateLocationGroupBox = new System.Windows.Forms.GroupBox();
-      this.label1 = new System.Windows.Forms.Label();
-      this.adminAddressTextBox = new System.Windows.Forms.TextBox();
-      this.updateLocationGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // updateAddressTextBox
-      // 
-      this.updateAddressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.updateAddressTextBox.Location = new System.Drawing.Point(126, 19);
-      this.updateAddressTextBox.Name = "updateAddressTextBox";
-      this.updateAddressTextBox.Size = new System.Drawing.Size(212, 20);
-      this.updateAddressTextBox.TabIndex = 0;
-      // 
-      // urlLabel
-      // 
-      this.urlLabel.AutoSize = true;
-      this.urlLabel.Location = new System.Drawing.Point(36, 22);
-      this.urlLabel.Name = "urlLabel";
-      this.urlLabel.Size = new System.Drawing.Size(84, 13);
-      this.urlLabel.TabIndex = 1;
-      this.urlLabel.Text = "Update Service:";
-      // 
-      // userLabel
-      // 
-      this.userLabel.AutoSize = true;
-      this.userLabel.Location = new System.Drawing.Point(88, 74);
-      this.userLabel.Name = "userLabel";
-      this.userLabel.Size = new System.Drawing.Size(32, 13);
-      this.userLabel.TabIndex = 3;
-      this.userLabel.Text = "User:";
-      // 
-      // userTextBox
-      // 
-      this.userTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.userTextBox.Location = new System.Drawing.Point(126, 71);
-      this.userTextBox.Name = "userTextBox";
-      this.userTextBox.Size = new System.Drawing.Size(212, 20);
-      this.userTextBox.TabIndex = 2;
-      // 
-      // passwordLabel
-      // 
-      this.passwordLabel.AutoSize = true;
-      this.passwordLabel.Location = new System.Drawing.Point(64, 100);
-      this.passwordLabel.Name = "passwordLabel";
-      this.passwordLabel.Size = new System.Drawing.Size(56, 13);
-      this.passwordLabel.TabIndex = 5;
-      this.passwordLabel.Text = "Password:";
-      // 
-      // passwordTextBox
-      // 
-      this.passwordTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.passwordTextBox.Location = new System.Drawing.Point(126, 97);
-      this.passwordTextBox.Name = "passwordTextBox";
-      this.passwordTextBox.Size = new System.Drawing.Size(212, 20);
-      this.passwordTextBox.TabIndex = 4;
-      this.passwordTextBox.UseSystemPasswordChar = true;
-      // 
-      // applyButton
-      // 
-      this.applyButton.Location = new System.Drawing.Point(3, 133);
-      this.applyButton.Name = "applyButton";
-      this.applyButton.Size = new System.Drawing.Size(75, 23);
-      this.applyButton.TabIndex = 6;
-      this.applyButton.Text = "Apply";
-      this.applyButton.UseVisualStyleBackColor = true;
-      this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
-      // 
-      // saveCredentialsButton
-      // 
-      this.saveCredentialsButton.Location = new System.Drawing.Point(84, 133);
-      this.saveCredentialsButton.Name = "saveCredentialsButton";
-      this.saveCredentialsButton.Size = new System.Drawing.Size(120, 23);
-      this.saveCredentialsButton.TabIndex = 8;
-      this.saveCredentialsButton.Text = "Store Credentials";
-      this.saveCredentialsButton.UseVisualStyleBackColor = true;
-      this.saveCredentialsButton.Click += new System.EventHandler(this.saveCredentialsButton_Click);
-      // 
-      // updateLocationGroupBox
-      // 
-      this.updateLocationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.updateLocationGroupBox.Controls.Add(this.adminAddressTextBox);
-      this.updateLocationGroupBox.Controls.Add(this.label1);
-      this.updateLocationGroupBox.Controls.Add(this.passwordTextBox);
-      this.updateLocationGroupBox.Controls.Add(this.updateAddressTextBox);
-      this.updateLocationGroupBox.Controls.Add(this.urlLabel);
-      this.updateLocationGroupBox.Controls.Add(this.userTextBox);
-      this.updateLocationGroupBox.Controls.Add(this.passwordLabel);
-      this.updateLocationGroupBox.Controls.Add(this.userLabel);
-      this.updateLocationGroupBox.Location = new System.Drawing.Point(3, 3);
-      this.updateLocationGroupBox.Name = "updateLocationGroupBox";
-      this.updateLocationGroupBox.Size = new System.Drawing.Size(344, 124);
-      this.updateLocationGroupBox.TabIndex = 10;
-      this.updateLocationGroupBox.TabStop = false;
-      this.updateLocationGroupBox.Text = "Update Location";
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(6, 48);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(114, 13);
-      this.label1.TabIndex = 7;
-      this.label1.Text = "Administration Service:";
-      // 
-      // adminAddressTextBox
-      // 
-      this.adminAddressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.adminAddressTextBox.Location = new System.Drawing.Point(126, 45);
-      this.adminAddressTextBox.Name = "adminAddressTextBox";
-      this.adminAddressTextBox.Size = new System.Drawing.Size(212, 20);
-      this.adminAddressTextBox.TabIndex = 6;
-      // 
-      // ConnectionSetupView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.updateLocationGroupBox);
-      this.Controls.Add(this.saveCredentialsButton);
-      this.Controls.Add(this.applyButton);
-      this.Name = "ConnectionSetupView";
-      this.Size = new System.Drawing.Size(350, 161);
-      this.updateLocationGroupBox.ResumeLayout(false);
-      this.updateLocationGroupBox.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TextBox updateAddressTextBox;
-    private System.Windows.Forms.Label urlLabel;
-    private System.Windows.Forms.Label userLabel;
-    private System.Windows.Forms.TextBox userTextBox;
-    private System.Windows.Forms.Label passwordLabel;
-    private System.Windows.Forms.TextBox passwordTextBox;
-    private System.Windows.Forms.Button applyButton;
-    private System.Windows.Forms.Button saveCredentialsButton;
-    private System.Windows.Forms.GroupBox updateLocationGroupBox;
-    private System.Windows.Forms.TextBox adminAddressTextBox;
-    private System.Windows.Forms.Label label1;
-  }
-}
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionSetupView.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionSetupView.cs	(revision 3207)
+++ 	(revision )
@@ -1,57 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-namespace HeuristicLab.PluginAdministrator {
-  internal partial class ConnectionSetupView : HeuristicLab.MainForm.WindowsForms.View {
-    public ConnectionSetupView() {
-      InitializeComponent();
-      Caption = "Edit Connection Settings";
-      updateAddressTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation;
-      adminAddressTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress;
-      userTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationUserName;
-      passwordTextBox.Text = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword;
-    }
-
-    private void applyButton_Click(object sender, EventArgs e) {
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation = updateAddressTextBox.Text;
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress = adminAddressTextBox.Text;
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationUserName = userTextBox.Text;
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword = passwordTextBox.Text;
-    }
-
-    private void saveCredentialsButton_Click(object sender, EventArgs e) {
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation = updateAddressTextBox.Text;
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress = adminAddressTextBox.Text;
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationUserName = userTextBox.Text;
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword = passwordTextBox.Text;
-      // save
-      HeuristicLab.PluginInfrastructure.Properties.Settings.Default.Save();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionSetupView.resx
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ConnectionSetupView.resx	(revision 3207)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/EditConnectionAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditConnectionAction.cs	(revision 3207)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.PluginAdministrator {
-  internal static class EditConnectionAction {
-    internal static void Execute(IMainForm mainForm) {
-      ConnectionSetupView connectionSetup = new ConnectionSetupView();
-      connectionSetup.Show();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/EditConnectionMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditConnectionMenuItem.cs	(revision 3207)
+++ 	(revision )
@@ -1,45 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.PluginAdministrator {
-  internal class EditConnectionMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IUserInterfaceItemProvider {
-    public override string Name {
-      get { return "Edit Connection Properties"; }
-    }
-
-    public override IEnumerable<string> Structure {
-      get { return new string[] { "Plugin Server" }; }
-    }
-
-    public override int Position {
-      get { return 1300; }
-    }
-
-    public override void Execute() {
-      EditConnectionAction.Execute(MainFormManager.MainForm);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditProductsAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditProductsAction.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditProductsAction.cs	(revision 3208)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal static class EditProductsAction {
+    internal static void Execute(IMainForm mainForm) {
+      if (mainForm.Views.Any(x => x is ProductEditor)) {
+        mainForm.Views.First(x => x is ProductEditor).Show();
+      } else {
+        ProductEditor editor = new ProductEditor();
+        editor.Show();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditProductsMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditProductsMenuItem.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/EditProductsMenuItem.cs	(revision 3208)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal class EditProductsMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Edit Products"; }
+    }
+
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "Views" }; }
+    }
+
+    public override int Position {
+      get { return 1200; }
+    }
+
+    public override void Execute() {
+      EditProductsAction.Execute(MainFormManager.MainForm);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLab.PluginAdministrator-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLab.PluginAdministrator-3.3.csproj	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/HeuristicLab.PluginAdministrator-3.3.csproj	(revision 3208)
@@ -92,12 +92,14 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ConnectionSetupView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ConnectionSetupView.Designer.cs">
-      <DependentUpon>ConnectionSetupView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="EditConnectionAction.cs" />
-    <Compile Include="EditConnectionMenuItem.cs" />
+    <Compile Include="ConnectionPropertiesAction.cs" />
+    <Compile Include="ConnectionPropertiesMenuItem.cs" />
+    <Compile Include="ConnectionPropertiesView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ConnectionPropertiesView.Designer.cs">
+      <DependentUpon>ConnectionPropertiesView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EditProductsAction.cs" />
+    <Compile Include="EditProductsMenuItem.cs" />
     <Compile Include="HeuristicLabPluginAdministratorApplication.cs" />
     <Compile Include="HeuristicLabPluginAdministratorPlugin.cs" />
@@ -144,6 +146,4 @@
       <DependentUpon>ProductEditor.cs</DependentUpon>
     </Compile>
-    <Compile Include="OpenProductEditorAction.cs" />
-    <Compile Include="OpenServerProductsEditMenuItem.cs" />
     <Compile Include="IUserInterfaceItemProvider.cs" />
     <Compile Include="MainForm.cs">
@@ -151,4 +151,6 @@
     </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UploadPluginsAction.cs" />
+    <Compile Include="UploadPluginsMenuItem.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -174,6 +176,6 @@
   </ItemGroup>
   <ItemGroup>
-    <EmbeddedResource Include="ConnectionSetupView.resx">
-      <DependentUpon>ConnectionSetupView.cs</DependentUpon>
+    <EmbeddedResource Include="ConnectionPropertiesView.resx">
+      <DependentUpon>ConnectionPropertiesView.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="LicenseView.resx">
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/MainForm.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/MainForm.cs	(revision 3208)
@@ -33,4 +33,7 @@
       : base(type) {
       InitializeComponent();
+      this.Controls.Remove(toolStrip);
+      this.statusStrip.Items.Add(progressBar);
+      this.statusStrip.Items.Add(statusLabel);
     }
 
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/OpenProductEditorAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/OpenProductEditorAction.cs	(revision 3207)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.PluginAdministrator {
-  internal static class OpenProductEditorAction {
-    internal static void Execute(IMainForm mainForm) {
-      ProductEditor editor = new ProductEditor();
-      editor.Show();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.PluginAdministrator/3.3/OpenServerProductsEditMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/OpenServerProductsEditMenuItem.cs	(revision 3207)
+++ 	(revision )
@@ -1,46 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.PluginAdministrator {
-  internal class OpenServerProductsEditorMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IUserInterfaceItemProvider {
-    public override string Name {
-      get { return "Edit Products"; }
-    }
-
-    public override IEnumerable<string> Structure {
-      get { return new string[] { "Plugin Server" }; }
-    }
-
-    public override int Position {
-      get { return 1300; }
-    }
-
-    public override void Execute() {
-      OpenProductEditorAction.Execute(MainFormManager.MainForm);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.Designer.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.Designer.cs	(revision 3208)
@@ -45,9 +45,7 @@
     /// </summary>
     private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.imageList = new System.Windows.Forms.ImageList(this.components);
       this.refreshButton = new System.Windows.Forms.Button();
       this.uploadButton = new System.Windows.Forms.Button();
-      this.listView = new MultiSelectListView();
+      this.listView = new HeuristicLab.PluginAdministrator.MultiSelectListView();
       this.pluginNameHeader = new System.Windows.Forms.ColumnHeader();
       this.localVersionHeader = new System.Windows.Forms.ColumnHeader();
@@ -55,10 +53,4 @@
       this.descriptionHeader = new System.Windows.Forms.ColumnHeader();
       this.SuspendLayout();
-      // 
-      // imageList
-      // 
-      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
-      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
       // refreshButton
@@ -97,5 +89,4 @@
       this.listView.Name = "listView";
       this.listView.Size = new System.Drawing.Size(536, 444);
-      this.listView.StateImageList = this.imageList;
       this.listView.SuppressItemCheckedEvents = false;
       this.listView.TabIndex = 8;
@@ -108,20 +99,20 @@
       // 
       this.pluginNameHeader.Text = "Name";
-      this.pluginNameHeader.Width = 161;
+      this.pluginNameHeader.Width = 40;
       // 
       // localVersionHeader
       // 
       this.localVersionHeader.Text = "Local Version";
-      this.localVersionHeader.Width = 85;
+      this.localVersionHeader.Width = 76;
       // 
       // serverVersionHeader
       // 
       this.serverVersionHeader.Text = "Server Version";
-      this.serverVersionHeader.Width = 91;
+      this.serverVersionHeader.Width = 81;
       // 
       // descriptionHeader
       // 
       this.descriptionHeader.Text = "Description";
-      this.descriptionHeader.Width = 194;
+      this.descriptionHeader.Width = 335;
       // 
       // PluginEditor
@@ -142,5 +133,4 @@
     private System.Windows.Forms.Button refreshButton;
     private System.Windows.Forms.Button uploadButton;
-    private System.Windows.Forms.ImageList imageList;
     private MultiSelectListView listView;
     private System.Windows.Forms.ColumnHeader pluginNameHeader;
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.cs	(revision 3208)
@@ -44,7 +44,5 @@
     public PluginEditor() {
       InitializeComponent();
-      imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Assembly);
-      imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.ArrowUp);
-      Caption = "Plugins";
+      Caption = "Upload Plugins";
 
       localAndServerPlugins = new Dictionary<IPluginDescription, PluginDeploymentService.PluginDescription>();
@@ -88,4 +86,6 @@
           listView.Items.Add(item);
         }
+        foreach (ColumnHeader column in listView.Columns)
+          column.Width = -1;
         //listView.suppressCheckedEvents = false;
         listView.CheckBoxes = true;
@@ -160,9 +160,4 @@
         pluginUploadWorker.RunWorkerAsync(selectedPlugins.ToList());
       }
-    }
-
-    private void connectButton_Click(object sender, EventArgs e) {
-      var connectionSetupView = new ConnectionSetupView();
-      connectionSetupView.Show();
     }
 
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.resx
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.resx	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.resx	(revision 3208)
@@ -118,6 +118,3 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
 </root>
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.Designer.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.Designer.cs	(revision 3208)
@@ -45,5 +45,5 @@
     /// </summary>
     private void InitializeComponent() {
-      this.listView = new MultiSelectListView();
+      this.listView = new HeuristicLab.PluginAdministrator.MultiSelectListView();
       this.nameHeader = new System.Windows.Forms.ColumnHeader();
       this.versionHeader = new System.Windows.Forms.ColumnHeader();
@@ -60,4 +60,5 @@
       this.listView.Name = "listView";
       this.listView.Size = new System.Drawing.Size(341, 320);
+      this.listView.SuppressItemCheckedEvents = false;
       this.listView.TabIndex = 1;
       this.listView.UseCompatibleStateImageBehavior = false;
@@ -68,8 +69,10 @@
       // 
       this.nameHeader.Text = "Name";
+      this.nameHeader.Width = 40;
       // 
       // versionHeader
       // 
       this.versionHeader.Text = "Version";
+      this.versionHeader.Width = 297;
       // 
       // PluginListView
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.cs	(revision 3208)
@@ -73,4 +73,6 @@
           listView.Items.Add(CreateListViewItem(plugin));
         }
+        foreach (ColumnHeader column in listView.Columns)
+          column.Width = -1;
         listView.SuppressItemCheckedEvents = false;
       }
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginView.Designer.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginView.Designer.cs	(revision 3208)
@@ -165,10 +165,10 @@
       // 
       this.pluginNameHeader.Text = "Name";
-      this.pluginNameHeader.Width = 200;
+      this.pluginNameHeader.Width = 40;
       // 
       // pluginVersionHeader
       // 
       this.pluginVersionHeader.Text = "Version";
-      this.pluginVersionHeader.Width = 120;
+      this.pluginVersionHeader.Width = 288;
       // 
       // imageList
@@ -181,6 +181,6 @@
       // 
       this.filesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.fileNameHeader,
-            this.fileTypeHeader});
+            this.fileTypeHeader,
+            this.fileNameHeader});
       this.filesListView.Dock = System.Windows.Forms.DockStyle.Fill;
       this.filesListView.Location = new System.Drawing.Point(3, 16);
@@ -195,10 +195,10 @@
       // 
       this.fileNameHeader.Text = "Name";
-      this.fileNameHeader.Width = 200;
+      this.fileNameHeader.Width = 289;
       // 
       // fileTypeHeader
       // 
       this.fileTypeHeader.Text = "Type";
-      this.fileTypeHeader.Width = 120;
+      this.fileTypeHeader.Width = 36;
       // 
       // filesGroupBox
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.Designer.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.Designer.cs	(revision 3208)
@@ -47,17 +47,19 @@
       this.components = new System.ComponentModel.Container();
       this.refreshButton = new System.Windows.Forms.Button();
-      this.saveButton = new System.Windows.Forms.Button();
+      this.uploadButton = new System.Windows.Forms.Button();
       this.newProductButton = new System.Windows.Forms.Button();
       this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.productsGroupBox = new System.Windows.Forms.GroupBox();
       this.productsListView = new System.Windows.Forms.ListView();
       this.productNameHeader = new System.Windows.Forms.ColumnHeader();
       this.productVersionHeader = new System.Windows.Forms.ColumnHeader();
       this.productImageList = new System.Windows.Forms.ImageList(this.components);
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.pluginsGroupBox = new System.Windows.Forms.GroupBox();
       this.pluginListView = new HeuristicLab.PluginAdministrator.PluginListView();
-      this.pluginsLabel = new System.Windows.Forms.Label();
       this.versionTextBox = new System.Windows.Forms.TextBox();
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
       this.versionLabel = new System.Windows.Forms.Label();
-      this.nameTextBox = new System.Windows.Forms.TextBox();
-      this.nameLabel = new System.Windows.Forms.Label();
       this.pluginImageList = new System.Windows.Forms.ImageList(this.components);
       this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
@@ -65,4 +67,7 @@
       this.splitContainer.Panel2.SuspendLayout();
       this.splitContainer.SuspendLayout();
+      this.productsGroupBox.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.pluginsGroupBox.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
@@ -70,5 +75,5 @@
       // refreshButton
       // 
-      this.refreshButton.Location = new System.Drawing.Point(3, 3);
+      this.refreshButton.Location = new System.Drawing.Point(6, 19);
       this.refreshButton.Name = "refreshButton";
       this.refreshButton.Size = new System.Drawing.Size(75, 23);
@@ -78,20 +83,20 @@
       this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
       // 
-      // saveButton
-      // 
-      this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.saveButton.Enabled = false;
-      this.saveButton.Location = new System.Drawing.Point(3, 365);
-      this.saveButton.Name = "saveButton";
-      this.saveButton.Size = new System.Drawing.Size(96, 23);
-      this.saveButton.TabIndex = 2;
-      this.saveButton.Text = "Upload Products";
-      this.saveButton.UseVisualStyleBackColor = true;
-      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+      // uploadButton
+      // 
+      this.uploadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.uploadButton.Enabled = false;
+      this.uploadButton.Location = new System.Drawing.Point(6, 397);
+      this.uploadButton.Name = "uploadButton";
+      this.uploadButton.Size = new System.Drawing.Size(96, 23);
+      this.uploadButton.TabIndex = 2;
+      this.uploadButton.Text = "Upload Products";
+      this.uploadButton.UseVisualStyleBackColor = true;
+      this.uploadButton.Click += new System.EventHandler(this.saveButton_Click);
       // 
       // newProductButton
       // 
       this.newProductButton.Enabled = false;
-      this.newProductButton.Location = new System.Drawing.Point(84, 3);
+      this.newProductButton.Location = new System.Drawing.Point(87, 19);
       this.newProductButton.Name = "newProductButton";
       this.newProductButton.Size = new System.Drawing.Size(91, 23);
@@ -103,26 +108,32 @@
       // splitContainer
       // 
-      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(3, 32);
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
       this.splitContainer.Name = "splitContainer";
       // 
       // splitContainer.Panel1
       // 
-      this.splitContainer.Panel1.Controls.Add(this.productsListView);
-      this.splitContainer.Panel1.Controls.Add(this.saveButton);
+      this.splitContainer.Panel1.Controls.Add(this.productsGroupBox);
       // 
       // splitContainer.Panel2
       // 
-      this.splitContainer.Panel2.Controls.Add(this.pluginListView);
-      this.splitContainer.Panel2.Controls.Add(this.pluginsLabel);
-      this.splitContainer.Panel2.Controls.Add(this.versionTextBox);
-      this.splitContainer.Panel2.Controls.Add(this.versionLabel);
-      this.splitContainer.Panel2.Controls.Add(this.nameTextBox);
-      this.splitContainer.Panel2.Controls.Add(this.nameLabel);
-      this.splitContainer.Size = new System.Drawing.Size(659, 391);
-      this.splitContainer.SplitterDistance = 319;
+      this.splitContainer.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(665, 426);
+      this.splitContainer.SplitterDistance = 321;
       this.splitContainer.TabIndex = 4;
+      // 
+      // productsGroupBox
+      // 
+      this.productsGroupBox.Controls.Add(this.uploadButton);
+      this.productsGroupBox.Controls.Add(this.newProductButton);
+      this.productsGroupBox.Controls.Add(this.productsListView);
+      this.productsGroupBox.Controls.Add(this.refreshButton);
+      this.productsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.productsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.productsGroupBox.Name = "productsGroupBox";
+      this.productsGroupBox.Size = new System.Drawing.Size(321, 426);
+      this.productsGroupBox.TabIndex = 5;
+      this.productsGroupBox.TabStop = false;
+      this.productsGroupBox.Text = "Products";
       // 
       // productsListView
@@ -136,8 +147,8 @@
       this.productsListView.Enabled = false;
       this.productsListView.FullRowSelect = true;
-      this.productsListView.Location = new System.Drawing.Point(3, 3);
+      this.productsListView.Location = new System.Drawing.Point(6, 48);
       this.productsListView.MultiSelect = false;
       this.productsListView.Name = "productsListView";
-      this.productsListView.Size = new System.Drawing.Size(313, 356);
+      this.productsListView.Size = new System.Drawing.Size(309, 343);
       this.productsListView.SmallImageList = this.productImageList;
       this.productsListView.TabIndex = 4;
@@ -149,10 +160,10 @@
       // 
       this.productNameHeader.Text = "Name";
-      this.productNameHeader.Width = 150;
+      this.productNameHeader.Width = 40;
       // 
       // productVersionHeader
       // 
       this.productVersionHeader.Text = "Version";
-      this.productVersionHeader.Width = 100;
+      this.productVersionHeader.Width = 265;
       // 
       // productImageList
@@ -162,25 +173,42 @@
       this.productImageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
-      // pluginListView
-      // 
-      this.pluginListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Controls.Add(this.pluginsGroupBox);
+      this.detailsGroupBox.Controls.Add(this.versionTextBox);
+      this.detailsGroupBox.Controls.Add(this.nameLabel);
+      this.detailsGroupBox.Controls.Add(this.nameTextBox);
+      this.detailsGroupBox.Controls.Add(this.versionLabel);
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(340, 426);
+      this.detailsGroupBox.TabIndex = 8;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "Details";
+      // 
+      // pluginsGroupBox
+      // 
+      this.pluginsGroupBox.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.pluginsGroupBox.Controls.Add(this.pluginListView);
+      this.pluginsGroupBox.Location = new System.Drawing.Point(6, 71);
+      this.pluginsGroupBox.Name = "pluginsGroupBox";
+      this.pluginsGroupBox.Size = new System.Drawing.Size(328, 349);
+      this.pluginsGroupBox.TabIndex = 6;
+      this.pluginsGroupBox.TabStop = false;
+      this.pluginsGroupBox.Text = "Plugins";
+      // 
+      // pluginListView
+      // 
+      this.pluginListView.Dock = System.Windows.Forms.DockStyle.Fill;
       this.pluginListView.Enabled = false;
-      this.pluginListView.Location = new System.Drawing.Point(3, 85);
+      this.pluginListView.Location = new System.Drawing.Point(3, 16);
       this.pluginListView.Name = "pluginListView";
       this.pluginListView.Plugins = null;
-      this.pluginListView.Size = new System.Drawing.Size(330, 303);
+      this.pluginListView.Size = new System.Drawing.Size(322, 330);
       this.pluginListView.TabIndex = 7;
       this.pluginListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.pluginListView_ItemChecked);
-      // 
-      // pluginsLabel
-      // 
-      this.pluginsLabel.AutoSize = true;
-      this.pluginsLabel.Location = new System.Drawing.Point(11, 69);
-      this.pluginsLabel.Name = "pluginsLabel";
-      this.pluginsLabel.Size = new System.Drawing.Size(44, 13);
-      this.pluginsLabel.TabIndex = 6;
-      this.pluginsLabel.Text = "Plugins:";
       // 
       // versionTextBox
@@ -189,15 +217,36 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.versionTextBox.Enabled = false;
-      this.versionTextBox.Location = new System.Drawing.Point(68, 29);
+      this.versionTextBox.Location = new System.Drawing.Point(57, 45);
       this.versionTextBox.Name = "versionTextBox";
-      this.versionTextBox.Size = new System.Drawing.Size(233, 20);
+      this.versionTextBox.Size = new System.Drawing.Size(277, 20);
       this.versionTextBox.TabIndex = 5;
       this.versionTextBox.TextChanged += new System.EventHandler(this.versionTextBox_TextChanged);
       // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Enabled = false;
+      this.nameLabel.Location = new System.Drawing.Point(13, 22);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 2;
+      this.nameLabel.Text = "Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Enabled = false;
+      this.nameTextBox.Location = new System.Drawing.Point(57, 19);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(277, 20);
+      this.nameTextBox.TabIndex = 3;
+      this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged);
+      // 
       // versionLabel
       // 
       this.versionLabel.AutoSize = true;
       this.versionLabel.Enabled = false;
-      this.versionLabel.Location = new System.Drawing.Point(10, 32);
+      this.versionLabel.Location = new System.Drawing.Point(6, 48);
       this.versionLabel.Name = "versionLabel";
       this.versionLabel.Size = new System.Drawing.Size(45, 13);
@@ -205,25 +254,4 @@
       this.versionLabel.Text = "Version:";
       // 
-      // nameTextBox
-      // 
-      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.nameTextBox.Enabled = false;
-      this.nameTextBox.Location = new System.Drawing.Point(68, 3);
-      this.nameTextBox.Name = "nameTextBox";
-      this.nameTextBox.Size = new System.Drawing.Size(233, 20);
-      this.nameTextBox.TabIndex = 3;
-      this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged);
-      // 
-      // nameLabel
-      // 
-      this.nameLabel.AutoSize = true;
-      this.nameLabel.Enabled = false;
-      this.nameLabel.Location = new System.Drawing.Point(17, 6);
-      this.nameLabel.Name = "nameLabel";
-      this.nameLabel.Size = new System.Drawing.Size(38, 13);
-      this.nameLabel.TabIndex = 2;
-      this.nameLabel.Text = "Name:";
-      // 
       // pluginImageList
       // 
@@ -241,12 +269,13 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.Controls.Add(this.splitContainer);
-      this.Controls.Add(this.newProductButton);
-      this.Controls.Add(this.refreshButton);
       this.Name = "ProductEditor";
       this.Size = new System.Drawing.Size(665, 426);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.Panel2.PerformLayout();
       this.splitContainer.ResumeLayout(false);
+      this.productsGroupBox.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.detailsGroupBox.PerformLayout();
+      this.pluginsGroupBox.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
@@ -257,8 +286,7 @@
 
     private System.Windows.Forms.Button refreshButton;
-    private System.Windows.Forms.Button saveButton;
+    private System.Windows.Forms.Button uploadButton;
     private System.Windows.Forms.Button newProductButton;
     private System.Windows.Forms.SplitContainer splitContainer;
-    private System.Windows.Forms.Label pluginsLabel;
     private System.Windows.Forms.TextBox versionTextBox;
     private System.Windows.Forms.Label versionLabel;
@@ -272,4 +300,7 @@
     private System.Windows.Forms.ImageList pluginImageList;
     private PluginListView pluginListView;
+    private System.Windows.Forms.GroupBox productsGroupBox;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.GroupBox pluginsGroupBox;
 
   }
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.cs	(revision 3207)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.cs	(revision 3208)
@@ -111,10 +111,24 @@
         productsListView.Items.Add(CreateListViewItem(prodDesc));
       }
+      foreach (ColumnHeader column in productsListView.Columns)
+        column.Width = -1;
     }
 
     private void productsListBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (productsListView.SelectedItems.Count == 0) return;
+      bool productSelected = productsListView.SelectedItems.Count > 0;
+      detailsGroupBox.Enabled = productSelected;
+      uploadButton.Enabled = productSelected;
+      if (productsListView.SelectedItems.Count == 0) {
+        ClearProductDetails();
+        return;
+      }
       PluginDeploymentService.ProductDescription activeProduct = (PluginDeploymentService.ProductDescription)((ListViewItem)productsListView.SelectedItems[0]).Tag;
       UpdateProductDetails(activeProduct);
+    }
+
+    private void ClearProductDetails() {
+      nameTextBox.Text = string.Empty;
+      versionTextBox.Text = string.Empty;
+      pluginListView.Plugins = new IPluginDescription[0];
     }
 
@@ -134,5 +148,5 @@
 
     private void SetControlsEnabled(bool enabled) {
-      saveButton.Enabled = enabled;
+      uploadButton.Enabled = enabled;
       refreshButton.Enabled = enabled;
       newProductButton.Enabled = enabled;
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/UploadPluginsAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/UploadPluginsAction.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/UploadPluginsAction.cs	(revision 3208)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal static class UploadPluginsAction {
+    internal static void Execute(IMainForm mainForm) {
+      if (mainForm.Views.Any(x => x is PluginEditor)) {
+        mainForm.Views.First(x => x is PluginEditor).Show();
+      } else {
+        PluginEditor editor = new PluginEditor();
+        editor.Show();
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/UploadPluginsMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/UploadPluginsMenuItem.cs	(revision 3208)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/UploadPluginsMenuItem.cs	(revision 3208)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.PluginAdministrator {
+  internal class UploadPluginsMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Upload Plugins"; }
+    }
+
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "Views" }; }
+    }
+
+    public override int Position {
+      get { return 1100; }
+    }
+
+    public override void Execute() {
+      UploadPluginsAction.Execute(MainFormManager.MainForm);
+    }
+  }
+}
