/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// using System; using System.Collections.Generic; using log4net; using Config.Entities; using TBF.BenchControl; using TBF.BenchControl.GenericDevices; namespace TBF.BenchControl.DataEntry.WMStates { public class EntryForm : ComponentBase, IOperation, IDataEntry, IHasWMStatesForm { private static readonly ILog log = LogManager.GetLogger(typeof(EntryForm)); public override string ToString() { return string.Format("DataEntry.WMStates({0})", Cfg.ToString(1)); } public bool UsesCameras() { return false; } readonly EntryFormCfg entryFormCfg; /// /// Test start water meter states set by forms /// double[] wmStartState; public double WMStartState(int wmNr) { if (wmStartState == null || wmStartState.Length <= wmNr) return 0; return wmStartState[wmNr]; } /// /// Test end water meter states set by forms /// double[] wmEndState; public double WMEndState(int wmNr) { if (wmEndState == null || wmEndState.Length <= wmNr) return 0; return wmEndState[wmNr]; } /// Not supported public void UpdateTestResults(Results.BatchResults results) { } System.Windows.Forms.Form modelessDlg; bool resultSaved; public enum CurrentOp { None, EnterWMSNsAndStates, EnterTestStartStates, EnterTestEndStates, } CurrentOp currentOp; public EntryForm() { } public EntryForm(Generic.IComponentCfg cfg) : base(cfg) { entryFormCfg = cfg as EntryFormCfg; wmStartState = new double[Config.Data.WMsCount]; currentOp = CurrentOp.None; log.Debug(this.ToString()); } /// Reference to the operation public IOperation ShowCycleBeginFormOp(IList waterMeters) { return null; } /// Reference to the operation public IOperation ShowCycleEndFormOp(IList waterMeters) { return null; } /// Reference to the operation public IOperation ShowWMSNsAndStatesFormOp() { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); currentOp = CurrentOp.EnterWMSNsAndStates; return this; } /// Reference to the operation public IOperation ShowTestStartFormOp() { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); currentOp = CurrentOp.EnterTestStartStates; return this; } /// Reference to the operation public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi) { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); currentOp = CurrentOp.EnterTestEndStates; return this; } delegate void EntryFormDlgt(EntryForm myRef); /// void OpenWMSNsAndStatesDlg(EntryForm myRef) { myRef.modelessDlg = new WMSNsAndStatesForm(Config.Data.WMsCount); modelessDlg.Show(); } /// void OpenWMStatesDlg(EntryForm myRef) { myRef.modelessDlg = new WMStatesForm(Config.Data.WMsCount); modelessDlg.Show(); } /// Start this operation public void Start() { resultSaved = false; switch (currentOp) { case CurrentOp.EnterWMSNsAndStates: Program.MainWnd.Invoke(new EntryFormDlgt(OpenWMSNsAndStatesDlg), this); break; case CurrentOp.EnterTestStartStates: Program.MainWnd.Invoke(new EntryFormDlgt(OpenWMStatesDlg), this); break; case CurrentOp.EnterTestEndStates: Program.MainWnd.Invoke(new EntryFormDlgt(OpenWMStatesDlg), this); break; } } /// Run this operation /// Event.ResultsPrinted public Event Run() { if ((modelessDlg is IHasCompleted) && !(modelessDlg as IHasCompleted).Completed) { return Event.ModelessFormIsOpen; } if (!resultSaved) /// This is to save the result only once { if (modelessDlg is WMSNsAndStatesForm) { WMSNsAndStatesForm dlg = (modelessDlg as WMSNsAndStatesForm); if (dlg.WaterMetersCount > 0) wmStartState[0] = dlg.WMState[0]; if (dlg.WaterMetersCount > 1) wmStartState[1] = dlg.WMState[1]; if (dlg.WaterMetersCount > 2) wmStartState[2] = dlg.WMState[2]; if (dlg.WaterMetersCount > 3) wmStartState[3] = dlg.WMState[3]; if (dlg.WaterMetersCount > 4) wmStartState[4] = dlg.WMState[4]; if (dlg.WaterMetersCount > 5) wmStartState[5] = dlg.WMState[5]; //if (dlg.WaterMetersCount > 0) serialNr[0] = dlg.SNText[0]; //if (dlg.WaterMetersCount > 1) serialNr[1] = dlg.SNText[1]; //if (dlg.WaterMetersCount > 2) serialNr[2] = dlg.SNText[2]; //if (dlg.WaterMetersCount > 3) serialNr[3] = dlg.SNText[3]; //if (dlg.WaterMetersCount > 4) serialNr[4] = dlg.SNText[4]; //if (dlg.WaterMetersCount > 5) serialNr[5] = dlg.SNText[5]; } else if (modelessDlg is WMStatesForm && currentOp == CurrentOp.EnterTestStartStates) { WMStatesForm dlg = (modelessDlg as WMStatesForm); if (dlg.WaterMetersCount > 0) wmStartState[0] = dlg.WMState[0]; if (dlg.WaterMetersCount > 1) wmStartState[1] = dlg.WMState[1]; if (dlg.WaterMetersCount > 2) wmStartState[2] = dlg.WMState[2]; if (dlg.WaterMetersCount > 3) wmStartState[3] = dlg.WMState[3]; if (dlg.WaterMetersCount > 4) wmStartState[4] = dlg.WMState[4]; if (dlg.WaterMetersCount > 5) wmStartState[5] = dlg.WMState[5]; } else if (modelessDlg is WMStatesForm && currentOp == CurrentOp.EnterTestEndStates) { WMStatesForm dlg = (modelessDlg as WMStatesForm); if (dlg.WaterMetersCount > 0) wmEndState[0] = dlg.WMState[0]; if (dlg.WaterMetersCount > 1) wmEndState[1] = dlg.WMState[1]; if (dlg.WaterMetersCount > 2) wmEndState[2] = dlg.WMState[2]; if (dlg.WaterMetersCount > 3) wmEndState[3] = dlg.WMState[3]; if (dlg.WaterMetersCount > 4) wmEndState[4] = dlg.WMState[4]; if (dlg.WaterMetersCount > 5) wmEndState[5] = dlg.WMState[5]; } resultSaved = true; modelessDlg = null; } return Event.ModelessFormClosed; /// Form closed } /// Stop this operation public void Stop() { if (modelessDlg is IHasCompleted) { UiBridge.Bridge.OnCloseModelessForm(this, null); modelessDlg = null; } currentOp = CurrentOp.None; } } }