UI.Procedures.ProcedureDlg : Units selection in ProcedureDlg / Metrology1 Tab.

This commit is contained in:
Milan Hanajik 2021-11-03 11:09:34 +01:00
parent b9aebd8903
commit 766b52865a
7 changed files with 351 additions and 131 deletions

View File

@ -61,6 +61,19 @@ namespace Config.Entities
public virtual bool IsOuterLoopStart { get; set; } /// Not mapped to database
public virtual bool IsOuterLoopEnd { get; set; } /// Not mapped to database
public virtual bool QtgTextChngd { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual bool QfromTextChngd { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual bool QtoTextChngd { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual bool VolumeTextChngd { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual bool TempLimLoTextChngd { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual bool TempLimHiTextChngd { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit VolumeUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit FlowUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit MassUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit TempUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit PressUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit LengthUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual IList<ComponentTest> MoreParams { get; set; }
public virtual Procedure Procedure { get; set; }
@ -125,6 +138,16 @@ namespace Config.Entities
return autoTests.Contains(action);
}
public virtual void ResetChngdFlags()
{
QtgTextChngd = false;
QfromTextChngd = false;
QtoTextChngd = false;
VolumeTextChngd = false;
TempLimLoTextChngd = false;
TempLimHiTextChngd = false;
}
// Makes a new copy of this object (not just a reference)
public virtual Test Clone()
{
@ -169,6 +192,12 @@ namespace Config.Entities
result.TransBefore = TransBefore;
result.TransBetween = TransBetween;
result.TransAfter = TransAfter;
result.VolumeUnit = VolumeUnit;
result.FlowUnit = FlowUnit;
result.MassUnit = MassUnit;
result.TempUnit = TempUnit;
result.PressUnit = PressUnit;
result.LengthUnit = LengthUnit;
foreach (var prms in MoreParams) { result.MoreParams.Add(prms.Clone()); }
return result;

View File

@ -34,7 +34,7 @@ namespace TBF.Rig.DataContainers.BenchInfo.Extended
public Unit MassUnit { get { return myCfg.MassUnit; } }
public Unit TempUnit { get { return myCfg.TempUnit; } }
public Unit PressUnit { get { return myCfg.PressUnit; } }
public Unit LenghtUnit { get { return myCfg.LenghtUnit; } }
public Unit LengthUnit { get { return myCfg.LenghtUnit; } }
public Component() { }

View File

@ -36,7 +36,7 @@ namespace TBF.Rig.DataContainers.BenchInfo.iPerl
public Unit MassUnit { get { return myCfg.MassUnit; } }
public Unit TempUnit { get { return myCfg.TempUnit; } }
public Unit PressUnit { get { return myCfg.PressUnit; } }
public Unit LenghtUnit { get { return myCfg.LenghtUnit; } }
public Unit LengthUnit { get { return myCfg.LenghtUnit; } }
public Side Side { get { return myCfg.Side; } }
public int MaxTestIndex { get { return myCfg.MaxTestIndex; } } /// (MaxPruefindex % 100) value when to reject water meters completely if they are NOK

View File

@ -25,6 +25,6 @@ namespace TBF.Rig.GenericDevices
Unit MassUnit { get; }
Unit TempUnit { get; }
Unit PressUnit { get; }
Unit LenghtUnit { get; }
Unit LengthUnit { get; }
}
}

View File

@ -1,4 +1,7 @@
using System;
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using Config.Entities;

View File

@ -8,6 +8,7 @@ using System.Text;
using System.Windows.Forms;
using log4net;
using Common;
using Config;
using Config.Entities;
using Results.Forms;
using TBF.Rig.Generic;
@ -396,6 +397,17 @@ namespace TBF.UI.Procedures
lastChangedByTextBox.ReadOnly = true;
lastChangedOnTextBox.ReadOnly = true;
foreach (var test in LoadedProcedure.Tests)
{
test.VolumeUnit = TBF.Rig.Sequences.ProcessData.BenchInfo.VolumeUnit;
test.FlowUnit = TBF.Rig.Sequences.ProcessData.BenchInfo.FlowUnit;
test.MassUnit = TBF.Rig.Sequences.ProcessData.BenchInfo.MassUnit;
test.TempUnit = TBF.Rig.Sequences.ProcessData.BenchInfo.TempUnit;
test.PressUnit = TBF.Rig.Sequences.ProcessData.BenchInfo.PressUnit;
test.LengthUnit = TBF.Rig.Sequences.ProcessData.BenchInfo.LengthUnit;
test.ResetChngdFlags();
}
/// History tab
InitializeHistoryTab(); /// Create ListViewEx columns for 'History of changes'
@ -771,14 +783,17 @@ namespace TBF.UI.Procedures
#endif
Qfrom,
Qto,
FlowUnit,
Volume,
VolumeUnit,
TestTime,
ErrLimLo,
ErrLimHi,
TempLimLo,
TempLimHi,
TempUnit,
Method,
CoulumnsCount
ColumnsCount
}
void PrepareMetrology1Tab()
@ -787,21 +802,28 @@ namespace TBF.UI.Procedures
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 });
#if TEST_PROFILES
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [m3/h]", Strings.Q_tg), Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Q_tg, Width = 80 });
#endif
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [m3/h]", Strings.Q_from), Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [m3/h]", Strings.Q_to), Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [l]", Strings.Volume), Width = 70 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Q_from, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Q_to, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = "Unit", Width = 50 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Volume, Width = 70 });
lv.Columns.Add(new ColumnHeader { Text = "Unit", Width = 50 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_time_s_chdr, Width = 70 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Err_limit_neg_pct_chdr, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Err_limit_pos_pct_chdr, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [°C]", Strings.Temp_lim_lo_chdr), Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [°C]", Strings.Temp_lim_hi_chdr), Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Temp_lim_lo_chdr, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Temp_lim_hi_chdr, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = "Unit", Width = 50 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Method_chdr, Width = 200 });
methodCBox = new ComboBox();
foreach (var m in TestMethods) methodCBox.Items.Add(m.Cfg.Name);
var flowUnitBox = new ComboBox();
var volUnitBox = new ComboBox();
var tempUnitBox = new ComboBox();
metrology1Editors = new Control[]
{
new TextBox(), /// Name
@ -811,25 +833,39 @@ namespace TBF.UI.Procedures
#endif
new TextBox(), /// Qfrom
new TextBox(), /// Qto
flowUnitBox,
new TextBox(), /// Volume
volUnitBox,
new TextBox(), /// Test time
new TextBox(), /// Err.Lim. -
new TextBox(), /// Err.Lim. +
new TextBox(), /// Temp.Lim. -
new TextBox(), /// Temp.Lim. +
tempUnitBox,
methodCBox, /// Method
};
for (Config.Unit u = 0; u < Config.Unit.Count; u++)
{
if (Units.IsFlow(u)) flowUnitBox.Items.Add(u.ToDescription());
if (Units.IsVolume(u)) volUnitBox.Items.Add(u.ToDescription());
if (Units.IsTemperature(u)) tempUnitBox.Items.Add(u.ToDescription());
}
foreach (var ctrl in metrology1Editors)
{
metrology1TabPage.Controls.Add(ctrl);
}
}
void RefreshMetrology1Tab()
{
metrology1ListViewEx.Items.Clear();
foreach (var test in LoadedProcedure.Tests) AddToMetrology1Tab(test);
foreach (var test in LoadedProcedure.Tests)
{
AddToMetrology1Tab(test);
}
if (0 <= SelectedTestIx && SelectedTestIx < metrology1ListViewEx.Items.Count)
{
@ -846,18 +882,23 @@ namespace TBF.UI.Procedures
lvi.Tag = test;
lvi.SubItems.Add((test.Part == 0) ? "-" : test.Part.ToString()); /// Part
#if TEST_PROFILES
lvi.SubItems.Add(test.Qtg.ToString()); /// Q_tg (target flow)
lvi.SubItems.Add(Units.ConvertTo(test.FlowUnit, test.Qtg).ToString()); /// Q_tg (target flow)
#endif
lvi.SubItems.Add(test.Qfrom.ToString()); /// Q_from
lvi.SubItems.Add(test.Qto.ToString()); /// Q_to
lvi.SubItems.Add(test.Volume.ToString()); /// VOlume
lvi.SubItems.Add(Units.ConvertTo(test.FlowUnit, test.Qfrom).ToString()); /// Q_from
lvi.SubItems.Add(Units.ConvertTo(test.FlowUnit, test.Qto).ToString()); /// Q_to
lvi.SubItems.Add(test.FlowUnit.ToDescription());
lvi.SubItems.Add(Units.ConvertTo(test.VolumeUnit, test.Volume).ToString()); /// Volume
lvi.SubItems.Add(test.VolumeUnit.ToDescription());
lvi.SubItems.Add(test.TestTime.ToString());
lvi.SubItems.Add(test.ErrLimLo.ToString());
lvi.SubItems.Add(test.ErrLimHi.ToString());
lvi.SubItems.Add(test.TempLimLo.ToString());
lvi.SubItems.Add(test.TempLimHi.ToString());
lvi.SubItems.Add(Units.ConvertTo(test.TempUnit, test.TempLimLo).ToString());
lvi.SubItems.Add(Units.ConvertTo(test.TempUnit, test.TempLimHi).ToString());
lvi.SubItems.Add(test.TempUnit.ToDescription());
lvi.SubItems.Add((test.Method != null) ? test.Method.ToString() : string.Empty);
test.ResetChngdFlags();
metrology1ListViewEx.Items.Add(lvi);
}
@ -866,48 +907,66 @@ namespace TBF.UI.Procedures
for (int i = 0; i < metrology1ListViewEx.Items.Count; i++)
{
ListViewItem lvi = metrology1ListViewEx.Items[i];
Test entity = (Test)lvi.Tag;
Test test = (Test)lvi.Tag;
entity.Name = lvi.Text;
entity.ItemNr = i;
test.Name = lvi.Text;
test.ItemNr = i;
int part = entity.Part;
int part = test.Part;
if (lvi.SubItems[(int)MtrlgyClmn.Part].Text.Equals("-"))
{
entity.Part = 0;
test.Part = 0;
}
else if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Part].Text, out part))
{
entity.Part = part;
test.Part = part;
}
float tmp;
double dtmp;
#if TEST_PROFILES
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qtg].Text, out tmp)) entity.Qtg = tmp;
if (test.QtgTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.Qtg].Text, out dtmp))
test.Qtg = (float)Units.ConvertFrom(test.FlowUnit, dtmp);
#endif
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qfrom].Text, out tmp)) entity.Qfrom = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qto].Text, out tmp)) entity.Qto = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Volume].Text, out tmp)) entity.Volume = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.TestTime].Text,out tmp)) entity.TestTime = tmp;
if (test.QfromTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.Qfrom].Text, out dtmp))
test.Qfrom = (float)Units.ConvertFrom(test.FlowUnit, dtmp);
if (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimLo].Text, out tmp)) entity.ErrLimLo = tmp;
if (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimHi].Text, out tmp)) entity.ErrLimHi = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.TempLimLo].Text, out tmp)) entity.TempLimLo = tmp;
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.TempLimHi].Text, out tmp)) entity.TempLimHi = tmp;
if (test.QtoTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.Qto].Text, out dtmp))
test.Qto = (float)Units.ConvertFrom(test.FlowUnit, dtmp);
if (test.VolumeTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.Volume].Text, out dtmp))
test.Volume = (float)Units.ConvertFrom(test.VolumeUnit, dtmp);
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.TestTime].Text, out tmp)) test.TestTime = tmp;
if (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimLo].Text, out tmp)) test.ErrLimLo = tmp;
if (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimHi].Text, out tmp)) test.ErrLimHi = tmp;
if (test.TempLimLoTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.TempLimLo].Text, out dtmp))
test.TempLimLo = (float)Units.ConvertFrom(test.TempUnit, dtmp);
if (test.TempLimHiTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.TempLimHi].Text, out dtmp))
test.TempLimHi = (float)Units.ConvertFrom(test.TempUnit, dtmp);
if (methodCBox.Items.Contains(lvi.SubItems[(int)MtrlgyClmn.Method].Text))
{
entity.Method = lvi.SubItems[(int)MtrlgyClmn.Method].Text;
test.Method = lvi.SubItems[(int)MtrlgyClmn.Method].Text;
}
}
}
private void metrology1ListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
MtrlgyClmn column = (MtrlgyClmn)e.SubItem;
#if TEST_PROFILES
if (e.SubItem == (int)MtrlgyClmn.Qtg) return;
#endif
if (!unlocked || (e.SubItem >= (int)MtrlgyClmn.CoulumnsCount)) return;
/// Unit change is allowed when locked
if ((column != MtrlgyClmn.FlowUnit && column != MtrlgyClmn.VolumeUnit && column != MtrlgyClmn.TempUnit) &&
(!unlocked || column >= MtrlgyClmn.ColumnsCount))
{
return;
}
MtrlgyClmn[] protectedColumns = new MtrlgyClmn[]
{
@ -916,7 +975,7 @@ namespace TBF.UI.Procedures
MtrlgyClmn.ErrLimLo, MtrlgyClmn.ErrLimHi,
MtrlgyClmn.TempLimLo, MtrlgyClmn.TempLimHi
};
if (((e.Item.Tag as Test).Profile >= TestProfile.Protected) && protectedColumns.Contains<MtrlgyClmn>((MtrlgyClmn)e.SubItem)) return;
if (((e.Item.Tag as Test).Profile >= TestProfile.Protected) && protectedColumns.Contains<MtrlgyClmn>(column)) return;
metrology1ListViewEx.StartEditing(metrology1Editors[e.SubItem], e.Item, e.SubItem);
}
@ -926,7 +985,7 @@ namespace TBF.UI.Procedures
#if TEST_PROFILES
if (e.SubItem == (int)MtrlgyClmn.Qtg) return;
#endif
if (!unlocked || e.SubItem >= (int)MtrlgyClmn.CoulumnsCount) return;
if (!unlocked || e.SubItem >= (int)MtrlgyClmn.ColumnsCount) return;
if (DialogResult.Yes == MessageBox.Show(Strings.Do_you_want_to_copy_this_value_to_all_cells_below_this_cell,
Strings.Confirmation, MessageBoxButtons.YesNo, MessageBoxIcon.Question))
@ -938,11 +997,20 @@ namespace TBF.UI.Procedures
{
if (value != null && item.SubItems.Count > columnNr)
{
/// This item is below e.Item
item.SubItems[columnNr].Text = value;
item.SubItems[columnNr].BackColor = backColor;
switch ((MtrlgyClmn)columnNr)
{
case MtrlgyClmn.FlowUnit: UpdateFlow(item, Units.FromDescription(value)); break;
case MtrlgyClmn.VolumeUnit: UpdateVolume(item, Units.FromDescription(value)); break;
case MtrlgyClmn.TempUnit: UpdateTemperature(item, Units.FromDescription(value)); break;
}
}
else if (item == e.Item)
{
/// Set 'value' to the value to be copied
value = item.SubItems[columnNr].Text;
backColor = item.SubItems[columnNr].BackColor;
}
@ -952,47 +1020,84 @@ namespace TBF.UI.Procedures
private void metrology1ListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
if (e.SubItem == (int)MtrlgyClmn.Name)
{
if (!Utils.IsGoodFName(e.DisplayText))
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return; /// NOK
}
}
Test test = e.Item.Tag as Test;
MtrlgyClmn column = (MtrlgyClmn)e.SubItem;
Unit newUnit;
int dummy;
if (e.SubItem == (int)MtrlgyClmn.Part)
float fdummy;
switch (column)
{
case MtrlgyClmn.Name:
if (Utils.IsGoodFName(e.DisplayText)) return; /// OK
break;
case MtrlgyClmn.Part:
if (e.DisplayText.Equals("-")) return; /// OK
if (!int.TryParse(e.DisplayText, out dummy) || !Data.IsGoodPartNr(dummy))
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return; /// NOK
}
}
if (int.TryParse(e.DisplayText, out dummy) && Data.IsGoodPartNr(dummy)) return; /// OK
break;
#if TEST_PROFILES
float fdummy;
if ((e.SubItem == (int)MtrlgyClmn.Qtg) && !Utils.TryParseUFloat(e.DisplayText, out fdummy))
case MtrlgyClmn.Qtg:
if (Utils.TryParseUFloat(e.DisplayText, out fdummy))
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return;
if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.QtgTextChngd = true;
return; /// OK
}
break;
#endif
case MtrlgyClmn.ErrLimLo:
case MtrlgyClmn.ErrLimHi:
if (Utils.TryParseSFloat(e.DisplayText, out fdummy)) return;
break;
if ((e.SubItem != (int)MtrlgyClmn.Qfrom) &&
(e.SubItem != (int)MtrlgyClmn.Qto) &&
(e.SubItem != (int)MtrlgyClmn.Volume) &&
(e.SubItem != (int)MtrlgyClmn.TestTime))
case MtrlgyClmn.TempLimLo:
if (Utils.TryParseUFloat(e.DisplayText, out fdummy))
{
return;
if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimLoTextChngd = true;
return; /// OK
}
float Qfrom = 1.0f;
float Qto = 1.0f;
break;
case MtrlgyClmn.TempLimHi:
if (Utils.TryParseUFloat(e.DisplayText, out fdummy))
{
if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimHiTextChngd = true;
return; /// OK
}
break;
case MtrlgyClmn.FlowUnit:
newUnit = Units.FromDescription(e.DisplayText);
if (!Units.IsFlow(newUnit)) break;
UpdateFlow(e.Item, newUnit);
return;
case MtrlgyClmn.VolumeUnit:
newUnit = Units.FromDescription(e.DisplayText);
if (!Units.IsVolume(newUnit)) break;
UpdateVolume(e.Item, newUnit);
return;
case MtrlgyClmn.TempUnit:
newUnit = Units.FromDescription(e.DisplayText);
if (!Units.IsTemperature(newUnit)) break;
UpdateTemperature(e.Item, newUnit);
return;
case MtrlgyClmn.Method:
if (methodCBox.Items.Contains(e.DisplayText)) return;
break;
case MtrlgyClmn.Qfrom:
case MtrlgyClmn.Qto:
case MtrlgyClmn.Volume:
case MtrlgyClmn.TestTime:
if (e.DisplayText == e.Item.SubItems[e.SubItem].Text) return; /// Nothing changed
float qFrom = 1.0f;
float qTo = 1.0f;
float volume = 0.0f;
float testTime = 0.0f;
@ -1000,47 +1105,121 @@ namespace TBF.UI.Procedures
bool calculateTime = false;
bool allOk = true;
if ((e.SubItem == (int)MtrlgyClmn.Qfrom) && Utils.TryParseUFloat(e.DisplayText, out Qfrom))
if (column == MtrlgyClmn.Qfrom && Utils.TryParseUFloat(e.DisplayText, out qFrom))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out qTo);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume);
if (allOk) calculateTime = true;
}
else if ((e.SubItem == (int)MtrlgyClmn.Qto) && Utils.TryParseUFloat(e.DisplayText, out Qto))
if (allOk)
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out Qfrom);
test.QfromTextChngd = true;
calculateTime = true;
}
}
else if (column == MtrlgyClmn.Qto && Utils.TryParseUFloat(e.DisplayText, out qTo))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out qFrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume);
if (allOk) calculateTime = true;
}
else if ((e.SubItem == (int)MtrlgyClmn.Volume) && Utils.TryParseUFloat(e.DisplayText, out volume))
if (allOk)
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
if (allOk) calculateTime = true;
test.QtoTextChngd = true;
calculateTime = true;
}
else if ((e.SubItem == (int)MtrlgyClmn.TestTime) && Utils.TryParseUFloat(e.DisplayText, out testTime))
}
else if (column == MtrlgyClmn.Volume && Utils.TryParseUFloat(e.DisplayText, out volume))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out Qfrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
if (allOk) calculateVolume = true;
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out qFrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out qTo);
if (allOk)
{
test.VolumeTextChngd = true;
calculateTime = true;
}
}
else if (column == MtrlgyClmn.TestTime && Utils.TryParseUFloat(e.DisplayText, out testTime))
{
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qfrom].Text, out qFrom);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out qTo);
if (allOk)
{
calculateVolume = true;
}
}
float Qave_lps = (Qfrom + Qto) / 7.2f;
float qAveLps = Units.ConvertFrom(test.FlowUnit, qFrom + qTo) / 7.2f;
if (calculateTime)
{
testTime = volume / Qave_lps;
float volumeLtr = Units.ConvertFrom(test.VolumeUnit, volume);
testTime = volumeLtr / qAveLps;
e.Item.SubItems[(int)MtrlgyClmn.TestTime].Text = testTime.ToString();
return;
}
else if (calculateVolume)
{
volume = testTime * Qave_lps;
e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = volume.ToString();
var volumeLtr = testTime * qAveLps;
e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = Units.ConvertTo(test.VolumeUnit, volumeLtr).ToString();
test.VolumeTextChngd = true;
return;
}
else
{
break; /// NOK - Restore original value
}
}
/// Display text was not OK, revert to the original one
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return;
}
void UpdateFlow(ListViewItem item, Unit newUnit)
{
Test test = item.Tag as Test;
if (test == null || !Units.IsFlow(newUnit) || newUnit == test.FlowUnit) return;
Unit oriUnit = test.FlowUnit;
test.FlowUnit = newUnit;
int ix = (int)MtrlgyClmn.Qfrom;
double flowM3ph = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text));
item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.QfromTextChngd ? flowM3ph : test.Qfrom).ToString();
ix = (int)MtrlgyClmn.Qto;
flowM3ph = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text));
item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.QtoTextChngd ? flowM3ph : test.Qto).ToString();
#if TEST_PROFILES
ix = (int)MtrlgyClmn.Qtg;
flowM3ph = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text));
item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.QtgTextChngd ? flowM3ph : test.Qtg).ToString();
#endif
}
void UpdateVolume(ListViewItem item, Unit newUnit)
{
Test test = item.Tag as Test;
if (test == null || !Units.IsVolume(newUnit) || newUnit == test.VolumeUnit) return;
Unit oriUnit = test.VolumeUnit;
test.VolumeUnit = newUnit;
int ix = (int)MtrlgyClmn.Volume;
double volumeLtr = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text));
item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.VolumeTextChngd ? volumeLtr : test.Volume).ToString();
}
void UpdateTemperature(ListViewItem item, Unit newUnit)
{
Test test = item.Tag as Test;
if (test == null || !Units.IsTemperature(newUnit) || newUnit == test.TempUnit) return;
Unit oriUnit = test.TempUnit;
test.TempUnit = newUnit;
int ix = (int)MtrlgyClmn.TempLimLo;
double tempC = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text));
item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.TempLimLoTextChngd ? tempC : test.TempLimLo).ToString();
ix = (int)MtrlgyClmn.TempLimHi;
tempC = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text));
item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.TempLimHiTextChngd ? tempC : test.TempLimHi).ToString();
}
#endregion
@ -2205,6 +2384,15 @@ namespace TBF.UI.Procedures
/// Add a test
Test test = new Test(newName, listViewEx.Items.Count, LoadedProcedure);
IBenchInfo benchInfo = TBF.Rig.Sequences.ProcessData.BenchInfo;
test.VolumeUnit = (benchInfo != null) ? benchInfo.VolumeUnit : Unit.l;
test.FlowUnit = (benchInfo != null) ? benchInfo.FlowUnit : Unit.m3ph;
test.MassUnit = (benchInfo != null) ? benchInfo.MassUnit : Unit.kg;
test.TempUnit = (benchInfo != null) ? benchInfo.TempUnit : Unit.C;
test.PressUnit = (benchInfo != null) ? benchInfo.PressUnit : Unit.bar;
test.LengthUnit = (benchInfo != null) ? benchInfo.LengthUnit : Unit.mm;
TestWizard.RoiData roiData = new TestWizard.RoiData();
/// Run a create new test wizard

View File

@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2015 Sensus Slovensko a.s.
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;