489 lines
11 KiB
C++
489 lines
11 KiB
C++
// HMResultsPaneItem.cpp: implementation of the CHMResultsPaneItem 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 "HMResultsPaneItem.h"
|
|
#include "HealthmonResultsPane.h"
|
|
#include "..\HMListView\HMList.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
IMPLEMENT_DYNCREATE(CHMResultsPaneItem,CResultsPaneItem)
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CHMResultsPaneItem::CHMResultsPaneItem()
|
|
{
|
|
|
|
}
|
|
|
|
CHMResultsPaneItem::~CHMResultsPaneItem()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// MMC-Related Members
|
|
|
|
bool CHMResultsPaneItem::InsertItem(CResultsPane* pPane, int nIndex, bool bResizeColumns /*= false*/)
|
|
{
|
|
TRACEX(_T("CHMResultsPaneItem::InsertItem\n"));
|
|
TRACEARGn(pPane);
|
|
TRACEARGn(nIndex);
|
|
TRACEARGn(bResizeColumns);
|
|
|
|
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) )
|
|
{
|
|
TRACE(_T("FAILED : pPane is not a valid pointer.\n"));
|
|
return false;
|
|
}
|
|
|
|
CHealthmonResultsPane* pHMRP = (CHealthmonResultsPane*)pPane;
|
|
|
|
_DHMListView* pList = NULL;
|
|
|
|
if( IsUpperPane() )
|
|
{
|
|
pList = pHMRP->GetUpperListCtrl();
|
|
}
|
|
else if( IsLowerPane() )
|
|
{
|
|
pList = pHMRP->GetLowerListCtrl();
|
|
}
|
|
else if( IsStatsPane() )
|
|
{
|
|
pList = pHMRP->GetStatsListCtrl();
|
|
}
|
|
else
|
|
{
|
|
TRACE(_T("WARNING : Column has not been assigned to a results pane in the split view.\n"));
|
|
ASSERT(FALSE);
|
|
}
|
|
|
|
if( ! pList )
|
|
{
|
|
TRACE(_T("FAILED : Results Pane's list control has not been intialized.\n"));
|
|
return false;
|
|
}
|
|
|
|
#ifndef IA64
|
|
if( pList->FindItemByLParam((long)this) >= 0 ) // needs ptr fixing
|
|
{
|
|
return true;
|
|
}
|
|
#endif // IA64
|
|
|
|
if( IsLowerPane() )
|
|
{
|
|
// check filters
|
|
CStringArray saFilters;
|
|
CDWordArray dwaFilterTypes;
|
|
CString sFilter;
|
|
BSTR bsFilter = NULL;
|
|
long lType = -1L;
|
|
|
|
long lColumnCount = pList->GetColumnCount();
|
|
|
|
for( long l = 0L; l < lColumnCount; l++ )
|
|
{
|
|
pList->GetColumnFilter(l,&bsFilter,&lType);
|
|
sFilter = bsFilter;
|
|
saFilters.Add(sFilter);
|
|
dwaFilterTypes.Add(lType);
|
|
SysFreeString(bsFilter);
|
|
}
|
|
|
|
bool bItemPassed = true;
|
|
|
|
for( l = 0L; l < lColumnCount; l++ )
|
|
{
|
|
if( dwaFilterTypes[l] == HDFS_CONTAINS )
|
|
{
|
|
if( saFilters[l] != _T("") && GetDisplayName(l).Find(saFilters[l]) == -1 )
|
|
{
|
|
bItemPassed = false;
|
|
break;
|
|
}
|
|
}
|
|
else if( dwaFilterTypes[l] == HDFS_DOES_NOT_CONTAIN )
|
|
{
|
|
if( saFilters[l] != _T("") && GetDisplayName(l).Find(saFilters[l]) != -1 )
|
|
{
|
|
bItemPassed = false;
|
|
break;
|
|
}
|
|
}
|
|
else if( dwaFilterTypes[l] == HDFS_STARTS_WITH )
|
|
{
|
|
if( saFilters[l] != _T("") && GetDisplayName(l).Find(saFilters[l]) != 0 )
|
|
{
|
|
bItemPassed = false;
|
|
break;
|
|
}
|
|
}
|
|
else if( dwaFilterTypes[l] == HDFS_ENDS_WITH )
|
|
{
|
|
if( saFilters[l] != _T("") && GetDisplayName(l).Find(saFilters[l]) != GetDisplayName(l).GetLength() - saFilters[l].GetLength() )
|
|
{
|
|
bItemPassed = false;
|
|
break;
|
|
}
|
|
}
|
|
else if( dwaFilterTypes[l] == HDFS_IS )
|
|
{
|
|
if( saFilters[l] != _T("") && GetDisplayName(l) != saFilters[l] )
|
|
{
|
|
bItemPassed = false;
|
|
break;
|
|
}
|
|
}
|
|
else if( dwaFilterTypes[l] == HDFS_IS_NOT )
|
|
{
|
|
if( saFilters[l] != _T("") && GetDisplayName(l) == saFilters[l] )
|
|
{
|
|
bItemPassed = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if( ! bItemPassed )
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// insert the item
|
|
DWORD dwlvif = LVIF_TEXT|LVIF_PARAM;
|
|
int iIconIndex = -1;
|
|
if( m_IconResIds.GetSize() > 0 )
|
|
{
|
|
dwlvif |= LVIF_IMAGE;
|
|
iIconIndex = pHMRP->GetIconIndex(GetIconId(),m_Pane);
|
|
}
|
|
|
|
int iResult=0;
|
|
|
|
#ifndef IA64
|
|
iResult = pList->InsertItem(dwlvif,
|
|
IsUpperPane() ? nIndex : 0,
|
|
(LPCTSTR)GetDisplayName(),
|
|
-1L,
|
|
-1L,
|
|
iIconIndex,
|
|
(long)this);
|
|
#endif // IA64
|
|
|
|
|
|
// insert the subitems
|
|
for(int i = 1; i < m_saDisplayNames.GetSize(); i++ )
|
|
{
|
|
#ifndef IA64
|
|
iResult = pList->SetItem(IsUpperPane() ? nIndex : 0,
|
|
i,
|
|
LVIF_TEXT,
|
|
(LPCTSTR)GetDisplayName(i),
|
|
-1L,
|
|
-1L,
|
|
-1L,
|
|
(long)this);
|
|
#endif // IA64
|
|
|
|
if( iResult == -1 )
|
|
{
|
|
TRACE(_T("FAILED : CHMListCtrl::InsertItem failed.\n"));
|
|
}
|
|
|
|
if( GetDisplayName(i).IsEmpty() && bResizeColumns )
|
|
{
|
|
pList->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
|
|
}
|
|
}
|
|
|
|
if( iResult == -1 )
|
|
{
|
|
TRACE(_T("FAILED : CHMListCtrl::InsertItem failed.\n"));
|
|
return false;
|
|
}
|
|
|
|
if( bResizeColumns )
|
|
{
|
|
/*
|
|
int iColWidth = 0;
|
|
int iStrWidth = 0;
|
|
|
|
// set the widths of the columns for this item
|
|
for( int i = 0; i < m_saDisplayNames.GetSize(); i++ )
|
|
{
|
|
// get the width in pixels of the item
|
|
iStrWidth = pList->GetStringWidth((LPCTSTR)m_saDisplayNames[i]) + 16;
|
|
iColWidth = pList->GetColumnWidth(i);
|
|
if( iStrWidth > iColWidth && iStrWidth > 10 )
|
|
pList->SetColumnWidth(i,iStrWidth);
|
|
}
|
|
*/
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CHMResultsPaneItem::SetItem(CResultsPane* pPane)
|
|
{
|
|
TRACEX(_T("CHMResultsPaneItem::SetItem\n"));
|
|
TRACEARGn(pPane);
|
|
|
|
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) )
|
|
{
|
|
TRACE(_T("FAILED : pPane is not a valid pointer.\n"));
|
|
return false;
|
|
}
|
|
|
|
CHealthmonResultsPane* pHMRP = (CHealthmonResultsPane*)pPane;
|
|
|
|
_DHMListView* pList = NULL;
|
|
BOOL bUpperPane = FALSE; // 62935 : Show "OK" Instead of "Reset" in the upper pane only
|
|
|
|
int iIndex = -1;
|
|
if( IsUpperPane() )
|
|
{
|
|
pList = pHMRP->GetUpperListCtrl();
|
|
bUpperPane=TRUE; // 62935 : Show "OK" Instead of "Reset" in the upper pane only
|
|
}
|
|
else if( IsLowerPane() )
|
|
{
|
|
pList = pHMRP->GetLowerListCtrl();
|
|
}
|
|
else if( IsStatsPane() )
|
|
{
|
|
pList = pHMRP->GetStatsListCtrl();
|
|
}
|
|
else
|
|
{
|
|
TRACE(_T("WARNING : Column has not been assigned to a results pane in the split view.\n"));
|
|
ASSERT(FALSE);
|
|
}
|
|
|
|
if( ! pList )
|
|
{
|
|
TRACE(_T("FAILED : Results Pane's list control has not been intialized.\n"));
|
|
return false;
|
|
}
|
|
|
|
#ifndef IA64
|
|
iIndex = pList->FindItemByLParam((long)this);
|
|
#endif // IA64
|
|
|
|
|
|
// set the item
|
|
|
|
DWORD dwlvif = LVIF_TEXT;
|
|
int iIconIndex = -1;
|
|
if( m_IconResIds.GetSize() > 0 )
|
|
{
|
|
dwlvif |= LVIF_IMAGE;
|
|
iIconIndex = pHMRP->GetIconIndex(GetIconId(),m_Pane);
|
|
}
|
|
|
|
int iResult=0;
|
|
|
|
#ifndef IA64
|
|
iResult = pList->SetItem(iIndex,
|
|
0,
|
|
dwlvif,
|
|
(LPCTSTR)GetDisplayName(),
|
|
iIconIndex,
|
|
-1L,
|
|
-1L,
|
|
(long)this);
|
|
#endif // IA64
|
|
|
|
// 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);
|
|
|
|
// insert the subitems
|
|
for(int i = 1; i < m_saDisplayNames.GetSize(); i++ )
|
|
{
|
|
CString sTest = GetDisplayName(i);
|
|
|
|
#ifndef IA64
|
|
iResult = pList->SetItem(iIndex,
|
|
i,
|
|
LVIF_TEXT,
|
|
//(LPCTSTR)GetDisplayName(i), // 62935
|
|
(i==1 && bUpperPane && GetDisplayName(i) == sReset) ? (LPCTSTR)sOK : (LPCTSTR)GetDisplayName(i), // 62935 -1L,
|
|
-1L,
|
|
-1L,
|
|
-1L,
|
|
(long)this);
|
|
#endif // IA64
|
|
|
|
if( iResult == -1 )
|
|
{
|
|
TRACE(_T("FAILED : CHMListCtrl::InsertItem failed.\n"));
|
|
}
|
|
}
|
|
|
|
if( iResult == -1 )
|
|
{
|
|
TRACE(_T("FAILED : CHMListCtrl::InsertItem failed.\n"));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CHMResultsPaneItem::RemoveItem(CResultsPane* pPane)
|
|
{
|
|
TRACEX(_T("CHMResultsPaneItem::RemoveItem\n"));
|
|
TRACEARGn(pPane);
|
|
|
|
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) )
|
|
{
|
|
TRACE(_T("FAILED : pPane is an invalid pointer.\n"));
|
|
return false;
|
|
}
|
|
|
|
if( ! GfxCheckObjPtr(pPane,CHealthmonResultsPane) )
|
|
{
|
|
TRACE(_T("FAILED : pPane is not a valid pointer.\n"));
|
|
return false;
|
|
}
|
|
|
|
CHealthmonResultsPane* pHMRP = (CHealthmonResultsPane*)pPane;
|
|
|
|
_DHMListView* pList = NULL;
|
|
|
|
int iIndex = -1;
|
|
if( IsUpperPane() )
|
|
{
|
|
pList = pHMRP->GetUpperListCtrl();
|
|
}
|
|
else if( IsLowerPane() )
|
|
{
|
|
pList = pHMRP->GetLowerListCtrl();
|
|
}
|
|
else if( IsStatsPane() )
|
|
{
|
|
pList = pHMRP->GetStatsListCtrl();
|
|
}
|
|
else
|
|
{
|
|
TRACE(_T("WARNING : Column has not been assigned to a results pane in the split view.\n"));
|
|
ASSERT(FALSE);
|
|
}
|
|
|
|
if( ! pList )
|
|
{
|
|
TRACE(_T("FAILED : Results Pane's list control has not been intialized.\n"));
|
|
return false;
|
|
}
|
|
|
|
#ifndef IA64
|
|
iIndex = pList->FindItemByLParam((long)this);
|
|
#endif // IA64
|
|
|
|
if( iIndex == -1 )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return pList->DeleteItem(iIndex) ? TRUE : FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// MMC Notify Handlers
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CHMResultsPaneItem::OnAddMenuItems(LPCONTEXTMENUCALLBACK piCallback,long __RPC_FAR *pInsertionAllowed)
|
|
{
|
|
TRACEX(_T("CHMResultsPaneItem::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;
|
|
|
|
// Cut
|
|
sResString.LoadString(IDS_STRING_CUT);
|
|
cmi.strName = LPTSTR(LPCTSTR(sResString));
|
|
cmi.strStatusBarText = NULL;
|
|
cmi.lCommandID = IDM_CUT;
|
|
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;
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CHMResultsPaneItem::OnCommand(CResultsPane* pPane, long lCommandID)
|
|
{
|
|
TRACEX(_T("CHMResultsPaneItem::OnCommand\n"));
|
|
TRACEARGn(lCommandID);
|
|
|
|
return S_OK;
|
|
}
|