|
|
// HMEventResultsPaneItem.cpp: implementation of the CHMEventResultsPaneItem class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "snapin.h"
#include "HMEventResultsPaneItem.h"
#include "HealthmonResultsPane.h"
#include "ScopePaneItem.h"
#include "ResultsPaneView.h"
#include "AlertPage.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
IMPLEMENT_DYNCREATE(CHMEventResultsPaneItem,CHMResultsPaneItem)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHMEventResultsPaneItem::CHMEventResultsPaneItem() { ZeroMemory(&m_st,sizeof(SYSTEMTIME)); m_iState = HMS_UNKNOWN; m_iDateTimeColumn = -1; }
CHMEventResultsPaneItem::~CHMEventResultsPaneItem() { Destroy(); m_iState = -1; m_iDateTimeColumn = -1; }
/////////////////////////////////////////////////////////////////////////////
// Display Names Members
CString CHMEventResultsPaneItem::GetDisplayName(int nIndex /* = 0*/) { TRACEX(_T("CResultsPaneItem::GetDisplayName\n")); TRACEARGn(nIndex);
if( nIndex >= m_saDisplayNames.GetSize() || nIndex < 0 ) { TRACE(_T("FAILED : nIndex is out of array bounds.\n")); return _T(""); }
if( nIndex == GetDateTimeColumn() ) { CString sTime; CString sDate;
int iLen = GetTimeFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,NULL,0); iLen = GetTimeFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,sTime.GetBuffer(iLen+(sizeof(TCHAR)*1)),iLen); sTime.ReleaseBuffer();
iLen = GetDateFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,NULL,0); iLen = GetDateFormat(LOCALE_USER_DEFAULT,0L,&m_st,NULL,sDate.GetBuffer(iLen+(sizeof(TCHAR)*1)),iLen); sDate.ReleaseBuffer();
return sDate + _T(" ") + sTime; }
return m_saDisplayNames[nIndex]; }
/////////////////////////////////////////////////////////////////////////////
// MMC-Related Members
int CHMEventResultsPaneItem::CompareItem(CResultsPaneItem* pItem, int iColumn /*= 0*/ ) { TRACEX(_T("CResultsPaneItem::CompareItem\n")); TRACEARGn(pItem); TRACEARGn(iColumn);
CHMEventResultsPaneItem* pEventItem = (CHMEventResultsPaneItem*)pItem;
if( ! GfxCheckObjPtr(pEventItem,CHMEventResultsPaneItem) ) { return CResultsPaneItem::CompareItem(pItem,iColumn); }
if( iColumn == GetDateTimeColumn() ) { CTime time1(m_st); CTime time2(pEventItem->m_st); if( time1 == time2 ) return 0; if( time1 < time2 ) return 1; if( time1 > time2 ) return -1; }
if( iColumn == 0 && IsLowerPane() ) { if( m_iState == pEventItem->m_iState ) return 0; if( m_iState < pEventItem->m_iState ) return 1; if( m_iState > pEventItem->m_iState ) return -1; }
return CResultsPaneItem::CompareItem(pItem,iColumn); }
HRESULT CHMEventResultsPaneItem::WriteExtensionData(LPSTREAM pStream) { TRACEX(_T("CHMEventResultsPaneItem::WriteExtensionData\n")); TRACEARGn(pStream);
HRESULT hr = S_OK;
ULONG ulSize = GetDisplayName(3).GetLength() + 1; ulSize *= sizeof(TCHAR); if( ! CHECKHRESULT(hr = pStream->Write(GetDisplayName(3), ulSize, NULL)) ) { return hr; }
CString sType = IDS_STRING_MOF_HMR_STATUS; ulSize = sType.GetLength() + 1; ulSize *= sizeof(TCHAR); if( ! CHECKHRESULT(hr = pStream->Write(sType, ulSize, NULL)) ) { return hr; }
ulSize = m_sGuid.GetLength() + 1; ulSize *= sizeof(TCHAR); if( ! CHECKHRESULT(hr = pStream->Write(m_sGuid, ulSize, NULL)) ) { return hr; }
return S_OK; }
/////////////////////////////////////////////////////////////////////////////
// MMC Notify Handlers
/////////////////////////////////////////////////////////////////////////////
HRESULT CHMEventResultsPaneItem::OnAddMenuItems(LPCONTEXTMENUCALLBACK piCallback,long __RPC_FAR *pInsertionAllowed) { TRACEX(_T("CHMEventResultsPaneItem::OnAddMenuItems\n")); TRACEARGn(piCallback); TRACEARGn(pInsertionAllowed);
HRESULT hr = S_OK;
// Add New Menu Items
if( CCM_INSERTIONALLOWED_NEW & *pInsertionAllowed ) { // TODO: Add any context menu items for the New Menu here
}
// Add Task Menu Items
if( CCM_INSERTIONALLOWED_TASK & *pInsertionAllowed ) { // TODO: Add any context menu items for the Task Menu here
}
// Add Top Menu Items
if( CCM_INSERTIONALLOWED_TOP & *pInsertionAllowed ) { CONTEXTMENUITEM cmi; CString sResString; CString sResString2;
// Copy
sResString.LoadString(IDS_STRING_COPY); cmi.strName = LPTSTR(LPCTSTR(sResString)); cmi.strStatusBarText = NULL; cmi.lCommandID = IDM_COPY; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = 0; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; }
if( ! IsStatsPane() ) { // Delete
sResString.LoadString(IDS_STRING_CLEAR); cmi.strName = LPTSTR(LPCTSTR(sResString)); cmi.strStatusBarText = NULL; cmi.lCommandID = IDM_DELETE; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = 0; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; }
// Refresh
sResString.LoadString(IDS_STRING_REFRESH); cmi.strName = LPTSTR(LPCTSTR(sResString)); cmi.strStatusBarText = NULL; cmi.lCommandID = IDM_REFRESH; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = 0; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; }
if( ! IsUpperPane() ) { cmi.strName = NULL; cmi.strStatusBarText = NULL; cmi.lCommandID = 0; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = MF_SEPARATOR; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; }
// Properties
sResString.LoadString(IDS_STRING_ALERT_PROPERTIES); cmi.strName = LPTSTR(LPCTSTR(sResString)); cmi.strStatusBarText = NULL; cmi.lCommandID = IDM_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = 0; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; }
cmi.strName = NULL; cmi.strStatusBarText = NULL; cmi.lCommandID = 0; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = MF_SEPARATOR; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; } }
// Help
sResString.LoadString(IDS_STRING_HELP); cmi.strName = LPTSTR(LPCTSTR(sResString)); cmi.strStatusBarText = NULL; cmi.lCommandID = IDM_HELP; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = 0; cmi.fSpecialFlags = 0;
hr = piCallback->AddItem(&cmi); if( !SUCCEEDED(hr) ) { TRACE(_T("FAILED : IContextMenuCallback::AddItem failed.\n")); return hr; }
} }
return S_OK; }
HRESULT CHMEventResultsPaneItem::OnCommand(CResultsPane* pPane, long lCommandID) { TRACEX(_T("CHMEventResultsPaneItem::OnCommand\n")); TRACEARGn(pPane); TRACEARGn(lCommandID);
CHealthmonResultsPane* pHMRP = (CHealthmonResultsPane*)pPane; if( ! GfxCheckObjPtr(pHMRP,CHealthmonResultsPane) ) { return E_FAIL; }
HRESULT hr = S_OK;
switch( lCommandID ) { case IDM_CUT: { } break;
case IDM_COPY: { _DHMListView* pListView = IsStatsPane() ? pHMRP->GetStatsListCtrl() : pHMRP->GetLowerListCtrl();
if( ! pListView ) { return E_FAIL; }
CTypedPtrArray<CObArray,CHMEventResultsPaneItem*> Items;
int iIndex = pListView->GetNextItem(-1,LVNI_SELECTED); while( iIndex != -1 ) { LPARAM lParam = pListView->GetItem(iIndex);
CHMEventResultsPaneItem* pItem = (CHMEventResultsPaneItem*)lParam; if( GfxCheckObjPtr(pItem,CHMEventResultsPaneItem) ) { Items.Add(pItem); }
int iNextIndex = pListView->GetNextItem(iIndex,LVNI_SELECTED|LVNI_BELOW); if( iNextIndex == iIndex ) { break; } else { iIndex = iNextIndex; } }
CString sData;
for( int i = 0; i < Items.GetSize(); i++ ) { CHMEventResultsPaneItem* pItem = Items[i];
if( IsStatsPane() ) { for( int l = 0; l < pItem->GetDisplayNameCount(); l++ ) { sData += pItem->m_saDisplayNames[l] + _T("\t"); } } else { for( int l = 0; l < pItem->GetDisplayNameCount(); l++ ) { sData += pItem->GetDisplayName(l) + _T("\t"); } } sData.TrimRight(_T("\t"));
sData += _T("\r\n"); }
COleDataSource* pDataSource = new COleDataSource;
// Allocate memory for the stream
HGLOBAL hGlobal = GlobalAlloc( GMEM_SHARE, (sData.GetLength()+1)*sizeof(TCHAR) );
if( ! hGlobal ) { hr = E_OUTOFMEMORY; TRACE(_T("FAILED : Out of Memory.\n")); return hr; }
LPVOID lpGlobal = GlobalLock(hGlobal);
CopyMemory(lpGlobal,(LPCTSTR)sData,(sData.GetLength()+1)*sizeof(TCHAR));
GlobalUnlock(hGlobal);
pDataSource->CacheGlobalData(CF_UNICODETEXT,hGlobal);
pDataSource->SetClipboard(); } break;
case IDM_DELETE: { CHMListViewEventSink* pSink = pHMRP->GetLowerListSink(); pSink->OnDelete(); } break;
case IDM_PROPERTIES: { _DHMListView* pListView = IsStatsPane() ? pHMRP->GetStatsListCtrl() : pHMRP->GetLowerListCtrl();
CPropertySheet sheet(IDS_STRING_PROPERTIES_OF_ALERT); sheet.m_psh.dwFlags |= PSH_HASHELP; sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
CAlertPage page; page.m_psp.dwFlags |= PSP_HASHELP; sheet.AddPage(&page);
page.m_sSeverity = GetDisplayName(0); page.m_sID = GetDisplayName(1); page.m_sDTime = GetDisplayName(2); page.m_sDataCollector = GetDisplayName(3); page.m_sComputer = GetDisplayName(4); page.m_sAlert = GetDisplayName(5); page.m_pScopePane = pHMRP->GetOwnerScopePane(); page.m_pListView = pListView;
#ifndef IA64
page.m_iIndex = pListView->FindItemByLParam((LPARAM)this); // Needs ptr fixing
#endif // IA64
sheet.DoModal(); } break;
case IDM_REFRESH: { CResultsPaneView* pView = GetOwnerResultsView(); if( pView ) { CScopePaneItem* pSPI = pView->GetOwnerScopeItem(); if( GfxCheckObjPtr(pSPI,CScopePaneItem) ) { pSPI->OnRefresh(); } } } break;
case IDM_HELP: { CResultsPaneView* pView = GetOwnerResultsView(); if( pView ) { CScopePaneItem* pSPI = pView->GetOwnerScopeItem(); if( GfxCheckObjPtr(pSPI,CScopePaneItem) ) { pSPI->OnContextHelp(); } } } break; }
return S_OK; }
|