/// /// Copyright (c) 2019 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; using log4net; using Config.Entities; using Results.Forms; using TBF.Resources; using TBF.UI.Shared; namespace TBF.UI.Bench.Metrology { public partial class MetrologyDlgEvaporationTab : UserControl, IMetrologyDlgTab { static readonly ILog log = LogManager.GetLogger(typeof(MetrologyDlgLevelMeterTab)); /// /// Component entity that has a list of 'measurement-correction' pairs /// to be updated in the database on OK. /// Component meterEntity; public Component MeterEntity { get { return meterEntity; } set { meterEntity = value; } } /// /// Calibration information configuration /// public BenchControl.GenericDevices.ICalibInfoCfg CalibInfoCfg; /// /// A list of 'measurement-correction' pairs to be deleted from the database on OK. /// public IList ToBeRemoved { get { return toBeRemoved; } set { toBeRemoved = value; } } IList toBeRemoved; MetrologyDlg parent; bool unlocked; Control measurementTextBox; Control correctionTextBox; public MetrologyDlgEvaporationTab() { InitializeComponent(); toBeRemoved = new List(); } private void MetrologyDlgEvaporationTab_Load(object sender, System.EventArgs e) { if (meterEntity == null) return; parent = ParentForm as MetrologyDlg; Localize(); /// Panel1 cmpntNameLabel.Text = meterEntity.Name; testGroupBox.Text = Strings.Test_measured_corrected; measuredLabel.Text = Strings.Measured; correctedLabel.Text = Strings.Corrected; measuredTextBox.Text = string.Empty; correctedTextBox.Text = string.Empty; /// Panel2 measurementTextBox = new TextBox(); correctionTextBox = new TextBox(); this.Controls.Add(measurementTextBox); this.Controls.Add(correctionTextBox); listViewEx.SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked); listViewEx.SubItemRightClicked += new SubItemEventHandler(listViewEx_SubItemRightClicked); listViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing); listViewEx.Columns.Add(new ColumnHeader() { Text = Strings.Nr, Width = 60 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [°C]", Strings.Temperature), Width = 100 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [g/hour]", Strings.Evaporation), Width = 100 }); RefreshAll(); } void Localize() { nameGroupBox.Text = Strings.Component; calibrationGroupBox.Text = Strings.Calibration; calibCertificateNrLabel.Text = Strings.Certificate; calibDateLabel.Text = Strings.Date; calibValidDateLabel.Text = Strings.Valid_until; testGroupBox.Text = Strings.Test_measured_corrected; measuredLabel.Text = Strings.Measured; correctedLabel.Text = Strings.Corrected; } void RefreshAll() { if (CalibInfoCfg != null) { calibCertificateNrTextBox.Text = CalibInfoCfg.CalibCertificateNr; calibDateTextBox.Text = CalibInfoCfg.CalibDate.ToShortDateString(); calibValidDateTextBox.Text = CalibInfoCfg.CalibValidDate.ToShortDateString(); } listViewEx.Items.Clear(); foreach (var corr in MeterEntity.Corrections) { AddOneLVI(corr); } } void AddOneLVI(MeasurementCorrection corr) { int nr = listViewEx.Items.Count + 1; ListViewItem lvi = new ListViewItem(nr.ToString()); lvi.SubItems.Add(corr.Measurement.ToString()); lvi.SubItems.Add((1000 * corr.Correction).ToString()); lvi.Tag = corr; listViewEx.Items.Add(lvi); } void listViewEx_SubItemClicked(object sender, SubItemEventArgs e) { if (unlocked && e.SubItem == 1) { listViewEx.StartEditing(measurementTextBox, e.Item, e.SubItem); } else if (unlocked && e.SubItem == 2) { listViewEx.StartEditing(correctionTextBox, e.Item, e.SubItem); } } void listViewEx_SubItemRightClicked(object sender, SubItemEventArgs e) { if (!unlocked || e.SubItem < 1 || e.SubItem > 2) 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; foreach (ListViewItem item in listViewEx.Items) { if (value != null && item.SubItems.Count > columnNr) { item.SubItems[columnNr].Text = value; item.SubItems[columnNr].BackColor = backColor; ParseItem(item, columnNr, value); } else if (item == e.Item) { value = item.SubItems[columnNr].Text; backColor = item.SubItems[columnNr].BackColor; } } } } void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e) { if (ParseItem(e.Item, e.SubItem, e.DisplayText)) return; /// New value NOK, revert the original text e.DisplayText = e.Item.Text; e.Cancel = true; } /// /// Parse text of a ListViewItem /// /// true = value parsed OK bool ParseItem(ListViewItem item, int subItem, string value) { float fvalue; if (subItem == 1 && Utils.TryParseEFloat(value, out fvalue) && fvalue >= 0) { (item.Tag as MeasurementCorrection).Measurement = fvalue; return true; } else if (subItem == 2 && Utils.TryParseEFloat(value, out fvalue)) { (item.Tag as MeasurementCorrection).Correction = fvalue / 1000; return true; } else { return false; } } public void Unlock() { unlocked = true; calibCertificateNrTextBox.Enabled = true; calibDateTextBox.Enabled = true; calibValidDateTextBox.Enabled = true; if (listViewEx.SelectedItems.Count == 1) { int ix = listViewEx.SelectedIndices[0]; listViewEx.Focus(); listViewEx.Items[ix].Selected = true; listViewEx.Items[ix].EnsureVisible(); } } public void OkBtnClicked() { if (CalibInfoCfg != null) { try { CalibInfoCfg.CalibCertificateNr = calibCertificateNrTextBox.Text; CalibInfoCfg.CalibDate = DateTime.Parse(calibDateTextBox.Text); CalibInfoCfg.CalibValidDate = DateTime.Parse(calibValidDateTextBox.Text); Component modified = CalibInfoCfg.CreateDbEntity(); MeterEntity.Parameters = modified.Parameters; } catch { MessageBox.Show(Strings.Invalid_calib_info_Correct_pls, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } public void CancelBtnClicked() { } public void AddOne() { MeasurementCorrection corr = new MeasurementCorrection(); MeterEntity.Corrections.Add(corr); AddOneLVI(corr); listViewEx.Focus(); listViewEx.SelectedItems.Clear(); listViewEx.Items[listViewEx.Items.Count - 1].Selected = true; listViewEx.Items[listViewEx.Items.Count - 1].EnsureVisible(); } public void RemoveSelected() { if (listViewEx.SelectedItems.Count != 1) return; int removeItemNr = listViewEx.SelectedIndices[0]; MeasurementCorrection selected = (MeasurementCorrection)listViewEx.SelectedItems[0].Tag; if (selected.Id != 0) toBeRemoved.Add(selected); MeterEntity.Corrections.RemoveAt(removeItemNr); RefreshAll(); if (removeItemNr < listViewEx.Items.Count) { listViewEx.Focus(); listViewEx.Items[removeItemNr].Selected = true; listViewEx.Items[removeItemNr].EnsureVisible(); } else { parent.UpdateButtonStates(SharedButtons.SelectedItemPos.None); } } public void MoveUpSelected() { } public void MoveDownSelected() { } /// /// Event handler that indicates the selected item position /// and updates 'Remove', 'Up' and 'Down' buttons in the parent dialog. /// private void listViewEx_SelectedIndexChanged(object sender, EventArgs e) { if (listViewEx.SelectedItems.Count != 1) { parent.UpdateButtonStates(SharedButtons.SelectedItemPos.None); } else if (listViewEx.Items.Count == 1) { parent.UpdateButtonStates(SharedButtons.SelectedItemPos.FirstAndLast); } else if (listViewEx.SelectedIndices[0] == 0) { parent.UpdateButtonStates(SharedButtons.SelectedItemPos.First); } else if (listViewEx.SelectedIndices[0] == (listViewEx.Items.Count - 1)) { parent.UpdateButtonStates(SharedButtons.SelectedItemPos.Last); } else { parent.UpdateButtonStates(SharedButtons.SelectedItemPos.Middle); } } private void measuredTextBox_TextChanged(object sender, EventArgs e) { float measured; if (float.TryParse(measuredTextBox.Text, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign | NumberStyles.AllowExponent, CultureInfo.CurrentCulture, out measured) || float.TryParse(measuredTextBox.Text, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, out measured)) { double corrected = Config.Formulas.CorrectedValue(measured, meterEntity.Corrections); correctedTextBox.Text = corrected.ToString(); } } public string GetWarningsBeforeSaving(ref Dictionary renmInfo) { return string.Empty; } public void UpdateRelatedItems(Dictionary renameInfo) { } } }