Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/ActionUserInterfaceItem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/ActionUserInterfaceItem.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/ActionUserInterfaceItem.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ControlExtensions.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ControlExtensions.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ControlExtensions.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -46,19 +46,4 @@
       }
     }
-
-    public static IEnumerable<Control> GetNestedControls(this Control control, Func<Control, bool> condition = null) {
-      if (control == null) yield break;
-      if (condition == null) condition = (c) => true;
-
-      Queue<Control> unprocessed = new Queue<Control>();
-      unprocessed.Enqueue(control);
-
-      while (unprocessed.Count > 0) {
-        Control c = unprocessed.Dequeue();
-        if (condition(c)) yield return c;
-        foreach (Control child in c.Controls)
-          unprocessed.Enqueue(child);
-      }
-    }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/DragOverTabControl.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/DragOverTabControl.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/DragOverTabControl.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/DragOverTabControl.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/DragOverTabControl.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/DragOverTabControl.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -25,7 +25,4 @@
 namespace HeuristicLab.MainForm.WindowsForms {
   internal sealed partial class ProgressView : UserControl {
-    private const int defaultControlHeight = 88;
-    private const int collapsedControlHeight = 55;
-
     private readonly Control control;
     public Control Control {
@@ -40,19 +37,17 @@
     public ProgressView(Control control, IProgress content)
       : base() {
-      if (control == null) throw new ArgumentNullException("control", "The control is null.");
-      if (content == null) throw new ArgumentNullException("content", "The passed progress is null.");
+      if (control == null) throw new ArgumentNullException("control");
+      if (control.Parent == null) throw new InvalidOperationException("A Progress can only be shown on controls that have a Parent-control. Therefore, Dialogs and Forms cannot have an associated ProgressView.");
+      if (content == null) throw new ArgumentNullException("content");
       InitializeComponent();
 
       this.control = control;
       this.content = content;
-      if (content.ProgressState == ProgressState.Started)
+
+      if (content.ProgressState != ProgressState.Finished)
         ShowProgress();
       RegisterContentEvents();
     }
 
-    /// <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) {
       DeregisterContentEvents();
@@ -66,14 +61,41 @@
 
     private void RegisterContentEvents() {
-      content.StatusChanged += new EventHandler(progress_StatusChanged);
-      content.ProgressValueChanged += new EventHandler(progress_ProgressValueChanged);
-      content.ProgressStateChanged += new EventHandler(Content_ProgressStateChanged);
-      content.CanBeCanceledChanged += new EventHandler(Content_CanBeCanceledChanged);
+      Content.ProgressStateChanged += new EventHandler(Content_ProgressStateChanged);
+      Content.MessageChanged += new EventHandler(Content_MessageChanged);
+      Content.ProgressBarModeChanged += new EventHandler(Content_ProgressBarModeChanged);
+      Content.ProgressValueChanged += new EventHandler(Content_ProgressValueChanged);
+      Content.CanBeStoppedChanged += new EventHandler(Content_CanBeStoppedChanged);
+      Content.CanBeCanceledChanged += new EventHandler(Content_CanBeCanceledChanged);
     }
     private void DeregisterContentEvents() {
-      content.StatusChanged -= new EventHandler(progress_StatusChanged);
-      content.ProgressValueChanged -= new EventHandler(progress_ProgressValueChanged);
-      content.ProgressStateChanged -= new EventHandler(Content_ProgressStateChanged);
-      content.CanBeCanceledChanged -= new EventHandler(Content_CanBeCanceledChanged);
+      Content.ProgressStateChanged -= new EventHandler(Content_ProgressStateChanged);
+      Content.MessageChanged -= new EventHandler(Content_MessageChanged);
+      Content.ProgressBarModeChanged -= new EventHandler(Content_ProgressBarModeChanged);
+      Content.ProgressValueChanged -= new EventHandler(Content_ProgressValueChanged);
+      Content.CanBeStoppedChanged -= new EventHandler(Content_CanBeStoppedChanged);
+      Content.CanBeCanceledChanged -= new EventHandler(Content_CanBeCanceledChanged);
+    }
+
+    private void Content_ProgressStateChanged(object sender, EventArgs e) {
+      UpdateProgressState();
+      UpdateButtonsState();
+    }
+
+    private void Content_MessageChanged(object sender, EventArgs e) {
+      UpdateProgressMessage();
+    }
+
+    private void Content_ProgressBarModeChanged(object sender, EventArgs e) {
+      UpdateProgressValue();
+    }
+    private void Content_ProgressValueChanged(object sender, EventArgs e) {
+      UpdateProgressValue();
+    }
+
+    private void Content_CanBeStoppedChanged(object sender, EventArgs e) {
+      UpdateButtonsState();
+    }
+    private void Content_CanBeCanceledChanged(object sender, EventArgs e) {
+      UpdateButtonsState();
     }
 
@@ -83,94 +105,95 @@
         return;
       }
-      int height = Content.CanBeCanceled ? Height : collapsedControlHeight;
+      if (Parent != null) return;
 
       Left = (Control.ClientRectangle.Width / 2) - (Width / 2);
-      Top = (Control.ClientRectangle.Height / 2) - (height / 2);
+      Top = (Control.ClientRectangle.Height / 2) - (Height / 2);
       Anchor = AnchorStyles.None;
 
-      control.Enabled = false;
+      UpdateProgressMessage();
+      UpdateProgressValue();
+      UpdateButtonsState();
+
+      Control.SuspendRepaint();
+      Control.Enabled = false;
       Parent = Control.Parent;
       BringToFront();
-
-      UpdateProgressValue();
-      UpdateProgressStatus();
-      UpdateCancelButton();
+      Control.ResumeRepaint(true);
       Visible = true;
     }
 
     private void HideProgress() {
-      if (InvokeRequired) Invoke((Action)HideProgress);
-      else {
-        control.Enabled = true;
-        Parent = null;
-        Visible = false;
-      }
-    }
-
-    private void progress_StatusChanged(object sender, EventArgs e) {
-      UpdateProgressStatus();
-    }
-
-    private void progress_ProgressValueChanged(object sender, EventArgs e) {
-      UpdateProgressValue();
-    }
-
-    private void Content_ProgressStateChanged(object sender, EventArgs e) {
-      switch (content.ProgressState) {
-        case ProgressState.Finished: HideProgress(); break;
-        case ProgressState.Canceled: HideProgress(); break;
-        case ProgressState.Started: ShowProgress(); break;
-        default: throw new NotSupportedException("The progress state " + content.ProgressState + " is not supported by the ProgressView.");
-      }
-    }
-
-    private void Content_CanBeCanceledChanged(object sender, EventArgs e) {
-      UpdateCancelButton();
-    }
-
-    private void UpdateCancelButton() {
-      cancelButton.Visible = content != null && content.CanBeCanceled;
-      cancelButton.Enabled = content != null && content.CanBeCanceled;
-
-      if (content != null && content.CanBeCanceled) {
-        Height = defaultControlHeight;
-      } else if (content != null && !content.CanBeCanceled) {
-        Height = collapsedControlHeight;
-      }
+      if (Control.InvokeRequired) {
+        Control.Invoke((Action)HideProgress);
+        return;
+      }
+      if (Parent == null) return;
+
+      Visible = false;
+      Control.SuspendRepaint();
+      Control.Enabled = true;
+      Control.ResumeRepaint(true);
+      Parent = null;
+    }
+
+    private void UpdateProgressState() {
+      if (Control.InvokeRequired) {
+        Control.Invoke((Action)UpdateProgressState);
+        return;
+      }
+
+      if (Content.ProgressState != ProgressState.Finished)
+        ShowProgress();
+      else
+        HideProgress();
+    }
+
+    private void UpdateProgressMessage() {
+      if (Control.InvokeRequired) {
+        Control.Invoke((Action)UpdateProgressMessage);
+        return;
+      }
+
+      messageLabel.Text = content.Message;
     }
 
     private void UpdateProgressValue() {
-      // prevent problems with object disposal and invoke as suggested by http://stackoverflow.com/a/18647091
-      if (!IsHandleCreated) return;
       if (InvokeRequired) {
-        try {
-          Invoke((Action)UpdateProgressValue);
-        }
-        catch (InvalidOperationException) {
-          // swallow ObjectDisposedException 
-          // which might occur if the invoke call is executed after or while the control is disposing
-        }
-      } else {
-        if (content != null) {
-          double progressValue = content.ProgressValue;
-          if (progressValue <= 0.0 || progressValue > 1.0) {
-            progressBar.Style = ProgressBarStyle.Marquee;
-          } else {
-            progressBar.Style = ProgressBarStyle.Blocks;
-            progressBar.Value =
-              (int)Math.Round(progressBar.Minimum + progressValue * (progressBar.Maximum - progressBar.Minimum));
-          }
-        }
-      }
-    }
-
-    private void UpdateProgressStatus() {
-      if (InvokeRequired) Invoke((Action)UpdateProgressStatus);
-      else if (content != null)
-        statusLabel.Text = content.Status;
-    }
-
+        Invoke((Action)UpdateProgressValue);
+        return;
+      }
+
+      switch (Content.ProgressMode) {
+        case ProgressMode.Determinate:
+          progressBar.Style = ProgressBarStyle.Continuous;
+          progressBar.Value = (int)Math.Round(progressBar.Minimum + content.ProgressValue * (progressBar.Maximum - progressBar.Minimum));
+          break;
+        case ProgressMode.Indeterminate:
+          progressBar.Style = ProgressBarStyle.Marquee;
+          progressBar.Value = 0;
+          break;
+        default:
+          throw new NotImplementedException($"Invalid Progress Mode: {content.ProgressMode}");
+      }
+    }
+
+    private void UpdateButtonsState() {
+      if (Control.InvokeRequired) {
+        Control.Invoke((Action)UpdateButtonsState);
+        return;
+      }
+
+      stopButton.Visible = Content.CanBeStopped;
+      stopButton.Enabled = Content.CanBeStopped && content.ProgressState == ProgressState.Started;
+
+      cancelButton.Visible = Content.CanBeCanceled;
+      cancelButton.Enabled = Content.CanBeCanceled && content.ProgressState == ProgressState.Started;
+    }
+
+    private void stopButton_Click(object sender, EventArgs e) {
+      Content.Stop();
+    }
     private void cancelButton_Click(object sender, EventArgs e) {
-      content.Cancel();
+      Content.Cancel();
     }
   }
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -27,5 +27,5 @@
     private System.ComponentModel.IContainer components = null;
 
