Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Views/OKBExperimentView.cs @ 5304

Last change on this file since 5304 was 4943, checked in by swagner, 14 years ago

Worked on OKB (#1174)

File size: 11.2 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 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.Linq;
24using System.Windows.Forms;
25using HeuristicLab.Common;
26using HeuristicLab.Core;
27using HeuristicLab.Core.Views;
28using HeuristicLab.MainForm;
29using HeuristicLab.MainForm.WindowsForms;
30using HeuristicLab.PluginInfrastructure;
31
32namespace HeuristicLab.Clients.OKB {
33  [View("OKBItem View")]
34  [Content(typeof(OKBExperiment), true)]
35  public sealed partial class OKBExperimentView : NamedItemView {
36    public new OKBExperiment Content {
37      get { return (OKBExperiment)base.Content; }
38      set { base.Content = value; }
39    }
40
41    public OKBExperimentView() {
42      InitializeComponent();
43    }
44
45    protected override void OnInitialized(System.EventArgs e) {
46      base.OnInitialized(e);
47      OKBClient.Instance.Refreshing += new EventHandler(OKBClient_Refreshing);
48      OKBClient.Instance.Refreshed += new EventHandler(OKBClient_Refreshed);
49      PopulateComboBoxes();
50    }
51
52    protected override void DeregisterContentEvents() {
53      Content.AlgorithmIdChanged -= new EventHandler(Content_AlgorithmIdChanged);
54      Content.ProblemIdChanged -= new EventHandler(Content_ProblemIdChanged);
55      Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
56      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
57      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
58      Content.Prepared -= new EventHandler(Content_Prepared);
59      Content.Started -= new EventHandler(Content_Started);
60      Content.Paused -= new EventHandler(Content_Paused);
61      Content.Stopped -= new EventHandler(Content_Stopped);
62      base.DeregisterContentEvents();
63    }
64    protected override void RegisterContentEvents() {
65      base.RegisterContentEvents();
66      Content.AlgorithmIdChanged += new EventHandler(Content_AlgorithmIdChanged);
67      Content.ProblemIdChanged += new EventHandler(Content_ProblemIdChanged);
68      Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
69      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
70      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
71      Content.Prepared += new EventHandler(Content_Prepared);
72      Content.Started += new EventHandler(Content_Started);
73      Content.Paused += new EventHandler(Content_Paused);
74      Content.Stopped += new EventHandler(Content_Stopped);
75    }
76
77    protected override void OnContentChanged() {
78      base.OnContentChanged();
79      if (Content == null) {
80        algorithmComboBox.SelectedIndex = -1;
81        problemComboBox.SelectedIndex = -1;
82        problemParametersViewHost.Content = null;
83        algorithmParametersViewHost.Content = null;
84        resultsViewHost.Content = null;
85        runsViewHost.Content = null;
86        executionTimeTextBox.Text = "-";
87      } else {
88        algorithmComboBox.SelectedItem = OKBClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
89        problemComboBox.SelectedItem = OKBClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
90        problemParametersViewHost.Content = Content.ProblemParameters;
91        algorithmParametersViewHost.Content = Content.AlgorithmParameters;
92        resultsViewHost.Content = Content.Results;
93        runsViewHost.Content = Content.Runs;
94        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
95      }
96    }
97    protected override void SetEnabledStateOfControls() {
98      base.SetEnabledStateOfControls();
99      algorithmComboBox.Enabled = (Content != null) && !ReadOnly && !Locked && (algorithmComboBox.Items.Count > 0);
100      problemComboBox.Enabled = (Content != null) && !ReadOnly && !Locked && (problemComboBox.Items.Count > 0);
101      tabControl.Enabled = Content != null;
102      executionTimeTextBox.Enabled = Content != null;
103      SetEnabledStateOfExecutableButtons();
104    }
105
106    private void PopulateComboBoxes() {
107      algorithmComboBox.DataSource = null;
108      problemComboBox.DataSource = null;
109      Platform platform = OKBClient.Instance.Platforms.FirstOrDefault(x => x.Name == "HeuristicLab 3.3");
110      if (platform != null) {
111        algorithmComboBox.DataSource = OKBClient.Instance.Algorithms.Where(x => x.PlatformId == platform.Id).ToList();
112        algorithmComboBox.DisplayMember = "Name";
113        problemComboBox.DataSource = OKBClient.Instance.Problems.Where(x => x.PlatformId == platform.Id).ToList();
114        problemComboBox.DisplayMember = "Name";
115      }
116    }
117
118    protected override void OnClosed(FormClosedEventArgs e) {
119      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) Content.Stop();
120      OKBClient.Instance.Refreshing -= new EventHandler(OKBClient_Refreshing);
121      OKBClient.Instance.Refreshed -= new EventHandler(OKBClient_Refreshed);
122      base.OnClosed(e);
123    }
124
125    private void OKBClient_Refreshing(object sender, EventArgs e) {
126      if (InvokeRequired) {
127        Invoke(new EventHandler(OKBClient_Refreshing), sender, e);
128      } else {
129        Cursor = Cursors.AppStarting;
130        algorithmComboBox.Enabled = problemComboBox.Enabled = tabControl.Enabled = prepareButton.Enabled = startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = executionTimeTextBox.Enabled = false;
131      }
132    }
133    private void OKBClient_Refreshed(object sender, EventArgs e) {
134      if (InvokeRequired) {
135        Invoke(new EventHandler(OKBClient_Refreshed), sender, e);
136      } else {
137        PopulateComboBoxes();
138        SetEnabledStateOfControls();
139        Cursor = Cursors.Default;
140      }
141    }
142
143    #region Content Events
144    private void Content_AlgorithmIdChanged(object sender, EventArgs e) {
145      if (InvokeRequired)
146        Invoke(new EventHandler(Content_AlgorithmIdChanged), sender, e);
147      else {
148        algorithmComboBox.SelectedItem = OKBClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
149        algorithmParametersViewHost.Content = Content.AlgorithmParameters;
150        resultsViewHost.Content = Content.Results;
151        runsViewHost.Content = Content.Runs;
152        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
153        SetEnabledStateOfExecutableButtons();
154      }
155    }
156    private void Content_ProblemIdChanged(object sender, EventArgs e) {
157      if (InvokeRequired)
158        Invoke(new EventHandler(Content_ProblemIdChanged), sender, e);
159      else {
160        problemComboBox.SelectedItem = OKBClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
161        problemParametersViewHost.Content = Content.ProblemParameters;
162        SetEnabledStateOfExecutableButtons();
163      }
164    }
165    private void Content_ExceptionOccurred(object sender, EventArgs<Exception> e) {
166      if (InvokeRequired)
167        Invoke(new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred), sender, e);
168      else
169        ErrorHandling.ShowErrorDialog(this, e.Value);
170    }
171    private void Content_ExecutionStateChanged(object sender, EventArgs e) {
172      if (InvokeRequired)
173        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
174      else
175        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = prepareButton.Enabled = false;
176    }
177    private void Content_ExecutionTimeChanged(object sender, EventArgs e) {
178      if (InvokeRequired)
179        Invoke(new EventHandler(Content_ExecutionTimeChanged), sender, e);
180      else
181        executionTimeTextBox.Text = Content == null ? "-" : Content.ExecutionTime.ToString();
182    }
183    private void Content_Prepared(object sender, EventArgs e) {
184      if (InvokeRequired)
185        Invoke(new EventHandler(Content_Prepared), sender, e);
186      else {
187        resultsViewHost.Content = Content.Results;
188        ReadOnly = Locked = false;
189        SetEnabledStateOfExecutableButtons();
190      }
191    }
192    private void Content_Started(object sender, EventArgs e) {
193      if (InvokeRequired)
194        Invoke(new EventHandler(Content_Started), sender, e);
195      else {
196        ReadOnly = Locked = true;
197        SetEnabledStateOfExecutableButtons();
198      }
199    }
200    private void Content_Paused(object sender, EventArgs e) {
201      if (InvokeRequired)
202        Invoke(new EventHandler(Content_Paused), sender, e);
203      else {
204        ReadOnly = Locked = false;
205        SetEnabledStateOfExecutableButtons();
206      }
207    }
208    private void Content_Stopped(object sender, EventArgs e) {
209      if (InvokeRequired)
210        Invoke(new EventHandler(Content_Stopped), sender, e);
211      else {
212        ReadOnly = Locked = false;
213        SetEnabledStateOfExecutableButtons();
214      }
215    }
216    #endregion
217
218    #region Control Events
219    private void refreshButton_Click(object sender, System.EventArgs e) {
220      OKBClient.Instance.Refresh();
221    }
222    private void algorithmComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
223      Algorithm algorithm = algorithmComboBox.SelectedValue as Algorithm;
224      if (Content != null) Content.Load(algorithm);
225    }
226    private void problemComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
227      Problem problem = problemComboBox.SelectedValue as Problem;
228      if (Content != null) Content.Load(problem);
229    }
230    private void prepareButton_Click(object sender, EventArgs e) {
231      Content.Prepare(false);
232    }
233    private void startButton_Click(object sender, EventArgs e) {
234      Content.Start();
235    }
236    private void pauseButton_Click(object sender, EventArgs e) {
237      Content.Pause();
238    }
239    private void stopButton_Click(object sender, EventArgs e) {
240      Content.Stop();
241    }
242    #endregion
243
244    #region Helpers
245    private void SetEnabledStateOfExecutableButtons() {
246      if ((Content == null) || (Content.AlgorithmId == 0) || (Content.ProblemId == 0)) {
247        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = prepareButton.Enabled = false;
248      } else {
249        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
250        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
251        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
252        prepareButton.Enabled = Content.ExecutionState != ExecutionState.Started;
253      }
254    }
255    #endregion
256  }
257}
Note: See TracBrowser for help on using the repository browser.