Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OKB/HeuristicLab.OKB.ParameterTable/ParameterTable.cs @ 7461

Last change on this file since 7461 was 4311, checked in by swagner, 14 years ago

Integrated OKB clients for HL 3.3 (#1166)

File size: 2.9 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Drawing;
5using System.Data;
6using System.Linq;
7using System.Text;
8using System.Windows.Forms;
9
10namespace HeuristicLab.OKB.ParameterTable {
11  public partial class ParameterTable : UserControl {
12
13    public ParameterTable() {
14      InitializeComponent();
15    }
16
17    public void Initialize(IEnumerable<IParameterAccessor> parameters) {
18      SuspendLayout();
19      panel.Controls.Clear();
20      panel.RowStyles.Clear();
21      toolTip.RemoveAll();
22      panel.RowCount = 0;
23      foreach (var p in parameters) {
24        try {
25          Label l = new Label() {
26            Text = p.Name,
27            Dock = DockStyle.Fill,
28            TextAlign = ContentAlignment.MiddleLeft,
29          };
30          Control c = CreateParameterControl(p);
31          toolTip.SetToolTip(l, p.Description);
32          toolTip.SetToolTip(c, p.TypeName);
33          panel.Controls.Add(l);
34          panel.Controls.Add(c);
35          panel.SetCellPosition(l, new TableLayoutPanelCellPosition(0, panel.RowCount));
36          panel.SetCellPosition(c, new TableLayoutPanelCellPosition(1, panel.RowCount));
37          panel.RowCount++;
38        } catch (Exception x) {
39          MessageBox.Show(string.Format("could not display parameter {0}:\n{1}",
40            p.Name, x.ToString()),
41            "Error while creating parameter editor",
42            MessageBoxButtons.OK, MessageBoxIcon.Error);
43        }
44      }
45      Label filler = new Label() { Dock = DockStyle.Fill };
46      panel.Controls.Add(filler);
47      panel.SetCellPosition(filler, new TableLayoutPanelCellPosition(0, panel.RowCount));
48      panel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
49      ResumeLayout();
50    }
51
52    private Control CreateParameterControl(IParameterAccessor parameter) {
53      if (parameter is IPrimitiveParameter) {
54        TextBox box = new TextBox() {
55          Dock = DockStyle.Fill,
56          Text = parameter.Value,
57        };
58        box.TextChanged += (s, a) => { UpdateParameter((IPrimitiveParameter)parameter, box); };
59        return box;
60      } else if (parameter is IOperatorParameter) {
61        IOperatorParameter op = (IOperatorParameter)parameter;
62        OperatorParameterSetterControl control = new OperatorParameterSetterControl() {
63          Dock = DockStyle.Fill,
64          Label = op.Value,
65        };
66        control.SetClicked += (s, a) => {
67          op.Set();
68          control.Label = op.Value;
69        };
70        control.ShowClicked += (s, a) => { op.Show(); };
71        return control;
72      } else throw new ArgumentException("unsupported parameter type");
73    }
74
75    private void UpdateParameter(IPrimitiveParameter parameter, TextBox box) {
76      string value = box.Text;
77      if (parameter.IsValid(value)) {
78        parameter.Value = value;
79        box.BackColor = Color.White;
80      } else {
81        box.BackColor = Color.LightPink;
82      }
83    }
84  }
85}
Note: See TracBrowser for help on using the repository browser.