-   
+
     #region Component Designer generated code
 
@@ -36,7 +36,10 @@
     private void InitializeComponent() {
       this.progressBar = new System.Windows.Forms.ProgressBar();
-      this.statusLabel = new System.Windows.Forms.Label();
+      this.messageLabel = new System.Windows.Forms.Label();
+      this.borderPanel = new System.Windows.Forms.Panel();
+      this.panel = new System.Windows.Forms.Panel();
+      this.stopButton = new System.Windows.Forms.Button();
       this.cancelButton = new System.Windows.Forms.Button();
-      this.panel = new System.Windows.Forms.Panel();
+      this.borderPanel.SuspendLayout();
       this.panel.SuspendLayout();
       this.SuspendLayout();
@@ -48,21 +51,58 @@
       this.progressBar.Location = new System.Drawing.Point(3, 3);
       this.progressBar.Name = "progressBar";
-      this.progressBar.Size = new System.Drawing.Size(352, 23);
+      this.progressBar.Size = new System.Drawing.Size(366, 23);
       this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
       this.progressBar.TabIndex = 0;
       // 
-      // statusLabel
+      // messageLabel
       // 
-      this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.messageLabel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.messageLabel.Location = new System.Drawing.Point(0, 0);
+      this.messageLabel.Name = "messageLabel";
+      this.messageLabel.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0);
+      this.messageLabel.Size = new System.Drawing.Size(217, 23);
+      this.messageLabel.TabIndex = 1;
+      this.messageLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // borderPanel
+      // 
+      this.borderPanel.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.statusLabel.Location = new System.Drawing.Point(3, 33);
-      this.statusLabel.Name = "statusLabel";
-      this.statusLabel.Size = new System.Drawing.Size(352, 17);
-      this.statusLabel.TabIndex = 1;
+      this.borderPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.borderPanel.Controls.Add(this.panel);
+      this.borderPanel.Controls.Add(this.progressBar);
+      this.borderPanel.Location = new System.Drawing.Point(0, 0);
+      this.borderPanel.Name = "borderPanel";
+      this.borderPanel.Size = new System.Drawing.Size(374, 62);
+      this.borderPanel.TabIndex = 3;
+      // 
+      // panel
+      // 
+      this.panel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.panel.Controls.Add(this.messageLabel);
+      this.panel.Controls.Add(this.stopButton);
+      this.panel.Controls.Add(this.cancelButton);
+      this.panel.Location = new System.Drawing.Point(3, 32);
+      this.panel.Name = "panel";
+      this.panel.Size = new System.Drawing.Size(367, 23);
+      this.panel.TabIndex = 4;
+      // 
+      // stopButton
+      // 
+      this.stopButton.Dock = System.Windows.Forms.DockStyle.Right;
+      this.stopButton.Location = new System.Drawing.Point(217, 0);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(75, 23);
+      this.stopButton.TabIndex = 3;
+      this.stopButton.Text = "Stop";
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
       // 
       // cancelButton
       // 
