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.

375 lines
9.5 KiB

  1. // RootScopeItem.cpp: implementation of the CRootScopeItem class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Snapin.h"
  6. #include "RootScopeItem.h"
  7. #include "RootResultsView.h"
  8. #include "AllSystemsScopeItem.h"
  9. #include "configScopeItem.h"
  10. #include "ResultsPane.h"
  11. #include "HMGeneralPage.h"
  12. #include "HMHistoryPage.h"
  13. #include "SystemGroup.h"
  14. #include "HealthmonScopePane.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. IMPLEMENT_DYNCREATE(CRootScopeItem,CHMScopeItem)
  21. // {FB1B60EF-AFD4-11d2-BD6B-0000F87A3912}
  22. static GUID GUID_Root =
  23. { 0xfb1b60ef, 0xafd4, 0x11d2, { 0xbd, 0x6b, 0x0, 0x0, 0xf8, 0x7a, 0x39, 0x12 } };
  24. // icon table - associates state to icons
  25. static UINT _Icons[HMS_MAX_STATES] =
  26. {
  27. IDI_ICON_HEALTHMON,
  28. IDI_ICON_HEALTHMON_DISABLED,
  29. IDI_ICON_HEALTHMON_OUTAGE,
  30. IDI_ICON_HEALTHMON_UNKNOWN,
  31. IDI_ICON_HEALTHMON_NO_CONNECT,
  32. IDI_ICON_HEALTHMON_WARNING,
  33. IDI_ICON_HEALTHMON_CRITICAL
  34. };
  35. //////////////////////////////////////////////////////////////////////
  36. // Construction/Destruction
  37. //////////////////////////////////////////////////////////////////////
  38. CRootScopeItem::CRootScopeItem()
  39. {
  40. m_lpguidItemType = &GUID_Root;
  41. CString sName;
  42. sName.LoadString(IDS_STRING_ROOT_NODE);
  43. SetDisplayName(0,sName);
  44. }
  45. CRootScopeItem::~CRootScopeItem()
  46. {
  47. Destroy();
  48. }
  49. //////////////////////////////////////////////////////////////////////
  50. // Creation Members
  51. //////////////////////////////////////////////////////////////////////
  52. bool CRootScopeItem::Create(CScopePane* pScopePane, CScopePaneItem* pParentItem)
  53. {
  54. TRACEX(_T("CRootScopeItem::Create\n"));
  55. TRACEARGn(pScopePane);
  56. TRACEARGn(pParentItem);
  57. if( ! CHMScopeItem::Create(pScopePane,NULL) )
  58. {
  59. TRACE(_T("CHMScopeItem::Create failed.\n"));
  60. return false;
  61. }
  62. for( int i = 0; i < HMS_MAX_STATES; i++ )
  63. {
  64. UINT nId = _Icons[i];
  65. m_IconResIds.Add(nId);
  66. m_OpenIconResIds.Add(nId);
  67. }
  68. SetIconIndex(HMS_NORMAL);
  69. SetOpenIconIndex(HMS_NORMAL);
  70. return true;
  71. }
  72. //////////////////////////////////////////////////////////////////////
  73. // Results Pane View Members
  74. //////////////////////////////////////////////////////////////////////
  75. CResultsPaneView* CRootScopeItem::CreateResultsPaneView()
  76. {
  77. TRACE(_T("CRootScopeItem::CreateResultsPaneView\n"));
  78. return new CRootResultsView;
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // Messaging Members
  82. LRESULT CRootScopeItem::MsgProc(UINT msg, WPARAM wparam, LPARAM lparam)
  83. {
  84. TRACEX(_T("CRootScopeItem::MsgProc\n"));
  85. TRACEARGn(msg);
  86. TRACEARGn(wparam);
  87. TRACEARGn(lparam);
  88. if( msg == WM_SETTINGCHANGE )
  89. {
  90. CScopePane* pPane = GetScopePane();
  91. if( pPane && pPane->GetSelectedScopeItem() )
  92. {
  93. pPane->GetSelectedScopeItem()->SelectItem();
  94. }
  95. }
  96. return 0L;
  97. }
  98. //////////////////////////////////////////////////////////////////////
  99. // MMC Message Handlers
  100. //////////////////////////////////////////////////////////////////////
  101. HRESULT CRootScopeItem::OnAddMenuItems(LPCONTEXTMENUCALLBACK piCallback,long __RPC_FAR *pInsertionAllowed)
  102. {
  103. TRACEX(_T("CRootScopeItem::OnAddMenuItems\n"));
  104. TRACEARGn(piCallback);
  105. TRACEARGn(pInsertionAllowed);
  106. HRESULT hr = S_OK;
  107. // Add New Menu Items
  108. if( CCM_INSERTIONALLOWED_NEW & *pInsertionAllowed )
  109. {
  110. CONTEXTMENUITEM cmi;
  111. CString sResString;
  112. CString sResString2;
  113. sResString.LoadString(IDS_STRING_NEW_SYSTEMS_GROUP);
  114. cmi.strName = LPTSTR(LPCTSTR(sResString));
  115. sResString2.LoadString(IDS_STRING_NEW_SYSTEMS_GROUP_DESCRIPTION);
  116. cmi.strStatusBarText = LPTSTR(LPCTSTR(sResString2));
  117. cmi.lCommandID = IDM_NEW_GROUP;
  118. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_NEW;
  119. cmi.fFlags = 0;
  120. cmi.fSpecialFlags = 0;
  121. hr = piCallback->AddItem(&cmi);
  122. if( !SUCCEEDED(hr) )
  123. {
  124. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  125. return hr;
  126. }
  127. }
  128. // Add Task Menu Items
  129. if( CCM_INSERTIONALLOWED_TASK & *pInsertionAllowed )
  130. {
  131. CONTEXTMENUITEM cmi;
  132. CString sResString;
  133. CString sResString2;
  134. sResString.LoadString(IDS_STRING_CLEAR_EVENTS);
  135. cmi.strName = LPTSTR(LPCTSTR(sResString));
  136. sResString2.LoadString(IDS_STRING_CLEAR_EVENTS_DESCRIPTION);
  137. cmi.strStatusBarText = LPTSTR(LPCTSTR(sResString2));
  138. cmi.lCommandID = IDM_CLEAR_EVENTS;
  139. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TASK;
  140. cmi.fFlags = 0;
  141. cmi.fSpecialFlags = 0;
  142. hr = piCallback->AddItem(&cmi);
  143. if( !SUCCEEDED(hr) )
  144. {
  145. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  146. return hr;
  147. }
  148. sResString.LoadString(IDS_STRING_RESET_STATUS);
  149. cmi.strName = LPTSTR(LPCTSTR(sResString));
  150. sResString2.LoadString(IDS_STRING_RESET_STATUS_DESCRIPTION);
  151. cmi.strStatusBarText = LPTSTR(LPCTSTR(sResString2));
  152. cmi.lCommandID = IDM_RESET_STATUS;
  153. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TASK;
  154. cmi.fFlags = 0;
  155. cmi.fSpecialFlags = 0;
  156. hr = piCallback->AddItem(&cmi);
  157. if( !SUCCEEDED(hr) )
  158. {
  159. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  160. return hr;
  161. }
  162. // separator
  163. cmi.strName = NULL;
  164. cmi.strStatusBarText = NULL;
  165. cmi.lCommandID = NULL;
  166. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TASK;
  167. cmi.fFlags = MF_SEPARATOR;
  168. cmi.fSpecialFlags = 0;
  169. hr = piCallback->AddItem(&cmi);
  170. if( !SUCCEEDED(hr) )
  171. {
  172. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  173. return hr;
  174. }
  175. }
  176. // Add View Menu Items
  177. if( CCM_INSERTIONALLOWED_VIEW & *pInsertionAllowed )
  178. {
  179. CONTEXTMENUITEM cmi;
  180. CString sResString;
  181. CString sResString2;
  182. sResString.LoadString(IDS_STRING_STATUS_ONLY);
  183. cmi.strName = LPTSTR(LPCTSTR(sResString));
  184. sResString2.LoadString(IDS_STRING_STATUS_ONLY_DESCRIPTION);
  185. cmi.strStatusBarText = LPTSTR(LPCTSTR(sResString2));
  186. cmi.lCommandID = IDM_STATUS_ONLY;
  187. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_VIEW;
  188. cmi.fFlags = MF_UNCHECKED;
  189. cmi.fSpecialFlags = 0;
  190. hr = piCallback->AddItem(&cmi);
  191. if( !SUCCEEDED(hr) )
  192. {
  193. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  194. return hr;
  195. }
  196. sResString.LoadString(IDS_STRING_AUTO_FILTER);
  197. cmi.strName = LPTSTR(LPCTSTR(sResString));
  198. sResString2.LoadString(IDS_STRING_AUTO_FILTER_DESCRIPTION);
  199. cmi.strStatusBarText = LPTSTR(LPCTSTR(sResString2));
  200. cmi.lCommandID = IDM_AUTO_FILTER;
  201. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_VIEW;
  202. cmi.fFlags = MF_CHECKED;
  203. cmi.fSpecialFlags = 0;
  204. hr = piCallback->AddItem(&cmi);
  205. if( !SUCCEEDED(hr) )
  206. {
  207. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  208. return hr;
  209. }
  210. // icon legend
  211. sResString.LoadString(IDS_STRING_ICON_LEGEND);
  212. cmi.strName = LPTSTR(LPCTSTR(sResString));
  213. sResString2.LoadString(IDS_STRING_ICON_LEGEND_DESCRIPTION);
  214. cmi.strStatusBarText = LPTSTR(LPCTSTR(sResString2));
  215. cmi.lCommandID = IDM_ICON_LEGEND;
  216. cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_VIEW;
  217. cmi.fFlags = 0;
  218. cmi.fSpecialFlags = 0;
  219. hr = piCallback->AddItem(&cmi);
  220. if( !SUCCEEDED(hr) )
  221. {
  222. TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n"));
  223. return hr;
  224. }
  225. }
  226. return hr;
  227. }
  228. HRESULT CRootScopeItem::OnCommand(long lCommandID)
  229. {
  230. TRACEX(_T("CRootScopeItem::OnCommand\n"));
  231. TRACEARGn(lCommandID);
  232. HRESULT hr = S_OK;
  233. switch(lCommandID)
  234. {
  235. case IDM_NEW_GROUP:
  236. {
  237. CHealthmonScopePane* pPane = (CHealthmonScopePane*)GetScopePane();
  238. if( ! GfxCheckObjPtr(pPane,CHealthmonScopePane) )
  239. {
  240. TRACE(_T("FAILED : CGroupScopeItem::GetScopePane returns an invalid pointer.\n"));
  241. return E_FAIL;
  242. }
  243. CSystemGroup* pMSG = pPane->GetRootGroup();
  244. pMSG->CreateNewChildSystemGroup();
  245. }
  246. break;
  247. default:
  248. {
  249. hr = CHMScopeItem::OnCommand(lCommandID);
  250. }
  251. }
  252. return hr;
  253. }
  254. HRESULT CRootScopeItem::OnCreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider, INT_PTR handle)
  255. {
  256. TRACEX(_T("CRootScopeItem::OnCreatePropertyPages\n"));
  257. TRACEARGn(lpProvider);
  258. TRACEARGn(handle);
  259. if( m_pScopePane == NULL )
  260. {
  261. return S_FALSE;
  262. }
  263. if( ! GfxCheckObjPtr(m_pScopePane,CHealthmonScopePane) )
  264. {
  265. return E_FAIL;
  266. }
  267. CHealthmonScopePane* pHMScopePane = (CHealthmonScopePane*)m_pScopePane;
  268. HRESULT hr = S_OK;
  269. CHMGeneralPage* pPage1 = new CHMGeneralPage;
  270. pPage1->SetObjectPtr(pHMScopePane->GetRootGroup());
  271. HPROPSHEETPAGE hPage1 = CreatePropertySheetPage( reinterpret_cast<LPCPROPSHEETPAGE>(&pPage1->m_psp) );
  272. hr = lpProvider->AddPage(hPage1);
  273. /*
  274. CHMHistoryPage* pPage2 = new CHMHistoryPage;
  275. pPage2->SetObjectPtr(pHMScopePane->GetRootGroup());
  276. HPROPSHEETPAGE hPage2 = CreatePropertySheetPage( reinterpret_cast<LPCPROPSHEETPAGE>(&pPage2->m_psp) );
  277. hr = lpProvider->AddPage(hPage2);
  278. */
  279. return hr;
  280. }
  281. HRESULT CRootScopeItem::OnSelect(CResultsPane* pPane, BOOL bSelected)
  282. {
  283. TRACEX(_T("CRootScopeItem::OnSelect\n"));
  284. TRACEARGn(pPane);
  285. TRACEARGn(bSelected);
  286. if( ! CHECKHRESULT(CHMScopeItem::OnSelect(pPane,bSelected)) )
  287. {
  288. TRACE(_T("FAILED : CHMScopeItem::OnSelect returns failure.\n"));
  289. return E_FAIL;
  290. }
  291. if( ! bSelected ) // we are being de-selected so do not do anything
  292. {
  293. return S_OK;
  294. }
  295. LPCONSOLEVERB lpConsoleVerb = pPane->GetConsoleVerbPtr();
  296. HRESULT hr = lpConsoleVerb->SetVerbState( MMC_VERB_PROPERTIES, ENABLED, TRUE );
  297. if( ! CHECKHRESULT(hr) )
  298. {
  299. TRACE(_T("FAILED : IConsoleVerb::SetVerbState failed.\n"));
  300. lpConsoleVerb->Release();
  301. return hr;
  302. }
  303. lpConsoleVerb->Release();
  304. return hr;
  305. }