Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OaaS/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs @ 13847

Last change on this file since 13847 was 9363, checked in by spimming, 12 years ago

#1888:

  • Merged revisions from trunk
File size: 5.4 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2012 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 System.Threading.Tasks;
24using System.Windows.Forms;
25using HeuristicLab.MainForm;
26using HeuristicLab.MainForm.WindowsForms;
27using HeuristicLab.PluginInfrastructure;
28
29namespace HeuristicLab.Clients.Hive.Views {
30  [View("OptimizerHiveTask View")]
31  [Content(typeof(OptimizerHiveTask), true)]
32  public partial class OptimizerHiveTaskView : HiveTaskView {
33    private Progress progress;
34    private ProgressView progressView;
35
36    public new OptimizerHiveTask Content {
37      get { return (OptimizerHiveTask)base.Content; }
38      set {
39        if (base.Content != value) {
40          base.Content = value;
41        }
42      }
43    }
44
45    public OptimizerHiveTaskView() {
46      InitializeComponent();
47      progress = new Progress() {
48        CanBeCanceled = false,
49        ProgressState = ProgressState.Finished
50      };
51    }
52
53    protected override void Job_ItemChanged(object sender, EventArgs e) {
54      if (Content != null && Content.Task != null && Content.ItemTask.Item != null) {
55        Content.ExecuteReadActionOnItemTask(new Action(delegate() {
56          runCollectionViewHost.Content = Content.ItemTask.Item.Runs;
57        }));
58      } else {
59        runCollectionViewHost.Content = null;
60      }
61    }
62    #region Content Events
63    protected override void RegisterContentEvents() {
64      base.RegisterContentEvents();
65      Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
66      progressView = new ProgressView(this, progress);
67    }
68
69    protected override void DeregisterContentEvents() {
70      Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
71      if (progressView != null) {
72        progressView.Content = null;
73        progressView.Dispose();
74        progressView = null;
75      }
76      base.DeregisterContentEvents();
77    }
78
79    protected virtual void Content_IsControllableChanged(object sender, EventArgs e) {
80      SetEnabledStateOfControls();
81    }
82
83    #endregion
84
85    #region Child Control Events
86    private void restartButton_Click(object sender, EventArgs e) {
87      var task = System.Threading.Tasks.Task.Factory.StartNew(ResumeTaskAsync);
88      task.ContinueWith((t) => {
89        progress.Finish();
90        ErrorHandling.ShowErrorDialog(this, "An error occured while resuming the task.", t.Exception);
91      }, TaskContinuationOptions.OnlyOnFaulted);
92    }
93
94    private void pauseButton_Click(object sender, EventArgs e) {
95      var task = System.Threading.Tasks.Task.Factory.StartNew(PauseTaskAsync);
96      task.ContinueWith((t) => {
97        progress.Finish();
98        ErrorHandling.ShowErrorDialog(this, "An error occured while pausing the task.", t.Exception);
99      }, TaskContinuationOptions.OnlyOnFaulted);
100    }
101
102    private void stopButton_Click(object sender, EventArgs e) {
103      var task = System.Threading.Tasks.Task.Factory.StartNew(StopTaskAsync);
104      task.ContinueWith((t) => {
105        progress.Finish();
106        ErrorHandling.ShowErrorDialog(this, "An error occured while stopping the task.", t.Exception);
107      }, TaskContinuationOptions.OnlyOnFaulted);
108    }
109    #endregion
110
111    private void PauseTaskAsync() {
112      progress.Status = "Pausing task. Please be patient for the command to take effect.";
113      progress.ProgressState = ProgressState.Started;
114      Content.Pause();
115      progress.Finish();
116    }
117
118    private void StopTaskAsync() {
119      progress.Status = "Stopping task. Please be patient for the command to take effect.";
120      progress.ProgressState = ProgressState.Started;
121      Content.Stop();
122      progress.Finish();
123    }
124
125    private void ResumeTaskAsync() {
126      progress.Status = "Resuming task. Please be patient for the command to take effect.";
127      progress.ProgressState = ProgressState.Started;
128      Content.Restart();
129      progress.Finish();
130    }
131
132    protected override void SetEnabledStateOfControls() {
133      base.SetEnabledStateOfControls();
134
135      this.restartButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Paused || Content.Task.State == TaskState.Failed || Content.Task.State == TaskState.Aborted);
136      this.pauseButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && Content.Task.State == TaskState.Calculating;
137      this.stopButton.Enabled = Content != null && Content.IsControllable && !Content.Task.Command.HasValue && (Content.Task.State == TaskState.Calculating || Content.Task.State == TaskState.Waiting || Content.Task.State == TaskState.Paused);
138    }
139  }
140}
Note: See TracBrowser for help on using the repository browser.