-      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.cancelButton.Location = new System.Drawing.Point(280, 53);
+      this.cancelButton.Dock = System.Windows.Forms.DockStyle.Right;
+      this.cancelButton.Location = new System.Drawing.Point(292, 0);
       this.cancelButton.Name = "cancelButton";
       this.cancelButton.Size = new System.Drawing.Size(75, 23);
@@ -72,24 +112,11 @@
       this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
       // 
-      // panel
-      // 
-      this.panel.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.panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-      this.panel.Controls.Add(this.progressBar);
-      this.panel.Controls.Add(this.cancelButton);
-      this.panel.Controls.Add(this.statusLabel);
-      this.panel.Location = new System.Drawing.Point(0, 0);
-      this.panel.Name = "panel";
-      this.panel.Size = new System.Drawing.Size(360, 88);
-      this.panel.TabIndex = 3;
-      // 
       // ProgressView
       // 
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.panel);
+      this.Controls.Add(this.borderPanel);
       this.Name = "ProgressView";
-      this.Size = new System.Drawing.Size(360, 88);
+      this.Size = new System.Drawing.Size(374, 62);
+      this.borderPanel.ResumeLayout(false);
       this.panel.ResumeLayout(false);
       this.ResumeLayout(false);
@@ -100,7 +127,9 @@
 
     private System.Windows.Forms.ProgressBar progressBar;
