Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/HeuristicLab.Optimization.BubbleChart-3.3.csproj
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/HeuristicLab.Optimization.BubbleChart-3.3.csproj	(revision 12380)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/HeuristicLab.Optimization.BubbleChart-3.3.csproj	(revision 12381)
@@ -84,10 +84,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="RecursiveDataItemListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RecursiveDataItemListView.Designer.cs">
-      <DependentUpon>RecursiveDataItemListView.cs</DependentUpon>
-    </Compile>
     <Compile Include="RecursiveDataItemView.cs">
       <SubType>UserControl</SubType>
Index: anches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemListView.Designer.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemListView.Designer.cs	(revision 12380)
+++ 	(revision )
@@ -1,119 +1,0 @@
-﻿#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.Optimization.BubbleChart {
-  partial class RecursiveDataItemListView {
-    /// <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.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.treeView = new System.Windows.Forms.TreeView();
-      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // 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(6, 26);
-      this.splitContainer.Name = "splitContainer";
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.treeView);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.viewHost);
-      this.splitContainer.Size = new System.Drawing.Size(342, 270);
-      this.splitContainer.SplitterDistance = 166;
-      this.splitContainer.TabIndex = 3;
-      // 
-      // treeView
-      // 
-      this.treeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.treeView.Location = new System.Drawing.Point(0, 0);
-      this.treeView.Name = "treeView";
-      this.treeView.Size = new System.Drawing.Size(166, 270);
-      this.treeView.TabIndex = 0;
-      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
-      // 
-      // viewHost
-      // 
-      this.viewHost.Caption = "View";
-      this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Enabled = false;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(172, 270);
-      this.viewHost.TabIndex = 0;
-      this.viewHost.ViewsLabelVisible = true;
-      this.viewHost.ViewType = null;
-      // 
-      // RecursiveDataItemListView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.splitContainer);
-      this.Name = "RecursiveDataItemListView";
-      this.Size = new System.Drawing.Size(351, 299);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
-      this.splitContainer.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.SplitContainer splitContainer;
-    private System.Windows.Forms.TreeView treeView;
-    private HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
-  }
-}
Index: anches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemListView.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemListView.cs	(revision 12380)
+++ 	(revision )
@@ -1,73 +1,0 @@
-﻿#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.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Optimization.BubbleChart {
-  [View("RecursiveDataItem View")]
-  [Content(typeof(ItemCollection<RecursiveDataItem>))]
-  public partial class RecursiveDataItemListView : ItemView {
-
-    public new ItemCollection<RecursiveDataItem> Content {
-      get { return (ItemCollection<RecursiveDataItem>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public RecursiveDataItemListView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-
-      treeView.Nodes.Clear();
-      viewHost.Content = null;
-
-      if (Content != null) {
-        foreach (var dataItem in Content) {
-          treeView.Nodes.Add(CreateTreeNode(dataItem));
-        }
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-    }
-
-    private TreeNode CreateTreeNode(RecursiveDataItem dataItem) {
-      var node = new TreeNode(dataItem.Name) {
-        Tag = dataItem
-      };
-      foreach (var child in dataItem.Children) {
-        node.Nodes.Add(CreateTreeNode(child));
-      }
-      return node;
-    }
-
-    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      var dataItem = (RecursiveDataItem)e.Node.Tag;
-      viewHost.Content = dataItem;
-    }
-  }
-}
Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.Designer.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.Designer.cs	(revision 12380)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.Designer.cs	(revision 12381)
@@ -48,4 +48,10 @@
       this.listView = new System.Windows.Forms.ListView();
       this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.nameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.valueColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.dataGroupBox = new System.Windows.Forms.GroupBox();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.dataChildrenSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.treeView = new System.Windows.Forms.TreeView();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
@@ -53,4 +59,10 @@
       this.splitContainer.Panel2.SuspendLayout();
       this.splitContainer.SuspendLayout();
+      this.dataGroupBox.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.dataChildrenSplitContainer)).BeginInit();
+      this.dataChildrenSplitContainer.Panel1.SuspendLayout();
+      this.dataChildrenSplitContainer.Panel2.SuspendLayout();
+      this.dataChildrenSplitContainer.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -59,57 +71,139 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(459, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(523, 3);
       // 
       // splitContainer
       // 
-      this.splitContainer.Location = new System.Drawing.Point(3, 26);
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(3, 16);
       this.splitContainer.Name = "splitContainer";
       // 
       // splitContainer.Panel1
       // 
-      this.splitContainer.Panel1.Controls.Add(this.listView);
+      this.splitContainer.Panel1.Controls.Add(this.dataChildrenSplitContainer);
       // 
       // splitContainer.Panel2
       // 
-      this.splitContainer.Panel2.Controls.Add(this.viewHost);
-      this.splitContainer.Size = new System.Drawing.Size(345, 261);
-      this.splitContainer.SplitterDistance = 115;
+      this.splitContainer.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(527, 297);
+      this.splitContainer.SplitterDistance = 170;
       this.splitContainer.TabIndex = 3;
       // 
       // listView
       // 
-      this.listView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.listView.Location = new System.Drawing.Point(0, 0);
+      this.listView.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.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.valueColumnHeader});
+      this.listView.FullRowSelect = true;
+      this.listView.HideSelection = false;
+      this.listView.Location = new System.Drawing.Point(3, 3);
       this.listView.MultiSelect = false;
       this.listView.Name = "listView";
-      this.listView.Size = new System.Drawing.Size(115, 261);
+      this.listView.Size = new System.Drawing.Size(160, 185);
+      this.listView.Sorting = System.Windows.Forms.SortOrder.Ascending;
       this.listView.TabIndex = 0;
       this.listView.UseCompatibleStateImageBehavior = false;
