From ae5abde1e6e167d6f800bf6dbe0f1cfa6b8e9231 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Sun, 1 Feb 2015 13:43:04 +0100 Subject: [PATCH] Results printing and saving improced, correct order of tests, etc. --- .../GenericDevices/IResultsPrinter.cs | 1 + .../GenericDevices/IResultsWriter.cs | 2 +- .../Basic/BasicPrintDocument.cs | 122 ++++++++++---- .../ResultsPrinters/Basic/Printer.cs | 23 ++- .../ResultsPrinters/Munich/Printer.cs | 2 + .../ResultsWriters/Basic/Writer.cs | 156 +++++++++++------- .../BenchControl/Sequences/MainSeq.cs | 4 +- .../Screens/ResultsTabPageCtrl.cs | 47 +----- TestBenchFramework/Utils.cs | 44 +++++ 9 files changed, 262 insertions(+), 139 deletions(-) diff --git a/TestBenchFramework/BenchControl/GenericDevices/IResultsPrinter.cs b/TestBenchFramework/BenchControl/GenericDevices/IResultsPrinter.cs index de9fb7be1..863170ad9 100644 --- a/TestBenchFramework/BenchControl/GenericDevices/IResultsPrinter.cs +++ b/TestBenchFramework/BenchControl/GenericDevices/IResultsPrinter.cs @@ -12,6 +12,7 @@ namespace TBF.BenchControl.GenericDevices /// Reference to the operation IOperation PrintResultsOp(BenchControl.BenchId.Component benchId, IList waterMeters, + Entities.Procedure procedure, IList results, string title); } diff --git a/TestBenchFramework/BenchControl/GenericDevices/IResultsWriter.cs b/TestBenchFramework/BenchControl/GenericDevices/IResultsWriter.cs index c2c206cee..2e08fdf56 100644 --- a/TestBenchFramework/BenchControl/GenericDevices/IResultsWriter.cs +++ b/TestBenchFramework/BenchControl/GenericDevices/IResultsWriter.cs @@ -10,6 +10,6 @@ namespace TBF.BenchControl.GenericDevices /// /// Results to write into a file /// Reference to the operation - IOperation WriteResultsOp(IList results); + IOperation WriteResultsOp(Entities.Procedure procedure, IList results); } } diff --git a/TestBenchFramework/BenchControl/ResultsPrinters/Basic/BasicPrintDocument.cs b/TestBenchFramework/BenchControl/ResultsPrinters/Basic/BasicPrintDocument.cs index 1738d044a..975776585 100644 --- a/TestBenchFramework/BenchControl/ResultsPrinters/Basic/BasicPrintDocument.cs +++ b/TestBenchFramework/BenchControl/ResultsPrinters/Basic/BasicPrintDocument.cs @@ -29,7 +29,8 @@ namespace TBF.BenchControl.ResultsPrinters.Basic /// Data to print /// readonly BenchControl.BenchId.Component benchId; - readonly IList results; + readonly Entities.Procedure procedure; + readonly IList unsortedResults; readonly bool combined; readonly DateTime dateTime; @@ -38,18 +39,22 @@ namespace TBF.BenchControl.ResultsPrinters.Basic /// readonly IList resultItems; + /// /// Constructor /// /// Text to be printed public BasicPrintDocument(BenchControl.BenchId.Component benchId, - IList results) + Entities.Procedure procedure, + IList unsortedResults) { this.benchId = benchId; - this.results = results; + this.procedure = procedure; + this.unsortedResults = unsortedResults; + dateTime = DateTime.Now; - if ((results != null) && (results.Count != 0) && (results[0].MetersKind == Entities.MetersKind.Single)) + if ((unsortedResults != null) && (unsortedResults.Count != 0) && (unsortedResults[0].MetersKind == Entities.MetersKind.Single)) { resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Printer_SingleWM); combined = false; @@ -116,7 +121,7 @@ namespace TBF.BenchControl.ResultsPrinters.Basic /// Header ///---------- RectangleF printArea = new RectangleF(TitleX, TitleY, 667, 40); - e.Graphics.DrawString(results[0].ProtocolTitle, titleFont, Brushes.Black, printArea); + e.Graphics.DrawString(unsortedResults[0].ProtocolTitle, titleFont, Brushes.Black, printArea); string[] leftColumn = new string[] { @@ -131,18 +136,18 @@ namespace TBF.BenchControl.ResultsPrinters.Basic string[] rightColumn = new string[] { - results[0].CycleNr.ToString(), + unsortedResults[0].CycleNr.ToString(), //dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(), string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"), dateTime.Month.ToString("D2"), dateTime.Day.ToString("D2"), dateTime.Hour.ToString("D2"), dateTime.Minute.ToString("D2")), - results[0].ProcedureName, + procedure.Name, Entities.User.CurrentUser.Name, - results[0].AmbientTempAve.ToString("F1") + " °C", - results[0].AmbientPressAve.ToString("F0") + " mbar", - results[0].AmbientHumiAve.ToString("F0") + " %", + unsortedResults[0].AmbientTempAve.ToString("F1") + " °C", + unsortedResults[0].AmbientPressAve.ToString("F0") + " mbar", + unsortedResults[0].AmbientHumiAve.ToString("F0") + " %", }; /// Determine max. left column width in characters @@ -160,26 +165,36 @@ namespace TBF.BenchControl.ResultsPrinters.Basic /// Body ///-------- int nrWMs = (combined ? Program.WMsCount / 2 : Program.WMsCount); - int OneWmHeight = (results.Count + 4) * SpacingOne; + int nextWmTop = BodyTop; if (combined) { - for (int wmNr = 0; wmNr < Program.WMsCount / 2; wmNr++) PrintCombinedWM(e, wmNr, BodyTop + OneWmHeight * wmNr); + for (int wmNr = 0; wmNr < Program.WMsCount / 2; wmNr++) + { + nextWmTop += PrintCombinedWM(e, wmNr, nextWmTop); + } } else { - for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++) PrintSingleWM(e, wmNr, BodyTop + OneWmHeight * wmNr); + for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++) + { + nextWmTop += PrintSingleWM(e, wmNr, nextWmTop); + } } e.HasMorePages = false; } + /// /// Print one water meter results /// /// Water meter number /// Top coordinate of watermeter data - void PrintSingleWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top) + /// The height of the printed section + int PrintSingleWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top) { + IList results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr); + /// Determin column widths float[] columnPos = new float[resultItems.Count + 1]; columnPos[0] = 100.0f; @@ -189,8 +204,11 @@ namespace TBF.BenchControl.ResultsPrinters.Basic float columnWidth = e.Graphics.MeasureString(resultItems[i].ClmnHeaderText, font).Width; foreach (var tr in results) { - float width = e.Graphics.MeasureString(resultItems[i].Print(tr.Meters[wmNr]), font).Width; - if (width > columnWidth) columnWidth = width; + if (tr != null) + { + float width = e.Graphics.MeasureString(resultItems[i].Print(tr.Meters[wmNr]), font).Width; + if (width > columnWidth) columnWidth = width; + } } columnPos[i + 1] = columnPos[i] + columnWidth + 20.0f; } @@ -199,10 +217,10 @@ namespace TBF.BenchControl.ResultsPrinters.Basic string wmText = string.Format("Water meter {0}", wmNr + 1); PrintAt(e, 100, top, wmText); - if (!string.IsNullOrEmpty(results[0].Meters[wmNr].SerialNr)) + if (!string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr)) { PrintAt(e, 100 + (int)e.Graphics.MeasureString(wmText, font).Width, top, - string.Format(", s/n = {0}", results[0].Meters[wmNr].SerialNr)); + string.Format(", s/n = {0}", unsortedResults[0].Meters[wmNr].SerialNr)); } /// Horizontal line @@ -220,25 +238,44 @@ namespace TBF.BenchControl.ResultsPrinters.Basic for (int r = 0; r < results.Count; r++) { - for (int i = 0; i < resultItems.Count; i++) + if (results[r] != null) { - string text = resultItems[i].Print(results[r].Meters[wmNr]); - PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text); + for (int i = 0; i < resultItems.Count; i++) + { + string text = resultItems[i].Print(results[r].Meters[wmNr]); + + string[] texts = text.Split(new char[] { '|' }); + + if (texts.Length == 2) + { + Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); + text = texts[0]; + /// TODO: How to print colors? + } + + PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text); + } } } /// Horizontal line horY = top + 30 + SpacingOne * (results.Count + 1); e.Graphics.DrawLine(new Pen(Color.Black, 2), new Point(tableLeftX, horY), new Point(tableRightX, horY)); + + return (results.Count + 4) * SpacingOne; } + /// /// Print one combined water meter results /// /// Water meter number /// Top coordinate of watermeter data - void PrintCombinedWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top) + /// The height of the printed section + int PrintCombinedWM(System.Drawing.Printing.PrintPageEventArgs e, int wmNr, int top) { + IList results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr); + /// Determin column widths float[] columnPos = new float[resultItems.Count + 1]; columnPos[0] = 100.0f; @@ -248,10 +285,13 @@ namespace TBF.BenchControl.ResultsPrinters.Basic float columnWidth = e.Graphics.MeasureString(resultItems[i].ClmnHeaderText, font).Width; foreach (var tr in results) { - float width = e.Graphics.MeasureString(resultItems[i].PrintCombined(tr.Meters[2 * wmNr], - tr.Meters[2 * wmNr + 1], - tr.CombinedMeters[wmNr]), font).Width; - if (width > columnWidth) columnWidth = width; + if (tr != null) + { + float width = e.Graphics.MeasureString(resultItems[i].PrintCombined(tr.Meters[2 * wmNr], + tr.Meters[2 * wmNr + 1], + tr.CombinedMeters[wmNr]), font).Width; + if (width > columnWidth) columnWidth = width; + } } columnPos[i + 1] = columnPos[i] + columnWidth + 20.0f; } @@ -260,10 +300,12 @@ namespace TBF.BenchControl.ResultsPrinters.Basic string wmText = string.Format("Water meter {0}", wmNr + 1); PrintAt(e, 100, top, wmText); - if (!string.IsNullOrEmpty(results[0].Meters[2 * wmNr].SerialNr)) + if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr].SerialNr)) { PrintAt(e, 100 + (int)e.Graphics.MeasureString(wmText, font).Width, top, - string.Format(", Main s/n: {0}, Aux. s/n:{1}", results[0].Meters[2 * wmNr].SerialNr, results[0].Meters[2 * wmNr + 1].SerialNr)); + string.Format(", Main s/n: {0}, Aux. s/n:{1}", + unsortedResults[0].Meters[2 * wmNr].SerialNr, + unsortedResults[0].Meters[2 * wmNr + 1].SerialNr)); } /// Horizontal line @@ -281,18 +323,32 @@ namespace TBF.BenchControl.ResultsPrinters.Basic for (int r = 0; r < results.Count; r++) { - for (int i = 0; i < resultItems.Count; i++) + if (results[r] != null) { - string text = resultItems[i].PrintCombined(results[r].Meters[2 * wmNr], - results[r].Meters[2 * wmNr + 1], - results[r].CombinedMeters[wmNr]); - PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text); + for (int i = 0; i < resultItems.Count; i++) + { + string text = resultItems[i].PrintCombined(results[r].Meters[2 * wmNr], + results[r].Meters[2 * wmNr + 1], + results[r].CombinedMeters[wmNr]); + string[] texts = text.Split(new char[] { '|' }); + + if (texts.Length == 2) + { + Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); + text = texts[0]; + /// TODO: How to print colors? + } + + PrintAt(e, (int)columnPos[i], top + 30 + SpacingOne * (r + 1), text); + } } } /// Horizontal line horY = top + 30 + SpacingOne * (results.Count + 1); e.Graphics.DrawLine(new Pen(Color.Black, 2), new Point(tableLeftX, horY), new Point(tableRightX, horY)); + + return (results.Count + 4) * SpacingOne; } diff --git a/TestBenchFramework/BenchControl/ResultsPrinters/Basic/Printer.cs b/TestBenchFramework/BenchControl/ResultsPrinters/Basic/Printer.cs index 1e1856019..2a2dee6b3 100644 --- a/TestBenchFramework/BenchControl/ResultsPrinters/Basic/Printer.cs +++ b/TestBenchFramework/BenchControl/ResultsPrinters/Basic/Printer.cs @@ -18,7 +18,8 @@ namespace TBF.BenchControl.ResultsPrinters.Basic /// Data to print /// BenchControl.BenchId.Component benchId; - IList results; + Entities.Procedure procedure; + IList unsortedResults; public Printer(PrinterCfg cfg) : base(cfg) @@ -30,22 +31,34 @@ namespace TBF.BenchControl.ResultsPrinters.Basic /// /// Prints the test cycle results, Events: Event.ResultsPrinted /// - /// Results to print + /// Bench ID + /// This parameter is unused + /// Procedure to print the results of + /// Results to print + /// This parameter is unused /// Reference to the operation public IOperation PrintResultsOp(BenchControl.BenchId.Component benchId, IList waterMeters, - IList results, + Entities.Procedure procedure, + IList unsortedResults, string title) { + if ((procedure == null) || (unsortedResults == null) || (unsortedResults.Count < 1)) + { + return null; + } + this.benchId = benchId; - this.results = results; + this.procedure = procedure; + this.unsortedResults = unsortedResults; + return this; } /// Start this operation public void Start() { - new BasicPrintDocument(benchId, results).Print(); + new BasicPrintDocument(benchId, procedure, unsortedResults).Print(); } /// Run this operation diff --git a/TestBenchFramework/BenchControl/ResultsPrinters/Munich/Printer.cs b/TestBenchFramework/BenchControl/ResultsPrinters/Munich/Printer.cs index 9c5c8fc09..53933d1bd 100644 --- a/TestBenchFramework/BenchControl/ResultsPrinters/Munich/Printer.cs +++ b/TestBenchFramework/BenchControl/ResultsPrinters/Munich/Printer.cs @@ -35,10 +35,12 @@ namespace TBF.BenchControl.ResultsPrinters.Munich } /// Events: ResultsPrinted + /// Procedure to print the results of /// Results to print /// Reference to the operation public IOperation PrintResultsOp(BenchControl.BenchId.Component benchId, IList waterMeters, + Entities.Procedure procedure, IList results, string title) { diff --git a/TestBenchFramework/BenchControl/ResultsWriters/Basic/Writer.cs b/TestBenchFramework/BenchControl/ResultsWriters/Basic/Writer.cs index 12f789450..7183f27a4 100644 --- a/TestBenchFramework/BenchControl/ResultsWriters/Basic/Writer.cs +++ b/TestBenchFramework/BenchControl/ResultsWriters/Basic/Writer.cs @@ -23,7 +23,8 @@ namespace TBF.BenchControl.ResultsWriters.Basic /// /// Results to print /// - IList results; + Entities.Procedure procedure; + IList unsortedResults; DateTime dateTime; StreamWriter writer; @@ -81,30 +82,29 @@ namespace TBF.BenchControl.ResultsWriters.Basic /// /// Writes the test cycle results into a file, Events: Event.ResultsWritten /// - /// Results to write into the file + /// Procedure to print the results of + /// Results to write into the file /// Reference to the operation - public IOperation WriteResultsOp(IList results) + public IOperation WriteResultsOp(Entities.Procedure procedure, IList unsortedResults) { - if ((results == null) || (results.Count == 0) || - ((results[0].MetersKind != Entities.MetersKind.Single) && - (results[0].MetersKind != Entities.MetersKind.Combined))) - { - writer = null; - return this; - } - - if (results[0].MetersKind == Entities.MetersKind.Single) + if ((procedure == null) || (unsortedResults == null) || (unsortedResults.Count < 1)) { - resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM); - combined = false; + return null; + } + + this.procedure = procedure; + this.unsortedResults = unsortedResults; + + combined = (procedure.MetersKind == Entities.MetersKind.Combined); + if (combined) + { + resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM); } else { - resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM); - combined = true; + resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM); } - this.results = results; try { dateTime = DateTime.Now; @@ -126,7 +126,7 @@ namespace TBF.BenchControl.ResultsWriters.Basic ///---------- /// Header ///---------- - writer.WriteLine(results[0].ProtocolTitle); + writer.WriteLine(unsortedResults[0].ProtocolTitle); writer.WriteLine(string.Empty); string[] leftColumn = new string[] @@ -142,18 +142,18 @@ namespace TBF.BenchControl.ResultsWriters.Basic string[] rightColumn = new string[] { - results[0].CycleNr.ToString(), + unsortedResults[0].CycleNr.ToString(), //dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(), string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"), dateTime.Month.ToString("D2"), dateTime.Day.ToString("D2"), dateTime.Hour.ToString("D2"), dateTime.Minute.ToString("D2")), - results[0].ProcedureName, + procedure.Name, Entities.User.CurrentUser.Name, - results[0].AmbientTempAve.ToString("F1") + " °C", - results[0].AmbientPressAve.ToString("F0") + " mbar", - results[0].AmbientHumiAve.ToString("F0") + " %", + unsortedResults[0].AmbientTempAve.ToString("F1") + " °C", + unsortedResults[0].AmbientPressAve.ToString("F0") + " mbar", + unsortedResults[0].AmbientHumiAve.ToString("F0") + " %", }; /// Determine max. left column width in characters @@ -190,6 +190,8 @@ namespace TBF.BenchControl.ResultsWriters.Basic /// Water meter number void WriteSingleWM(int wmNr) { + IList results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr); + /// Determine column widths int[] columnWidths = new int[resultItems.Count]; int totalWidth = 0; @@ -198,23 +200,28 @@ namespace TBF.BenchControl.ResultsWriters.Basic columnWidths[i] = resultItems[i].ClmnHeaderText.Length; foreach (var tr in results) { - int len = resultItems[i].Print(tr.Meters[wmNr]).Length; - if (len > columnWidths[i]) columnWidths[i] = len; + if (tr != null) + { + int len = resultItems[i].Print(tr.Meters[wmNr]).Length; + if (len > columnWidths[i]) columnWidths[i] = len; + } } totalWidth += columnWidths[i]; } totalWidth += 3 * (resultItems.Count - 1); + /// Write water meter number and s/n writer.Write(string.Format("Water meter {0}", wmNr + 1)); - if (!string.IsNullOrEmpty(results[0].Meters[wmNr].SerialNr)) + if (!string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr)) { - writer.Write(string.Format(", s/n: {0}", results[0].Meters[wmNr].SerialNr)); + writer.Write(string.Format(", s/n: {0}", unsortedResults[0].Meters[wmNr].SerialNr)); } writer.WriteLine(string.Empty); + - /// Horizontal line - writer.WriteLine(new String('-', totalWidth)); + writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header + /// Write column headers for (int i = 0; i < resultItems.Count; i++) @@ -227,26 +234,35 @@ namespace TBF.BenchControl.ResultsWriters.Basic writer.WriteLine(string.Empty); } - /// Horizontal line - writer.WriteLine(new String('-', totalWidth)); + + writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body + /// Write table data foreach (var tr in results) { - for (int i = 0; i < resultItems.Count; i++) + if (tr != null) { - string text = resultItems[i].Print(tr.Meters[wmNr]); - writer.Write(text); + for (int i = 0; i < resultItems.Count; i++) + { + string text = resultItems[i].Print(tr.Meters[wmNr]); - if (i < resultItems.Count - 1) - writer.Write(new string(' ', columnWidths[i] - text.Length + 3)); - else - writer.WriteLine(string.Empty); + /// Get rid of the color information + string[] texts = text.Split(new char[] { '|' }); + if (texts.Length == 2) { text = texts[0]; } + + writer.Write(text); + + if (i < resultItems.Count - 1) + writer.Write(new string(' ', columnWidths[i] - text.Length + 3)); + else + writer.WriteLine(string.Empty); + } } } - /// Horizontal line - writer.WriteLine(new String('-', totalWidth)); + + writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body writer.WriteLine(string.Empty); writer.WriteLine(string.Empty); @@ -258,6 +274,8 @@ namespace TBF.BenchControl.ResultsWriters.Basic /// Water meter number void WriteCombinedWM(int wmNr) { + IList results = Utils.GetSortedTestResults(procedure, unsortedResults, wmNr); + /// Determin column widths int[] columnWidths = new int[resultItems.Count]; int totalWidth = 0; @@ -266,16 +284,32 @@ namespace TBF.BenchControl.ResultsWriters.Basic columnWidths[i] = resultItems[i].ClmnHeaderText.Length; foreach (var tr in results) { - int len = resultItems[i].PrintCombined(tr.Meters[2*wmNr], tr.Meters[2*wmNr+1], tr.CombinedMeters[wmNr]).Length; - if (len > columnWidths[i]) columnWidths[i] = len; + if (tr != null) + { + int len = resultItems[i].PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]).Length; + if (len > columnWidths[i]) columnWidths[i] = len; + } } totalWidth += columnWidths[i]; } totalWidth += 3 * (resultItems.Count - 1); - writer.WriteLine(string.Format("Water meter {0}, Main s/n: {1}, Aux. s/n:{2}", wmNr + 1, results[0].Meters[2 * wmNr].SerialNr, results[0].Meters[2 * wmNr + 1].SerialNr)); - writer.WriteLine(new String('-', totalWidth)); + /// Write water meter number and two s/n-s + writer.Write(string.Format("Water meter {0}", wmNr + 1)); + if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr].SerialNr)) + { + writer.Write(string.Format(", Main s/n: {0}", unsortedResults[0].Meters[2 * wmNr].SerialNr)); + } + if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr + 1].SerialNr)) + { + writer.Write(string.Format(", Aux. s/n:{0}", unsortedResults[0].Meters[2 * wmNr + 1].SerialNr)); + } + writer.WriteLine(string.Empty); + + + writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header + for (int i = 0; i < resultItems.Count; i++) { @@ -287,28 +321,34 @@ namespace TBF.BenchControl.ResultsWriters.Basic writer.WriteLine(string.Empty); } - writer.WriteLine(new String('-', totalWidth)); + + writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body + foreach (var tr in results) { - foreach (var item in resultItems) writer.Write(item.PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]) + " "); - writer.WriteLine(string.Empty); - } - foreach (var tr in results) - { - for (int i = 0; i < resultItems.Count; i++) + if (tr != null) { - string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]); - writer.Write(text); + for (int i = 0; i < resultItems.Count; i++) + { + string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr], tr.Meters[2 * wmNr + 1], tr.CombinedMeters[wmNr]); - if (i < resultItems.Count - 1) - writer.Write(new string(' ', columnWidths[i] - text.Length + 3)); - else - writer.WriteLine(string.Empty); + /// Get rid of the color information + string[] texts = text.Split(new char[] { '|' }); + if (texts.Length == 2) { text = texts[0]; } + + writer.Write(text); + + if (i < resultItems.Count - 1) + writer.Write(new string(' ', columnWidths[i] - text.Length + 3)); + else + writer.WriteLine(string.Empty); + } } } - writer.WriteLine(new String('-', totalWidth)); + writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body + writer.WriteLine(string.Empty); writer.WriteLine(string.Empty); } diff --git a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs index f690bf318..8d28a59da 100644 --- a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs +++ b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs @@ -382,8 +382,8 @@ namespace TBF.BenchControl.Sequences IResultsWriter writer = TbfComponents.FindComponent(StateMachine.Procedure.ResultsWriter) as IResultsWriter; IResultsPrinter printer = TbfComponents.FindComponent(StateMachine.Procedure.ResultsPrinter) as IResultsPrinter; State savingAndPrintingRslts = State.Create("MainSeq : Saving and printing results"); - if (writer != null) savingAndPrintingRslts.AddOperation(writer.WriteResultsOp(results)); - if (printer != null) savingAndPrintingRslts.AddOperation(printer.PrintResultsOp(BenchId, WaterMeters, results, protocolTitle)); + if (writer != null) savingAndPrintingRslts.AddOperation(writer.WriteResultsOp(StateMachine.Procedure, results)); + if (printer != null) savingAndPrintingRslts.AddOperation(printer.PrintResultsOp(BenchId, WaterMeters, StateMachine.Procedure, results, protocolTitle)); savingAndPrintingRslts.AddOperation(checkUiOp).EnterState(); do { diff --git a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs index e39f17245..b5d4b305c 100644 --- a/TestBenchFramework/Screens/ResultsTabPageCtrl.cs +++ b/TestBenchFramework/Screens/ResultsTabPageCtrl.cs @@ -24,7 +24,7 @@ namespace TBF.Screens public IList RsltItems_Disk_SingleWM; public IList RsltItems_Disk_CombinedWM; - IList tests; + Entities.Procedure procedure; IList testResults; bool combined; ListView firstListView; @@ -190,44 +190,11 @@ namespace TBF.Screens return lview; } - /// - /// Pre-fetch the test results corresponding to the columns or rows in the ListView - /// - /// Ordered list of test results containing null-s for missing results - IList GetCurrentTestResults(int meterNr) - { - IList rslts = new List(); - - foreach (var test in tests) - { - if ((test.Part == 0) || (test.Part == meterNr + 1)) - { - for (int rpt = 1; rpt <= test.Repeats; rpt++) - { - bool added = false; - if (testResults != null) - { - foreach (var testRslt in testResults) - { - if ((testRslt.TestId == test.Id) && (testRslt.RepetitionNr == rpt) && !testRslt.DoNotPublish) - { - rslts.Add(testRslt); - added = true; - break; - } - } - } - if (!added) rslts.Add(null); - } - } - } - return rslts; - } IList GetAllDecoratedTestNames(int meterNr) { IList rslt = new List(); - foreach (var test in tests) + foreach (var test in procedure.Tests) { if ((test.Part == 0) || (test.Part == meterNr + 1)) { @@ -253,7 +220,7 @@ namespace TBF.Screens ListView GetResultsTestsAreRows(int mtr) { IList items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); - if (tests == null || items == null) return null; + if (procedure == null || procedure.Tests == null || items == null) return null; ListView lview = GetListView(); @@ -282,7 +249,7 @@ namespace TBF.Screens IList testNames = GetAllDecoratedTestNames(mtr); int ix = 0; - foreach (var testRslt in GetCurrentTestResults(mtr)) + foreach (var testRslt in Utils.GetSortedTestResults(procedure, testResults, mtr)) { ListViewItem lvi = new ListViewItem(testNames[ix++]); if (testRslt != null) @@ -333,7 +300,7 @@ namespace TBF.Screens ListView GetResultsTestsAreColumns(int mtr) { IList items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM); - if (tests == null || items == null) return null; + if (procedure == null || procedure.Tests == null || items == null) return null; ListView lview = GetListView(); @@ -360,7 +327,7 @@ namespace TBF.Screens } } - IList trs = GetCurrentTestResults(mtr); + IList trs = Utils.GetSortedTestResults(procedure, testResults, mtr); foreach (var item in items) { @@ -424,7 +391,7 @@ namespace TBF.Screens void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) { - tests = args.Procedure.Tests; + procedure = args.Procedure; testResults = new List(); RedrawAll(); } diff --git a/TestBenchFramework/Utils.cs b/TestBenchFramework/Utils.cs index 8155d21bc..264930f30 100644 --- a/TestBenchFramework/Utils.cs +++ b/TestBenchFramework/Utils.cs @@ -103,6 +103,7 @@ namespace TBF return valvesClose; } + /// /// Get an array of RegulValve positions from a TransitionStep entity /// @@ -131,6 +132,7 @@ namespace TBF return result; } + /// /// Get an array of Pump-With-FM power percentages from a TransitionStep entity /// @@ -163,6 +165,48 @@ namespace TBF return result; } + + /// + /// Pre-fetch the test results from the currently available results. + /// The order or the returned results is the same as the order of tests in the procedure specification. + /// + /// Current procedure, it is used to determine the order of resulting test results + /// Currently available unsorted test results (can also be null) + /// Water meter number (only used when tests have nonzero 'Part' number) + /// Ordered list of test results containing null-s for missing results + public static IList GetSortedTestResults(Entities.Procedure procedure, IList testResults, int meterNr) + { + IList rslts = new List(); + + if (procedure == null) return rslts; /// Return an empty list if no procedure specified + + foreach (var test in procedure.Tests) + { + if ((test.Part == 0) || (test.Part == meterNr + 1)) + { + for (int rpt = 1; rpt <= test.Repeats; rpt++) + { + bool added = false; + if (testResults != null) + { + foreach (var testRslt in testResults) + { + if ((testRslt.TestId == test.Id) && (testRslt.RepetitionNr == rpt) && !testRslt.DoNotPublish) + { + rslts.Add(testRslt); + added = true; + break; + } + } + } + if (!added) rslts.Add(null); + } + } + } + return rslts; + } + + /// /// Converts float number to a string with the specified number of valid digits ///