// ActionResultsView.cpp: implementation of the CActionResultsView class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "snapin.h" #include "ActionResultsView.h" #include "HealthmonResultsPane.h" #include "HMListViewColumn.h" #include "Action.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif IMPLEMENT_DYNCREATE(CActionResultsView,CSplitPaneResultsView) ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CActionResultsView::CActionResultsView() { } CActionResultsView::~CActionResultsView() { Destroy(); } ////////////////////////////////////////////////////////////////////// // Create/Destroy ////////////////////////////////////////////////////////////////////// bool CActionResultsView::Create(CScopePaneItem* pOwnerItem) { TRACEX(_T("CActionResultsView::Create\n")); TRACEARGn(pOwnerItem); if( ! CSplitPaneResultsView::Create(pOwnerItem) ) { TRACE(_T("FAILED : CSplitPaneResultsView::Create failed.\n")); return false; } // add the upper columns CHMListViewColumn* pColumn = NULL; CString sTitle; DWORD dwFormat = LVCFMT_LEFT; // name pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_NAME); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToUpperPane(); AddColumn(pColumn); // GUID pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_GUID); pColumn->Create(this,sTitle,0,dwFormat); pColumn->SetToUpperPane(); AddColumn(pColumn); // Type pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_TYPE); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToUpperPane(); AddColumn(pColumn); // Condition pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_CONDITION); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToUpperPane(); AddColumn(pColumn); // comment pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_COMMENT); pColumn->Create(this,sTitle,125,dwFormat); pColumn->SetToUpperPane(); AddColumn(pColumn); // add the lower columns // Severity pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_SEVERITY); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToLowerPane(); AddColumn(pColumn); // ID pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_ID); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToLowerPane(); AddColumn(pColumn); // Date/Time pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_DATETIME); pColumn->Create(this,sTitle,175,dwFormat); pColumn->SetToLowerPane(); AddColumn(pColumn); // Component pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_DATA_POINT); pColumn->Create(this,sTitle,125,dwFormat); pColumn->SetToLowerPane(); AddColumn(pColumn); // System pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_SYSTEM); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToLowerPane(); AddColumn(pColumn); // Message pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_MESSAGE); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToLowerPane(); AddColumn(pColumn); // add the stats columns // time pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_DATETIME); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToStatsPane(); AddColumn(pColumn); // normal pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_NORMAL); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToStatsPane(); AddColumn(pColumn); // warning pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_WARNING); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToStatsPane(); AddColumn(pColumn); // critical pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_CRITICAL); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToStatsPane(); AddColumn(pColumn); // unknown pColumn = new CHMListViewColumn; sTitle.LoadString(IDS_STRING_UNKNOWN); pColumn->Create(this,sTitle,75,dwFormat); pColumn->SetToStatsPane(); AddColumn(pColumn); return true; } ////////////////////////////////////////////////////////////////////// // MMC Notify Handlers ////////////////////////////////////////////////////////////////////// HRESULT CActionResultsView::OnShow(CResultsPane* pPane, BOOL bSelecting, HSCOPEITEM hScopeItem) { TRACEX(_T("CActionResultsView::OnShow\n")); TRACEARGn(pPane); TRACEARGn(bSelecting); TRACEARGn(hScopeItem); if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) ) { TRACE(_T("FAILED : pPane is not a valid pointer.\n")); return E_FAIL; } CHealthmonResultsPane* pHMRP = (CHealthmonResultsPane*)pPane; HRESULT hr = S_OK; if( ! CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CResultsPaneView::OnShow failed.\n")); return hr; } _DHMListView* pUpperList = NULL; // get upper list control pUpperList = pHMRP->GetUpperListCtrl(); if( ! pUpperList ) { TRACE(_T("FAILED : CHealthmonResultsPane::GetUpperListCtrl returned a NULL pointer.\n")); return E_FAIL; } _DHMListView* pLowerList = NULL; // get lower list control pLowerList = pHMRP->GetLowerListCtrl(); if( ! pLowerList ) { TRACE(_T("FAILED : CHealthmonResultsPane::GetLowerListCtrl returned a NULL pointer.\n")); return E_FAIL; } _DHMListView* pStatsList = NULL; // get stats list control pStatsList = pHMRP->GetStatsListCtrl(); if( ! pLowerList ) { TRACE(_T("FAILED : CHealthmonResultsPane::GetLowerListCtrl returned a NULL pointer.\n")); return E_FAIL; } for( int i = 0; i < m_ResultItems.GetSize(); i++ ) { delete m_ResultItems[i]; } m_ResultItems.RemoveAll(); pUpperList->DeleteAllItems(); pLowerList->DeleteAllItems(); pStatsList->DeleteAllItems(); CScopePaneItem* pOwnerScopeItem = GetOwnerScopeItem(); if( ! pOwnerScopeItem || ! GfxCheckObjPtr(pOwnerScopeItem,CHMScopeItem) ) { TRACE(_T("FAILED : CResultsPaneView::GetOwnerScopeItem returns NULL pointer.\n")); return S_OK; } CAction* pObject = (CAction*)((CHMScopeItem*)(pOwnerScopeItem))->GetObjectPtr(); if( ! pObject || ! GfxCheckObjPtr(pObject,CAction) ) { return S_OK; } if( bSelecting ) { CString sText; sText.Format(IDS_STRING_ASSOCIATIONS_OF_FORMAT,pOwnerScopeItem->GetDisplayName()); pUpperList->SetTitle(sText); // add the configs associated to this action object CWbemClassObject* pClassObject = pObject->GetAssociatedConfigObjects(); ULONG ulReturned = 0L; int iConfigCount = 0; while( pClassObject && pClassObject->GetNextObject(ulReturned) == S_OK && ulReturned > 0 ) { CHMResultsPaneItem* pItem = new CHMResultsPaneItem; CStringArray saNames; CString sValue; pClassObject->GetLocaleStringProperty(IDS_STRING_MOF_NAME,sValue); saNames.Add(sValue); pClassObject->GetProperty(IDS_STRING_MOF_GUID,sValue); saNames.Add(sValue); CUIntArray iaIconIds; GetObjectTypeInfo(pClassObject,iaIconIds,sValue); saNames.Add(sValue); sValue = pObject->GetConditionString(saNames[1]); saNames.Add(sValue); pClassObject->GetLocaleStringProperty(IDS_STRING_MOF_DESCRIPTION,sValue); saNames.Add(sValue); if( ! pItem->Create(this,saNames,iaIconIds,0) ) { TRACE(_T("FAILED : CHMResultsPaneItem::Create failed.\n")); if (pClassObject) // v-marfin { delete pClassObject; } return S_OK; } pItem->SetToUpperPane(); m_ResultItems.Add(pItem); iConfigCount++; } if( pClassObject ) { delete pClassObject; } sText.Format(IDS_STRING_COUNT_OF_FORMAT,iConfigCount); pUpperList->SetDescription(sText); hr = CResultsPaneView::OnShow(pPane,bSelecting,hScopeItem); // hr = AddEvents(pHMRP); // hr = AddStatistics(pHMRP); USES_CONVERSION; CString sOrder = AfxGetApp()->GetProfileString(A2T(pObject->GetRuntimeClass()->m_lpszClassName),_T("UpperColumnOrder")); if( ! sOrder.IsEmpty() && sOrder != pUpperList->GetColumnOrder() ) { pUpperList->SetColumnOrder(sOrder); } sOrder = AfxGetApp()->GetProfileString(A2T(pObject->GetRuntimeClass()->m_lpszClassName),_T("LowerColumnOrder")); if( ! sOrder.IsEmpty() && sOrder != pLowerList->GetColumnOrder() ) { pLowerList->SetColumnOrder(sOrder); } } else { hr = CResultsPaneView::OnShow(pPane,bSelecting,hScopeItem); int iUpperColCount = 0; int iLowerColCount = 0; for( int i=0; i < GetColumnCount(); i++ ) { CHMListViewColumn* pColumn = (CHMListViewColumn*)GetColumn(i); if( pColumn ) { if( pColumn->IsUpperPane() ) { pColumn->SaveWidth(pPane,iUpperColCount++); } if( pColumn->IsLowerPane() ) { pColumn->SaveWidth(pPane,iLowerColCount++); } } } USES_CONVERSION; CString sOrder = pUpperList->GetColumnOrder(); AfxGetApp()->WriteProfileString(A2T(pObject->GetRuntimeClass()->m_lpszClassName),_T("UpperColumnOrder"),sOrder); sOrder.Empty(); sOrder = pLowerList->GetColumnOrder(); AfxGetApp()->WriteProfileString(A2T(pObject->GetRuntimeClass()->m_lpszClassName),_T("LowerColumnOrder"),sOrder); sOrder.Empty(); for( i = 0; i < GetColumnCount(); i++ ) { CHMListViewColumn* pColumn = (CHMListViewColumn*)GetColumn(i); if( pColumn->IsUpperPane() ) { pUpperList->DeleteColumn(0); } if( pColumn->IsLowerPane() ) { pLowerList->DeleteColumn(0); } if( pColumn->IsStatsPane() ) { pStatsList->DeleteColumn(0); } } // clean up lower list control pLowerList->DeleteAllItems(); // clean up stats list control pStatsList->DeleteAllItems(); // RemoveStatistics(pHMRP); } return S_OK; } inline void CActionResultsView::GetObjectTypeInfo(CWbemClassObject* pObject,CUIntArray& uia,CString& sType) { CString sValue; pObject->GetProperty(_T("__CLASS"),sValue); sValue.MakeUpper(); if( sValue.Find(_T("SYSTEM")) != -1 ) { sType.LoadString(IDS_STRING_SYSTEM); uia.Add(IDI_ICON_SYSTEM); } else if( sValue.Find(_T("DATAGROUP")) != -1 ) { sType.LoadString(IDS_STRING_DATA_GROUP); uia.Add(IDI_ICON_COMPONENT); } else if( sValue.Find(_T("DATACOLLECTOR")) != -1 ) { sType.LoadString(IDS_STRING_DATA_POINT); uia.Add(IDI_ICON_DATAPOINT); } else if( sValue.Find(_T("THRESHOLD")) != -1 ) { sType.LoadString(IDS_STRING_RULE); uia.Add(IDI_ICON_THRESHOLD); } else { ASSERT(FALSE); } }