-    private System.Windows.Forms.Label statusLabel;
+    private System.Windows.Forms.Label messageLabel;
+    private System.Windows.Forms.Panel borderPanel;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.Panel panel;
     private System.Windows.Forms.Button cancelButton;
-    private System.Windows.Forms.Panel panel;
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/Sidebar.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/Sidebar.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/Sidebar.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/Sidebar.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/Sidebar.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/Sidebar.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewContextMenuStrip.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewContextMenuStrip.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewContextMenuStrip.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewContextMenuStrip.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewContextMenuStrip.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewContextMenuStrip.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionTimeDialog.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionTimeDialog.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionTimeDialog.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionTimeDialog.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionTimeDialog.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionTimeDialog.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,5 +23,4 @@
 using System.Collections.Generic;
 using System.ComponentModel;
-using System.Globalization;
 using System.Linq;
 using System.Windows.Forms;
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/InfoBox.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/InfoBox.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/InfoBox.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/InfoBox.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/InfoBox.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/InfoBox.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 16723)
@@ -11,5 +11,5 @@
     <RootNamespace>HeuristicLab.MainForm.WindowsForms</RootNamespace>
     <AssemblyName>HeuristicLab.MainForm.WindowsForms-3.3</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
     <TargetFrameworkProfile>
     </TargetFrameworkProfile>
@@ -151,4 +151,5 @@
     </Compile>
     <Compile Include="Plugin.cs" />
