]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dataobj.h
added workaround for GTK+ focus_out bug (and removed Vaclav's mouse capture stack...
[wxWidgets.git] / include / wx / dataobj.h
index 9ef5f2bc7fd7b37465433d9ef7d7a4b136881208..19563d31a4fe19c401986ad02ee4df4ac6567851 100644 (file)
@@ -79,8 +79,16 @@ public:
     #include "wx/motif/dataform.h"
 #elif defined(__WXGTK__)
     #include "wx/gtk/dataform.h"
+#elif defined(__WXMAC__)
+    #include "wx/mac/dataform.h"
+#elif defined(__WXPM__)
+    #include "wx/os2/dataform.h"
 #endif
 
+// the value for default argument to some functions (corresponds to
+// wxDF_INVALID)
+extern WXDLLEXPORT const wxDataFormat& wxFormatInvalid;
+
 // ----------------------------------------------------------------------------
 // wxDataObject represents a piece of data which knows which formats it
 // supports and knows how to render itself in each of them - GetDataHere(),
@@ -133,8 +141,14 @@ public:
 
     // get data from the buffer of specified length (in the given format),
     // return TRUE if the data was read successfully, FALSE otherwise
-    virtual bool SetData(const wxDataFormat& format,
-                         size_t len, const void *buf) = 0;
+    virtual bool SetData(const wxDataFormat& WXUNUSED(format),
+                         size_t WXUNUSED(len), const void * WXUNUSED(buf))
+    {
+        return FALSE;
+    }
+
+    // returns TRUE if this format is supported
+    bool IsSupported(const wxDataFormat& format, Direction dir = Get) const;
 };
 
 // ----------------------------------------------------------------------------
@@ -147,12 +161,10 @@ public:
     #include "wx/motif/dataobj.h"
 #elif defined(__WXGTK__)
     #include "wx/gtk/dataobj.h"
-#elif defined(__WXQT__)
-    #include "wx/qt/dnd.h"
 #elif defined(__WXMAC__)
-    #include "wx/mac/dnd.h"
+    #include "wx/mac/dataobj.h"
 #elif defined(__WXPM__)
-    #include "wx/os2/dnd.h"
+    #include "wx/os2/dataobj.h"
 #elif defined(__WXSTUBS__)
     #include "wx/stubs/dnd.h"
 #endif
@@ -178,7 +190,7 @@ class WXDLLEXPORT wxDataObjectSimple : public wxDataObject
 public:
     // ctor takes the format we support, but it can also be set later with
     // SetFormat()
-    wxDataObjectSimple(const wxDataFormat& format = wxDF_INVALID)
+    wxDataObjectSimple(const wxDataFormat& format = wxFormatInvalid)
         : m_format(format)
         {
         }
@@ -200,17 +212,17 @@ public:
         { return FALSE; }
 
     // copy data from buffer to our data
-    virtual bool SetData(size_t len, const void *WXUNUSED(buf))
+    virtual bool SetData(size_t WXUNUSED(len), const void *WXUNUSED(buf))
         { return FALSE; }
 
     // implement base class pure virtuals
     // ----------------------------------
-    virtual wxDataFormat GetPreferredFormat(Direction WXUNUSED(dir) = Get) const
+    virtual wxDataFormat GetPreferredFormat(wxDataObjectBase::Direction WXUNUSED(dir) = Get) const
         { return m_format; }
-    virtual size_t GetFormatCount(Direction WXUNUSED(dir) = Get) const
+    virtual size_t GetFormatCount(wxDataObjectBase::Direction WXUNUSED(dir) = Get) const
         { return 1; }
     virtual void GetAllFormats(wxDataFormat *formats,
-                               Direction WXUNUSED(dir) = Get) const
+                               wxDataObjectBase::Direction WXUNUSED(dir) = Get) const
         { *formats = m_format; }
     virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const
         { return GetDataSize(); }
@@ -236,7 +248,7 @@ private:
 // wxDataObject directly.
 // ----------------------------------------------------------------------------
 
-WX_DECLARE_LIST(wxDataObjectSimple, wxSimpleDataObjectList);
+WX_DECLARE_EXPORTED_LIST(wxDataObjectSimple, wxSimpleDataObjectList);
 
 class WXDLLEXPORT wxDataObjectComposite : public wxDataObject
 {
@@ -251,9 +263,9 @@ public:
 
     // implement base class pure virtuals
     // ----------------------------------
-    virtual wxDataFormat GetPreferredFormat(Direction dir = Get) const;
-    virtual size_t GetFormatCount(Direction dir = Get) const;
-    virtual void GetAllFormats(wxDataFormat *formats, Direction dir = Get) const;
+    virtual wxDataFormat GetPreferredFormat(wxDataObjectBase::Direction dir = Get) const;
+    virtual size_t GetFormatCount(wxDataObjectBase::Direction dir = Get) const;
+    virtual void GetAllFormats(wxDataFormat *formats, wxDataObjectBase::Direction dir = Get) const;
     virtual size_t GetDataSize(const wxDataFormat& format) const;
     virtual bool GetDataHere(const wxDataFormat& format, void *buf) const;
     virtual bool SetData(const wxDataFormat& format, size_t len, const void *buf);
@@ -261,6 +273,13 @@ public:
 protected:
     // returns the pointer to the object which supports this format or NULL
     wxDataObjectSimple *GetObject(const wxDataFormat& format) const;
+#if defined(__WXMSW__)
+    virtual const void* GetSizeFromBuffer( const void* buffer, size_t* size,
+                                           const wxDataFormat& format );
+    virtual void* SetSizeInBuffer( void* buffer, size_t size,
+                                   const wxDataFormat& format );
+    virtual size_t GetBufferOffset( const wxDataFormat& format );
+#endif
 
 private:
     // the list of all (simple) data objects whose formats we support
@@ -289,7 +308,8 @@ public:
     // ctor: you can specify the text here or in SetText(), or override
     // GetText()
     wxTextDataObject(const wxString& text = wxEmptyString)
-        : wxDataObjectSimple(wxDF_TEXT), m_text(text)
+        : wxDataObjectSimple(wxUSE_UNICODE?wxDF_UNICODETEXT:wxDF_TEXT),
+          m_text(text)
         {
         }
 
@@ -307,6 +327,14 @@ public:
 
 private:
     wxString m_text;
+
+    // virtual function hiding supression
+    size_t GetDataSize(const wxDataFormat& format) const
+        { return(wxDataObjectSimple::GetDataSize(format)); }
+    bool GetDataHere(const wxDataFormat& format, void *pBuf) const
+        { return(wxDataObjectSimple::GetDataHere(format, pBuf)); }
+    bool SetData(const wxDataFormat& format, size_t nLen, const void* pBuf)
+        { return(wxDataObjectSimple::SetData(format, nLen, pBuf)); }
 };
 
 // ----------------------------------------------------------------------------
