using System; using System.Collections.Generic; using System.Windows.Forms; 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(); this.Controls.Add(editors[i]); } } listViewEx.SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked); listViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing); RedrawAll(); } private void listViewEx_SubItemClicked(object sender, 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); } private void listViewEx_SubItemEndEditing(object sender, 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(Entities.Test test) { if (test.Method == cmpnt.Cfg.Name) { Entities.ComponentTest entity = new Entities.ComponentTest(); entity.CmpntName = test.Method; entity.Test = test; IParamsProvider testParams = new BenchControl.TestMethods.CombinedWithDetection.CombinedWithDetTestParams(entity, cmpnt.Cfg.Name, test); 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(); } } } }