]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/ole/droptgt.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / msw / ole / droptgt.h
index cf990ef5a0f558d124e0ba6ad9fea55023471e5e..4cb9d3907d4ff68d55c3c95e48781c73559e87b2 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
-// 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 <zeitlin@dptmaths.ens-cachan.fr>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-// ============================================================================
-// prolog
-// ============================================================================
 #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  //_WX_OLEDROPTGT_H