using Common;
using NHibernate;
///
/// Copyright (c) 2013-2020 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using TBF.Resources;
using TBF.Rig;
using TBF.Rig.Generic;
using TBF.UI.Shared;
namespace TBF.UI.Bench.Components
{
public partial class ComponentParametersDlg : Form
{
public IComponentCfgCtrl ComponentCfgCtrl;
const int ComponentCfgCtrlHeight = 350;
const int ComponentCfgCtrlMoreHeight = 250;
public Form SharedButtonsParentForm
{
get { return sharedButtons.ParentForm; }//...MF
}
public IComponentCfg Config
{
get
{
if (ComponentCfgCtrl == null) return null;
return ComponentCfgCtrl.Config;
}
}
public CfgUpdateFlags Flags;
public bool UnlockAfterStart;
///
/// List of components (=component configuration instances)
///
public IList CmpntEntities;
public ISession Session;
int cmpntEntityId;
ComponentParametersDlg()
{
InitializeComponent();
this.Icon = Properties.Resources.TBF_icon;
}
///
/// Create a window to edit component configuration
///
/// Config.Entities.Component.Id or 0 when this is a new/copied/immported component
public ComponentParametersDlg(Form parentForm, int cmpntEntityId = 0)
: this()
{
this.cmpntEntityId = cmpntEntityId;
/// SharedDlgButtons configuration
sharedButtons.ParentForm = parentForm;
sharedButtons.RequiredGroupMembership = new GID[] { GID.Metrologists };
sharedButtons.MoreButtonTop = ComponentCfgCtrlHeight - 45;
sharedButtons.OptionalButtons = SharedButtons.Buttons.None;
sharedButtons.Unlocked += Unlock;
sharedButtons.OKClicked += okButton_Click;
sharedButtons.CancelClicked += cancelButton_Click;
sharedButtons.MoreClicked += moreButton_Click;
Flags = CfgUpdateFlags.None;
}
private void ComponentCfgForm_Load(object sender, EventArgs e)
{
Text = Strings.Properties;
if (ComponentCfgCtrl != null)
{
var ctrl = (UserControl)ComponentCfgCtrl;
ctrl.Dock = DockStyle.Fill;
splitContainer.Panel1.Controls.Add(ctrl);
// auto–resize dialog based on this control
ResizeToFitControl(ctrl);
if (ComponentCfgCtrl.ShowMore)
sharedButtons.OptionalButtons = SharedButtons.Buttons.More;
if (UnlockAfterStart)
{
sharedButtons.UnlockButtons();
ComponentCfgCtrl.Unlock();
}
}
}
///
/// Handler of the Unlock button click
///
private void Unlock(object sender, EventArgs e)
{
ComponentCfgCtrl.Unlock();
}
public CfgUpdateFlags VerifyCfg(ref string message)
{
if (ComponentCfgCtrl == null) return CfgUpdateFlags.None; /// Nothing to verify -> OK
return ComponentCfgCtrl.VerifyCfg(ref message);
}
private void okButton_Click(object sender, EventArgs e)
{
string message = string.Empty;
CfgUpdateFlags flags = VerifyCfg(ref message);
if ((flags & CfgUpdateFlags.Error) == CfgUpdateFlags.Error)
{
MessageBox.Show(Strings.Please_change_the_following_settings + message,
Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (ComponentCfgCtrl != null)
{
flags = ComponentCfgCtrl.UpdateCfg();
/// Prevent component name duplicity
if (CmpntEntities != null)
{
foreach (var cmpnt in CmpntEntities)
{
if (ComponentCfgCtrl.Config.Name == cmpnt.Name && cmpntEntityId != cmpnt.Id)
{
MessageBox.Show("Component with the same name already exists");
return;
}
}
}
if ((flags & CfgUpdateFlags.RestartRqrd) == CfgUpdateFlags.RestartRqrd)
{
MessageBox.Show(Strings.Program_restart_is_required_to_apply_some_settings,
Strings.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
ComponentCfgCtrl.Closing();
}
Flags = flags;
DialogResult = DialogResult.OK;
Close();
return;
}
private void cancelButton_Click(object sender, EventArgs e)
{
if (ComponentCfgCtrl != null) ComponentCfgCtrl.Closing();
DialogResult = DialogResult.Cancel;
Close();
return;
}
private void moreButton_Click(object sender, EventArgs e)
{
ComponentCfgCtrl.Unlock();
if (sharedButtons.MoreActive)
{
Height = Height + ComponentCfgCtrlMoreHeight;
}
else
{
Height = Height - ComponentCfgCtrlMoreHeight;
}
return;
}
private void ResizeToFitControl(UserControl cfgCtrl)
{
if (cfgCtrl == null) return;
// Ask the control for its preferred size
Size desired = cfgCtrl.PreferredSize;
// Extra space for right panel + form borders
int extraWidth = splitContainer.Panel2.Width + 40;
int extraHeight = 80;
this.Width = desired.Width + extraWidth;
this.Height = desired.Height + extraHeight;
// Do not exceed screen working area
var screen = Screen.FromControl(this).WorkingArea;
if (this.Width > screen.Width) this.Width = screen.Width - 20;
if (this.Height > screen.Height) this.Height = screen.Height - 20;
}
}
}