Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.Designer.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.Designer.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.Designer.cs	(revision 13115)
@@ -48,31 +48,33 @@
       this.pictureBox = new System.Windows.Forms.PictureBox();
       this.pictureBoxContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.modeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
       this.oneLayerUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.oneLayerDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.intoForegroundToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.intoBackgroundToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+      this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
       this.propertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+      this.saveImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      this.buttonPanel = new System.Windows.Forms.FlowLayoutPanel();
       this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
-      this.saveImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
       ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
       this.pictureBoxContextMenuStrip.SuspendLayout();
-      this.buttonPanel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
       this.SuspendLayout();
       // 
       // pictureBox
       // 
-      this.pictureBox.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.pictureBox.BackColor = System.Drawing.Color.White;
       this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
       this.pictureBox.ContextMenuStrip = this.pictureBoxContextMenuStrip;
-      this.pictureBox.Location = new System.Drawing.Point(35, 0);
+      this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.pictureBox.Location = new System.Drawing.Point(0, 0);
       this.pictureBox.Name = "pictureBox";
-      this.pictureBox.Size = new System.Drawing.Size(685, 500);
+      this.pictureBox.Size = new System.Drawing.Size(686, 500);
       this.pictureBox.TabIndex = 0;
       this.pictureBox.TabStop = false;
@@ -94,15 +96,28 @@
       // 
       this.pictureBoxContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.modeToolStripMenuItem,
+            this.toolStripSeparator1,
             this.oneLayerUpToolStripMenuItem,
             this.oneLayerDownToolStripMenuItem,
             this.intoForegroundToolStripMenuItem,
             this.intoBackgroundToolStripMenuItem,
-            this.toolStripMenuItem1,
+            this.toolStripSeparator2,
             this.propertiesToolStripMenuItem,
-            this.toolStripMenuItem2,
+            this.toolStripSeparator3,
             this.saveImageToolStripMenuItem});
       this.pictureBoxContextMenuStrip.Name = "pictureBoxContextMenuStrip";
-      this.pictureBoxContextMenuStrip.Size = new System.Drawing.Size(163, 170);
+      this.pictureBoxContextMenuStrip.Size = new System.Drawing.Size(163, 198);
       this.pictureBoxContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.PictureBoxContextMenuStripOnOpening);
+      // 
+      // modeToolStripMenuItem
+      // 
+      this.modeToolStripMenuItem.Name = "modeToolStripMenuItem";
+      this.modeToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+      this.modeToolStripMenuItem.Text = "&Mode";
+      // 
+      // toolStripSeparator1
+      // 
+      this.toolStripSeparator1.Name = "toolStripSeparator1";
+      this.toolStripSeparator1.Size = new System.Drawing.Size(159, 6);
       // 
       // oneLayerUpToolStripMenuItem
@@ -138,8 +153,8 @@
       this.intoBackgroundToolStripMenuItem.Click += new System.EventHandler(this.intoBackgroundToolStripMenuItem_Click);
       // 
-      // toolStripMenuItem1
-      // 
-      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
-      this.toolStripMenuItem1.Size = new System.Drawing.Size(159, 6);
+      // toolStripSeparator2
+      // 
+      this.toolStripSeparator2.Name = "toolStripSeparator2";
+      this.toolStripSeparator2.Size = new System.Drawing.Size(159, 6);
       // 
       // propertiesToolStripMenuItem
@@ -151,8 +166,8 @@
       this.propertiesToolStripMenuItem.Click += new System.EventHandler(this.propertiesToolStripMenuItem_Click);
       // 
-      // toolStripMenuItem2
-      // 
-      this.toolStripMenuItem2.Name = "toolStripMenuItem2";
-      this.toolStripMenuItem2.Size = new System.Drawing.Size(159, 6);
+      // toolStripSeparator3
+      // 
+      this.toolStripSeparator3.Name = "toolStripSeparator3";
+      this.toolStripSeparator3.Size = new System.Drawing.Size(159, 6);
       // 
       // saveImageToolStripMenuItem
@@ -169,10 +184,19 @@
       this.saveFileDialog.Filter = "Bitmap (*.bmp)|*.bmp|JPEG (*.jpg)|*.jpg|EMF (*.emf)|*.emf|PNG (*.png)|*.png|GIF (" +
     "*.gif)|*.gif|TIFF (*.tif)|*.tif";
