/// /// 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 Common.Forms; using TBF.Resources; using TBF.UI.Shared; namespace TBF.UI.Bench.Uncertainties { public partial class UncertntDlgPressMeterTab : UserControl, IUncetaintiesDlgTab { static readonly ILog log = LogManager.GetLogger(typeof(UncertntDlgPressMeterTab)); /// /// 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; } } /// /// 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; UncertaintiesDlg parent; bool unlocked; Control[] textBoxes; public UncertntDlgPressMeterTab() { InitializeComponent(); toBeRemoved = new List(); } private void UncertntDlgPressMeterTab_Load(object sender, System.EventArgs e) { if (meterEntity == null) return; parent = ParentForm as UncertaintiesDlg; /// Panel1 cmpntLabel.Text = Strings.Component; cmpntNameLabel.Text = meterEntity.Name; /// Panel2 listViewEx.SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked); listViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing); listViewEx.Columns.Add(new ColumnHeader() { Text = Strings.Nr, Width = 40 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [bar]", Strings.Pressure), Width = 100 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [mbar]", Strings.Main_uncertainty), Width = 120 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [mbar]", Strings.Resolution), Width = 100 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [mbar/year]", Strings.Drift_per_year), Width = 120 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [mbar]", Strings.Conditions), Width = 100 }); listViewEx.Columns.Add(new ColumnHeader() { Text = string.Format("{0} [mbar]", Strings.Uncertainty_of_correction), Width = 160 }); textBoxes = new TextBox[listViewEx.Columns.Count]; for (int i = 1; i < textBoxes.Length; i++) { this.Controls.Add(textBoxes[i] = new TextBox()); } RefreshAll(); } void RefreshAll() { listViewEx.Items.Clear(); foreach (var uncrtnty in MeterEntity.Uncertainties) AddOneLVI(uncrtnty); } void AddOneLVI(Uncertainty corr) { int nr = listViewEx.Items.Count + 1; ListViewItem lvi = new ListViewItem(nr.ToString()); lvi.Tag = corr; lvi.SubItems.Add(corr.Measurement.ToString()); lvi.SubItems.Add((1000 * corr.MainUncertainty).ToString()); lvi.SubItems.Add((1000 * corr.Resolution).ToString()); lvi.SubItems.Add((1000 * corr.DriftPerYr).ToString()); lvi.SubItems.Add((1000 * corr.Conditions).ToString()); lvi.SubItems.Add((1000 * corr.UncertaintyOfCorrection).ToString()); listViewEx.Items.Add(lvi); } void listViewEx_SubItemClicked(object sender, SubItemEventArgs e) { if (unlocked && (e.SubItem >= 1) && (e.SubItem < listViewEx.Columns.Count)) { /// This is not the first column listViewEx.StartEditing(textBoxes[e.SubItem], e.Item, e.SubItem); } } void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e) { if (ParseItem(e.Item, e.SubItem, e.DisplayText)) return; /// New value is 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 strValue) { Uncertainty uncrtnty = item.Tag as Uncertainty; double dblValue = 0; if ((uncrtnty != null) && Utils.TryParseEDouble(strValue, out dblValue) && (dblValue >= 0)) { double inDefaultUnits = dblValue / 1000; switch (subItem) { case 1: uncrtnty.Measurement = (float)dblValue; return true; case 2: uncrtnty.MainUncertainty = (float)inDefaultUnits; return true; case 3: uncrtnty.Resolution = (float)inDefaultUnits; return true; case 4: uncrtnty.DriftPerYr = (float)inDefaultUnits; return true; case 5: uncrtnty.Conditions = (float)inDefaultUnits; return true; case 6: uncrtnty.UncertaintyOfCorrection = (float)inDefaultUnits; return true; default: return false; } } else { return false; } } public void Unlock() { unlocked = 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() { } public void CancelBtnClicked() { } public void AddOne() { Uncertainty uncrtnty = new Uncertainty(); MeterEntity.Uncertainties.Add(uncrtnty); AddOneLVI(uncrtnty); 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]; Uncertainty selected = (Uncertainty)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); } } public string GetWarningsBeforeSaving(ref Dictionary renmInfo) { return string.Empty; } public void UpdateRelatedItems(Dictionary renameInfo) { } } }