Source code of Windows XP (NT5)
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.

374 lines
8.8 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 1996-1999 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // NodeProp.cpp
  7. //
  8. // Abstract:
  9. // Implementation of the node property sheet and pages.
  10. //
  11. // Author:
  12. // David Potter (davidp) May 17, 1996
  13. //
  14. // Revision History:
  15. //
  16. // Notes:
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "NodeProp.h"
  21. #include "Node.h"
  22. #include "HelpData.h" // for g_rghelpmapNodeGeneral
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CNodePropSheet
  30. /////////////////////////////////////////////////////////////////////////////
  31. IMPLEMENT_DYNAMIC(CNodePropSheet, CBasePropertySheet)
  32. /////////////////////////////////////////////////////////////////////////////
  33. // Message Maps
  34. BEGIN_MESSAGE_MAP(CNodePropSheet, CBasePropertySheet)
  35. //{{AFX_MSG_MAP(CNodePropSheet)
  36. // NOTE - the ClassWizard will add and remove mapping macros here.
  37. //}}AFX_MSG_MAP
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. //++
  41. //
  42. // CNodePropSheet::CNodePropSheet
  43. //
  44. // Routine Description:
  45. // Constructor.
  46. //
  47. // Arguments:
  48. // pci [IN OUT] Cluster item whose properties are to be displayed.
  49. // pParentWnd [IN OUT] Parent window for this property sheet.
  50. // iSelectPage [IN] Page to show first.
  51. //
  52. // Return Value:
  53. // None.
  54. //
  55. //--
  56. /////////////////////////////////////////////////////////////////////////////
  57. CNodePropSheet::CNodePropSheet(
  58. IN OUT CWnd * pParentWnd,
  59. IN UINT iSelectPage
  60. )
  61. : CBasePropertySheet(pParentWnd, iSelectPage)
  62. {
  63. m_rgpages[0] = &PageGeneral();
  64. } //*** CNodePropSheet::CNodePropSheet()
  65. /////////////////////////////////////////////////////////////////////////////
  66. //++
  67. //
  68. // CNodePropSheet::BInit
  69. //
  70. // Routine Description:
  71. // Initialize the property sheet.
  72. //
  73. // Arguments:
  74. // pci [IN OUT] Cluster item whose properties are to be displayed.
  75. // iimgIcon [IN] Index in the large image list for the image to use
  76. // as the icon on each page.
  77. //
  78. // Return Value:
  79. // TRUE Property sheet initialized successfully.
  80. // FALSE Error initializing property sheet.
  81. //
  82. //--
  83. /////////////////////////////////////////////////////////////////////////////
  84. BOOL CNodePropSheet::BInit(
  85. IN OUT CClusterItem * pci,
  86. IN IIMG iimgIcon
  87. )
  88. {
  89. // Call the base class method.
  90. if (!CBasePropertySheet::BInit(pci, iimgIcon))
  91. return FALSE;
  92. // Set the read-only flag.
  93. m_bReadOnly = PciNode()->BReadOnly()
  94. || (PciNode()->Cns() == ClusterNodeStateUnknown);
  95. return TRUE;
  96. } //*** CNodePropSheet::BInit()
  97. /////////////////////////////////////////////////////////////////////////////
  98. //++
  99. //
  100. // CNodePropSheet::~CNodePropSheet
  101. //
  102. // Routine Description:
  103. // Destructor.
  104. //
  105. // Arguments:
  106. // None.
  107. //
  108. // Return Value:
  109. // None.
  110. //
  111. //--
  112. /////////////////////////////////////////////////////////////////////////////
  113. CNodePropSheet::~CNodePropSheet(void)
  114. {
  115. } //*** CNodePropSheet::~CNodePropSheet()
  116. /////////////////////////////////////////////////////////////////////////////
  117. //++
  118. //
  119. // CNodePropSheet::Ppages
  120. //
  121. // Routine Description:
  122. // Returns the array of pages to add to the property sheet.
  123. //
  124. // Arguments:
  125. // None.
  126. //
  127. // Return Value:
  128. // Page array.
  129. //
  130. //--
  131. /////////////////////////////////////////////////////////////////////////////
  132. CBasePropertyPage ** CNodePropSheet::Ppages(void)
  133. {
  134. return m_rgpages;
  135. } //*** CNodePropSheet::Ppages()
  136. /////////////////////////////////////////////////////////////////////////////
  137. //++
  138. //
  139. // CNodePropSheet::Cpages
  140. //
  141. // Routine Description:
  142. // Returns the count of pages in the array.
  143. //
  144. // Arguments:
  145. // None.
  146. //
  147. // Return Value:
  148. // Count of pages in the array.
  149. //
  150. //--
  151. /////////////////////////////////////////////////////////////////////////////
  152. int CNodePropSheet::Cpages(void)
  153. {
  154. return sizeof(m_rgpages) / sizeof(CBasePropertyPage *);
  155. } //*** CNodePropSheet::Cpages()
  156. //*************************************************************************//
  157. /////////////////////////////////////////////////////////////////////////////
  158. // CNodeGeneralPage property page
  159. /////////////////////////////////////////////////////////////////////////////
  160. IMPLEMENT_DYNCREATE(CNodeGeneralPage, CBasePropertyPage)
  161. /////////////////////////////////////////////////////////////////////////////
  162. // Message Maps
  163. /////////////////////////////////////////////////////////////////////////////
  164. BEGIN_MESSAGE_MAP(CNodeGeneralPage, CBasePropertyPage)
  165. //{{AFX_MSG_MAP(CNodeGeneralPage)
  166. //}}AFX_MSG_MAP
  167. ON_EN_CHANGE(IDC_PP_NODE_DESC, CBasePropertyPage::OnChangeCtrl)
  168. END_MESSAGE_MAP()
  169. /////////////////////////////////////////////////////////////////////////////
  170. //++
  171. //
  172. // CNodeGeneralPage::CNodeGeneralPage
  173. //
  174. // Routine Description:
  175. // Constructor.
  176. //
  177. // Arguments:
  178. // None.
  179. //
  180. // Return Value:
  181. // None.
  182. //
  183. //--
  184. /////////////////////////////////////////////////////////////////////////////
  185. CNodeGeneralPage::CNodeGeneralPage(void)
  186. : CBasePropertyPage(IDD, g_aHelpIDs_IDD_PP_NODE_GENERAL)
  187. {
  188. //{{AFX_DATA_INIT(CNodeGeneralPage)
  189. m_strName = _T("");
  190. m_strDesc = _T("");
  191. m_strState = _T("");
  192. //}}AFX_DATA_INIT
  193. } //*** CNodeGeneralPage::CNodeGeneralPage()
  194. /////////////////////////////////////////////////////////////////////////////
  195. //++
  196. //
  197. // CNodeGeneralPage::BInit
  198. //
  199. // Routine Description:
  200. // Initialize the page.
  201. //
  202. // Arguments:
  203. // psht [IN OUT] Property sheet to which this page belongs.
  204. //
  205. // Return Value:
  206. // TRUE Page initialized successfully.
  207. // FALSE Page failed to initialize.
  208. //
  209. //--
  210. /////////////////////////////////////////////////////////////////////////////
  211. BOOL CNodeGeneralPage::BInit(IN OUT CBaseSheet * psht)
  212. {
  213. BOOL bSuccess;
  214. ASSERT_KINDOF(CNodePropSheet, psht);
  215. bSuccess = CBasePropertyPage::BInit(psht);
  216. if (bSuccess)
  217. {
  218. try
  219. {
  220. m_strName = PciNode()->StrName();
  221. m_strDesc = PciNode()->StrDescription();
  222. m_strVersion.Format(
  223. IDS_VERSION_NUMBER_FORMAT,
  224. PciNode()->NMajorVersion(),
  225. PciNode()->NMinorVersion(),
  226. PciNode()->NBuildNumber(),
  227. 0
  228. );
  229. m_strCSDVersion = PciNode()->StrCSDVersion();
  230. PciNode()->GetStateName(m_strState);
  231. } // try
  232. catch (CException * pe)
  233. {
  234. pe->ReportError();
  235. pe->Delete();
  236. bSuccess = FALSE;
  237. } // catch: CException
  238. } // if: base class method was successful
  239. return bSuccess;
  240. } //*** CNodeGeneralPage::BInit()
  241. /////////////////////////////////////////////////////////////////////////////
  242. //++
  243. //
  244. // CNodeGeneralPage::DoDataExchange
  245. //
  246. // Routine Description:
  247. // Do data exchange between the dialog and the class.
  248. //
  249. // Arguments:
  250. // pDX [IN OUT] Data exchange object
  251. //
  252. // Return Value:
  253. // None.
  254. //
  255. //--
  256. /////////////////////////////////////////////////////////////////////////////
  257. void CNodeGeneralPage::DoDataExchange(CDataExchange * pDX)
  258. {
  259. CBasePropertyPage::DoDataExchange(pDX);
  260. //{{AFX_DATA_MAP(CNodeGeneralPage)
  261. DDX_Control(pDX, IDC_PP_NODE_DESC, m_editDesc);
  262. DDX_Control(pDX, IDC_PP_NODE_NAME, m_editName);
  263. DDX_Text(pDX, IDC_PP_NODE_NAME, m_strName);
  264. DDX_Text(pDX, IDC_PP_NODE_DESC, m_strDesc);
  265. DDX_Text(pDX, IDC_PP_NODE_CURRENT_STATE, m_strState);
  266. DDX_Text(pDX, IDC_PP_NODE_VERSION, m_strVersion);
  267. DDX_Text(pDX, IDC_PP_NODE_CSD_VERSION, m_strCSDVersion);
  268. //}}AFX_DATA_MAP
  269. } //*** CNodeGeneralPage::DoDataExchange()
  270. /////////////////////////////////////////////////////////////////////////////
  271. //++
  272. //
  273. // CNodeGeneralPage::OnInitDialog
  274. //
  275. // Routine Description:
  276. // Handler for the WM_INITDIALOG message.
  277. //
  278. // Arguments:
  279. // None.
  280. //
  281. // Return Value:
  282. // TRUE Focus needs to be set.
  283. // FALSE Focus already set.
  284. //
  285. //--
  286. /////////////////////////////////////////////////////////////////////////////
  287. BOOL CNodeGeneralPage::OnInitDialog(void)
  288. {
  289. CBasePropertyPage::OnInitDialog();
  290. m_editName.SetReadOnly(TRUE);
  291. // If read-only, set all controls to be either disabled or read-only.
  292. if (BReadOnly())
  293. {
  294. m_editDesc.SetReadOnly(TRUE);
  295. } // if: sheet is read-only
  296. return TRUE; // return TRUE unless you set the focus to a control
  297. // EXCEPTION: OCX Property Pages should return FALSE
  298. } //*** CNodeGeneralPage::OnInitDialog()
  299. /////////////////////////////////////////////////////////////////////////////
  300. //++
  301. //
  302. // CNodeGeneralPage::OnApply
  303. //
  304. // Routine Description:
  305. // Handler for when the Apply button is pressed.
  306. //
  307. // Arguments:
  308. // None.
  309. //
  310. // Return Value:
  311. // TRUE Page successfully applied.
  312. // FALSE Error applying page.
  313. //
  314. //--
  315. /////////////////////////////////////////////////////////////////////////////
  316. BOOL CNodeGeneralPage::OnApply(void)
  317. {
  318. // Set the data from the page in the cluster item.
  319. try
  320. {
  321. CWaitCursor wc;
  322. PciNode()->SetDescription(m_strDesc);
  323. } // try
  324. catch (CException * pe)
  325. {
  326. pe->ReportError();
  327. pe->Delete();
  328. return FALSE;
  329. } // catch: CException
  330. return CBasePropertyPage::OnApply();
  331. } //*** CNodeGeneralPage::OnApply()