DockOutlineBase.cs
上传用户:szlfmled
上传日期:2020-11-22
资源大小:978k
文件大小:4k
源码类别:

C#编程

开发平台:

C#

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace WeifenLuo.WinFormsUI.Docking
  5. {
  6.     internal abstract class DockOutlineBase
  7.     {
  8.         public DockOutlineBase()
  9.         {
  10.             Init();
  11.         }
  12.         private void Init()
  13.         {
  14.             SetValues(Rectangle.Empty, null, DockStyle.None, -1);
  15.             SaveOldValues();
  16.         }
  17.         private Rectangle m_oldFloatWindowBounds;
  18.         protected Rectangle OldFloatWindowBounds
  19.         {
  20.             get { return m_oldFloatWindowBounds; }
  21.         }
  22.         private Control m_oldDockTo;
  23.         protected Control OldDockTo
  24.         {
  25.             get { return m_oldDockTo; }
  26.         }
  27.         private DockStyle m_oldDock;
  28.         protected DockStyle OldDock
  29.         {
  30.             get { return m_oldDock; }
  31.         }
  32.         private int m_oldContentIndex;
  33.         protected int OldContentIndex
  34.         {
  35.             get { return m_oldContentIndex; }
  36.         }
  37.         protected bool SameAsOldValue
  38.         {
  39.             get
  40.             {
  41.                 return FloatWindowBounds == OldFloatWindowBounds &&
  42.                     DockTo == OldDockTo &&
  43.                     Dock == OldDock &&
  44.                     ContentIndex == OldContentIndex;
  45.             }
  46.         }
  47.         private Rectangle m_floatWindowBounds;
  48.         public Rectangle FloatWindowBounds
  49.         {
  50.             get { return m_floatWindowBounds; }
  51.         }
  52.         private Control m_dockTo;
  53.         public Control DockTo
  54.         {
  55.             get { return m_dockTo; }
  56.         }
  57.         private DockStyle m_dock;
  58.         public DockStyle Dock
  59.         {
  60.             get { return m_dock; }
  61.         }
  62.         private int m_contentIndex;
  63.         public int ContentIndex
  64.         {
  65.             get { return m_contentIndex; }
  66.         }
  67.         public bool FlagFullEdge
  68.         {
  69.             get { return m_contentIndex != 0; }
  70.         }
  71.         private bool m_flagTestDrop = false;
  72.         public bool FlagTestDrop
  73.         {
  74.             get { return m_flagTestDrop; }
  75.             set { m_flagTestDrop = value; }
  76.         }
  77.         private void SaveOldValues()
  78.         {
  79.             m_oldDockTo = m_dockTo;
  80.             m_oldDock = m_dock;
  81.             m_oldContentIndex = m_contentIndex;
  82.             m_oldFloatWindowBounds = m_floatWindowBounds;
  83.         }
  84.         protected abstract void OnShow();
  85.         protected abstract void OnClose();
  86.         private void SetValues(Rectangle floatWindowBounds, Control dockTo, DockStyle dock, int contentIndex)
  87.         {
  88.             m_floatWindowBounds = floatWindowBounds;
  89.             m_dockTo = dockTo;
  90.             m_dock = dock;
  91.             m_contentIndex = contentIndex;
  92.             FlagTestDrop = true;
  93.         }
  94.         private void TestChange()
  95.         {
  96.             if (m_floatWindowBounds != m_oldFloatWindowBounds ||
  97.                 m_dockTo != m_oldDockTo ||
  98.                 m_dock != m_oldDock ||
  99.                 m_contentIndex != m_oldContentIndex)
  100.                 OnShow();
  101.         }
  102.         public void Show()
  103.         {
  104.             SaveOldValues();
  105.             SetValues(Rectangle.Empty, null, DockStyle.None, -1);
  106.             TestChange();
  107.         }
  108.         public void Show(DockPane pane, DockStyle dock)
  109.         {
  110.             SaveOldValues();
  111.             SetValues(Rectangle.Empty, pane, dock, -1);
  112.             TestChange();
  113.         }
  114.         public void Show(DockPane pane, int contentIndex)
  115.         {
  116.             SaveOldValues();
  117.             SetValues(Rectangle.Empty, pane, DockStyle.Fill, contentIndex);
  118.             TestChange();
  119.         }
  120.         public void Show(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge)
  121.         {
  122.             SaveOldValues();
  123.             SetValues(Rectangle.Empty, dockPanel, dock, fullPanelEdge ? -1 : 0);
  124.             TestChange();
  125.         }
  126.         public void Show(Rectangle floatWindowBounds)
  127.         {
  128.             SaveOldValues();
  129.             SetValues(floatWindowBounds, null, DockStyle.None, -1);
  130.             TestChange();
  131.         }
  132.         public void Close()
  133.         {
  134.             OnClose();
  135.         }
  136.     }
  137. }