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.
 
 
 
 
 
 

198 lines
10 KiB

//____________________________________________________________________________
//
// 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_