223 lines
7.1 KiB
C#
223 lines
7.1 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>
|
|
float[] wmStartState;
|
|
public float WMStartState(int wmNr)
|
|
{
|
|
if (wmStartState == null || wmStartState.Length <= wmNr) return 0;
|
|
return wmStartState[wmNr];
|
|
}
|
|
|
|
/// <summary>
|
|
/// Test end water meter states set by forms
|
|
/// </summary>
|
|
float[] wmEndState;
|
|
public float 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 float[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;
|
|
}
|
|
}
|
|
}
|