-      this.buttonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)));
-      this.buttonPanel.Location = new System.Drawing.Point(0, 0);
-      this.buttonPanel.Name = "buttonPanel";
-      this.buttonPanel.Size = new System.Drawing.Size(32, 500);
-      this.buttonPanel.TabIndex = 2;
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer.IsSplitterFixed = true;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.pictureBox);
+      this.splitContainer.Size = new System.Drawing.Size(720, 500);
+      this.splitContainer.SplitterDistance = 30;
+      this.splitContainer.TabIndex = 1;
       // 
       // ChartControl
@@ -180,6 +204,5 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.BackColor = System.Drawing.SystemColors.Control;
-      this.Controls.Add(this.buttonPanel);
-      this.Controls.Add(this.pictureBox);
+      this.Controls.Add(this.splitContainer);
       this.DoubleBuffered = true;
       this.Name = "ChartControl";
@@ -190,5 +213,7 @@
       ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
       this.pictureBoxContextMenuStrip.ResumeLayout(false);
-      this.buttonPanel.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -206,8 +231,11 @@
     protected System.Windows.Forms.ToolStripMenuItem intoForegroundToolStripMenuItem;
     protected System.Windows.Forms.ToolStripMenuItem intoBackgroundToolStripMenuItem;
-    protected System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
-    protected System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
-    protected System.Windows.Forms.FlowLayoutPanel buttonPanel;
+    protected System.Windows.Forms.ToolStripMenuItem modeToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+    protected System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+    protected System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
     protected System.Windows.Forms.SaveFileDialog saveFileDialog;
+    protected System.Windows.Forms.SplitContainer splitContainer;
+
   }
 }
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartControl.cs	(revision 13115)
@@ -37,4 +37,9 @@
     private bool SuppressRender { get; set; }
 
+    public bool ShowToolBar {
+      get { return !splitContainer.Panel1Collapsed; }
+      set { splitContainer.Panel1Collapsed = !value; }
+    }
+
     private IChart chart;
     public IChart Chart {
@@ -55,5 +60,6 @@
         if (mode == value) return;
         mode = value;
-        SetButtonCheckedSate();
+        SetModeButtonCheckedState();
+        SetModeMenuItemCheckedState();
         SetPictureBoxCursor(GetPictureBoxCursor());
         OnModeChanged();
@@ -79,18 +85,6 @@
         Modes.Add(chartMode.GetType(), chartMode);
 
-      RebuildButtonPanel();
-    }
-
-    protected virtual void RebuildButtonPanel() {
-      buttonPanel.Controls.Clear();
-
-      int locationY = 3;
-      foreach (var chartMode in Modes.Values) {
-        var rb = CreateChartModeRadioButton(chartMode);
-        rb.Location = new Point(3, locationY);
-        toolTip.SetToolTip(rb, chartMode.ToolTip);
-        buttonPanel.Controls.Add(rb);
-        locationY += rb.Height + rb.Margin.Vertical;
-      }
+      ReloadModeToolBar();
+      ReloadModeContextMenu();
     }
 
@@ -116,7 +110,39 @@
     }
 
