/// /// Copyright (c) 2013-2021 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Windows.Forms; using TBF.UiBridge; using TBF.Rig; using TBF.UI.Shared; namespace TBF.UI { public class TestProgressControls { System.Windows.Forms.Control parent; /// parent is progressFlowLayoutPanel of the only MainWnd instance IList progresses; TestProgressCtrl currentProgress; public TestProgressControls(Control parent) { this.parent = parent; progresses = new List(); 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); }; } void ResetProgressBars(Config.Entities.Procedure procedure) { parent.SuspendLayout(); currentProgress = null; parent.Controls.Clear(); progresses.Clear(); if (procedure.GetTestInstances() == null) { procedure.UpdateTestInstances(TBF.Rig.StateMachine.LoopStartNames, TBF.Rig.StateMachine.LoopEndNames, null); } foreach (var ti in procedure.GetTestInstances()) { var progress = new TestProgressCtrl(ti.Name, ti.Test.Id, ti.Test.Part, ti.Repetition); progresses.Add(progress); parent.Controls.Add(progress); } parent.ResumeLayout(); } public void ProcedureSelectedInUI(object sender, ProcedureSelectedEventArgs args) { ResetProgressBars(args.Procedure); } void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args) { ResetProgressBars(args.Procedure); } 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 = TestProgressCtrl.Result.NotDone; return; } } } currentProgress = null; } void OnTestProgress(object sender, TestProgressEventArgs args) { foreach (var prgrs in progresses) { if (prgrs.ComplTestName == args.TestName && prgrs.Part == args.Part && prgrs.RepetitionNr == args.RepetitionNr) { prgrs.Progress = args.Progress; break; } } } void OnTestCompleted(object sender, TestCompletedEventArgs args) { if (currentProgress != null) { // Test is 'failed' if any meter failed /// TODO: Reimplement //foreach (var meterTestResult in args.TestResult.Meters) //{ // if (!meterTestResult.Passed) // { // currentProgress.TestResult = UiControls.TestProgressCtrl.Result.Failed; // return; // } //} currentProgress.TestResult = TestProgressCtrl.Result.Failed; } } void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args) { ResetProgressBars(args.Procedure); } } }