using System; using System.Collections.Generic; using log4net; using TBF.BenchControl; using TBF.BenchControl.GenericDevices; namespace TBF.BenchControl.DataEntry.Munich { public class EntryForm : ComponentBase, IOperation, IDataEntry, IHasCycleBeginForm, IHasCycleEndForm, IHasProtocolTitle { private static readonly ILog log = LogManager.GetLogger(typeof(EntryForm)); public override string ToString() { return string.Format("DataEntry.Munich({0})", Cfg.ToString(1)); } readonly EntryFormCfg entryFormCfg; /// /// Properties set by the Begin and the End form /// public string ProtocolTitle { get { return protocolTitle; } } string protocolTitle; /// Not supported in Munich public string SerialNr(int wmNr) { return string.Empty; } /// Not supported in Munich public float WMState(int wmNr) { return 0; } System.Windows.Forms.Form mdlessDlg; bool resultSaved; IList wMeters; public enum CurrentOp { None, ShowFormAtCycleBeginning, ShowFormAtCycleEnd, } CurrentOp currentOp; public EntryForm(EntryFormCfg cfg) : base(cfg) { entryFormCfg = cfg; currentOp = CurrentOp.None; log.Debug(this.ToString()); } /// Reference to the operation public IOperation ShowCycleBeginFormOp(IList waterMeters) { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); currentOp = CurrentOp.ShowFormAtCycleBeginning; this.wMeters = waterMeters; return this; } /// Reference to the operation public IOperation ShowCycleEndFormOp(IList waterMeters) { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); currentOp = CurrentOp.ShowFormAtCycleEnd; this.wMeters = waterMeters; return this; } /// Reference to the operation public IOperation ShowWMSNsAndStatesFormOp() { return null; } /// Reference to the operation public IOperation ShowWMStatesFormOp() { return null; } delegate void EntryFormDlgt(EntryForm myRef); /// void OpenBeginningDlg(EntryForm myRef) { myRef.mdlessDlg = new CycleBeginningForm(); mdlessDlg.Show(); } /// void OpenEndDlg(EntryForm myRef) { CycleEndForm endForm = new CycleEndForm(); endForm.ProtocolName1 = entryFormCfg.ProtocolTitle1; endForm.ProtocolName2 = entryFormCfg.ProtocolTitle2; endForm.ProtocolName3 = entryFormCfg.ProtocolTitle3; myRef.mdlessDlg = endForm; mdlessDlg.Show(); } /// Start this operation public void Start() { resultSaved = false; switch (currentOp) { case CurrentOp.ShowFormAtCycleBeginning: Program.MainWnd.Invoke(new EntryFormDlgt(OpenBeginningDlg), this); break; case CurrentOp.ShowFormAtCycleEnd: Program.MainWnd.Invoke(new EntryFormDlgt(OpenEndDlg), this); break; } } /// Run this operation /// Event.ResultsPrinted public Event Run() { if (!(mdlessDlg 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 (mdlessDlg is CycleBeginningForm) { if (wMeters.Count >= 2 && wMeters[0] != null) wMeters[0].SerialNr = (mdlessDlg as CycleBeginningForm).MainSNText[0]; if (wMeters.Count >= 2 && wMeters[1] != null) wMeters[1].SerialNr = (mdlessDlg as CycleBeginningForm).AuxSNText[0]; if (wMeters.Count >= 4 && wMeters[2] != null) wMeters[2].SerialNr = (mdlessDlg as CycleBeginningForm).MainSNText[1]; if (wMeters.Count >= 4 && wMeters[3] != null) wMeters[3].SerialNr = (mdlessDlg as CycleBeginningForm).AuxSNText[1]; if (wMeters.Count >= 6 && wMeters[4] != null) wMeters[4].SerialNr = (mdlessDlg as CycleBeginningForm).MainSNText[2]; if (wMeters.Count >= 6 && wMeters[5] != null) wMeters[5].SerialNr = (mdlessDlg as CycleBeginningForm).AuxSNText[2]; } else { if (wMeters.Count >= 2 && wMeters[0] != null) wMeters[0].EndState = (mdlessDlg as CycleEndForm).MainStateText[0]; if (wMeters.Count >= 2 && wMeters[1] != null) wMeters[1].EndState = (mdlessDlg as CycleEndForm).AuxStateText[0]; if (wMeters.Count >= 4 && wMeters[2] != null) wMeters[2].EndState = (mdlessDlg as CycleEndForm).MainStateText[1]; if (wMeters.Count >= 4 && wMeters[3] != null) wMeters[3].EndState = (mdlessDlg as CycleEndForm).AuxStateText[1]; if (wMeters.Count >= 6 && wMeters[4] != null) wMeters[4].EndState = (mdlessDlg as CycleEndForm).MainStateText[2]; if (wMeters.Count >= 6 && wMeters[5] != null) wMeters[5].EndState = (mdlessDlg as CycleEndForm).AuxStateText[2]; protocolTitle = (mdlessDlg as CycleEndForm).ProtocolTitle; } resultSaved = true; } return Event.ModelessFormClosed; /// Form closed } /// Stop this operation public void Stop() { mdlessDlg = null; currentOp = CurrentOp.None; } /// /// Updates test results with the information collected in watermeters. /// /// Watermetes with information entered in the forms /// Test results to be updated with the information public void UpdateTestResults(IList waterMeters, IList results) { foreach (var test in results) { if (test.MetersKind != Entities.MetersKind.Combined) continue; /// Todo: Generalize !!! Now implemented for Munich = one combined meter. test.Meters[0].SerialNr = waterMeters[0].SerialNr; test.Meters[0].EndState = waterMeters[0].EndState; test.Meters[1].SerialNr = waterMeters[1].SerialNr; test.Meters[1].EndState = waterMeters[1].EndState; } } } }