-    protected virtual void SetButtonCheckedSate() {
-      foreach (var rb in buttonPanel.Controls.OfType<RadioButton>())
+    protected virtual void ReloadModeToolBar() {
+      splitContainer.Panel1.Controls.Clear();
+
+      var chartModes = Modes.Values.ToList();
+      for (int i = 0; i < chartModes.Count; i++) {
+        var chartMode = chartModes[i];
+        var rb = CreateChartModeRadioButton(chartMode);
+        rb.Location = new Point(3, 3 + i * (rb.Height + rb.Margin.Vertical));
+        rb.TabIndex = i;
+        toolTip.SetToolTip(rb, chartMode.ToolTipText);
+        splitContainer.Panel1.Controls.Add(rb);
+      }
+
+      SetModeButtonCheckedState();
+    }
+
+    protected virtual void ReloadModeContextMenu() {
+      modeToolStripMenuItem.DropDownItems.Clear();
+
+      foreach (var chartMode in Modes.Values) {
+        var mi = CreateChartModeMenuItem(chartMode);
+        modeToolStripMenuItem.DropDownItems.Add(mi);
+      }
+
+      SetModeMenuItemCheckedState();
+    }
+
+    protected virtual void SetModeButtonCheckedState() {
+      foreach (var rb in splitContainer.Panel1.Controls.OfType<RadioButton>())
         rb.Checked = rb.Tag == Mode;
+    }
+
+    protected virtual void SetModeMenuItemCheckedState() {
+      foreach (var mi in modeToolStripMenuItem.DropDownItems.OfType<ToolStripMenuItem>())
+        mi.Checked = mi.Tag == Mode;
     }
 
@@ -126,7 +152,5 @@
 
     protected virtual Cursor GetPictureBoxCursor() {
-      if (mode == null) return null;
-
-      return mode.Cursor;
+      return mode != null ? mode.Cursor : null;
     }
 
@@ -163,36 +187,36 @@
 
     protected virtual void PictureBoxOnMouseClick(object sender, MouseEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnMouseClick(sender, e);
+      if (mode != null)
+        mode.HandleOnMouseClick(sender, e);
     }
 
     protected virtual void PictureBoxOnMouseDoubleClick(object sender, MouseEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnMouseDoubleClick(sender, e);
+      if (mode != null)
+        mode.HandleOnMouseDoubleClick(sender, e);
     }
 
     protected virtual void OnKeyDown(object sender, KeyEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnKeyDown(sender, e);
+      if (mode != null)
+        mode.HandleOnKeyDown(sender, e);
     }
 
     protected virtual void OnKeyUp(object sender, KeyEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnKeyUp(sender, e);
+      if (mode != null)
+        mode.HandleOnKeyUp(sender, e);
     }
 
     protected virtual void PictureBoxOnMouseWheel(object sender, MouseEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnMouseWheel(sender, e);
+      if (mode != null)
+        mode.HandleOnMouseWheel(sender, e);
     }
 
     protected virtual void PictureBoxOnMouseDown(object sender, MouseEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnMouseDown(sender, e);
+      if (mode != null)
+        mode.HandleOnMouseDown(sender, e);
     }
 
     protected virtual void PictureBoxOnMouseUp(object sender, MouseEventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnMouseUp(sender, e);
+      if (mode != null)
+        mode.HandleOnMouseUp(sender, e);
 
       if (Chart == null) return;
@@ -214,9 +238,8 @@
         if (toolTip.GetToolTip(pictureBox) != toolTipText) toolTip.SetToolTip(pictureBox, toolTipText);
 
-        if (mode == null) return;
-
-        mode.HandleOnMouseMove(sender, e);
-
-        SetPictureBoxCursor(mode.Cursor);
+        if (mode != null)
+          mode.HandleOnMouseMove(sender, e);
+
+        SetPictureBoxCursor(GetPictureBoxCursor());
       }
     }
@@ -227,26 +250,24 @@
         return;
       }
-      if (!Focused) this.pictureBox.Focus();
-
-      if (mode == null) return;
-
-      mode.HandleOnMouseEnter(sender, e);
+      if (!Focused) pictureBox.Focus();
+
+      if (mode != null)
+        mode.HandleOnMouseEnter(sender, e);
     }
 
     protected virtual void PictureBoxOnMouseLeave(object sender, EventArgs e) {
-      if (mode == null) return;
-      mode.HandleOnMouseLeave(sender, e);
+      if (mode != null)
+        mode.HandleOnMouseLeave(sender, e);
     }
 
     protected virtual void PictureBoxOnClick(object sender, EventArgs e) {
       if (InvokeRequired) {
-        Invoke((Action<Object, MouseEventArgs>)PictureBoxOnClick, sender, e);
+        Invoke((Action<object, MouseEventArgs>)PictureBoxOnClick, sender, e);
         return;
       }
-      if (!Focused) this.pictureBox.Focus();
-
-      if (mode == null) return;
-
-      mode.HandleOnClick(sender, e);
+      if (!Focused) pictureBox.Focus();
+
+      if (mode != null)
+        mode.HandleOnClick(sender, e);
     }
     #endregion
@@ -368,4 +389,16 @@
       return rb;
     }
+
+    private ToolStripMenuItem CreateChartModeMenuItem(ChartMode chartMode) {
+      var mi = new ToolStripMenuItem(chartMode.Text) {
+        CheckOnClick = true,
+        Image = chartMode.Image,
+        Tag = chartMode
+      };
+
+      mi.CheckedChanged += (sender, args) => { if (mi.Checked) Mode = chartMode; };
+
+      return mi;
+    }
     #endregion
   }
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartMode.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartMode.cs	(revision 13115)
@@ -33,5 +33,7 @@
 
     public abstract Image Image { get; }
