diff --git a/TBF/UI/Procedures/ProcedureDlg.cs b/TBF/UI/Procedures/ProcedureDlg.cs index 02eb6d5b6..67a1fd9f7 100644 --- a/TBF/UI/Procedures/ProcedureDlg.cs +++ b/TBF/UI/Procedures/ProcedureDlg.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2021 Sensus Slovensko a.s. +/// Copyright (c) 2013-2022 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -791,9 +791,8 @@ namespace TBF.UI.Procedures TestTime, ErrLimLo, ErrLimHi, - TempLimLo, - TempLimHi, - TempUnit, + Uncertainty, + Repeats, Method, ColumnsCount } @@ -814,9 +813,8 @@ namespace TBF.UI.Procedures 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 = 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.Uncertainty_pct_chdr, Width = 90 }); + lv.Columns.Add(new ColumnHeader { Text = Strings.Repeats_nr_chdr, Width = 90 }); lv.Columns.Add(new ColumnHeader { Text = Strings.Method_chdr, Width = 200 }); methodCBox = new ComboBox(); @@ -824,7 +822,11 @@ namespace TBF.UI.Procedures var flowUnitBox = new ComboBox(); var volUnitBox = new ComboBox(); - var tempUnitBox = new ComboBox(); + for (Common.Unit u = 0; u < Common.Unit.Count; u++) + { + if (Units.IsFlow(u)) flowUnitBox.Items.Add(u.ToDescription()); + if (Units.IsVolume(u)) volUnitBox.Items.Add(u.ToDescription()); + } metrology1Editors = new Control[] { @@ -841,19 +843,11 @@ namespace TBF.UI.Procedures new TextBox(), /// Test time new TextBox(), /// Err.Lim. - new TextBox(), /// Err.Lim. + - new TextBox(), /// Temp.Lim. - - new TextBox(), /// Temp.Lim. + - tempUnitBox, + new TextBox(), /// Uncertainty + new TextBox(), /// Repeats count methodCBox, /// Method }; - for (Unit u = 0; u < 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); @@ -894,9 +888,8 @@ namespace TBF.UI.Procedures lvi.SubItems.Add(test.TestTime.ToString()); lvi.SubItems.Add(test.ErrLimLo.ToString()); lvi.SubItems.Add(test.ErrLimHi.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.Uncertainty.ToString()); + lvi.SubItems.Add(test.Repeats.ToString()); lvi.SubItems.Add((test.Method != null) ? test.Method.ToString() : string.Empty); test.ResetChngdFlags(); @@ -924,6 +917,7 @@ namespace TBF.UI.Procedures test.Part = part; } + int itmp; float tmp; double dtmp; #if TEST_PROFILES @@ -940,14 +934,12 @@ namespace TBF.UI.Procedures 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.ErrLimLo].Text, out tmp)) test.ErrLimLo = tmp; if (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimHi].Text, out tmp)) test.ErrLimHi = tmp; + if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Uncertainty].Text, out tmp)) test.Uncertainty = 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 (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Repeats].Text, out itmp)) test.Repeats = itmp; if (methodCBox.Items.Contains(lvi.SubItems[(int)MtrlgyClmn.Method].Text)) { @@ -964,7 +956,7 @@ namespace TBF.UI.Procedures if (e.SubItem == (int)MtrlgyClmn.Qtg) return; #endif /// Unit change is allowed when locked - if ((column != MtrlgyClmn.FlowUnit && column != MtrlgyClmn.VolumeUnit && column != MtrlgyClmn.TempUnit) && + if ((column != MtrlgyClmn.FlowUnit && column != MtrlgyClmn.VolumeUnit) && (!unlocked || column >= MtrlgyClmn.ColumnsCount)) { return; @@ -975,7 +967,6 @@ namespace TBF.UI.Procedures MtrlgyClmn.Name, MtrlgyClmn.Qfrom, MtrlgyClmn.Qto, MtrlgyClmn.ErrLimLo, MtrlgyClmn.ErrLimHi, - MtrlgyClmn.TempLimLo, MtrlgyClmn.TempLimHi }; if (((e.Item.Tag as Test).Profile >= TestProfile.Protected) && protectedColumns.Contains(column)) return; @@ -1007,7 +998,6 @@ namespace TBF.UI.Procedures { 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) @@ -1053,20 +1043,12 @@ namespace TBF.UI.Procedures if (Utils.TryParseSFloat(e.DisplayText, out fdummy)) return; break; - case MtrlgyClmn.TempLimLo: - if (Utils.TryParseUFloat(e.DisplayText, out fdummy)) - { - if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimLoTextChngd = true; - return; /// OK - } + case MtrlgyClmn.Uncertainty: + if (Utils.TryParseUFloat(e.DisplayText, out fdummy)) return; 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 - } + case MtrlgyClmn.Repeats: + if (int.TryParse(e.DisplayText, out dummy)) return; /// OK break; case MtrlgyClmn.FlowUnit: @@ -1081,12 +1063,6 @@ namespace TBF.UI.Procedures 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; @@ -1215,11 +1191,11 @@ namespace TBF.UI.Procedures Unit oriUnit = test.TempUnit; test.TempUnit = newUnit; - int ix = (int)MtrlgyClmn.TempLimLo; + int ix = (int)Mtrlgy2Clmn.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; + ix = (int)Mtrlgy2Clmn.TempLimHi; tempC = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text)); item.SubItems[ix].Text = Units.ConvertTo(newUnit, test.TempLimHiTextChngd ? tempC : test.TempLimHi).ToString(); } @@ -1232,8 +1208,9 @@ namespace TBF.UI.Procedures { Name, Part, - Uncertainty, - Repeats, + TempLimLo, + TempLimHi, + TempUnit, ControlWaterTemp, ShortPulses, Publish, @@ -1248,24 +1225,31 @@ namespace TBF.UI.Procedures ListViewEx lv = metrology2ListViewEx; lv.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 }); lv.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 }); - lv.Columns.Add(new ColumnHeader { Text = Strings.Uncertainty_pct_chdr, Width = 90 }); - lv.Columns.Add(new ColumnHeader { Text = Strings.Repeats_nr_chdr, Width = 90 }); + 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.Control_water_temp_chdr, Width = 110 }); lv.Columns.Add(new ColumnHeader { Text = Strings.Short_pulses, Width = 100 }); /// Strings.Tol_red_pct_chdr lv.Columns.Add(new ColumnHeader { Text = Strings.Publish, Width = 100 }); lv.Columns.Add(new ColumnHeader { Text = Strings.Evaluate, Width = 100 }); - ComboBox publishCBox = new ComboBox(); /// control for Publish + ComboBox publishCBox = new ComboBox(); /// control for Publish for (Publish pb = 0; pb < Publish.Count; pb++) { publishCBox.Items.Add(pb.ToDescription()); } - ComboBox yesNo2CBox = new ComboBox(); /// control for Control water temp. + ComboBox tempUnitBox = new ComboBox(); + for (Common.Unit u = 0; u < Common.Unit.Count; u++) + { + if (Units.IsTemperature(u)) tempUnitBox.Items.Add(u.ToDescription()); + } + + ComboBox yesNo2CBox = new ComboBox(); /// control for Control water temp. yesNo2CBox.Items.Add(Strings.yes); yesNo2CBox.Items.Add(Strings.no); - ComboBox yesNo3CBox = new ComboBox(); /// control for Evaluate + ComboBox yesNo3CBox = new ComboBox(); /// control for Evaluate yesNo3CBox.Items.Add(Strings.yes); yesNo3CBox.Items.Add(Strings.no); @@ -1273,8 +1257,9 @@ namespace TBF.UI.Procedures { new TextBox(), /// Name new TextBox(), /// Part - new TextBox(), /// Uncertainty - new TextBox(), /// Repeats count + new TextBox(), /// Temp.Lim. - + new TextBox(), /// Temp.Lim. + + tempUnitBox, yesNo2CBox, /// Control water temp. new TextBox(), /// Short pulses publishCBox, /// Publish @@ -1306,8 +1291,9 @@ namespace TBF.UI.Procedures ListViewItem lvi = new ListViewItem(test.Name); /// Name lvi.Tag = test; lvi.SubItems.Add((test.Part == 0) ? "-" : test.Part.ToString()); /// Part - lvi.SubItems.Add(test.Uncertainty.ToString()); - lvi.SubItems.Add(test.Repeats.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.DoControlWaterTemp ? Strings.yes : Strings.no); lvi.SubItems.Add(test.ShortPulses.ToString()); lvi.SubItems.Add(((Publish)test.Publish).ToDescription()); @@ -1318,6 +1304,8 @@ namespace TBF.UI.Procedures void UpdateFromMetrology2Tab() { + double dtmp; + for (int i = 0; i < metrology2ListViewEx.Items.Count; i++) { try @@ -1327,12 +1315,16 @@ namespace TBF.UI.Procedures entity.ItemNr = i; entity.Name = lvi.SubItems[(int)Mtrlgy2Clmn.Name].Text; entity.Part = lvi.SubItems[(int)Mtrlgy2Clmn.Part].Text.Equals("-") ? 0 : int.Parse(lvi.SubItems[(int)Mtrlgy2Clmn.Part].Text); - entity.Uncertainty = Utils.ParseUFloat(lvi.SubItems[(int)Mtrlgy2Clmn.Uncertainty].Text); - entity.Repeats = int.Parse(lvi.SubItems[(int)Mtrlgy2Clmn.Repeats].Text); entity.DoControlWaterTemp = lvi.SubItems[(int)Mtrlgy2Clmn.ControlWaterTemp].Text.Equals(Strings.yes); entity.ShortPulses = int.Parse(lvi.SubItems[(int)Mtrlgy2Clmn.ShortPulses].Text); entity.DoEvaluate = lvi.SubItems[(int)Mtrlgy2Clmn.Evaluate].Text.Equals(Strings.yes); + if (entity.TempLimLoTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)Mtrlgy2Clmn.TempLimLo].Text, out dtmp)) + entity.TempLimLo = (float)Units.ConvertFrom(entity.TempUnit, dtmp); + + if (entity.TempLimHiTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)Mtrlgy2Clmn.TempLimHi].Text, out dtmp)) + entity.TempLimHi = (float)Units.ConvertFrom(entity.TempUnit, dtmp); + for (Publish pb = 0; pb < Publish.Count; pb++) { if (lvi.SubItems[(int)Mtrlgy2Clmn.Publish].Text.Equals(pb.ToDescription())) @@ -1351,11 +1343,18 @@ namespace TBF.UI.Procedures private void metrology2ListViewEx_SubItemClicked(object sender, SubItemEventArgs e) { - if (!unlocked || e.SubItem >= (int)Mtrlgy2Clmn.ColumnsCount) return; + Mtrlgy2Clmn column = (Mtrlgy2Clmn)e.SubItem; + + /// Unit change is allowed when locked + if (column != Mtrlgy2Clmn.TempUnit && (!unlocked || column >= Mtrlgy2Clmn.ColumnsCount)) + { + return; + } Mtrlgy2Clmn[] protectedColumns = new Mtrlgy2Clmn[] { Mtrlgy2Clmn.Name, + Mtrlgy2Clmn.TempLimLo, Mtrlgy2Clmn.TempLimHi, Mtrlgy2Clmn.Publish, Mtrlgy2Clmn.Evaluate }; if (((e.Item.Tag as Test).Profile >= TestProfile.Protected) && protectedColumns.Contains((Mtrlgy2Clmn)e.SubItem)) return; @@ -1382,6 +1381,8 @@ namespace TBF.UI.Procedures { item.SubItems[columnNr].Text = value; item.SubItems[columnNr].BackColor = backColor; + + if (columnNr == (int)Mtrlgy2Clmn.TempUnit) UpdateTemperature(item, Units.FromDescription(value)); } else if (item == e.Item) { @@ -1394,54 +1395,64 @@ namespace TBF.UI.Procedures private void metrology2ListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e) { - if (e.SubItem == (int)Mtrlgy2Clmn.Name) - { - if (!Utils.IsGoodFName(e.DisplayText)) - { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; - return; - } - } - + Test test = e.Item.Tag as Test; + Mtrlgy2Clmn column = (Mtrlgy2Clmn)e.SubItem; + Unit newUnit; int dummy; - if (e.SubItem == (int)Mtrlgy2Clmn.Part) + uint udummy; + float fdummy; + + switch (column) { - if (e.DisplayText.Equals("-")) return; /// OK - if (!int.TryParse(e.DisplayText, out dummy) || !Data.IsGoodPartNr(dummy)) + case Mtrlgy2Clmn.Name: + if (Utils.IsGoodFName(e.DisplayText)) return; /// OK + break; + + case Mtrlgy2Clmn.Part: { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; - return; /// NOK + if (e.DisplayText.Equals("-")) return; /// OK + if (int.TryParse(e.DisplayText, out dummy) && Data.IsGoodPartNr(dummy)) return; /// OK + break; } - } - if ((e.SubItem == (int)Mtrlgy2Clmn.Repeats) && !int.TryParse(e.DisplayText, out dummy)) - { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; - return; - } + case Mtrlgy2Clmn.TempLimLo: + if (Utils.TryParseUFloat(e.DisplayText, out fdummy)) + { + if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimLoTextChngd = true; + return; /// OK + } + break; - int idummy; - if ((e.SubItem == (int)Mtrlgy2Clmn.ShortPulses) && (!int.TryParse(e.DisplayText, out idummy) || idummy < 0 || idummy > 1)) - { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; - return; - } + case Mtrlgy2Clmn.TempLimHi: + if (Utils.TryParseUFloat(e.DisplayText, out fdummy)) + { + if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimHiTextChngd = true; + return; /// OK + } + break; - - /// Combo boxes - if ((e.SubItem == (int)Mtrlgy2Clmn.ControlWaterTemp) || (e.SubItem == (int)Mtrlgy2Clmn.Publish) || (e.SubItem == (int)Mtrlgy2Clmn.Evaluate)) - { - if (!(metrology2Editors[e.SubItem] as ComboBox).Items.Contains(e.DisplayText)) - { - e.DisplayText = e.Item.SubItems[e.SubItem].Text; - e.Cancel = true; + case Mtrlgy2Clmn.TempUnit: + newUnit = Units.FromDescription(e.DisplayText); + if (!Units.IsTemperature(newUnit)) break; + UpdateTemperature(e.Item, newUnit); return; - } + + case Mtrlgy2Clmn.ShortPulses: + if (uint.TryParse(e.DisplayText, out udummy)) return; + break; + + case Mtrlgy2Clmn.ControlWaterTemp: + case Mtrlgy2Clmn.Publish: + case Mtrlgy2Clmn.Evaluate: + /// Combo boxes + if ((metrology2Editors[e.SubItem] as ComboBox).Items.Contains(e.DisplayText)) return; /// OK + break; } + + /// Display text was not OK, revert to the original one + e.DisplayText = e.Item.SubItems[e.SubItem].Text; + e.Cancel = true; + return; } #endregion