@@ -328,38 +356,39 @@ public:
     virtual wxBitmap GetBitmap() const { return m_bitmap; }
     virtual void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; }
 
-private:
+protected:
     wxBitmap m_bitmap;
 };
 
 // ----------------------------------------------------------------------------
 // wxFileDataObject contains a list of filenames
+//
+// NB: notice that this is a "write only" object, it can only be filled with
+//     data from drag and drop operation.
 // ----------------------------------------------------------------------------
 
 class WXDLLEXPORT wxFileDataObjectBase : public wxDataObjectSimple
 {
 public:
-    // ctor: you can specify the bitmap here or in SetBitmap(), or override
-    // GetBitmap()
+    // ctor: use AddFile() later to fill the array
     wxFileDataObjectBase() : wxDataObjectSimple(wxDF_FILENAME) { }
 
-    // get a reference to our array - you may modify it (i.e. add/remove
-    // filenames to it then)
-    wxArrayString& GetFilenames() { return m_filenames; }
+    // get a reference to our array
+    const wxArrayString& GetFilenames() const { return m_filenames; }
 
-    // a helper function
-    void AddFile(const wxString& filename) { m_filenames.Add(filename); }
+    // the Get() functions do nothing for us
+    virtual size_t GetDataSize() const { return 0; }
+    virtual bool GetDataHere(void *WXUNUSED(buf)) const { return FALSE; }
 
-    // virtual functions which you may override if you want to provide data on
-    // demand only - otherwise, the trivial default versions will be used.
-    //
-    // they work with a NUL-separated string of filenames, the base class
-    // versions concatenate/extract filenames from this string
-    virtual wxString GetFilenames() const;
-    virtual void SetFilenames(const wxChar* filenames);
+protected:
+    wxArrayString m_filenames;
 
 private:
-    wxArrayString m_filenames;
+    // Virtual function hiding supression
+    size_t GetDataSize(const wxDataFormat& format) const
+        { return(wxDataObjectSimple::GetDataSize(format)); }
+    bool GetDataHere(const wxDataFormat& format, void* pBuf) const
+        { return(wxDataObjectSimple::GetDataHere(format, pBuf)); }
 };
 
 // ----------------------------------------------------------------------------
@@ -373,7 +402,7 @@ class WXDLLEXPORT wxCustomDataObject : public wxDataObjectSimple
 public:
     // if you don't specify the format in the ctor, you can still use
     // SetFormat() later
-    wxCustomDataObject(const wxDataFormat& format = wxDF_INVALID);
+    wxCustomDataObject(const wxDataFormat& format = wxFormatInvalid);
 
     // the dtor calls Free()
     virtual ~wxCustomDataObject();
@@ -406,6 +435,14 @@ public:
 private:
     size_t m_size;
     void  *m_data;
+
+    // virtual function hiding supression
+    size_t GetDataSize(const wxDataFormat& format) const
+        { return(wxDataObjectSimple::GetDataSize(format)); }
+    bool GetDataHere(const wxDataFormat& format, void* pBuf) const
+        { return(wxDataObjectSimple::GetDataHere(format, pBuf)); }
+    bool SetData(const wxDataFormat& format, size_t nLen, const void* pBuf)
+        { return(wxDataObjectSimple::SetData(format, nLen, pBuf)); }
 };
 
 // ----------------------------------------------------------------------------
@@ -414,10 +451,23 @@ private:
 
 #if defined(__WXMSW__)
     #include "wx/msw/ole/dataobj2.h"
-#elif defined(__WXMOTIF__)
-    #include "wx/motif/dataobj2.h"
-#elif defined(__WXGTK__)
-    #include "wx/gtk/dataobj2.h"
-#endif
+
+    // wxURLDataObject defined in msw/ole/dataobj2.h
+#else // !__WXMSW__
+    #if defined(__WXGTK__)
+        #include "wx/gtk/dataobj2.h"
+    #elif defined(__WXMAC__)
+        #include "wx/mac/dataobj2.h"
+    #elif defined(__WXPM__)
+        #include "wx/os2/dataobj2.h"
+    #endif
+
+    // wxURLDataObject is simply wxTextDataObject with a different name
+    class WXDLLEXPORT wxURLDataObject : public wxTextDataObject
+    {
+    public:
+        wxString GetURL() const { return GetText(); }
+    };
+#endif // __WXMSW__/!__WXMSW__
 
 #endif // _WX_DATAOBJ_H_BASE_