///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using log4net;
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;
///
/// Water meter serial numbers set by forms
///
string[] serialNr;
public string SerialNr(int wmNr)
{
if (serialNr == null || serialNr.Length <= wmNr) return string.Empty;
return serialNr[wmNr];
}
///
/// Water meter states set by forms
///
float[] wmState;
public float WMState(int wmNr)
{
if (wmState == null || wmState.Length <= wmNr) return 0;
return wmState[wmNr];
}
/// Not supported
public void UpdateTestResults(IList waterMeters, IList results)
{
}
System.Windows.Forms.Form modelessDlg;
bool resultSaved;
public enum CurrentOp
{
None,
EnterWMSNsAndStates,
EnterWMStates,
}
CurrentOp currentOp;
public EntryForm(EntryFormCfg cfg)
: base(cfg)
{
entryFormCfg = cfg;
serialNr = new string[Program.WMsCount];
wmState = new float[Program.WMsCount];
currentOp = CurrentOp.None;
log.Debug(this.ToString());
}
/// Reference to the operation
public IOperation ShowCycleBeginFormOp(IList waterMeters)
{
return null;
}
/// Reference to the operation
public IOperation ShowCycleEndFormOp(IList waterMeters)
{
return null;
}
/// Reference to the operation
public IOperation ShowWMSNsAndStatesFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterWMSNsAndStates;
return this;
}
/// Reference to the operation
public IOperation ShowWMStatesFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterWMStates;
return this;
}
delegate void EntryFormDlgt(EntryForm myRef);
///
void OpenWMSNsAndStatesDlg(EntryForm myRef)
{
myRef.modelessDlg = new WMSNsAndStatesForm(Program.WMsCount);
modelessDlg.Show();
}
///
void OpenWMStatesDlg(EntryForm myRef)
{
myRef.modelessDlg = new WMStatesForm(Program.WMsCount);
modelessDlg.Show();
}
/// Start this operation
public void Start()
{
resultSaved = false;
switch (currentOp)
{
case CurrentOp.EnterWMSNsAndStates:
Program.MainWnd.Invoke(new EntryFormDlgt(OpenWMSNsAndStatesDlg), this);
break;
case CurrentOp.EnterWMStates:
Program.MainWnd.Invoke(new EntryFormDlgt(OpenWMStatesDlg), 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 WMSNsAndStatesForm)
{
WMSNsAndStatesForm dlg = (modelessDlg as WMSNsAndStatesForm);
if (dlg.WaterMetersCount > 0) wmState[0] = dlg.WMState[0];
if (dlg.WaterMetersCount > 1) wmState[1] = dlg.WMState[1];
if (dlg.WaterMetersCount > 2) wmState[2] = dlg.WMState[2];
if (dlg.WaterMetersCount > 3) wmState[3] = dlg.WMState[3];
if (dlg.WaterMetersCount > 4) wmState[4] = dlg.WMState[4];
if (dlg.WaterMetersCount > 5) wmState[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)
{
WMStatesForm dlg = (modelessDlg as WMStatesForm);
if (dlg.WaterMetersCount > 0) wmState[0] = dlg.WMState[0];
if (dlg.WaterMetersCount > 1) wmState[1] = dlg.WMState[1];
if (dlg.WaterMetersCount > 2) wmState[2] = dlg.WMState[2];
if (dlg.WaterMetersCount > 3) wmState[3] = dlg.WMState[3];
if (dlg.WaterMetersCount > 4) wmState[4] = dlg.WMState[4];
if (dlg.WaterMetersCount > 5) wmState[5] = dlg.WMState[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;
}
}
}