using System; using System.Collections.Generic; using log4net; 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)); } readonly EntryFormCfg entryFormCfg; /// /// Water meter serial numbers set by forms /// string[] serialNr; public string SerialNr(int wmNr) { if (serialNr == null || serialNr.Length <= wmNr) return string.Empty; return serialNr[wmNr]; } /// /// Water meter states set by forms /// float[] wmState; public float WMState(int wmNr) { if (wmState == null || wmState.Length <= wmNr) return 0; return wmState[wmNr]; } /// Not supported public void UpdateTestResults(IList waterMeters, IList results) { } System.Windows.Forms.Form modelessDlg; bool resultSaved; public enum CurrentOp { None, EnterWMSNsAndStates, EnterWMStates, } CurrentOp currentOp; public EntryForm(EntryFormCfg cfg) : base(cfg) { entryFormCfg = cfg; serialNr = new string[Program.WMsCount]; wmState = new float[Program.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 ShowWMStatesFormOp() { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); currentOp = CurrentOp.EnterWMStates; return this; } delegate void EntryFormDlgt(EntryForm myRef); /// void OpenBeginningDlg(EntryForm myRef) { myRef.modelessDlg = new WMSNsAndStatesForm(Program.WMsCount); modelessDlg.Show(); } /// void OpenEndDlg(EntryForm myRef) { myRef.modelessDlg = new WMStatesForm(Program.WMsCount); modelessDlg.Show(); } /// Start this operation public void Start() { resultSaved = false; switch (currentOp) { case CurrentOp.EnterWMSNsAndStates: Program.MainWnd.Invoke(new EntryFormDlgt(OpenBeginningDlg), this); break; case CurrentOp.EnterWMStates: Program.MainWnd.Invoke(new EntryFormDlgt(OpenEndDlg), this); break; } } /// Run this operation /// Event.ResultsPrinted public Event Run() { if (!(modelessDlg as IHasCompleted).Completed) { return Event.None; /// Return 'None' when form was not closed yet } if (!resultSaved) /// This is to save the result only once { if (modelessDlg is WMSNsAndStatesForm) { WMSNsAndStatesForm dlg = (modelessDlg as WMSNsAndStatesForm); if (dlg.WaterMetersCount > 0) wmState[0] = dlg.WMState[0]; if (dlg.WaterMetersCount > 1) wmState[1] = dlg.WMState[1]; if (dlg.WaterMetersCount > 2) wmState[2] = dlg.WMState[2]; if (dlg.WaterMetersCount > 3) wmState[3] = dlg.WMState[3]; if (dlg.WaterMetersCount > 4) wmState[4] = dlg.WMState[4]; if (dlg.WaterMetersCount > 5) wmState[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) { WMStatesForm dlg = (modelessDlg as WMStatesForm); if (dlg.WaterMetersCount > 0) wmState[0] = dlg.WMState[0]; if (dlg.WaterMetersCount > 1) wmState[1] = dlg.WMState[1]; if (dlg.WaterMetersCount > 2) wmState[2] = dlg.WMState[2]; if (dlg.WaterMetersCount > 3) wmState[3] = dlg.WMState[3]; if (dlg.WaterMetersCount > 4) wmState[4] = dlg.WMState[4]; if (dlg.WaterMetersCount > 5) wmState[5] = dlg.WMState[5]; } resultSaved = true; } return Event.ModelessFormClosed; /// Form closed } /// Stop this operation public void Stop() { modelessDlg = null; currentOp = CurrentOp.None; } } }