From 766b52865a0301673dcc44e26aa36a26ecfa186e Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Wed, 3 Nov 2021 11:09:34 +0100 Subject: [PATCH] UI.Procedures.ProcedureDlg : Units selection in ProcedureDlg / Metrology1 Tab. --- Config/Entities/Test.cs | 43 +- .../BenchInfo/Extended/Component.cs | 2 +- .../BenchInfo/iPerl/Component.cs | 2 +- TBF/Rig/GenericDevices/IBenchInfo.cs | 2 +- TBF/UI/Procedures/IProcParamsCtrl.cs | 5 +- TBF/UI/Procedures/ProcedureDlg.cs | 426 +++++++++++++----- TBF/UI/Procedures/ProcedureParamsCtrl.cs | 2 +- 7 files changed, 351 insertions(+), 131 deletions(-) diff --git a/Config/Entities/Test.cs b/Config/Entities/Test.cs index 9608390ed..d0ce97cc1 100644 --- a/Config/Entities/Test.cs +++ b/Config/Entities/Test.cs @@ -58,8 +58,21 @@ namespace Config.Entities public virtual string TransBetween { get; set; } public virtual string TransAfter { get; set; } - public virtual bool IsOuterLoopStart { get; set; } /// Not mapped to database - public virtual bool IsOuterLoopEnd { get; set; } /// Not mapped to database + 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 MoreParams { 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,7 +192,13 @@ namespace Config.Entities result.TransBefore = TransBefore; result.TransBetween = TransBetween; result.TransAfter = TransAfter; - foreach (var prms in MoreParams) { result.MoreParams.Add(prms.Clone()); } + 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; } @@ -322,10 +351,10 @@ namespace Config.Entities ln = inp.ReadLine(); if (ln != BenchPath) { diff.AppendFormat(fmt, "BenchPath", BenchPath, ln); }; ln = inp.ReadLine(); if (ln != OutputPath) { diff.AppendFormat(fmt, "OutputPath", OutputPath, ln); }; ln = inp.ReadLine(); if (ln != MetersPath) { diff.AppendFormat(fmt, "MetersPath", MetersPath, ln); }; - ln = inp.ReadLine(); if (ln != TransBefore) { diff.AppendFormat(fmt, "RelTransBefore", TransBefore, ln); }; - ln = inp.ReadLine(); if (ln != TransBetween) { diff.AppendFormat(fmt, "RelTransBetween", TransBetween, ln); }; - ln = inp.ReadLine(); if (ln != Profile.ToString()) { diff.AppendFormat(fmt, "RelTransAfter", Profile, ln); }; - ln = inp.ReadLine(); if (ln != TransAfter) { diff.AppendFormat(fmt, "TransitionAfter", TransAfter, ln); }; + ln = inp.ReadLine(); if (ln != TransBefore) { diff.AppendFormat(fmt, "RelTransBefore", TransBefore, ln); }; + ln = inp.ReadLine(); if (ln != TransBetween) { diff.AppendFormat(fmt, "RelTransBetween", TransBetween, ln); }; + ln = inp.ReadLine(); if (ln != Profile.ToString()) { diff.AppendFormat(fmt, "RelTransAfter", Profile, ln); }; + ln = inp.ReadLine(); if (ln != TransAfter) { diff.AppendFormat(fmt, "TransitionAfter", TransAfter, ln); }; return diff.ToString(); } diff --git a/TBF/Rig/DataContainers/BenchInfo/Extended/Component.cs b/TBF/Rig/DataContainers/BenchInfo/Extended/Component.cs index 226d0be34..10b71b62c 100644 --- a/TBF/Rig/DataContainers/BenchInfo/Extended/Component.cs +++ b/TBF/Rig/DataContainers/BenchInfo/Extended/Component.cs @@ -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() { } diff --git a/TBF/Rig/DataContainers/BenchInfo/iPerl/Component.cs b/TBF/Rig/DataContainers/BenchInfo/iPerl/Component.cs index 58c51f68b..d5d3f9441 100644 --- a/TBF/Rig/DataContainers/BenchInfo/iPerl/Component.cs +++ b/TBF/Rig/DataContainers/BenchInfo/iPerl/Component.cs @@ -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 diff --git a/TBF/Rig/GenericDevices/IBenchInfo.cs b/TBF/Rig/GenericDevices/IBenchInfo.cs index 84ef419e0..c2a54094d 100644 --- a/TBF/Rig/GenericDevices/IBenchInfo.cs +++ b/TBF/Rig/GenericDevices/IBenchInfo.cs @@ -25,6 +25,6 @@ namespace TBF.Rig.GenericDevices Unit MassUnit { get; } Unit TempUnit { get; } Unit PressUnit { get; } - Unit LenghtUnit { get; } + Unit LengthUnit { get; } } } diff --git a/TBF/UI/Procedures/IProcParamsCtrl.cs b/TBF/UI/Procedures/IProcParamsCtrl.cs index 4ceeedc31..456bbb3c6 100644 --- a/TBF/UI/Procedures/IProcParamsCtrl.cs +++ b/TBF/UI/Procedures/IProcParamsCtrl.cs @@ -1,4 +1,7 @@ -using System; +/// +/// Copyright (c) 2021 Sensus Slovensko a.s. +/// +using System; using System.Collections.Generic; using Config.Entities; diff --git a/TBF/UI/Procedures/ProcedureDlg.cs b/TBF/UI/Procedures/ProcedureDlg.cs index 715921e01..c9b46e648 100644 --- a/TBF/UI/Procedures/ProcedureDlg.cs +++ b/TBF/UI/Procedures/ProcedureDlg.cs @@ -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.Test_time_s_chdr, 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) { @@ -842,22 +878,27 @@ namespace TBF.UI.Procedures /// /// Metrology 1 item with subitems /// - ListViewItem lvi = new ListViewItem(test.Name); /// Name + ListViewItem lvi = new ListViewItem(test.Name); /// Name lvi.Tag = test; - lvi.SubItems.Add((test.Part == 0) ? "-" : test.Part.ToString()); /// Part + 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)e.SubItem)) return; + if (((e.Item.Tag as Test).Profile >= TestProfile.Protected) && protectedColumns.Contains(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,95 +1020,206 @@ 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; + float fdummy; - int dummy; - if (e.SubItem == (int)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 - } - } + 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)) return; /// OK + break; #if TEST_PROFILES - float fdummy; - if ((e.SubItem == (int)MtrlgyClmn.Qtg) && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) - { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; - return; - } + case MtrlgyClmn.Qtg: + if (Utils.TryParseUFloat(e.DisplayText, out fdummy)) + { + 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)) - { - return; - } - float Qfrom = 1.0f; - float Qto = 1.0f; - float volume = 0.0f; - float testTime = 0.0f; + case MtrlgyClmn.TempLimLo: + if (Utils.TryParseUFloat(e.DisplayText, out fdummy)) + { + if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimLoTextChngd = true; + return; /// OK + } + break; - bool calculateVolume = false; - bool calculateTime = false; - bool allOk = true; + 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; - if ((e.SubItem == (int)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.Volume].Text, out volume); - if (allOk) calculateTime = true; - } - else if ((e.SubItem == (int)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)) - { - 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; - } - else if ((e.SubItem == (int)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; - } + case MtrlgyClmn.FlowUnit: + newUnit = Units.FromDescription(e.DisplayText); + if (!Units.IsFlow(newUnit)) break; + UpdateFlow(e.Item, newUnit); + return; - float Qave_lps = (Qfrom + Qto) / 7.2f; - if (calculateTime) - { - testTime = volume / Qave_lps; - e.Item.SubItems[(int)MtrlgyClmn.TestTime].Text = testTime.ToString(); - } - else if (calculateVolume) - { - volume = testTime * Qave_lps; - e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = volume.ToString(); - } - else - { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; - } + 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; + + bool calculateVolume = false; + bool calculateTime = false; + bool allOk = true; + + 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.Volume].Text, out volume); + if (allOk) + { + 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) + { + test.QtoTextChngd = true; + calculateTime = true; + } + } + 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) + { + 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 qAveLps = Units.ConvertFrom(test.FlowUnit, qFrom + qTo) / 7.2f; + + if (calculateTime) + { + float volumeLtr = Units.ConvertFrom(test.VolumeUnit, volume); + testTime = volumeLtr / qAveLps; + e.Item.SubItems[(int)MtrlgyClmn.TestTime].Text = testTime.ToString(); + return; + } + else if (calculateVolume) + { + 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,7 +2384,16 @@ namespace TBF.UI.Procedures /// Add a test Test test = new Test(newName, listViewEx.Items.Count, LoadedProcedure); - TestWizard.RoiData roiData = new TestWizard.RoiData(); + + 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 TestWizard.MethodSelection methodDlg = new TestWizard.MethodSelection(true, false, test, TestMethods); diff --git a/TBF/UI/Procedures/ProcedureParamsCtrl.cs b/TBF/UI/Procedures/ProcedureParamsCtrl.cs index 73ded6995..aa9fd1e87 100644 --- a/TBF/UI/Procedures/ProcedureParamsCtrl.cs +++ b/TBF/UI/Procedures/ProcedureParamsCtrl.cs @@ -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;