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.
198 lines
10 KiB
198 lines
10 KiB
/*
|
|
* component.hxx
|
|
*
|
|
*
|
|
* Copyright (c) 1998-1999 Microsoft Corporation
|
|
*
|
|
* PURPOSE: Defines the CComponent class.
|
|
*
|
|
*
|
|
* OWNER: ptousig
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// -----------------------------------------------------------------------------
|
|
// -----------------------------------------------------------------------------
|
|
// CComponent
|
|
//
|
|
// This is the "view" of a snapin. One of these is created for each window in a
|
|
// console.
|
|
//
|
|
class CComponent : public IComponent2,
|
|
public IExtendContextMenu,
|
|
public IExtendPropertySheet,
|
|
public IPersistStreamInit,
|
|
public IResultOwnerData,
|
|
public IResultDataCompareEx,
|
|
public CComObjectRoot
|
|
{
|
|
BEGIN_COM_MAP(CComponent)
|
|
COM_INTERFACE_ENTRY(IComponent)
|
|
COM_INTERFACE_ENTRY(IExtendContextMenu)
|
|
COM_INTERFACE_ENTRY(IExtendPropertySheet)
|
|
COM_INTERFACE_ENTRY(IPersistStreamInit)
|
|
COM_INTERFACE_ENTRY(IResultOwnerData)
|
|
COM_INTERFACE_ENTRY(IResultDataCompareEx)
|
|
COM_INTERFACE_ENTRY_FUNC(IID_IComponent2, 0 /*dw*/, QueryIComponent2)
|
|
END_COM_MAP()
|
|
|
|
DECLARE_NOT_AGGREGATABLE(CComponent);
|
|
|
|
public:
|
|
CComponent(void);
|
|
virtual ~CComponent(void);
|
|
|
|
//
|
|
// Accessors
|
|
//
|
|
inline CBaseSnapin * Psnapin(void) { return m_pComponentData->Psnapin();}
|
|
inline const tstring& StrSnapinClassName(void) { return Psnapin()->Psnapininfo()->StrClassName();}
|
|
inline IConsoleVerb * IpConsoleVerb(void) { return m_ipConsoleVerb;}
|
|
inline IHeaderCtrl * IpHeaderCtrl(void) { return m_ipHeaderCtrl;}
|
|
inline IColumnData * IpColumnData(void) { return m_ipColumnDataPtr;}
|
|
inline IResultData * IpResultData(void) { return m_ipResultData;}
|
|
inline IConsole * IpConsole(void) { return m_ipConsole;}
|
|
inline IImageList * IpImageList(void) { return m_ipImageList;}
|
|
inline IPropertySheetProvider * IpPropertySheetProvider(void) { return m_ipPropertySheetProvider;}
|
|
inline CComponentData * PComponentData(void) { return m_pComponentData;}
|
|
inline CBaseSnapinItem * PitemScopeSelected(void) { return m_pitemScopeSelected;}
|
|
inline void SetItemScopeSelected(CBaseSnapinItem * pitem) { m_pitemScopeSelected = pitem;}
|
|
BOOL FVirtualResultsPane(void);
|
|
void SetComponentData(CComponentData *pComponentData);
|
|
|
|
//
|
|
// Shortcuts
|
|
//
|
|
CBaseSnapinItem * Pitem(LPDATAOBJECT lpDataObject = NULL, HSCOPEITEM hscopeitem = 0, long cookie = 0);
|
|
inline IConsoleNameSpace * IpConsoleNameSpace(void) { return PComponentData()->IpConsoleNameSpace();}
|
|
|
|
// This function determines whether or not IComponent2 is exposed
|
|
static HRESULT WINAPI QueryIComponent2(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);
|
|
|
|
public:
|
|
// "Sc" versions of IComponent interface
|
|
virtual SC ScInitialize(LPCONSOLE lpConsole);
|
|
virtual SC ScNotify(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, long arg, long param);
|
|
virtual SC ScDestroy(void);
|
|
virtual SC ScGetResultViewType(long cookie, LPOLESTR *ppViewType, long *pViewOptions);
|
|
virtual SC ScQueryDataObject(long cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject);
|
|
virtual SC ScGetDisplayInfo(LPRESULTDATAITEM pResultItem);
|
|
|
|
// "Sc" versions of IComponent2 interface
|
|
virtual SC ScQueryDispatch(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDISPATCH* ppDispatch);
|
|
virtual SC ScGetResultViewType2(MMC_COOKIE cookie, PRESULT_VIEW_TYPE_INFO pResultViewType);
|
|
virtual SC ScRestoreResultView(MMC_COOKIE cookie, RESULT_VIEW_TYPE_INFO* pResultViewType);
|
|
|
|
|
|
// "Sc" version of IExtendContextMenu interface
|
|
virtual SC ScCommand(long nCommandID, LPDATAOBJECT pDataObject);
|
|
|
|
// "Sc" version of IExtendPropertySheet interface
|
|
virtual SC ScCreatePropertyPages(LPPROPERTYSHEETCALLBACK ipPropertySheetCallback, long handle, LPDATAOBJECT pDataObject);
|
|
virtual SC ScQueryPagesFor(LPDATAOBJECT lpDataObject);
|
|
|
|
// "Sc" version of IPersistStreamInit interface
|
|
virtual SC ScIsDirty(void);
|
|
virtual SC ScLoad(IStream *pstream);
|
|
virtual SC ScSave(IStream *pstream, BOOL fClearDirty);
|
|
|
|
// "Sc" version of IResultOwnerData interface
|
|
virtual SC ScCacheHint(INT nStartIndex, INT nEndIndex);
|
|
virtual SC ScSortItems(INT nColumn, DWORD dwSortOptions, long lUserParam);
|
|
virtual SC ScFindItem(LPRESULTFINDINFO pFindinfo, INT * pnFoundIndex);
|
|
|
|
// Multiselect support - know if our component is part of a multiselect operation
|
|
virtual CBaseMultiSelectSnapinItem ** PpMultiSelectSnapinItem() { return &m_pMultiSelectSnapinItem;}
|
|
|
|
|
|
public:
|
|
//
|
|
// Notifications
|
|
//
|
|
virtual SC ScOnActivate (LPDATAOBJECT lpDataObject, BOOL fActivate);
|
|
virtual SC ScOnAddImages (LPDATAOBJECT lpDataObject, IImageList *ipImageList, HSCOPEITEM hscopeitem);
|
|
virtual SC ScOnButtonClick (LPDATAOBJECT lpDataObject, MMC_CONSOLE_VERB mcvVerb);
|
|
virtual SC ScOnContextHelp (LPDATAOBJECT lpDataObject);
|
|
virtual SC ScOnDoubleClick (LPDATAOBJECT lpDataObject);
|
|
virtual SC ScOnDelete (LPDATAOBJECT lpDataObject);
|
|
virtual SC ScOnListPad (LPDATAOBJECT lpDataObject, BOOL fAttach);
|
|
virtual SC ScOnRefresh (LPDATAOBJECT lpDataObject, HSCOPEITEM hscopeitem);
|
|
virtual SC ScOnSelect (LPDATAOBJECT lpDataObject, BOOL fScope, BOOL fSelect);
|
|
virtual SC ScOnShow (LPDATAOBJECT lpDataObject, BOOL fSelect, HSCOPEITEM hscopeitem);
|
|
virtual SC ScOnViewChange (LPDATAOBJECT lpDataObject, long data, long hint);
|
|
virtual SC ScOnInitOCX (LPDATAOBJECT lpDataObject, LPUNKNOWN lpOCXUnknown);
|
|
|
|
public:
|
|
//
|
|
// Handlers for the various types of view changes.
|
|
//
|
|
virtual SC ScOnViewChangeDeleteItems (CBaseSnapinItem *pitem);
|
|
virtual SC ScOnViewChangeDeleteSingleItem (CBaseSnapinItem *pitem);
|
|
virtual SC ScOnViewChangeInsertItem (CBaseSnapinItem *pitem);
|
|
virtual SC ScOnViewChangeUpdateItem (CBaseSnapinItem *pitem);
|
|
virtual SC ScOnViewChangeUpdateResultItems (CBaseSnapinItem *pitem, BOOL fSelect);
|
|
virtual SC ScOnViewChangeUpdateDescriptionBar (CBaseSnapinItem *pitem);
|
|
virtual SC ScOnViewChangeHint (CBaseSnapinItem *pitem, long hint);
|
|
|
|
public:
|
|
// IComponent interface
|
|
STDMETHOD(Initialize) (LPCONSOLE lpConsole);
|
|
STDMETHOD(Notify) (LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, long arg, long param);
|
|
STDMETHOD(Destroy) (long cookie);
|
|
STDMETHOD(GetResultViewType) (long cookie, LPOLESTR* ppViewType, long* pViewOptions);
|
|
STDMETHOD(QueryDataObject) (long cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject);
|
|
STDMETHOD(GetDisplayInfo) (RESULTDATAITEM* pResultDataItem);
|
|
STDMETHOD(CompareObjects) (LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
|
|
|
|
// IComponent2 interface
|
|
STDMETHOD(QueryDispatch) (MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDISPATCH* ppDispatch);
|
|
STDMETHOD(GetResultViewType2) (MMC_COOKIE cookie, PRESULT_VIEW_TYPE_INFO pResultViewType);
|
|
STDMETHOD(RestoreResultView) (MMC_COOKIE cookie, RESULT_VIEW_TYPE_INFO* pResultViewType);
|
|
|
|
// IExtendContextMenu interface
|
|
STDMETHOD(AddMenuItems) (LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK ipContextMenuCallback, long *pInsertionAllowed);
|
|
STDMETHOD(Command) (long nCommandID, LPDATAOBJECT pDataObject);
|
|
|
|
// IExtendPropertySheet interface
|
|
STDMETHOD(CreatePropertyPages) (LPPROPERTYSHEETCALLBACK lpProvider, long handle, LPDATAOBJECT lpDataObject);
|
|
STDMETHOD(QueryPagesFor) (LPDATAOBJECT lpDataObject);
|
|
|
|
// IPersistStreamInit interface
|
|
STDMETHOD(GetClassID) (CLSID *pclsid);
|
|
STDMETHOD(IsDirty) (void);
|
|
STDMETHOD(Load) (IStream *pstream);
|
|
STDMETHOD(Save) (IStream *pstream, BOOL fClearDirty);
|
|
STDMETHOD(GetSizeMax) (ULARGE_INTEGER *pcbSize);
|
|
STDMETHOD(InitNew) (void);
|
|
|
|
// IResultOwnerData interface
|
|
STDMETHOD(CacheHint) (int nStartIndex, int nEndIndex);
|
|
STDMETHOD(SortItems) (int nColumn, DWORD dwSortOptions, long lUserParam);
|
|
STDMETHOD(FindItem) (LPRESULTFINDINFO pFindinfo, int *pnFoundIndex);
|
|
|
|
// IResultDataCompareEx interface
|
|
STDMETHOD(Compare) (RDCOMPARE * prdc, int * pnResult);
|
|
|
|
private:
|
|
CComponentData * m_pComponentData;
|
|
|
|
// Interface pointers
|
|
IConsolePtr m_ipConsole;
|
|
IHeaderCtrlPtr m_ipHeaderCtrl;
|
|
IColumnDataPtr m_ipColumnDataPtr;
|
|
IResultDataPtr m_ipResultData;
|
|
IPropertySheetProviderPtr m_ipPropertySheetProvider;
|
|
IConsoleVerbPtr m_ipConsoleVerb;
|
|
IImageListPtr m_ipImageList;
|
|
|
|
// The currently selected scope item in this view.
|
|
// This is the node that is in control of the result pane.
|
|
// Mostly used to forward calls to the owner of a virtual result pane.
|
|
CBaseSnapinItem * m_pitemScopeSelected;
|
|
|
|
// Pointer to a multiselect snapin item if this component is part of a multiselect operation
|
|
CBaseMultiSelectSnapinItem * m_pMultiSelectSnapinItem;
|
|
};
|
|
|