tbf/OrderManagement/EditParametersCtrl.cs

132 lines
4.1 KiB
C#
Raw Permalink Normal View History

///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using log4net;
using Common;
using OrderManagement.Resources;
namespace OrderManagement
{
public partial class EditParametersCtrl : UserControl
{
static readonly ILog log = LogManager.GetLogger(typeof(EditParametersCtrl));
public IParamsProvider ParamsProvider;
Control[] editors;
CfgUpdateFlags flags;
public EditParametersCtrl()
{
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 EditParametersCtrl(object paramsProvider)
: this()
{
this.ParamsProvider = paramsProvider as IParamsProvider;
if (this.ParamsProvider == null) throw(new ArgumentException("paramsProvider"));
editors = new Control[this.ParamsProvider.ParamsCount()];
for (int i = 0; i < this.ParamsProvider.ParamsCount(); i++)
{
ICollection<string> values = this.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 Common.Forms.SubItemEventHandler(paramsListViewEx_SubItemClicked);
paramsListViewEx.SubItemEndEditing += new Common.Forms.SubItemEndEditingEventHandler(paramsListViewEx_SubItemEndEditing);
}
private void EntryFormCfgCtrl_Load(object sender, EventArgs e)
{
paramsListViewEx.Columns.Add(Strings.Parameter, 150);
paramsListViewEx.Columns.Add(Strings.Value, 400);
Redraw();
}
public void Closing()
{
/// Close CmdResponse handlers here
}
void Redraw()
{
if (ParamsProvider == null) return; /// Control was not loaded, settings were not changed
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()
{
paramsListViewEx.Enabled = true;
}
public CfgUpdateFlags VerifyCfg(ref string message)
{
return CfgUpdateFlags.Error;
}
public CfgUpdateFlags UpdateCfg()
{
if (ParamsProvider == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed
CfgUpdateFlags f = this.flags;
return f;
}
private void paramsListViewEx_SubItemClicked(object sender, Common.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, Common.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;
}
}
}
}