From 511d86a18662e8e77f4fe06be0a9c5e42c5b7f0a Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Mon, 4 Jan 2016 23:39:28 +0100 Subject: [PATCH] Results on screen modified to accept new Results. ItemSpec introduced. --- Results/BatchResults.cs | 2 +- Results/Entities/MeterTestRslt.cs | 10 +- Results/ItemSpec.cs | 207 +++++++++++ Results/Results.csproj | 1 + TestBenchFramework/Forms/ResultsConfig.cs | 22 +- TestBenchFramework/LocalSettings.cs | 11 +- .../Screens/ResultsTabPageCtrl.cs | 343 +++++++----------- 7 files changed, 369 insertions(+), 227 deletions(-) create mode 100644 Results/ItemSpec.cs diff --git a/Results/BatchResults.cs b/Results/BatchResults.cs index a09906141..7c2176760 100644 --- a/Results/BatchResults.cs +++ b/Results/BatchResults.cs @@ -138,7 +138,7 @@ namespace Results public MeterTestRslt GetMeterTestRslt(string name, int wmnr0, Config.Entities.CompoundMeterId meterId) { - if (WaterMeters[wmnr0] != null) + if (WaterMeters[wmnr0] != null && !WaterMeters[wmnr0].Disabled) { foreach (var mtr in WaterMeters[wmnr0].MeterTestRslts) { diff --git a/Results/Entities/MeterTestRslt.cs b/Results/Entities/MeterTestRslt.cs index f54dfa595..b54c12d4d 100644 --- a/Results/Entities/MeterTestRslt.cs +++ b/Results/Entities/MeterTestRslt.cs @@ -33,8 +33,9 @@ namespace Results.Entities public virtual DateTime EndTime() { return TestRslt.EndTime; } public virtual double FlowSetTime() { return TestRslt.FlowSetTime; } public virtual double FlowMass() { return TestRslt.FlowMass; } - public virtual double FlowCTV() { return TestRslt.FlowVolume; } + public virtual double FlowVolume() { return TestRslt.FlowVolume; } public virtual double ErrorMaster() { return TestRslt.ErrorMaster; } + public virtual double DensityOut() { return TestRslt.DensityOut; } public virtual Components Components(){ return TestRslt.Components; } /// protected virtual TestData TestData() { return TestRslt.TestData; } @@ -49,6 +50,13 @@ namespace Results.Entities public virtual double ErrLimHi() { return TestData().ErrLimHi; } public virtual double Uncertainty() { return TestData().Uncertainty; } + public virtual string ProcedureName() { return WaterMeter.Batch.ProcedureName; } + public virtual int BatchNr() { return WaterMeter.Batch.BatchNr; } + public virtual string SerialNr() { return WaterMeter.SerialNr; } + public virtual string EndState() { return WaterMeter.EndState; } + public virtual double QRise() { return WaterMeter.QRise; } + public virtual double QFall() { return WaterMeter.QFall; } + public MeterTestRslt() { diff --git a/Results/ItemSpec.cs b/Results/ItemSpec.cs new file mode 100644 index 000000000..9935a8581 --- /dev/null +++ b/Results/ItemSpec.cs @@ -0,0 +1,207 @@ +/// +/// Copyright (c) 2013-2015 Sensus Metering Systems +/// +using System; +using System.Collections.Generic; +using Results.Entities; + +namespace Results +{ + public class ItemSpec + { + /// + /// Public fields + /// + public readonly string Name; /// Name-s of all items must be unique + public readonly string ClmnHeaderText; /// Text printed in the column header + + + /// + /// Function to pick a MeterTestResult field and convert it into a string + /// + public delegate string PrintDlgt(MeterTestRslt meterTestRslt); + + private readonly PrintDlgt printDlgt; + + public bool CanPrintSingle { get { return (printDlgt != null); } } + + /// Safe wrapper which replaces null-s by empty strings + public string Print(MeterTestRslt meterTestRslt) + { + string str = printDlgt(meterTestRslt); + return (str == null) ? string.Empty : str; + } + + + /// + /// Function to pick a MeterTestResult field and convert it into a string + /// + public delegate string PrintCombinedDlgt(MeterTestRslt mainMtrTestResult, + MeterTestRslt auxMtrTestResult, + MeterTestRslt compoundMtrTestResult); + + private readonly PrintCombinedDlgt printCombinedDlgt; + + public bool CanPrintCombined { get { return (printCombinedDlgt != null); } } + + /// Safe wrapper which replaces null-s by empty strings + public string PrintCombined(MeterTestRslt mainMtrTestResult, + MeterTestRslt auxMtrTestResult, + MeterTestRslt compoundMtrTestResult) + { + string str = printCombinedDlgt(mainMtrTestResult, auxMtrTestResult, compoundMtrTestResult); + return (str == null) ? string.Empty : str; + } + + + + /// + /// Public constructor + /// + public ItemSpec(string name, string clmnHeaderText, PrintDlgt printDlgt, PrintCombinedDlgt printCombinedDlgt) + { + Name = name; + ClmnHeaderText = clmnHeaderText; + this.printDlgt = printDlgt; + this.printCombinedDlgt = printCombinedDlgt; + } + + + /// Static list of all available items + public static readonly IList AllItems; + + /// Static constructor that initializes the list of all items + static ItemSpec() + { + AllItems = new List(); + + /// Common + + //AllItems.Add(new ResultItemSpec("Bench ID", "Bench ID", x => x.BenchID, + // (x, y, z) => x.BenchID)); + AllItems.Add(new ItemSpec("Test name", "Test", x => x.Name(), (x, y, z) => z.Name())); + AllItems.Add(new ItemSpec("Procedure name", "Procedure", x => x.ProcedureName(), (x, y, z) => z.ProcedureName())); + AllItems.Add(new ItemSpec("Batch number", "Batch nr.", x => x.BatchNr().ToString(), (x, y, z) => z.BatchNr().ToString())); + AllItems.Add(new ItemSpec("Test method", "Test method", x => x.Method(), (x, y, z) => z.Method())); + AllItems.Add(new ItemSpec("Density", "Density", x => x.DensityOut().ToString("F1"), (x, y, z) => z.DensityOut().ToString("F1"))); /// [kg/m3] + + /// Target values + AllItems.Add(new ItemSpec("Q from", "Q from [m3/h]", x => x.Qfrom().ToString("F3"), (x, y, z) => z.Qfrom().ToString("F3"))); + AllItems.Add(new ItemSpec("Q to", "Q to [m3/h]", x => x.Qto().ToString("F3"), (x, y, z) => z.Qto().ToString("F3"))); + AllItems.Add(new ItemSpec("Test volume", "Test vol. [l]", x => x.TargetVolume().ToString("F1"),(x, y, z) => z.TargetVolume().ToString("F1"))); + AllItems.Add(new ItemSpec("Error limit Lo", "Err.Lim.Lo [%]", x => x.ErrLimLo().ToString("F1"), (x, y, z) => z.ErrLimLo().ToString("F1"))); + AllItems.Add(new ItemSpec("Error limit Hi", "Err.Lim.Hi [%]", x => x.ErrLimHi().ToString("F1"), (x, y, z) => z.ErrLimHi().ToString("F1"))); + AllItems.Add(new ItemSpec("Uncertainty", "Uncertainty [%]",x => x.Uncertainty().ToString("F2"), (x, y, z) => z.Uncertainty().ToString("F2"))); + + /// Test results + AllItems.Add(new ItemSpec("Start time", "T start", x => x.StartTime().ToShortTimeString(), (x, y, z) => z.StartTime().ToShortTimeString())); + AllItems.Add(new ItemSpec("End time", "T end", x => x.EndTime().ToShortTimeString(), (x, y, z) => z.EndTime().ToShortTimeString())); + AllItems.Add(new ItemSpec("Test time", "T [s]", x => x.TestTime.ToString("F2"), (x, y, z) => z.TestTime.ToString("F2"))); + AllItems.Add(new ItemSpec("Flow", "Flow [m3/h]", x => DoubleToStr(x.FlowVolume(), 4), (x, y, z) => DoubleToStr(z.FlowVolume(), 4))); + AllItems.Add(new ItemSpec("T in", "T in", x => x.TestRslt.TempInAvrg.ToString("F2"), (x, y, z) => z.TestRslt.TempInAvrg.ToString("F2"))); + AllItems.Add(new ItemSpec("T out", "T out", x => x.TestRslt.TempOutAvrg.ToString("F2"), (x, y, z) => z.TestRslt.TempOutAvrg.ToString("F2"))); + AllItems.Add(new ItemSpec("T div", "T div", x => x.TestRslt.TempDivAvrg.ToString("F2"), (x, y, z) => z.TestRslt.TempDivAvrg.ToString("F2"))); + AllItems.Add(new ItemSpec("P up", "P up", x => x.TestRslt.PressUpAvrg.ToString("F3"), (x, y, z) => z.TestRslt.PressUpAvrg.ToString("F3"))); + AllItems.Add(new ItemSpec("P up start", "P up start", x => x.TestRslt.PressUpStart.ToString("F3"), (x, y, z) => z.TestRslt.PressUpStart.ToString("F3"))); + AllItems.Add(new ItemSpec("P up end", "P up end", x => x.TestRslt.PressUpEnd.ToString("F3"), (x, y, z) => z.TestRslt.PressUpEnd.ToString("F3"))); + AllItems.Add(new ItemSpec("P down", "P down", x => x.TestRslt.PressDownAvrg.ToString("F3"), (x, y, z) => z.TestRslt.PressDownAvrg.ToString("F3"))); + AllItems.Add(new ItemSpec("P down start", "P down start", x => x.TestRslt.PressDownStart.ToString("F3"), (x, y, z) => z.TestRslt.PressDownStart.ToString("F3"))); + AllItems.Add(new ItemSpec("P down end", "P down end", x => x.TestRslt.PressDownEnd.ToString("F3"), (x, y, z) => z.TestRslt.PressDownEnd.ToString("F3"))); + AllItems.Add(new ItemSpec("Reference error","Err.ref. [%]", x => x.TestRslt.ErrorMaster.ToString("F3"), (x, y, z) => z.TestRslt.ErrorMaster.ToString("F3"))); + AllItems.Add(new ItemSpec("Ambient temperature","T amb", x => x.TestRslt.AmbientTempAve.ToString("F1"), (x, y, z) => z.TestRslt.AmbientTempAve.ToString("F1"))); + AllItems.Add(new ItemSpec("Ambient pressure", "P amb", x => x.TestRslt.AmbientPressAve.ToString("F0"), (x, y, z) => z.TestRslt.AmbientPressAve.ToString("F0"))); + AllItems.Add(new ItemSpec("Ambient humidity", "H amb [%]",x => x.TestRslt.AmbientHumiAve.ToString("F1"), (x, y, z) => z.TestRslt.AmbientHumiAve.ToString("F1"))); + + /// Single and combined meter results + AllItems.Add(new ItemSpec("Volume", "Volume [l]", x => x.VolumeMeter.ToString("F3"), (x, y, z) => z.VolumeMeter.ToString("F3"))); + AllItems.Add(new ItemSpec("Reference volume", "Vol.ref. [l]", x => x.VolumeRef.ToString("F3"), (x, y, z) => z.VolumeRef.ToString("F3"))); + AllItems.Add(new ItemSpec("Error", "Error [%]", x => x.Error.ToString("F2"), (x, y, z) => z.Error.ToString("F2"))); + AllItems.Add(new ItemSpec("Passed", "Result", x => (x.Passed ? "OK" + "|Green" : "NOK" + "|Red"), + (x, y, z) => (z.Passed ? "OK" + "|Green" : "NOK" + "|Red"))); + /// Single water meters only results + AllItems.Add(new ItemSpec("Serial Nr", "s/n", x => x.SerialNr(), null)); + AllItems.Add(new ItemSpec("End state", "End state", x => x.EndState(), null)); + AllItems.Add(new ItemSpec("Pulses", "Pulses", x => x.PulsesMeter.ToString(), null)); + AllItems.Add(new ItemSpec("Pulses/liter", "Pulses/liter", x => x.PulsesPerLiter.ToString(), null)); + AllItems.Add(new ItemSpec("Reference pulses", "Ref.pulses", x => x.PulsesMaster.ToString(), null)); + + /// Combined water meters only results + AllItems.Add(new ItemSpec("Q rise", "Q rise [m3/h]", null, (x, y, z) => (z.QRise() == 0) ? "-" : DoubleToStr(z.QRise(), 4))); + AllItems.Add(new ItemSpec("Q fall", "Q fall [m3/h]", null, (x, y, z) => (z.QFall() == 0) ? "-" : DoubleToStr(z.QFall(), 4))); + AllItems.Add(new ItemSpec("Error large WM", "Error-L [%]", null, (x, y, z) => x.Error.ToString("F2"))); + AllItems.Add(new ItemSpec("Error small WM", "Error-S [%]", null, (x, y, z) => y.Error.ToString("F2"))); + AllItems.Add(new ItemSpec("Serial Nr large WM", "s/n", null, (x, y, z) => x.SerialNr())); + AllItems.Add(new ItemSpec("Serial Nr small WM", "s/n", null, (x, y, z) => y.SerialNr())); + AllItems.Add(new ItemSpec("End state large WM", "End state", null, (x, y, z) => x.EndState())); + AllItems.Add(new ItemSpec("End state small WM", "End state", null, (x, y, z) => y.EndState())); + } + + public static ItemSpec 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++) + { + ItemSpec item = GetItem(strArray[i]); + if (item != null) result.Add(item); + } + } + return result; + } + + /// + /// Converts float number to a string with the specified number of valid digits + /// + /// Float value to be converted to a string + /// Number of valid digits: 4, 3, or 2 (otherwise a full precision number is printed) + /// String representation of the float number + public static string DoubleToStr(double value, int validDigits) + { + if (validDigits == 4) + { + if (value >= 999.5 || value < -999.5) return value.ToString("F0"); + else if (value >= 99.95 || value < -99.95) return value.ToString("F1"); + else if (value >= 9.995 || value < -9.995) return value.ToString("F2"); + else if (value >= 0.9995 || value < -0.9995) return value.ToString("F3"); + else if (value >= 0.09995 || value < -0.09995) return value.ToString("F4"); + else if (value >= 0.009995 || value < -0.009995) return value.ToString("F5"); + else return value.ToString("F6"); + } + else if (validDigits == 3) + { + if (value >= 99.5 || value < -99.5) return value.ToString("F0"); + else if (value >= 9.95 || value < -9.95) return value.ToString("F1"); + else if (value >= 0.995 || value < -0.995) return value.ToString("F2"); + else if (value >= 0.0995 || value < -0.0995) return value.ToString("F3"); + else if (value >= 0.00995 || value < -0.00995) return value.ToString("F4"); + else if (value >= 0.000995 || value < -0.000995) return value.ToString("F5"); + else return value.ToString("F6"); + } + else if (validDigits == 2) + { + if (value >= 9.5 || value < -9.5) return value.ToString("F0"); + else if (value >= 0.95 || value < -0.95) return value.ToString("F1"); + else if (value >= 0.095 || value < -0.095) return value.ToString("F2"); + else if (value >= 0.0095 || value < -0.0095) return value.ToString("F3"); + else if (value >= 0.00095 || value < -0.00095) return value.ToString("F4"); + else return value.ToString("F5"); + } + else return value.ToString(); + } + } +} diff --git a/Results/Results.csproj b/Results/Results.csproj index 32272774b..87a97eba0 100644 --- a/Results/Results.csproj +++ b/Results/Results.csproj @@ -73,6 +73,7 @@ + diff --git a/TestBenchFramework/Forms/ResultsConfig.cs b/TestBenchFramework/Forms/ResultsConfig.cs index 0f8ebbbc8..21a16622f 100644 --- a/TestBenchFramework/Forms/ResultsConfig.cs +++ b/TestBenchFramework/Forms/ResultsConfig.cs @@ -25,13 +25,13 @@ namespace TBF.Forms public MetersArrangement MetersArrangement; public int NrMetersInOneGroup; - public IList currentlyAvailableItems; - public IList RsltItems_Screen_SingleWM; - public IList RsltItems_Screen_CombinedWM; - public IList RsltItems_Printer_SingleWM; - public IList RsltItems_Printer_CombinedWM; - public IList RsltItems_Disk_SingleWM; - public IList RsltItems_Disk_CombinedWM; + public IList currentlyAvailableItems; + public IList RsltItems_Screen_SingleWM; + public IList RsltItems_Screen_CombinedWM; + public IList RsltItems_Printer_SingleWM; + public IList RsltItems_Printer_CombinedWM; + public IList RsltItems_Disk_SingleWM; + public IList RsltItems_Disk_CombinedWM; bool combined; /// false = single meter items, true = combined meter items Device device; /// Screen, Printer or Disk @@ -95,7 +95,7 @@ namespace TBF.Forms /// Gets the list of selected items based on watermeter type and device selections /// /// List of selected result items - IList GetSelectedItems() + IList GetSelectedItems() { if (combined) { @@ -125,8 +125,8 @@ namespace TBF.Forms void RedrawAvailable() { availableResultsListBox.Items.Clear(); - currentlyAvailableItems = new List(); - foreach (var item in ResultItemSpec.AllItems) + currentlyAvailableItems = new List(); + foreach (var item in Results.ItemSpec.AllItems) { if (!GetSelectedItems().Contains(item) && (combined ? item.CanPrintCombined : item.CanPrintSingle)) { @@ -202,7 +202,7 @@ namespace TBF.Forms void availableResultsListBox_DoubleClick(object sender, EventArgs e) { /// Double click works when just one item is selected - IList itemsToRemove = new List(); + IList itemsToRemove = new List(); if (availableResultsListBox.SelectedIndices.Count == 1) { var item = currentlyAvailableItems[availableResultsListBox.SelectedIndices[0]]; diff --git a/TestBenchFramework/LocalSettings.cs b/TestBenchFramework/LocalSettings.cs index 8ae796359..b93797811 100644 --- a/TestBenchFramework/LocalSettings.cs +++ b/TestBenchFramework/LocalSettings.cs @@ -180,15 +180,10 @@ namespace TBF public string[] RsltItems_Disk_SingleWM; public string[] RsltItems_Disk_CombinedWM; - [XmlArrayAttribute("RsltsSingleClmnWdths")] - public int[] RsltsSingleClmnWdths; + [XmlArrayAttribute("RsltsClmnWidths")] + public int[] RsltsClmnWidths; [XmlIgnore] - public int RsltsSingleClmnCount { get { return (RsltsSingleClmnWdths != null) ? RsltsSingleClmnWdths.Length : 0; } } - - [XmlArrayAttribute("RsltsCombinedClmnWdths")] - public int[] RsltsCombinedClmnWdths; - [XmlIgnore] - public int RsltsCombinedClmnCount { get { return (RsltsCombinedClmnWdths != null) ? RsltsCombinedClmnWdths.Length : 0; } } + public int RsltsClmnCount { get { return (RsltsClmnWidths != null) ? RsltsClmnWidths.Length : 0; } } [XmlIgnore] public readonly bool AlwaysAskPasswdWhenUnlocking; diff --git a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs index 19302bb9c..2ed5df142 100644 --- a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs +++ b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs @@ -23,16 +23,16 @@ namespace TBF.Screens public TestsArrangement TestsArrangement; public int NrMetersInOneGroup; - public IList RsltItems_Screen_SingleWM; - public IList RsltItems_Screen_CombinedWM; - public IList RsltItems_Printer_SingleWM; - public IList RsltItems_Printer_CombinedWM; - public IList RsltItems_Disk_SingleWM; - public IList RsltItems_Disk_CombinedWM; + public IList RsltItems_Screen_SingleWM; + public IList RsltItems_Screen_CombinedWM; + public IList RsltItems_Printer_SingleWM; + public IList RsltItems_Printer_CombinedWM; + public IList RsltItems_Disk_SingleWM; + public IList RsltItems_Disk_CombinedWM; Procedure procedure; IList testResults; - bool combined; + bool compound; ListView firstListView; int lvWidth; @@ -53,6 +53,7 @@ namespace TBF.Screens } else OnProcedureSelected(sender, args); }; + Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args) { if (InvokeRequired) @@ -63,6 +64,16 @@ namespace TBF.Screens }; } + void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) + { + RedrawAll(TBF.BenchControl.Sequences.ProcessData.BatchRslts); + } + + void OnTestCompleted(object sender, TestCompletedEventArgs args) + { + RedrawAll(TBF.BenchControl.Sequences.ProcessData.BatchRslts); + } + private void ResultsTabPageCtrl_Load(object sender, EventArgs e) { // Localization @@ -72,14 +83,14 @@ namespace TBF.Screens MetersArrangement = Program.LocalSettings.ResultsConfigMeters; TestsArrangement = Program.LocalSettings.ResultsConfigTests; NrMetersInOneGroup = Math.Max(1, Program.LocalSettings.ResultsConfigMetersInOneGroup); - RsltItems_Screen_SingleWM = ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Screen_SingleWM); - RsltItems_Screen_CombinedWM = ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Screen_CombinedWM); - RsltItems_Printer_SingleWM = ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_SingleWM); - RsltItems_Printer_CombinedWM = ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_CombinedWM); - RsltItems_Disk_SingleWM = ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM); - RsltItems_Disk_CombinedWM = ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM); + RsltItems_Screen_SingleWM = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Screen_SingleWM); + RsltItems_Screen_CombinedWM = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Screen_CombinedWM); + RsltItems_Printer_SingleWM = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_SingleWM); + RsltItems_Printer_CombinedWM = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_CombinedWM); + RsltItems_Disk_SingleWM = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM); + RsltItems_Disk_CombinedWM = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM); - RedrawAll(); + RedrawAll(TBF.BenchControl.Sequences.ProcessData.BatchRslts); } /// @@ -87,7 +98,7 @@ namespace TBF.Screens /// private void configureButton_Click(object sender, EventArgs e) { - TBF.Forms.ResultsConfig dlg = new TBF.Forms.ResultsConfig(combined); + TBF.Forms.ResultsConfig dlg = new TBF.Forms.ResultsConfig(compound); dlg.TestsArrangement = TestsArrangement; dlg.MetersArrangement = MetersArrangement; @@ -117,15 +128,15 @@ namespace TBF.Screens Program.LocalSettings.ResultsConfigTests = TestsArrangement; Program.LocalSettings.ResultsConfigMetersInOneGroup = NrMetersInOneGroup; - Program.LocalSettings.RsltItems_Screen_SingleWM = ResultItemSpec.ToStrArray(RsltItems_Screen_SingleWM); - Program.LocalSettings.RsltItems_Screen_CombinedWM = ResultItemSpec.ToStrArray(RsltItems_Screen_CombinedWM); - Program.LocalSettings.RsltItems_Printer_SingleWM = ResultItemSpec.ToStrArray(RsltItems_Printer_SingleWM); - Program.LocalSettings.RsltItems_Printer_CombinedWM = ResultItemSpec.ToStrArray(RsltItems_Printer_CombinedWM); - Program.LocalSettings.RsltItems_Disk_SingleWM = ResultItemSpec.ToStrArray(RsltItems_Disk_SingleWM); - Program.LocalSettings.RsltItems_Disk_CombinedWM = ResultItemSpec.ToStrArray(RsltItems_Disk_CombinedWM); + Program.LocalSettings.RsltItems_Screen_SingleWM = Results.ItemSpec.ToStrArray(RsltItems_Screen_SingleWM); + Program.LocalSettings.RsltItems_Screen_CombinedWM = Results.ItemSpec.ToStrArray(RsltItems_Screen_CombinedWM); + Program.LocalSettings.RsltItems_Printer_SingleWM = Results.ItemSpec.ToStrArray(RsltItems_Printer_SingleWM); + Program.LocalSettings.RsltItems_Printer_CombinedWM = Results.ItemSpec.ToStrArray(RsltItems_Printer_CombinedWM); + Program.LocalSettings.RsltItems_Disk_SingleWM = Results.ItemSpec.ToStrArray(RsltItems_Disk_SingleWM); + Program.LocalSettings.RsltItems_Disk_CombinedWM = Results.ItemSpec.ToStrArray(RsltItems_Disk_CombinedWM); Program.LocalSettings.Save(); } - RedrawAll(); + RedrawAll(TBF.BenchControl.Sequences.ProcessData.BatchRslts); } /// @@ -140,43 +151,19 @@ namespace TBF.Screens /// /// Re-draw the results. Apply new settings if they changed. /// - void RedrawAll() + void RedrawAll(Results.BatchResults results) { this.SuspendLayout(); try { - /// - /// Determine whether combined meter results are displayed - /// - combined = ((testResults != null) && - (testResults.Count > 0) && - (testResults[0].MetersKind == MetersKind.Combined)); - /// Determine how many water meters were enabled for result evaluation and printing int enabledWMsCount = 0; - bool[] wmIsEnabled = new bool[Config.Data.WMsCount]; - - if (combined) + for (int i = 0; i < results.WMPositionsCount; i++) { - enabledWMsCount = Config.Data.CompoundWMsCount; - } - else - { - for (int mtr0 = 0; mtr0 < Config.Data.WMsCount; mtr0++) + if (results.WaterMeters[i] != null && !results.WaterMeters[i].Disabled) { - if (testResults != null) - { - for (int t = 0; t < testResults.Count; t++) - { - if ((testResults[t].Meters.Count > mtr0) && !testResults[t].Meters[mtr0].Disabled) - { - wmIsEnabled[mtr0] = true; - enabledWMsCount++; - break; - } - } - } + enabledWMsCount++; } } @@ -200,19 +187,19 @@ namespace TBF.Screens flowLayoutPanel.AutoScroll = true; bool first = true; - for (int mtr = 1; mtr <= (combined ? Config.Data.CompoundWMsCount : Config.Data.WMsCount); mtr++) + for (int i = 0; i < results.WMPositionsCount; i++) { - if (combined || (testResults != null && testResults.Count > 0 && wmIsEnabled[mtr - 1])) + if (results.WaterMeters[i] != null && !results.WaterMeters[i].Disabled) { if (TestsArrangement == TestsArrangement.Rows) { - ListView lview = GetResultsTestsAreRows(mtr, mtr); + ListView lview = GetResultsTestsAreRows(results.WaterMeters[i], i + 1); if (first) { firstListView = lview; first = false; } if (lview != null) flowLayoutPanel.Controls.Add(lview); } else { - ListView lview = GetResultsTestsAreColumns(mtr, mtr); + ListView lview = GetResultsTestsAreColumns(results.WaterMeters[i], i + 1); if (first) { firstListView = lview; first = false; } if (lview != null) flowLayoutPanel.Controls.Add(lview); } @@ -253,93 +240,69 @@ namespace TBF.Screens /// - /// Get decorated test names for the specified watermeter - /// The parameter meterNr is used in the same way as the parameter meterNr of Utils.GetSortedTestResults + /// Get decorated test names for a specified watermeter /// - /// Water meter nr (1-based): 1 .. Config.Data.WMsCount + /// Watermeter results entity /// A list of strings - IList GetAllDecoratedTestNames(int meterPartNr) + IList GetAllDecoratedTestNames(Results.Entities.WaterMeter wMtr) { - IList rslt = new List(); + IList testNames = new List(); - foreach (var test in procedure.Tests) + foreach (var mtr in wMtr.MeterTestRslts) { - BenchControl.GenericDevices.ITestMethod method = - BenchControl.TbfComponents.FindComponent(test.Method) as BenchControl.GenericDevices.ITestMethod; - - if ((method != null) && method.Publish(test) && ((test.Part == 0) || (meterPartNr == 0) || (test.Part == meterPartNr))) - { - if (test.Repeats == 1) - { - rslt.Add(test.Name); - continue; - } - for (int rpt = 1; rpt <= test.Repeats; rpt++) - { - rslt.Add(test.Name + string.Format(" ({0}/{1})", rpt, test.Repeats)); - } - } + if (mtr.TestDone) testNames.Add(mtr.Name()); } - return rslt; + + return testNames; } + /// /// Get a ListView control filled with results of the meter 'mtr' /// /// Water meter number (1-based): 1 .. Config.Data.WMsCount /// ListView object - ListView GetResultsTestsAreRows(int mtr, int printedWMNr) + ListView GetResultsTestsAreRows(Results.Entities.WaterMeter wMtr, int printedWMNr) { - IList items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); - if (procedure == null || procedure.Tests == null || items == null) return null; + compound = wMtr.Compound(); + + IList items = (compound ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); ListView lview = GetListView(); // Header TBF.LocalSettings ls = Program.LocalSettings; - if (combined) + lview.Columns.Add(printedWMNr.ToString(), (ls.RsltsClmnCount > 0) ? ls.RsltsClmnWidths[0] : 40); + int i = 1; + foreach (var item in items) { - lview.Columns.Add(printedWMNr.ToString(), (ls.RsltsCombinedClmnCount > 0) ? ls.RsltsCombinedClmnWdths[0] : 40); - int i = 1; - foreach (var item in items) - { - lview.Columns.Add(item.ClmnHeaderText, (ls.RsltsCombinedClmnCount > i) ? ls.RsltsCombinedClmnWdths[i] : 70); - i++; - } - } - else - { - lview.Columns.Add(printedWMNr.ToString(), (ls.RsltsSingleClmnCount > 0) ? ls.RsltsSingleClmnWdths[0] : 40); - int i = 1; - foreach (var item in items) - { - lview.Columns.Add(item.ClmnHeaderText, (ls.RsltsSingleClmnCount > i) ? ls.RsltsSingleClmnWdths[i] : 70); - i++; - } + lview.Columns.Add(item.ClmnHeaderText, (ls.RsltsClmnCount > i) ? ls.RsltsClmnWidths[i] : 70); + i++; } - int meterPartNr = Utils.PartNr(mtr, combined); - IList testNames = GetAllDecoratedTestNames(meterPartNr); - IList sortedResults = Utils.GetSortedTestResults(procedure, testResults, meterPartNr); + + IList testNames = GetAllDecoratedTestNames(wMtr); int ix = 0; - foreach (var testRslt in sortedResults) + foreach (var mtr in wMtr.MeterTestRslts) { - ListViewItem lvi = new ListViewItem(testNames[ix++]); - if (testRslt != null) + if (mtr.TestDone) { + ListViewItem lvi = new ListViewItem(testNames[ix++]); + foreach (var item in items) { string str; - if (combined) + /// TODO: Reimplement + //if (compound) + //{ + // str = item.CanPrintCombined ? item.PrintCombined(testRslt.Meters[2 * mtr - 2], + // testRslt.Meters[2 * mtr - 1], + // testRslt.CombinedMeters[mtr - 1]) + // : string.Empty; + //} + //else { - str = item.CanPrintCombined ? item.PrintCombined(testRslt.Meters[2 * mtr - 2], - testRslt.Meters[2 * mtr - 1], - testRslt.CombinedMeters[mtr - 1]) - : string.Empty; - } - else - { - str = item.CanPrintSingle ? item.Print(testRslt.Meters[mtr - 1]) : string.Empty; + str = item.CanPrintSingle ? item.Print(mtr) : string.Empty; } string[] texts = str.Split(new char[] { '|' }); @@ -359,100 +322,92 @@ namespace TBF.Screens lvi.SubItems.Add(string.Empty); } } + + lview.Items.Add(lvi); } - lview.Items.Add(lvi); } return lview; } + /// /// Get a ListView control filled with results of the meter 'mtr' /// /// Water meter number (1-based): 1 .. Config.Data.WMsCount /// ListView object - ListView GetResultsTestsAreColumns(int mtr, int printedWMNr) + ListView GetResultsTestsAreColumns(Results.Entities.WaterMeter wMtr, int printedWMNr) { - IList items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); - if (procedure == null || procedure.Tests == null || items == null) return null; + compound = wMtr.Compound(); + + IList items = (compound ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); ListView lview = GetListView(); // Header TBF.LocalSettings ls = Program.LocalSettings; - if (combined) + lview.Columns.Add(printedWMNr.ToString(), (ls.RsltsClmnCount > 0) ? ls.RsltsClmnWidths[0] : 40); + int i = 1; + foreach (var str in GetAllDecoratedTestNames(wMtr)) { - lview.Columns.Add(printedWMNr.ToString(), (ls.RsltsCombinedClmnCount > 0) ? ls.RsltsCombinedClmnWdths[0] : 40); - int i = 1; - foreach (var str in GetAllDecoratedTestNames(Utils.PartNr(mtr, combined))) - { - lview.Columns.Add(str, (ls.RsltsCombinedClmnCount > i) ? ls.RsltsCombinedClmnWdths[i] : 70); - i++; - } + lview.Columns.Add(str, (ls.RsltsClmnCount > i) ? ls.RsltsClmnWidths[i] : 70); + i++; } - else - { - lview.Columns.Add(printedWMNr.ToString(), (ls.RsltsSingleClmnCount > 0) ? ls.RsltsSingleClmnWdths[0] : 40); - int i = 1; - foreach (var str in GetAllDecoratedTestNames(Utils.PartNr(mtr, combined))) - { - lview.Columns.Add(str, (ls.RsltsSingleClmnCount > i) ? ls.RsltsSingleClmnWdths[i] : 70); - i++; - } - } - - IList trs = Utils.GetSortedTestResults(procedure, testResults, Utils.PartNr(mtr, combined)); foreach (var item in items) { ListViewItem lvi = new ListViewItem(item.ClmnHeaderText); - if (combined) + if (compound) { - foreach (var tr in trs) - { - string str = (!item.CanPrintCombined || (tr == null) || (2 * mtr > tr.Meters.Count) || (mtr > tr.CombinedMeters.Count)) - ? string.Empty : item.PrintCombined(tr.Meters[2 * mtr - 2], - tr.Meters[2 * mtr - 1], - tr.CombinedMeters[mtr - 1]); - string[] texts = str.Split(new char[] { '|' }); - if (texts.Length == 1) - { - lvi.SubItems.Add(str); - } - else if (texts.Length == 2) - { - Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); - lvi.UseItemStyleForSubItems = false; - lvi.SubItems.Add(texts[0]); - lvi.SubItems[lvi.SubItems.Count - 1].BackColor = color; - } - else - { - lvi.SubItems.Add(string.Empty); - } - } + /// TODO: Reimplement + //foreach (var mtr in wMtr.MeterTestRslts) + //{ + // string str = (!item.CanPrintCombined || (tr == null) || (2 * mtr > tr.Meters.Count) || (mtr > tr.CombinedMeters.Count)) + // ? string.Empty : item.PrintCombined(tr.Meters[2 * mtr - 2], + // tr.Meters[2 * mtr - 1], + // tr.CombinedMeters[mtr - 1]); + // string[] texts = str.Split(new char[] { '|' }); + // if (texts.Length == 1) + // { + // lvi.SubItems.Add(str); + // } + // else if (texts.Length == 2) + // { + // Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); + // lvi.UseItemStyleForSubItems = false; + // lvi.SubItems.Add(texts[0]); + // lvi.SubItems[lvi.SubItems.Count - 1].BackColor = color; + // } + // else + // { + // lvi.SubItems.Add(string.Empty); + // } + //} } else { - foreach (var tr in trs) + foreach (var mtr in wMtr.MeterTestRslts) { - string str = (!item.CanPrintSingle || (tr == null) || (mtr > tr.Meters.Count)) ? string.Empty : item.Print(tr.Meters[mtr - 1]); + if (mtr.TestDone) + { + string str = !item.CanPrintSingle ? string.Empty : item.Print(mtr); - string[] texts = str.Split(new char[] { '|' }); - if (texts.Length == 1) - { - lvi.SubItems.Add(str); - } - else if (texts.Length == 2) - { - Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); - lvi.UseItemStyleForSubItems = false; - lvi.SubItems.Add(texts[0]); - lvi.SubItems[lvi.SubItems.Count - 1].BackColor = color; - } - else - { - lvi.SubItems.Add(string.Empty); + string[] texts = str.Split(new char[] { '|' }); + if (texts.Length == 1) + { + lvi.SubItems.Add(str); + } + else if (texts.Length == 2) + { + Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); + lvi.UseItemStyleForSubItems = false; + lvi.SubItems.Add(texts[0]); + lvi.SubItems[lvi.SubItems.Count - 1].BackColor = color; + } + else + { + lvi.SubItems.Add(string.Empty); + } } } } @@ -464,43 +419,19 @@ namespace TBF.Screens #endregion - void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) - { - procedure = args.Procedure; - testResults = new List(); - RedrawAll(); - } - - void OnTestCompleted(object sender, TestCompletedEventArgs args) - { - RedrawAll(); - } - private void columnWidthsButton_Click(object sender, EventArgs e) { if (firstListView == null) return; /// Update the column widths - if (combined) + Program.LocalSettings.RsltsClmnWidths = new int[firstListView.Columns.Count]; + for (int i = 0; i < firstListView.Columns.Count; i++) { - Program.LocalSettings.RsltsCombinedClmnWdths = new int[firstListView.Columns.Count]; - for (int i = 0; i < firstListView.Columns.Count; i++) - { - Program.LocalSettings.RsltsCombinedClmnWdths[i] = firstListView.Columns[i].Width; - } - Program.LocalSettings.Save(); - } - else - { - Program.LocalSettings.RsltsSingleClmnWdths = new int[firstListView.Columns.Count]; - for (int i = 0; i < firstListView.Columns.Count; i++) - { - Program.LocalSettings.RsltsSingleClmnWdths[i] = firstListView.Columns[i].Width; - } - Program.LocalSettings.Save(); + Program.LocalSettings.RsltsClmnWidths[i] = firstListView.Columns[i].Width; } + Program.LocalSettings.Save(); - RedrawAll(); + RedrawAll(TBF.BenchControl.Sequences.ProcessData.BatchRslts); } } }