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

  1. //____________________________________________________________________________
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1996 - 1999
  5. //
  6. // File: ScopNdCb.h
  7. //
  8. // Contents:
  9. //
  10. // Classes:
  11. //
  12. // Functions:
  13. //
  14. // History: 12/31/1996 RaviR Created
  15. //____________________________________________________________________________
  16. //
  17. #ifndef _MMC_SCOPNDCB_H_
  18. #define _MMC_SCOPNDCB_H_
  19. class CNode;
  20. class CComponentData;
  21. class CComponent;
  22. class CNodeCallback : public INodeCallback, public CComObjectRoot
  23. {
  24. // Constructor/Destructor
  25. public:
  26. CNodeCallback();
  27. ~CNodeCallback();
  28. public:
  29. BEGIN_COM_MAP(CNodeCallback)
  30. COM_INTERFACE_ENTRY(INodeCallback)
  31. END_COM_MAP()
  32. DECLARE_NOT_AGGREGATABLE(CNodeCallback)
  33. // COM interfaces
  34. public:
  35. // INodeCallback methods
  36. STDMETHOD(Initialize)(IScopeTree* pIScopeTree);
  37. STDMETHOD(GetImages)(HNODE hNode, int* iImage, int* iSelectedImage);
  38. STDMETHOD(GetDisplayName)(HNODE hNode, tstring& strName);
  39. STDMETHOD(GetWindowTitle)(HNODE hNode, tstring& strTitle);
  40. STDMETHOD(GetDispInfo)(HNODE hNode, LV_ITEMW* plvi);
  41. STDMETHOD(GetResultPane)(HNODE hNode, CResultViewType& rvt, GUID *pGuidTaskpadID);
  42. STDMETHOD(RestoreResultView)(HNODE hNode, const CResultViewType& rvt);
  43. STDMETHOD(GetState)(HNODE hNode, UINT* pnState);
  44. STDMETHOD(Notify)(HNODE hNode, NCLBK_NOTIFY_TYPE event, LONG_PTR arg, LPARAM param);
  45. STDMETHOD(GetMTNodeID)(HNODE hNode, MTNODEID* pnID);
  46. STDMETHOD(GetNodeOwnerID)(HNODE hNode, COMPONENTID* pOwnerID);
  47. STDMETHOD(GetNodeCookie)(HNODE hNode, MMC_COOKIE* pCookie);
  48. STDMETHOD(IsTargetNodeOf)(HNODE hNode, HNODE hTestNode);
  49. STDMETHOD(GetPath)(HNODE hNode, HNODE hRootNode, LPBYTE pbm_);
  50. STDMETHOD(GetStaticParentID)(HNODE hNode, MTNODEID* pnID);
  51. STDMETHOD(GetMTNode)(HNODE hNode, HMTNODE* phMTNode);
  52. STDMETHOD(GetMTNodePath)(HNODE hNode, HMTNODE** pphMTNode, long* plLength);
  53. STDMETHOD(SetResultItem) (HNODE hNode, HRESULTITEM hri);
  54. STDMETHOD(GetResultItem) (HNODE hNode, HRESULTITEM* phri);
  55. STDMETHOD(GetControl)( HNODE hNode, CLSID clsid, IUnknown **ppUnkControl);
  56. STDMETHOD(SetControl)( HNODE hNode, CLSID clsid, IUnknown* pUnknown);
  57. STDMETHOD(GetControl)( HNODE hNode, LPUNKNOWN pUnkOCX, IUnknown **ppUnkControl);
  58. STDMETHOD(SetControl)( HNODE hNode, LPUNKNOWN pUnkOCX, IUnknown* pUnknown);
  59. STDMETHOD(InitOCX)( HNODE hNode, IUnknown* pUnknown);
  60. STDMETHOD(IsExpandable)(HNODE hNode);
  61. STDMETHOD(GetConsoleVerb)(HNODE hNode, LPCONSOLEVERB* ppConsoleVerb);
  62. STDMETHOD(GetDragDropDataObject)(HNODE hNode, BOOL bScope, BOOL bMultiSel,
  63. MMC_COOKIE cookie, LPDATAOBJECT* ppDataObject,
  64. bool& bCopyAllowed, bool& bMoveAllowed);
  65. STDMETHOD(GetTaskEnumerator)(HNODE hNode, LPCOLESTR pszTaskGroup,
  66. IEnumTASK** ppEnumTask);
  67. STDMETHOD(GetListPadInfo)(HNODE hNode, IExtendTaskPad* pExtendTaskPad,
  68. LPCOLESTR szTaskGroup,
  69. MMC_ILISTPAD_INFO* pIListPadInfo);
  70. STDMETHOD(UpdateWindowLayout)(LONG_PTR lViewData, long lToolbarsDisplayed);
  71. STDMETHOD(AddCustomFolderImage)(HNODE hNode, IImageListPrivate* pImageList);
  72. STDMETHOD(PreLoad)(HNODE hNode);
  73. STDMETHOD(SetTaskPadList)(HNODE hNode, LPUNKNOWN pUnknown);
  74. STDMETHOD(SetTaskpad) (HNODE hNodeSelected, GUID *pGuidTaskpad);
  75. STDMETHOD(OnCustomizeView) (LONG_PTR lViewData);
  76. STDMETHOD(SetViewSettings)(int nViewID, HBOOKMARK hbm, HVIEWSETTINGS hvs);
  77. STDMETHOD(ExecuteScopeItemVerb)(MMC_CONSOLE_VERB verb, HNODE hNode, LPOLESTR lpszNewName);
  78. STDMETHOD(ExecuteResultItemVerb)( MMC_CONSOLE_VERB verb, HNODE hNode, LPARAM lvData, LPOLESTR lpszNewName);
  79. STDMETHOD(QueryCompDataDispatch)(PNODE pNode, PPDISPATCH ScopeNodeObject);
  80. STDMETHOD(QueryComponentDispatch)(HNODE hNode, LPARAM lvData, /*[out]*/ PPDISPATCH SelectedObject);
  81. STDMETHOD(CreateContextMenu)( PNODE pNode, HNODE hNode, PPCONTEXTMENU ppContextMenu);
  82. STDMETHOD(CreateSelectionContextMenu)( HNODE hNodeScope, CContextMenuInfo *pContextInfo, PPCONTEXTMENU ppContextMenu);
  83. // Implementation helpers for Column com object.
  84. STDMETHOD(ShowColumn)(HNODE hNodeSelected, int iColIndex, bool bShow);
  85. STDMETHOD(GetSortColumn)(HNODE hNodeSelected, int *piSortCol);
  86. STDMETHOD(SetSortColumn)(HNODE hNodeSelected, int iSortCol, bool bAscending);
  87. STDMETHOD(GetProperty)(HNODE hNodeScope, BOOL bForScopeItem, LPARAM resultItemParam, BSTR bstrPropertyName, PBSTR pbstrPropertyValue);
  88. STDMETHOD(GetNodetypeForListItem)(HNODE hNodeScope, BOOL bForScopeItem, LPARAM resultItemParam, PBSTR pbstrNodetype);
  89. STDMETHOD(GetNodeViewExtensions)(/*[in]*/ HNODE hNodeScope, /*[out]*/ CViewExtInsertIterator it);
  90. STDMETHOD(SaveColumnInfoList) (/*[in]*/HNODE hNode, /*[in]*/const CColumnInfoList& columnsList);
  91. STDMETHOD(GetPersistedColumnInfoList) (/*[in]*/HNODE hNode, /*[in]*/CColumnInfoList *pColumnsList);
  92. STDMETHOD(DeletePersistedColumnData) (/*[in]*/HNODE hNode);
  93. STDMETHOD(DoesAboutExist) (/*[in]*/HNODE hNode, /*[out]*/ bool *pbAboutExists);
  94. STDMETHOD(ShowAboutInformation) (/*[in]*/HNODE hNode);
  95. STDMETHOD(ExecuteShellCommand)(/*[in]*/ HNODE hNode, /*[in]*/ BSTR Command, /*[in]*/ BSTR Directory, /*[in]*/ BSTR Parameters, /*[in]*/ BSTR WindowState);
  96. STDMETHOD(UpdatePasteButton)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie);
  97. STDMETHOD(QueryPaste)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie, /*[in]*/ IDataObject *pDataObject, /*[out]*/bool& bPasteAllowed, /*[out]*/ bool& bCopyOperatationIsDefault);
  98. STDMETHOD(QueryPasteFromClipboard)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie, /*[out]*/bool& bPasteAllowed);
  99. STDMETHOD(Drop) (/*[in]*/HNODE hNode, /*[in]*/BOOL bScope, /*[in]*/LPARAM lCookie, /*[in]*/IDataObject *pDataObjectToPaste, /*[in]*/BOOL bIsDragOperationMove);
  100. STDMETHOD(Paste) (/*[in]*/HNODE hNode, /*[in]*/BOOL bScope, /*[in]*/LPARAM lCookie);
  101. STDMETHOD(QueryViewSettingsPersistor) (/*[out]*/IPersistStream** ppStream);
  102. STDMETHOD(QueryViewSettingsPersistor) (/*[out]*/CXMLObject** ppXMLObject);
  103. STDMETHOD(DocumentClosing) ();
  104. STDMETHOD(GetSnapinName)(/*[in]*/HNODE hNode, /*[out]*/LPOLESTR* ppszName, /*[out]*/ bool& bValidName); // Given the node get the snapin name
  105. STDMETHOD(IsDummySnapin)(/*[in]*/HNODE hNode, /*[out]*/bool& bDummySnapin); // Given the node see if it is dummy snapin
  106. STDMETHOD(DoesStandardSnapinHelpExist)(/*[in]*/HNODE hNode, /*[out]*/bool& bStandardHelpExists); // See if the snapin supports standard MMC help (ISnapinHelp interfaces)
  107. // snapin property access helpers
  108. static SC ScGetProperty(IDataObject *pDataObject, BSTR bstrPropertyName, PBSTR pbstrPropertyValue);
  109. static SC ScGetNodetype(IDataObject *pDataObject, PBSTR pbstrNodetype);
  110. static SC ScExtractLVData(CNode* pNodeViewOwner,
  111. BOOL bScopePaneSelected,
  112. LONG_PTR lvData,
  113. CNode** ppSelectedNode,
  114. BOOL& bScopeItemSelected,
  115. MMC_COOKIE& cookie);
  116. SC ScInitializeTempVerbSetForMultiSel(CNode *pNode, CTemporaryVerbSet& tempVerb);
  117. // Notify handlers
  118. private:
  119. void OnSelect(CNode* pNode, BOOL bSelect, SELECTIONINFO* pSelInfo);
  120. void OnMultiSelect(CNode* pNode, BOOL bSelect);
  121. void _OnMultiSelect(CNode* pNode, BOOL bSelect);
  122. HRESULT OnActvate(CNode* pNode, LONG_PTR arg);
  123. HRESULT OnDblClk(CNode* pNode, LONG_PTR lvData);
  124. HRESULT OnContextMenu(CNode* pNode, LONG_PTR arg, LPARAM param);
  125. HRESULT OnCutCopy(CNode* pNode, BOOL bScope, LPARAM param, BOOL bCut);
  126. HRESULT OnDelete(CNode* pNode, BOOL bScope, LPARAM lvData);
  127. HRESULT OnExpand(CNode* pNode, BOOL fExpand);
  128. HRESULT OnExpanded(CNode* pNode);
  129. HRESULT OnFindResultItem(CNode* pNode, RESULTFINDINFO* pFindInfo, LRESULT* pResult);
  130. HRESULT OnMinimize(CNode* pNode, LONG_PTR arg);
  131. HRESULT OnNewNodeUpdate(CNode* pNode, LONG_PTR lFlags);
  132. HRESULT OnPrint(CNode* pNode, BOOL bScope, LPARAM lvData);
  133. HRESULT OnProperties(CNode* pNode, BOOL bScope, LPARAM param);
  134. HRESULT OnNewTaskpadFromHere(CNode* pNode);
  135. HRESULT OnEditTaskpad(CNode* pNode);
  136. HRESULT OnDeleteTaskpad(CNode *pNode);
  137. HRESULT OnRefresh(CNode* pNode, BOOL bScope, LPARAM lvData);
  138. HRESULT OnRename(CNode* pNode, SELECTIONINFO* pSelInfo, LPOLESTR pszNewName);
  139. HRESULT OnScopeSelect(CNode* pNode, BOOL bSelect, SELECTIONINFO* pSelInfo);
  140. HRESULT OnColumnClicked(CNode* pNode, LONG_PTR nCol);
  141. HRESULT OnContextHelp(CNode* pNode, BOOL bScope, MMC_COOKIE cookie);
  142. HRESULT OnSnapInHelp(CNode* pNode, BOOL bScope, MMC_COOKIE cookie);
  143. HRESULT OnFilterChange(CNode* pNode, LONG_PTR Code, LPARAM nCol);
  144. HRESULT OnFilterBtnClick(CNode* pNode, LONG_PTR nCol, LPRECT pRect);
  145. HRESULT OnGetPrimaryTask(CNode* pNode, LPARAM param);
  146. HRESULT OnGetHelpDoc(HELPDOCINFO* pHelpInfo, LPOLESTR* ppszHelpFile);
  147. HRESULT OnHasHelpDoc(CNode* pNode);
  148. HRESULT OnUpdateHelpDoc(HELPDOCINFO* pCurDocInfo, HELPDOCINFO* pNewDocInfo);
  149. HRESULT OnDeleteHelpDoc(HELPDOCINFO* pHelpInfo);
  150. // Helpers
  151. private:
  152. HRESULT _InitializeNode(CNode* pNode);
  153. SC _ScQueryPaste (CNode *pNode, IDataObject *pTargetDataObject,
  154. IDataObject *pSourceDataObject,
  155. bool bCanSendMMCNQueryPaste2, bool& bPasteAllowed,
  156. bool& bCopyOperatationIsDefault);
  157. SC ScPaste (HNODE hNode, BOOL bScope, LPARAM lCookie,
  158. IDataObject *pDataObjectToPaste, BOOL bDragDrop,
  159. BOOL bIsDragOperationCut);
  160. SC _ScPaste (CNode *pNode,
  161. IDataObject *pTargetDataObject,
  162. IDataObject *pSourceDataObject,
  163. IDataObject **ppCutDataObject,
  164. bool bCutOrMove);
  165. SC _ScGetVerbState(CNode* pNode, MMC_CONSOLE_VERB verb, IDataObject* pDOSel,
  166. BOOL bScopePane, LPARAM lResultCookie,
  167. BOOL bMultiSelect, BOOL& bIsVerbSet);
  168. CScopeTree* m_pCScopeTree;
  169. CNode* m_pNodeUnderInit;
  170. }; // CNodeCallback
  171. IFramePrivate* GetIFramePrivateFromNode (CNode* pNode);
  172. inline IFramePrivate* GetIFramePrivateFromNode (HNODE hNode)
  173. { return (GetIFramePrivateFromNode (CNode::FromHandle(hNode))); }
  174. #endif // _MMC_SCOPNDCB_H_