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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupGrid.h: interface for the CXTPMarkupGrid class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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. #if !defined(__XTPMARKUPGRID_H__)
  21. #define __XTPMARKUPGRID_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupPanel.h"
  26. class CXTPMarkupBuilder;
  27. class CXTPMarkupUIElement;
  28. class _XTP_EXT_CLASS CXTPMarkupGridLength : public CXTPMarkupObject
  29. {
  30. DECLARE_MARKUPCLASS(CXTPMarkupGridLength);
  31. public:
  32. enum GridUnitType
  33. {
  34. unitTypeAuto,
  35. unitTypePixel,
  36. unitTypeStar
  37. };
  38. public:
  39. CXTPMarkupGridLength(double nValue = 0, GridUnitType type = unitTypePixel);
  40. GridUnitType GetUnitType() const;
  41. double GetValue() const;
  42. BOOL IsStar() const {
  43. return m_type == unitTypeStar;
  44. }
  45. public:
  46. CXTPMarkupObject* ConvertFrom(CXTPMarkupObject* pObject) const;
  47. public:
  48. double m_nValue;
  49. GridUnitType m_type;
  50. };
  51. class _XTP_EXT_CLASS CXTPMarkupDefinitionBase : public CXTPMarkupObject
  52. {
  53. protected:
  54. CXTPMarkupDefinitionBase(BOOL bIsColumnDefinition);
  55. public:
  56. int GetUserMinSize() const;
  57. int GetUserMaxSize() const;
  58. CXTPMarkupGridLength* GetUserSize() const;
  59. private:
  60. void OnBeforeLayout();
  61. void UpdateMinSize(int nMinSize);
  62. protected:
  63. BOOL m_bIsColumnDefinition;
  64. int m_nMinSize;
  65. int m_nSizeType;
  66. double m_nMeasureSize;
  67. double m_nSizeCache;
  68. int m_nFinalOffset;
  69. friend class CXTPMarkupGrid;
  70. };
  71. class _XTP_EXT_CLASS CXTPMarkupColumnDefinition : public CXTPMarkupDefinitionBase
  72. {
  73. DECLARE_MARKUPCLASS(CXTPMarkupColumnDefinition);
  74. public:
  75. CXTPMarkupColumnDefinition();
  76. public:
  77. void SetMinWidth(int nWidth);
  78. void SetMaxWidth(int nWidth);
  79. void SetWidth(int nWidth);
  80. public:
  81. static CXTPMarkupDependencyProperty* m_pWidthProperty;
  82. static CXTPMarkupDependencyProperty* m_pMinWidthProperty;
  83. static CXTPMarkupDependencyProperty* m_pMaxWidthProperty;
  84. };
  85. class _XTP_EXT_CLASS CXTPMarkupRowDefinition : public CXTPMarkupDefinitionBase
  86. {
  87. DECLARE_MARKUPCLASS(CXTPMarkupRowDefinition);
  88. public:
  89. CXTPMarkupRowDefinition();
  90. public:
  91. void SetMinHeight(int nHeight);
  92. void SetMaxHeight(int nHeight);
  93. void SetHeight(int nHeight);
  94. public:
  95. static CXTPMarkupDependencyProperty* m_pHeightProperty;
  96. static CXTPMarkupDependencyProperty* m_pMinHeightProperty;
  97. static CXTPMarkupDependencyProperty* m_pMaxHeightProperty;
  98. };
  99. class _XTP_EXT_CLASS CXTPMarkupDefinitionCollection : public CXTPMarkupCollection
  100. {
  101. DECLARE_MARKUPCLASS(CXTPMarkupDefinitionCollection);
  102. public:
  103. CXTPMarkupDefinitionCollection();
  104. public:
  105. CXTPMarkupDefinitionBase* GetItem(int nIndex) const;
  106. };
  107. class _XTP_EXT_CLASS CXTPMarkupRowDefinitionCollection : public CXTPMarkupDefinitionCollection
  108. {
  109. DECLARE_MARKUPCLASS(CXTPMarkupRowDefinitionCollection);
  110. public:
  111. CXTPMarkupRowDefinitionCollection();
  112. };
  113. class _XTP_EXT_CLASS CXTPMarkupColumnDefinitionCollection : public CXTPMarkupDefinitionCollection
  114. {
  115. DECLARE_MARKUPCLASS(CXTPMarkupColumnDefinitionCollection);
  116. public:
  117. CXTPMarkupColumnDefinitionCollection();
  118. };
  119. class _XTP_EXT_CLASS CXTPMarkupGrid : public CXTPMarkupPanel
  120. {
  121. private:
  122. enum LayoutTimeSizeType
  123. {
  124. sizeTypeNone = 0,
  125. sizeTypePixel = 1,
  126. sizeTypeAuto = 2,
  127. sizeTypeStar = 4
  128. };
  129. private:
  130. struct CELLCACHE
  131. {
  132. int nColumnIndex;
  133. int nRowIndex;
  134. int nColumnSpan;
  135. int nRowSpan;
  136. int nSizeTypeU;
  137. int nSizeTypeV;
  138. int nNext;
  139. public:
  140. BOOL IsStarU() const;
  141. BOOL IsAutoU() const;
  142. BOOL IsStarV() const;
  143. BOOL IsAutoV() const;
  144. };
  145. private:
  146. DECLARE_MARKUPCLASS(CXTPMarkupGrid)
  147. protected:
  148. CXTPMarkupGrid();
  149. virtual ~CXTPMarkupGrid();
  150. public:
  151. CXTPMarkupColumnDefinitionCollection* GetColumnDefinitions() const;
  152. CXTPMarkupRowDefinitionCollection* GetRowDefinitions() const;
  153. static int AFX_CDECL GetColumn(CXTPMarkupUIElement* pElement);
  154. static int AFX_CDECL GetRow(CXTPMarkupUIElement* pElement);
  155. static int AFX_CDECL GetColumnSpan(CXTPMarkupUIElement* pElement);
  156. static int AFX_CDECL GetRowSpan(CXTPMarkupUIElement* pElement);
  157. static void AFX_CDECL SetColumn(CXTPMarkupUIElement* pElement, int nColumn);
  158. static void AFX_CDECL SetRow(CXTPMarkupUIElement* pElement, int nRow);
  159. protected:
  160. CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize availableSize);
  161. CSize ArrangeOverride(CSize arrangeSize);
  162. void SetPropertyObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupDependencyProperty* pProperty, CXTPMarkupObject* pValue);
  163. private:
  164. void ValidateDefinitionsLayout(CXTPMarkupDefinitionCollection* pDefinitions, BOOL bTreatStarAsAuto);
  165. void ValidateCells();
  166. void ValidateDefinitions();
  167. int GetLengthTypeForRange(CXTPMarkupDefinitionCollection* pDefinitions, int start, int count);
  168. void MeasureCellsGroup(CXTPMarkupDrawingContext* pDC, int cellsHead, CSize referenceSize, BOOL ignoreDesiredSizeU, BOOL forceInfinityV);
  169. void MeasureCell(CXTPMarkupDrawingContext* pDC, int cell, BOOL forceInfinityV);
  170. int GetMeasureSizeForRange(CXTPMarkupDefinitionCollection* pDefinitions, int start, int count);
  171. int CalculateDesiredSize(CXTPMarkupDefinitionCollection* pDefinitions);
  172. void ResolveStar(CXTPMarkupDefinitionCollection* pDefinitions, double availableSize);
  173. int GetFinalSizeForRange(CXTPMarkupDefinitionCollection* pDefinitions, int start, int count);
  174. void SetFinalSize(CXTPMarkupDefinitionCollection* pDefinitions, int finalSize);
  175. static int _cdecl DistributionOrderComparer(const void *arg1, const void *arg2);
  176. static int _cdecl StarDistributionOrderComparer(const void *arg1, const void *arg2);
  177. static void AFX_CDECL CXTPMarkupGrid::OnCellAttachedPropertyChanged(CXTPMarkupObject* d, CXTPMarkupPropertyChangedEventArgs* e);
  178. protected:
  179. CXTPMarkupRowDefinitionCollection* m_pRowDefinitions;
  180. CXTPMarkupColumnDefinitionCollection* m_pColumnDefinitions;
  181. public:
  182. static CXTPMarkupDependencyProperty* m_pColumnDefinitionsProperty;
  183. static CXTPMarkupDependencyProperty* m_pRowDefinitionsProperty;
  184. static CXTPMarkupDependencyProperty* m_pRowProperty;
  185. static CXTPMarkupDependencyProperty* m_pColumnProperty;
  186. private:
  187. CELLCACHE* m_pCellCachesCollection;
  188. int m_nCellGroup[4];
  189. BOOL m_bHasStarCellsU;
  190. BOOL m_bHasStarCellsV;
  191. BOOL m_bHasGroup2CellsInAutoRows;
  192. CXTPMarkupDefinitionCollection* m_pDefinitionsU;
  193. CXTPMarkupDefinitionCollection* m_pDefinitionsV;
  194. friend struct CELLCACHE;
  195. };
  196. AFX_INLINE CXTPMarkupColumnDefinitionCollection* CXTPMarkupGrid::GetColumnDefinitions() const {
  197. return m_pColumnDefinitions;
  198. }
  199. AFX_INLINE CXTPMarkupRowDefinitionCollection* CXTPMarkupGrid::GetRowDefinitions() const {
  200. return m_pRowDefinitions;
  201. }
  202. AFX_INLINE CXTPMarkupDefinitionBase* CXTPMarkupDefinitionCollection::GetItem(int nIndex) const {
  203. return nIndex >= 0 && nIndex < m_arrItems.GetSize() ? (CXTPMarkupDefinitionBase*)m_arrItems[nIndex] : NULL;
  204. }
  205. AFX_INLINE CXTPMarkupGridLength::GridUnitType CXTPMarkupGridLength::GetUnitType() const {
  206. return m_type;
  207. };
  208. AFX_INLINE double CXTPMarkupGridLength::GetValue() const {
  209. return m_nValue;
  210. }
  211. AFX_INLINE void CXTPMarkupColumnDefinition::SetMinWidth(int nWidth) {
  212. SetValue(m_pMinWidthProperty, new CXTPMarkupInt(nWidth));
  213. }
  214. AFX_INLINE void CXTPMarkupColumnDefinition::SetMaxWidth(int nWidth) {
  215. SetValue(m_pMaxWidthProperty, new CXTPMarkupInt(nWidth));
  216. }
  217. AFX_INLINE void CXTPMarkupColumnDefinition::SetWidth(int nWidth) {
  218. SetValue(m_pWidthProperty, new CXTPMarkupInt(nWidth));
  219. }
  220. AFX_INLINE void CXTPMarkupRowDefinition::SetMinHeight(int nHeight) {
  221. SetValue(m_pMinHeightProperty, new CXTPMarkupInt(nHeight));
  222. }
  223. AFX_INLINE void CXTPMarkupRowDefinition::SetMaxHeight(int nHeight) {
  224. SetValue(m_pMaxHeightProperty, new CXTPMarkupInt(nHeight));
  225. }
  226. AFX_INLINE void CXTPMarkupRowDefinition::SetHeight(int nHeight) {
  227. SetValue(m_pHeightProperty, new CXTPMarkupInt(nHeight));
  228. }
  229. #endif // !defined(__XTPMARKUPGRID_H__)