/// /// 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 parents; Control[] editors; CfgUpdateFlags flags; public ComponentCfgCtrl() { InitializeComponent(); } /// /// Constructor /// /// Parameters provider implementing IComponentCfg and IParamsProvider /// A list of parents or null, null hides parentComboBox public ComponentCfgCtrl(IParamsProvider paramsProvider, IList 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 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; } } } }