/******************************************************************************* * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential * 类的信息: * 1.程序名称:DockOutlineBase.cs * 2.功能描述:类文件 * 编辑履历: * 作者 日期 版本 修改内容 * 陈晓野 2014/09/01 1.00 新建 *******************************************************************************/ using System.Drawing; using System.Windows.Forms; namespace Dongke.IBOSS.PRD.Basics.DockPanel { /// /// 类文件 /// internal abstract class DockOutlineBase { public DockOutlineBase() { Init(); } private void Init() { SetValues(Rectangle.Empty, null, DockStyle.None, -1); SaveOldValues(); } private Rectangle m_oldFloatWindowBounds; protected Rectangle OldFloatWindowBounds { get { return m_oldFloatWindowBounds; } } private Control m_oldDockTo; protected Control OldDockTo { get { return m_oldDockTo; } } private DockStyle m_oldDock; protected DockStyle OldDock { get { return m_oldDock; } } private int m_oldContentIndex; protected int OldContentIndex { get { return m_oldContentIndex; } } protected bool SameAsOldValue { get { return FloatWindowBounds == OldFloatWindowBounds && DockTo == OldDockTo && Dock == OldDock && ContentIndex == OldContentIndex; } } private Rectangle m_floatWindowBounds; public Rectangle FloatWindowBounds { get { return m_floatWindowBounds; } } private Control m_dockTo; public Control DockTo { get { return m_dockTo; } } private DockStyle m_dock; public DockStyle Dock { get { return m_dock; } } private int m_contentIndex; public int ContentIndex { get { return m_contentIndex; } } public bool FlagFullEdge { get { return m_contentIndex != 0; } } private bool m_flagTestDrop = false; public bool FlagTestDrop { get { return m_flagTestDrop; } set { m_flagTestDrop = value; } } private void SaveOldValues() { m_oldDockTo = m_dockTo; m_oldDock = m_dock; m_oldContentIndex = m_contentIndex; m_oldFloatWindowBounds = m_floatWindowBounds; } protected abstract void OnShow(); protected abstract void OnClose(); private void SetValues(Rectangle floatWindowBounds, Control dockTo, DockStyle dock, int contentIndex) { m_floatWindowBounds = floatWindowBounds; m_dockTo = dockTo; m_dock = dock; m_contentIndex = contentIndex; FlagTestDrop = true; } private void TestChange() { if (m_floatWindowBounds != m_oldFloatWindowBounds || m_dockTo != m_oldDockTo || m_dock != m_oldDock || m_contentIndex != m_oldContentIndex) OnShow(); } public void Show() { SaveOldValues(); SetValues(Rectangle.Empty, null, DockStyle.None, -1); TestChange(); } public void Show(DockPane pane, DockStyle dock) { SaveOldValues(); SetValues(Rectangle.Empty, pane, dock, -1); TestChange(); } public void Show(DockPane pane, int contentIndex) { SaveOldValues(); SetValues(Rectangle.Empty, pane, DockStyle.Fill, contentIndex); TestChange(); } public void Show(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) { SaveOldValues(); SetValues(Rectangle.Empty, dockPanel, dock, fullPanelEdge ? -1 : 0); TestChange(); } public void Show(Rectangle floatWindowBounds) { SaveOldValues(); SetValues(floatWindowBounds, null, DockStyle.None, -1); TestChange(); } public void Close() { OnClose(); } } }