source: trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs @ 9849

Last change on this file since 9849 was 9849, checked in by jkarder, 6 years ago

#1042: ProgressView overlays are now shown to indicate save operations

File size: 3.8 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using HeuristicLab.Common;
24
25namespace HeuristicLab.MainForm {
26  public class Progress : IProgress {
27    private string status;
28    public string Status {
29      get { return status; }
30      set {
31        if (status != value) {
32          status = value;
33          OnStatusChanged();
34        }
35      }
36    }
37
38    private double progressValue;
39    public double ProgressValue {
40      get { return progressValue; }
41      set {
42        if (progressValue != value) {
43          progressValue = value;
44          OnProgressChanged();
45        }
46      }
47    }
48
49    private ProgressState progressState;
50    public ProgressState ProgressState {
51      get { return progressState; }
52      set {
53        if (progressState != value) {
54          progressState = value;
55          OnProgressStateChanged();
56        }
57      }
58    }
59
60    private bool canBeCanceled;
61    public bool CanBeCanceled {
62      get { return canBeCanceled; }
63      set {
64        if (canBeCanceled != value) {
65          canBeCanceled = value;
66          OnCanBeCanceledChanged();
67        }
68      }
69    }
70
71    public Progress() {
72      progressState = ProgressState.Started;
73    }
74    public Progress(string status)
75      : this() {
76      this.status = status;
77    }
78    public Progress(string status, double progressValue)
79      : this(status) {
80      this.progressValue = progressValue;
81    }
82
83    public void Cancel(int timeoutMs) {
84      if (canBeCanceled)
85        OnCancelRequested(timeoutMs);
86    }
87
88    public void Finish() {
89      if (ProgressValue != 1.0) ProgressValue = 1.0;
90      ProgressState = ProgressState.Finished;
91    }
92
93    #region Event Handler
94    public event EventHandler StatusChanged;
95    private void OnStatusChanged() {
96      var handler = StatusChanged;
97      try {
98        if (handler != null) handler(this, EventArgs.Empty);
99      } catch { }
100    }
101
102    public event EventHandler ProgressValueChanged;
103    private void OnProgressChanged() {
104      var handler = ProgressValueChanged;
105      try {
106        if (handler != null) handler(this, EventArgs.Empty);
107      } catch { }
108    }
109
110    public event EventHandler ProgressStateChanged;
111    private void OnProgressStateChanged() {
112      var handler = ProgressStateChanged;
113      try {
114        if (handler != null) handler(this, EventArgs.Empty);
115      } catch { }
116    }
117
118    public event EventHandler CanBeCanceledChanged;
119    private void OnCanBeCanceledChanged() {
120      var handler = CanBeCanceledChanged;
121      try {
122        if (handler != null) handler(this, EventArgs.Empty);
123      } catch { }
124    }
125
126    public event EventHandler<EventArgs<int>> CancelRequested;
127    private void OnCancelRequested(int timeoutMs) {
128      var handler = CancelRequested;
129      try {
130        if (handler == null) throw new NotSupportedException("Cancel request was ignored.");
131        else handler(this, new EventArgs<int>(timeoutMs));
132      } catch { }
133    }
134    #endregion
135  }
136}
Note: See TracBrowser for help on using the repository browser.