DockPanelExtender.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. /*******************************************************************************
  2. * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:DockPanelExtender.cs
  5. * 2.功能描述:类文件
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 陈晓野 2014/09/01 1.00 新建
  9. *******************************************************************************/
  10. using System;
  11. using System.Diagnostics.CodeAnalysis;
  12. using System.Drawing;
  13. namespace Dongke.IBOSS.PRD.Basics.DockPanel
  14. {
  15. /// <summary>
  16. /// 类文件
  17. /// </summary>
  18. public sealed class DockPanelExtender
  19. {
  20. [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
  21. public interface IDockPaneFactory
  22. {
  23. DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show);
  24. [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")]
  25. DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show);
  26. DockPane CreateDockPane(IDockContent content, DockPane previousPane, DockAlignment alignment, double proportion, bool show);
  27. [SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")]
  28. DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show);
  29. }
  30. [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
  31. public interface IFloatWindowFactory
  32. {
  33. FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane);
  34. FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds);
  35. }
  36. [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
  37. public interface IDockPaneCaptionFactory
  38. {
  39. DockPaneCaptionBase CreateDockPaneCaption(DockPane pane);
  40. }
  41. [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
  42. public interface IDockPaneStripFactory
  43. {
  44. DockPaneStripBase CreateDockPaneStrip(DockPane pane);
  45. }
  46. [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
  47. public interface IAutoHideStripFactory
  48. {
  49. AutoHideStripBase CreateAutoHideStrip(DockPanel panel);
  50. }
  51. #region DefaultDockPaneFactory
  52. private class DefaultDockPaneFactory : IDockPaneFactory
  53. {
  54. public DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show)
  55. {
  56. return new DockPane(content, visibleState, show);
  57. }
  58. public DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show)
  59. {
  60. return new DockPane(content, floatWindow, show);
  61. }
  62. public DockPane CreateDockPane(IDockContent content, DockPane prevPane, DockAlignment alignment, double proportion, bool show)
  63. {
  64. return new DockPane(content, prevPane, alignment, proportion, show);
  65. }
  66. public DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show)
  67. {
  68. return new DockPane(content, floatWindowBounds, show);
  69. }
  70. }
  71. #endregion
  72. #region DefaultFloatWindowFactory
  73. private class DefaultFloatWindowFactory : IFloatWindowFactory
  74. {
  75. public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane)
  76. {
  77. return new FloatWindow(dockPanel, pane);
  78. }
  79. public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds)
  80. {
  81. return new FloatWindow(dockPanel, pane, bounds);
  82. }
  83. }
  84. #endregion
  85. #region DefaultDockPaneCaptionFactory
  86. private class DefaultDockPaneCaptionFactory : IDockPaneCaptionFactory
  87. {
  88. public DockPaneCaptionBase CreateDockPaneCaption(DockPane pane)
  89. {
  90. return new VS2005DockPaneCaption(pane);
  91. }
  92. }
  93. #endregion
  94. #region DefaultDockPaneTabStripFactory
  95. private class DefaultDockPaneStripFactory : IDockPaneStripFactory
  96. {
  97. public DockPaneStripBase CreateDockPaneStrip(DockPane pane)
  98. {
  99. return new VS2005DockPaneStrip(pane);
  100. }
  101. }
  102. #endregion
  103. #region DefaultAutoHideStripFactory
  104. private class DefaultAutoHideStripFactory : IAutoHideStripFactory
  105. {
  106. public AutoHideStripBase CreateAutoHideStrip(DockPanel panel)
  107. {
  108. return new VS2005AutoHideStrip(panel);
  109. }
  110. }
  111. #endregion
  112. internal DockPanelExtender(DockPanel dockPanel)
  113. {
  114. m_dockPanel = dockPanel;
  115. }
  116. private DockPanel m_dockPanel;
  117. private DockPanel DockPanel
  118. {
  119. get
  120. {
  121. return m_dockPanel;
  122. }
  123. }
  124. private IDockPaneFactory m_dockPaneFactory = null;
  125. public IDockPaneFactory DockPaneFactory
  126. {
  127. get
  128. {
  129. if (m_dockPaneFactory == null)
  130. m_dockPaneFactory = new DefaultDockPaneFactory();
  131. return m_dockPaneFactory;
  132. }
  133. set
  134. {
  135. if (DockPanel.Panes.Count > 0)
  136. throw new InvalidOperationException();
  137. m_dockPaneFactory = value;
  138. }
  139. }
  140. private IFloatWindowFactory m_floatWindowFactory = null;
  141. public IFloatWindowFactory FloatWindowFactory
  142. {
  143. get
  144. {
  145. if (m_floatWindowFactory == null)
  146. m_floatWindowFactory = new DefaultFloatWindowFactory();
  147. return m_floatWindowFactory;
  148. }
  149. set
  150. {
  151. if (DockPanel.FloatWindows.Count > 0)
  152. throw new InvalidOperationException();
  153. m_floatWindowFactory = value;
  154. }
  155. }
  156. private IDockPaneCaptionFactory m_dockPaneCaptionFactory = null;
  157. public IDockPaneCaptionFactory DockPaneCaptionFactory
  158. {
  159. get
  160. {
  161. if (m_dockPaneCaptionFactory == null)
  162. m_dockPaneCaptionFactory = new DefaultDockPaneCaptionFactory();
  163. return m_dockPaneCaptionFactory;
  164. }
  165. set
  166. {
  167. if (DockPanel.Panes.Count > 0)
  168. throw new InvalidOperationException();
  169. m_dockPaneCaptionFactory = value;
  170. }
  171. }
  172. private IDockPaneStripFactory m_dockPaneStripFactory = null;
  173. public IDockPaneStripFactory DockPaneStripFactory
  174. {
  175. get
  176. {
  177. if (m_dockPaneStripFactory == null)
  178. m_dockPaneStripFactory = new DefaultDockPaneStripFactory();
  179. return m_dockPaneStripFactory;
  180. }
  181. set
  182. {
  183. if (DockPanel.Contents.Count > 0)
  184. throw new InvalidOperationException();
  185. m_dockPaneStripFactory = value;
  186. }
  187. }
  188. private IAutoHideStripFactory m_autoHideStripFactory = null;
  189. public IAutoHideStripFactory AutoHideStripFactory
  190. {
  191. get
  192. {
  193. if (m_autoHideStripFactory == null)
  194. m_autoHideStripFactory = new DefaultAutoHideStripFactory();
  195. return m_autoHideStripFactory;
  196. }
  197. set
  198. {
  199. if (DockPanel.Contents.Count > 0)
  200. throw new InvalidOperationException();
  201. if (m_autoHideStripFactory == value)
  202. return;
  203. m_autoHideStripFactory = value;
  204. DockPanel.ResetAutoHideStripControl();
  205. }
  206. }
  207. }
  208. }