From 42fbc501a9ba8c6480bebdd1ca9edadc8e9c2d54 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Mon, 12 Jan 2015 15:09:09 +0100 Subject: [PATCH] Configuration of results: UI completed --- TestBenchFramework/Forms/ResultItemSpec.cs | 101 +++++++++++---- .../Forms/ResultsConfig.Designer.cs | 49 +++++-- TestBenchFramework/Forms/ResultsConfig.cs | 122 ++++++++++++------ TestBenchFramework/LocalSettings.cs | 14 +- TestBenchFramework/ProcedureDlg.cs | 1 - .../Screens/ResultsTabPageCtrl.cs | 10 ++ 6 files changed, 219 insertions(+), 78 deletions(-) diff --git a/TestBenchFramework/Forms/ResultItemSpec.cs b/TestBenchFramework/Forms/ResultItemSpec.cs index eb93eba23..a7926132b 100644 --- a/TestBenchFramework/Forms/ResultItemSpec.cs +++ b/TestBenchFramework/Forms/ResultItemSpec.cs @@ -1,39 +1,92 @@ using System; -using System.Text; +using System.Collections.Generic; +using TBF.Resources; namespace TBF.Forms { public class ResultItemSpec { - static int idCounter; /// Values of this static counter are assigned to ID-s in instance constructor - static ResultItemSpec() { idCounter = 0; } /// Static constructor - - public enum Source { Test, Meter } - + /// /// Public fields - public readonly int ID; - public readonly string Name; - public readonly string ClmnHeaderText; - public readonly string Format; - public readonly Source Src; + /// + public readonly string Name; /// Name-s of all items must be unique + public readonly string ClmnHeaderText; /// Text printed in the column header - public delegate float PickFromTestDlgt(Entities.TestResult testResult); - public readonly PickFromTestDlgt PickFromTest; + public delegate string PrintDlgt(Entities.MeterTestResult meterTestResult); + public readonly PrintDlgt Print; /// Function to pick a MeterTestResult field and convert it into a string - public delegate float PickFromMeterDlgt(Entities.MeterTestResult meterTestResult); - public readonly PickFromMeterDlgt PickFromMeter; - - /// Public constructor which assignes unique ID-s - public ResultItemSpec(string name, string clmnHeaderText, string format, Source src, - PickFromMeterDlgt pickFromMeter, PickFromTestDlgt pickFromTest) + /// + /// Public constructor + /// + public ResultItemSpec(string name, string clmnHeaderText, PrintDlgt printDlgt) { - ID = idCounter++; Name = name; ClmnHeaderText = clmnHeaderText; - Format = format; - Src = src; - PickFromMeter = pickFromMeter; - PickFromTest = pickFromTest; + Print = printDlgt; + } + + + + /// Static list of all available items + public static readonly IList AllItems; + + /// Static constructor that initializes the list of all items + static ResultItemSpec() + { + AllItems = new List(); + + /// Target values + AllItems.Add(new ResultItemSpec("Q from", Strings.Q_from_m3h, x => x.TestResult.Qfrom.ToString("F3"))); + AllItems.Add(new ResultItemSpec("Q to", Strings.Q_to_m3h, x => x.TestResult.Qto.ToString("F3"))); + + /// Test results + AllItems.Add(new ResultItemSpec("Start time", "T start", x => x.TestResult.TimeStart.ToShortTimeString())); + AllItems.Add(new ResultItemSpec("End time", "T end", x => x.TestResult.TimeEnd.ToShortTimeString())); + AllItems.Add(new ResultItemSpec("Test time", "T [s]", x => x.TestResult.TimeEnd.ToShortTimeString())); + AllItems.Add(new ResultItemSpec("Flow", Strings.Flow_m3h, x => x.TestResult.FlowVolume.ToString("F3"))); + AllItems.Add(new ResultItemSpec("T in", Strings.T_in, x => x.TestResult.TempInAvrg.ToString("F2"))); + AllItems.Add(new ResultItemSpec("T out", Strings.T_out, x => x.TestResult.TempOutAvrg.ToString("F2"))); + AllItems.Add(new ResultItemSpec("T div", Strings.T_div, x => x.TestResult.TempDivAvrg.ToString("F2"))); + AllItems.Add(new ResultItemSpec("P in", Strings.P_in, x => x.TestResult.PressInAvrg.ToString("F3"))); + AllItems.Add(new ResultItemSpec("P out", Strings.P_out, x => x.TestResult.PressOutAvrg.ToString("F3"))); + + /// Water meter results + AllItems.Add(new ResultItemSpec("Volume", "Volume", x => x.VolumeMeter.ToString("F3"))); + AllItems.Add(new ResultItemSpec("Reference volume", "Ref.volume", x => x.VolumeErrorPct.ToString("F2"))); + AllItems.Add(new ResultItemSpec("Error", "Error [%]", x => x.VolumeMeter.ToString("F3"))); + AllItems.Add(new ResultItemSpec("Passed", "Result", x => (x.Passed ? Strings.Passed : Strings.Failed))); + AllItems.Add(new ResultItemSpec("Pulses", "Pulses", x => x.PulsesMeter.ToString())); + AllItems.Add(new ResultItemSpec("Reference pulses", "Ref.pulses", x => x.PulsesMaster.ToString())); + AllItems.Add(new ResultItemSpec("Serial Nr", "s/n", x => x.PulsesMeter.ToString())); + AllItems.Add(new ResultItemSpec("End state", "End state", x => x.PulsesMeter.ToString())); + } + + public static ResultItemSpec GetItem(string name) + { + foreach (var item in AllItems) if (item.Name.Equals(name)) return item; + return null; + } + + public static string[] ToStrArray(IList items) + { + int count = (items != null) ? items.Count : 0; + string[] result = new string[count]; + for (int i = 0; i < count; i++) result[i] = items[i].Name; + return result; + } + + public static IList FromStrArray(string[] strArray) + { + IList result = new List(); + if (strArray != null) + { + for (int i = 0; i < strArray.Length; i++) + { + ResultItemSpec item = GetItem(strArray[i]); + if (item != null) result.Add(item); + } + } + return result; } } } diff --git a/TestBenchFramework/Forms/ResultsConfig.Designer.cs b/TestBenchFramework/Forms/ResultsConfig.Designer.cs index d6b5f8bd4..6277810ea 100644 --- a/TestBenchFramework/Forms/ResultsConfig.Designer.cs +++ b/TestBenchFramework/Forms/ResultsConfig.Designer.cs @@ -44,6 +44,8 @@ this.removeButton = new System.Windows.Forms.Button(); this.addButton = new System.Windows.Forms.Button(); this.unlockButton = new System.Windows.Forms.Button(); + this.singleRadioButton = new System.Windows.Forms.RadioButton(); + this.combinedRadioButton = new System.Windows.Forms.RadioButton(); this.testsArangementGroupBox.SuspendLayout(); this.metersArangementGroupBox.SuspendLayout(); this.SuspendLayout(); @@ -143,7 +145,7 @@ // this.availableResultsListBox.Enabled = false; this.availableResultsListBox.FormattingEnabled = true; - this.availableResultsListBox.Location = new System.Drawing.Point(12, 205); + this.availableResultsListBox.Location = new System.Drawing.Point(12, 246); this.availableResultsListBox.Name = "availableResultsListBox"; this.availableResultsListBox.Size = new System.Drawing.Size(135, 160); this.availableResultsListBox.TabIndex = 6; @@ -153,7 +155,7 @@ // this.selectedResultsListBox.Enabled = false; this.selectedResultsListBox.FormattingEnabled = true; - this.selectedResultsListBox.Location = new System.Drawing.Point(252, 205); + this.selectedResultsListBox.Location = new System.Drawing.Point(252, 246); this.selectedResultsListBox.Name = "selectedResultsListBox"; this.selectedResultsListBox.Size = new System.Drawing.Size(135, 160); this.selectedResultsListBox.TabIndex = 7; @@ -162,7 +164,7 @@ // availableResultsLabel // this.availableResultsLabel.AutoSize = true; - this.availableResultsLabel.Location = new System.Drawing.Point(12, 183); + this.availableResultsLabel.Location = new System.Drawing.Point(12, 224); this.availableResultsLabel.Name = "availableResultsLabel"; this.availableResultsLabel.Size = new System.Drawing.Size(86, 13); this.availableResultsLabel.TabIndex = 8; @@ -171,7 +173,7 @@ // selectedResultsLabel // this.selectedResultsLabel.AutoSize = true; - this.selectedResultsLabel.Location = new System.Drawing.Point(249, 183); + this.selectedResultsLabel.Location = new System.Drawing.Point(249, 224); this.selectedResultsLabel.Name = "selectedResultsLabel"; this.selectedResultsLabel.Size = new System.Drawing.Size(85, 13); this.selectedResultsLabel.TabIndex = 9; @@ -181,7 +183,7 @@ // this.removeAllButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.removeAllButton.Enabled = false; - this.removeAllButton.Location = new System.Drawing.Point(153, 306); + this.removeAllButton.Location = new System.Drawing.Point(153, 346); this.removeAllButton.Name = "removeAllButton"; this.removeAllButton.Size = new System.Drawing.Size(94, 30); this.removeAllButton.TabIndex = 46; @@ -193,7 +195,7 @@ // this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.removeButton.Enabled = false; - this.removeButton.Location = new System.Drawing.Point(153, 271); + this.removeButton.Location = new System.Drawing.Point(153, 311); this.removeButton.Name = "removeButton"; this.removeButton.Size = new System.Drawing.Size(93, 30); this.removeButton.TabIndex = 45; @@ -205,7 +207,7 @@ // this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.addButton.Enabled = false; - this.addButton.Location = new System.Drawing.Point(153, 236); + this.addButton.Location = new System.Drawing.Point(153, 276); this.addButton.Name = "addButton"; this.addButton.Size = new System.Drawing.Size(93, 30); this.addButton.TabIndex = 44; @@ -223,13 +225,42 @@ this.unlockButton.UseVisualStyleBackColor = true; this.unlockButton.Click += new System.EventHandler(this.unlockButton_Click); // + // singleRadioButton + // + this.singleRadioButton.Appearance = System.Windows.Forms.Appearance.Button; + this.singleRadioButton.AutoSize = true; + this.singleRadioButton.Checked = true; + this.singleRadioButton.Location = new System.Drawing.Point(11, 183); + this.singleRadioButton.Name = "singleRadioButton"; + this.singleRadioButton.Size = new System.Drawing.Size(46, 23); + this.singleRadioButton.TabIndex = 48; + this.singleRadioButton.TabStop = true; + this.singleRadioButton.Text = "Single"; + this.singleRadioButton.UseVisualStyleBackColor = true; + this.singleRadioButton.CheckedChanged += new System.EventHandler(this.singleRadioButton_CheckedChanged); + // + // combinedRadioButton + // + this.combinedRadioButton.Appearance = System.Windows.Forms.Appearance.Button; + this.combinedRadioButton.AutoSize = true; + this.combinedRadioButton.Location = new System.Drawing.Point(63, 183); + this.combinedRadioButton.Name = "combinedRadioButton"; + this.combinedRadioButton.Size = new System.Drawing.Size(64, 23); + this.combinedRadioButton.TabIndex = 49; + this.combinedRadioButton.TabStop = true; + this.combinedRadioButton.Text = "Combined"; + this.combinedRadioButton.UseVisualStyleBackColor = true; + this.combinedRadioButton.CheckedChanged += new System.EventHandler(this.combinedRadioButton_CheckedChanged); + // // ResultsConfig // this.AcceptButton = this.okButton; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(399, 379); + this.ClientSize = new System.Drawing.Size(399, 419); + this.Controls.Add(this.combinedRadioButton); + this.Controls.Add(this.singleRadioButton); this.Controls.Add(this.unlockButton); this.Controls.Add(this.removeAllButton); this.Controls.Add(this.removeButton); @@ -273,5 +304,7 @@ private System.Windows.Forms.Button removeButton; private System.Windows.Forms.Button addButton; private System.Windows.Forms.Button unlockButton; + private System.Windows.Forms.RadioButton singleRadioButton; + private System.Windows.Forms.RadioButton combinedRadioButton; } } \ No newline at end of file diff --git a/TestBenchFramework/Forms/ResultsConfig.cs b/TestBenchFramework/Forms/ResultsConfig.cs index 125731b8f..18dc74cee 100644 --- a/TestBenchFramework/Forms/ResultsConfig.cs +++ b/TestBenchFramework/Forms/ResultsConfig.cs @@ -33,22 +33,20 @@ namespace TBF.Forms } public Meters MetersArrangement; - public IList allAvailableItems; - public IList AvailableItems; - public IList SelectedItems; + public IList currentlyAvailableItems; + public IList SelectedItems_SingleWM; + public IList SelectedItems_CombinedWM; - bool unlocked; + bool combined; /// true = processing combined items + bool unlocked; /// true = changes enabled public ResultsConfig() { InitializeComponent(); + combined = false; unlocked = false; cancelButton.Visible = false; - SelectedItems = new List(); - - CreateListOfAvailableItems(); - AvailableItems = GetListOfAvailableItems(); } void Localize() @@ -84,31 +82,23 @@ namespace TBF.Forms RedrawSelected(); } - void CreateListOfAvailableItems() - { - allAvailableItems = new List(); - allAvailableItems.Add(new ResultItemSpec("PulsesMeter", "PulsesMeter", "F0", ResultItemSpec.Source.Meter, x => (float)x.PulsesMeter, null)); - allAvailableItems.Add(new ResultItemSpec("PulsesMaster", "PulsesMaster", "F0", ResultItemSpec.Source.Meter, x => (float)x.PulsesMaster, null)); - } - - /// - /// Create a list of available items from the complete list from 'auxBrdUpgInfo' - /// and the list of selected items. In this way the order of items in the created list - /// is always the same as in the original list in 'auxBrdUpgInfo'. - /// - /// A list of available items which does not contain the selected items - IList GetListOfAvailableItems() - { - return allAvailableItems; - } - /// /// Redraw selected items (right hand side) /// void RedrawAvailable() { + IList selectedItems = combined ? SelectedItems_CombinedWM : SelectedItems_SingleWM; + availableResultsListBox.Items.Clear(); - foreach (var item in AvailableItems) availableResultsListBox.Items.Add(item.Name); + currentlyAvailableItems = new List(); + foreach (var item in ResultItemSpec.AllItems) + { + if (!selectedItems.Contains(item)) + { + currentlyAvailableItems.Add(item); + availableResultsListBox.Items.Add(item.Name); + } + } } /// @@ -116,11 +106,16 @@ namespace TBF.Forms /// void RedrawSelected() { + IList selectedItems = combined ? SelectedItems_CombinedWM : SelectedItems_SingleWM; + selectedResultsListBox.Items.Clear(); - foreach (var item in SelectedItems) selectedResultsListBox.Items.Add(item.Name); + foreach (var item in selectedItems) + { + selectedResultsListBox.Items.Add(item.Name); + } } - private void unlockButton_Click(object sender, EventArgs e) + void unlockButton_Click(object sender, EventArgs e) { if (!unlocked) { @@ -165,15 +160,21 @@ namespace TBF.Forms Close(); } - private void availableResultsListBox_DoubleClick(object sender, EventArgs e) + void availableResultsListBox_DoubleClick(object sender, EventArgs e) { /// Double click works when just one item is selected IList itemsToRemove = new List(); if (availableResultsListBox.SelectedIndices.Count == 1) { - var item = AvailableItems[availableResultsListBox.SelectedIndices[0]]; - SelectedItems.Add(item); - AvailableItems.Remove(item); + var item = currentlyAvailableItems[availableResultsListBox.SelectedIndices[0]]; + if (combined) + { + SelectedItems_CombinedWM.Add(item); + } + else + { + SelectedItems_SingleWM.Add(item); + } RedrawAvailable(); RedrawSelected(); } @@ -186,9 +187,15 @@ namespace TBF.Forms for (int i = availableResultsListBox.SelectedIndices.Count - 1; i >= 0; i--) { - var item = AvailableItems[availableResultsListBox.SelectedIndices[i]]; - SelectedItems.Add(item); - AvailableItems.Remove(item); + var item = currentlyAvailableItems[availableResultsListBox.SelectedIndices[i]]; + if (combined) + { + SelectedItems_CombinedWM.Add(item); + } + else + { + SelectedItems_SingleWM.Add(item); + } } RedrawAvailable(); RedrawSelected(); @@ -200,8 +207,14 @@ namespace TBF.Forms if (selectedResultsListBox.SelectedIndices.Count == 1) { - SelectedItems.RemoveAt(selectedResultsListBox.SelectedIndices[0]); - AvailableItems = GetListOfAvailableItems(); + if (combined) + { + SelectedItems_CombinedWM.RemoveAt(selectedResultsListBox.SelectedIndices[0]); + } + else + { + SelectedItems_SingleWM.RemoveAt(selectedResultsListBox.SelectedIndices[0]); + } RedrawAvailable(); RedrawSelected(); } @@ -213,10 +226,16 @@ namespace TBF.Forms for (int i = selectedResultsListBox.SelectedIndices.Count - 1; i >= 0; i--) { - ResultItemSpec item = SelectedItems[selectedResultsListBox.SelectedIndices[i]]; - SelectedItems.Remove(item); + ResultItemSpec item = SelectedItems_SingleWM[selectedResultsListBox.SelectedIndices[i]]; + if (combined) + { + SelectedItems_CombinedWM.Remove(item); + } + else + { + SelectedItems_SingleWM.Remove(item); + } } - AvailableItems = GetListOfAvailableItems(); RedrawAvailable(); RedrawSelected(); } @@ -225,8 +244,25 @@ namespace TBF.Forms { /// Remove all items from 'Selected' list - SelectedItems.Clear(); - AvailableItems = GetListOfAvailableItems(); + if (combined) + { + SelectedItems_CombinedWM.Clear(); + } + else + { + SelectedItems_SingleWM.Clear(); + } + RedrawAvailable(); + RedrawSelected(); + } + + private void singleRadioButton_CheckedChanged(object sender, EventArgs e) + { + } + + private void combinedRadioButton_CheckedChanged(object sender, EventArgs e) + { + combined = combinedRadioButton.Checked; RedrawAvailable(); RedrawSelected(); } diff --git a/TestBenchFramework/LocalSettings.cs b/TestBenchFramework/LocalSettings.cs index fc4c51bfa..bb9f831ef 100644 --- a/TestBenchFramework/LocalSettings.cs +++ b/TestBenchFramework/LocalSettings.cs @@ -127,9 +127,11 @@ namespace TBF public int OneProcedureDlgWidth; public int OneProcedureDlgHeight; - + /// Configuration of results public Forms.ResultsConfig.Meters ResultsConfigMeters; public Forms.ResultsConfig.TestsAre ResultsConfigTests; + public string[] SelectedItems_SingleWM; + public string[] SelectedItems_CombinedWM; /// /// Copy public fields from a LocalSettings object to this object. @@ -204,7 +206,15 @@ namespace TBF ResultsConfigMeters = ls.ResultsConfigMeters; ResultsConfigTests = ls.ResultsConfigTests; - } + + int count = (ls.SelectedItems_SingleWM != null) ? ls.SelectedItems_SingleWM.Length : 0; + SelectedItems_SingleWM = new string[count]; + for (int i = 0; i < count; i++) SelectedItems_SingleWM[i] = ls.SelectedItems_SingleWM[i]; + + count = (ls.SelectedItems_CombinedWM != null) ? ls.SelectedItems_CombinedWM.Length : 0; + SelectedItems_CombinedWM = new string[count]; + for (int i = 0; i < count; i++) SelectedItems_CombinedWM[i] = ls.SelectedItems_CombinedWM[i]; + } } [XmlIgnore] diff --git a/TestBenchFramework/ProcedureDlg.cs b/TestBenchFramework/ProcedureDlg.cs index 3fab89945..ead9b9189 100644 --- a/TestBenchFramework/ProcedureDlg.cs +++ b/TestBenchFramework/ProcedureDlg.cs @@ -804,7 +804,6 @@ namespace TBF return; /// NOK } } - } private void processListViewEx_SubItemClicked(object sender, SubItemEventArgs e) diff --git a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs index b3ab59fe6..03918c2a6 100644 --- a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs +++ b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs @@ -16,6 +16,9 @@ namespace TBF.Screens public TBF.Forms.ResultsConfig.Meters MetersArrangement; public TBF.Forms.ResultsConfig.TestsAre TestsArrangement; + public IList SelectedItems_SingleWM; + public IList SelectedItems_CombinedWM; + IList tests; IList testResults; @@ -55,6 +58,8 @@ namespace TBF.Screens MetersArrangement = Program.LocalSettings.ResultsConfigMeters; TestsArrangement = Program.LocalSettings.ResultsConfigTests; + SelectedItems_SingleWM = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.SelectedItems_SingleWM); + SelectedItems_CombinedWM = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.SelectedItems_CombinedWM); RedrawAll(); } @@ -67,13 +72,18 @@ namespace TBF.Screens TBF.Forms.ResultsConfig dlg = new TBF.Forms.ResultsConfig(); dlg.TestsArrangement = TestsArrangement; dlg.MetersArrangement = MetersArrangement; + dlg.SelectedItems_SingleWM = SelectedItems_SingleWM; + dlg.SelectedItems_CombinedWM = SelectedItems_CombinedWM; if (DialogResult.OK == dlg.ShowDialog()) { MetersArrangement = dlg.MetersArrangement; TestsArrangement = dlg.TestsArrangement; + SelectedItems_SingleWM = dlg.SelectedItems_SingleWM; Program.LocalSettings.ResultsConfigMeters = MetersArrangement; Program.LocalSettings.ResultsConfigTests = TestsArrangement; + Program.LocalSettings.SelectedItems_SingleWM = Forms.ResultItemSpec.ToStrArray(SelectedItems_SingleWM); + Program.LocalSettings.SelectedItems_CombinedWM = Forms.ResultItemSpec.ToStrArray(SelectedItems_CombinedWM); Program.LocalSettings.Save(); } RedrawAll();