Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

397 lines
9.9 KiB

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
ilogcat.cpp
Abstract:
Internal implementation for a logging category item.
Environment:
WIN32 User Mode
Author:
Darwin Ouyang (t-darouy) 30-Sept-1997
--*/
#include "StdAfx.h"
#include "inode.h" // base class
#include "ilogcat.h" // log category item
#include "ilogging.h" // logging folder
#include "faxcomp.h" // CFaxComponent
#include "faxdataobj.h" // dataobject
#include "faxstrt.h" // string table
#pragma hdrstop
#define PRI_CONTEXT_MENU 10;
extern CStringTable * GlobalStringTable;
// Generated with uuidgen. Each node must have a GUID associated with it.
// This one is for the main root node.
const GUID GUID_LogCatNode = /* 208dd5bc-44e2-11d1-9076-00a0c90ab504 */
{
0x208dd5bc,
0x44e2,
0x11d1,
{0x90, 0x76, 0x00, 0xa0, 0xc9, 0x0a, 0xb5, 0x04}
};
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Constructor and destructor.
//
//
CInternalLogCat::CInternalLogCat( CInternalNode * pParent, CFaxComponentData * pCompData ) :
CInternalNode( pParent, pCompData )
/*++
Routine Description:
Constructor.
Arguments:
None.
Return Value:
None.
--*/
{
pCategory = NULL;
}
CInternalLogCat::~CInternalLogCat()
/*++
Routine Description:
Destructor.
Arguments:
None.
Return Value:
None.
--*/
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Mandatory CInternalNode implementations.
//
//
const GUID *
CInternalLogCat::GetNodeGUID()
/*++
Routine Description:
Returns the node's associated GUID.
Arguments:
None.
Return Value:
A const pointer to a binary GUID.
--*/
{
// DebugPrint(( TEXT("Trace: CInternalLogCat::GetNodeGUID") ));
return &GUID_LogCatNode;
}
const LPTSTR
CInternalLogCat::GetNodeDisplayName()
/*++
Routine Description:
Returns a const TSTR pointer to the node's display name.
Arguments:
None.
Return Value:
A const pointer to a TSTR.
--*/
{
// DebugPrint(( TEXT("Trace: CInternalLogCat::GetNodeDisplayName") ));
return (LPTSTR)pCategory->Name;
}
const LONG_PTR
CInternalLogCat::GetCookie()
/*++
Routine Description:
Returns the cookie for this node.
Arguments:
None.
Return Value:
A const long containing the cookie for the pointer,
in this case, a NULL, since the root node has no cookie.
--*/
{
// DebugPrint(( TEXT("Trace: CInternalLogCat::GetCookie") ));
DebugPrint(( TEXT("Log Category Node Cookie: 0x%p"), this ));
return (LONG_PTR)this; // status node's cookie is the node id.
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IComponent over-rides
//
//
HRESULT
STDMETHODCALLTYPE
CInternalLogCat::ResultGetDisplayInfo(
IN CFaxComponent * pComp,
IN OUT RESULTDATAITEM __RPC_FAR *pResultDataItem)
/*++
Routine Description:
This routine dispatches result pane GetDisplayInfo requests to the appropriate handlers
in the mandatory implementations of the node, as well as handling special case data requests.
Arguments:
pComp - a pointer to the IComponent associated with this node.
pResultDataItem - a pointer to the RESULTDATAITEM struct which needs to be filled in.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
// DebugPrint(( TEXT("Trace: CInternalLogCat::ResultGetDisplayInfo") ));
assert(pResultDataItem != NULL);
if( pResultDataItem->mask & RDI_STR ) {
if( pResultDataItem->nCol == 0 ) {
pResultDataItem->str = GetNodeDisplayName();
}
if( pResultDataItem->nCol == 1) {
pResultDataItem->str = ::GlobalStringTable->GetString( IDS_LOG_LEVEL_NONE + pCategory->Level );
}
}
if( pResultDataItem->mask & RDI_IMAGE ) {
pResultDataItem->nImage = GetNodeDisplayImage();
}
return S_OK;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// IExtendContextMenu event handlers - default implementations
//
//
HRESULT
STDMETHODCALLTYPE
CInternalLogCat::ComponentContextMenuAddMenuItems(
IN CFaxComponent * pComp,
IN CFaxDataObject * piDataObject,
IN LPCONTEXTMENUCALLBACK piCallback,
IN OUT long __RPC_FAR *pInsertionAllowed)
/*++
Routine Description:
Adds items to the context menu.
Arguments:
pComp - a pointer to the IComponent associated with this node.
piDataObject - pointer to the dataobject associated with this node
piCallback - a pointer to the IContextMenuCallback used to insert pages
pInsertionAllowed - a set of flag indicating whether insertion is allowed.
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
CONTEXTMENUITEM menuItem;
WORD menuID;
HRESULT hr = S_OK;
if( !( *pInsertionAllowed | CCM_INSERTIONALLOWED_TOP ) ) {
assert( FALSE );
return S_OK;
}
// build the submenu
ZeroMemory( (void*)&menuItem, sizeof( menuItem ));
menuItem.strName = ::GlobalStringTable->GetString( IDS_LOG_LEVEL );
menuItem.strStatusBarText = ::GlobalStringTable->GetString( IDS_LOG_LEVEL_DESC );
menuItem.lCommandID = PRI_CONTEXT_MENU;
menuItem.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;
menuItem.fFlags = MF_POPUP | MF_ENABLED;
menuItem.fSpecialFlags = CCM_SPECIAL_SUBMENU;
hr = piCallback->AddItem( &menuItem );
if( FAILED(hr) ) {
return hr;
}
// build the submenu
for( menuID = 0; menuID < 4; menuID++ ) {
ZeroMemory( ( void* )&menuItem, sizeof( menuItem ) );
menuItem.strName = ::GlobalStringTable->GetString( IDS_LOG_LEVEL_NONE + menuID );
menuItem.strStatusBarText = ::GlobalStringTable->GetString( IDS_LOG_LEVEL_NONE_DESC + menuID );
menuItem.lCommandID = menuID;
menuItem.lInsertionPointID = PRI_CONTEXT_MENU;
if( menuID == pCategory->Level ) {
menuItem.fFlags = MF_ENABLED | MF_CHECKED;
} else {
menuItem.fFlags = MF_ENABLED;
}
menuItem.fSpecialFlags = 0;
hr = piCallback->AddItem( &menuItem );
if( FAILED(hr) ) {
return hr;
}
}
return hr;
}
HRESULT
STDMETHODCALLTYPE
CInternalLogCat::ComponentContextMenuCommand(
IN CFaxComponent * pComp,
IN long lCommandID,
IN CFaxDataObject * piDataObject)
/*++
Routine Description:
Handles context menu commands.
Arguments:
pComp - a pointer to the IComponent associated with this node.
lCommandID - the command ID
piDataObject - pointer to the dataobject associated with this node
Return Value:
HRESULT indicating SUCCEEDED() or FAILED()
--*/
{
HRESULT hr;
if( lCommandID >= 0 || lCommandID < 4 ) {
pCategory->Level = lCommandID;
assert( m_pParentINode );
hr = ((CInternalLogging *)m_pParentINode)->CommitChanges( pComp );
if( SUCCEEDED( hr ) ) {
pComp->m_pResultData->UpdateItem( hItemID );
}
}
// if we return a failure here, the MMC will assert on us!!
// so we return only S_OK.
return S_OK;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Internal Event Handlers
//
//
HRESULT
CInternalLogCat::ResultOnSelect(
IN CFaxComponent* pComp,
IN CFaxDataObject * lpDataObject,
IN LPARAM arg, LPARAM param)
/*++
Routine Description:
Event handler for the MMCN_SELECT message for the log category node.
Arguments:
pCompData - a pointer to the instance of IComponentData which this root node is associated with.
pdo - a pointer to the data object associated with this node
arg, param - the arguements of the message
Return Value:
HRESULT which indicates SUCCEEDED() or FAILED()
--*/
{
DebugPrint(( TEXT("Trace: CInternalRoot::OnSelect") ));
pComp->m_pConsoleVerb->SetDefaultVerb( MMC_VERB_NONE );
return S_OK;
}