211 lines
8.4 KiB
C#
211 lines
8.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using Sarand.Core.UpdateLog;
|
|
using Sarand.Core.CodeTypes;
|
|
using Sarand.Win.Forms.Controls;
|
|
using Sarand.PatientMgr.Core.App;
|
|
using Sarand.PatientMgr.Win.Forms.App;
|
|
using Sarand.Core.Base;
|
|
using Sarand.Core.Interfaces;
|
|
using Sarand.Core.Dbas.Base;
|
|
using Sarand.PatientMgr.Win.Forms.Panels;
|
|
using Sarand.Win.Forms.Utils;
|
|
using Sarand.PatientMgr.Core.Bus;
|
|
using Sarand.PatientMgr.Core.Mgr;
|
|
using Sarand.Core.Security;
|
|
using Sarand.Core.ItemDocs;
|
|
using Sarand.Core.ItemOptions;
|
|
|
|
namespace Sarand.PatientMgr.Win.Forms.Base
|
|
{
|
|
//=======================================================================
|
|
public partial class SpmTabPage : SacsTabPage
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Configuration.
|
|
public new class Config : SacsTabPage.Config
|
|
{
|
|
/// <summary>Wrap single panel on tab page in group box. Default - no group box for single panel.</summary>
|
|
public virtual bool WrapSinglePanelInGroupBox { get; protected set; } = false;
|
|
/// <summary>Wrap multiple panels on tab page in group boxes. Default - multiple panels are wrapped in group boxes.</summary>
|
|
public virtual bool WrapMultiplePanelsInGroupBoxes { get; protected set; } = true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
private Config config = new Config();
|
|
private readonly SpmInternals internals;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
private SpmTabPage() : this(new Config()) { }
|
|
protected SpmTabPage(Config config) : base(config)
|
|
{
|
|
this.config = config;
|
|
InitializeComponent();
|
|
internals = new SpmInternals(SessionProfile != null ? SessionProfile.UserContext : null);
|
|
}
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && (components != null))
|
|
{
|
|
if (components != null) components.Dispose();
|
|
if (internals != null) internals.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
[Browsable(false), ReadOnly(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public bool PanelsAddedToPage { get; private set; } = false;
|
|
protected bool WrapPanelsInGroupBoxes { get { return (config.PanelCount == 1 && config.WrapSinglePanelInGroupBox) || (config.PanelCount > 1 && config.WrapMultiplePanelsInGroupBoxes); } }
|
|
// Session.
|
|
protected SpmSessionProfile_Win SessionProfile { get; } = SpmGlobals_Win.SessionProfile;
|
|
protected SpmUserContext UserContext { get { return SessionProfile.UserContext; } }
|
|
protected SpmSessionContext SessionContext { get { return SessionProfile.SessionContext; } }
|
|
|
|
// Security.
|
|
protected SpmSecurityProfile SecurityProfile { get { return internals.SecurityProfile; } }
|
|
|
|
// Managers.
|
|
protected SpmAdmissionMgr AdmissionMgr { get { return internals.AdmissionMgr; } }
|
|
protected SpmDepartmentMgr DepartmentMgr { get { return internals.DepartmentMgr; } }
|
|
protected SpmInstitutionMgr InstitutionMgr { get { return internals.InstitutionMgr; } }
|
|
|
|
// Consoles.
|
|
protected SaSecurityConsole SecurityConsole { get { return internals.SecurityConsole; } }
|
|
protected SaCodeTypeConsole CodeTypeConsole { get { return internals.CodeTypeConsole; } }
|
|
protected SaUpdateLogConsole UpdateLogConsole { get { return internals.UpdateLogConsole; } }
|
|
protected SaItemOptionConsole ItemOptionConsole { get { return internals.ItemOptionConsole; } }
|
|
|
|
//-------------------------------------------------------------------
|
|
// I n i t i a l i s a t i o n
|
|
//-------------------------------------------------------------------
|
|
protected override void OnCreateControl()
|
|
{
|
|
base.OnCreateControl();
|
|
if (!this.IsDesignerHosted()) return;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// P a n e l s
|
|
//-------------------------------------------------------------------
|
|
protected void AddPanelsToPage(List<SacsPanel> panels)
|
|
{
|
|
if (Controls.Count > 0) throw new NotSupportedException(GetType().Name + ".AddPanelsToPage TabPage already contains controls");
|
|
|
|
// Adjust width from default (maybe as little as 200) to parent's width to ensure panels with minimum width are sized correctly.
|
|
int initialWidth = Parent.Width - (Parent.Padding.Left + Parent.Padding.Right) - (Margin.Left + Margin.Right);
|
|
if (Width < initialWidth)
|
|
Width = initialWidth;
|
|
|
|
int panelTop = Parent.Padding.Top;
|
|
int tabIndex = 0;
|
|
foreach (SacsPanel panel in panels)
|
|
{
|
|
if (WrapPanelsInGroupBoxes)
|
|
{
|
|
// Group box.
|
|
SpmGroupBox groupBox = new SpmGroupBox();
|
|
groupBox.Text = panel.Text;
|
|
groupBox.TabIndex = ++tabIndex;
|
|
PositionPanel(groupBox, panelTop);
|
|
Controls.Add(groupBox);
|
|
// Explicitly set the panel's font to avoid group box's font cascading.
|
|
panel.Font = this.Font;
|
|
// Add panel to group box's controls and resize.
|
|
panel.Top = groupBox.DisplayRectangle.Top + panel.Margin.Top;
|
|
panel.Left = groupBox.DisplayRectangle.Left + panel.Margin.Left;
|
|
panel.Width = groupBox.DisplayRectangle.Width - panel.Left - panel.Margin.Right;
|
|
if (config.PanelCount == 1)
|
|
{
|
|
panel.Height = groupBox.DisplayRectangle.Bottom - panel.Top - panel.Margin.Bottom;
|
|
panel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
|
}
|
|
else
|
|
panel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
|
groupBox.Controls.Add(panel);
|
|
groupBox.SetHeightToControls();
|
|
panelTop += groupBox.Height + groupBox.Margin.Bottom;
|
|
//Logger.Trace(GetType().Name + ".AddPanelsToPage GroupBox: " + groupBox.GetType().Name + " . Width: " + groupBox.Width);
|
|
//Logger.Trace(GetType().Name + ".AddPanelsToPage Panel: " + panel.GetType().Name + " . Width: " + panel.Width);
|
|
}
|
|
else
|
|
{
|
|
// Position panel.
|
|
panel.TabIndex = ++tabIndex;
|
|
PositionPanel(panel, panelTop);
|
|
panelTop += panel.Height + panel.Margin.Bottom;
|
|
panelTop += panel.Height + panel.Margin.Bottom;
|
|
Controls.Add(panel);
|
|
}
|
|
}
|
|
PanelsAddedToPage = true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// P a n e l S i z e a n d P o s i t i o n
|
|
//-------------------------------------------------------------------
|
|
protected override void PositionControls()
|
|
{
|
|
//String fn = GetType().Name + ".PositionControls";
|
|
base.PositionControls();
|
|
Rectangle clientRect = ClientRectangle;
|
|
PositionPanels();
|
|
}
|
|
protected void PositionPanel(Control panel, int panelTop)
|
|
{
|
|
panel.Top = panelTop + panel.Margin.Top;
|
|
panel.Left = (Parent.Padding.Left + panel.Margin.Left);
|
|
panel.Width = ClientSize.Width - panel.Left - (Parent.Padding.Right + panel.Margin.Right);
|
|
// Single panel fills page.
|
|
if (config.PanelCount == 1)
|
|
panel.Dock = DockStyle.Fill;
|
|
else
|
|
panel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
|
}
|
|
protected void PositionPanels()
|
|
{
|
|
if (!PanelsAddedToPage) return;
|
|
//Logger.Trace(GetType().Name + ".PositionPanels");
|
|
int panelTop = Parent.Padding.Top;
|
|
|
|
// Refresh each panel's position.
|
|
foreach (Control panel in Controls)
|
|
{
|
|
PositionPanel(panel, panelTop);
|
|
panelTop += panel.Height + panel.Margin.Bottom;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// P a n e l E v e n t s
|
|
//-------------------------------------------------------------------
|
|
protected void Panel_Resize(object sender, EventArgs e)
|
|
{
|
|
if (!PanelsAddedToPage) return;
|
|
//Logger.Trace(GetType().Name + ".Panel_Resize Sender: " + sender.ToString());
|
|
PositionControls();
|
|
}
|
|
protected virtual void panel_ItemCreated(object sender, SpmPanel_Items.ItemModifiedEventArgs e)
|
|
{
|
|
InvokeItemCreatedEvent((short)e.ItemType, e.ItemId);
|
|
}
|
|
protected virtual void panel_ItemUpdated(object sender, SpmPanel_Items.ItemModifiedEventArgs e)
|
|
{
|
|
InvokeItemUpdatedEvent((short)e.ItemType, e.ItemId);
|
|
}
|
|
protected virtual void panel_ItemDeleted(object sender, SpmPanel_Items.ItemModifiedEventArgs e)
|
|
{
|
|
InvokeItemDeletedEvent((short)e.ItemType, e.ItemId);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|