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

对话框与窗口

开发平台:

Visual C++

  1. // XTPPropertyGridItemSize.cpp : implementation of the CXTPPropertyGridItemSize class.
  2. //
  3. // This file is a part of the XTREME PROPERTYGRID 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 "Common/XTPVC80Helpers.h"
  22. #include "XTPPropertyGridInplaceEdit.h"
  23. #include "XTPPropertyGridInplaceButton.h"
  24. #include "XTPPropertyGridInplaceList.h"
  25. #include "XTPPropertyGridItem.h"
  26. #include "XTPPropertyGridItemSize.h"
  27. #include "XTPPropertyGridItemNumber.h"
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #undef THIS_FILE
  31. static char THIS_FILE[] = __FILE__;
  32. #endif
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CXTPPropertyGridItemSize::CXTPPropertyGridItemSizeWidth
  35. class CXTPPropertyGridItemSize::CXTPPropertyGridItemSizeWidth : public CXTPPropertyGridItemNumber
  36. {
  37. public:
  38. CXTPPropertyGridItemSizeWidth(LPCTSTR strCaption)
  39. : CXTPPropertyGridItemNumber(strCaption)
  40. {
  41. }
  42. virtual void OnValueChanged(CString strValue)
  43. {
  44. ((CXTPPropertyGridItemSize*)m_pParent)->SetWidth(strValue);
  45. }
  46. virtual BOOL GetReadOnly() const
  47. {
  48. return m_pParent->GetReadOnly();
  49. }
  50. };
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CXTPPropertyGridItemSize::CXTPPropertyGridItemSizeHeight
  53. class CXTPPropertyGridItemSize::CXTPPropertyGridItemSizeHeight : public CXTPPropertyGridItemNumber
  54. {
  55. public:
  56. CXTPPropertyGridItemSizeHeight(LPCTSTR strCaption)
  57. : CXTPPropertyGridItemNumber(strCaption)
  58. {
  59. }
  60. virtual void OnValueChanged(CString strValue)
  61. {
  62. ((CXTPPropertyGridItemSize*)m_pParent)->SetHeight(strValue);
  63. }
  64. virtual BOOL GetReadOnly() const
  65. {
  66. return m_pParent->GetReadOnly();
  67. }
  68. };
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CXTPPropertyGridItemSize
  71. IMPLEMENT_DYNAMIC(CXTPPropertyGridItemSize, CXTPPropertyGridItem)
  72. CXTPPropertyGridItemSize::CXTPPropertyGridItemSize(LPCTSTR strCaption, CSize size, CSize* pBindSize)
  73. : CXTPPropertyGridItem(strCaption)
  74. {
  75. m_pItemWidth = NULL;
  76. m_pItemHeight = NULL;
  77. m_szValue = size;
  78. BindToSize(pBindSize);
  79. m_strDefaultValue = m_strValue = SizeToString(size);
  80. }
  81. CXTPPropertyGridItemSize::CXTPPropertyGridItemSize(UINT nID, CSize size, CSize* pBindSize)
  82. : CXTPPropertyGridItem(nID)
  83. {
  84. m_pItemWidth = NULL;
  85. m_pItemHeight = NULL;
  86. m_szValue = size;
  87. BindToSize(pBindSize);
  88. m_strDefaultValue = m_strValue = SizeToString(size);
  89. }
  90. CXTPPropertyGridItemSize::~CXTPPropertyGridItemSize()
  91. {
  92. }
  93. /////////////////////////////////////////////////////////////////////////////
  94. //
  95. void CXTPPropertyGridItemSize::OnAddChildItem()
  96. {
  97. if (m_pItemHeight && m_pItemWidth)
  98. return;
  99. m_pItemWidth = (CXTPPropertyGridItemSizeWidth*)AddChildItem(new CXTPPropertyGridItemSizeWidth(_T("Width")));
  100. m_pItemHeight = (CXTPPropertyGridItemSizeHeight*)AddChildItem(new CXTPPropertyGridItemSizeHeight(_T("Height")));
  101. UpdateChilds();
  102. m_pItemWidth->SetDefaultValue(m_pItemWidth->GetValue());
  103. m_pItemHeight->SetDefaultValue(m_pItemHeight->GetValue());
  104. }
  105. CString CXTPPropertyGridItemSize::SizeToString(CSize size)
  106. {
  107. CString str;
  108. str.Format(_T("%i; %i"), size.cx, size.cy);
  109. return str;
  110. }
  111. CSize CXTPPropertyGridItemSize::StringToSize(LPCTSTR str)
  112. {
  113. CString strWidth, strHeight;
  114. AfxExtractSubString(strWidth, str, 0, ';');
  115. AfxExtractSubString(strHeight, str, 1, ';');
  116. return CSize(_ttoi(strWidth), _ttoi(strHeight));
  117. }
  118. void CXTPPropertyGridItemSize::SetValue(CString strValue)
  119. {
  120. SetSize(StringToSize(strValue));
  121. }
  122. void CXTPPropertyGridItemSize::SetSize(CSize size)
  123. {
  124. m_szValue = size;
  125. if (m_pBindSize)
  126. {
  127. *m_pBindSize = m_szValue;
  128. }
  129. CXTPPropertyGridItem::SetValue(SizeToString(m_szValue));
  130. UpdateChilds();
  131. }
  132. void CXTPPropertyGridItemSize::BindToSize(CSize* pBindSize)
  133. {
  134. m_pBindSize = pBindSize;
  135. if (m_pBindSize)
  136. {
  137. *m_pBindSize = m_szValue;
  138. }
  139. }
  140. void CXTPPropertyGridItemSize::OnBeforeInsert()
  141. {
  142. if (m_pBindSize && *m_pBindSize != m_szValue)
  143. {
  144. SetSize(*m_pBindSize);
  145. }
  146. }
  147. void CXTPPropertyGridItemSize::UpdateChilds()
  148. {
  149. m_pItemWidth->SetNumber(m_szValue.cx);
  150. m_pItemHeight->SetNumber(m_szValue.cy);
  151. }
  152. void CXTPPropertyGridItemSize::SetWidth(LPCTSTR strWidth)
  153. {
  154. OnValueChanged(SizeToString(CSize(_ttoi(strWidth), m_szValue.cy)));
  155. }
  156. void CXTPPropertyGridItemSize::SetHeight(LPCTSTR strHeight)
  157. {
  158. OnValueChanged(SizeToString(CSize(m_szValue.cx, _ttoi(strHeight))));
  159. }