using System; using System.Collections.Generic; using log4net; namespace TBF.UiBridge { /// /// Provides separation of the UI and the state machine. /// static class Bridge { static readonly ILog log = LogManager.GetLogger(typeof(Bridge)); static Queue ui2machineQueue; public static Queue Ui2MachineQueue { get { return ui2machineQueue; } } public static string SelectedProcedureName { get { return Program.MainWnd.ProcedureName; } } public static string SelectedTestName { get { return Program.MainWnd.BenchControlPanel.TestName; } } static Bridge() { ui2machineQueue = new Queue(); } /// /// This function should be called from the UI /// /// public static void Ui2Bench(UI2BenchCmd cmd) { lock (Ui2MachineQueue) { ui2machineQueue.Enqueue(cmd); } } /// /// This function should be called from state machine operations /// public static void Bench2UI(ButtonsEtc flags) { if (ButtonsEtcHandler == null) return; try { ButtonsEtcHandler(null, new ButtonsEtcEventArgs(flags)); } catch (Exception e) { log.Error("UiEventHandler(...) failed", e); } } public static event EventHandler ButtonsEtcHandler; /// /// Called from the state machine when a procedure is selected and UI needs to be updated. /// public static void OnProcedureSelected(object sender, ProcedureSelectedEventArgs data) { if (ProcedureSelectedHandler == null) return; try { ProcedureSelectedHandler(sender, data); } catch (Exception e) { log.Error("ProcedureSelectedHandler(...) failed", e); } } public static event EventHandler ProcedureSelectedHandler; /// /// Called from the state machine when a test is selected and UI needs to be updated. /// public static void OnTestSelected(object sender, TestSelectedEventArgs data) { if (TestSelectedHandler == null) return; try { TestSelectedHandler(sender, data); } catch (Exception e) { log.Error("TestSelectedHandler(...) failed", e); } } public static event EventHandler TestSelectedHandler; /// /// Called from the state machine when test process data change and UI needs to be updated. /// public static void OnTestProgress(object sender, TestProgressEventArgs data) { if (TestProgressHandler == null) return; try { TestProgressHandler(sender, data); } catch (Exception e) { log.Error("TestProgressHandler(...) failed", e); } } public static event EventHandler TestProgressHandler; /// /// Called from the state machine when the test is completed and UI needs to be updated. /// public static void OnTestCompleted(object sender, TestCompletedEventArgs data) { if (TestCompletedHandler == null) return; try { TestCompletedHandler(sender, data); } catch (Exception e) { log.Error("TestCompletedHandler(...) failed", e); } } public static event EventHandler TestCompletedHandler; /// /// Called from the state machine when the procedure is completed and UI needs to be updated. /// public static void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs data) { if (ProcedureCompletedHandler == null) return; try { ProcedureCompletedHandler(sender, data); } catch (Exception e) { log.Error("ProcedureCompletedHandler(...) failed", e); } } public static event EventHandler ProcedureCompletedHandler; /// /// Called from the state machine when the procedure is completed and UI needs to be updated. /// public static void OnCameraStateChanged(object sender, CameraStateChangedEventArgs data) { if (CameraStateChangedHandler == null) return; try { CameraStateChangedHandler(sender, data); } catch (Exception e) { log.Error("CameraStateChangedHandler(...) failed", e); } } public static event EventHandler CameraStateChangedHandler; /// /// Called from the state machine when the procedure is completed and UI needs to be updated. /// public static void OnImageUpdated(object sender, ImageUpdatedEventArgs data) { if (ImageUpdatedHandler == null) return; try { ImageUpdatedHandler(sender, data); } catch (Exception e) { log.Error("ImageUpdatedHandler(...) failed", e); } } public static event EventHandler ImageUpdatedHandler; /// /// Called from the state machine when there is and information to be logged. /// public static void OnLog(object sender, string message) { if (LogHandler == null) return; try { LogHandler(sender, new LogEventArgs(message)); } catch (Exception e) { log.Error("LogHandler(...) failed", e); } } public static event EventHandler LogHandler; /// /// Called from the state machine when 'Activity' information changes. /// public static void OnActivity(object sender, string activity) { if (ActivityHandler == null) return; try { ActivityHandler(sender, new ActivityEventArgs(activity)); } catch (Exception e) { log.Error("ActivityHandler(...) failed", e); } } public static event EventHandler ActivityHandler; /// /// 'State machine state has changed' event handler /// public static void OnStateChanged(object sender, string stateChangedMsg) { if (StateChangedHandler == null) return; try { StateChangedHandler(sender, new StateChangedEventArgs(stateChangedMsg)); } catch (Exception e) { string s = e.ToString(); } } public static event EventHandler StateChangedHandler; /// /// Called from the state machine when 'Activity' information changes. /// public static void OnEmergencyStopChanged(object sender, EmergencyStopEventArgs.State state) { if (EmergencyStopChangedHandler == null) return; try { EmergencyStopChangedHandler(sender, new EmergencyStopEventArgs(state)); } catch (Exception e) { log.Error("EmergencyStopHandler(...) failed", e); } } public static event EventHandler EmergencyStopChangedHandler; } }