XTPDockingPaneBaseContainer.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:3k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPDockingPaneBase.cpp : implementation of the CXTPDockingPaneBase class.
  2. //
  3. // This file is a part of the XTREME DOCKINGPANE MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "XTPDockingPanePaintManager.h"
  22. #include "XTPDockingPaneBaseContainer.h"
  23. #include "XTPDockingPaneManager.h"
  24. #include "XTPDockingPane.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. //////////////////////////////////////////////////////////////////////////
  31. // CXTPDockingPaneBaseContainer
  32. CXTPDockingPaneBaseContainer::CXTPDockingPaneBaseContainer(XTPDockingPaneType type, CXTPDockingPaneLayout* pLayout)
  33. : CXTPDockingPaneBase(type, pLayout)
  34. {
  35. }
  36. CXTPDockingPaneBaseContainer::~CXTPDockingPaneBaseContainer()
  37. {
  38. }
  39. POSITION CXTPDockingPaneBaseContainer::ContainPane(CXTPDockingPaneBase* pPane) const
  40. {
  41. if (pPane == (CXTPDockingPaneBase*)this)
  42. return (POSITION)TRUE;
  43. POSITION pos = m_lstPanes.GetHeadPosition();
  44. while (pos)
  45. {
  46. POSITION posContain = pos;
  47. if (m_lstPanes.GetNext(pos)->ContainPane(pPane))
  48. return posContain;
  49. }
  50. return NULL;
  51. }
  52. void CXTPDockingPaneBaseContainer::FindPane(XTPDockingPaneType type, CXTPDockingPaneBaseList* pList) const
  53. {
  54. if (GetType() == type)
  55. {
  56. if (IsEmpty())
  57. {
  58. return;
  59. }
  60. pList->AddTail((CXTPDockingPaneBase*)this);
  61. }
  62. POSITION pos = m_lstPanes.GetHeadPosition();
  63. while (pos)
  64. {
  65. CXTPDockingPaneBase* pPane = m_lstPanes.GetNext(pos);
  66. pPane->FindPane(type, pList);
  67. }
  68. }
  69. BOOL CXTPDockingPaneBaseContainer::IsEmpty() const
  70. {
  71. POSITION pos = m_lstPanes.GetHeadPosition();
  72. while (pos)
  73. {
  74. CXTPDockingPaneBase* pPane = m_lstPanes.GetNext(pos);
  75. if (!pPane->IsEmpty())
  76. {
  77. return FALSE;
  78. }
  79. }
  80. return TRUE;
  81. }
  82. POSITION CXTPDockingPaneBaseContainer::GetHeadPosition() const
  83. {
  84. return m_lstPanes.GetHeadPosition();
  85. }
  86. CXTPDockingPaneBase* CXTPDockingPaneBaseContainer::GetNext(POSITION& pos) const
  87. {
  88. return m_lstPanes.GetNext(pos);
  89. }
  90. CXTPDockingPaneBase* CXTPDockingPaneBaseContainer::GetFirstPane() const
  91. {
  92. if (m_lstPanes.IsEmpty())
  93. return NULL;
  94. return m_lstPanes.GetHead();
  95. }
  96. CXTPDockingPaneBase* CXTPDockingPaneBaseContainer::GetLastPane() const
  97. {
  98. if (m_lstPanes.IsEmpty())
  99. return NULL;
  100. return m_lstPanes.GetTail();
  101. }
  102. BOOL CXTPDockingPaneBaseContainer::OnAction(XTPDockingPaneAction action)
  103. {
  104. CXTPDockingPaneManager* pManager = GetDockingPaneManager();
  105. CXTPDockingPaneBaseList lstChilds;
  106. FindPane(xtpPaneTypeDockingPane, &lstChilds);
  107. POSITION pos = lstChilds.GetHeadPosition();
  108. while (pos)
  109. {
  110. CXTPDockingPane* pPane = (CXTPDockingPane*)lstChilds.GetNext(pos);
  111. if (pManager->NotifyAction(action, pPane, this))
  112. return TRUE;
  113. }
  114. return FALSE;
  115. }