WindowsXP-SP1/admin/hmonitor/snapin/hmresultspaneitem.cpp
2020-09-30 16:53:49 +02:00

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;
}