using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Mesnac.Docking;
using Mesnac.Core.Service;
using Mesnac.PlugIn.Pad;
namespace Mesnac.Gui.Workbench
{
///
/// 面板封装类
///
public partial class PadContentWrapper : DockContent
{
#region 定义变量
private PadDescriptor _padDescriptor;
private bool _isInitialized = false;
internal bool _allowInitialize = true;
#endregion
#region 构造方法
public PadContentWrapper(PadDescriptor padDescriptor)
{
InitializeComponent();
if (padDescriptor == null)
{
MesnacServiceManager.Instance.LoggingService.Error("空面板...");
throw new ArgumentNullException("padDescriptor");
}
this._padDescriptor = padDescriptor;
this.InitPadPosition(); //初始化面板位置
this.ActivateContent(); //激活并加载面板中的内容
}
#endregion
#region 定义属性
///
/// 获取IPadContent接口对象
///
public IPadContent PadContent
{
get
{
if (this._padDescriptor != null)
{
return this._padDescriptor.PadContent;
}
else
return null;
}
}
#endregion
#region 定义方法
///
/// 分离面板内容
///
public void DetachContent()
{
this.Controls.Clear();
this._padDescriptor = null;
}
///
/// 激活面板,这个方法会把IPadContent中的控件加载到当前DockContent中,是显示面板内容的关键方法
///
public void ActivateContent()
{
if (!this._allowInitialize)
return;
if (!this._isInitialized)
{
this._isInitialized = true;
IPadContent content = this._padDescriptor.PadContent;
if (content == null)
{
return;
}
Form frm = content.Control as Form;
if (frm != null)
{
frm.TopLevel = false;
frm.ControlBox = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.Visible = true;
frm.AutoScroll = true;
this.Controls.Add(frm);
}
else
{
content.Control.Dock = DockStyle.Fill;
this.Controls.Add(content.Control);
}
}
}
///
/// 允许初始化面板
///
public void AllowInitialize()
{
this._allowInitialize = true;
if (this.Visible && this.Width > 0)
{
this.ActivateContent();
}
}
///
/// 初始化面板位置
///
private void InitPadPosition()
{
switch (this._padDescriptor.DockState.ToLower())
{
case "":
case "unknown":
this.ShowHint = DockState.Unknown;
break;
case "dockleft":
this.ShowHint = DockState.DockLeft;
break;
case "dockright":
this.ShowHint = DockState.DockRight;
break;
case "docktop":
this.ShowHint = DockState.DockTop;
break;
case "dockbottom":
this.ShowHint = DockState.DockBottom;
break;
case "document":
this.ShowHint = DockState.Document;
break;
case "float":
this.ShowHint = DockState.Float;
break;
case "hidden":
this.ShowHint = DockState.Hidden;
break;
case "dockleftautohide":
this.ShowHint = DockState.DockLeftAutoHide;
break;
case "dockrightautohide":
this.ShowHint = DockState.DockRightAutoHide;
break;
case "docktopautohide":
this.ShowHint = DockState.DockTopAutoHide;
break;
case "dockbottomautohide":
this.ShowHint = DockState.DockBottomAutoHide;
break;
default:
this.ShowHint = DockState.Unknown;
break;
}
}
#endregion
#region 事件处理程序覆盖
///
/// 面板可视属性发生变化时的处理
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (this.Visible && this.Width > 0)
{
this.ActivateContent();
}
}
///
/// 面板尺寸发生变化时的处理
///
///
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
if (this.Visible && this.Width > 0)
{
this.ActivateContent();
}
}
///
/// 获取面板的持久字符串,一般是对应的完整类名
///
///
protected override string GetPersistString()
{
return this._padDescriptor.Class;
}
///
/// 关闭面板时释放响应的资源
///
///
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
if (disposing)
{
if (this._padDescriptor != null)
{
this._padDescriptor.Dispose();
this._padDescriptor = null;
}
}
}
#endregion
}
}