Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/03/13 15:55:36 (11 years ago)
Author:
ascheibe
Message:

#1042 merged r9849, r9851, r9865, r9867, r9868, r9893, r9894, r9895, r9896, r9900, r9901, r9905, r9907 into stable branch

Location:
stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs

    r9931 r9933  
    345345    #endregion
    346346
     347    #region progress views
     348    private readonly Dictionary<IContent, IProgress> contentProgressLookup = new Dictionary<IContent, IProgress>();
     349    private readonly Dictionary<Control, IProgress> viewProgressLookup = new Dictionary<Control, IProgress>();
     350    private readonly List<ProgressView> progressViews = new List<ProgressView>();
     351
     352    /// <summary>
     353    /// Adds a <see cref="ProgressView"/> to the <see cref="ContentView"/>s showing the specified content.
     354    /// </summary>
     355    public IProgress AddOperationProgressToContent(IContent content, string progressMessage, bool addToObjectGraphObjects = true) {
     356      if (InvokeRequired) {
     357        IProgress result = (IProgress)Invoke((Func<IContent, string, bool, IProgress>)AddOperationProgressToContent, content, progressMessage, addToObjectGraphObjects);
     358        return result;
     359      }
     360      if (contentProgressLookup.ContainsKey(content))
     361        throw new ArgumentException("A progress is already registered for the specified content.", "content");
     362
     363      var contentViews = views.Keys.OfType<ContentView>();
     364      if (!contentViews.Any(v => v.Content == content))
     365        throw new ArgumentException("The content is not displayed in a top-level view", "content");
     366
     367      if (addToObjectGraphObjects) {
     368        var containedObjects = content.GetObjectGraphObjects();
     369        contentViews = contentViews.Where(v => containedObjects.Contains(v.Content));
     370      } else
     371        contentViews = contentViews.Where(v => v.Content == content);
     372
     373      var progress = new Progress(progressMessage, ProgressState.Started);
     374      foreach (var contentView in contentViews) {
     375        progressViews.Add(new ProgressView(contentView, progress));
     376      }
     377
     378      contentProgressLookup[content] = progress;
     379      return progress;
     380    }
     381
     382    /// <summary>
     383    /// Adds a <see cref="ProgressView"/> to the specified view.
     384    /// </summary>
     385    public IProgress AddOperationProgressToView(Control control, string progressMessage) {
     386      var progress = new Progress(progressMessage, ProgressState.Started);
     387      AddOperationProgressToView(control, progress);
     388      return progress;
     389    }
     390
     391    public void AddOperationProgressToView(Control control, IProgress progress) {
     392      if (InvokeRequired) {
     393        Invoke((Action<Control, IProgress>)AddOperationProgressToView, control, progress);
     394        return;
     395      }
     396      if (control == null) throw new ArgumentNullException("control", "The view must not be null.");
     397      if (progress == null) throw new ArgumentNullException("progress", "The progress must not be null.");
     398
     399      IProgress oldProgress;
     400      if (viewProgressLookup.TryGetValue(control, out oldProgress)) {
     401        foreach (var progressView in progressViews.Where(v => v.Content == oldProgress).ToList()) {
     402          progressView.Dispose();
     403          progressViews.Remove(progressView);
     404        }
     405        viewProgressLookup.Remove(control);
     406      }
     407
     408      progressViews.Add(new ProgressView(control, progress));
     409      viewProgressLookup[control] = progress;
     410    }
     411
     412    /// <summary>
     413    /// Removes an existing <see cref="ProgressView"/> from the <see cref="ContentView"/>s showing the specified content.
     414    /// </summary>
     415    public void RemoveOperationProgressFromContent(IContent content, bool finishProgress = true) {
     416      if (InvokeRequired) {
     417        Invoke((Action<IContent, bool>)RemoveOperationProgressFromContent, content, finishProgress);
     418        return;
     419      }
     420
     421      IProgress progress;
     422      if (!contentProgressLookup.TryGetValue(content, out progress))
     423        throw new ArgumentException("No progress is registered for the specified content.", "content");
     424
     425      if (finishProgress) progress.Finish();
     426      foreach (var progressView in progressViews.Where(v => v.Content == progress).ToList()) {
     427        progressView.Dispose();
     428        progressViews.Remove(progressView);
     429      }
     430      contentProgressLookup.Remove(content);
     431
     432    }
     433
     434    /// <summary>
     435    /// Removes an existing <see cref="ProgressView"/> from the specified view.
     436    /// </summary>
     437    public void RemoveOperationProgressFromView(Control control, bool finishProgress = true) {
     438      IProgress progress;
     439      if (!viewProgressLookup.TryGetValue(control, out progress))
     440        throw new ArgumentException("No progress is registered for the specified control.", "control");
     441
     442      if (finishProgress) progress.Finish();
     443      foreach (var progressView in progressViews.Where(v => v.Content == progress).ToList()) {
     444        progressView.Dispose();
     445        progressViews.Remove(progressView);
     446      }
     447      viewProgressLookup.Remove(control);
     448    }
     449    #endregion
     450
    347451    #region create menu and toolbar
    348452    private void CreateGUI() {
Note: See TracChangeset for help on using the changeset viewer.