X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b0cf2597e252e52e2fb7942a79fe93b833275505..3717eeaf39f7145ab6d09a326dedb2c09b1219e8:/include/wx/msw/ole/droptgt.h?ds=sidebyside diff --git a/include/wx/msw/ole/droptgt.h b/include/wx/msw/ole/droptgt.h index cd9fbacfa6..7b65990922 100644 --- a/include/wx/msw/ole/droptgt.h +++ b/include/wx/msw/ole/droptgt.h @@ -1,111 +1,90 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: ole/droptgt.h +// Name: wx/msw/ole/droptgt.h // Purpose: declaration of the wxDropTarget class // Author: Vadim Zeitlin -// Modified by: +// Modified by: // Created: 06.03.98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -// ============================================================================ -// prolog -// ============================================================================ -#ifndef _OLEDROPTGT_H -#define _OLEDROPTGT_H +#ifndef _WX_OLEDROPTGT_H +#define _WX_OLEDROPTGT_H -#ifdef __GNUG__ -#pragma interface "droptgt.h" -#endif - -#if !USE_DRAG_AND_DROP - #error "You should #define USE_DRAG_AND_DROP to 1 to compile this file!" -#endif //WX_DRAG_DROP +#if wxUSE_DRAG_AND_DROP // ---------------------------------------------------------------------------- // forward declarations // ---------------------------------------------------------------------------- + class wxIDropTarget; +struct wxIDropTargetHelper; struct IDataObject; // ---------------------------------------------------------------------------- // An instance of the class wxDropTarget may be associated with any wxWindow // derived object via SetDropTarget() function. If this is done, the virtual // methods of wxDropTarget are called when something is dropped on the window. -// +// // Note that wxDropTarget is an abstract base class (ABC) and you should derive // your own class from it implementing pure virtual function in order to use it // (all of them, including protected ones which are called by the class itself) // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDropTarget + +class WXDLLIMPEXP_CORE wxDropTarget : public wxDropTargetBase { public: - // ctor & dtor - wxDropTarget(); - virtual ~wxDropTarget(); - - // normally called by wxWindow on window creation/destruction, but might be - // called `manually' as well. Register() returns true on success. - bool Register(WXHWND hwnd); - void Revoke(WXHWND hwnd); - - // do we accept this kind of data? - virtual bool IsAcceptedData(IDataObject *pIDataSource) const; - - // called when mouse enters/leaves the window: might be used to give - // some visual feedback to the user - virtual void OnEnter() { } - virtual void OnLeave() { } - - // this function is called when data is dropped. - // (x, y) are the coordinates of the drop - virtual bool OnDrop(long x, long y, const void *pData) = 0; - -protected: - // Override these to indicate what kind of data you support: the first - // format to which data can be converted is used. The classes below show - // how it can be done in the simplest cases. - // how many different (clipboard) formats do you support? - virtual size_t GetFormatCount() const = 0; - // return the n-th supported format - virtual wxDataFormat GetFormat(size_t n) const = 0; + // ctor & dtor + wxDropTarget(wxDataObject *dataObject = NULL); + virtual ~wxDropTarget(); + + // normally called by wxWindow on window creation/destruction, but might be + // called `manually' as well. Register() returns true on success. + bool Register(WXHWND hwnd); + void Revoke(WXHWND hwnd); + + // provide default implementation for base class pure virtuals + virtual bool OnDrop(wxCoord x, wxCoord y); + virtual bool GetData(); + + // Can only be called during OnXXX methods. + wxDataFormat GetMatchingPair(); + + // implementation only from now on + // ------------------------------- + + // do we accept this kind of data? + bool MSWIsAcceptedData(IDataObject *pIDataSource) const; + + // give us the data source from IDropTarget::Drop() - this is later used by + // GetData() when it's called from inside OnData() + void MSWSetDataSource(IDataObject *pIDataSource); + + // These functions take care of all things necessary to support native drag + // images. + // + // {Init,End}DragImageSupport() are called during Register/Revoke, + // UpdateDragImageOnXXX() functions are called on the corresponding drop + // target events. + void MSWInitDragImageSupport(); + void MSWEndDragImageSupport(); + void MSWUpdateDragImageOnData(wxCoord x, wxCoord y, wxDragResult res); + void MSWUpdateDragImageOnDragOver(wxCoord x, wxCoord y, wxDragResult res); + void MSWUpdateDragImageOnEnter(wxCoord x, wxCoord y, wxDragResult res); + void MSWUpdateDragImageOnLeave(); private: - wxIDropTarget *m_pIDropTarget; // the pointer to COM interface -}; + // helper used by IsAcceptedData() and GetData() + wxDataFormat MSWGetSupportedFormat(IDataObject *pIDataSource) const; -// ---------------------------------------------------------------------------- -// A simple wxDropTarget derived class for text data: you only need to -// override OnDropText() to get something working -// ---------------------------------------------------------------------------- -class WXDLLEXPORT wxTextDropTarget : public wxDropTarget -{ -public: - virtual bool OnDrop(long x, long y, const void *pData); - virtual bool OnDropText(long x, long y, const char *psz) = 0; + wxIDropTarget *m_pIDropTarget; // the pointer to our COM interface + IDataObject *m_pIDataSource; // the pointer to the source data object + wxIDropTargetHelper *m_dropTargetHelper; // the drop target helper -protected: - virtual size_t GetFormatCount() const; - virtual wxDataFormat GetFormat(size_t n) const; + wxDECLARE_NO_COPY_CLASS(wxDropTarget); }; -// ---------------------------------------------------------------------------- -// A drop target which accepts files (dragged from File Manager or Explorer) -// ---------------------------------------------------------------------------- -class WXDLLEXPORT wxFileDropTarget : public wxDropTarget -{ -public: - virtual bool OnDrop(long x, long y, const void *pData); - - // params: the number of files and the array of file names - virtual bool OnDropFiles(long x, long y, - size_t nFiles, const char * const aszFiles[]) = 0; - -protected: - virtual size_t GetFormatCount() const; - virtual wxDataFormat GetFormat(size_t n) const; -}; +#endif //wxUSE_DRAG_AND_DROP -// ============================================================================ -#endif //_OLEDROPTGT_H +#endif //_WX_OLEDROPTGT_H