199 lines
10 KiB
C
199 lines
10 KiB
C
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
||
|
//
|
||
|
// File: ScopNdCb.h
|
||
|
//
|
||
|
// Contents:
|
||
|
//
|
||
|
// Classes:
|
||
|
//
|
||
|
// Functions:
|
||
|
//
|
||
|
// History: 12/31/1996 RaviR Created
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
|
||
|
|
||
|
#ifndef _MMC_SCOPNDCB_H_
|
||
|
#define _MMC_SCOPNDCB_H_
|
||
|
|
||
|
class CNode;
|
||
|
class CComponentData;
|
||
|
class CComponent;
|
||
|
|
||
|
class CNodeCallback : public INodeCallback, public CComObjectRoot
|
||
|
{
|
||
|
// Constructor/Destructor
|
||
|
public:
|
||
|
CNodeCallback();
|
||
|
~CNodeCallback();
|
||
|
|
||
|
public:
|
||
|
BEGIN_COM_MAP(CNodeCallback)
|
||
|
COM_INTERFACE_ENTRY(INodeCallback)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CNodeCallback)
|
||
|
|
||
|
// COM interfaces
|
||
|
public:
|
||
|
// INodeCallback methods
|
||
|
STDMETHOD(Initialize)(IScopeTree* pIScopeTree);
|
||
|
STDMETHOD(GetImages)(HNODE hNode, int* iImage, int* iSelectedImage);
|
||
|
STDMETHOD(GetDisplayName)(HNODE hNode, tstring& strName);
|
||
|
STDMETHOD(GetWindowTitle)(HNODE hNode, tstring& strTitle);
|
||
|
STDMETHOD(GetDispInfo)(HNODE hNode, LV_ITEMW* plvi);
|
||
|
STDMETHOD(GetResultPane)(HNODE hNode, CResultViewType& rvt, GUID *pGuidTaskpadID);
|
||
|
STDMETHOD(RestoreResultView)(HNODE hNode, const CResultViewType& rvt);
|
||
|
STDMETHOD(GetState)(HNODE hNode, UINT* pnState);
|
||
|
STDMETHOD(Notify)(HNODE hNode, NCLBK_NOTIFY_TYPE event, LONG_PTR arg, LPARAM param);
|
||
|
STDMETHOD(GetMTNodeID)(HNODE hNode, MTNODEID* pnID);
|
||
|
STDMETHOD(GetNodeOwnerID)(HNODE hNode, COMPONENTID* pOwnerID);
|
||
|
STDMETHOD(GetNodeCookie)(HNODE hNode, MMC_COOKIE* pCookie);
|
||
|
STDMETHOD(IsTargetNodeOf)(HNODE hNode, HNODE hTestNode);
|
||
|
STDMETHOD(GetPath)(HNODE hNode, HNODE hRootNode, LPBYTE pbm_);
|
||
|
STDMETHOD(GetStaticParentID)(HNODE hNode, MTNODEID* pnID);
|
||
|
STDMETHOD(GetMTNode)(HNODE hNode, HMTNODE* phMTNode);
|
||
|
STDMETHOD(GetMTNodePath)(HNODE hNode, HMTNODE** pphMTNode, long* plLength);
|
||
|
STDMETHOD(SetResultItem) (HNODE hNode, HRESULTITEM hri);
|
||
|
STDMETHOD(GetResultItem) (HNODE hNode, HRESULTITEM* phri);
|
||
|
STDMETHOD(GetControl)( HNODE hNode, CLSID clsid, IUnknown **ppUnkControl);
|
||
|
STDMETHOD(SetControl)( HNODE hNode, CLSID clsid, IUnknown* pUnknown);
|
||
|
STDMETHOD(GetControl)( HNODE hNode, LPUNKNOWN pUnkOCX, IUnknown **ppUnkControl);
|
||
|
STDMETHOD(SetControl)( HNODE hNode, LPUNKNOWN pUnkOCX, IUnknown* pUnknown);
|
||
|
STDMETHOD(InitOCX)( HNODE hNode, IUnknown* pUnknown);
|
||
|
|
||
|
STDMETHOD(IsExpandable)(HNODE hNode);
|
||
|
STDMETHOD(GetConsoleVerb)(HNODE hNode, LPCONSOLEVERB* ppConsoleVerb);
|
||
|
STDMETHOD(GetDragDropDataObject)(HNODE hNode, BOOL bScope, BOOL bMultiSel,
|
||
|
MMC_COOKIE cookie, LPDATAOBJECT* ppDataObject,
|
||
|
bool& bCopyAllowed, bool& bMoveAllowed);
|
||
|
STDMETHOD(GetTaskEnumerator)(HNODE hNode, LPCOLESTR pszTaskGroup,
|
||
|
IEnumTASK** ppEnumTask);
|
||
|
STDMETHOD(GetListPadInfo)(HNODE hNode, IExtendTaskPad* pExtendTaskPad,
|
||
|
LPCOLESTR szTaskGroup,
|
||
|
MMC_ILISTPAD_INFO* pIListPadInfo);
|
||
|
STDMETHOD(UpdateWindowLayout)(LONG_PTR lViewData, long lToolbarsDisplayed);
|
||
|
STDMETHOD(AddCustomFolderImage)(HNODE hNode, IImageListPrivate* pImageList);
|
||
|
STDMETHOD(PreLoad)(HNODE hNode);
|
||
|
STDMETHOD(SetTaskPadList)(HNODE hNode, LPUNKNOWN pUnknown);
|
||
|
STDMETHOD(SetTaskpad) (HNODE hNodeSelected, GUID *pGuidTaskpad);
|
||
|
STDMETHOD(OnCustomizeView) (LONG_PTR lViewData);
|
||
|
STDMETHOD(SetViewSettings)(int nViewID, HBOOKMARK hbm, HVIEWSETTINGS hvs);
|
||
|
STDMETHOD(ExecuteScopeItemVerb)(MMC_CONSOLE_VERB verb, HNODE hNode, LPOLESTR lpszNewName);
|
||
|
STDMETHOD(ExecuteResultItemVerb)( MMC_CONSOLE_VERB verb, HNODE hNode, LPARAM lvData, LPOLESTR lpszNewName);
|
||
|
STDMETHOD(QueryCompDataDispatch)(PNODE pNode, PPDISPATCH ScopeNodeObject);
|
||
|
STDMETHOD(QueryComponentDispatch)(HNODE hNode, LPARAM lvData, /*[out]*/ PPDISPATCH SelectedObject);
|
||
|
STDMETHOD(CreateContextMenu)( PNODE pNode, HNODE hNode, PPCONTEXTMENU ppContextMenu);
|
||
|
STDMETHOD(CreateSelectionContextMenu)( HNODE hNodeScope, CContextMenuInfo *pContextInfo, PPCONTEXTMENU ppContextMenu);
|
||
|
// Implementation helpers for Column com object.
|
||
|
STDMETHOD(ShowColumn)(HNODE hNodeSelected, int iColIndex, bool bShow);
|
||
|
STDMETHOD(GetSortColumn)(HNODE hNodeSelected, int *piSortCol);
|
||
|
STDMETHOD(SetSortColumn)(HNODE hNodeSelected, int iSortCol, bool bAscending);
|
||
|
STDMETHOD(GetProperty)(HNODE hNodeScope, BOOL bForScopeItem, LPARAM resultItemParam, BSTR bstrPropertyName, PBSTR pbstrPropertyValue);
|
||
|
STDMETHOD(GetNodetypeForListItem)(HNODE hNodeScope, BOOL bForScopeItem, LPARAM resultItemParam, PBSTR pbstrNodetype);
|
||
|
STDMETHOD(GetNodeViewExtensions)(/*[in]*/ HNODE hNodeScope, /*[out]*/ CViewExtInsertIterator it);
|
||
|
STDMETHOD(SaveColumnInfoList) (/*[in]*/HNODE hNode, /*[in]*/const CColumnInfoList& columnsList);
|
||
|
STDMETHOD(GetPersistedColumnInfoList) (/*[in]*/HNODE hNode, /*[in]*/CColumnInfoList *pColumnsList);
|
||
|
STDMETHOD(DeletePersistedColumnData) (/*[in]*/HNODE hNode);
|
||
|
STDMETHOD(DoesAboutExist) (/*[in]*/HNODE hNode, /*[out]*/ bool *pbAboutExists);
|
||
|
STDMETHOD(ShowAboutInformation) (/*[in]*/HNODE hNode);
|
||
|
STDMETHOD(ExecuteShellCommand)(/*[in]*/ HNODE hNode, /*[in]*/ BSTR Command, /*[in]*/ BSTR Directory, /*[in]*/ BSTR Parameters, /*[in]*/ BSTR WindowState);
|
||
|
STDMETHOD(UpdatePasteButton)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie);
|
||
|
STDMETHOD(QueryPaste)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie, /*[in]*/ IDataObject *pDataObject, /*[out]*/bool& bPasteAllowed, /*[out]*/ bool& bCopyOperatationIsDefault);
|
||
|
STDMETHOD(QueryPasteFromClipboard)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie, /*[out]*/bool& bPasteAllowed);
|
||
|
STDMETHOD(Drop) (/*[in]*/HNODE hNode, /*[in]*/BOOL bScope, /*[in]*/LPARAM lCookie, /*[in]*/IDataObject *pDataObjectToPaste, /*[in]*/BOOL bIsDragOperationMove);
|
||
|
STDMETHOD(Paste) (/*[in]*/HNODE hNode, /*[in]*/BOOL bScope, /*[in]*/LPARAM lCookie);
|
||
|
STDMETHOD(QueryViewSettingsPersistor) (/*[out]*/IPersistStream** ppStream);
|
||
|
STDMETHOD(QueryViewSettingsPersistor) (/*[out]*/CXMLObject** ppXMLObject);
|
||
|
STDMETHOD(DocumentClosing) ();
|
||
|
STDMETHOD(GetSnapinName)(/*[in]*/HNODE hNode, /*[out]*/LPOLESTR* ppszName, /*[out]*/ bool& bValidName); // Given the node get the snapin name
|
||
|
STDMETHOD(IsDummySnapin)(/*[in]*/HNODE hNode, /*[out]*/bool& bDummySnapin); // Given the node see if it is dummy snapin
|
||
|
STDMETHOD(DoesStandardSnapinHelpExist)(/*[in]*/HNODE hNode, /*[out]*/bool& bStandardHelpExists); // See if the snapin supports standard MMC help (ISnapinHelp interfaces)
|
||
|
|
||
|
// snapin property access helpers
|
||
|
static SC ScGetProperty(IDataObject *pDataObject, BSTR bstrPropertyName, PBSTR pbstrPropertyValue);
|
||
|
static SC ScGetNodetype(IDataObject *pDataObject, PBSTR pbstrNodetype);
|
||
|
|
||
|
static SC ScExtractLVData(CNode* pNodeViewOwner,
|
||
|
BOOL bScopePaneSelected,
|
||
|
LONG_PTR lvData,
|
||
|
CNode** ppSelectedNode,
|
||
|
BOOL& bScopeItemSelected,
|
||
|
MMC_COOKIE& cookie);
|
||
|
SC ScInitializeTempVerbSetForMultiSel(CNode *pNode, CTemporaryVerbSet& tempVerb);
|
||
|
|
||
|
// Notify handlers
|
||
|
private:
|
||
|
void OnSelect(CNode* pNode, BOOL bSelect, SELECTIONINFO* pSelInfo);
|
||
|
void OnMultiSelect(CNode* pNode, BOOL bSelect);
|
||
|
void _OnMultiSelect(CNode* pNode, BOOL bSelect);
|
||
|
|
||
|
HRESULT OnActvate(CNode* pNode, LONG_PTR arg);
|
||
|
HRESULT OnDblClk(CNode* pNode, LONG_PTR lvData);
|
||
|
HRESULT OnContextMenu(CNode* pNode, LONG_PTR arg, LPARAM param);
|
||
|
HRESULT OnCutCopy(CNode* pNode, BOOL bScope, LPARAM param, BOOL bCut);
|
||
|
HRESULT OnDelete(CNode* pNode, BOOL bScope, LPARAM lvData);
|
||
|
HRESULT OnExpand(CNode* pNode, BOOL fExpand);
|
||
|
HRESULT OnExpanded(CNode* pNode);
|
||
|
HRESULT OnFindResultItem(CNode* pNode, RESULTFINDINFO* pFindInfo, LRESULT* pResult);
|
||
|
HRESULT OnMinimize(CNode* pNode, LONG_PTR arg);
|
||
|
HRESULT OnNewNodeUpdate(CNode* pNode, LONG_PTR lFlags);
|
||
|
HRESULT OnPrint(CNode* pNode, BOOL bScope, LPARAM lvData);
|
||
|
HRESULT OnProperties(CNode* pNode, BOOL bScope, LPARAM param);
|
||
|
HRESULT OnNewTaskpadFromHere(CNode* pNode);
|
||
|
HRESULT OnEditTaskpad(CNode* pNode);
|
||
|
HRESULT OnDeleteTaskpad(CNode *pNode);
|
||
|
HRESULT OnRefresh(CNode* pNode, BOOL bScope, LPARAM lvData);
|
||
|
HRESULT OnRename(CNode* pNode, SELECTIONINFO* pSelInfo, LPOLESTR pszNewName);
|
||
|
HRESULT OnScopeSelect(CNode* pNode, BOOL bSelect, SELECTIONINFO* pSelInfo);
|
||
|
HRESULT OnColumnClicked(CNode* pNode, LONG_PTR nCol);
|
||
|
HRESULT OnContextHelp(CNode* pNode, BOOL bScope, MMC_COOKIE cookie);
|
||
|
HRESULT OnSnapInHelp(CNode* pNode, BOOL bScope, MMC_COOKIE cookie);
|
||
|
HRESULT OnFilterChange(CNode* pNode, LONG_PTR Code, LPARAM nCol);
|
||
|
HRESULT OnFilterBtnClick(CNode* pNode, LONG_PTR nCol, LPRECT pRect);
|
||
|
HRESULT OnGetPrimaryTask(CNode* pNode, LPARAM param);
|
||
|
HRESULT OnGetHelpDoc(HELPDOCINFO* pHelpInfo, LPOLESTR* ppszHelpFile);
|
||
|
HRESULT OnHasHelpDoc(CNode* pNode);
|
||
|
HRESULT OnUpdateHelpDoc(HELPDOCINFO* pCurDocInfo, HELPDOCINFO* pNewDocInfo);
|
||
|
HRESULT OnDeleteHelpDoc(HELPDOCINFO* pHelpInfo);
|
||
|
|
||
|
// Helpers
|
||
|
private:
|
||
|
|
||
|
HRESULT _InitializeNode(CNode* pNode);
|
||
|
|
||
|
SC _ScQueryPaste (CNode *pNode, IDataObject *pTargetDataObject,
|
||
|
IDataObject *pSourceDataObject,
|
||
|
bool bCanSendMMCNQueryPaste2, bool& bPasteAllowed,
|
||
|
bool& bCopyOperatationIsDefault);
|
||
|
|
||
|
SC ScPaste (HNODE hNode, BOOL bScope, LPARAM lCookie,
|
||
|
IDataObject *pDataObjectToPaste, BOOL bDragDrop,
|
||
|
BOOL bIsDragOperationCut);
|
||
|
|
||
|
SC _ScPaste (CNode *pNode,
|
||
|
IDataObject *pTargetDataObject,
|
||
|
IDataObject *pSourceDataObject,
|
||
|
IDataObject **ppCutDataObject,
|
||
|
bool bCutOrMove);
|
||
|
|
||
|
SC _ScGetVerbState(CNode* pNode, MMC_CONSOLE_VERB verb, IDataObject* pDOSel,
|
||
|
BOOL bScopePane, LPARAM lResultCookie,
|
||
|
BOOL bMultiSelect, BOOL& bIsVerbSet);
|
||
|
|
||
|
CScopeTree* m_pCScopeTree;
|
||
|
CNode* m_pNodeUnderInit;
|
||
|
|
||
|
}; // CNodeCallback
|
||
|
|
||
|
|
||
|
IFramePrivate* GetIFramePrivateFromNode (CNode* pNode);
|
||
|
|
||
|
inline IFramePrivate* GetIFramePrivateFromNode (HNODE hNode)
|
||
|
{ return (GetIFramePrivateFromNode (CNode::FromHandle(hNode))); }
|
||
|
|
||
|
#endif // _MMC_SCOPNDCB_H_
|