|
|
// SplitPaneResultsView.cpp: implementation of the CSplitPaneResultsView class.
//
//////////////////////////////////////////////////////////////////////
// Copyright (c) 2000 Microsoft Corporation
//
// 04/06/00 v-marfin 62935 : Show "OK" Instead of "Reset" in the upper pane only
#include "stdafx.h"
#include "snapin.h"
#include "SplitPaneResultsView.h"
#include "HealthmonResultsPane.h"
#include "HMListViewColumn.h"
#include "HMResultsPaneItem.h"
#include "HMScopeItem.h"
#include "HealthmonScopePane.h"
#include "HMObject.h"
#include "EventManager.h"
#include "HMGraphView.h"
#include "DataElement.h"
#include "Rule.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
IMPLEMENT_DYNCREATE(CSplitPaneResultsView,CResultsPaneView)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSplitPaneResultsView::CSplitPaneResultsView() {
}
CSplitPaneResultsView::~CSplitPaneResultsView() { Destroy(); }
//////////////////////////////////////////////////////////////////////
// Create/Destroy
//////////////////////////////////////////////////////////////////////
bool CSplitPaneResultsView::Create(CScopePaneItem* pOwnerItem) { TRACEX(_T("CSplitPaneResultsView::Create\n")); TRACEARGn(pOwnerItem);
if( ! CResultsPaneView::Create(pOwnerItem) ) { TRACE(_T("FAILED : CResultsPaneView::Create failed.\n")); return false; }
return true; }
//////////////////////////////////////////////////////////////////////
// Results Pane Item Members
//////////////////////////////////////////////////////////////////////
void CSplitPaneResultsView::RemoveItem(int iIndex) { TRACEX(_T("CSplitPaneResultsView::RemoveItem\n")); TRACEARGn(iIndex);
if( iIndex >= m_ResultItems.GetSize() || iIndex < 0 ) { TRACE(_T("FAILED : iIndex is out of array bounds.\n")); return; }
CResultsPaneItem* pItem = m_ResultItems[iIndex];
if( ! GfxCheckObjPtr(pItem,CResultsPaneItem) ) { TRACE(_T("FAILED : pItem is not a valid results pane item pointer.\n")); return; }
// for each pane showing this results view, delete the item from it
for( int i=0; i < m_ResultsPanes.GetSize(); i++ ) { if( GfxCheckObjPtr(m_ResultsPanes[i],CResultsPane) ) { pItem->RemoveItem(m_ResultsPanes[i]); } }
delete pItem; m_ResultItems.RemoveAt(iIndex); }
//////////////////////////////////////////////////////////////////////
// MMC Notify Handlers
//////////////////////////////////////////////////////////////////////
HRESULT CSplitPaneResultsView::OnGetResultViewType(CString& sViewType,long& lViewOptions) { TRACEX(_T("CSplitPaneResultsView::OnGetResultViewType\n")); TRACEARGs(sViewType); TRACEARGn(lViewOptions);
sViewType = _T("{668E5408-8E05-11D2-8ADA-0000F87A3912}"); lViewOptions = MMC_VIEW_OPTIONS_NOLISTVIEWS;
return S_OK; }
HRESULT CSplitPaneResultsView::OnShow(CResultsPane* pPane, BOOL bSelecting, HSCOPEITEM hScopeItem) { TRACEX(_T("CSplitPaneResultsView::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;
// set the description bar text
LPRESULTDATA pIResultData = pHMRP->GetResultDataPtr();
if( pIResultData ) { CString sDescription; sDescription.LoadString(IDS_STRING_HEALTHMON_RESULTSPANE); pIResultData->SetDescBarText((LPTSTR)(LPCTSTR)sDescription);
pIResultData->Release(); }
HRESULT hr = S_OK;
_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 E_FAIL; }
CHMObject* pObject = ((CHMScopeItem*)(pOwnerScopeItem))->GetObjectPtr(); if( ! pObject ) { return E_FAIL; }
if( bSelecting ) { CString sText; sText.Format(IDS_STRING_CHILDREN_OF_FORMAT,pOwnerScopeItem->GetDisplayName()); pUpperList->SetTitle(sText);
// v-marfin 62935 : Show "OK" Instead of "Reset" in the upper pane only
CString sOK; sOK.LoadString(IDS_STRING_OK); CString sReset; sReset.LoadString(IDS_STRING_RESET);
// add the children of the selected scope item to the upper pane
for( int i = 0; i < pOwnerScopeItem->GetChildCount(); i++ ) { CScopePaneItem* pChildScopeItem = pOwnerScopeItem->GetChild(i); CHMResultsPaneItem* pItem = new CHMResultsPaneItem; CStringArray saNames; saNames.Copy(pChildScopeItem->GetDisplayNames());
// v-marfin 62935 : Show "OK" Instead of "Reset" in the upper pane only
if (saNames.GetSize() > 1) { CString sTest = saNames.GetAt(1); if (saNames.GetAt(1)==sReset) { saNames.SetAt(1,sOK); } }
CUIntArray iaIconIds; iaIconIds.Copy(pChildScopeItem->GetIconIds()); if( ! pItem->Create(this,saNames,iaIconIds,pChildScopeItem->GetIconIndex()) ) { TRACE(_T("FAILED : CHMResultsPaneItem::Create failed.\n")); return false; } pItem->SetToUpperPane(); m_ResultItems.Add(pItem); }
sText.Format(IDS_STRING_COUNT_OF_FORMAT,pOwnerScopeItem->GetChildCount()); pUpperList->SetDescription(sText);
hr = AddEvents(pHMRP);
if( ! CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CResultsPaneView::OnShow failed.\n")); }
hr = CResultsPaneView::OnShow(pPane,bSelecting,hScopeItem);
if( ! CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CResultsPaneView::OnShow failed.\n")); }
hr = AddStatistics(pHMRP);
if( ! CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CResultsPaneView::OnShow failed.\n")); } 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; }
void CSplitPaneResultsView::AddStatistic(CEventContainer* pContainer, CStatistics* pStatistic, bool bUpdateGraph /*=true*/) { TRACEX(_T("CSplitPaneResultsView::AddStatistic\n")); TRACEARGn(pContainer); TRACEARGn(pStatistic);
// insert item at top of stats list for this statistic
AddItem(pStatistic->CreateResultsPaneItem(this));
if( bUpdateGraph ) { CHMScopeItem* pHMItem = (CHMScopeItem*)GetOwnerScopeItem();
if( ! GfxCheckObjPtr(pHMItem,CHMScopeItem) ) { TRACE(_T("FAILED : pPane is not a valid pointer.\n")); return; }
CHMObject* pObject = pHMItem->GetObjectPtr(); if( !pObject || ! GfxCheckObjPtr(pObject,CHMObject) ) { return; }
for( int i = 0; i < GetResultsPanesCount(); i++ ) { CHealthmonResultsPane* pPane = (CHealthmonResultsPane*)GetResultsPane(i); if( pPane ) { _DHMGraphView* pGraphView = pPane->GetGraphViewCtrl(); if( pGraphView ) { pPane->GetGraphViewSink()->SetResultsViewPtr(this);
long lCurrentStyle = pGraphView->GetStyle();
pGraphView->Clear();
if( lCurrentStyle & HMGVS_CURRENT ) { pGraphView->SetStyle(HMGVS_CURRENT|HMGVS_GROUP); }
if( lCurrentStyle & HMGVS_HISTORIC ) { pGraphView->SetStyle(HMGVS_HISTORIC|HMGVS_GROUP); }
pGraphView->SetName(pObject->GetName()); }
CEventContainer* pContainer = NULL; EvtGetEventManager()->GetEventContainer(pObject->GetSystemName(),pObject->GetGuid(),pContainer); if( pContainer ) { for(int i = 0; i < pContainer->GetStatisticsCount(); i++ ) { if( i > pContainer->GetStatisticsCount()-10 ) { CStatistics* pStat = pContainer->GetStatistic(i); if( pStat ) { pStat->UpdateGraph(pGraphView); } } } } } } } }
inline HRESULT CSplitPaneResultsView::AddEvents(CHealthmonResultsPane* pPane) { TRACEX(_T("CSplitPaneResultsView::AddEvents\n"));
CScopePaneItem* pSPI = GetOwnerScopeItem();
if( ! pSPI->IsKindOf(RUNTIME_CLASS(CHMScopeItem)) ) { return S_FALSE; }
CHMScopeItem* pHMItem = (CHMScopeItem*)pSPI;
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) ) { TRACE(_T("FAILED : pPane is not a valid pointer.\n")); return E_FAIL; }
CString sText; sText.Format(IDS_STRING_EVENTS_OF_FORMAT,pSPI->GetDisplayName()); pPane->GetLowerListCtrl()->SetTitle(sText);
CHMObject* pObject = pHMItem->GetObjectPtr(); if( !pObject || ! GfxCheckObjPtr(pObject,CHMObject) ) { return E_FAIL; }
CEventContainer* pContainer = NULL; EvtGetEventManager()->GetEventContainer(pObject->GetSystemName(),pObject->GetGuid(),pContainer); if( pContainer ) { for(int i = 0; i < pContainer->GetEventCount(); i++ ) { CEvent* pEvent = pContainer->GetEvent(i); if( pEvent ) { CHMEventResultsPaneItem* pEventItem = pEvent->CreateResultsPaneItem(this); m_ResultItems.Add(pEventItem); } } }
sText.Format(IDS_STRING_COUNT_OF_FORMAT,pContainer->GetEventCount()); pPane->GetLowerListCtrl()->SetDescription(sText);
return S_OK; }
inline HRESULT CSplitPaneResultsView::AddStatistics(CHealthmonResultsPane* pPane) { TRACEX(_T("CSplitPaneResultsView::AddStatistics\n"));
CScopePaneItem* pSPI = GetOwnerScopeItem();
if( ! pSPI->IsKindOf(RUNTIME_CLASS(CHMScopeItem)) ) { return S_FALSE; }
CHMScopeItem* pHMItem = (CHMScopeItem*)pSPI;
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) ) { TRACE(_T("FAILED : pPane is not a valid pointer.\n")); return E_FAIL; }
CString sText; sText.Format(IDS_STRING_STATISTICS_FOR,pSPI->GetDisplayName()); pPane->GetStatsListCtrl()->SetTitle(sText);
CHMObject* pObject = pHMItem->GetObjectPtr(); if( !pObject || ! GfxCheckObjPtr(pObject,CHMObject) ) { return E_FAIL; }
_DHMGraphView* pGraphView = pPane->GetGraphViewCtrl(); if( pGraphView ) { pPane->GetGraphViewSink()->SetResultsViewPtr(this);
long lCurrentStyle = pGraphView->GetStyle();
pGraphView->Clear();
if( lCurrentStyle & HMGVS_CURRENT ) { pGraphView->SetStyle(HMGVS_CURRENT|HMGVS_GROUP); }
if( lCurrentStyle & HMGVS_HISTORIC ) { pGraphView->SetStyle(HMGVS_HISTORIC|HMGVS_GROUP); }
pGraphView->SetName(pObject->GetName()); }
CEventContainer* pContainer = NULL; EvtGetEventManager()->GetEventContainer(pObject->GetSystemName(),pObject->GetGuid(),pContainer); if( pContainer ) { for(int i = 0; i < pContainer->GetStatisticsCount(); i++ ) { if( i > pContainer->GetStatisticsCount()-10 ) { CStatistics* pStat = pContainer->GetStatistic(i); if( pStat ) { AddStatistic(pContainer,pStat,i==pContainer->GetStatisticsCount()-1); } } } }
sText.Format(IDS_STRING_COUNT_OF_FORMAT,pContainer->GetStatisticsCount()); pPane->GetStatsListCtrl()->SetDescription(sText);
return S_OK; }
inline HRESULT CSplitPaneResultsView::RemoveStatistics(CHealthmonResultsPane* pPane) { TRACEX(_T("CSplitPaneResultsView::RemoveStatistics\n"));
CScopePaneItem* pSPI = GetOwnerScopeItem();
if( ! pSPI->IsKindOf(RUNTIME_CLASS(CHMScopeItem)) ) { return S_FALSE; }
CHMScopeItem* pHMItem = (CHMScopeItem*)pSPI;
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) ) { TRACE(_T("FAILED : pPane is not a valid pointer.\n")); return E_FAIL; }
CHMObject* pObject = pHMItem->GetObjectPtr(); if( !pObject || ! GfxCheckObjPtr(pObject,CHMObject) ) { return E_FAIL; }
pPane->GetGraphViewSink()->SetResultsViewPtr(NULL);
if(pPane->GetGraphViewCtrl()) { pPane->GetGraphViewCtrl()->Clear(); }
CString sWaiting; sWaiting.LoadString(IDS_STRING_WAITING); pPane->GetStatsListCtrl()->SetTitle(sWaiting);
return S_OK; }
//////////////////////////////////////////////////////////////////////
// GraphView Events Members
//////////////////////////////////////////////////////////////////////
void CSplitPaneResultsView::OnGraphViewStyleChange(_DHMGraphView* pGraphView) { if( ! pGraphView ) { ASSERT(FALSE); return; }
CScopePaneItem* pSPI = GetOwnerScopeItem();
if( ! pSPI->IsKindOf(RUNTIME_CLASS(CHMScopeItem)) ) { return; }
CHMScopeItem* pHMItem = (CHMScopeItem*)pSPI;
CHMObject* pObject = pHMItem->GetObjectPtr(); if( !pObject || ! GfxCheckObjPtr(pObject,CHMObject) ) { return; }
pGraphView->SetName(pObject->GetName());
CEventContainer* pContainer = NULL; EvtGetEventManager()->GetEventContainer(pObject->GetSystemName(),pObject->GetGuid(),pContainer); if( pContainer ) { for(int i = 0; i < pContainer->GetStatisticsCount(); i++ ) { if( i > pContainer->GetStatisticsCount()-10 ) { CStatistics* pStat = pContainer->GetStatistic(i); if( pStat ) { AddStatistic(pContainer,pStat); } } } } }
|