/// /// Copyright (c) 2013-2015 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Windows.Forms; using Common; using Common.Forms; using Config.Entities; using TBF.Resources; namespace TBF.UI.Procedures { // ----------- // / Component \ // |------------------------------ // | param1 param2 param3 ... // Test1 | // Test2 | // ... | // public partial class TestParamsCtrl : UserControl { ProcedureDlg parent; bool showTestsColumn; Rig.Generic.IComponent cmpnt; IList testParamsProviders; int paramsCount; Control[] editors; bool unlocked; public void Unlock() { unlocked = true; } public ListViewEx LVEx { get { return listViewEx; } } public TestParamsCtrl() { InitializeComponent(); testParamsProviders = new List(); } public TestParamsCtrl(ProcedureDlg parent, Rig.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; testParamsProviders = GetTestParamsProviders(parent.LoadedProcedure.Tests, out sampleToCreateHeader); /// 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); ICollection values = sampleToCreateHeader.ParamValues(i); if (values == null) { editors[i] = new TextBox(); } else { ComboBox cb = new ComboBox(); foreach (var v in values) cb.Items.Add(v); editors[i] = cb; } 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(); } IList GetTestParamsProviders(IList tests, out IParamsProvider sampleToCreateHeader) { IList providers = new List(); sampleToCreateHeader = null; /// For each test (with an appropriate method in case of ITestMethod-s) foreach (var test in tests) { IParamsProvider testParams = cmpnt.Cfg.GetUITestParamsProvider(test); if (testParams != null && (sampleToCreateHeader == null || testParams.ParamsCount() > sampleToCreateHeader.ParamsCount())) { sampleToCreateHeader = testParams; } providers.Add(testParams); } return providers; } 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); } void listViewEx_SubItemRightClicked(object sender, 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, 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); } else { MessageBox.Show(message); e.DisplayText = e.Item.SubItems[e.SubItem].Text; e.Cancel = true; return; /// NOK } } public void RedrawAll() { IParamsProvider dummy; testParamsProviders = GetTestParamsProviders(parent.LoadedProcedure.Tests, out dummy); listViewEx.Items.Clear(); for (int i = 0; i < testParamsProviders.Count && i < parent.LoadedProcedure.Tests.Count; i++) { DrawOne(testParamsProviders[i], parent.LoadedProcedure.Tests[i]); } } void DrawOne(IParamsProvider item, Test test) { if (item == null) { listViewEx.Items.Add(new ListViewItem()); return; } ListViewItem lvi; if (showTestsColumn) { lvi = new ListViewItem(test.Name); 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)); /// Setting Tag to 'null' in case of ErrorFlags.TestParams and protected tests prevents editing ListViewEx items lvi.Tag = (item is TBF.Rig.Various.ErrorFlags.TestParams && (test.Profile >= TestProfile.Protected)) ? null : item; listViewEx.Items.Add(lvi); } public void AddOne(Test test) { if (test.Method == cmpnt.Cfg.Name) { IParamsProvider testParams = cmpnt.Cfg.CreateTestParamsProvider(); /// Load or create ComponentTest entity if (testParams != null) { var writer = new System.IO.StringWriter(); testParams.GetSerializer().Serialize(writer, testParams); /// Serialize this class with parameters ComponentTest entity = new ComponentTest(test.Method, writer.ToString(), test); entity.SetParamsProvider(testParams); testParamsProviders.Add(testParams); } DrawOne(testParams, test); } else { testParamsProviders.Add(null); DrawOne(null, null); } } public bool UpdateAll() { if (!unlocked) return false; foreach (ListViewItem lvi in listViewEx.Items) { if (lvi.Tag is IParamsProvider) { if (!(lvi.Tag as IParamsProvider).UpdateEmbeddedDbEntity()) return false; } } return true; } } }