223 lines
6.6 KiB
C#
223 lines
6.6 KiB
C#
///
|
|
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
using Config.Entities;
|
|
using TBF.BenchControl.Generic;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.UiControls
|
|
{
|
|
// -----------
|
|
// / Component \
|
|
// |------------------------------
|
|
// | param1 param2 param3 ...
|
|
// Test1 |
|
|
// Test2 |
|
|
// ... |
|
|
//
|
|
public partial class TestParamsCtrl : UserControl
|
|
{
|
|
ProcedureDlg parent;
|
|
bool showTestsColumn;
|
|
BenchControl.Generic.IComponent cmpnt;
|
|
|
|
IList<IParamsProvider> testParamsProviders;
|
|
|
|
int paramsCount;
|
|
|
|
Control[] editors;
|
|
|
|
bool unlocked;
|
|
public void Unlock(){ unlocked = true; }
|
|
|
|
public TestParamsCtrl()
|
|
{
|
|
InitializeComponent();
|
|
testParamsProviders = new List<IParamsProvider>();
|
|
}
|
|
|
|
public TestParamsCtrl(ProcedureDlg parent, BenchControl.Generic.IComponent cmpnt, bool showTestsColumn)
|
|
: this()
|
|
{
|
|
this.parent = parent;
|
|
this.showTestsColumn = showTestsColumn;
|
|
this.cmpnt = cmpnt;
|
|
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()
|
|
{
|
|
IParamsProvider sampleToCreateHeader = null;
|
|
|
|
/// For each test (with an appropriate method in case of ITestMethod-s)
|
|
foreach (var test in parent.LoadedProcedure.Tests)
|
|
{
|
|
if ((cmpnt.Cfg.GetTestParams() != null) &&
|
|
(!(cmpnt is BenchControl.GenericDevices.ITestMethod) || (test.Method == cmpnt.Cfg.Name)))
|
|
{
|
|
/// Load ComponentTest entity or create it if it does not exist
|
|
IParamsProvider testParams = cmpnt.Cfg.CreateTestParams(test);
|
|
if (sampleToCreateHeader == null) sampleToCreateHeader = testParams;
|
|
testParamsProviders.Add(testParams);
|
|
}
|
|
else
|
|
{
|
|
/// In case of ITestMethod: Insert null for a test without an appropriate method.
|
|
testParamsProviders.Add(null);
|
|
}
|
|
}
|
|
|
|
/// Create the header
|
|
if (sampleToCreateHeader != null)
|
|
{
|
|
if (showTestsColumn) listViewEx.Columns.Add(Strings.Test, 70);
|
|
|
|
paramsCount = sampleToCreateHeader.ParamsCount();
|
|
editors = new Control[paramsCount];
|
|
for (int i = 0; i < paramsCount; i++)
|
|
{
|
|
listViewEx.Columns.Add(sampleToCreateHeader.ParamName(i), 90);
|
|
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)
|
|
{
|
|
int itemNr = showTestsColumn ? (e.SubItem - 1) : e.SubItem;
|
|
if (!unlocked || e.Item.Tag == null || itemNr >= editors.Length || itemNr < 0) return;
|
|
|
|
listViewEx.StartEditing(editors[itemNr], e.Item, e.SubItem);
|
|
}
|
|
|
|
void listViewEx_SubItemRightClicked(object sender, Results.Forms.SubItemEventArgs e)
|
|
{
|
|
int itemNr = showTestsColumn ? (e.SubItem - 1) : e.SubItem;
|
|
if (!unlocked || e.Item.Tag == null || itemNr >= editors.Length || itemNr < 0) 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;
|
|
|
|
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;
|
|
int itemNr = showTestsColumn ? (e.SubItem - 1) : e.SubItem;
|
|
|
|
if ((e.Item.Tag as IParamsProvider).ValidateParam(itemNr, e.DisplayText, out message))
|
|
{
|
|
(e.Item.Tag as IParamsProvider).UpdateParam(itemNr, e.DisplayText);
|
|
}
|
|
}
|
|
|
|
public void RedrawAll()
|
|
{
|
|
listViewEx.Items.Clear();
|
|
for (int i = 0; i < testParamsProviders.Count && i < parent.LoadedProcedure.Tests.Count; i++)
|
|
{
|
|
DrawOne(testParamsProviders[i], parent.LoadedProcedure.Tests[i].Name);
|
|
}
|
|
}
|
|
|
|
void DrawOne(IParamsProvider item, string testName)
|
|
{
|
|
if (item == null)
|
|
{
|
|
listViewEx.Items.Add(new ListViewItem());
|
|
return;
|
|
}
|
|
|
|
ListViewItem lvi;
|
|
if (showTestsColumn)
|
|
{
|
|
lvi = new ListViewItem(testName);
|
|
lvi.SubItems.Add(item.ToString(0));
|
|
}
|
|
else
|
|
{
|
|
lvi = new ListViewItem(item.ToString(0));
|
|
}
|
|
for (int i = 1; i < paramsCount; i++) lvi.SubItems.Add(item.ToString(i));
|
|
|
|
lvi.Tag = item;
|
|
listViewEx.Items.Add(lvi);
|
|
}
|
|
|
|
public void AddOne(Test test)
|
|
{
|
|
if (test.Method == cmpnt.Cfg.Name)
|
|
{
|
|
ComponentTest entity = new ComponentTest();
|
|
entity.CmpntName = test.Method;
|
|
entity.Test = test;
|
|
IParamsProvider testParams = cmpnt.Cfg.CreateTestParams(test); /// Load or create ComponentTest entity
|
|
testParamsProviders.Add(testParams);
|
|
DrawOne(testParams, test.Name);
|
|
}
|
|
else
|
|
{
|
|
testParamsProviders.Add(null);
|
|
DrawOne(null, null);
|
|
}
|
|
}
|
|
|
|
public void UpdateAll()
|
|
{
|
|
if (!unlocked) return;
|
|
|
|
foreach (ListViewItem lvi in listViewEx.Items)
|
|
{
|
|
if (lvi.Tag is IParamsProvider) (lvi.Tag as IParamsProvider).UpdateDbEntity();
|
|
}
|
|
}
|
|
}
|
|
}
|