+      this.listView.View = System.Windows.Forms.View.Details;
       this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged);
       // 
       // viewHost
       // 
+      this.viewHost.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.viewHost.Caption = "View";
       this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
       this.viewHost.Enabled = false;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Location = new System.Drawing.Point(6, 19);
       this.viewHost.Name = "viewHost";
       this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(226, 261);
+      this.viewHost.Size = new System.Drawing.Size(334, 265);
       this.viewHost.TabIndex = 0;
       this.viewHost.ViewsLabelVisible = true;
       this.viewHost.ViewType = null;
       // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      // 
+      // valueColumnHeader
+      // 
+      this.valueColumnHeader.Text = "Value";
+      // 
+      // dataGroupBox
+      // 
+      this.dataGroupBox.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.dataGroupBox.Controls.Add(this.splitContainer);
+      this.dataGroupBox.Location = new System.Drawing.Point(6, 26);
+      this.dataGroupBox.Name = "dataGroupBox";
+      this.dataGroupBox.Size = new System.Drawing.Size(533, 316);
+      this.dataGroupBox.TabIndex = 4;
+      this.dataGroupBox.TabStop = false;
+      this.dataGroupBox.Text = "Data && Children";
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.detailsGroupBox.Controls.Add(this.viewHost);
+      this.detailsGroupBox.Location = new System.Drawing.Point(4, 4);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(346, 290);
+      this.detailsGroupBox.TabIndex = 1;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "Details";
+      // 
+      // dataChildrenSplitContainer
+      // 
+      this.dataChildrenSplitContainer.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.dataChildrenSplitContainer.Location = new System.Drawing.Point(4, 4);
+      this.dataChildrenSplitContainer.Name = "dataChildrenSplitContainer";
+      this.dataChildrenSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // dataChildrenSplitContainer.Panel1
+      // 
+      this.dataChildrenSplitContainer.Panel1.Controls.Add(this.listView);
+      // 
+      // dataChildrenSplitContainer.Panel2
+      // 
+      this.dataChildrenSplitContainer.Panel2.Controls.Add(this.treeView);
+      this.dataChildrenSplitContainer.Size = new System.Drawing.Size(168, 290);
+      this.dataChildrenSplitContainer.SplitterDistance = 191;
+      this.dataChildrenSplitContainer.TabIndex = 1;
+      // 
+      // treeView
+      // 
+      this.treeView.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.treeView.Location = new System.Drawing.Point(3, 3);
+      this.treeView.Name = "treeView";
+      this.treeView.Size = new System.Drawing.Size(160, 89);
+      this.treeView.TabIndex = 0;
+      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
+      // 
       // RecursiveDataItemView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.splitContainer);
+      this.Controls.Add(this.dataGroupBox);
       this.Name = "RecursiveDataItemView";
-      this.Size = new System.Drawing.Size(351, 290);
+      this.Size = new System.Drawing.Size(542, 345);
       this.Controls.SetChildIndex(this.nameLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.splitContainer, 0);
+      this.Controls.SetChildIndex(this.dataGroupBox, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.splitContainer.Panel1.ResumeLayout(false);
@@ -117,4 +211,10 @@
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
       this.splitContainer.ResumeLayout(false);
+      this.dataGroupBox.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.dataChildrenSplitContainer.Panel1.ResumeLayout(false);
+      this.dataChildrenSplitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.dataChildrenSplitContainer)).EndInit();
+      this.dataChildrenSplitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -127,4 +227,10 @@
     private System.Windows.Forms.ListView listView;
     private HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader valueColumnHeader;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.GroupBox dataGroupBox;
+    private System.Windows.Forms.SplitContainer dataChildrenSplitContainer;
+    private System.Windows.Forms.TreeView treeView;
   }
 }
Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.cs	(revision 12380)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.cs	(revision 12381)
@@ -28,5 +28,5 @@
 namespace HeuristicLab.Optimization.BubbleChart {
   [View("RecursiveDataItem View")]
-  [Content(typeof(RecursiveDataItem))]
+  [Content(typeof(RecursiveDataItem), true)]
   public partial class RecursiveDataItemView : NamedItemView {
 
@@ -41,5 +41,8 @@
 
     protected override void OnContentChanged() {
-      listView.Clear();
+      base.OnContentChanged();
+
+      listView.Items.Clear();
+      treeView.Nodes.Clear();
       viewHost.Content = null;
 
@@ -47,4 +50,9 @@
         foreach (var data in Content.Data) {
           listView.Items.Add(CreateListViewItem(data));
+        }
+        for (int i = 0; i < listView.Columns.Count; i++)
+          listView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        foreach (var dataItem in Content.Children) {
+          treeView.Nodes.Add(CreateTreeNode(dataItem));
         }
       }
@@ -56,7 +64,16 @@
 
     private ListViewItem CreateListViewItem(KeyValuePair<string, IItem> data) {
-      return new ListViewItem(data.Key) {
+      return new ListViewItem(new[] { data.Key, data.Value != null ? data.Value.ToString() : "-" }) {
         Tag = data.Value
       };
+    }
+    private TreeNode CreateTreeNode(RecursiveDataItem dataItem) {
+      var node = new TreeNode(dataItem.Name) {
+        Tag = dataItem
+      };
+      foreach (var child in dataItem.Children) {
+        node.Nodes.Add(CreateTreeNode(child));
+      }
+      return node;
     }
 
@@ -69,4 +86,8 @@
       }
     }
+    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      var dataItem = (RecursiveDataItem)e.Node.Tag;
+      viewHost.Content = dataItem;
+    }
   }
 }
