1 | using System;
|
---|
2 | using System.Collections.Generic;
|
---|
3 | using System.ComponentModel;
|
---|
4 | using System.Linq;
|
---|
5 | using System.Data;
|
---|
6 | using System.Drawing;
|
---|
7 | using System.Text;
|
---|
8 | using System.Windows.Forms;
|
---|
9 | using HeuristicLab.Core.Views;
|
---|
10 | using HeuristicLab.OKB.Client;
|
---|
11 | using HeuristicLab.Common;
|
---|
12 | using HeuristicLab.Core;
|
---|
13 | using HeuristicLab.PluginInfrastructure;
|
---|
14 | using System.Threading;
|
---|
15 |
|
---|
16 | namespace HeuristicLab.OKB.AlgorithmHost {
|
---|
17 |
|
---|
18 | [MainForm.View("ParameterizedNamedItemContainer View")]
|
---|
19 | [MainForm.Content(typeof(ParameterizedNamedItemContainer), true)]
|
---|
20 | public partial class ParameterizedNamedItemContainerView : ItemView {
|
---|
21 |
|
---|
22 | private Mapping mapping;
|
---|
23 |
|
---|
24 | public new ParameterizedNamedItemContainer Content {
|
---|
25 | get { return (ParameterizedNamedItemContainer)base.Content; }
|
---|
26 | set { base.Content = value; }
|
---|
27 | }
|
---|
28 |
|
---|
29 | public ParameterizedNamedItemContainerView() {
|
---|
30 | mapping = new Mapping();
|
---|
31 | InitializeComponent();
|
---|
32 | InitializeParameterList();
|
---|
33 | }
|
---|
34 |
|
---|
35 | public void InitializeParameterList() {
|
---|
36 | backgroundWorker.RunWorkerAsync();
|
---|
37 | }
|
---|
38 |
|
---|
39 | protected override void RegisterContentEvents() {
|
---|
40 | base.RegisterContentEvents();
|
---|
41 | Content.ItemChanged += new EventHandler(Content_ItemChanged);
|
---|
42 | }
|
---|
43 |
|
---|
44 |
|
---|
45 | protected override void DeregisterContentEvents() {
|
---|
46 | Content.ItemChanged -= new EventHandler(Content_ItemChanged);
|
---|
47 | base.DeregisterContentEvents();
|
---|
48 | }
|
---|
49 |
|
---|
50 | protected override void OnContentChanged() {
|
---|
51 | base.OnContentChanged();
|
---|
52 | parameterMappingView.Content = null;
|
---|
53 | itemViewHost.Content = null;
|
---|
54 | itemViewHost.ViewType = null;
|
---|
55 | if (Content == null) {
|
---|
56 | mapping.Map = null;
|
---|
57 | } else {
|
---|
58 | itemViewHost.Content = Content.Item;
|
---|
59 | mapping.Map = Content.ParameterMapping;
|
---|
60 | parameterMappingView.Content = mapping;
|
---|
61 | }
|
---|
62 | }
|
---|
63 |
|
---|
64 | void Content_ItemChanged(object sender, EventArgs e) {
|
---|
65 | OnContentChanged();
|
---|
66 | }
|
---|
67 |
|
---|
68 | protected void openItemButton_Click(object sender, EventArgs e) {
|
---|
69 | openFileDialog.Title = "Open Item";
|
---|
70 | if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
|
---|
71 | newItemButton.Enabled = openItemButton.Enabled = false;
|
---|
72 | itemViewHost.Enabled = false;
|
---|
73 |
|
---|
74 | ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
|
---|
75 | try {
|
---|
76 | if (error != null) throw error;
|
---|
77 | if (content == null) {
|
---|
78 | MessageBox.Show(this, "The selected file could not be loaded", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
---|
79 | } else {
|
---|
80 | IParameterizedNamedItem item = content as IParameterizedNamedItem;
|
---|
81 | if (item == null && item.GetType() != Content.ItemType) {
|
---|
82 | MessageBox.Show(this,
|
---|
83 | string.Format("The selected file does not contain an object of type {0}", Content.ItemType.Name),
|
---|
84 | "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
---|
85 | } else {
|
---|
86 | Content.Item = item;
|
---|
87 | }
|
---|
88 | }
|
---|
89 | } catch (Exception ex) {
|
---|
90 | ErrorHandling.ShowErrorDialog(this, ex);
|
---|
91 | } finally {
|
---|
92 | Invoke(new Action(delegate() {
|
---|
93 | itemViewHost.Enabled = true;
|
---|
94 | newItemButton.Enabled = openItemButton.Enabled = true;
|
---|
95 | }));
|
---|
96 | }
|
---|
97 | });
|
---|
98 | }
|
---|
99 | }
|
---|
100 |
|
---|
101 | private TypeSelectorDialog itemTypeSelectorDialog;
|
---|
102 |
|
---|
103 | protected void newAlgorithmButton_Click(object sender, EventArgs e) {
|
---|
104 | if (itemTypeSelectorDialog == null) {
|
---|
105 | itemTypeSelectorDialog = new TypeSelectorDialog();
|
---|
106 | itemTypeSelectorDialog.Caption = "Select Item";
|
---|
107 | itemTypeSelectorDialog.TypeSelector.Caption = "Available Items";
|
---|
108 | itemTypeSelectorDialog.TypeSelector.Configure(Content.ItemType, false, true);
|
---|
109 | }
|
---|
110 | if (itemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
|
---|
111 | try {
|
---|
112 | Content.Item = (IParameterizedNamedItem)itemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
|
---|
113 | } catch (Exception ex) {
|
---|
114 | ErrorHandling.ShowErrorDialog(this, ex);
|
---|
115 | }
|
---|
116 | }
|
---|
117 | }
|
---|
118 |
|
---|
119 | protected DataTable backgroundLoadedParameters = null;
|
---|
120 |
|
---|
121 | protected void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) {
|
---|
122 | if (InvokeRequired)
|
---|
123 | Invoke(new ProgressChangedEventHandler(backgroundWorker_ProgressChanged), sender, e);
|
---|
124 | else {
|
---|
125 | if (e.ProgressPercentage < 100) {
|
---|
126 | progressBar.Visible = true;
|
---|
127 | } else {
|
---|
128 | progressBar.Visible = false;
|
---|
129 | }
|
---|
130 | }
|
---|
131 | }
|
---|
132 |
|
---|
133 | protected virtual void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
|
---|
134 | backgroundWorker.ReportProgress(0);
|
---|
135 | var client = ClientFactory.Create<OKBTables.TableServiceClient, OKBTables.ITableService>();
|
---|
136 | int count;
|
---|
137 | DataTable pars = client.PrepareDataTable(out count, "Parameter");
|
---|
138 | pars.BeginLoadData();
|
---|
139 | DataTable newRows;
|
---|
140 | do {
|
---|
141 | newRows = client.GetNextRows(100);
|
---|
142 | pars.Merge(newRows);
|
---|
143 | } while (newRows != null && newRows.Rows.Count > 0);
|
---|
144 | client.FinishFetchingRows();
|
---|
145 | client.Close();
|
---|
146 | pars.EndLoadData();
|
---|
147 | backgroundLoadedParameters = pars;
|
---|
148 | backgroundWorker.ReportProgress(100);
|
---|
149 | }
|
---|
150 |
|
---|
151 | protected virtual void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
|
---|
152 | parameterMappingView.Enabled = false;
|
---|
153 | if (backgroundLoadedParameters != null) {
|
---|
154 | mapping.Values.Clear();
|
---|
155 | mapping.Values.Add(null);
|
---|
156 | mapping.Values.AddRange(backgroundLoadedParameters.Rows.Cast<DataRow>().Select(r => (string)r["Name"]));
|
---|
157 | parameterMappingView.Enabled = true;
|
---|
158 | }
|
---|
159 | }
|
---|
160 |
|
---|
161 | protected virtual void refreshButton_Click(object sender, EventArgs e) {
|
---|
162 | InitializeParameterList();
|
---|
163 | }
|
---|
164 | }
|
---|
165 | }
|
---|