+    <Compile Include="Progress.cs" />
     <Compile Include="Views\AsynchronousContentView.cs">
       <SubType>UserControl</SubType>
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DocumentForm.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DocumentForm.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DocumentForm.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DocumentForm.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DocumentForm.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DocumentForm.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -61,5 +61,5 @@
       set {
         if (InvokeRequired) {
-          Action<string> action = delegate(string s) { this.Title = s; };
+          Action<string> action = delegate (string s) { this.Title = s; };
           Invoke(action, value);
         } else
@@ -72,5 +72,5 @@
       set {
         if (InvokeRequired) {
-          Action<Cursor> action = delegate(Cursor c) { this.Cursor = c; };
+          Action<Cursor> action = delegate (Cursor c) { this.Cursor = c; };
           Invoke(action, value);
         } else
@@ -95,5 +95,5 @@
         if (this.activeView != value) {
           if (InvokeRequired) {
-            Action<IView> action = delegate(IView activeView) { this.ActiveView = activeView; };
+            Action<IView> action = delegate (IView activeView) { this.ActiveView = activeView; };
             Invoke(action, value);
           } else {
@@ -230,5 +230,5 @@
     }
 
-    public IContentView ShowContent<T>(T content, bool reuseExistingView, IEqualityComparer<T> comparer = null) where T : class,IContent {
+    public IContentView ShowContent<T>(T content, bool reuseExistingView, IEqualityComparer<T> comparer = null) where T : class, IContent {
       if (content == null) throw new ArgumentNullException("Content cannot be null.");
       if (!reuseExistingView) return ShowContent(content);
@@ -353,8 +353,8 @@
     /// Adds a <see cref="ProgressView"/> to the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public IProgress AddOperationProgressToContent(IContent content, string progressMessage, bool addToObjectGraphObjects = true) {
+    internal void AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects) {
       if (InvokeRequired) {
-        IProgress result = (IProgress)Invoke((Func<IContent, string, bool, IProgress>)AddOperationProgressToContent, content, progressMessage, addToObjectGraphObjects);
-        return result;
+        Invoke((Action<IContent, IProgress, bool>)AddProgressToContent, content, progress, addToObjectGraphObjects);
+        return;
       }
       if (contentProgressLookup.ContainsKey(content))
@@ -371,5 +371,4 @@
         contentViews = contentViews.Where(v => v.Content == content);
 
-      var progress = new Progress(progressMessage, ProgressState.Started);
       foreach (var contentView in contentViews) {
         progressViews.Add(new ProgressView(contentView, progress));
@@ -377,5 +376,4 @@
 
       contentProgressLookup[content] = progress;
-      return progress;
     }
 
@@ -383,13 +381,7 @@
     /// Adds a <see cref="ProgressView"/> to the specified view.
     /// </summary>
-    public IProgress AddOperationProgressToView(Control control, string progressMessage) {
-      var progress = new Progress(progressMessage, ProgressState.Started);
-      AddOperationProgressToView(control, progress);
-      return progress;
-    }
-
-    public void AddOperationProgressToView(Control control, IProgress progress) {
+    internal void AddProgressToControl(Control control, IProgress progress) {
       if (InvokeRequired) {
-        Invoke((Action<Control, IProgress>)AddOperationProgressToView, control, progress);
+        Invoke((Action<Control, IProgress>)AddProgressToControl, control, progress);
         return;
       }
@@ -413,7 +405,7 @@
     /// Removes an existing <see cref="ProgressView"/> from the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void RemoveOperationProgressFromContent(IContent content, bool finishProgress = true) {
+    internal void RemoveProgressFromContent(IContent content, bool finishProgress) {
       if (InvokeRequired) {
-        Invoke((Action<IContent, bool>)RemoveOperationProgressFromContent, content, finishProgress);
+        Invoke((Action<IContent, bool>)RemoveProgressFromContent, content, finishProgress);
         return;
       }
@@ -429,5 +421,4 @@
       }
       contentProgressLookup.Remove(content);
-
     }
 
@@ -435,7 +426,7 @@
     /// Removes an existing <see cref="ProgressView"/> from the specified view.
     /// </summary>
-    public void RemoveOperationProgressFromView(Control control, bool finishProgress = true) {
+    internal void RemoveProgressFromControl(Control control, bool finishProgress) {
       if (InvokeRequired) {
-        Invoke((Action<Control, bool>)RemoveOperationProgressFromView, control, finishProgress);
+        Invoke((Action<Control, bool>)RemoveProgressFromControl, control, finishProgress);
         return;
       }
@@ -560,6 +551,5 @@
       try {
         ((IActionUserInterfaceItem)item.Tag).Execute();
-      }
-      catch (Exception ex) {
+      } catch (Exception ex) {
         ErrorHandling.ShowErrorDialog((Control)MainFormManager.MainForm, ex);
       }
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MultipleDocumentMainForm.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MultipleDocumentMainForm.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MultipleDocumentMainForm.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MultipleDocumentMainForm.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MultipleDocumentMainForm.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MultipleDocumentMainForm.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/SingleDocumentMainForm.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/SingleDocumentMainForm.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/SingleDocumentMainForm.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/SingleDocumentMainForm.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/SingleDocumentMainForm.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/SingleDocumentMainForm.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MenuItem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MenuItem.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/MenuItem.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Plugin.cs.frame
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Plugin.cs.frame	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Plugin.cs.frame	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 16723)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 16723)
@@ -0,0 +1,266 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.Windows.Forms;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm {
+  public class Progress : IProgress {
+    private ProgressState progressState;
+    public ProgressState ProgressState {
+      get { return progressState; }
+      private set {
+        if (progressState != value) {
+          progressState = value;
+          OnProgressStateChanged();
+        }
+      }
+    }
+
+    private string message;
+    public string Message {
+      get { return message; }
+      set {
+        if (message != value) {
+          message = value;
+          OnMessageChanged();
+        }
+      }
+    }
+
+    private ProgressMode progressMode;
+    public ProgressMode ProgressMode {
+      get { return progressMode; }
+      set {
+        if (progressMode != value) {
+          progressMode = value;
+          OnProgressBarModeChanged();
+        }
+      }
+    }
+
+    private double progressValue;
+    public double ProgressValue {
+      get { return progressValue; }
+      set {
+        if (progressMode == ProgressMode.Indeterminate)
+          throw new InvalidOperationException("Cannot set ProgressValue while ProgressBar is in Indeterminate-Mode");
+        if (progressValue != value) {
+          progressValue = Math.Max(Math.Min(value, 1.0), 0.0);
+          OnProgressChanged();
+        }
+      }
+    }
+
+    private bool canBeStopped;
+    public bool CanBeStopped {
+      get { return canBeStopped; }
+      set {
+        if (canBeStopped != value) {
+          canBeStopped = value;
+          OnCanBeStoppedChanged();
+        }
+      }
+    }
+
+    private bool canBeCanceled;
+    public bool CanBeCanceled {
+      get { return canBeCanceled; }
+      set {
+        if (canBeCanceled != value) {
+          canBeCanceled = value;
+          OnCanBeCanceledChanged();
+        }
+      }
+    }
+
+    public Progress() {
+      progressState = ProgressState.Finished;
+      canBeStopped = false;
+      canBeCanceled = false;
+      progressMode = ProgressMode.Indeterminate;
+      progressValue = 0.0;
+    }
+
+    public void Start(string message, ProgressMode mode = ProgressMode.Determinate) {
+      ProgressState = ProgressState.Started;
+      ProgressMode = mode;
+      if (mode == ProgressMode.Determinate)
+        ProgressValue = 0.0;
+      Message = message;
+    }
+
+    public void Finish() {
+      if (ProgressMode == ProgressMode.Determinate && ProgressValue != 1.0)
+        ProgressValue = 1.0;
+      ProgressState = ProgressState.Finished;
+    }
+
+    public void Stop() {
+      if (canBeStopped) {
+        ProgressState = ProgressState.StopRequested;
+        OnStopRequested();
+      } else throw new NotSupportedException("This progress cannot be stopped.");
+    }
+    public void Cancel() {
+      if (canBeCanceled) {
+        ProgressState = ProgressState.CancelRequested;
+        OnCancelRequested();
+      } else throw new NotSupportedException("This progress cannot be canceled.");
+    }
+
+    #region Show and Hide Progress
+    /// <summary>
+    /// Shows a started Progress on all Views of the specified content.
+    /// </summary>
+    public static IProgress Show(IContent content, string progressMessage, ProgressMode mode = ProgressMode.Determinate, Action stopRequestHandler = null, Action cancelRequestHandler = null, bool addToObjectGraphObjects = true) {
+      var progress = CreateAndStartProgress(progressMessage, mode, stopRequestHandler, cancelRequestHandler);
+      Show(content, progress, addToObjectGraphObjects);
+      return progress;
+    }
+
+    /// <summary>
+    /// Shows a started Progress on the specified view.
+    /// </summary>
+    public static IProgress Show(IView view, string progressMessage, ProgressMode mode = ProgressMode.Determinate, Action stopRequestHandler = null, Action cancelRequestHandler = null) {
+      var progress = CreateAndStartProgress(progressMessage, mode, stopRequestHandler, cancelRequestHandler);
+      Show(view, progress);
+      return progress;
+    }
+    /// <summary>
+    /// Shows a started Progress on the specified control.
+    /// </summary>
+    /// <remarks>For backwards compatibility. Use Progress.Show(IView, ...) if possible.</remarks>
+    public static IProgress ShowOnControl(Control control, string progressMessage, ProgressMode mode = ProgressMode.Determinate, Action stopRequestHandler = null, Action cancelRequestHandler = null) {
+      var progress = CreateAndStartProgress(progressMessage, mode, stopRequestHandler, cancelRequestHandler);
+      ShowOnControl(control, progress);
+      return progress;
+    }
+
+    private static IProgress CreateAndStartProgress(string progressMessage, ProgressMode mode, Action stopRequestHandler, Action cancelRequestHandler) {
+      var progress = new Progress();
+      if (stopRequestHandler != null) {
+        progress.CanBeStopped = true;
+        progress.StopRequested += (s, a) => stopRequestHandler();
+      }
+      if (cancelRequestHandler != null) {
+        progress.CanBeCanceled = true;
+        progress.CancelRequested += (s, a) => cancelRequestHandler();
+      }
+      progress.Start(progressMessage, mode);
+      return progress;
+    }
+
+    /// <summary>
+    /// Shows an existing progress on all Views of the specified content.
+    /// </summary>
+    public static IProgress Show(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToContent(content, progress, addToObjectGraphObjects);
+      return progress;
+    }
+    /// <summary>
+    /// Shows an existing progress on the specified View.
+    /// </summary>
+    public static IProgress Show(IView view, IProgress progress) {
+      return ShowOnControl((Control)view, progress);
+    }
+    /// <summary>
+    /// Shows an existing progress on the specified control.
+    /// </summary>
+    /// <remarks>For backwards compatibility. Use Progress.Show(IView, ...) if possible.</remarks>
+    public static IProgress ShowOnControl(Control control, IProgress progress) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToControl(control, progress);
+      return progress;
+    }
+
+    /// <summary>
+    /// Hides the Progress from all Views of the specified content.
+    /// </summary>
+    public static void Hide(IContent content, bool finishProgress = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromContent(content, finishProgress);
+    }
+    /// <summary>
+    /// Hides the Progress from the specified view.
+    /// </summary>
+    public static void Hide(IView view, bool finishProgress = true) {
+      HideFromControl((Control)view, finishProgress);
+    }
+    /// <summary>
+    /// Hides the Progress from the specified control.
+    /// </summary>
+    /// <remarks>For backwards compatibility. Use Progress.Hide(IView) if possible.</remarks>
+    public static void HideFromControl(Control control, bool finishProgress = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromControl(control, finishProgress);
+    }
+    #endregion
+
+    #region Event Handler
+    public event EventHandler ProgressStateChanged;
+    private void OnProgressStateChanged() {
+      var handler = ProgressStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler MessageChanged;
+    private void OnMessageChanged() {
+      var handler = MessageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ProgressBarModeChanged;
+    private void OnProgressBarModeChanged() {
+      var handler = ProgressBarModeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ProgressValueChanged;
+    private void OnProgressChanged() {
+      var handler = ProgressValueChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CanBeStoppedChanged;
+    private void OnCanBeStoppedChanged() {
+      var handler = CanBeStoppedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CanBeCanceledChanged;
+    private void OnCanBeCanceledChanged() {
+      var handler = CanBeCanceledChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler StopRequested;
+    private void OnStopRequested() {
+      var handler = StopRequested;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CancelRequested;
+    private void OnCancelRequested() {
+      var handler = CancelRequested;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.cs.frame	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.cs.frame	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/ToolBarItem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/ToolBarItem.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/ToolBarItem.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/AsynchronousContentView.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/AsynchronousContentView.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/AsynchronousContentView.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/AsynchronousContentView.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/AsynchronousContentView.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/AsynchronousContentView.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/ContentView.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/ContentView.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/ContentView.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/ContentView.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/ContentView.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/ContentView.cs	(revision 16723)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/View.Designer.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/View.Designer.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/View.Designer.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/View.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/View.cs	(revision 16692)
+++ branches/2521_ProblemRefactoring/HeuristicLab.MainForm.WindowsForms/3.3/Views/View.cs	(revision 16723)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
