/// /// Copyright (c) 2018 Sensus Slovensko a.s. /// using System; using log4net; using TBF.BenchControl.GenericDevices; using TBF.BenchControl.Configs.NameOnly; using TBF.Boxes; namespace TBF.BenchControl.Various.ManualLevelMsrmnt { public class ManualLevelMsrmnt : ComponentBase, ILevelMeter, IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(ManualLevelMsrmnt)); public override string ToString() { return string.Format("ManualLevelMsrmnt({0})", Cfg.ToString(1)); } readonly TestMethodCfg myCfg; DoubleBox levelBox; public double WaterLevelMm; WaterLevelForm waterLevelForm; bool resultSaved; /// Set in Run() when results are saved public enum CurrentOp { None, EnterLevel, } CurrentOp currentOp; public ManualLevelMsrmnt() { currentOp = CurrentOp.None; } public ManualLevelMsrmnt(Generic.IComponentCfg cfg) : base(cfg) { myCfg = cfg as TestMethodCfg; currentOp = CurrentOp.None; log.Debug(this.ToString()); } /// Reference to the operation public IOperation ReadLevelOp(ref DoubleBox levelBox) { if (currentOp != CurrentOp.None) throw new Exception("Sequence error"); this.levelBox = levelBox; currentOp = CurrentOp.EnterLevel; return this; } delegate void EntryFormDlgt(ManualLevelMsrmnt myRef); /// void OpenWaterLevelForm(ManualLevelMsrmnt myRef) { myRef.waterLevelForm = new WaterLevelForm(); waterLevelForm.Show(); } /// Start this operation public void Start() { resultSaved = false; if (currentOp == CurrentOp.EnterLevel) { Program.MainWnd.Invoke(new EntryFormDlgt(OpenWaterLevelForm), this); } } /// Run this operation /// Event.ResultsPrinted public Event Run() { if ((waterLevelForm != null) && !waterLevelForm.Completed) { return Event.Busy; /// = Form open } if (!resultSaved && (currentOp == CurrentOp.EnterLevel) && (waterLevelForm != null)) { /// Save the result (only once) WaterLevelMm = waterLevelForm.WaterLevelMm; if (levelBox != null) levelBox.Val = WaterLevelMm; resultSaved = true; } return Event.LevelDone; /// = Form closed } /// Stop this operation public void Stop() { if (waterLevelForm != null) { waterLevelForm.OnCloseThisForm(this, null); waterLevelForm = null; } currentOp = CurrentOp.None; } } }