dockcontent.cs
来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 866 行 · 第 1/2 页
CS
866 行
// *****************************************************************************
//
// Copyright 2004, Weifen Luo
// All rights reserved. The software and associated documentation
// supplied hereunder are the proprietary information of Weifen Luo
// and are supplied subject to licence terms.
//
// WinFormsUI Library Version 1.0
// *****************************************************************************
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WeifenLuo.WinFormsUI
{
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/ClassDef/*'/>
public class DockContent : Form
{
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Constructor[@name="()"]/*'/>
public DockContent()
{
RefreshMdiIntegration();
}
/// <exclude/>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (m_hiddenMdiChild != null)
{
m_hiddenMdiChild.Close();
m_hiddenMdiChild = null;
}
DockPanel = null;
if (AutoHideTab != null)
AutoHideTab.Dispose();
if (DockPaneTab != null)
DockPaneTab.Dispose();
}
base.Dispose(disposing);
}
private bool m_allowRedocking = true;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="AllowRedocking"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.AllowRedocking.Description")]
[DefaultValue(true)]
public bool AllowRedocking
{
get { return m_allowRedocking; }
set { m_allowRedocking = value; }
}
private DockAreas m_allowedAreas = DockAreas.DockLeft | DockAreas.DockRight | DockAreas.DockTop | DockAreas.DockBottom | DockAreas.Document | DockAreas.Float;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="DockableAreas"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.DockableAreas.Description")]
[DefaultValue(DockAreas.DockLeft|DockAreas.DockRight|DockAreas.DockTop|DockAreas.DockBottom|DockAreas.Document|DockAreas.Float)]
public DockAreas DockableAreas
{
get { return m_allowedAreas; }
set
{
if (m_allowedAreas == value)
return;
if (!DockHelper.IsDockStateValid(DockState, value))
throw(new InvalidOperationException(ResourceHelper.GetString("DockContent.DockableAreas.InvalidValue")));
m_allowedAreas = value;
if (!DockHelper.IsDockStateValid(ShowHint, m_allowedAreas))
ShowHint = DockState.Unknown;
}
}
private double m_autoHidePortion = 0.25;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="AutoHidePortion"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.AutoHidePortion.Description")]
[DefaultValue(0.25)]
public double AutoHidePortion
{
get { return m_autoHidePortion; }
set
{
if (value <= 0 || value > 1)
throw(new ArgumentOutOfRangeException(ResourceHelper.GetString("DockContent.AutoHidePortion.OutOfRange")));
if (m_autoHidePortion == value)
return;
m_autoHidePortion = value;
if (DockPanel == null)
return;
if (DockPanel.ActiveAutoHideContent == this)
DockPanel.PerformLayout();
}
}
private string m_tabText = null;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="TabText"]/*'/>
[Localizable(true)]
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.TabText.Description")]
[DefaultValue(null)]
public string TabText
{
get { return DesignMode ? m_tabText : (m_tabText==null ? this.Text : m_tabText); }
set
{
if (m_tabText == value)
return;
m_tabText = value;
if (Pane != null)
Pane.RefreshChanges();
}
}
private bool ShouldSerializeTabText()
{
return (m_tabText != null);
}
private bool m_closeButton = true;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="CloseButton"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.CloseButton.Description")]
[DefaultValue(true)]
public bool CloseButton
{
get { return m_closeButton; }
set
{
if (m_closeButton == value)
return;
m_closeButton = value;
if (Pane != null)
if (Pane.ActiveContent == this)
Pane.RefreshChanges();
}
}
private DockPanel m_dockPanel = null;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="DockPanel"]/*'/>
[Browsable(false)]
public DockPanel DockPanel
{
get { return m_dockPanel; }
set
{
if (m_dockPanel == value)
return;
Pane = null;
if (m_dockPanel != null)
m_dockPanel.RemoveContent(this);
if (m_dockPaneTab != null)
{
m_dockPaneTab.Dispose();
m_dockPaneTab = null;
}
if (m_autoHideTab != null)
{
m_autoHideTab.Dispose();
m_autoHideTab = null;
}
m_dockPanel = value;
if (m_dockPanel != null)
{
Size = Size.Empty; // To reduce the screen flicker
m_dockPanel.AddContent(this);
TopLevel = false;
FormBorderStyle = FormBorderStyle.None;
ShowInTaskbar = false;
Visible = true;
m_dockPaneTab = DockPanel.DockPaneTabFactory.CreateDockPaneTab(this);
m_autoHideTab = DockPanel.AutoHideTabFactory.CreateAutoHideTab(this);
}
RefreshMdiIntegration();
}
}
private DockState DefaultShowState
{
get
{
if (ShowHint != DockState.Unknown)
return ShowHint;
if ((DockableAreas & DockAreas.Document) != 0)
return DockState.Document;
if ((DockableAreas & DockAreas.DockRight) != 0)
return DockState.DockRight;
if ((DockableAreas & DockAreas.DockLeft) != 0)
return DockState.DockLeft;
if ((DockableAreas & DockAreas.DockBottom) != 0)
return DockState.DockBottom;
if ((DockableAreas & DockAreas.DockTop) != 0)
return DockState.DockTop;
if ((DockableAreas & DockAreas.Float) != 0)
return DockState.Float;
return DockState.Unknown;
}
}
private DockState DefaultDockState
{
get
{
if (ShowHint != DockState.Unknown && ShowHint != DockState.Hidden && ShowHint != DockState.Float)
return ShowHint;
if ((DockableAreas & DockAreas.Document) != 0)
return DockState.Document;
if ((DockableAreas & DockAreas.DockRight) != 0)
return DockState.DockRight;
if ((DockableAreas & DockAreas.DockLeft) != 0)
return DockState.DockLeft;
if ((DockableAreas & DockAreas.DockBottom) != 0)
return DockState.DockBottom;
if ((DockableAreas & DockAreas.DockTop) != 0)
return DockState.DockTop;
return DockState.Unknown;
}
}
private DockState m_dockState = DockState.Unknown;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="DockState"]/*'/>
[Browsable(false)]
public DockState DockState
{
get { return m_dockState; }
set
{
if (m_dockState == value)
return;
if (value == DockState.Hidden)
IsHidden = true;
else
SetDockState(false, value, Pane);
}
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="Pane"]/*'/>
public DockPane Pane
{
get { return IsFloat ? FloatPane : PanelPane; }
set
{
if (Pane == value)
return;
DockPane oldPane = Pane;
SuspendSetDockState();
FloatPane = (value == null ? null : (value.IsFloat ? value : FloatPane));
PanelPane = (value == null ? null : (value.IsFloat ? PanelPane : value));
ResumeSetDockState(IsHidden, value != null ? value.DockState : DockState.Unknown, oldPane);
}
}
private bool m_isHidden = false;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="IsHidden"]/*'/>
[Browsable(false)]
public bool IsHidden
{
get { return m_isHidden; }
set
{
if (m_isHidden == value)
return;
SetDockState(value, VisibleState, Pane);
}
}
private DockState m_visibleState = DockState.Unknown;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="VisibleState"]/*'/>
[Browsable(false)]
public DockState VisibleState
{
get { return m_visibleState; }
set
{
if (m_visibleState == value)
return;
SetDockState(IsHidden, value, Pane);
}
}
private bool m_isFloat = false;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="IsFloat"]/*'/>
[Browsable(false)]
public bool IsFloat
{
get { return m_isFloat; }
set
{
DockState visibleState;
if (m_isFloat == value)
return;
DockPane oldPane = Pane;
if (value)
{
if (!IsDockStateValid(DockState.Float))
throw new InvalidOperationException(ResourceHelper.GetString("DockContent.IsFloat.InvalidValue"));
visibleState = DockState.Float;
}
else
visibleState = (PanelPane != null) ? PanelPane.DockState : DefaultDockState;
if (visibleState == DockState.Unknown)
throw new InvalidOperationException(ResourceHelper.GetString("DockContent.IsFloat.InvalidValue"));
SetDockState(IsHidden, visibleState, oldPane);
}
}
private DockPane m_panelPane = null;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="PanelPane"]/*'/>
[Browsable(false)]
public DockPane PanelPane
{
get { return m_panelPane; }
set
{
if (m_panelPane == value)
return;
if (value != null)
{
if (value.IsFloat || value.DockPanel != DockPanel)
throw new InvalidOperationException(ResourceHelper.GetString("DockContent.DockPane.InvalidValue"));
}
DockPane oldPane = Pane;
if (m_panelPane != null)
m_panelPane.RemoveContent(this);
m_panelPane = value;
if (m_panelPane != null)
{
m_panelPane.AddContent(this);
SetDockState(IsHidden, IsFloat ? DockState.Float : m_panelPane.DockState, oldPane);
}
else
SetDockState(IsHidden, DockState.Unknown, oldPane);
}
}
private DockPane m_floatPane = null;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="FloatPane"]/*'/>
[Browsable(false)]
public DockPane FloatPane
{
get { return m_floatPane; }
set
{
if (m_floatPane == value)
return;
if (value != null)
{
if (!value.IsFloat || value.DockPanel != DockPanel)
throw new InvalidOperationException(ResourceHelper.GetString("DockContent.FloatPane.InvalidValue"));
}
DockPane oldPane = Pane;
if (m_floatPane != null)
m_floatPane.RemoveContent(this);
m_floatPane = value;
if (m_floatPane != null)
{
m_floatPane.AddContent(this);
SetDockState(IsHidden, IsFloat ? DockState.Float : VisibleState, oldPane);
}
else
SetDockState(IsHidden, DockState.Unknown, oldPane);
}
}
private int m_countSetDockState = 0;
private void SuspendSetDockState()
{
m_countSetDockState ++;
}
private void ResumeSetDockState()
{
m_countSetDockState --;
if (m_countSetDockState < 0)
m_countSetDockState = 0;
}
private void ResumeSetDockState(bool isHidden, DockState visibleState, DockPane oldPane)
{
ResumeSetDockState();
SetDockState(isHidden, visibleState, oldPane);
}
internal void SetDockState(bool isHidden, DockState visibleState, DockPane oldPane)
{
if (m_countSetDockState != 0)
return;
if (DockPanel == null && visibleState != DockState.Unknown)
throw new InvalidOperationException(ResourceHelper.GetString("DockContent.SetDockState.NullPanel"));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?