/// /// Copyright (c) 2013-2017 Sensus Metering Systems /// using System; using System.Windows.Forms; using Config.Entities; using TBF.Resources; namespace TBF.TestWizard { public partial class VolumeAndErrorSelection : Form { enum TabId { WaterMeterTab, HeatMeterTab, } Test test; TabId tabId; public VolumeAndErrorSelection() { InitializeComponent(); tabId = 0; Text = Strings.Volume_and_error_selection; volumeLabel.Text = Strings.Volume + " [l]"; durationLabel.Text = Strings.Duration_s; errLoPctLabel.Text = Strings.Err_limit_neg_pct_chdr; errHiPctLabel.Text = Strings.Err_limit_pos_pct_chdr; uncertaintyLabel.Text = Strings.Uncertainty_pct_chdr; backButton.Text = Strings.BackBtnText; nextButton.Text = Strings.FinishBtnText; cancelButton.Text = Strings.CancelBtnText; tabPage1.Text = Strings.Water_Meter; tabPage2.Text = Strings.Heat_meter; classLabel.Text = Strings.Metrological_class; qpLabel.Text = "Qp [m3/h]"; } public VolumeAndErrorSelection(bool first, bool last, Test test) : this() { this.test = test; if (first) backButton.Visible = false; if (last) nextButton.Text = Strings.FinishBtnText; } private void VolumeAndErrorSelection_Load(object sender, EventArgs e) { if (test == null) return; volumeTextBox.Text = test.Volume.ToString(); durationTextBox.Text = test.TstTime.ToString(); errLoPctTextBox.Text = test.ErrLimLo.ToString(); errHiPctTextBox.Text = test.ErrLimHi.ToString(); uncertaintyTextBox.Text = test.Uncertainty.ToString(); classComboBox.Text = "2"; nextButton.Enabled = IsFormValid(); } bool IsFormValid() { int idummy; float dummy; bool tabsValid; switch (tabId) { default: case TabId.WaterMeterTab: tabsValid = Utils.TryParseSFloat(errLoPctTextBox.Text, out dummy) && Utils.TryParseSFloat(errHiPctTextBox.Text, out dummy); break; case TabId.HeatMeterTab: tabsValid = int.TryParse(classComboBox.Text, out idummy) && idummy >= 1 && idummy <= 3 && Utils.TryParseUFloat(qpTextBox.Text, out dummy); break; } /// Return complete result return tabsValid && Utils.TryParseUFloat(volumeTextBox.Text, out dummy) && Utils.TryParseUFloat(durationTextBox.Text, out dummy) && Utils.TryParseUFloat(uncertaintyTextBox.Text, out dummy); } void UpdateTest() { test.Volume = Utils.ParseUFloat(volumeTextBox.Text); test.TstTime = Utils.ParseUFloat(durationTextBox.Text); test.Uncertainty = Utils.ParseUFloat(uncertaintyTextBox.Text); switch (tabId) { default: case TabId.WaterMeterTab: test.ErrLimLo = Utils.ParseSFloat(errLoPctTextBox.Text); test.ErrLimHi = Utils.ParseSFloat(errHiPctTextBox.Text); break; case TabId.HeatMeterTab: test.ErrLimLo = (float)int.Parse(classComboBox.Text); test.ErrLimHi = -Utils.ParseUFloat(qpTextBox.Text); break; } } private void backButton_Click(object sender, EventArgs e) { if (test != null && IsFormValid()) UpdateTest(); DialogResult = DialogResult.Retry; Close(); } private void nextButton_Click(object sender, EventArgs e) { if (test != null && IsFormValid()) { UpdateTest(); DialogResult = DialogResult.OK; Close(); } else { DialogResult = DialogResult.None; } } private void cancelButton_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void anyTextBox_TextChanged(object sender, EventArgs e) { nextButton.Enabled = IsFormValid(); } private void volumeTextBox_TextChanged(object sender, EventArgs e) { float Qave_lps = (test.Qfrom + test.Qto) / 7.2f; float volume; if (Utils.TryParseUFloat(volumeTextBox.Text, out volume)) { durationTextBox.TextChanged -= new System.EventHandler(this.durationTextBox_TextChanged); durationTextBox.Text = (volume / Qave_lps).ToString(); durationTextBox.TextChanged += new System.EventHandler(this.durationTextBox_TextChanged); } anyTextBox_TextChanged(sender, e); } private void durationTextBox_TextChanged(object sender, EventArgs e) { float Qave_lps = (test.Qfrom + test.Qto) / 7.2f; float testTime; if (Utils.TryParseUFloat(durationTextBox.Text, out testTime)) { volumeTextBox.TextChanged -= new System.EventHandler(this.volumeTextBox_TextChanged); volumeTextBox.Text = (testTime * Qave_lps).ToString(); volumeTextBox.TextChanged += new System.EventHandler(this.volumeTextBox_TextChanged); } anyTextBox_TextChanged(sender, e); } private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { switch ((TabId)tabControl1.SelectedIndex) { default: case TabId.WaterMeterTab: tabId = TabId.WaterMeterTab; break; case TabId.HeatMeterTab: tabId = TabId.HeatMeterTab; break; } nextButton.Enabled = IsFormValid(); } } }