Changeset 9933 for stable/HeuristicLab.MainForm.WindowsForms/3.3/MainForms
- Timestamp:
- 09/03/13 15:55:36 (11 years ago)
- Location:
- stable
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 9849,9851,9865,9867-9868,9893-9896,9900-9901,9905,9907
- Property svn:mergeinfo changed
-
stable/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
r9931 r9933 345 345 #endregion 346 346 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 347 451 #region create menu and toolbar 348 452 private void CreateGUI() {
Note: See TracChangeset
for help on using the changeset viewer.