Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

430 lines
12 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 1996-2000 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // LCPrWPag.cpp
  7. //
  8. // Abstract:
  9. // Implementation of the CListCtrlPairWizPage dialog template class.
  10. //
  11. // Author:
  12. // David Potter (davidp) August 31, 1996
  13. //
  14. // Revision History:
  15. //
  16. // Notes:
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "LCPrWPag.h"
  21. #include "OLCPair.h"
  22. #include "HelpData.h" // for g_rghelpmap*
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CListCtrlPairWizPage
  30. /////////////////////////////////////////////////////////////////////////////
  31. IMPLEMENT_DYNCREATE(CListCtrlPairWizPage, CBaseWizardPage)
  32. /////////////////////////////////////////////////////////////////////////////
  33. // Message Maps
  34. BEGIN_MESSAGE_MAP(CListCtrlPairWizPage, CBaseWizardPage)
  35. //{{AFX_MSG_MAP(CListCtrlPairWizPage)
  36. ON_WM_CONTEXTMENU()
  37. //}}AFX_MSG_MAP
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. //++
  41. //
  42. // CListCtrlPairWizPage::CListCtrlPairWizPage
  43. //
  44. // Routine Description:
  45. // Constructor.
  46. //
  47. // Arguments:
  48. // None.
  49. //
  50. // Return Value:
  51. // None.
  52. //
  53. //--
  54. /////////////////////////////////////////////////////////////////////////////
  55. CListCtrlPairWizPage::CListCtrlPairWizPage(void)
  56. {
  57. m_plpobjRight = NULL;
  58. m_plpobjLeft = NULL;
  59. m_dwStyle = 0;
  60. m_pfnGetColumn = NULL;
  61. m_plcp = NULL;
  62. } //*** CListCtrlPairWizPage::CListCtrlPairWizPage()
  63. /////////////////////////////////////////////////////////////////////////////
  64. //++
  65. //
  66. // CListCtrlPairWizPage::CListCtrlPairWizPage
  67. //
  68. // Routine Description:
  69. // Constructor.
  70. //
  71. // Arguments:
  72. // idd [IN] Resource ID for the dialog template.
  73. // pdwHelpMap [IN] Control-to-Help ID mapping array.
  74. // dwStyle [IN] Style:
  75. // LCPS_SHOW_IMAGES Show images to left of items.
  76. // LCPS_ALLOW_EMPTY Allow right list to be empty.
  77. // LCPS_ORDERED Ordered right list.
  78. // LCPS_CAN_BE_ORDERED List can be ordered (hides
  79. // Up/Down puttons if LCPS_ORDERED not specified).
  80. // pfnGetColumn [IN] Function pointer for getting column data.
  81. // pfnDisplayProps [IN] Function pointer for displaying properties.
  82. //
  83. // Return Value:
  84. // None.
  85. //
  86. //--
  87. /////////////////////////////////////////////////////////////////////////////
  88. CListCtrlPairWizPage::CListCtrlPairWizPage(
  89. IN UINT idd,
  90. IN const DWORD * pdwHelpMap,
  91. IN DWORD dwStyle,
  92. IN PFNLCPGETCOLUMN pfnGetColumn,
  93. IN PFNLCPDISPPROPS pfnDisplayProps
  94. )
  95. : CBaseWizardPage(idd, pdwHelpMap)
  96. {
  97. ASSERT(pfnGetColumn != NULL);
  98. ASSERT(pfnDisplayProps != NULL);
  99. m_plpobjRight = NULL;
  100. m_plpobjLeft = NULL;
  101. m_dwStyle = dwStyle;
  102. m_pfnGetColumn = pfnGetColumn;
  103. m_pfnDisplayProps = pfnDisplayProps;
  104. m_plcp = NULL;
  105. if (dwStyle & LCPS_ORDERED)
  106. ASSERT(m_dwStyle & LCPS_CAN_BE_ORDERED);
  107. } //*** CListCtrlPairWizPage::CListCtrlPairWizPage()
  108. /////////////////////////////////////////////////////////////////////////////
  109. //++
  110. //
  111. // CListCtrlPairWizPage::~CListCtrlPairWizPage
  112. //
  113. // Routine Description:
  114. // Destructor.
  115. //
  116. // Arguments:
  117. // None.
  118. //
  119. // Return Value:
  120. // None.
  121. //
  122. //--
  123. /////////////////////////////////////////////////////////////////////////////
  124. CListCtrlPairWizPage::~CListCtrlPairWizPage(void)
  125. {
  126. delete m_plcp;
  127. } //*** CListCtrlPairWizPage::~CListCtrlPairWizPage()
  128. /////////////////////////////////////////////////////////////////////////////
  129. //++
  130. //
  131. // CListCtrlPair::NAddColumn
  132. //
  133. // Routine Description:
  134. // Add a column to the list of columns displayed in each list control.
  135. //
  136. // Arguments:
  137. // idsText [IN] String resource ID for text to display on column.
  138. // nWidth [IN] Initial width of the column.
  139. //
  140. // Return Value:
  141. // icol Index of the column.
  142. //
  143. // Exceptions Thrown:
  144. // Any exceptions thrown by CArray::Add.
  145. //--
  146. /////////////////////////////////////////////////////////////////////////////
  147. int CListCtrlPairWizPage::NAddColumn(IN IDS idsText, IN int nWidth)
  148. {
  149. CListCtrlPair::CColumn col;
  150. ASSERT(idsText != 0);
  151. ASSERT(nWidth > 0);
  152. ASSERT(Plcp() == NULL);
  153. col.m_idsText = idsText;
  154. col.m_nWidth = nWidth;
  155. return (int)m_aColumns.Add(col);
  156. } //*** CListCtrlPair::NAddColumn()
  157. /////////////////////////////////////////////////////////////////////////////
  158. //++
  159. //
  160. // CListCtrlPairWizPage::DoDataExchange
  161. //
  162. // Routine Description:
  163. // Do data exchange between the dialog and the class.
  164. //
  165. // Arguments:
  166. // pDX [IN OUT] Data exchange object
  167. //
  168. // Return Value:
  169. // None.
  170. //
  171. //--
  172. /////////////////////////////////////////////////////////////////////////////
  173. void CListCtrlPairWizPage::DoDataExchange(CDataExchange * pDX)
  174. {
  175. CBaseWizardPage::DoDataExchange(pDX);
  176. Plcp()->DoDataExchange(pDX);
  177. //{{AFX_DATA_MAP(CListCtrlPairDlg)
  178. //}}AFX_DATA_MAP
  179. } //*** CListCtrlPairWizPage::DoDataExchange()
  180. /////////////////////////////////////////////////////////////////////////////
  181. //++
  182. //
  183. // CListCtrlPairWizPage::OnInitDialog
  184. //
  185. // Routine Description:
  186. // Handler for the WM_INITDIALOG message.
  187. //
  188. // Arguments:
  189. // None.
  190. //
  191. // Return Value:
  192. // TRUE Focus needs to be set.
  193. // FALSE Focus already set.
  194. //
  195. //--
  196. /////////////////////////////////////////////////////////////////////////////
  197. BOOL CListCtrlPairWizPage::OnInitDialog( void )
  198. {
  199. if ( BReadOnly() )
  200. {
  201. m_dwStyle |= LCPS_READ_ONLY;
  202. } // if: page is read only
  203. // Initialize the ListCtrlPair control.
  204. if ( BCanBeOrdered() )
  205. {
  206. m_plcp = new COrderedListCtrlPair(
  207. this,
  208. m_plpobjRight,
  209. m_plpobjLeft,
  210. m_dwStyle,
  211. m_pfnGetColumn,
  212. m_pfnDisplayProps
  213. );
  214. } // if: list can be ordered
  215. else
  216. {
  217. m_plcp = new CListCtrlPair(
  218. this,
  219. m_plpobjRight,
  220. m_plpobjLeft,
  221. m_dwStyle,
  222. m_pfnGetColumn,
  223. m_pfnDisplayProps
  224. );
  225. } // else: list cannot be ordered
  226. if ( m_plcp == NULL )
  227. {
  228. AfxThrowMemoryException();
  229. } // if: error allocating memory
  230. // Add columns if there are any.
  231. {
  232. int icol;
  233. for ( icol = 0 ; icol <= m_aColumns.GetUpperBound() ; icol++ )
  234. {
  235. Plcp()->NAddColumn( m_aColumns[ icol ].m_idsText, m_aColumns[ icol ].m_nWidth );
  236. } // for: each column
  237. } // Add columns if there are any
  238. CBaseWizardPage::OnInitDialog();
  239. Plcp()->OnInitDialog();
  240. return TRUE; // return TRUE unless you set the focus to a control
  241. // EXCEPTION: OCX Property Pages should return FALSE
  242. } //*** CListCtrlPairWizPage::OnInitDialog()
  243. /////////////////////////////////////////////////////////////////////////////
  244. //++
  245. //
  246. // CListCtrlPairWizPage::OnSetActive
  247. //
  248. // Routine Description:
  249. // Handler for the PSN_SETACTIVE message.
  250. //
  251. // Arguments:
  252. // None.
  253. //
  254. // Return Value:
  255. // TRUE Page successfully initialized.
  256. // FALSE Page not initialized.
  257. //
  258. //--
  259. /////////////////////////////////////////////////////////////////////////////
  260. BOOL CListCtrlPairWizPage::OnSetActive(void)
  261. {
  262. BOOL bSuccess;
  263. bSuccess = CBaseWizardPage::OnSetActive();
  264. if (bSuccess)
  265. bSuccess = Plcp()->OnSetActive();
  266. return bSuccess;
  267. } //*** CListCtrlPairWizPage::OnSetActive()
  268. /////////////////////////////////////////////////////////////////////////////
  269. //++
  270. //
  271. // CListCtrlPairWizPage::OnCmdMsg
  272. //
  273. // Routine Description:
  274. // Processes command messages. Attempts to pass them on to a selected
  275. // item first.
  276. //
  277. // Arguments:
  278. // nID [IN] Command ID.
  279. // nCode [IN] Notification code.
  280. // pExtra [IN OUT] Used according to the value of nCode.
  281. // pHandlerInfo [OUT] ???
  282. //
  283. // Return Value:
  284. // TRUE Message has been handled.
  285. // FALSE Message has NOT been handled.
  286. //
  287. //--
  288. /////////////////////////////////////////////////////////////////////////////
  289. BOOL CListCtrlPairWizPage::OnCmdMsg(
  290. UINT nID,
  291. int nCode,
  292. void * pExtra,
  293. AFX_CMDHANDLERINFO * pHandlerInfo
  294. )
  295. {
  296. BOOL bHandled;
  297. ASSERT(Plcp() != NULL);
  298. bHandled = Plcp()->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  299. if (!bHandled)
  300. bHandled = CBaseWizardPage::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  301. return bHandled;
  302. } //*** CListCtrlPairWizPage::OnCmdMsg()
  303. /////////////////////////////////////////////////////////////////////////////
  304. //++
  305. //
  306. // CListCtrlPairWizPage::OnContextMenu
  307. //
  308. // Routine Description:
  309. // Handler for the WM_CONTEXTMENU method.
  310. //
  311. // Arguments:
  312. // pWnd Window in which the user right clicked the mouse.
  313. // point Position of the cursor, in screen coordinates.
  314. //
  315. // Return Value:
  316. // None.
  317. //
  318. //--
  319. /////////////////////////////////////////////////////////////////////////////
  320. void CListCtrlPairWizPage::OnContextMenu(CWnd * pWnd, CPoint point)
  321. {
  322. ASSERT(Plcp() != NULL);
  323. if (!Plcp()->OnContextMenu(pWnd, point))
  324. CBaseWizardPage::OnContextMenu(pWnd, point);
  325. } //*** CListCtrlPairWizPage::OnContextMenu()
  326. /////////////////////////////////////////////////////////////////////////////
  327. //++
  328. //
  329. // CListCtrlPairWizPage::SetLists
  330. //
  331. // Routine Description:
  332. // Set the lists for the list control pair.
  333. //
  334. // Arguments:
  335. // plpobjRight [IN OUT] List for the right list box.
  336. // plpobjLeft [IN] List for the left list box.
  337. //
  338. // Return Value:
  339. // None.
  340. //
  341. //--
  342. /////////////////////////////////////////////////////////////////////////////
  343. void CListCtrlPairWizPage::SetLists(
  344. IN OUT CClusterItemList * plpobjRight,
  345. IN const CClusterItemList * plpobjLeft
  346. )
  347. {
  348. if (plpobjRight != NULL)
  349. m_plpobjRight = plpobjRight;
  350. if (plpobjLeft != NULL)
  351. m_plpobjLeft = plpobjLeft;
  352. if (Plcp() != NULL)
  353. Plcp()->SetLists(plpobjRight, plpobjLeft);
  354. } //*** CListCtrlPairWizPage::SetLists()
  355. /////////////////////////////////////////////////////////////////////////////
  356. //++
  357. //
  358. // CListCtrlPairWizPage::SetLists
  359. //
  360. // Routine Description:
  361. // Set the lists for the list control pair where the right list should
  362. // not be modified.
  363. //
  364. // Arguments:
  365. // plpobjRight [IN] List for the right list box.
  366. // plpobjLeft [IN] List for the left list box.
  367. //
  368. // Return Value:
  369. // None.
  370. //
  371. //--
  372. /////////////////////////////////////////////////////////////////////////////
  373. void CListCtrlPairWizPage::SetLists(
  374. IN const CClusterItemList * plpobjRight,
  375. IN const CClusterItemList * plpobjLeft
  376. )
  377. {
  378. if (plpobjRight != NULL)
  379. m_plpobjRight = (CClusterItemList *) plpobjRight;
  380. if (plpobjLeft != NULL)
  381. m_plpobjLeft = plpobjLeft;
  382. m_dwStyle |= LCPS_DONT_OUTPUT_RIGHT_LIST;
  383. if (Plcp() != NULL)
  384. Plcp()->SetLists(plpobjRight, plpobjLeft);
  385. } //*** CListCtrlPairWizPage::SetLists()