UI.Procedures.ProcedureDlg : Units selection in ProcedureDlg / Metrology1 Tab.
This commit is contained in:
parent
b9aebd8903
commit
766b52865a
@ -61,6 +61,19 @@ namespace Config.Entities
|
|||||||
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; }
|
||||||
|
|
||||||
public virtual Procedure Procedure { get; set; }
|
public virtual Procedure Procedure { 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,6 +192,12 @@ namespace Config.Entities
|
|||||||
result.TransBefore = TransBefore;
|
result.TransBefore = TransBefore;
|
||||||
result.TransBetween = TransBetween;
|
result.TransBetween = TransBetween;
|
||||||
result.TransAfter = TransAfter;
|
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()); }
|
foreach (var prms in MoreParams) { result.MoreParams.Add(prms.Clone()); }
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -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() { }
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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.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.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)
|
||||||
{
|
{
|
||||||
@ -846,18 +882,23 @@ namespace TBF.UI.Procedures
|
|||||||
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,47 +1020,84 @@ 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;
|
||||||
{
|
|
||||||
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
||||||
e.Cancel = true;
|
|
||||||
return; /// NOK
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int dummy;
|
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 (e.DisplayText.Equals("-")) return; /// OK
|
||||||
if (!int.TryParse(e.DisplayText, out dummy) || !Data.IsGoodPartNr(dummy))
|
if (int.TryParse(e.DisplayText, out dummy) && Data.IsGoodPartNr(dummy)) return; /// OK
|
||||||
{
|
break;
|
||||||
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
||||||
e.Cancel = true;
|
|
||||||
return; /// NOK
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#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))
|
|
||||||
{
|
{
|
||||||
return;
|
if (e.DisplayText != e.Item.SubItems[e.SubItem].Text) test.TempLimLoTextChngd = true;
|
||||||
|
return; /// OK
|
||||||
}
|
}
|
||||||
float Qfrom = 1.0f;
|
break;
|
||||||
float Qto = 1.0f;
|
|
||||||
|
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 volume = 0.0f;
|
||||||
float testTime = 0.0f;
|
float testTime = 0.0f;
|
||||||
|
|
||||||
@ -1000,47 +1105,121 @@ namespace TBF.UI.Procedures
|
|||||||
bool calculateTime = false;
|
bool calculateTime = false;
|
||||||
bool allOk = true;
|
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);
|
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume);
|
||||||
if (allOk) calculateTime = true;
|
if (allOk)
|
||||||
}
|
|
||||||
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);
|
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);
|
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Volume].Text, out volume);
|
||||||
if (allOk) calculateTime = true;
|
if (allOk)
|
||||||
}
|
|
||||||
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);
|
test.QtoTextChngd = true;
|
||||||
allOk &= Utils.TryParseUFloat(e.Item.SubItems[(int)MtrlgyClmn.Qto].Text, out Qto);
|
calculateTime = true;
|
||||||
if (allOk) 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.Qfrom].Text, 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);
|
||||||
if (allOk) calculateVolume = true;
|
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)
|
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();
|
e.Item.SubItems[(int)MtrlgyClmn.TestTime].Text = testTime.ToString();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (calculateVolume)
|
else if (calculateVolume)
|
||||||
{
|
{
|
||||||
volume = testTime * Qave_lps;
|
var volumeLtr = testTime * qAveLps;
|
||||||
e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = volume.ToString();
|
e.Item.SubItems[(int)MtrlgyClmn.Volume].Text = Units.ConvertTo(test.VolumeUnit, volumeLtr).ToString();
|
||||||
|
test.VolumeTextChngd = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
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.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
||||||
e.Cancel = true;
|
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,6 +2384,15 @@ 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);
|
||||||
|
|
||||||
|
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();
|
TestWizard.RoiData roiData = new TestWizard.RoiData();
|
||||||
|
|
||||||
/// Run a create new test wizard
|
/// Run a create new test wizard
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user