mirror of https://github.com/tongzx/nt5src
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
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;
|
|
}
|