XFloorPropertiesWnd.cpp
上传用户:yangzi5763
上传日期:2007-01-02
资源大小:239k
文件大小:6k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 10/14/98 10:22:23 AM
  5.   Comments: XFloorPropertiesWnd.cpp: implementation of the CXFloorPropertiesWnd class.
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "XPropertiesWnd.h"
  9. #include "XFloorPropertiesWnd.h"
  10. #include "PageTreeCtrl.h"
  11. #include "XPropertiesWndCtl.h"
  12. #ifdef _DEBUG
  13. #undef THIS_FILE
  14. static char THIS_FILE[]=__FILE__;
  15. #define new DEBUG_NEW
  16. #endif
  17. ///////////////////////////////////////////////////////////////////////
  18. // Construction/Destruction
  19. //////////////////////////////////////////////////////////////////////
  20. BEGIN_MESSAGE_MAP(CXFloorPropertiesWnd, CXFloorWnd)
  21. //{{AFX_MSG_MAP(CXFloorPropertiesWnd)
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. // Function name : CXFloorPropertiesWnd::CXFloorPropertiesWnd
  25. // Description     : default constuctor
  26. // Return type : 
  27. CXFloorPropertiesWnd::CXFloorPropertiesWnd(/*CXPropertiesWndCtrl* pControlWnd*/)
  28. {
  29. }
  30. // Function name : CXFloorPropertiesWnd::~CXFloorPropertiesWnd
  31. // Description     : virtual destructor
  32. // Return type : 
  33. CXFloorPropertiesWnd::~CXFloorPropertiesWnd()
  34. {
  35. OnDestructor();
  36. }
  37. // Function name : CXFloorPropertiesWnd::AddPage
  38. // Description     : Add a new page, will insert a CPageListCtrl
  39. // Return type : short 
  40. // Argument         : LPCTSTR sName
  41. short CXFloorPropertiesWnd::AddPage(LPCTSTR sName, CXPropertiesWndCtrl* pControl, LPCTSTR lpszOptions)
  42. {
  43. short nResult = CXFloorWnd::AddPage(sName);
  44. if (nResult >= 0)
  45. {
  46. CString sOptions(lpszOptions);
  47. if (CPageListCtrl* pPageListCtrl = NewPageListCtrl(nResult, pControl, sOptions.Find(_T("[Group]")) >= 0))
  48. {
  49. RefreshPages();
  50. AttachWindow(nResult, (long)pPageListCtrl);
  51. pPageListCtrl->SetIndexPage(m_arPagesListCtrl.Add(pPageListCtrl));
  52. Init();
  53. }
  54. }
  55. return nResult;
  56. }
  57. // Function name : CXFloorPropertiesWnd::DeletePage
  58. // Description     : When Delete a page delete the attached CPageListCtrl
  59. // Return type : BOOL 
  60. // Argument         : short nIndex
  61. BOOL CXFloorPropertiesWnd::DeletePage(short nIndex)
  62. {
  63. BOOL bResult = CXFloorWnd::DeletePage(nIndex);
  64. if (bResult)
  65. if (nIndex < m_arPagesListCtrl.GetSize())
  66. {
  67. delete m_arPagesListCtrl[nIndex];
  68. m_arPagesListCtrl.RemoveAt(nIndex);
  69. RefreshPages();
  70. }
  71. return bResult;
  72. }
  73. // Function name : CXFloorPropertiesWnd::NewPageListCtrl
  74. // Description     : 
  75. // Return type : CPageListCtrl* 
  76. CPageListCtrl* CXFloorPropertiesWnd::NewPageListCtrl(int nIndex, CXPropertiesWndCtrl* pControl, BOOL bGroup)
  77. {
  78. ASSERT (pControl != NULL);
  79. CPageListCtrl* pPageListCtrl = !bGroup ? new CPageListCtrl(pControl) : new CPageTreeCtrl(pControl);
  80. pPageListCtrl->OnNew(this, nIndex + _nIDFirstListView);
  81. return pPageListCtrl;
  82. }
  83. // Function name : CXFloorPropertiesWnd::GetListCtrl
  84. // Description     : GetListControl
  85. // Return type : CPageListCtrl* 
  86. // Argument         : int nIndex
  87. CPageListCtrl* CXFloorPropertiesWnd::GetListCtrl(int nIndex)
  88. {
  89. if ((nIndex >= 0) && (nIndex < m_arPagesListCtrl.GetSize()))
  90. return m_arPagesListCtrl[nIndex];
  91. return NULL;
  92. }
  93. // Function name : CXFloorPropertiesWnd::IsGroup
  94. // Description     : 
  95. // Return type : BOOL 
  96. // Argument         : int i
  97. BOOL CXFloorPropertiesWnd::IsGroup(int i)
  98. {
  99. if (CPageListCtrl* pPage = GetListCtrl(i))
  100. return pPage->IsGroup();
  101. return FALSE;
  102. }
  103. // Function name : CXFloorPropertiesWnd::OnReset
  104. // Description     : Remove all
  105. // Return type : void 
  106. void CXFloorPropertiesWnd::OnReset()
  107. {
  108. ((CXPropertiesWndCtrl*)GetParent())->KillAllControls();
  109. while (DeletePage(0));
  110. // Change the style to new one...
  111. StyleAs(m_bAsFloor);
  112. }
  113. // Function name : CXFloorPropertiesWnd::OnDestructor
  114. // Description     : 
  115. // Return type : void 
  116. void CXFloorPropertiesWnd::OnDestructor()
  117. {
  118. for (int i = 0; i < m_arPagesListCtrl.GetSize(); i++)
  119. delete m_arPagesListCtrl[i];
  120. m_arPagesListCtrl.RemoveAll();
  121. }
  122. // Function name : CXFloorPropertiesWndDesign::Load
  123. // Description     : Fill this control with stream string
  124. // Return type : void 
  125. void CXFloorPropertiesWnd::Load(CString& stream, CXPropertiesWndCtrl* pControl)
  126. {
  127. if (GetControlUnknown())
  128. {
  129. CWnd* pWnd = (CWnd*)pControl;
  130. OnReset();
  131. if (!stream.IsEmpty())
  132. {
  133. BOOL bName = TRUE;
  134. CString sPage, sName, sOptions;
  135. int nNewPage = -1;
  136. for (int i = 0, nBracket = 0; ; i++)
  137. {
  138. CString sLine;
  139. AfxExtractSubString(sLine, stream, i, _cPagesSeparator);
  140. if (sLine.IsEmpty())
  141. break;
  142. if (sLine == _T("{"))
  143. {
  144. nBracket++;
  145. if (!sName.IsEmpty())
  146. if (nBracket == 1)
  147. nNewPage = AddPage(sName, pControl, sOptions);
  148. }
  149. else
  150. if (sLine == _T("}"))
  151. {
  152. nBracket--;
  153. if (nBracket == 0)
  154. if (nNewPage >= 0)
  155. GetListCtrl(nNewPage)->Load(sPage);
  156. nBracket = max(0,nBracket);
  157. // Reset the values
  158. sPage.Empty();
  159. bName = TRUE;
  160. sOptions.Empty();
  161. }
  162. else
  163. switch (nBracket)
  164. {
  165. case 0:
  166. {
  167. if (bName)
  168. {
  169. sName = sLine;
  170. bName = FALSE; // fill the sOptions
  171. }
  172. else
  173. sOptions += sLine;
  174. break;
  175. }
  176. case 1:
  177. {
  178. sPage += sLine + CString(_cPagesSeparator);
  179. }
  180. }
  181. }
  182. }
  183. }
  184. }
  185. // Function name : CXFloorPropertiesWnd::SetAutoResizingColumns
  186. // Description     : Set TRUE or FALSE for resizing listctrl
  187. // Return type : void 
  188. // Argument         : BOOL bValue
  189. void CXFloorPropertiesWnd::SetAutoResizingColumns(BOOL bValue)
  190. {
  191. CPageListCtrl::m_bAutoResizingColumns = bValue;
  192. }
  193. // Function name : CXFloorPropertiesWnd::SetSignEnableDisable
  194. // Description     : Set or not 
  195. // Return type : void 
  196. // Argument         : BOOL bValue
  197. void CXFloorPropertiesWnd::SetSignEnableDisable(BOOL bValue)
  198. {
  199. m_bSignEnableDisable = bValue;
  200. }
  201. // Function name : CXFloorPropertiesWnd::GetSignEnableDisable
  202. // Description     : 
  203. // Return type : const BOOL 
  204. const BOOL CXFloorPropertiesWnd::GetSignEnableDisable()
  205. {
  206. return m_bSignEnableDisable;
  207. }
  208. // Function name : CXFloorPropertiesWnd::RefreshPages
  209. // Description     : 
  210. // Return type : void 
  211. void CXFloorPropertiesWnd::RefreshPages()
  212. {
  213. if (!m_bFirstPageHasCaption)
  214. if (long cPages = GetPagesCount())
  215. SetHeight(0, cPages == 1 ? 0 : 20);
  216. }