/// /// 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 testParamsProviders; int paramsCount; Control[] editors; bool unlocked; public void Unlock(){ unlocked = true; } public TestParamsCtrl() { InitializeComponent(); testParamsProviders = new List(); } 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.Count > columnNr) { 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(); } } } }