2019-10-29 14:59:05 +00:00
|
|
|
|
///
|
|
|
|
|
|
/// Copyright (c) 2019 Sensus Slovensko a.s.
|
|
|
|
|
|
///
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
using log4net;
|
|
|
|
|
|
using Config.Entities;
|
|
|
|
|
|
using Results.Forms;
|
|
|
|
|
|
using TBF.BenchControl.Generic;
|
|
|
|
|
|
using TBF.BenchControl.GenericDevices;
|
|
|
|
|
|
using TBF.Resources;
|
|
|
|
|
|
using TBF.UI.Shared;
|
|
|
|
|
|
using TBF.BenchControl.Output;
|
|
|
|
|
|
using TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead;
|
|
|
|
|
|
|
|
|
|
|
|
namespace TBF.UI.Bench.TestProfiles
|
|
|
|
|
|
{
|
|
|
|
|
|
public partial class TestProfileDlg : Form, IParentOfListViewEx
|
|
|
|
|
|
{
|
|
|
|
|
|
static readonly ILog log = LogManager.GetLogger(typeof(TestProfileDlg));
|
|
|
|
|
|
|
|
|
|
|
|
/// Used when re-scaling the dialog: 100% = 96dpi, 125% = 120dpi, 150% = 144dpi
|
|
|
|
|
|
public readonly int Dpi;
|
|
|
|
|
|
|
|
|
|
|
|
readonly bool openUnlocked;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2019-10-31 13:02:20 +00:00
|
|
|
|
/// Profile to be updated by this dialog.
|
2019-10-29 14:59:05 +00:00
|
|
|
|
/// Set by the constructor or updated by the parent after creation and before loading.
|
|
|
|
|
|
/// </summary>
|
2019-10-31 13:02:20 +00:00
|
|
|
|
public Profile LoadedProfile;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
public int SelectedTestIx; /// -1 = none, 0 = 1st = top
|
|
|
|
|
|
|
|
|
|
|
|
IList<string> usedNames; /// Already used names
|
|
|
|
|
|
|
|
|
|
|
|
/// Auxiliary public lists used also by user controls in tab pages
|
|
|
|
|
|
public IList<BenchControl.Generic.IComponent> TbfComponents;
|
|
|
|
|
|
|
|
|
|
|
|
bool unlocked;
|
|
|
|
|
|
|
|
|
|
|
|
public TestProfileDlg()
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Detect display setting: 100% = 96dpi, 125% = 120dpi, 150% = 144dpi.
|
|
|
|
|
|
Dpi = (int)this.CreateGraphics().DpiX;
|
|
|
|
|
|
openUnlocked = false;
|
|
|
|
|
|
|
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
|
|
/// SharedDlgButtons configuration
|
2019-10-31 13:02:20 +00:00
|
|
|
|
sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.WaterMeterAuthority };
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove |
|
|
|
|
|
|
SharedButtons.Buttons.Up | SharedButtons.Buttons.Down;
|
|
|
|
|
|
sharedButtons.Unlocked += Unlocked;
|
|
|
|
|
|
sharedButtons.OKClicked += okButton_Click;
|
|
|
|
|
|
sharedButtons.CancelClicked += cancelButton_Click;
|
|
|
|
|
|
sharedButtons.AddClicked += addButton_Click;
|
|
|
|
|
|
sharedButtons.RemoveClicked += removeButton_Click;
|
|
|
|
|
|
sharedButtons.UpClicked += upButton_Click;
|
|
|
|
|
|
sharedButtons.DownClicked += downButton_Click;
|
|
|
|
|
|
|
|
|
|
|
|
/// ListViewEx-es configuration
|
2019-10-31 13:02:20 +00:00
|
|
|
|
metrologyListViewEx.SubItemClicked += new SubItemEventHandler(metrologyListViewEx_SubItemClicked);
|
|
|
|
|
|
metrologyListViewEx.SubItemRightClicked += new SubItemEventHandler(metrologyListViewEx_SubItemRightClicked);
|
|
|
|
|
|
metrologyListViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(metrologyListViewEx_SubItemEndEditing);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
errorFlagsListViewEx.SubItemClicked += new SubItemEventHandler(errorFlagsListViewEx_SubItemClicked);
|
|
|
|
|
|
errorFlagsListViewEx.SubItemRightClicked += new SubItemEventHandler(errorFlagsListViewEx_SubItemRightClicked);
|
|
|
|
|
|
errorFlagsListViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(errorFlagsListViewEx_SubItemEndEditing);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
SelectedTestIx = -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
public TestProfileDlg(Config.Entities.Profile profile, IList<string> usedNames, bool openUnlocked = false)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
: this()
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (profile == null) throw new ArgumentNullException("profile");
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
LoadedProfile = profile;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
this.usedNames = usedNames;
|
|
|
|
|
|
this.openUnlocked = openUnlocked;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.WaterMeterAuthority };
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void ProcedureDlg_Load(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
Localize();
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (LoadedProfile == null) return; /// return in case the dialog is open in the designer
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
LoadUISettings();
|
|
|
|
|
|
|
|
|
|
|
|
procNameTextBox.Enabled = false;
|
|
|
|
|
|
descriptionTextBox.Enabled = false;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
profileTypeRadioButton1.Enabled = false;
|
|
|
|
|
|
profileTypeRadioButton2.Enabled = false;
|
|
|
|
|
|
profileTypeRadioButton3.Enabled = false;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
#if !HEAT_METERS
|
2019-10-31 13:02:20 +00:00
|
|
|
|
profileTypeRadioButton3.Visible = false;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
/// Make some controls readonly
|
|
|
|
|
|
createdByTextBox.ReadOnly = true;
|
|
|
|
|
|
createdOnTextBox.ReadOnly = true;
|
|
|
|
|
|
lastChangedByTextBox.ReadOnly = true;
|
|
|
|
|
|
lastChangedOnTextBox.ReadOnly = true;
|
|
|
|
|
|
|
|
|
|
|
|
/// LisViewEx columns and edit controls for 'Metrology1', 'Metrology2', 'Process' and 'Parameters' tabs
|
2019-10-31 13:02:20 +00:00
|
|
|
|
PrepareMetrologyTab();
|
|
|
|
|
|
PrepareErrorFlags();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
/// Now refresh the content of the dialog
|
|
|
|
|
|
RefreshGeneralTab();
|
2019-10-31 13:02:20 +00:00
|
|
|
|
RefreshMetrologyTab();
|
|
|
|
|
|
RefreshErrorFlagsTab();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
/// Optionally unlock this dialog
|
|
|
|
|
|
if (openUnlocked)
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.UnlockButtons();
|
|
|
|
|
|
Unlocked(sender, e);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Localize()
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
Text = Strings.Test_profiles;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
generalTabPage.Text = Strings.General;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
metrology1TabPage.Text = Strings.Metrology;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
parametersTabPage.Text = Strings.Parameters;
|
|
|
|
|
|
|
|
|
|
|
|
label1.Text = Strings.Procedure_name;
|
|
|
|
|
|
label12.Text = Strings.Short_description;
|
|
|
|
|
|
label13.Text = Strings.Created_by;
|
|
|
|
|
|
label16.Text = Strings.Last_changed_by;
|
|
|
|
|
|
label14.Text = Strings.Date;
|
|
|
|
|
|
label15.Text = Strings.Date;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
|
|
|
|
|
|
//profileTypeRadioButton1.Text = Strings.SingleBtnText;
|
|
|
|
|
|
//profileTypeRadioButton2.Text = Strings.Compound;
|
|
|
|
|
|
//profileTypeRadioButton3.Text = Strings.Heat_meter;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
#region General
|
|
|
|
|
|
|
|
|
|
|
|
void RefreshGeneralTab()
|
|
|
|
|
|
{
|
|
|
|
|
|
procNameTextBox.Text = LoadedProfile.Name;
|
|
|
|
|
|
Text = string.Format("{0} {1} {2}", Strings.Profile, LoadedProfile.ItemNr + 1, LoadedProfile.Name);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
descriptionTextBox.Text = LoadedProfile.Description;
|
|
|
|
|
|
createdByTextBox.Text = LoadedProfile.CreationUser;
|
|
|
|
|
|
createdOnTextBox.Text = LoadedProfile.CreationTime.ToString();
|
|
|
|
|
|
lastChangedByTextBox.Text = LoadedProfile.LastChgUser;
|
|
|
|
|
|
if (LoadedProfile.LastChgTime > LoadedProfile.CreationTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
lastChangedOnTextBox.Text = LoadedProfile.LastChgTime.ToString();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void UpdateFromGeneralTab()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
LoadedProfile.Name = procNameTextBox.Text;
|
|
|
|
|
|
Text = string.Format("{0} {1} {2}", Strings.Profile, LoadedProfile.ItemNr + 1, LoadedProfile.Name);
|
|
|
|
|
|
|
|
|
|
|
|
LoadedProfile.Description = descriptionTextBox.Text;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Metrology
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
Control[] metrologyEditors;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
public enum MtrlgyClmn
|
|
|
|
|
|
{
|
|
|
|
|
|
Name,
|
|
|
|
|
|
CoefQfrom,
|
|
|
|
|
|
CoefQto,
|
|
|
|
|
|
ErrLimLo,
|
|
|
|
|
|
ErrLimHi,
|
|
|
|
|
|
TempLimLo,
|
|
|
|
|
|
TempLimHi,
|
|
|
|
|
|
PressLimLo,
|
|
|
|
|
|
PressLimHi,
|
|
|
|
|
|
ColumnsCount
|
|
|
|
|
|
}
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void PrepareMetrologyTab()
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewEx lv = metrologyListViewEx;
|
|
|
|
|
|
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
|
|
|
|
|
|
lv.Columns.Add(new ColumnHeader { Text = Strings.Q_from_m3h, Width = 80 });
|
|
|
|
|
|
lv.Columns.Add(new ColumnHeader { Text = Strings.Q_to_m3h, 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 = 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.Press_lim_lo_chdr, Width = 80 });
|
|
|
|
|
|
lv.Columns.Add(new ColumnHeader { Text = Strings.Press_lim_hi_chdr, Width = 80 });
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
metrologyEditors = new Control[]
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
new TextBox(), /// Name
|
|
|
|
|
|
new TextBox(), /// CoefQfrom
|
|
|
|
|
|
new TextBox(), /// CoefQto
|
|
|
|
|
|
new TextBox(), /// Err.Lim. -
|
|
|
|
|
|
new TextBox(), /// Err.Lim. +
|
|
|
|
|
|
new TextBox(), /// Temp.Lim. -
|
|
|
|
|
|
new TextBox(), /// Temp.Lim. +
|
|
|
|
|
|
new TextBox(), /// Press.Lim. -
|
|
|
|
|
|
new TextBox(), /// Press.Lim. +
|
2019-10-29 14:59:05 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
foreach (var ctrl in metrologyEditors)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
metrology1TabPage.Controls.Add(ctrl);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void RefreshMetrologyTab()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
metrologyListViewEx.Items.Clear();
|
|
|
|
|
|
foreach (var test in LoadedProfile.Tests) AddToMetrologyTab(test);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (0 <= SelectedTestIx && SelectedTestIx < metrologyListViewEx.Items.Count)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
metrologyListViewEx.Items[SelectedTestIx].Selected = true;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void AddToMetrologyTab(PTest pTest)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
///
|
2019-10-31 13:02:20 +00:00
|
|
|
|
/// Metrology 1 item with subitems
|
2019-10-29 14:59:05 +00:00
|
|
|
|
///
|
2019-10-31 13:02:20 +00:00
|
|
|
|
ListViewItem lvi = new ListViewItem(pTest.Name);
|
|
|
|
|
|
lvi.Tag = pTest;
|
|
|
|
|
|
lvi.SubItems.Add(pTest.CoefQfrom.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.CoefQto.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.ErrLimLo.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.ErrLimHi.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.TempLimLo.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.TempLimHi.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.PressLimLo.ToString());
|
|
|
|
|
|
lvi.SubItems.Add(pTest.PressLimHi.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
metrologyListViewEx.Items.Add(lvi);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void UpdateFromMetrologyTab()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
for (int i = 0; i < metrologyListViewEx.Items.Count; i++)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
ListViewItem lvi = metrologyListViewEx.Items[i];
|
|
|
|
|
|
PTest entity = (PTest)lvi.Tag;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
entity.Name = lvi.Text;
|
|
|
|
|
|
entity.ItemNr = i;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
float tmp;
|
|
|
|
|
|
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.CoefQfrom].Text, out tmp)) entity.CoefQfrom = tmp;
|
|
|
|
|
|
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.CoefQto].Text, out tmp)) entity.CoefQto = tmp;
|
|
|
|
|
|
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 (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.PressLimLo].Text, out tmp)) entity.PressLimLo = tmp;
|
|
|
|
|
|
if (Utils.TryParseUFloat(lvi.SubItems[(int)MtrlgyClmn.PressLimHi].Text, out tmp)) entity.PressLimHi = tmp;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
private void metrologyListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (e.SubItem == (int)MtrlgyClmn.Name) return;
|
|
|
|
|
|
if (unlocked && (e.SubItem < (int)MtrlgyClmn.ColumnsCount))
|
|
|
|
|
|
{
|
|
|
|
|
|
metrologyListViewEx.StartEditing(metrologyEditors[e.SubItem], e.Item, e.SubItem);
|
|
|
|
|
|
}
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void metrologyListViewEx_SubItemRightClicked(object sender, SubItemEventArgs e)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (!unlocked || e.SubItem >= (int)MtrlgyClmn.ColumnsCount) return;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
|
{
|
|
|
|
|
|
int columnNr = e.SubItem;
|
|
|
|
|
|
string value = null;
|
|
|
|
|
|
System.Drawing.Color backColor = System.Drawing.Color.White;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
foreach (ListViewItem item in metrologyListViewEx.Items)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (value != null && item.SubItems.Count > columnNr)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.SubItems[columnNr].Text = value;
|
|
|
|
|
|
item.SubItems[columnNr].BackColor = backColor;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (item == e.Item)
|
|
|
|
|
|
{
|
|
|
|
|
|
value = item.SubItems[columnNr].Text;
|
|
|
|
|
|
backColor = item.SubItems[columnNr].BackColor;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
private void metrologyListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (e.SubItem == (int)MtrlgyClmn.Name)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (!Utils.IsGoodFName(e.DisplayText))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
|
|
|
|
e.Cancel = true;
|
|
|
|
|
|
return; /// NOK
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
float fdummy;
|
|
|
|
|
|
if ((e.SubItem == (int)MtrlgyClmn.CoefQfrom && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.CoefQto && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.ErrLimLo && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.ErrLimHi && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.TempLimLo && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.TempLimHi && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.PressLimLo && !Utils.TryParseUFloat(e.DisplayText, out fdummy)) ||
|
|
|
|
|
|
(e.SubItem == (int)MtrlgyClmn.PressLimHi && !Utils.TryParseUFloat(e.DisplayText, out fdummy)))
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Cannot parse => revert content of the cell
|
2019-10-29 14:59:05 +00:00
|
|
|
|
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
|
|
|
|
e.Cancel = true;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
return;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
#region Error flags
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
public enum ErrorFlagsClmn
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
Name,
|
2019-10-31 13:02:20 +00:00
|
|
|
|
E1,
|
|
|
|
|
|
E2,
|
|
|
|
|
|
E3,
|
|
|
|
|
|
E4,
|
|
|
|
|
|
E5,
|
|
|
|
|
|
E6,
|
|
|
|
|
|
E7,
|
|
|
|
|
|
E8,
|
|
|
|
|
|
E9,
|
|
|
|
|
|
E10,
|
|
|
|
|
|
E11,
|
|
|
|
|
|
E12,
|
|
|
|
|
|
E13,
|
|
|
|
|
|
E14,
|
|
|
|
|
|
E15,
|
|
|
|
|
|
E16,
|
|
|
|
|
|
E21,
|
2019-10-29 14:59:05 +00:00
|
|
|
|
ColumnsCount
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
Control[] errorFlagsEditors;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void PrepareErrorFlags()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
ListViewEx lv = errorFlagsListViewEx;
|
|
|
|
|
|
errorFlagsEditors = new Control[(int)ErrorFlagsClmn.ColumnsCount];
|
|
|
|
|
|
int ix = 0;
|
|
|
|
|
|
|
2019-10-29 14:59:05 +00:00
|
|
|
|
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_chdr, Width = 70 });
|
2019-10-31 13:02:20 +00:00
|
|
|
|
errorFlagsEditors[ix++] = new TextBox(); /// Name
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
string[] ecka = new string[] { "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "E10", "E11", "E12", "E13", "E14", "E15", "E16", "E21" };
|
|
|
|
|
|
for (var e = ErrorFlagsClmn.E1; e <= ErrorFlagsClmn.E21; e++)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Column header
|
|
|
|
|
|
lv.Columns.Add(new ColumnHeader { Text = e.ToString(), Width = 50 });
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
/// Edit control
|
|
|
|
|
|
ComboBox cb = new ComboBox();
|
|
|
|
|
|
for (ErrorFlagsMode efm = 0; efm < ErrorFlagsMode.Count; efm++) cb.Items.Add(efm.ToDescription());
|
|
|
|
|
|
errorFlagsEditors[ix++] = cb;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.Mass_repeats, Width = 90 });
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.Mass_spread_kg, Width = 110 });
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.Mass_method, Width = 90 });
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.TimePump2StartV_chdr, Width = 70 });
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.TimeBeforeSettingFlow, Width = 70 });
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.TimeFlow2Start_chdr, Width = 70 });
|
|
|
|
|
|
//lv.Columns.Add(new ColumnHeader { Text = Strings.Time2MassMsrmt_chdr, Width = 70 });
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var ctrl in errorFlagsEditors) parametersTabPage.Controls.Add(ctrl);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void RefreshErrorFlagsTab()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
errorFlagsListViewEx.Items.Clear();
|
|
|
|
|
|
foreach (var test in LoadedProfile.Tests) AddToErrorFlagsTab(test);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (0 <= SelectedTestIx && SelectedTestIx < errorFlagsListViewEx.Items.Count)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
errorFlagsListViewEx.Items[SelectedTestIx].Selected = true;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void AddToErrorFlagsTab(PTest test)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
///
|
|
|
|
|
|
/// Parameters item with subitems
|
|
|
|
|
|
///
|
|
|
|
|
|
ListViewItem lvi = new ListViewItem(test.Name); /// Name
|
|
|
|
|
|
lvi.Tag = test;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E1));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E2));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E3));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E4));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E5));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E6));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E7));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E8));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E9));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E10));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E11));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E12));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E13));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E14));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E15));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E16));
|
|
|
|
|
|
lvi.SubItems.Add(SByte2String(test.E21));
|
|
|
|
|
|
|
|
|
|
|
|
//lvi.SubItems.Add(test.PumpPower.ToString("F1"));
|
|
|
|
|
|
//lvi.SubItems.Add((test.MassRepeats < 4 ? 5 : test.MassRepeats).ToString());
|
|
|
|
|
|
//lvi.SubItems.Add(test.MassSpread.ToString("F4"));
|
|
|
|
|
|
//lvi.SubItems.Add(test.MassMethod.ToDescription());
|
|
|
|
|
|
//lvi.SubItems.Add(test.TimePump2StartV.ToString());
|
|
|
|
|
|
//lvi.SubItems.Add(test.TimeBeforeFlow.ToString());
|
|
|
|
|
|
//lvi.SubItems.Add(test.TimeFlow2Mass.ToString());
|
|
|
|
|
|
//lvi.SubItems.Add(test.TimeStop2Mass.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
errorFlagsListViewEx.Items.Add(lvi);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void UpdateFromErrorFlagsTab()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
for (int i = 0; i < errorFlagsListViewEx.Items.Count; i++)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
ListViewItem lvi = errorFlagsListViewEx.Items[i];
|
|
|
|
|
|
PTest entity = (PTest)lvi.Tag;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
entity.Name = lvi.Text;
|
|
|
|
|
|
entity.ItemNr = i;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
entity.E1 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E1].Text);
|
|
|
|
|
|
entity.E2 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E2].Text);
|
|
|
|
|
|
entity.E3 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E3].Text);
|
|
|
|
|
|
entity.E4 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E4].Text);
|
|
|
|
|
|
entity.E5 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E5].Text);
|
|
|
|
|
|
entity.E6 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E6].Text);
|
|
|
|
|
|
entity.E7 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E7].Text);
|
|
|
|
|
|
entity.E8 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E8].Text);
|
|
|
|
|
|
entity.E9 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E9].Text);
|
|
|
|
|
|
entity.E10 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E10].Text);
|
|
|
|
|
|
entity.E11 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E11].Text);
|
|
|
|
|
|
entity.E12 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E12].Text);
|
|
|
|
|
|
entity.E13 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E13].Text);
|
|
|
|
|
|
entity.E14 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E14].Text);
|
|
|
|
|
|
entity.E15 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E15].Text);
|
|
|
|
|
|
entity.E16 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E16].Text);
|
|
|
|
|
|
entity.E21 = String2SByte(lvi.SubItems[(int)ErrorFlagsClmn.E21].Text);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
private void errorFlagsListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (!unlocked || e.SubItem >= (int)ErrorFlagsClmn.ColumnsCount)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
errorFlagsListViewEx.StartEditing(errorFlagsEditors[e.SubItem], e.Item, e.SubItem);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void errorFlagsListViewEx_SubItemRightClicked(object sender, SubItemEventArgs e)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (!unlocked || e.SubItem >= (int)ErrorFlagsClmn.ColumnsCount)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
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))
|
|
|
|
|
|
{
|
|
|
|
|
|
int columnNr = e.SubItem;
|
|
|
|
|
|
string value = null;
|
|
|
|
|
|
System.Drawing.Color backColor = System.Drawing.Color.White;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
foreach (ListViewItem item in errorFlagsListViewEx.Items)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (value != null && item.SubItems.Count > columnNr)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.SubItems[columnNr].Text = value;
|
|
|
|
|
|
item.SubItems[columnNr].BackColor = backColor;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (item == e.Item)
|
|
|
|
|
|
{
|
|
|
|
|
|
value = item.SubItems[columnNr].Text;
|
|
|
|
|
|
backColor = item.SubItems[columnNr].BackColor;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
private void errorFlagsListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (e.SubItem == (int)ErrorFlagsClmn.Name)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (!Utils.IsGoodFName(e.DisplayText))
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
|
|
|
|
e.Cancel = true;
|
|
|
|
|
|
return; /// NOK
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
sbyte dummy;
|
|
|
|
|
|
if ((e.SubItem >= (int)ErrorFlagsClmn.E1) && (e.SubItem <= (int)ErrorFlagsClmn.E21) && !IsValidEFlagsMode(e.DisplayText, out dummy))
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
|
|
|
|
e.Cancel = true;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
return; /// NOK
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
void RefreshMetrologyAndErrorFlagsTabs()
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
RefreshMetrologyTab();
|
|
|
|
|
|
RefreshErrorFlagsTab();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void Unlocked(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
unlocked = true;
|
|
|
|
|
|
//if (testParamsCtrls != null) foreach (var ctrl in testParamsCtrls) ctrl.Unlock();
|
|
|
|
|
|
//if (procedureParamsCtrls != null) foreach (var ctrl in procedureParamsCtrls) ctrl.Unlock();
|
|
|
|
|
|
|
|
|
|
|
|
procNameTextBox.Enabled = true;
|
|
|
|
|
|
descriptionTextBox.Enabled = true;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
profileTypeRadioButton1.Enabled = true;
|
|
|
|
|
|
profileTypeRadioButton2.Enabled = true;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
#if HEAT_METERS
|
|
|
|
|
|
metersKindRadioButton3.Enabled = true;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
ListViewEx listViewEx = null;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.Metrology: listViewEx = metrologyListViewEx; break;
|
|
|
|
|
|
case TestProfileTabs.ErrorFlags: listViewEx = errorFlagsListViewEx; break;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if ((listViewEx != null) && (listViewEx.SelectedItems.Count == 1))
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
int ix = listViewEx.SelectedIndices[0];
|
|
|
|
|
|
listViewEx.Focus();
|
|
|
|
|
|
listViewEx.Items[ix].Selected = true;
|
|
|
|
|
|
listViewEx.Items[ix].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void okButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.General: UpdateFromGeneralTab(); break;
|
|
|
|
|
|
case TestProfileTabs.Metrology: UpdateFromMetrologyTab(); break;
|
|
|
|
|
|
case TestProfileTabs.ErrorFlags: UpdateFromErrorFlagsTab(); break;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//foreach (var ctrl in testParamsCtrls) if (!ctrl.UpdateAll()) MessageBox.Show(string.Format(Strings.Error_saving_parameters_of_0, ctrl.Name));
|
|
|
|
|
|
//foreach (var ctrl in procedureParamsCtrls) if (!ctrl.UpdateAll()) MessageBox.Show(string.Format(Strings.Error_saving_parameters_of_0, ctrl.Name));
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (usedNames != null && usedNames.Contains(LoadedProfile.Name))
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
MessageBox.Show(string.Format("There is already a procedure named '{0}'.{1}Choose another name please.", LoadedProfile.Name, Environment.NewLine),
|
2019-10-29 14:59:05 +00:00
|
|
|
|
Strings.Warning,
|
|
|
|
|
|
MessageBoxButtons.OK,
|
|
|
|
|
|
MessageBoxIcon.Exclamation);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SaveUISettings();
|
|
|
|
|
|
DialogResult = DialogResult.OK;
|
|
|
|
|
|
Close();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void cancelButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
SaveUISettings();
|
|
|
|
|
|
DialogResult = DialogResult.Cancel;
|
|
|
|
|
|
Close();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void SaveUISettings()
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Obtain ProcedureDlg dimensions, etc.
|
|
|
|
|
|
bool isMaximized = (WindowState == FormWindowState.Maximized);
|
|
|
|
|
|
int left = (WindowState == FormWindowState.Normal) ? Location.X : RestoreBounds.Left;
|
|
|
|
|
|
int top = (WindowState == FormWindowState.Normal) ? Location.Y : RestoreBounds.Top;
|
|
|
|
|
|
int width = (WindowState == FormWindowState.Normal) ? Size.Width : RestoreBounds.Width;
|
|
|
|
|
|
int height = (WindowState == FormWindowState.Normal) ? Size.Height : RestoreBounds.Height;
|
|
|
|
|
|
|
|
|
|
|
|
LocalSettings ls = Program.LocalSettings;
|
|
|
|
|
|
|
|
|
|
|
|
if (ls != null && (ls.OneProcedureDlgMaximized != isMaximized ||
|
|
|
|
|
|
ls.OneProcedureDlgLeft != left ||
|
|
|
|
|
|
ls.OneProcedureDlgTop != top ||
|
|
|
|
|
|
ls.OneProcedureDlgWidth != width ||
|
|
|
|
|
|
ls.OneProcedureDlgHeight != height))
|
|
|
|
|
|
{
|
|
|
|
|
|
/// At least one ProcedureDlg dimension differs => Update local settings and save them
|
|
|
|
|
|
ls.OneProcedureDlgMaximized = isMaximized;
|
|
|
|
|
|
ls.OneProcedureDlgLeft = left;
|
|
|
|
|
|
ls.OneProcedureDlgTop = top;
|
|
|
|
|
|
ls.OneProcedureDlgWidth = width;
|
|
|
|
|
|
ls.OneProcedureDlgHeight = height;
|
|
|
|
|
|
ls.Save();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void LoadUISettings()
|
|
|
|
|
|
{
|
|
|
|
|
|
TBF.LocalSettings ls = Program.LocalSettings;
|
|
|
|
|
|
WindowState = (ls.OneProcedureDlgMaximized ? FormWindowState.Maximized : FormWindowState.Normal);
|
|
|
|
|
|
Width = (ls.OneProcedureDlgWidth > 0) ? ls.OneProcedureDlgWidth : 800;
|
|
|
|
|
|
Height = (ls.OneProcedureDlgHeight > 0) ? ls.OneProcedureDlgHeight : 420;
|
|
|
|
|
|
Left = (ls.OneProcedureDlgLeft != 0) ? ls.OneProcedureDlgLeft : 150;
|
|
|
|
|
|
Top = (ls.OneProcedureDlgTop != 0) ? ls.OneProcedureDlgTop : 150;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#region Tab switching
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
enum TestProfileTabs
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
General,
|
2019-10-31 13:02:20 +00:00
|
|
|
|
Metrology,
|
|
|
|
|
|
ErrorFlags,
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
TestProfileTabs selectedTab = TestProfileTabs.General;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.General:
|
2019-10-29 14:59:05 +00:00
|
|
|
|
UpdateFromGeneralTab();
|
|
|
|
|
|
break;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.Metrology:
|
|
|
|
|
|
UpdateFromMetrologyTab();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.ErrorFlags:
|
|
|
|
|
|
UpdateFromErrorFlagsTab();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
selectedTab = (TestProfileTabs)tabControl.SelectedIndex;
|
|
|
|
|
|
bool isMetrologyOrErrorFlags = selectedTab == TestProfileTabs.Metrology ||
|
|
|
|
|
|
selectedTab == TestProfileTabs.ErrorFlags;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (isMetrologyOrErrorFlags)
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.EnableButtons(SharedButtons.Buttons.Add);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.DisableButtons(SharedButtons.Buttons.Add);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
//bool removeBtnEnabled = (selectedTab != TestProfileTabs.General);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
sharedButtons.DisableButtons(SharedButtons.Buttons.Remove);
|
|
|
|
|
|
|
|
|
|
|
|
ListViewEx lv = null;
|
|
|
|
|
|
///
|
|
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.General:
|
2019-10-29 14:59:05 +00:00
|
|
|
|
RefreshGeneralTab();
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.Metrology:
|
|
|
|
|
|
RefreshMetrologyTab();
|
|
|
|
|
|
lv = metrologyListViewEx; /// ListVIewEx for test selection
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.ErrorFlags:
|
|
|
|
|
|
RefreshErrorFlagsTab();
|
|
|
|
|
|
lv = errorFlagsListViewEx; /// ListVIewEx for test selection
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.None);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
///
|
|
|
|
|
|
/// Highlight the selected test
|
|
|
|
|
|
///
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if ((lv != null) && (0 <= SelectedTestIx) && (SelectedTestIx < lv.Items.Count))
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
lv.Focus();
|
|
|
|
|
|
lv.Items[SelectedTestIx].Selected = true;
|
|
|
|
|
|
lv.Items[SelectedTestIx].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 'Add', 'Remove', 'Up' and 'Down'
|
|
|
|
|
|
|
|
|
|
|
|
private void addButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void removeButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewEx listViewEx;
|
|
|
|
|
|
|
|
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.Metrology:
|
|
|
|
|
|
UpdateFromMetrologyTab();
|
|
|
|
|
|
listViewEx = metrologyListViewEx;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.ErrorFlags:
|
|
|
|
|
|
UpdateFromErrorFlagsTab();
|
|
|
|
|
|
listViewEx = errorFlagsListViewEx;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default: return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Check the selected index validity
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if (listViewEx.SelectedItems.Count != 1) return;
|
|
|
|
|
|
|
2019-10-29 14:59:05 +00:00
|
|
|
|
int removeItemNr = listViewEx.SelectedIndices[0];
|
|
|
|
|
|
|
|
|
|
|
|
/// Remove the selected test
|
2019-10-31 13:02:20 +00:00
|
|
|
|
PTest toBeDeleted = LoadedProfile.Tests[removeItemNr];
|
|
|
|
|
|
LoadedProfile.Tests.Remove(toBeDeleted);
|
|
|
|
|
|
for (int i = removeItemNr; i < LoadedProfile.Tests.Count; i++) LoadedProfile.Tests[i].ItemNr--;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
RefreshMetrologyAndErrorFlagsTabs();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
if (removeItemNr < listViewEx.Items.Count)
|
|
|
|
|
|
{
|
|
|
|
|
|
listViewEx.Focus();
|
|
|
|
|
|
listViewEx.Items[removeItemNr].Selected = true;
|
|
|
|
|
|
listViewEx.Items[removeItemNr].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.None);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void upButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewEx listViewEx;
|
|
|
|
|
|
|
|
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.Metrology:
|
|
|
|
|
|
UpdateFromMetrologyTab();
|
|
|
|
|
|
listViewEx = metrologyListViewEx;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.ErrorFlags:
|
|
|
|
|
|
UpdateFromErrorFlagsTab();
|
|
|
|
|
|
listViewEx = errorFlagsListViewEx;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default: return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Check the selected index validity
|
|
|
|
|
|
if (listViewEx.SelectedItems.Count != 1) return;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
|
2019-10-29 14:59:05 +00:00
|
|
|
|
int ix = listViewEx.SelectedIndices[0];
|
|
|
|
|
|
if (ix <= 0 || ix >= listViewEx.Items.Count) return;
|
|
|
|
|
|
|
|
|
|
|
|
/// Swap two items (move the selected item up)
|
2019-10-31 13:02:20 +00:00
|
|
|
|
PTest test1 = LoadedProfile.Tests[ix - 1];
|
|
|
|
|
|
PTest test2 = LoadedProfile.Tests[ix];
|
2019-10-29 14:59:05 +00:00
|
|
|
|
test1.ItemNr++;
|
|
|
|
|
|
test2.ItemNr--;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
LoadedProfile.Tests.RemoveAt(ix);
|
|
|
|
|
|
LoadedProfile.Tests.Insert(ix - 1, test2);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
if (SelectedTestIx >= 1) SelectedTestIx--;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
RefreshMetrologyAndErrorFlagsTabs();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
listViewEx.Focus();
|
|
|
|
|
|
listViewEx.Items[ix - 1].Selected = true;
|
|
|
|
|
|
listViewEx.Items[ix - 1].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void downButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewEx listViewEx;
|
|
|
|
|
|
|
|
|
|
|
|
switch (selectedTab)
|
|
|
|
|
|
{
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.Metrology:
|
|
|
|
|
|
UpdateFromMetrologyTab();
|
|
|
|
|
|
listViewEx = metrologyListViewEx;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
case TestProfileTabs.ErrorFlags:
|
|
|
|
|
|
UpdateFromErrorFlagsTab();
|
|
|
|
|
|
listViewEx = errorFlagsListViewEx;
|
2019-10-29 14:59:05 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default: return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
/// Check the selected index validity
|
|
|
|
|
|
if (listViewEx.SelectedItems.Count != 1) return;
|
|
|
|
|
|
|
2019-10-29 14:59:05 +00:00
|
|
|
|
int ix = listViewEx.SelectedIndices[0];
|
|
|
|
|
|
if (ix < 0 || ix >= listViewEx.Items.Count - 1) return;
|
|
|
|
|
|
|
|
|
|
|
|
/// Swap two items (move the selected item down)
|
2019-10-31 13:02:20 +00:00
|
|
|
|
PTest test1 = LoadedProfile.Tests[ix];
|
|
|
|
|
|
PTest test2 = LoadedProfile.Tests[ix + 1];
|
2019-10-29 14:59:05 +00:00
|
|
|
|
test1.ItemNr++;
|
|
|
|
|
|
test2.ItemNr--;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
LoadedProfile.Tests.RemoveAt(ix + 1);
|
|
|
|
|
|
LoadedProfile.Tests.Insert(ix, test2);
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
if ((SelectedTestIx >= 0) && (SelectedTestIx < listViewEx.Items.Count - 1)) SelectedTestIx++;
|
|
|
|
|
|
|
2019-10-31 13:02:20 +00:00
|
|
|
|
RefreshMetrologyAndErrorFlagsTabs();
|
2019-10-29 14:59:05 +00:00
|
|
|
|
|
|
|
|
|
|
listViewEx.Focus();
|
|
|
|
|
|
listViewEx.Items[ix + 1].Selected = true;
|
|
|
|
|
|
listViewEx.Items[ix + 1].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
private void metrology1ListViewEx_SelectedIndexChanged(object sender, EventArgs e) { SelectedIndexChanged(sender, e); }
|
|
|
|
|
|
private void parametersListViewEx_SelectedIndexChanged(object sender, EventArgs e) { SelectedIndexChanged(sender, e); }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Common part for four xxxListViewEx_SelectedIndexChanged event handlers
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
void SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewEx listViewEx = sender as ListViewEx;
|
2019-10-31 13:02:20 +00:00
|
|
|
|
if ((listViewEx == null) || (listViewEx.SelectedItems.Count != 1))
|
2019-10-29 14:59:05 +00:00
|
|
|
|
{
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.None);
|
|
|
|
|
|
SelectedTestIx = -1;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SelectedTestIx = listViewEx.SelectedIndices[0];
|
|
|
|
|
|
|
|
|
|
|
|
if (listViewEx.Items.Count == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.FirstAndLast);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (SelectedTestIx == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.First);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (SelectedTestIx == (listViewEx.Items.Count - 1))
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.Last);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateButtonStates(SharedButtons.SelectedItemPos.Middle);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void UpdateButtonStates(SharedButtons.SelectedItemPos selectedItemPos)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (selectedItemPos == SharedButtons.SelectedItemPos.None)
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.DisableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (selectedItemPos == SharedButtons.SelectedItemPos.First)
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Down);
|
|
|
|
|
|
sharedButtons.DisableButtons(SharedButtons.Buttons.Up);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (selectedItemPos == SharedButtons.SelectedItemPos.Last)
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up);
|
|
|
|
|
|
sharedButtons.DisableButtons(SharedButtons.Buttons.Down);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (selectedItemPos == SharedButtons.SelectedItemPos.FirstAndLast)
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove);
|
|
|
|
|
|
sharedButtons.DisableButtons(SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-10-31 13:02:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///
|
|
|
|
|
|
/// ErrorFlagsMode related conversions
|
|
|
|
|
|
///
|
|
|
|
|
|
|
|
|
|
|
|
string SByte2String(SByte e)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ((ErrorFlagsMode) e).ToDescription();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool IsValidEFlagsMode(string str, out sbyte eflags)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (ErrorFlagsMode e = 0; e < ErrorFlagsMode.Count; e++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (e.ToDescription() == str)
|
|
|
|
|
|
{
|
|
|
|
|
|
eflags = (sbyte)e;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
eflags = 0;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool IsValidEFlagsMode(string str, out ErrorFlagsMode eflags)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (ErrorFlagsMode e = 0; e < ErrorFlagsMode.Count; e++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (e.ToDescription() == str)
|
|
|
|
|
|
{
|
|
|
|
|
|
eflags = e;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
eflags = 0;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sbyte String2SByte(string str)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (ErrorFlagsMode e = 0; e < ErrorFlagsMode.Count; e++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (e.ToDescription() == str) return (sbyte)e;
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-10-29 14:59:05 +00:00
|
|
|
|
}
|