201 lines
5.9 KiB
C#
201 lines
5.9 KiB
C#
///
|
|
/// Copyright (c) 2018 Sensus Slovensko a.s.
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
using log4net;
|
|
using Common;
|
|
using Config.Entities;
|
|
using TBF.BenchControl.Generic;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.BenchControl.Configs.ParamsProvider
|
|
{
|
|
public partial class ComponentCfgCtrl : UserControl, IComponentCfgCtrl
|
|
{
|
|
static readonly ILog log = LogManager.GetLogger(typeof(ComponentCfgCtrl));
|
|
|
|
public bool ShowMore { get { return false; } }
|
|
|
|
|
|
IParamsProvider paramsProvider;
|
|
///
|
|
public IComponentCfg Config
|
|
{
|
|
get
|
|
{
|
|
return paramsProvider as IComponentCfg;
|
|
}
|
|
set
|
|
{
|
|
paramsProvider = value as IParamsProvider;
|
|
Redraw();
|
|
}
|
|
}
|
|
|
|
IList<string> parents;
|
|
Control[] editors;
|
|
CfgUpdateFlags flags;
|
|
|
|
public ComponentCfgCtrl()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="paramsProvider">Parameters provider implementing IComponentCfg and IParamsProvider</param>
|
|
/// <param name="parents">A list of parents or null, null hides parentComboBox</param>
|
|
public ComponentCfgCtrl(IParamsProvider paramsProvider, IList<string> parents)
|
|
: this()
|
|
{
|
|
this.paramsProvider = paramsProvider;
|
|
this.parents = parents;
|
|
|
|
if (parents == null)
|
|
{
|
|
parentLabel.Visible = false;
|
|
parentComboBox.Visible = false;
|
|
}
|
|
|
|
editors = new Control[paramsProvider.ParamsCount()];
|
|
for (int i = 0; i < paramsProvider.ParamsCount(); i++)
|
|
{
|
|
ICollection<string> values = paramsProvider.ParamValues(i);
|
|
if (values == null)
|
|
{
|
|
editors[i] = new TextBox();
|
|
}
|
|
else
|
|
{
|
|
ComboBox cb = new ComboBox();
|
|
foreach (var v in values) cb.Items.Add(v);
|
|
editors[i] = cb;
|
|
}
|
|
editors[i].Visible = false;
|
|
this.Controls.Add(editors[i]);
|
|
}
|
|
|
|
flags = CfgUpdateFlags.None;
|
|
|
|
paramsListViewEx.SubItemClicked += new Results.Forms.SubItemEventHandler(paramsListViewEx_SubItemClicked);
|
|
paramsListViewEx.SubItemEndEditing += new Results.Forms.SubItemEndEditingEventHandler(paramsListViewEx_SubItemEndEditing);
|
|
}
|
|
|
|
void Localize()
|
|
{
|
|
componentClassLabel.Text = Strings.Component_class;
|
|
nameLabel.Text = Strings.Name;
|
|
parentLabel.Text = Strings.Parent_name;
|
|
}
|
|
|
|
private void EntryFormCfgCtrl_Load(object sender, EventArgs e)
|
|
{
|
|
Localize();
|
|
paramsListViewEx.Columns.Add(Strings.Parameter, 210);
|
|
paramsListViewEx.Columns.Add(Strings.Value, 210);
|
|
if (parents != null)
|
|
{
|
|
foreach (var p in parents) parentComboBox.Items.Add(p);
|
|
}
|
|
Redraw();
|
|
}
|
|
|
|
public void Closing()
|
|
{
|
|
/// Close CmdResponse handlers here
|
|
}
|
|
|
|
void Redraw()
|
|
{
|
|
if (paramsProvider == null) return; /// Control was not loaded, settings were not changed
|
|
|
|
componentClassTextBox.Text = Config.Factory.ClassName;
|
|
nameTextBox.Text = Config.Name;
|
|
|
|
if (parents != null) parentComboBox.Text = Config.ParentName;
|
|
|
|
paramsListViewEx.Items.Clear();
|
|
for (int i = 0; i < paramsProvider.ParamsCount(); i++)
|
|
{
|
|
ListViewItem lvi = new ListViewItem(paramsProvider.ParamName(i));
|
|
lvi.SubItems.Add(paramsProvider.ToString(i));
|
|
lvi.Tag = i;
|
|
paramsListViewEx.Items.Add(lvi);
|
|
}
|
|
}
|
|
|
|
public void Unlock()
|
|
{
|
|
nameTextBox.Enabled = true;
|
|
if (parents != null) parentComboBox.Enabled = true;
|
|
paramsListViewEx.Enabled = true;
|
|
}
|
|
|
|
public CfgUpdateFlags VerifyCfg(ref string message)
|
|
{
|
|
if (parents == null) return CfgUpdateFlags.None;
|
|
|
|
/// Verify the parent
|
|
foreach (var item in parentComboBox.Items)
|
|
{
|
|
if (parentComboBox.Text == item.ToString()) return CfgUpdateFlags.None;
|
|
}
|
|
|
|
message += Environment.NewLine + string.Format(Strings.Invalid_0, parentLabel.Text);
|
|
return CfgUpdateFlags.Error;
|
|
}
|
|
|
|
public CfgUpdateFlags UpdateCfg()
|
|
{
|
|
if (paramsProvider == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed
|
|
|
|
CfgUpdateFlags f = this.flags;
|
|
|
|
if (Config.Name != nameTextBox.Text)
|
|
{
|
|
Config.Name = nameTextBox.Text;
|
|
f |= CfgUpdateFlags.RestartRqrd;
|
|
}
|
|
|
|
if (parents != null)
|
|
{
|
|
if (Config.ParentName != parentComboBox.Text)
|
|
{
|
|
Config.ParentName = parentComboBox.Text;
|
|
f |= CfgUpdateFlags.RestartRqrd;
|
|
}
|
|
}
|
|
|
|
return f;
|
|
}
|
|
|
|
private void paramsListViewEx_SubItemClicked(object sender, Results.Forms.SubItemEventArgs e)
|
|
{
|
|
if (e.SubItem != 1) return;
|
|
int itemNr = (int)e.Item.Tag;
|
|
paramsListViewEx.StartEditing(editors[itemNr], e.Item, e.SubItem);
|
|
}
|
|
|
|
private void paramsListViewEx_SubItemEndEditing(object sender, Results.Forms.SubItemEndEditingEventArgs e)
|
|
{
|
|
if (e.SubItem != 1) return;
|
|
int itemNr = (int)e.Item.Tag;
|
|
|
|
string message;
|
|
if (paramsProvider.ValidateParam(itemNr, e.DisplayText, out message))
|
|
{
|
|
flags |= paramsProvider.UpdateParam(itemNr, e.DisplayText);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(message);
|
|
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
e.Cancel = true;
|
|
}
|
|
}
|
|
}
|
|
}
|