-    public abstract string ToolTip { get; }
+    public abstract string Text { get; }
+
+    public virtual string ToolTipText { get { return Text; } }
 
     public virtual Cursor Cursor {
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/PanChartMode.cs	(revision 13115)
@@ -27,6 +27,6 @@
   public class PanChartMode : ChartMode {
     public override Image Image { get { return VSImageLibrary.Breakpoint; } }
-    public override string ToolTip { get { return "Pan"; } }
-
+    public override string Text { get { return "&Pan"; } }
+    public override string ToolTipText { get { return "Pan"; } }
     public override Cursor Cursor {
       get { return cursor ?? (cursor = new Cursor(typeof(ChartControl), "Resources.Hand.cur")); }
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/RulerChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/RulerChartMode.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/RulerChartMode.cs	(revision 13115)
@@ -29,15 +29,8 @@
     protected Point? startPoint;
 
-    public override Image Image {
-      get { return VSImageLibrary.TrackBar; }
-    }
-
-    public override string ToolTip {
-      get { return "Ruler"; }
-    }
-
-    public override Cursor Cursor {
-      get { return Cursors.Cross; }
-    }
+    public override Image Image { get { return VSImageLibrary.TrackBar; } }
+    public override string Text { get { return "&Ruler"; } }
+    public override string ToolTipText { get { return "Ruler"; } }
+    public override Cursor Cursor { get { return Cursors.Cross; } }
 
     public RulerChartMode(ChartControl control) : base(control) { }
@@ -45,11 +38,15 @@
     public override void HandleOnMouseDown(object sender, MouseEventArgs e) {
       try {
-        if (startPoint.HasValue) {
-          if (startPoint.Value == e.Location) {
-            startPoint = null;
-            chartControl.RefreshPicture();
-          }
-        } else
-          startPoint = e.Location;
+        switch (e.Button) {
+          case MouseButtons.Left:
+            if (startPoint.HasValue) {
+              if (startPoint.Value == e.Location) {
+                startPoint = null;
+                chartControl.RefreshPicture();
+              }
+            } else
+              startPoint = e.Location;
+            break;
+        }
       } finally {
         base.HandleOnMouseDown(sender, e);
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/SelectChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/SelectChartMode.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/SelectChartMode.cs	(revision 13115)
@@ -28,5 +28,6 @@
   public class SelectChartMode : ChartMode {
     public override Image Image { get { return VSImageLibrary.Pointer; } }
-    public override string ToolTip { get { return "Select"; } }
+    public override string Text { get { return "&Select"; } }
+    public override string ToolTipText { get { return "Select"; } }
 
     public SelectChartMode(ChartControl control) : base(control) { }
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomInChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomInChartMode.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomInChartMode.cs	(revision 13115)
@@ -29,6 +29,6 @@
   public class ZoomInChartMode : ChartMode {
     public override Image Image { get { return VSImageLibrary.ZoomIn; } }
-    public override string ToolTip { get { return "Zoom In"; } }
-
+    public override string Text { get { return "Zoom &In"; } }
+    public override string ToolTipText { get { return "Zoom In"; } }
     public override Cursor Cursor {
       get { return cursor ?? (cursor = new Cursor(typeof(ChartControl), "Resources.ZoomIn.cur")); }
Index: /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomOutChartMode.cs
===================================================================
--- /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomOutChartMode.cs	(revision 13114)
+++ /branches/HeuristicLab.Visualization/HeuristicLab.Visualization/3.3/ChartModes/ZoomOutChartMode.cs	(revision 13115)
@@ -27,6 +27,6 @@
   public class ZoomOutChartMode : ChartMode {
     public override Image Image { get { return VSImageLibrary.ZoomOut; } }
-    public override string ToolTip { get { return "Zoom Out"; } }
-
+    public override string Text { get { return "Zoom &Out"; } }
+    public override string ToolTipText { get { return "Zoom Out"; } }
     public override Cursor Cursor {
       get { return cursor ?? (cursor = new Cursor(typeof(ChartControl), "Resources.ZoomOut.cur")); }
