/// /// Copyright (c) 2013-2017 Sensus Metering Systems /// using System; using System.Windows.Forms; using log4net; using TBF.Rig.GenericDevices; using TBF.Resources; namespace TBF.Rig.DataEntry.Standard6 { public partial class TestStartEndForm : Form, GenericDevices.IHasCompleted { private static readonly ILog log = LogManager.GetLogger(typeof(TestStartEndForm)); // Set to 'true' when the form closes public bool Completed { get { return completed; } } bool completed; /// Number of water meters public readonly int WaterMetersCount; readonly IRegReader[] regReaders; readonly bool[] disabled; // To be retrieved after the form closes public double[] WMStartState; // To be retrieved after the form closes public readonly string[] WMStartStateStr; // To be retrieved after the form closes public double[] WMEndState; bool endStates; /// false=start states, true=end states double refVolume; double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi bool fixedErrorLimits; /// false in case of calculated error limits /// /// Constructor to fill in start states /// /// Number of text boxes for serial numbers public TestStartEndForm(int waterMetersCount, IRegReader[] regReaders, bool[] disabled) { InitializeComponent(); this.Icon = Properties.Resources.TBF_icon; ControlBox = false; endStates = false; this.WaterMetersCount = waterMetersCount; this.regReaders = regReaders; this.disabled = disabled; WMStartState = new double[waterMetersCount]; WMStartStateStr = new string[waterMetersCount]; completed = false; StartForceCloseHandler(); } /// /// Constructor to fill in end states /// /// Number of text boxes for serial numbers public TestStartEndForm(int waterMetersCount, IRegReader[] regReaders, string[] wmStartStateStr, bool[] disabled, double refVolume, double errLimLo, double errLimHi) { endStates = true; this.WaterMetersCount = waterMetersCount; this.regReaders = regReaders; if (wmStartStateStr == null || wmStartStateStr.Length < waterMetersCount) throw (new Exception("Invalid 'wmStartStateStr' argument")); this.WMStartStateStr = wmStartStateStr; this.disabled = disabled; this.refVolume = refVolume; this.warningLimLo = 2 * errLimLo; this.warningLimHi = 2 * errLimHi; this.fixedErrorLimits = (errLimHi > errLimLo); InitializeComponent(); WMEndState = new double[waterMetersCount]; completed = false; StartForceCloseHandler(); } /// Parameterless constructor for all watermeters public TestStartEndForm() : this(TBF.Data.WMsCount, null, null) { } private void CycleEndForm_Load(object sender, EventArgs e) { Localize(); Height = 70 + 90 * WaterMetersCount; if (WaterMetersCount < 1) groupBox1.Visible = false; if (WaterMetersCount < 2) groupBox2.Visible = false; if (WaterMetersCount < 3) groupBox3.Visible = false; if (WaterMetersCount < 4) groupBox4.Visible = false; if (WaterMetersCount < 5) groupBox5.Visible = false; if (WaterMetersCount < 6) groupBox6.Visible = false; if (endStates) { if (WaterMetersCount >= 1) wmStartStateTextBox1.Text = WMStartStateStr[0]; if (WaterMetersCount >= 2) wmStartStateTextBox2.Text = WMStartStateStr[1]; if (WaterMetersCount >= 3) wmStartStateTextBox3.Text = WMStartStateStr[2]; if (WaterMetersCount >= 4) wmStartStateTextBox4.Text = WMStartStateStr[3]; if (WaterMetersCount >= 5) wmStartStateTextBox5.Text = WMStartStateStr[4]; if (WaterMetersCount >= 6) wmStartStateTextBox6.Text = WMStartStateStr[5]; wmEndStateTextBox1.Enabled = (disabled.Length >= 1 && !disabled[0]); wmEndStateTextBox2.Enabled = (disabled.Length >= 2 && !disabled[1]); wmEndStateTextBox3.Enabled = (disabled.Length >= 3 && !disabled[2]); wmEndStateTextBox4.Enabled = (disabled.Length >= 4 && !disabled[3]); wmEndStateTextBox5.Enabled = (disabled.Length >= 5 && !disabled[4]); wmEndStateTextBox6.Enabled = (disabled.Length >= 6 && !disabled[5]); } else { wmStartStateTextBox1.Enabled = (disabled.Length >= 1 && !disabled[0]); wmStartStateTextBox2.Enabled = (disabled.Length >= 2 && !disabled[1]); wmStartStateTextBox3.Enabled = (disabled.Length >= 3 && !disabled[2]); wmStartStateTextBox4.Enabled = (disabled.Length >= 4 && !disabled[3]); wmStartStateTextBox5.Enabled = (disabled.Length >= 5 && !disabled[4]); wmStartStateTextBox6.Enabled = (disabled.Length >= 6 && !disabled[5]); } } void Localize() { Text = Strings.Water_Meter_States; groupBox1.Text = Strings.Water_Meter + " 1"; groupBox2.Text = Strings.Water_Meter + " 2"; groupBox3.Text = Strings.Water_Meter + " 3"; groupBox4.Text = Strings.Water_Meter + " 4"; groupBox5.Text = Strings.Water_Meter + " 5"; groupBox6.Text = Strings.Water_Meter + " 6"; wmStateLabel1.Text = Strings.WMState; wmStateLabel2.Text = Strings.WMState; wmStateLabel3.Text = Strings.WMState; wmStateLabel4.Text = Strings.WMState; wmStateLabel5.Text = Strings.WMState; wmStateLabel6.Text = Strings.WMState; startLabel.Text = Strings.Start; endLabel.Text = Strings.End; okButton.Text = Strings.OkBtnText; } private void okButton_Click(object sender, EventArgs eArgs) { log.Debug("okButton_Click(..)"); try { if (endStates) { if (wmEndStateTextBox1.Enabled && WaterMetersCount >= 1) WMEndState[0] = Utils.ParseUDouble(wmEndStateTextBox1.Text); if (wmEndStateTextBox2.Enabled && WaterMetersCount >= 2) WMEndState[1] = Utils.ParseUDouble(wmEndStateTextBox2.Text); if (wmEndStateTextBox3.Enabled && WaterMetersCount >= 3) WMEndState[2] = Utils.ParseUDouble(wmEndStateTextBox3.Text); if (wmEndStateTextBox4.Enabled && WaterMetersCount >= 4) WMEndState[3] = Utils.ParseUDouble(wmEndStateTextBox4.Text); if (wmEndStateTextBox5.Enabled && WaterMetersCount >= 5) WMEndState[4] = Utils.ParseUDouble(wmEndStateTextBox5.Text); if (wmEndStateTextBox6.Enabled && WaterMetersCount >= 6) WMEndState[5] = Utils.ParseUDouble(wmEndStateTextBox6.Text); } else { if (wmStartStateTextBox1.Enabled && WaterMetersCount >= 1) { WMStartStateStr[0] = wmStartStateTextBox1.Text; WMStartState[0] = Utils.ParseUDouble(wmStartStateTextBox1.Text); } if (wmStartStateTextBox2.Enabled && WaterMetersCount >= 2) { WMStartStateStr[1] = wmStartStateTextBox2.Text; WMStartState[1] = Utils.ParseUDouble(wmStartStateTextBox2.Text); } if (wmStartStateTextBox3.Enabled && WaterMetersCount >= 3) { WMStartStateStr[2] = wmStartStateTextBox3.Text; WMStartState[2] = Utils.ParseUDouble(wmStartStateTextBox3.Text); } if (wmStartStateTextBox4.Enabled && WaterMetersCount >= 4) { WMStartStateStr[3] = wmStartStateTextBox4.Text; WMStartState[3] = Utils.ParseUDouble(wmStartStateTextBox4.Text); } if (wmStartStateTextBox5.Enabled && WaterMetersCount >= 5) { WMStartStateStr[4] = wmStartStateTextBox5.Text; WMStartState[4] = Utils.ParseUDouble(wmStartStateTextBox5.Text); } if (wmStartStateTextBox6.Enabled && WaterMetersCount >= 6) { WMStartStateStr[5] = wmStartStateTextBox6.Text; WMStartState[5] = Utils.ParseUDouble(wmStartStateTextBox6.Text); } } } catch (Exception e) { log.ErrorFormat("Exception: {0}", e.Message); return; } completed = true; Close(); } #region Forced close handling public void StartForceCloseHandler() { UiBridge.Bridge.CloseModelessFormHandler += delegate(object sender, EventArgs args) { if (InvokeRequired) { Invoke(new EventHandler(OnForceClose), sender, args); } else OnForceClose(sender, args); }; } void OnForceClose(object sender, EventArgs args) { DialogResult = DialogResult.Cancel; Close(); } #endregion private void wmEndStateTextBox1_TextChanged(object sender, EventArgs e) { double err = 0; try { double endState = Utils.ParseUDouble(wmEndStateTextBox1.Text); double startState = Utils.ParseUDouble(wmStartStateTextBox1.Text); err = 100.0 * (endState - startState - refVolume) / refVolume; } catch { }; exclamation1.Visible = fixedErrorLimits ? ((err < warningLimLo) || (warningLimHi < err)) : ((err < -6) || (+6 < err)); } private void wmEndStateTextBox2_TextChanged(object sender, EventArgs e) { double err = 0; try { double endState = Utils.ParseUDouble(wmEndStateTextBox2.Text); double startState = Utils.ParseUDouble(wmStartStateTextBox2.Text); err = 100.0 * (endState - startState - refVolume) / refVolume; } catch { err = 1000.0f; }; exclamation2.Visible = fixedErrorLimits ? ((err < warningLimLo) || (warningLimHi < err)) : ((err < -6) || (+6 < err)); } private void wmEndStateTextBox3_TextChanged(object sender, EventArgs e) { double err = 0; try { double endState = Utils.ParseUDouble(wmEndStateTextBox3.Text); double startState = Utils.ParseUDouble(wmStartStateTextBox3.Text); err = 100.0 * (endState - startState - refVolume) / refVolume; } catch { err = 1000.0f; }; exclamation3.Visible = fixedErrorLimits ? ((err < warningLimLo) || (warningLimHi < err)) : ((err < -6) || (+6 < err)); } private void wmEndStateTextBox4_TextChanged(object sender, EventArgs e) { double err = 0; try { double endState = Utils.ParseUDouble(wmEndStateTextBox4.Text); double startState = Utils.ParseUDouble(wmStartStateTextBox4.Text); err = 100.0 * (endState - startState - refVolume) / refVolume; } catch { err = 1000.0f; }; exclamation4.Visible = fixedErrorLimits ? ((err < warningLimLo) || (warningLimHi < err)) : ((err < -6) || (+6 < err)); } private void wmEndStateTextBox5_TextChanged(object sender, EventArgs e) { double err = 0; try { double endState = Utils.ParseUDouble(wmEndStateTextBox5.Text); double startState = Utils.ParseUDouble(wmStartStateTextBox5.Text); err = 100.0 * (endState - startState - refVolume) / refVolume; } catch { err = 1000.0f; }; exclamation5.Visible = fixedErrorLimits ? ((err < warningLimLo) || (warningLimHi < err)) : ((err < -6) || (+6 < err)); } private void wmEndStateTextBox6_TextChanged(object sender, EventArgs e) { double err = 0; try { double endState = Utils.ParseUDouble(wmEndStateTextBox6.Text); double startState = Utils.ParseUDouble(wmStartStateTextBox6.Text); err = 100.0 * (endState - startState - refVolume) / refVolume; } catch { err = 1000.0f; }; exclamation6.Visible = fixedErrorLimits ? ((err < warningLimLo) || (warningLimHi < err)) : ((err < -6) || (+6 < err)); } private void wmStartStateTextBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmStartStateTextBox2.Enabled) wmStartStateTextBox2.Focus(); else if (wmStartStateTextBox3.Enabled) wmStartStateTextBox3.Focus(); else if (wmStartStateTextBox4.Enabled) wmStartStateTextBox4.Focus(); else if (wmStartStateTextBox5.Enabled) wmStartStateTextBox5.Focus(); else if (wmStartStateTextBox6.Enabled) wmStartStateTextBox6.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmStartStateTextBox2_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmStartStateTextBox3.Enabled) wmStartStateTextBox3.Focus(); else if (wmStartStateTextBox4.Enabled) wmStartStateTextBox4.Focus(); else if (wmStartStateTextBox5.Enabled) wmStartStateTextBox5.Focus(); else if (wmStartStateTextBox6.Enabled) wmStartStateTextBox6.Focus(); else if (wmStartStateTextBox1.Enabled) wmStartStateTextBox1.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmStartStateTextBox3_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmStartStateTextBox4.Enabled) wmStartStateTextBox4.Focus(); else if (wmStartStateTextBox5.Enabled) wmStartStateTextBox5.Focus(); else if (wmStartStateTextBox6.Enabled) wmStartStateTextBox6.Focus(); else if (wmStartStateTextBox1.Enabled) wmStartStateTextBox1.Focus(); else if (wmStartStateTextBox2.Enabled) wmStartStateTextBox2.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmStartStateTextBox4_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmStartStateTextBox5.Enabled) wmStartStateTextBox5.Focus(); else if (wmStartStateTextBox6.Enabled) wmStartStateTextBox6.Focus(); else if (wmStartStateTextBox1.Enabled) wmStartStateTextBox1.Focus(); else if (wmStartStateTextBox2.Enabled) wmStartStateTextBox2.Focus(); else if (wmStartStateTextBox3.Enabled) wmStartStateTextBox3.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmStartStateTextBox5_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmStartStateTextBox6.Enabled) wmStartStateTextBox6.Focus(); else if (wmStartStateTextBox1.Enabled) wmStartStateTextBox1.Focus(); else if (wmStartStateTextBox2.Enabled) wmStartStateTextBox2.Focus(); else if (wmStartStateTextBox3.Enabled) wmStartStateTextBox3.Focus(); else if (wmStartStateTextBox4.Enabled) wmStartStateTextBox4.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmStartStateTextBox6_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmStartStateTextBox1.Enabled) wmStartStateTextBox1.Focus(); else if (wmStartStateTextBox2.Enabled) wmStartStateTextBox2.Focus(); else if (wmStartStateTextBox3.Enabled) wmStartStateTextBox3.Focus(); else if (wmStartStateTextBox4.Enabled) wmStartStateTextBox4.Focus(); else if (wmStartStateTextBox5.Enabled) wmStartStateTextBox5.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmEndStateTextBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmEndStateTextBox2.Enabled) wmEndStateTextBox2.Focus(); else if (wmEndStateTextBox3.Enabled) wmEndStateTextBox3.Focus(); else if (wmEndStateTextBox4.Enabled) wmEndStateTextBox4.Focus(); else if (wmEndStateTextBox5.Enabled) wmEndStateTextBox5.Focus(); else if (wmEndStateTextBox6.Enabled) wmEndStateTextBox6.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmEndStateTextBox2_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmEndStateTextBox3.Enabled) wmEndStateTextBox3.Focus(); else if (wmEndStateTextBox4.Enabled) wmEndStateTextBox4.Focus(); else if (wmEndStateTextBox5.Enabled) wmEndStateTextBox5.Focus(); else if (wmEndStateTextBox6.Enabled) wmEndStateTextBox6.Focus(); else if (wmEndStateTextBox1.Enabled) wmEndStateTextBox1.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmEndStateTextBox3_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmEndStateTextBox4.Enabled) wmEndStateTextBox4.Focus(); else if (wmEndStateTextBox5.Enabled) wmEndStateTextBox5.Focus(); else if (wmEndStateTextBox6.Enabled) wmEndStateTextBox6.Focus(); else if (wmEndStateTextBox1.Enabled) wmEndStateTextBox1.Focus(); else if (wmEndStateTextBox2.Enabled) wmEndStateTextBox2.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmEndStateTextBox4_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmEndStateTextBox5.Enabled) wmEndStateTextBox5.Focus(); else if (wmEndStateTextBox6.Enabled) wmEndStateTextBox6.Focus(); else if (wmEndStateTextBox1.Enabled) wmEndStateTextBox1.Focus(); else if (wmEndStateTextBox2.Enabled) wmEndStateTextBox2.Focus(); else if (wmEndStateTextBox3.Enabled) wmEndStateTextBox3.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmEndStateTextBox5_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmEndStateTextBox6.Enabled) wmEndStateTextBox6.Focus(); else if (wmEndStateTextBox1.Enabled) wmEndStateTextBox1.Focus(); else if (wmEndStateTextBox2.Enabled) wmEndStateTextBox2.Focus(); else if (wmEndStateTextBox3.Enabled) wmEndStateTextBox3.Focus(); else if (wmEndStateTextBox4.Enabled) wmEndStateTextBox4.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } private void wmEndStateTextBox6_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { if (wmEndStateTextBox1.Enabled) wmEndStateTextBox1.Focus(); else if (wmEndStateTextBox2.Enabled) wmEndStateTextBox2.Focus(); else if (wmEndStateTextBox3.Enabled) wmEndStateTextBox3.Focus(); else if (wmEndStateTextBox4.Enabled) wmEndStateTextBox4.Focus(); else if (wmEndStateTextBox5.Enabled) wmEndStateTextBox5.Focus(); } else if (e.KeyChar == '+') okButton_Click(sender, e); } } }