tbf/TBF/UI/Procedures/TestWizard/VolumeAndErrorSelection.cs

188 lines
5.6 KiB
C#

///
/// Copyright (c) 2013-2017 Senus Slovensko a.s.
///
using System;
using System.Windows.Forms;
using Config.Entities;
using TBF.Resources;
namespace TBF.UI.Procedures.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.TestTime.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.TestTime = 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();
}
}
}