tbf/TestBenchFramework/BenchControl/DataEntry/WMStates/EntryForm.cs
Milan Hanajik 94de991bf6 Everything works OK after serious changes:
- all components, componentCfg-s and parameter providers use base classes
 - less boilerplate code, simpler access to test/procedure parameters from code
 - CreateTestParams(test), CreateProcedureParams(procedure) methods added
 - TestBenchSim class is made static, it is not inheritted by any device anymore
2015-01-02 12:51:27 +01:00

179 lines
5.5 KiB
C#

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;
/// <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>
/// Water meter states set by forms
/// </summary>
float[] wmState;
public float WMState(int wmNr)
{
if (wmState == null || wmState.Length <= wmNr) return 0;
return wmState[wmNr];
}
/// <summary> Not supported </summary>
public void UpdateTestResults(IList<IWaterMeter> waterMeters, IList<Entities.TestResult> 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());
}
/// <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 ShowWMStatesFormOp()
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterWMStates;
return this;
}
delegate void EntryFormDlgt(EntryForm myRef);
///
void OpenBeginningDlg(EntryForm myRef)
{
myRef.modelessDlg = new WMSNsAndStatesForm(Program.WMsCount);
modelessDlg.Show();
}
///
void OpenEndDlg(EntryForm myRef)
{
myRef.modelessDlg = new WMStatesForm(Program.WMsCount);
modelessDlg.Show();
}
/// <summary>Start this operation</summary>
public void Start()
{
resultSaved = false;
switch (currentOp)
{
case CurrentOp.EnterWMSNsAndStates:
Program.MainWnd.Invoke(new EntryFormDlgt(OpenBeginningDlg), this);
break;
case CurrentOp.EnterWMStates:
Program.MainWnd.Invoke(new EntryFormDlgt(OpenEndDlg), this);
break;
}
}
/// <summary>Run this operation</summary>
/// <returns>Event.ResultsPrinted</returns>
public Event Run()
{
if (!(modelessDlg as IHasCompleted).Completed)
{
return Event.None; /// Return 'None' when form was not closed yet
}
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;
}
return Event.ModelessFormClosed; /// Form closed
}
/// <summary>Stop this operation</summary>
public void Stop()
{
modelessDlg = null;
currentOp = CurrentOp.None;
}
}
}