/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// using System; using System.Collections.Generic; using System.Windows.Forms; using TBF.BenchControl.Generic; using TBF.Resources; namespace TBF.UiControls { /// --------------- /// / Path or other \ /// |------------------------------ /// | param1 param2 param3 ... /// Component1 | /// Component2 | /// ... | /// public partial class ProcedureParamsCtrl : UserControl { ProcedureDlg parent; bool showSensorsColumn; int nrFixedColumns; IList selectedCmpnts; IList cmpntsParams; int paramsCount; Control[] editors; bool unlocked; public void Unlock(){ unlocked = true; } public ProcedureParamsCtrl() { InitializeComponent(); cmpntsParams = new List(); } public ProcedureParamsCtrl(ProcedureDlg parent, IList selectedCmpnts, bool showSensorsColumn) : this() { this.parent = parent; this.selectedCmpnts = selectedCmpnts; this.showSensorsColumn = showSensorsColumn; nrFixedColumns = (showSensorsColumn ? 2 : 1); unlocked = false; this.SuspendLayout(); Dock = System.Windows.Forms.DockStyle.Fill; listViewEx.Dock = System.Windows.Forms.DockStyle.Fill; listViewEx.AllowColumnReorder = false; listViewEx.DoubleClickActivation = false; listViewEx.FullRowSelect = true; listViewEx.GridLines = true; listViewEx.Location = new System.Drawing.Point(0, 0); listViewEx.TabIndex = 0; listViewEx.UseCompatibleStateImageBehavior = false; listViewEx.View = System.Windows.Forms.View.Details; ResumeLayout(false); } public void Initialize() { if (selectedCmpnts == null) return; IParamsProvider sampleToCreateHeader = null; foreach (var cmpnt in selectedCmpnts) { if (cmpnt != null && (cmpnt.Cfg.GetProcedureParams() != null)) { IParamsProvider procedureParams = cmpnt.Cfg.CreateProcedureParams(parent.LoadedProcedure); if (sampleToCreateHeader == null) sampleToCreateHeader = procedureParams; cmpntsParams.Add(procedureParams); } else { cmpntsParams.Add(null); } } if (sampleToCreateHeader != null) { if (showSensorsColumn) listViewEx.Columns.Add(Strings.Sensor_, 60); listViewEx.Columns.Add(Strings.Component, 80); paramsCount = sampleToCreateHeader.ParamsCount(); editors = new Control[paramsCount]; for (int i = 0; i < paramsCount; i++) { listViewEx.Columns.Add(sampleToCreateHeader.ParamName(i), 80); editors[i] = new TextBox(); editors[i].Visible = false; this.Controls.Add(editors[i]); } } listViewEx.SubItemClicked += new Results.Forms.SubItemEventHandler(listViewEx_SubItemClicked); listViewEx.SubItemRightClicked += new Results.Forms.SubItemEventHandler(listViewEx_SubItemRightClicked); listViewEx.SubItemEndEditing += new Results.Forms.SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing); RedrawAll(); } private void listViewEx_SubItemClicked(object sender, Results.Forms.SubItemEventArgs e) { if (!unlocked || e.Item.Tag == null || e.SubItem < nrFixedColumns || e.SubItem >= nrFixedColumns + editors.Length) return; listViewEx.StartEditing(editors[e.SubItem - nrFixedColumns], e.Item, e.SubItem); } void listViewEx_SubItemRightClicked(object sender, Results.Forms.SubItemEventArgs e) { if (!unlocked || e.Item.Tag == null || e.SubItem < nrFixedColumns || e.SubItem >= nrFixedColumns + editors.Length) return; if (DialogResult.Yes == MessageBox.Show(Strings.Do_you_want_to_copy_this_value_to_all_cells_below_this_cell, Strings.Confirmation, MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { int columnNr = e.SubItem; string value = null; System.Drawing.Color backColor = System.Drawing.Color.White; foreach (ListViewItem item in listViewEx.Items) { if (value != null) { item.SubItems[columnNr].Text = value; item.SubItems[columnNr].BackColor = backColor; int itemNr = columnNr - nrFixedColumns; string message; if ((item.Tag as IParamsProvider).ValidateParam(itemNr, value, out message)) { (item.Tag as IParamsProvider).UpdateParam(itemNr, value); } } else if (item == e.Item) { value = item.SubItems[columnNr].Text; backColor = item.SubItems[columnNr].BackColor; } } } } private void listViewEx_SubItemEndEditing(object sender, Results.Forms.SubItemEndEditingEventArgs e) { string message; if ((e.Item.Tag as IParamsProvider).ValidateParam(e.SubItem - nrFixedColumns, e.DisplayText, out message)) { (e.Item.Tag as IParamsProvider).UpdateParam(e.SubItem - nrFixedColumns, e.DisplayText); } } public void RedrawAll() { listViewEx.Items.Clear(); foreach (var item in cmpntsParams) DrawOne(item); } void DrawOne(IParamsProvider item) { if (item == null) { listViewEx.Items.Add(new ListViewItem()); return; } ListViewItem lvi; if (showSensorsColumn) { lvi = new ListViewItem((listViewEx.Items.Count + 1).ToString()); lvi.SubItems.Add(selectedCmpnts[listViewEx.Items.Count].Cfg.Name); } else { lvi = new ListViewItem(selectedCmpnts[listViewEx.Items.Count].Cfg.Name); } for (int i = 0; i < paramsCount; i++) lvi.SubItems.Add(item.ToString(i)); lvi.Tag = item; listViewEx.Items.Add(lvi); } public void UpdateAll() { if (!unlocked) return; foreach (ListViewItem lvi in listViewEx.Items) { if (lvi.Tag is IParamsProvider) (lvi.Tag as IParamsProvider).UpdateDbEntity(); } } } }