tbf/TestBenchFramework/BenchControl/DataEntry/WMStates/EntryForm.cs

223 lines
7.0 KiB
C#

///
/// 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)); }
readonly EntryFormCfg entryFormCfg;
/// <summary>
/// Water meter serial numbers set by forms
/// </summary>
string[] serialNr;
public string SerialNr(int wmNr)
{
if (serialNr == null || serialNr.Length <= wmNr) return string.Empty;
return serialNr[wmNr];
}
/// <summary>
/// Test start water meter states set by forms
/// </summary>
double[] wmStartState;
public double WMStartState(int wmNr)
{
if (wmStartState == null || wmStartState.Length <= wmNr) return 0;
return wmStartState[wmNr];
}
/// <summary>
/// Test end water meter states set by forms
/// </summary>
double[] wmEndState;
public double WMEndState(int wmNr)
{
if (wmEndState == null || wmEndState.Length <= wmNr) return 0;
return wmEndState[wmNr];
}
/// <summary> Not supported </summary>
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;
serialNr = new string[Config.Data.WMsCount];
wmStartState = new double[Config.Data.WMsCount];
currentOp = CurrentOp.None;
log.Debug(this.ToString());
}
/// <returns>Reference to the operation</returns>
public IOperation ShowCycleBeginFormOp(IList<IWaterMeter> waterMeters)
{
return null;
}
/// <returns>Reference to the operation</returns>
public IOperation ShowCycleEndFormOp(IList<IWaterMeter> waterMeters)
{
return null;
}
/// <returns>Reference to the operation</returns>
public IOperation ShowWMSNsAndStatesFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterWMSNsAndStates;
return this;
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestStartFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestStartStates;
return this;
}
/// <returns>Reference to the operation</returns>
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();
}
/// <summary>Start this operation</summary>
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;
}
}
/// <summary>Run this operation</summary>
/// <returns>Event.ResultsPrinted</returns>
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
}
/// <summary>Stop this operation</summary>
public void Stop()
{
if (modelessDlg is IHasCompleted)
{
UiBridge.Bridge.OnCloseModelessForm(this, null);
modelessDlg = null;
}
currentOp = CurrentOp.None;
}
}
}