Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.Designer.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.Designer.cs	(revision 12388)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.Designer.cs	(revision 12388)
@@ -0,0 +1,231 @@
+﻿#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 BubbleChartView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.yLabel = new System.Windows.Forms.Label();
+      this.xLabel = new System.Windows.Forms.Label();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.yAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.xAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.treeView = new System.Windows.Forms.TreeView();
+      this.childrenGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.sizeComboBox = new System.Windows.Forms.ComboBox();
+      this.sizeLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.childrenGroupBox.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // yLabel
+      // 
+      this.yLabel.AutoSize = true;
+      this.yLabel.Location = new System.Drawing.Point(3, 6);
+      this.yLabel.Name = "yLabel";
+      this.yLabel.Size = new System.Drawing.Size(15, 13);
+      this.yLabel.TabIndex = 0;
+      this.yLabel.Text = "y:";
+      // 
+      // xLabel
+      // 
+      this.xLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xLabel.AutoSize = true;
+      this.xLabel.Location = new System.Drawing.Point(461, 586);
+      this.xLabel.Name = "xLabel";
+      this.xLabel.Size = new System.Drawing.Size(15, 13);
+      this.xLabel.TabIndex = 2;
+      this.xLabel.Text = "x:";
+      // 
+      // chart
+      // 
+      this.chart.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)));
+      chartArea2.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea2);
+      this.chart.Location = new System.Drawing.Point(3, 3);
+      this.chart.Name = "chart";
+      series2.ChartArea = "ChartArea1";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series2.IsVisibleInLegend = false;
+      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
+      series2.Name = "Bubbles";
+      series2.YValuesPerPoint = 2;
+      this.chart.Series.Add(series2);
+      this.chart.Size = new System.Drawing.Size(663, 541);
+      this.chart.TabIndex = 7;
+      // 
+      // yAxisComboBox
+      // 
+      this.yAxisComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.yAxisComboBox.FormattingEnabled = true;
+      this.yAxisComboBox.Location = new System.Drawing.Point(24, 3);
+      this.yAxisComboBox.Name = "yAxisComboBox";
+      this.yAxisComboBox.Size = new System.Drawing.Size(340, 21);
+      this.yAxisComboBox.TabIndex = 8;
+      this.yAxisComboBox.SelectedValueChanged += new System.EventHandler(this.axisComboBox_SelectedValueChanged);
+      // 
+      // xAxisComboBox
+      // 
+      this.xAxisComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.xAxisComboBox.FormattingEnabled = true;
+      this.xAxisComboBox.Location = new System.Drawing.Point(482, 583);
+      this.xAxisComboBox.Name = "xAxisComboBox";
+      this.xAxisComboBox.Size = new System.Drawing.Size(340, 21);
+      this.xAxisComboBox.TabIndex = 9;
+      this.xAxisComboBox.SelectedValueChanged += new System.EventHandler(this.axisComboBox_SelectedValueChanged);
+      // 
+      // 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.CheckBoxes = true;
+      this.treeView.Location = new System.Drawing.Point(6, 19);
+      this.treeView.Name = "treeView";
+      this.treeView.Size = new System.Drawing.Size(128, 516);
+      this.treeView.TabIndex = 10;
+      this.treeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterCheck);
+      // 
+      // childrenGroupBox
+      // 
+      this.childrenGroupBox.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.childrenGroupBox.Controls.Add(this.treeView);
+      this.childrenGroupBox.Location = new System.Drawing.Point(3, 3);
+      this.childrenGroupBox.Name = "childrenGroupBox";
+      this.childrenGroupBox.Size = new System.Drawing.Size(140, 541);
+      this.childrenGroupBox.TabIndex = 11;
+      this.childrenGroupBox.TabStop = false;
+      this.childrenGroupBox.Text = "Children";
+      // 
+      // 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, 30);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.childrenGroupBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.chart);
+      this.splitContainer.Size = new System.Drawing.Size(819, 547);
+      this.splitContainer.SplitterDistance = 146;
+      this.splitContainer.TabIndex = 12;
+      // 
+      // sizeComboBox
+      // 
+      this.sizeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.sizeComboBox.FormattingEnabled = true;
+      this.sizeComboBox.Location = new System.Drawing.Point(542, 3);
+      this.sizeComboBox.Name = "sizeComboBox";
+      this.sizeComboBox.Size = new System.Drawing.Size(280, 21);
+      this.sizeComboBox.TabIndex = 13;
+      this.sizeComboBox.SelectedValueChanged += new System.EventHandler(this.axisComboBox_SelectedValueChanged);
+      // 
+      // sizeLabel
+      // 
+      this.sizeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeLabel.AutoSize = true;
+      this.sizeLabel.Location = new System.Drawing.Point(470, 6);
+      this.sizeLabel.Name = "sizeLabel";
+      this.sizeLabel.Size = new System.Drawing.Size(66, 13);
+      this.sizeLabel.TabIndex = 14;
+      this.sizeLabel.Text = "Bubble Size:";
+      // 
+      // BubbleChartView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Window;
+      this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.Controls.Add(this.sizeLabel);
+      this.Controls.Add(this.sizeComboBox);
+      this.Controls.Add(this.splitContainer);
+      this.Controls.Add(this.xAxisComboBox);
+      this.Controls.Add(this.xLabel);
+      this.Controls.Add(this.yLabel);
+      this.Controls.Add(this.yAxisComboBox);
+      this.Name = "BubbleChartView";
+      this.Size = new System.Drawing.Size(825, 607);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.childrenGroupBox.ResumeLayout(false);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label yLabel;
+    private System.Windows.Forms.Label xLabel;
+    private HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart chart;
+    private System.Windows.Forms.ComboBox yAxisComboBox;
+    private System.Windows.Forms.ComboBox xAxisComboBox;
+    private System.Windows.Forms.TreeView treeView;
+    private System.Windows.Forms.GroupBox childrenGroupBox;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.ComboBox sizeComboBox;
+    private System.Windows.Forms.Label sizeLabel;
+  }
+}
Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs	(revision 12388)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs	(revision 12388)
@@ -0,0 +1,283 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimization.BubbleChart {
+  [View("Bubble Chart (Recursive)")]
+  [Content(typeof(RecursiveDataItem), false)]
+  public partial class BubbleChartView : ItemView {
+
+    private enum SizeDimension { Constant = 0 }
+    private enum AxisDimension { Index = 0 }
+
+    private string xAxisValue;
+    private string yAxisValue;
+    private string sizeAxisValue;
+
+    private readonly Dictionary<RecursiveDataItem, int> itemToIndexMapping = new Dictionary<RecursiveDataItem, int>();
+    private readonly Dictionary<string, Dictionary<object, double>> categoricalMapping = new Dictionary<string, Dictionary<object, double>>();
+
+    public new RecursiveDataItem Content {
+      get { return (RecursiveDataItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public BubbleChartView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      UpdateTreeView();
+      UpdateComboBoxes();
+      UpdateDataPoints();
+      //UpdateCaption();
+    }
+
+    #region Tree Queries
+    private IEnumerable<string> GetAvailableKeys() {
+      var collector = new List<string>(Content.Data.Keys);
+      foreach (TreeNode node in treeView.Nodes)
+        GetAvailableKeys(node, collector);
+      return collector.Distinct();
+    }
+    private void GetAvailableKeys(TreeNode node, List<string> collector) {
+      var item = (RecursiveDataItem)node.Tag;
+      if (node.Checked)
+        collector.AddRange(item.Data.Keys);
+      foreach (TreeNode child in node.Nodes)
+        GetAvailableKeys(child, collector);
+    }
+
+    private IEnumerable<RecursiveDataItem> GetAvailableItems() {
+      var collector = new List<RecursiveDataItem>() { Content };
+      foreach (TreeNode child in treeView.Nodes)
+        GetAvailableItems(child, collector);
+      return collector;
+    }
+
+    private void GetAvailableItems(TreeNode node, List<RecursiveDataItem> collector) {
+      var item = (RecursiveDataItem)node.Tag;
+      if (node.Checked)
+        collector.Add(item);
+      foreach (TreeNode child in node.Nodes)
+        GetAvailableItems(child, collector);
+    }
+    #endregion
+
+    #region Update Controls
+    private void UpdateTreeView() {
+      treeView.Nodes.Clear();
+
+      if (Content != null) {
+        foreach (var child in Content.Children)
+          treeView.Nodes.Add(CreateTreeNode(child));
+      }
+
+      treeView.ExpandAll();
+      splitContainer.Panel1Collapsed = treeView.Nodes.Count == 0;
+    }
+    private TreeNode CreateTreeNode(RecursiveDataItem item) {
+      var node = new TreeNode(item.Name) {
+        Tag = item,
+        Checked = true
+      };
+      foreach (var child in item.Children)
+        node.Nodes.Add(CreateTreeNode(child));
+      return node;
+    }
+
+    private void UpdateComboBoxes() {
+      var selectedXAxis = (string)xAxisComboBox.SelectedItem;
+      var selectedYAxis = (string)yAxisComboBox.SelectedItem;
+      var selectedSizeAxis = (string)sizeComboBox.SelectedItem;
+      xAxisComboBox.Items.Clear();
+      yAxisComboBox.Items.Clear();
+      sizeComboBox.Items.Clear();
+
+      if (Content != null) {
+        var axisNames = GetAvailableKeys().ToArray();
+        var additionalAxisDimension = Enum.GetNames(typeof(AxisDimension));
+        var additionalSizeDimension = Enum.GetNames(typeof(SizeDimension));
+
+        xAxisComboBox.Items.AddRange(additionalAxisDimension);
+        xAxisComboBox.Items.AddRange(axisNames);
+        yAxisComboBox.Items.AddRange(additionalAxisDimension);
+        yAxisComboBox.Items.AddRange(axisNames);
+        sizeComboBox.Items.AddRange(additionalSizeDimension);
+        sizeComboBox.Items.AddRange(axisNames);
+        sizeComboBox.SelectedItem = SizeDimension.Constant.ToString();
+
+        bool changed = false;
+        if (selectedXAxis != null && xAxisComboBox.Items.Contains(selectedXAxis)) {
+          xAxisComboBox.SelectedItem = selectedXAxis;
+          changed = true;
+        }
+        if (selectedYAxis != null && yAxisComboBox.Items.Contains(selectedYAxis)) {
+          yAxisComboBox.SelectedItem = selectedYAxis;
+          changed = true;
+        }
+        if (selectedSizeAxis != null && sizeComboBox.Items.Contains(selectedSizeAxis)) {
+          sizeComboBox.SelectedItem = selectedSizeAxis;
+          changed = true;
+        }
+        if (changed) {
+          UpdateDataPoints();
+          //UpdateAxisLabels();
+        }
+      }
+    }
+
+    private void UpdateDataPoints() {
+      var series = chart.Series[0];
+      series.Points.Clear();
+      itemToIndexMapping.Clear();
+      categoricalMapping.Clear();
+      RebuildInverseIndex();
+
+      chart.ChartAreas[0].AxisX.IsMarginVisible = xAxisValue != AxisDimension.Index.ToString();
+      chart.ChartAreas[0].AxisY.IsMarginVisible = yAxisValue != AxisDimension.Index.ToString();
+
+      if (Content != null) {
+        var items = GetAvailableItems();
+        foreach (var item in items) {
+          var x = GetValue(item, xAxisValue);
+          var y = GetValue(item, yAxisValue);
+          var s = GetValue(item, sizeAxisValue);
+          if (x.HasValue && y.HasValue && s.HasValue) {
+            var dataPoint = new DataPoint(x.Value, new[] { y.Value, s.Value });
+            series.Points.Add(dataPoint);
+          }
+        }
+      }
+    }
+    private double? GetValue(RecursiveDataItem item, string key) {
+      if (item == null || string.IsNullOrEmpty(key))
+        return null;
+
+      if (Enum.IsDefined(typeof(AxisDimension), key)) {
+        var axisDimension = (AxisDimension)Enum.Parse(typeof(AxisDimension), key);
+        return GetValue(item, axisDimension);
+      } else if (Enum.IsDefined(typeof(SizeDimension), key)) {
+        var sizeDimension = (SizeDimension)Enum.Parse(typeof(SizeDimension), key);
+        return GetValue(item, sizeDimension);
+      } else if (item.Data.ContainsKey(key)) {
+        IItem value = item.Data[key];
+        var doubleValue = value as DoubleValue;
+        var intValue = value as IntValue;
+        var timeSpanValue = value as TimeSpanValue;
+        double? ret = null;
+        if (doubleValue != null) {
+          if (!double.IsNaN(doubleValue.Value) && !double.IsInfinity(doubleValue.Value))
+            ret = doubleValue.Value;
+        } else if (intValue != null)
+          ret = intValue.Value;
+        else if (timeSpanValue != null)
+          ret = timeSpanValue.Value.TotalSeconds;
+        else
+          ret = GetCategoricalValue(item, key, value.ToString());
+        return ret;
+      } else {
+        return null;
+      }
+    }
+    private double? GetCategoricalValue(RecursiveDataItem item, string key, string value) {
+      if (!categoricalMapping.ContainsKey(key)) {
+        categoricalMapping[key] = new Dictionary<object, double>();
+        var orderedCategories =
+          GetAvailableItems().Where(x => x.Data.ContainsKey(key)).Select(x => x.Data[key].ToString())
+            .Distinct().OrderBy(x => x, new NaturalStringComparer());
+        int count = 1;
+        foreach (var category in orderedCategories) {
+          categoricalMapping[key].Add(category, count);
+          count++;
+        }
+      }
+      if (!this.categoricalMapping[key].ContainsKey(value)) return null;
+      return this.categoricalMapping[key][value];
+    }
+    private double GetValue(RecursiveDataItem item, AxisDimension axisDimension) {
+      double value = double.NaN;
+      switch (axisDimension) {
+        case AxisDimension.Index:
+          value = itemToIndexMapping[item];
+          break;
+        default:
+          throw new ArgumentException("No handling strategy for " + axisDimension.ToString() + " is defined.");
+      }
+      return value;
+    }
+    private double GetValue(RecursiveDataItem item, SizeDimension sizeDimension) {
+      double value = double.NaN;
+      switch (sizeDimension) {
+        case SizeDimension.Constant:
+          value = 2;
+          break;
+        default:
+          throw new ArgumentException("No handling strategy for " + sizeDimension.ToString() + " is defined.");
+      }
+      return value;
+    }
+    private void RebuildInverseIndex() {
+      if (Content != null) {
+        itemToIndexMapping.Clear();
+        int i = 0;
+        foreach (var item in GetAvailableItems()) {
+          // ToDo: do not add if key (which one?) is not present within item
+          itemToIndexMapping.Add(item, i);
+          i++;
+        }
+      }
+    }
+    #endregion
+
+    #region Event Handlers
+    private void treeView_AfterCheck(object sender, TreeViewEventArgs e) {
+      UpdateComboBoxes();
+      UpdateDataPoints();
+    }
+
+    private void axisComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      bool axisSelected = xAxisComboBox.SelectedIndex != -1 && yAxisComboBox.SelectedIndex != -1;
+
+      xAxisValue = (string)xAxisComboBox.SelectedItem;
+      yAxisValue = (string)yAxisComboBox.SelectedItem;
+      sizeAxisValue = (string)sizeComboBox.SelectedItem;
+
+      UpdateDataPoints();
+      //UpdateAxisLabels();
+    }
+    #endregion
+
+
+  }
+}
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 12387)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/HeuristicLab.Optimization.BubbleChart-3.3.csproj	(revision 12388)
@@ -77,11 +77,22 @@
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Visualization.ChartControlsExtensions-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Visualization.ChartControlsExtensions-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Data" />
     <Reference Include="System.Drawing" />
     <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="BubbleChartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BubbleChartView.Designer.cs">
+      <DependentUpon>BubbleChartView.cs</DependentUpon>
+    </Compile>
     <Compile Include="RecursiveDataItemView.cs">
       <SubType>UserControl</SubType>
Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.cs	(revision 12387)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/RecursiveDataItemView.cs	(revision 12388)
@@ -53,7 +53,9 @@
         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));
         }
+        treeView.ExpandAll();
       }
     }
