Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problem.ProgramSynthesis.BenchmarkSuite/Views/DataEditorView.cs @ 14777

Last change on this file since 14777 was 14777, checked in by pkimmesw, 7 years ago

#2665 simplifier, push solution results view, performance improvements, small bug fixes, ui fixes

File size: 6.5 KB
Line 
1using System.Windows.Forms;
2
3namespace HeuristicLab.BenchmarkSuite.Views {
4
5  using HeuristicLab.BenchmarkSuite.Problems;
6  using HeuristicLab.Core.Views;
7  using HeuristicLab.MainForm;
8
9  [View("Push Expression Selection Editor")]
10  [Content(typeof(Data), true)]
11  public partial class DataEditorView : NamedItemView {
12    private const string ValueSeparator = ", ";
13
14    public DataEditorView() {
15      InitializeComponent();
16
17      dataGridView.CellEndEdit += DataGridViewCellEndEdit;
18    }
19
20    private void DataGridViewCellEndEdit(object sender, DataGridViewCellEventArgs e) {
21      if (Content == null)
22        return;
23
24      var row = dataGridView.Rows[e.RowIndex];
25
26      var inputArgs = new string[Content.InputArgumentTypes.Length];
27      for (var i = 0; i < Content.InputArgumentTypes.Length; i++) {
28        inputArgs[i] = row.Cells[i].Value.ToString();
29      }
30
31      var outputArgs = new string[Content.OutputArgumentTypes.Length];
32      for (var i = 0; i < Content.OutputArgumentTypes.Length; i++) {
33        outputArgs[i] = row.Cells[Content.InputArgumentTypes.Length + i].Value.ToString();
34      }
35
36      var example = Content.Examples[e.RowIndex];
37
38      try {
39        var newExample = ParseExample(inputArgs, Content.InputArgumentTypes, outputArgs, Content.OutputArgumentTypes);
40        newExample.CopyTo(example);
41      }
42      catch {
43        MessageBox.Show("Unable to parse example!");
44
45        // reset entry
46        row.Cells[e.ColumnIndex].Value = e.ColumnIndex < Content.InputArgumentTypes.Length
47          ? example.InputArgs[e.ColumnIndex]
48          : example.OutputArgs[e.ColumnIndex - Content.InputArgumentTypes.Length];
49      }
50    }
51
52    private Example ParseExample(string[] inputArgs, ExampleArgumentType[] inputArgTypes, string[] outputArgs, ExampleArgumentType[] outputArgTypes) {
53      var example = new Example();
54
55      example.InputArgs = new string[inputArgs.Length];
56      for (var i = 0; i < inputArgs.Length; i++) {
57        var arg = inputArgs[i];
58        var type = inputArgTypes[i];
59
60        switch (type) {
61          case ExampleArgumentType.Bool:
62            example.InputBoolean = new[] { ExampleArgumentConverter.ConvertBoolean(arg) };
63            example.InputArgs[i] = arg;
64            break;
65          case ExampleArgumentType.Integer:
66            example.InputInt = new[] { ExampleArgumentConverter.ConvertInteger(arg) };
67            example.InputArgs[i] = arg;
68            break;
69          case ExampleArgumentType.IntegerCollection:
70            example.InputInt = ExampleArgumentConverter.ConvertIntegers(arg);
71            example.InputArgs[i] = string.Join(ValueSeparator, example.InputInt);
72            break;
73          case ExampleArgumentType.Float:
74            example.InputFloat = new[] { ExampleArgumentConverter.ConvertDouble(arg) };
75            example.InputArgs[i] = arg;
76            break;
77          case ExampleArgumentType.FloatCollection:
78            example.InputFloat = ExampleArgumentConverter.ConvertDoubles(arg);
79            example.InputArgs[i] = string.Join(ValueSeparator, example.InputFloat);
80            break;
81        }
82      }
83
84      example.OutputArgs = new string[outputArgs.Length];
85      for (var i = 0; i < outputArgs.Length; i++) {
86        var arg = outputArgs[i];
87        var type = outputArgTypes[i];
88
89        switch (type) {
90          case ExampleArgumentType.Bool:
91            example.OutputBoolean = new[] { ExampleArgumentConverter.ConvertBoolean(arg) };
92            example.OutputArgs[i] = arg;
93            break;
94          case ExampleArgumentType.Integer:
95            example.OutputInt = new[] { ExampleArgumentConverter.ConvertInteger(arg) };
96            example.OutputArgs[i] = arg;
97            break;
98          case ExampleArgumentType.IntegerCollection:
99            example.OutputInt = ExampleArgumentConverter.ConvertIntegers(arg);
100            example.OutputArgs[i] = string.Join(ValueSeparator, example.OutputInt);
101            break;
102          case ExampleArgumentType.Float:
103            example.OutputFloat = new[] { ExampleArgumentConverter.ConvertDouble(arg) };
104            example.OutputArgs[i] = arg;
105            break;
106          case ExampleArgumentType.FloatCollection:
107            example.OutputFloat = ExampleArgumentConverter.ConvertDoubles(arg);
108            example.OutputArgs[i] = string.Join(ValueSeparator, example.OutputFloat);
109            break;
110        }
111      }
112
113      return example;
114    }
115
116    public new Data Content
117    {
118      get { return (Data)base.Content; }
119      set
120      {
121        base.Content = value;
122      }
123    }
124
125    protected override void OnReadOnlyChanged() {
126      base.OnReadOnlyChanged();
127
128      dataGridView.Enabled = !ReadOnly;
129    }
130
131    protected override void OnContentChanged() {
132      dataGridView.Columns.Clear();
133      dataGridView.Rows.Clear();
134
135      if (Content == null) {
136        return;
137      }
138
139      this.nameTextBox.Text = Content.Name;
140
141      var cellTemplate = new DataGridViewTextBoxCell();
142
143      for (var i = 0; i < Content.InputArgumentTypes.Length; i++) {
144        var headerTypeName = ViewHelper.GetHeaderTypeName(Content.InputArgumentTypes[i]);
145        var column = new DataGridViewColumn {
146          HeaderText = string.Format("Input {0} : {1}", i + 1, headerTypeName),
147          AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
148          CellTemplate = cellTemplate
149        };
150
151        dataGridView.Columns.Add(column);
152      }
153
154      for (var i = 0; i < Content.OutputArgumentTypes.Length; i++) {
155        var headerTypeName = ViewHelper.GetHeaderTypeName(Content.OutputArgumentTypes[i]);
156        var column = new DataGridViewColumn {
157          HeaderText = string.Format("Output {0} : {1}", i + 1, headerTypeName),
158          AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
159          CellTemplate = cellTemplate
160        };
161
162        dataGridView.Columns.Add(column);
163      }
164
165      foreach (var example in Content.Examples) {
166        var row = new DataGridViewRow();
167        row.HeaderCell.Value = row.Index + 1;
168
169        row.CreateCells(dataGridView);
170
171        for (var i = 0; i < Content.InputArgumentTypes.Length; i++) {
172          row.Cells[i].Value = ViewHelper.StringifyInput(Content.InputArgumentTypes[i], example, ValueSeparator);
173        }
174
175        for (var i = 0; i < Content.OutputArgumentTypes.Length; i++) {
176          row.Cells[Content.InputArgumentTypes.Length + i].Value = ViewHelper.StringifyOutput(Content.OutputArgumentTypes[i], example, ValueSeparator);
177        }
178
179        dataGridView.Rows.Add(row);
180      }
181    }
182  }
183}
Note: See TracBrowser for help on using the repository browser.