tbf/TestBenchFramework/UiControls/ProcedureParamsCtrl.cs

194 lines
5.9 KiB
C#

///
/// 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<IComponent> selectedCmpnts;
IList<IParamsProvider> cmpntsParams;
int paramsCount;
Control[] editors;
bool unlocked;
public void Unlock(){ unlocked = true; }
public ProcedureParamsCtrl()
{
InitializeComponent();
cmpntsParams = new List<IParamsProvider>();
}
public ProcedureParamsCtrl(ProcedureDlg parent, IList<IComponent> 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 SubItemEventHandler(listViewEx_SubItemClicked);
listViewEx.SubItemRightClicked += new SubItemEventHandler(listViewEx_SubItemRightClicked);
listViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing);
RedrawAll();
}
private void listViewEx_SubItemClicked(object sender, 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, 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, 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();
}
}
}
}