tbf/TestBenchFramework/TestProgressControls.cs

132 lines
4.0 KiB
C#

///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using TBF.UiBridge;
namespace TBF
{
public class TestProgressControls
{
System.Windows.Forms.Control parent; /// parent is progressFlowLayoutPanel of the only MainWnd instance
IList<UiControls.TestProgressCtrl> progresses;
UiControls.TestProgressCtrl currentProgress;
public TestProgressControls(Control parent)
{
this.parent = parent;
progresses = null;
currentProgress = null;
Bridge.ProcedureSelectedHandler += delegate(object sender, ProcedureSelectedEventArgs args)
{
if (Program.MainWnd.InvokeRequired)
{
Program.MainWnd.Invoke(new EventHandler<ProcedureSelectedEventArgs>(OnProcedureSelected), sender, args);
}
else OnProcedureSelected(sender, args);
};
Bridge.TestSelectedHandler += delegate(object sender, TestSelectedEventArgs args)
{
if (Program.MainWnd.InvokeRequired)
{
Program.MainWnd.Invoke(new EventHandler<TestSelectedEventArgs>(OnTestSelected), sender, args);
}
else OnTestSelected(sender, args);
};
Bridge.TestProgressHandler += delegate(object sender, TestProgressEventArgs args)
{
if (Program.MainWnd.InvokeRequired)
{
Program.MainWnd.Invoke(new EventHandler<TestProgressEventArgs>(OnTestProgress), sender, args);
}
else OnTestProgress(sender, args);
};
Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args)
{
if (Program.MainWnd.InvokeRequired)
{
Program.MainWnd.Invoke(new EventHandler<TestCompletedEventArgs>(OnTestCompleted), sender, args);
}
else OnTestCompleted(sender, args);
};
Bridge.ProcedureCompletedHandler += delegate(object sender, ProcedureCompletedEventArgs args)
{
if (Program.MainWnd.InvokeRequired)
{
Program.MainWnd.Invoke(new EventHandler<ProcedureCompletedEventArgs>(OnProcedureCompleted), sender, args);
}
else OnProcedureCompleted(sender, args);
};
}
public void ProcedureSelectedInUI(object sender, ProcedureSelectedEventArgs args)
{
OnProcedureSelected(sender, args);
}
void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args)
{
currentProgress = null;
parent.Controls.Clear();
progresses = new List<UiControls.TestProgressCtrl>();
foreach (var test in args.Procedure.Tests)
{
for (int i = 1; i <= test.Repeats; i++)
{
UiControls.TestProgressCtrl prgrs =
new UiControls.TestProgressCtrl(test.Id, Utils.TestTitle(test, i), i, test.Repeats);
progresses.Add(prgrs);
parent.Controls.Add(prgrs);
}
}
}
void OnTestSelected(object sender, TestSelectedEventArgs args)
{
if (progresses != null)
{
foreach (var prgrs in progresses)
{
if ((prgrs.TestId == args.Test.Id) && (prgrs.RepetitionNr == args.RepetitionNr))
{
currentProgress = prgrs;
currentProgress.Progress = 0;
currentProgress.TestResult = UiControls.TestProgressCtrl.Result.NotDone;
return;
}
}
}
currentProgress = null;
}
void OnTestProgress(object sender, TestProgressEventArgs args)
{
if (currentProgress != null) currentProgress.Progress = args.Progress;
}
void OnTestCompleted(object sender, TestCompletedEventArgs args)
{
if (currentProgress != null)
{
// Test is 'failed' if any meter failed
foreach (var meterTestResult in args.TestResult.Meters)
{
if (!meterTestResult.Passed)
{
currentProgress.TestResult = UiControls.TestProgressCtrl.Result.Failed;
return;
}
}
currentProgress.TestResult = UiControls.TestProgressCtrl.Result.Failed;
}
}
void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args)
{
}
}
}