]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/ole/droptgt.h
Implement deep copy of wxBitmapRefData
[wxWidgets.git] / include / wx / msw / ole / droptgt.h
index d623116b315e251f3de1afcccbb9ff3068951e49..ef59b101bccb6382c0a682110bc7ef1d106e5a0f 100644 (file)
@@ -2,30 +2,22 @@
 // Name:        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 !wxUSE_DRAG_AND_DROP
-  #error  "You should #define wxUSE_DRAG_AND_DROP to 1 to compile this file!"
-#endif  //WX_DRAG_DROP
+#if wxUSE_DRAG_AND_DROP
 
 // ----------------------------------------------------------------------------
 // forward declarations
 // ----------------------------------------------------------------------------
+
 class  wxIDropTarget;
 struct IDataObject;
 
@@ -33,79 +25,48 @@ 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 WXDLLEXPORT 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();
 
-private:
-  wxIDropTarget    *m_pIDropTarget; // the pointer to COM interface
-};
+    // 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);
 
-// ----------------------------------------------------------------------------
-// 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 wxChar *psz) = 0;
+    // provide default implementation for base class pure virtuals
+    virtual bool OnDrop(wxCoord x, wxCoord y);
+    virtual bool GetData();
 
-protected:
-  virtual size_t GetFormatCount() const;
-  virtual wxDataFormat GetFormat(size_t n) const;
-};
+    // implementation only from now on
+    // -------------------------------
 
-// ----------------------------------------------------------------------------
-// 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);
+    // do we accept this kind of data?
+    bool IsAcceptedData(IDataObject *pIDataSource) const;
 
-  // params: the number of files and the array of file names
-  virtual bool OnDropFiles(long x, long y, 
-                           size_t nFiles, const wxChar * const aszFiles[]) = 0;
+    // give us the data source from IDropTarget::Drop() - this is later used by
+    // GetData() when it's called from inside OnData()
+    void SetDataSource(IDataObject *pIDataSource);
 
-protected:
-  virtual size_t GetFormatCount() const;
-  virtual wxDataFormat GetFormat(size_t n) const;
+private:
+    // helper used by IsAcceptedData() and GetData()
+    wxDataFormat GetSupportedFormat(IDataObject *pIDataSource) const;
+
+    wxIDropTarget *m_pIDropTarget; // the pointer to our COM interface
+    IDataObject   *m_pIDataSource; // the pointer to the source data object
+
+    DECLARE_NO_COPY_CLASS(wxDropTarget)
 };
 
-// ============================================================================
+#endif  //wxUSE_DRAG_AND_DROP
+
 #endif  //_WX_OLEDROPTGT_H