tbf/TBF/UI/Bench/Metrology/MetrologyDlg.cs

362 lines
15 KiB
C#
Raw Normal View History

///
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using NHibernate;
using log4net;
2023-05-19 13:39:27 +00:00
using Common;
using Config.Entities;
2021-10-26 09:23:57 +00:00
using TBF.Rig;
using TBF.Resources;
using TBF.UI.Shared;
namespace TBF.UI.Bench.Metrology
{
public partial class MetrologyDlg : Form, IParentOfListViewEx
{
static readonly ILog log = LogManager.GetLogger(typeof(MetrologyDlg));
public ISession Session;
public IList<Component> cmpntEntities;
public MetrologyDlg()
{
InitializeComponent();
/// Open a database session
try { Session = TBF.DB.ConfigDBSessionFactory.OpenSession(); }
catch (Exception e)
{
MessageBox.Show(Strings.Cannot_connect_to_the_database + Environment.NewLine + e.Message,
Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
/// SharedDlgButtons configuration
sharedButtons.ParentForm = this;
2023-05-19 13:39:27 +00:00
sharedButtons.RequiredGroupMembership = new GID[] { GID.Metrologists,
GID.MetrologicalAuthority,
GID.WaterMeterAuthority };
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 MetrologyDlg_Load(object sender, EventArgs e)
{
LoadUISettings();
Text = Strings.Metrology;
int fixedCount = 0;
int balancesCount = 0;
2018-11-12 17:35:47 +00:00
int levelMetersCount = 0;
int divertersCount = 0;
int flowMetersCount = 0;
int pressMetersCount = 0;
int tempMetersCount = 0;
int platinumTempMetersCount = 0;
int evaporationsCount = 0;
cmpntEntities = (Session == null) ? new List<Component>() : Session.QueryOver<Component>()
.OrderBy(x => x.ItemNr).Asc
.List();
foreach (var cmpnt in cmpntEntities)
{
2021-10-26 09:23:57 +00:00
Rig.Generic.IComponentFactory factory = TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName);
/// Tab-page density
2021-10-26 09:23:57 +00:00
if (factory is Rig.DataContainers.Density.ComponentFactory)
{
fixedCount++;
TabPage tabPage = new TabPage(" " + Strings.Density + " ");
MetrologyDlgDensityTab uiControl = new MetrologyDlgDensityTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
uiControl.DensityCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.DataContainers.Density.ComponentCfg;
uiControl.Dock = DockStyle.Fill;
tabPage.Tag = uiControl;
tabPage.Controls.Add(uiControl);
metrologyTabControl.TabPages.Add(tabPage);
}
/// Tab-page buoyancy
2021-10-26 09:23:57 +00:00
if (factory is Rig.DataContainers.Buoyancy.ComponentFactory)
{
fixedCount++;
TabPage tabPage = new TabPage(" Buoyancy ");
MetrologyDlgBuoyancyTab uiControl = new MetrologyDlgBuoyancyTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
uiControl.BuoyancyCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.DataContainers.Buoyancy.ComponentCfg;
uiControl.Dock = DockStyle.Fill;
tabPage.Tag = uiControl;
tabPage.Controls.Add(uiControl);
metrologyTabControl.TabPages.Add(tabPage);
}
/// Tab-pages for scales
2021-10-26 09:23:57 +00:00
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 + " ");
MetrologyDlgScaleTab uiControl = new MetrologyDlgScaleTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
uiControl.BalanceCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.GenericDevices.IScaleCfg;
uiControl.Dock = DockStyle.Fill;
tabPage.Tag = uiControl;
tabPage.Controls.Add(uiControl);
metrologyTabControl.TabPages.Add(tabPage);
}
/// Tab-pages for flowmeters
2021-10-26 09:23:57 +00:00
if (factory is Rig.Elde.FlowMeter.FlowMeterFactory)
{
2021-10-26 09:23:57 +00:00
Rig.Elde.FlowMeter.FlowMeterCfg flowMeterCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.Elde.FlowMeter.FlowMeterCfg;
for (int r = 0; r <= 5; r++)
{
if (flowMeterCfg.RangeEnabled(r))
{
bool isLastFlowMeterRange = true;
for (int nxt = r + 1; nxt <= 5; nxt++)
{
if (flowMeterCfg.RangeEnabled(nxt))
{
isLastFlowMeterRange = false;
break;
}
}
flowMetersCount++;
TabPage tabPage = new TabPage(string.Format(((r == 0) ? " {0} " : " {0} r{1} "), cmpnt.Name, r));
MetrologyDlgFlowMeterTab uiControl = new MetrologyDlgFlowMeterTab(r, isLastFlowMeterRange);
uiControl.MeterEntity = cmpnt;
uiControl.CalibInfoCfg = flowMeterCfg;
uiControl.Dock = DockStyle.Fill;
tabPage.Tag = uiControl;
tabPage.Controls.Add(uiControl);
metrologyTabControl.TabPages.Add(tabPage);
}
}
}
/// Tab-pages for pressure meters
2021-10-26 09:23:57 +00:00
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 + " ");
MetrologyDlgPressMeterTab uiControl = new MetrologyDlgPressMeterTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
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 temperature meters
2021-10-26 09:23:57 +00:00
if (factory is Rig.Elde.TempMeter.TempMeterFactory ||
factory is Rig.Elde.TempMeterInternal.TempMeterFactory)
{
tempMetersCount++;
TabPage tabPage = new TabPage(" " + cmpnt.Name + " ");
MetrologyDlgTempMeterTab uiControl = new MetrologyDlgTempMeterTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
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 platinum resistance temperature meters
2021-10-26 09:23:57 +00:00
if (factory is Rig.Keithley.TempMeter.Factory)
{
platinumTempMetersCount++;
TabPage tabPage = new TabPage(" " + cmpnt.Name + " ");
MetrologyDlgPlatinumResistanceTMeterTab uiControl = new MetrologyDlgPlatinumResistanceTMeterTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
uiControl.TempMeterCfg = factory.CmpntCfgFromCmpntEntity(cmpnt) as Rig.Keithley.TempMeter.TempMeterCfg;
uiControl.Dock = DockStyle.Fill;
tabPage.Tag = uiControl;
tabPage.Controls.Add(uiControl);
metrologyTabControl.TabPages.Add(tabPage);
}
/// Tab-pages for diverters
2021-10-26 09:23:57 +00:00
if (factory is Rig.Elde.Diverter.DiverterFactory)
{
divertersCount++;
TabPage tabPage = new TabPage(" " + cmpnt.Name + " ");
MetrologyDlgDiverterTab uiControl = new MetrologyDlgDiverterTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
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
2021-10-26 09:23:57 +00:00
if (factory is Rig.Hart.Nivotrack.Factory)
{
levelMetersCount++;
TabPage tabPage = new TabPage(" " + cmpnt.Name + " ");
MetrologyDlgLevelMeterTab uiControl = new MetrologyDlgLevelMeterTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
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
2021-10-26 09:23:57 +00:00
if (factory is Rig.DataContainers.Evaporation.Factory)
{
evaporationsCount++;
TabPage tabPage = new TabPage(" " + cmpnt.Name + " ");
MetrologyDlgEvaporationTab uiControl = new MetrologyDlgEvaporationTab();
uiControl.MeterEntity = cmpnt;
2021-10-26 09:23:57 +00:00
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 metrologyTabControl.TabPages)
{
(tabPage.Tag as IMetrologyDlgTab).Unlock();
}
}
private void okButton_Click(object sender, EventArgs e)
{
using (ITransaction transaction = Session.BeginTransaction())
{
try
{
foreach (TabPage tabPage in metrologyTabControl.TabPages)
{
IMetrologyDlgTab tab = tabPage.Tag as IMetrologyDlgTab;
if (tab != null)
{
tab.OkBtnClicked();
tab.SaveEntityToDB(Session);
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 metrologyTabControl.TabPages)
{
(tabPage.Tag as IMetrologyDlgTab).CancelBtnClicked();
}
SaveUISettings();
DialogResult = DialogResult.Cancel;
Close();
}
private void SaveUISettings()
{
/// Obtain MetrologyDlg 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.MetrologyDlgMaximized != isMaximized ||
ls.MetrologyDlgLeft != left ||
ls.MetrologyDlgTop != top ||
ls.MetrologyDlgWidth != width ||
ls.MetrologyDlgHeight != height))
{
/// At least one MetrologyDlg dimension differs => Update local settings and save them
ls.MetrologyDlgMaximized = isMaximized;
ls.MetrologyDlgLeft = left;
ls.MetrologyDlgTop = top;
ls.MetrologyDlgWidth = width;
ls.MetrologyDlgHeight = height;
ls.Save();
}
}
private void LoadUISettings()
{
TBF.LocalSettings ls = Program.LocalSettings;
WindowState = (ls.MetrologyDlgMaximized ? FormWindowState.Maximized : FormWindowState.Normal);
Width = (ls.MetrologyDlgWidth > 0) ? ls.MetrologyDlgWidth : 900;
Height = (ls.MetrologyDlgHeight > 0) ? ls.MetrologyDlgHeight : 500;
Left = (ls.MetrologyDlgLeft != 0) ? ls.MetrologyDlgLeft : 200;
Top = (ls.MetrologyDlgTop != 0) ? ls.MetrologyDlgTop : 100;
}
private void addButton_Click(object sender, EventArgs e)
{
(metrologyTabControl.SelectedTab.Tag as IMetrologyDlgTab).AddOne();
}
private void removeButton_Click(object sender, EventArgs e)
{
(metrologyTabControl.SelectedTab.Tag as IMetrologyDlgTab).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 MetrologyDlg_FormClosing(object sender, FormClosingEventArgs e)
{
if (Users.CurrentUser.Restore(this)) Program.MainWnd.UpdateUser();
if (Session != null && Session.IsOpen) Session.Close();
}
}
}