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

@ -58,8 +58,21 @@ namespace Config.Entities
public virtual string TransBetween { get; set; } public virtual string TransBetween { get; set; }
public virtual string TransAfter { get; set; } public virtual string TransAfter { get; set; }
public virtual bool IsOuterLoopStart { 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 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 IList<ComponentTest> MoreParams { get; set; }
@ -125,6 +138,16 @@ namespace Config.Entities
return autoTests.Contains(action); 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) // Makes a new copy of this object (not just a reference)
public virtual Test Clone() public virtual Test Clone()
{ {
@ -169,7 +192,13 @@ namespace Config.Entities
result.TransBefore = TransBefore; result.TransBefore = TransBefore;
result.TransBetween = TransBetween; result.TransBetween = TransBetween;
result.TransAfter = TransAfter; 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; 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 != BenchPath) { diff.AppendFormat(fmt, "BenchPath", BenchPath, ln); };
ln = inp.ReadLine(); if (ln != OutputPath) { diff.AppendFormat(fmt, "OutputPath", OutputPath, 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 != MetersPath) { diff.AppendFormat(fmt, "MetersPath", MetersPath, ln); };
ln = inp.ReadLine(); if (ln != TransBefore) { diff.AppendFormat(fmt, "RelTransBefore", TransBefore, 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 != 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 != 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 != TransAfter) { diff.AppendFormat(fmt, "TransitionAfter", TransAfter, ln); };
return diff.ToString(); return diff.ToString();
} }

View File

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

View File

@ -36,7 +36,7 @@ namespace TBF.Rig.DataContainers.BenchInfo.iPerl
public Unit MassUnit { get { return myCfg.MassUnit; } } public Unit MassUnit { get { return myCfg.MassUnit; } }
public Unit TempUnit { get { return myCfg.TempUnit; } } public Unit TempUnit { get { return myCfg.TempUnit; } }
public Unit PressUnit { get { return myCfg.PressUnit; } } 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 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 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 MassUnit { get; }
Unit TempUnit { get; } Unit TempUnit { get; }
Unit PressUnit { 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 System.Collections.Generic;
using Config.Entities; using Config.Entities;

View File

@ -8,6 +8,7 @@ using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using log4net; using log4net;
using Common; using Common;
using Config;
using Config.Entities; using Config.Entities;
using Results.Forms; using Results.Forms;
using TBF.Rig.Generic; using TBF.Rig.Generic;
@ -396,6 +397,17 @@ namespace TBF.UI.Procedures
lastChangedByTextBox.ReadOnly = true; lastChangedByTextBox.ReadOnly = true;
lastChangedOnTextBox.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 /// History tab
InitializeHistoryTab(); /// Create ListViewEx columns for 'History of changes' InitializeHistoryTab(); /// Create ListViewEx columns for 'History of changes'
@ -771,14 +783,17 @@ namespace TBF.UI.Procedures
#endif #endif
Qfrom, Qfrom,
Qto, Qto,
FlowUnit,
Volume, Volume,
VolumeUnit,
TestTime, TestTime,
ErrLimLo, ErrLimLo,
ErrLimHi, ErrLimHi,
TempLimLo, TempLimLo,
TempLimHi, TempLimHi,
TempUnit,
Method, Method,
CoulumnsCount ColumnsCount
} }
void PrepareMetrology1Tab() 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.Test_chdr, Width = 70 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 }); lv.Columns.Add(new ColumnHeader { Text = Strings.Part, Width = 40 });
#if TEST_PROFILES #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 #endif
lv.Columns.Add(new ColumnHeader { Text = string.Format("{0} [m3/h]", Strings.Q_from), Width = 80 }); lv.Columns.Add(new ColumnHeader { Text = 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 = 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 = "Unit", Width = 50 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_time_s_chdr, Width = 70 }); 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_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.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 = 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_hi_chdr, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = "Unit", Width = 50 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Method_chdr, Width = 200 }); lv.Columns.Add(new ColumnHeader { Text = Strings.Method_chdr, Width = 200 });
methodCBox = new ComboBox(); methodCBox = new ComboBox();
foreach (var m in TestMethods) methodCBox.Items.Add(m.Cfg.Name); 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[] metrology1Editors = new Control[]
{ {
new TextBox(), /// Name new TextBox(), /// Name
@ -811,25 +833,39 @@ namespace TBF.UI.Procedures
#endif #endif
new TextBox(), /// Qfrom new TextBox(), /// Qfrom
new TextBox(), /// Qto new TextBox(), /// Qto
flowUnitBox,
new TextBox(), /// Volume new TextBox(), /// Volume
volUnitBox,
new TextBox(), /// Test time new TextBox(), /// Test time
new TextBox(), /// Err.Lim. - new TextBox(), /// Err.Lim. -
new TextBox(), /// Err.Lim. + new TextBox(), /// Err.Lim. +
new TextBox(), /// Temp.Lim. - new TextBox(), /// Temp.Lim. -
new TextBox(), /// Temp.Lim. + new TextBox(), /// Temp.Lim. +
tempUnitBox,
methodCBox, /// Method 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) foreach (var ctrl in metrology1Editors)
{ {
metrology1TabPage.Controls.Add(ctrl); metrology1TabPage.Controls.Add(ctrl);
} }
} }
void RefreshMetrology1Tab() void RefreshMetrology1Tab()
{ {
metrology1ListViewEx.Items.Clear(); 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) if (0 <= SelectedTestIx && SelectedTestIx < metrology1ListViewEx.Items.Count)
{ {
@ -842,22 +878,27 @@ namespace TBF.UI.Procedures
/// ///
/// Metrology 1 item with subitems /// Metrology 1 item with subitems
/// ///
ListViewItem lvi = new ListViewItem(test.Name); /// Name ListViewItem lvi = new ListViewItem(test.Name); /// Name
lvi.Tag = test; 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 #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 #endif
lvi.SubItems.Add(test.Qfrom.ToString()); /// Q_from lvi.SubItems.Add(Units.ConvertTo(test.FlowUnit, test.Qfrom).ToString()); /// Q_from
lvi.SubItems.Add(test.Qto.ToString()); /// Q_to lvi.SubItems.Add(Units.ConvertTo(test.FlowUnit, test.Qto).ToString()); /// Q_to
lvi.SubItems.Add(test.Volume.ToString()); /// VOlume 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.TestTime.ToString());
lvi.SubItems.Add(test.ErrLimLo.ToString()); lvi.SubItems.Add(test.ErrLimLo.ToString());
lvi.SubItems.Add(test.ErrLimHi.ToString()); lvi.SubItems.Add(test.ErrLimHi.ToString());
lvi.SubItems.Add(test.TempLimLo.ToString()); lvi.SubItems.Add(Units.ConvertTo(test.TempUnit, test.TempLimLo).ToString());
lvi.SubItems.Add(test.TempLimHi.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); lvi.SubItems.Add((test.Method != null) ? test.Method.ToString() : string.Empty);
test.ResetChngdFlags();
metrology1ListViewEx.Items.Add(lvi); metrology1ListViewEx.Items.Add(lvi);
} }
@ -866,48 +907,66 @@ namespace TBF.UI.Procedures
for (int i = 0; i < metrology1ListViewEx.Items.Count; i++) for (int i = 0; i < metrology1ListViewEx.Items.Count; i++)
{ {
ListViewItem lvi = metrology1ListViewEx.Items[i]; ListViewItem lvi = metrology1ListViewEx.Items[i];
Test entity = (Test)lvi.Tag; Test test = (Test)lvi.Tag;
entity.Name = lvi.Text; test.Name = lvi.Text;
entity.ItemNr = i; test.ItemNr = i;
int part = entity.Part; int part = test.Part;
if (lvi.SubItems[(int)MtrlgyClmn.Part].Text.Equals("-")) 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)) else if (int.TryParse(lvi.SubItems[(int)MtrlgyClmn.Part].Text, out part))
{ {
entity.Part = part; test.Part = part;
} }
float tmp; float tmp;
double dtmp;
#if TEST_PROFILES #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 #endif
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qfrom].Text, out tmp)) entity.Qfrom = tmp; if (test.QfromTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.Qfrom].Text, out dtmp))
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.Qto].Text, out tmp)) entity.Qto = tmp; test.Qfrom = (float)Units.ConvertFrom(test.FlowUnit, dtmp);
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 (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimLo].Text, out tmp)) entity.ErrLimLo = tmp; if (test.QtoTextChngd && Utils.TryParseUDouble(lvi.SubItems[(int)MtrlgyClmn.Qto].Text, out dtmp))
if (Utils.TryParseSFloat(lvi.SubItems[(int)MtrlgyClmn.ErrLimHi].Text, out tmp)) entity.ErrLimHi = tmp; test.Qto = (float)Units.ConvertFrom(test.FlowUnit, dtmp);
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.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)) 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) private void metrology1ListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{ {
MtrlgyClmn column = (MtrlgyClmn)e.SubItem;
#if TEST_PROFILES #if TEST_PROFILES
if (e.SubItem == (int)MtrlgyClmn.Qtg) return; if (e.SubItem == (int)MtrlgyClmn.Qtg) return;
#endif #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[] MtrlgyClmn[] protectedColumns = new MtrlgyClmn[]
{ {
@ -916,7 +975,7 @@ namespace TBF.UI.Procedures
MtrlgyClmn.ErrLimLo, MtrlgyClmn.ErrLimHi, MtrlgyClmn.ErrLimLo, MtrlgyClmn.ErrLimHi,
MtrlgyClmn.TempLimLo, MtrlgyClmn.TempLimHi 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); metrology1ListViewEx.StartEditing(metrology1Editors[e.SubItem], e.Item, e.SubItem);
} }
@ -926,7 +985,7 @@ namespace TBF.UI.Procedures
#if TEST_PROFILES #if TEST_PROFILES
if (e.SubItem == (int)MtrlgyClmn.Qtg) return; if (e.SubItem == (int)MtrlgyClmn.Qtg) return;
#endif #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, 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)) Strings.Confirmation, MessageBoxButtons.YesNo, MessageBoxIcon.Question))
@ -938,11 +997,20 @@ namespace TBF.UI.Procedures
{ {
if (value != null && item.SubItems.Count > columnNr) if (value != null && item.SubItems.Count > columnNr)
{ {
/// This item is below e.Item
item.SubItems[columnNr].Text = value; item.SubItems[columnNr].Text = value;
item.SubItems[columnNr].BackColor = backColor; 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) else if (item == e.Item)
{ {
/// Set 'value' to the value to be copied
value = item.SubItems[columnNr].Text; value = item.SubItems[columnNr].Text;
backColor = item.SubItems[columnNr].BackColor; backColor = item.SubItems[columnNr].BackColor;
} }
@ -952,95 +1020,206 @@ namespace TBF.UI.Procedures
private void metrology1ListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e) private void metrology1ListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{ {
if (e.SubItem == (int)MtrlgyClmn.Name) Test test = e.Item.Tag as Test;
{ MtrlgyClmn column = (MtrlgyClmn)e.SubItem;
if (!Utils.IsGoodFName(e.DisplayText)) Unit newUnit;
{ int dummy;
e.DisplayText = e.Item.SubItems[e.SubItem].Text; float fdummy;
e.Cancel = true;
return; /// NOK
}
}
int dummy; switch (column)
if (e.SubItem == (int)MtrlgyClmn.Part) {
{ case MtrlgyClmn.Name:
if (e.DisplayText.Equals("-")) return; /// OK if (Utils.IsGoodFName(e.DisplayText)) return; /// OK
if (!int.TryParse(e.DisplayText, out dummy) || !Data.IsGoodPartNr(dummy)) break;
{
e.DisplayText = e.Item.SubItems[e.SubItem].Text; case MtrlgyClmn.Part:
e.Cancel = true; if (e.DisplayText.Equals("-")) return; /// OK
return; /// NOK if (int.TryParse(e.DisplayText, out dummy) && Data.IsGoodPartNr(dummy)) return; /// OK
} break;
}
#if TEST_PROFILES #if TEST_PROFILES
float fdummy; case MtrlgyClmn.Qtg:
if ((e.SubItem == (int)MtrlgyClmn.Qtg) && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) if (Utils.TryParseUFloat(e.DisplayText, out fdummy))
{ {
e.DisplayText = e.Item.SubItems[e.SubItem].Text; if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.QtgTextChngd = true;
e.Cancel = true; return; /// OK
return; }
} break;
#endif #endif
case MtrlgyClmn.ErrLimLo:
case MtrlgyClmn.ErrLimHi:
if (Utils.TryParseSFloat(e.DisplayText, out fdummy)) return;
break;
if ((e.SubItem != (int)MtrlgyClmn.Qfrom) && case MtrlgyClmn.TempLimLo:
(e.SubItem != (int)MtrlgyClmn.Qto) && if (Utils.TryParseUFloat(e.DisplayText, out fdummy))
(e.SubItem != (int)MtrlgyClmn.Volume) && {
(e.SubItem != (int)MtrlgyClmn.TestTime)) if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimLoTextChngd = true;
{ return; /// OK
return; }
} break;
float Qfrom = 1.0f;
float Qto = 1.0f;
float volume = 0.0f;
float testTime = 0.0f;
bool calculateVolume = false; case MtrlgyClmn.TempLimHi:
bool calculateTime = false; if (Utils.TryParseUFloat(e.DisplayText, out fdummy))
bool allOk = true; {
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)) case MtrlgyClmn.FlowUnit:
{ newUnit = Units.FromDescription(e.DisplayText);
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto); if (!Units.IsFlow(newUnit)) break;
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume); UpdateFlow(e.Item, newUnit);
if (allOk) calculateTime = true; return;
}
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;
}
float Qave_lps = (Qfrom + Qto) / 7.2f; case MtrlgyClmn.VolumeUnit:
if (calculateTime) newUnit = Units.FromDescription(e.DisplayText);
{ if (!Units.IsVolume(newUnit)) break;
testTime = volume / Qave_lps; UpdateVolume(e.Item, newUnit);
e.Item.SubItems[(int)MtrlgyClmn.TestTime].Text = testTime.ToString(); return;
}
else if (calculateVolume) case MtrlgyClmn.TempUnit:
{ newUnit = Units.FromDescription(e.DisplayText);
volume = testTime * Qave_lps; if (!Units.IsTemperature(newUnit)) break;
e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = volume.ToString(); UpdateTemperature(e.Item, newUnit);
} return;
else
{ case MtrlgyClmn.Method:
e.DisplayText = e.Item.SubItems[e.SubItem].Text; if (methodCBox.Items.Contains(e.DisplayText)) return;
e.Cancel = true; 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 #endregion
@ -2205,7 +2384,16 @@ namespace TBF.UI.Procedures
/// Add a test /// Add a test
Test test = new Test(newName, listViewEx.Items.Count, LoadedProcedure); 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 /// Run a create new test wizard
TestWizard.MethodSelection methodDlg = new TestWizard.MethodSelection(true, false, test, TestMethods); TestWizard.MethodSelection methodDlg = new TestWizard.MethodSelection(true, false, test, TestMethods);

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;
using System.Collections.Generic; using System.Collections.Generic;