]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/ole/dataobj.h
synchronize GTK2 minimum version in docs
[wxWidgets.git] / include / wx / msw / ole / dataobj.h
index 09dff76e9654660310fb6e7ce5967e11c5bcfc64..1b33e35ed9eb1a110e4184fa885be93359392a5b 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        msw/ole/dataobj.h
+// Name:        wx/msw/ole/dataobj.h
 // Purpose:     declaration of the wxDataObject class
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -22,130 +22,58 @@ struct IDataObject;
 // wxDataObject is a "smart" and polymorphic piece of data.
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxDataObject
+class WXDLLIMPEXP_CORE wxDataObject : public wxDataObjectBase
 {
 public:
     // ctor & dtor
     wxDataObject();
     virtual ~wxDataObject();
 
-    // pure virtuals to override
-        // get the best suited format for rendering our data
-    virtual wxDataFormat GetPreferredFormat() const = 0;
-        // get the number of formats we support: it is understood that if we
-        // can accept data in some format, then we can render data in this
-        // format as well, but the contrary is not necessarily true. For the
-        // default value of the argument, all formats we support should be
-        // returned, but if outputOnlyToo == FALSE, then we should only return
-        // the formats which our SetData() understands
-    virtual size_t GetFormatCount(bool outputOnlyToo = TRUE) const
-        { return 1; }
-        // return all formats in the provided array (of size GetFormatCount())
-    virtual void GetAllFormats(wxDataFormat *formats,
-                              bool outputOnlyToo = TRUE) const
-        { formats[0] = GetPreferredFormat(); }
-        // get the (total) size of data for the given format
-    virtual size_t GetDataSize(const wxDataFormat& format) const = 0;
-        // copy raw data (in the specified format) to provided pointer
-    virtual bool GetDataHere(const wxDataFormat& format, void *buf) const = 0;
-        // get data from the buffer (in the given format)
-    virtual bool SetData(const wxDataFormat& format, const void *buf) = 0;
-
-    // accessors
-        // retrieve IDataObject interface (for other OLE related classes)
+    // retrieve IDataObject interface (for other OLE related classes)
     IDataObject *GetInterface() const { return m_pIDataObject; }
-        // a simpler name which makes more sense for data objects supporting
-        // only one format
-    wxDataFormat GetFormat() const { return GetPreferredFormat(); }
-
-    // old interface
-        // decide if we support this format (can be either standard or custom
-        // format) -- now uses GetAllFormats()
-    virtual bool IsSupportedFormat(const wxDataFormat& format) const;
-
-    // implementation only from now on
-    // -------------------------------
 
     // tell the object that it should be now owned by IDataObject - i.e. when
     // it is deleted, it should delete us as well
     void SetAutoDelete();
 
-#ifdef __WXDEBUG__
-    // function to return symbolic name of clipboard format (for debug messages)
-    static const char *GetFormatName(wxDataFormat format);
-#endif // Debug
-
-private:
-    IDataObject *m_pIDataObject; // pointer to the COM interface
-};
+    // return true if we support this format in "Get" direction
+    bool IsSupportedFormat(const wxDataFormat& format) const
+        { return wxDataObjectBase::IsSupported(format, Get); }
+
+    // if this method returns false, this wxDataObject will be copied to
+    // the clipboard with its size prepended to it, which is compatible with
+    // older wx versions
+    //
+    // if returns true, then this wxDataObject will be copied to the clipboard
+    // without any additional information and ::HeapSize() function will be used
+    // to get the size of that data
+    virtual bool NeedsVerbatimData(const wxDataFormat& WXUNUSED(format)) const
+    {
+        // return false from here only for compatibility with earlier wx versions
+        return true;
+    }
 
-// ----------------------------------------------------------------------------
-// wxTextDataObject is a specialization of wxDataObject for text data
-// ----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxTextDataObject : public wxDataObject
-{
+    // function to return symbolic name of clipboard format (for debug messages)
+#ifdef __WXDEBUG__
+    static const wxChar *GetFormatName(wxDataFormat format);
+
+    #define wxGetFormatName(format) wxDataObject::GetFormatName(format)
+#else // !Debug
+    #define wxGetFormatName(format) wxT("")
+#endif // Debug/!Debug
+    // they need to be accessed from wxIDataObject, so made them public,
+    // or wxIDataObject friend
 public:
-    // ctors
-    wxTextDataObject() { }
-    wxTextDataObject(const wxString& strText) : m_strText(strText) { }
-    void Init(const wxString& strText) { m_strText = strText; }
-
-    // implement base class pure virtuals
-    virtual wxDataFormat GetPreferredFormat() const
-        { return wxDF_TEXT; }
-    virtual bool IsSupportedFormat(const wxDataFormat& format) const
-        { return format == wxDF_TEXT || format == wxDF_LOCALE; }
-    virtual size_t GetDataSize(const wxDataFormat& format) const
-        { return m_strText.Len() + 1; } // +1 for trailing '\0'of course
-    virtual bool GetDataHere(const wxDataFormat& format, void *buf) const
-        { memcpy(buf, m_strText.c_str(), GetDataSize(format)); return TRUE; }
-    virtual bool SetData(const wxDataFormat& format, const void *buf)
-        { m_strText = (const wxChar *)buf; return TRUE; }
-
-    // additional helpers
-    void SetText(const wxString& strText) { m_strText = strText; }
-    wxString GetText() const { return m_strText; }
+    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 );
 
 private:
-    wxString  m_strText;
-};
-
-// ----------------------------------------------------------------------------
-// wxBitmapDataObject is a specialization of wxDataObject for bitmap data
-// ----------------------------------------------------------------------------
-
-#include "wx/bitmap.h"
-
-class WXDLLEXPORT wxBitmapDataObject : public wxDataObject
-{
-public:
-    // ctors
-    wxBitmapDataObject() { }
-    wxBitmapDataObject(const wxBitmap& bitmap): m_bitmap(bitmap) { }
-
-    // set/get our bitmap
-    void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; }
-    const wxBitmap GetBitmap() const { return m_bitmap; }
-
-    // implement base class pure virtuals
-    virtual wxDataFormat GetPreferredFormat() const { return wxDF_BITMAP; }
-    virtual size_t GetFormatCount(bool outputOnlyToo = TRUE) const;
-    virtual void GetAllFormats(wxDataFormat *formats,
-                               bool outputOnlyToo = TRUE) const;
-    virtual size_t GetDataSize(const wxDataFormat& format) const;
-    virtual bool GetDataHere(const wxDataFormat& format, void *buf) const;
-    virtual bool SetData(const wxDataFormat& format, const void *buf);
+    IDataObject *m_pIDataObject; // pointer to the COM interface
 
-private:
-    wxBitmap m_bitmap;
+    wxDECLARE_NO_COPY_CLASS(wxDataObject);
 };
 
-// ----------------------------------------------------------------------------
-// wxMetaFileDataObject: see metafile.h is a specialization of wxDataObject for bitmap data
-// ----------------------------------------------------------------------------
-
-// TODO: wxFileDataObject.
-
 #endif  //_WX_MSW_OLE_DATAOBJ_H
-