Results on screen modified to accept new Results. ItemSpec introduced.

This commit is contained in:
Milan Hanajik
2016-01-04 23:39:28 +01:00
parent d91ca4b56b
commit 511d86a186
7 changed files with 369 additions and 227 deletions
+137 -206
View File
@@ -23,16 +23,16 @@ namespace TBF.Screens
public TestsArrangement TestsArrangement;
public int NrMetersInOneGroup;
public IList<ResultItemSpec> RsltItems_Screen_SingleWM;
public IList<ResultItemSpec> RsltItems_Screen_CombinedWM;
public IList<ResultItemSpec> RsltItems_Printer_SingleWM;
public IList<ResultItemSpec> RsltItems_Printer_CombinedWM;
public IList<ResultItemSpec> RsltItems_Disk_SingleWM;
public IList<ResultItemSpec> RsltItems_Disk_CombinedWM;
public IList<Results.ItemSpec> RsltItems_Screen_SingleWM;
public IList<Results.ItemSpec> RsltItems_Screen_CombinedWM;
public IList<Results.ItemSpec> RsltItems_Printer_SingleWM;
public IList<Results.ItemSpec> RsltItems_Printer_CombinedWM;
public IList<Results.ItemSpec> RsltItems_Disk_SingleWM;
public IList<Results.ItemSpec> RsltItems_Disk_CombinedWM;
Procedure procedure;
IList<TestResult> 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);
}
/// <summary>
@@ -87,7 +98,7 @@ namespace TBF.Screens
/// </summary>
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);
}
/// <summary>
@@ -140,43 +151,19 @@ namespace TBF.Screens
/// <summary>
/// Re-draw the results. Apply new settings if they changed.
/// </summary>
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
/// <summary>
/// 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
/// </summary>
/// <param name="meterPartNr">Water meter nr (1-based): 1 .. Config.Data.WMsCount</param>
/// <param name="wMtr">Watermeter results entity</param>
/// <returns>A list of strings</returns>
IList<string> GetAllDecoratedTestNames(int meterPartNr)
IList<string> GetAllDecoratedTestNames(Results.Entities.WaterMeter wMtr)
{
IList<string> rslt = new List<string>();
IList<string> testNames = new List<string>();
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;
}
/// <summary>
/// Get a ListView control filled with results of the meter 'mtr'
/// </summary>
/// <param name="mtr">Water meter number (1-based): 1 .. Config.Data.WMsCount</param>
/// <returns>ListView object</returns>
ListView GetResultsTestsAreRows(int mtr, int printedWMNr)
ListView GetResultsTestsAreRows(Results.Entities.WaterMeter wMtr, int printedWMNr)
{
IList<ResultItemSpec> items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM);
if (procedure == null || procedure.Tests == null || items == null) return null;
compound = wMtr.Compound();
IList<Results.ItemSpec> 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<string> testNames = GetAllDecoratedTestNames(meterPartNr);
IList<TestResult> sortedResults = Utils.GetSortedTestResults(procedure, testResults, meterPartNr);
IList<string> 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;
}
/// <summary>
/// Get a ListView control filled with results of the meter 'mtr'
/// </summary>
/// <param name="mtr">Water meter number (1-based): 1 .. Config.Data.WMsCount</param>
/// <returns>ListView object</returns>
ListView GetResultsTestsAreColumns(int mtr, int printedWMNr)
ListView GetResultsTestsAreColumns(Results.Entities.WaterMeter wMtr, int printedWMNr)
{
IList<ResultItemSpec> items = (combined ? RsltItems_Screen_CombinedWM : RsltItems_Screen_SingleWM);
if (procedure == null || procedure.Tests == null || items == null) return null;
compound = wMtr.Compound();
IList<Results.ItemSpec> 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<TestResult> 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<TestResult>();
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);
}
}
}