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 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(OnProcedureSelected), sender, args); } else OnProcedureSelected(sender, args); }; Bridge.TestSelectedHandler += delegate(object sender, TestSelectedEventArgs args) { if (Program.MainWnd.InvokeRequired) { Program.MainWnd.Invoke(new EventHandler(OnTestSelected), sender, args); } else OnTestSelected(sender, args); }; Bridge.TestProgressHandler += delegate(object sender, TestProgressEventArgs args) { if (Program.MainWnd.InvokeRequired) { Program.MainWnd.Invoke(new EventHandler(OnTestProgress), sender, args); } else OnTestProgress(sender, args); }; Bridge.TestCompletedHandler += delegate(object sender, TestCompletedEventArgs args) { if (Program.MainWnd.InvokeRequired) { Program.MainWnd.Invoke(new EventHandler(OnTestCompleted), sender, args); } else OnTestCompleted(sender, args); }; Bridge.ProcedureCompletedHandler += delegate(object sender, ProcedureCompletedEventArgs args) { if (Program.MainWnd.InvokeRequired) { Program.MainWnd.Invoke(new EventHandler(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(); foreach (var test in args.Procedure.Tests) { /// Single test if (test.Repeats == 1) { UiControls.TestProgressCtrl prgrs = new UiControls.TestProgressCtrl(test.Id, test.Name); progresses.Add(prgrs); parent.Controls.Add(prgrs); continue; } /// More test repetitions for (int i = 1; i <= test.Repeats; i++) { UiControls.TestProgressCtrl prgrs = new UiControls.TestProgressCtrl(test.Id, test.Name, 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) { } } }