using System; using System.Collections.Generic; using log4net; using TBF.BenchControl; using TBF.BenchControl.GenericDevices; namespace TBF.BenchControl.DataEntry.Standard { public class EntryForm : ComponentBase, IOperation, IDataEntry, IHasCycleBeginForm, IHasCycleEndForm { private static readonly ILog log = LogManager.GetLogger(typeof(EntryForm)); public override string ToString() { return string.Format("DataEntry.Standard({0})", Cfg.ToString(1)); } readonly EntryFormCfg entryFormCfg; /// /// Properties set by the Begin and the End form /// public string SerialNr(int wmNr) { return string.Empty; } public float WMState(int wmNr) { return 0; } System.Windows.Forms.Form modelessDlg; bool resultSaved; /// Set in Run() when results are saved IList waterMeters; /// Passesd as an argument of ShowCycleBeginFormOp/ShowCycleEndFormOp constructor 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.waterMeters = 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.waterMeters = 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.modelessDlg = new CycleBeginningForm(Program.WMsCount); modelessDlg.Show(); } /// void OpenEndDlg(EntryForm myRef) { myRef.modelessDlg = new CycleEndForm(Program.WMsCount); modelessDlg.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 ((modelessDlg is IHasCompleted) && !(modelessDlg as IHasCompleted).Completed) { return Event.ModelessFormIsOpen; } if (!resultSaved) /// This is to save the result only once { if (modelessDlg is CycleBeginningForm) { CycleBeginningForm dlg = (modelessDlg as CycleBeginningForm); int count = Math.Min(dlg.WaterMetersCount, waterMeters.Count); if (count > 0 && waterMeters[0] != null) { waterMeters[0].SerialNr = dlg.SNText[0]; waterMeters[0].Disabled = dlg.Disabled[0]; } if (count > 1 && waterMeters[1] != null) { waterMeters[1].SerialNr = dlg.SNText[1]; waterMeters[1].Disabled = dlg.Disabled[1]; } if (count > 2 && waterMeters[2] != null) { waterMeters[2].SerialNr = dlg.SNText[2]; waterMeters[2].Disabled = dlg.Disabled[2]; } if (count > 3 && waterMeters[3] != null) { waterMeters[3].SerialNr = dlg.SNText[3]; waterMeters[3].Disabled = dlg.Disabled[3]; } if (count > 4 && waterMeters[4] != null) { waterMeters[4].SerialNr = dlg.SNText[4]; waterMeters[4].Disabled = dlg.Disabled[4]; } if (count > 5 && waterMeters[5] != null) { waterMeters[5].SerialNr = dlg.SNText[5]; waterMeters[5].Disabled = dlg.Disabled[5]; } } else if (modelessDlg is CycleEndForm) { CycleEndForm dlg = (modelessDlg as CycleEndForm); int count = Math.Min(dlg.WaterMetersCount, waterMeters.Count); if (count > 0 && waterMeters[0] != null) waterMeters[0].EndState = dlg.EndStateText[0]; if (count > 1 && waterMeters[1] != null) waterMeters[1].EndState = dlg.EndStateText[1]; if (count > 2 && waterMeters[2] != null) waterMeters[2].EndState = dlg.EndStateText[2]; if (count > 3 && waterMeters[3] != null) waterMeters[3].EndState = dlg.EndStateText[3]; if (count > 4 && waterMeters[4] != null) waterMeters[4].EndState = dlg.EndStateText[4]; if (count > 5 && waterMeters[5] != null) waterMeters[5].EndState = dlg.EndStateText[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; } /// /// 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.Single) continue; int nrMtrsToUpdate = Math.Max(waterMeters.Count, test.Meters.Count); for (int i = 0; i < nrMtrsToUpdate; i++) { test.Meters[i].SerialNr = waterMeters[i].SerialNr; test.Meters[i].EndState = waterMeters[i].EndState; } } } } }