/// /// Copyright (c) 2019-2023 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Windows.Forms; using NHibernate; using log4net; using Common; using Config.Entities; using TBF.Rig; using TBF.Resources; using TBF.UI.Shared; namespace TBF.UI.Bench.Uncertainties { public partial class UncertaintiesDlg : Form, IParentOfListViewEx { static readonly ILog log = LogManager.GetLogger(typeof(UncertaintiesDlg)); public IList cmpntEntities; ISession session; public UncertaintiesDlg() { InitializeComponent(); /// SharedDlgButtons configuration sharedButtons.ParentForm = this; #if LANG_PL sharedButtons.RequiredGroupMembership = new GID[] { GID.MetrologicalAuthority }; #else sharedButtons.RequiredGroupMembership = new GID[] { GID.Metrologists, GID.MetrologicalAuthority }; #endif sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove; sharedButtons.Unlocked += unlockButton_Click; sharedButtons.OKClicked += okButton_Click; sharedButtons.CancelClicked += cancelButton_Click; sharedButtons.AddClicked += addButton_Click; sharedButtons.RemoveClicked += removeButton_Click; } private void UncertaintiesDlg_Load(object sender, EventArgs e) { LoadUISettings(); Text = Strings.Uncertainty; int fixedCount = 0; int balancesCount = 0; int levelMetersCount = 0; int divertersCount = 0; int flowMetersCount = 0; int pressMetersCount = 0; int tempMetersCount = 0; int evaporationsCount = 0; session = TBF.DB.CreateSession(Common.DBKind.Config); cmpntEntities = session.QueryOver() .OrderBy(x => x. ItemNr).Asc .List(); foreach (var cmpnt in cmpntEntities) { Rig.Generic.IComponentFactory factory = TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName); /// Tab-page density if (factory is Rig.DataContainers.Density.ComponentFactory) { fixedCount++; TabPage tabPage = new TabPage(" " + Strings.Density + " "); UncertntDlgDensityTab uiControl = new UncertntDlgDensityTab(); uiControl.MeterEntity = cmpnt; uiControl.DensityCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.DataContainers.Density.ComponentCfg; uiControl.Dock = DockStyle.Fill; tabPage.Tag = uiControl; tabPage.Controls.Add(uiControl); uncertaintiesTabControl.TabPages.Add(tabPage); } /// Tab-pages for scales if (factory is Rig.MettlerToledo.Standard.BalanceFactory || factory is Rig.MettlerToledo.Standard.BalanceOldFactory || factory is Rig.MettlerToledo.Standard.BalanceNewFactory || factory is Rig.MettlerToledo.Multi.BalanceFactory) { balancesCount++; TabPage tabPage = new TabPage(" " + cmpnt.Name + " "); UncertntDlgScaleTab uiControl = new UncertntDlgScaleTab(); uiControl.MeterEntity = cmpnt; uiControl.ScaleCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.GenericDevices.IScaleCfg; uiControl.Dock = DockStyle.Fill; tabPage.Tag = uiControl; tabPage.Controls.Add(uiControl); uncertaintiesTabControl.TabPages.Add(tabPage); } ///// Tab-pages for flowmeters //if (factory is Rig.Elde.FlowMeter.FlowMeterFactory) //{ // Rig.Elde.FlowMeter.FlowMeterCfg flowMeterCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.Elde.FlowMeter.FlowMeterCfg; // for (int r = 0; r <= 5; r++) // { // if (flowMeterCfg.RangeEnabled(r)) // { // flowMetersCount++; // TabPage tabPage = new TabPage(string.Format(((r == 0) ? " {0} " : " {0} r{1} "), cmpnt.Name, r)); // MetrologyDlgFlowMeterTab uiControl = new MetrologyDlgFlowMeterTab(r); // uiControl.MeterEntity = cmpnt; // uiControl.CalibInfoCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.GenericDevices.ICalibRangesCfg; // uiControl.Dock = DockStyle.Fill; // tabPage.Tag = uiControl; // tabPage.Controls.Add(uiControl); // metrologyTabControl.TabPages.Add(tabPage); // } // } //} /// Tab-pages for pressure meters if (factory is Rig.Elde.PressureMeter.PressureMeterFactory || factory is Rig.Elde.PressureMeterInternal.PressureMeterFactory || factory is Rig.Modbus.PressureMeter.Meret.Factory) { pressMetersCount++; TabPage tabPage = new TabPage(" " + cmpnt.Name + " "); UncertntDlgPressMeterTab uiControl = new UncertntDlgPressMeterTab(); uiControl.MeterEntity = cmpnt; uiControl.Dock = DockStyle.Fill; tabPage.Tag = uiControl; tabPage.Controls.Add(uiControl); uncertaintiesTabControl.TabPages.Add(tabPage); } /// Tab-pages for temperature meters (incl. platinum temp. meter with Keithley) if (factory is Rig.Elde.TempMeter.TempMeterFactory || factory is Rig.Elde.TempMeterInternal.TempMeterFactory || factory is Rig.Keithley.TempMeter.Factory) { tempMetersCount++; TabPage tabPage = new TabPage(" " + cmpnt.Name + " "); UncertntDlgTempMeterTab uiControl = new UncertntDlgTempMeterTab(); uiControl.MeterEntity = cmpnt; uiControl.Dock = DockStyle.Fill; tabPage.Tag = uiControl; tabPage.Controls.Add(uiControl); uncertaintiesTabControl.TabPages.Add(tabPage); } ///// Tab-pages for diverters //if (factory is Rig.Elde.Diverter.DiverterFactory) //{ // divertersCount++; // TabPage tabPage = new TabPage(" " + cmpnt.Name + " "); // MetrologyDlgDiverterTab uiControl = new MetrologyDlgDiverterTab(); // uiControl.MeterEntity = cmpnt; // uiControl.CalibInfoCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.GenericDevices.ICalibInfoCfg; // uiControl.Dock = DockStyle.Fill; // tabPage.Tag = uiControl; // tabPage.Controls.Add(uiControl); // metrologyTabControl.TabPages.Add(tabPage); //} ///// Tab-pages for level meters inside water tanks //if (factory is Rig.Hart.Nivotrack.Factory) //{ // levelMetersCount++; // TabPage tabPage = new TabPage(" " + cmpnt.Name + " "); // MetrologyDlgLevelMeterTab uiControl = new MetrologyDlgLevelMeterTab(); // uiControl.MeterEntity = cmpnt; // uiControl.CalibInfoCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.GenericDevices.ICalibInfoCfg; // uiControl.Dock = DockStyle.Fill; // tabPage.Tag = uiControl; // tabPage.Controls.Add(uiControl); // metrologyTabControl.TabPages.Add(tabPage); //} ///// Tab-pages for water tank evaporation rates //if (factory is Rig.Various.Evaporation.Factory) //{ // evaporationsCount++; // TabPage tabPage = new TabPage(" " + cmpnt.Name + " "); // MetrologyDlgEvaporationTab uiControl = new MetrologyDlgEvaporationTab(); // uiControl.MeterEntity = cmpnt; // uiControl.CalibInfoCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.GenericDevices.ICalibInfoCfg; // uiControl.Dock = DockStyle.Fill; // tabPage.Tag = uiControl; // tabPage.Controls.Add(uiControl); // metrologyTabControl.TabPages.Add(tabPage); //} } } private void unlockButton_Click(object sender, EventArgs e) { foreach (TabPage tabPage in uncertaintiesTabControl.TabPages) { (tabPage.Tag as IUncetaintiesDlgTab).Unlock(); } } private void okButton_Click(object sender, EventArgs e) { using (ITransaction transaction = session.BeginTransaction()) { try { foreach (TabPage tabPage in uncertaintiesTabControl.TabPages) { IUncetaintiesDlgTab tab = tabPage.Tag as IUncetaintiesDlgTab; if (tab != null) { tab.OkBtnClicked(); session.SaveOrUpdate(tab.MeterEntity); foreach (var entity in tab.ToBeRemoved) session.Delete(entity); } } transaction.Commit(); session.Flush(); } catch (Exception exc) { transaction.Rollback(); log.ErrorFormat("Cannot save changes to DB: {0}", exc.Message); MessageBox.Show(Strings.Cannot_save_changes, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } SaveUISettings(); DialogResult = DialogResult.OK; Close(); } private void cancelButton_Click(object sender, EventArgs e) { foreach (TabPage tabPage in uncertaintiesTabControl.TabPages) { (tabPage.Tag as IUncetaintiesDlgTab).CancelBtnClicked(); } SaveUISettings(); DialogResult = DialogResult.Cancel; Close(); } private void SaveUISettings() { /// Obtain UncertaintyDlg 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.UncertaintyDlgMaximized != isMaximized || ls.UncertaintyDlgLeft != left || ls.UncertaintyDlgTop != top || ls.UncertaintyDlgWidth != width || ls.UncertaintyDlgHeight != height)) { /// At least one UncertaintyDlg dimension differs => Update local settings and save them ls.UncertaintyDlgMaximized = isMaximized; ls.UncertaintyDlgLeft = left; ls.UncertaintyDlgTop = top; ls.UncertaintyDlgWidth = width; ls.UncertaintyDlgHeight = height; ls.Save(); } } private void LoadUISettings() { TBF.LocalSettings ls = Program.LocalSettings; WindowState = (ls.UncertaintyDlgMaximized ? FormWindowState.Maximized : FormWindowState.Normal); Width = (ls.UncertaintyDlgWidth > 0) ? ls.UncertaintyDlgWidth : 900; Height = (ls.UncertaintyDlgHeight > 0) ? ls.UncertaintyDlgHeight : 500; Left = (ls.UncertaintyDlgLeft != 0) ? ls.UncertaintyDlgLeft : 200; Top = (ls.UncertaintyDlgTop != 0) ? ls.UncertaintyDlgTop : 100; } private void addButton_Click(object sender, EventArgs e) { (uncertaintiesTabControl.SelectedTab.Tag as IUncetaintiesDlgTab).AddOne(); } private void removeButton_Click(object sender, EventArgs e) { (uncertaintiesTabControl.SelectedTab.Tag as IUncetaintiesDlgTab).RemoveSelected(); } public void UpdateButtonStates(SharedButtons.SelectedItemPos selectedItemPos) { if (selectedItemPos == SharedButtons.SelectedItemPos.None) { sharedButtons.DisableButtons(SharedButtons.Buttons.Remove); } else { sharedButtons.EnableButtons(SharedButtons.Buttons.Remove); } } private void metrologyTabControl_SelectedIndexChanged(object sender, EventArgs e) { sharedButtons.DisableButtons(SharedButtons.Buttons.Remove); } private void UncertaintiesDlg_FormClosing(object sender, FormClosingEventArgs e) { if (Users.CurrentUser.Restore(this)) Program.MainWnd.UpdateUser(); } } }