|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
inode.h
Abstract:
This header contains the abstract base node class for the snapin.
Environment:
WIN32 User Mode
Author:
Darwin Ouyang (t-darouy) 30-Sept-1997
--*/
#ifndef __INODE_H_
#define __INODE_H_
#include "resource.h"
class CFaxDataObject; // forward declaration
class CFaxComponentData; class CFaxComponent;
// the CInternalNode class provides a framework in which the various
// types of subcontainers in the snapin will implement various methods.
//
// all the subcontainers in the scope and result panes inherit from this class
//
// the global Notify method in CFaxComponent and CFaxComponentData and others
// will delegate to the implementations specified by the children of this class.
// using the cookie as an identifier. (currently a cast to pointer, but can be changed
// to a lookup table when/if a long < pointer type (64-bit world).
//
// this class will supply a default implementation of some of the methods via virtual functions
class CInternalNode { public: // constructor
CInternalNode( CInternalNode * pParent, CFaxComponentData * pCompData ) { m_pParentINode = pParent; m_pCompData = pCompData; } ~CInternalNode() { }
// *********************************************8
// These methods call those defined below.
//
// This moves common code together in the inode class
// and makes the descendents simpler, since they only
// implement the methods they need to override the
// default implementations for.
// IComponentData
virtual HRESULT STDMETHODCALLTYPE ScopeNotify( /* [in] */ CFaxComponentData * pCompData, /* [in] */ CFaxDataObject * lpDataObject, /* [in] */ MMC_NOTIFY_TYPE event, /* [in] */ LPARAM arg, /* [in] */ LPARAM param);
virtual HRESULT STDMETHODCALLTYPE ScopeGetDisplayInfo( /* [in] */ CFaxComponentData * pCompData, /* [out][in] */ SCOPEDATAITEM __RPC_FAR *pScopeDataItem);
virtual HRESULT STDMETHODCALLTYPE ScopeQueryDataObject( /* [in] */ CFaxComponentData * pCompData, /* [in] */ MMC_COOKIE cookie, /* [in] */ DATA_OBJECT_TYPES type, /* [out] */ LPDATAOBJECT __RPC_FAR *ppDataObject);
// IComponent
virtual HRESULT STDMETHODCALLTYPE ResultNotify( /* [in] */ CFaxComponent * pComp, /* [in] */ CFaxDataObject * lpDataObject, /* [in] */ MMC_NOTIFY_TYPE event, /* [in] */ LPARAM arg, /* [in] */ LPARAM param);
virtual HRESULT STDMETHODCALLTYPE ResultGetDisplayInfo( /* [in] */ CFaxComponent * pComp, /* [out][in] */ RESULTDATAITEM __RPC_FAR *pResultDataItem);
virtual HRESULT STDMETHODCALLTYPE ResultGetResultViewType( /* [in] */ CFaxComponent * pComp, /* [in] */ MMC_COOKIE cookie, /* [out] */ LPOLESTR __RPC_FAR *ppViewType, /* [out] */ long __RPC_FAR *pViewOptions);
virtual HRESULT STDMETHODCALLTYPE ResultQueryDataObject( /* [in] */ CFaxComponent * pComp, /* [in] */ MMC_COOKIE cookie, /* [in] */ DATA_OBJECT_TYPES type, /* [out] */ LPDATAOBJECT __RPC_FAR *ppDataObject);
// ***********************************************************
// ExtendPropertySheet event handlers - default implementations
// we need seperate versions for IComponentData and IComponent
// in your code if you want differing behavior
// in the scope and results panes.
//
// You can simply delegate one implementation to the other
// if you want the same behavior in both panes
// IExtendPropertySheet for IComponentData
virtual HRESULT STDMETHODCALLTYPE ComponentDataPropertySheetCreatePropertyPages( /* [in] */ CFaxComponentData * pCompData, /* [in] */ LPPROPERTYSHEETCALLBACK lpProvider, /* [in] */ LONG_PTR handle, /* [in] */ CFaxDataObject * lpIDataObject);
virtual HRESULT STDMETHODCALLTYPE ComponentDataPropertySheetQueryPagesFor( /* [in] */ CFaxComponentData * pCompData, /* [in] */ CFaxDataObject * lpDataObject);
// IExtendPropertySheet for IComponent
virtual HRESULT STDMETHODCALLTYPE ComponentPropertySheetCreatePropertyPages( /* [in] */ CFaxComponent * pComp, /* [in] */ LPPROPERTYSHEETCALLBACK lpProvider, /* [in] */ LONG_PTR handle, /* [in] */ CFaxDataObject * lpIDataObject);
virtual HRESULT STDMETHODCALLTYPE ComponentPropertySheetQueryPagesFor( /* [in] */ CFaxComponent * pComp, /* [in] */ CFaxDataObject * lpDataObject);
// ***********************************************************
// ExtendContextMenu event handlers - default implementations
// we need seperate versions for IComponentData and IComponent
// in your code if you want differing behavior
// in the scope and results panes.
//
// You can simply delegate one implementation to the other
// if you want the same behavior in both panes
// IExtendContextMenu for IComponentData
virtual HRESULT STDMETHODCALLTYPE ComponentDataContextMenuAddMenuItems( /* [in] */ CFaxComponentData * pCompData, /* [in] */ CFaxDataObject * piDataObject, /* [in] */ LPCONTEXTMENUCALLBACK piCallback, /* [out][in] */ long __RPC_FAR *pInsertionAllowed);
virtual HRESULT STDMETHODCALLTYPE ComponentDataContextMenuCommand( /* [in] */ CFaxComponentData * pCompData, /* [in] */ long lCommandID, /* [in] */ CFaxDataObject * piDataObject);
// IExtendContextMenu for IComponent
virtual HRESULT STDMETHODCALLTYPE ComponentContextMenuAddMenuItems( /* [in] */ CFaxComponent * pComp, /* [in] */ CFaxDataObject * piDataObject, /* [in] */ LPCONTEXTMENUCALLBACK piCallback, /* [out][in] */ long __RPC_FAR *pInsertionAllowed);
virtual HRESULT STDMETHODCALLTYPE ComponentContextMenuCommand( /* [in] */ CFaxComponent * pComp, /* [in] */ long lCommandID, /* [in] */ CFaxDataObject * piDataObject);
// ***********************************************************
// IDataObject event handlers - default implementations
// do nothing
virtual HRESULT DataObjectRegisterFormats(); virtual HRESULT DataObjectGetDataHere( FORMATETC __RPC_FAR *pFormatEtc, IStream * pstm );
// *******************************************
// member functions
//
// these are implemented by the descendents of CInternalNode and define
// the behavior of the node.
// returns the GUID of this node type - MUST BE IMPLEMENTED
virtual const GUID * GetNodeGUID() = 0;
// returns the display name - MUST BE IMPLEMENTED
virtual const LPTSTR GetNodeDisplayName() = 0; virtual const LPTSTR GetNodeDescription(); // returns the cookie of the node - MUST BE IMPLEMENTED
virtual const LONG_PTR GetCookie() = 0;
// gets the right this pointer - MUST BE IMPLEMENTED
virtual CInternalNode * GetThis() = 0;
// returns the image indices - not required yet, but will be in the future
virtual const int GetNodeDisplayImage() { return IDI_NODEICON; } virtual const int GetNodeDisplayOpenImage() { return IDI_NODEICON; }
// sets the parent pointer
virtual void SetParentNode( CInternalNode * toSet) { m_pParentINode = toSet; } // gets the parent pointer
virtual CInternalNode * GetParentNode() { return m_pParentINode; }
// *****************************************************
// scope pane event handlers
// override these as necessary to handle console events
virtual HRESULT ScopeOnExpand(CFaxComponentData * pCompData, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ScopeOnDelete(CFaxComponentData * pCompData, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ScopeOnRename(CFaxComponentData * pCompData, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ScopeOnPropertyChange(CFaxComponentData * pCompData, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param);
// *****************************************************
// result pane event handlers
// override these as necessary to handle console events
virtual HRESULT ResultOnActivate(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnAddImages(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnButtonClick(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnClick(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnDoubleClick(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnDelete(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnExpand(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnMinimized(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnPropertyChange(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnQueryPaste(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnRemoveChildren(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnRename(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnSelect(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnShow(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param); virtual HRESULT ResultOnViewChange(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM arg, LPARAM param);
// *****************************************************
// Controlbar event handlers
// override these as necessary to handle control bar events
// for IComponent (Result pane nodes)
virtual HRESULT ControlBarOnBtnClick(CFaxComponent* pComp, CFaxDataObject * lpDataObject, LPARAM param ); virtual HRESULT ControlBarOnSelect(CFaxComponent* pComp, LPARAM arg, CFaxDataObject * lpDataObject ); // for IComponentData (Scope pane nodes)
virtual HRESULT ControlBarOnBtnClick2(CFaxComponentData* pCompData, CFaxDataObject * lpDataObject, LPARAM param ); virtual HRESULT ControlBarOnSelect2(CFaxComponentData* pCompData, LPARAM arg, CFaxDataObject * lpDataObject );
public: CInternalNode * m_pParentINode; // my parent
CFaxComponentData * m_pCompData; // owning IComponentData
};
#endif
|