//____________________________________________________________________________ // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: copypast.h // // Contents: // // Classes: // // Functions: // // History: 7/21/1997 RaviR Created //____________________________________________________________________________ // #ifndef COPYPAST_H__ #define COPYPAST_H__ /***************************************************************************\ * * CLASS: CMMCClipBoardDataObject * * PURPOSE: Implements IMMCClipboardDataObject - interface to data object * added by MMC to the clipboard, or used in DragDrop operation. * Also implements several methods for creating and initializing * the object. * * USAGE: Used in Cut, Copy, Paste and DragDrop operations. * Static members are used to create the object, then it is passed to OLE * Accessed via interface from the target ( same process or the external one) * \***************************************************************************/ class CMMCClipBoardDataObject : public IMMCClipboardDataObject, public CComObjectRoot { public: typedef std::vector CNodePtrArray; // destructor ~CMMCClipBoardDataObject(); BEGIN_COM_MAP(CMMCClipBoardDataObject) COM_INTERFACE_ENTRY(IMMCClipboardDataObject) COM_INTERFACE_ENTRY(IDataObject) END_COM_MAP() // IMMCClipboardDataObject methods STDMETHOD(GetSourceProcessId)( DWORD *pdwProcID ); STDMETHOD(GetAction) ( DATA_SOURCE_ACTION *peAction ); STDMETHOD(GetCount) ( DWORD *pdwCount ); STDMETHOD(GetDataObject) ( DWORD dwIndex, IDataObject **ppObject, DWORD *pdwFlags ); STDMETHOD(RemoveCutItems) ( DWORD dwIndex, IDataObject *pCutDataObject ); // IDataObject methods STDMETHOD(GetDataHere)(LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium); STDMETHOD(GetData)(LPFORMATETC lpFormatetcIn, LPSTGMEDIUM lpMedium); STDMETHOD(EnumFormatEtc)(DWORD dwDirection, LPENUMFORMATETC* ppEnumFormatEtc); STDMETHOD(QueryGetData)(LPFORMATETC lpFormatetc); // Not Implemented IDataObject methods STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC lpFormatetcIn, LPFORMATETC lpFormatetcOut) { return E_NOTIMPL; }; STDMETHOD(SetData)(LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium, BOOL bRelease) { return E_NOTIMPL; }; STDMETHOD(DAdvise)(LPFORMATETC lpFormatetc, DWORD advf,LPADVISESINK pAdvSink, LPDWORD pdwConnection) { return E_NOTIMPL; }; STDMETHOD(DUnadvise)(DWORD dwConnection) { return E_NOTIMPL; }; STDMETHOD(EnumDAdvise)(LPENUMSTATDATA* ppEnumAdvise) { return E_NOTIMPL; } public: // method to add data objects SC ScAddSnapinDataObject( const CNodePtrArray& nodes, IComponent *pComponent, IDataObject *pDataObject, bool bCopyEnabled, bool bCutEnabled ); static SC ScCreate( DATA_SOURCE_ACTION operation, CNode* pNode, bool bScope, bool bMultiSelect, LPARAM lvData, IMMCClipboardDataObject **ppMMCDataObject , bool& bContainsItems); // to remove going away snapins SC ScInvalidate( void ); private: // implementation helpers // returns DO of snapin if the object contains only one snapin SC ScGetSingleSnapinObject( IDataObject **ppDataObject ); // method to create the instance static SC ScCreateInstance(DATA_SOURCE_ACTION operation, CMMCClipBoardDataObject **ppRawObject, IMMCClipboardDataObject **ppInterface); // helper to get node's verb state static SC ScGetNodeCopyAndCutVerbs( CNode* pNode, IDataObject *pDataObject, bool bScopePane, LPARAM lvData, bool *pbCopyEnabled, bool *pbCutEnabled ); // method to add data objects for one item SC ScAddDataObjectForItem( CNode* pNode, bool bScopePane, LPARAM lvData, IComponent *pComponent, IDataObject *pDataObject, bool& bDataObjectAdded ); CLIPFORMAT GetWrapperCF(); private: // data DATA_SOURCE_ACTION m_eOperation; struct ObjectEntry { IDataObjectPtr spDataObject; // data IComponentPtr spComponent; // for Notification DWORD dwSnapinOptions; // copy/cut allowed }; std::vector m_SelectionObjects; bool m_bObjectValid; // valid to access any icluded data objects }; #endif // COPYPAST_H__