X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e1ee679c2e3f48bc4f2607e35033ed5505ed6665..51623cc53f350935337e57930eaaf1afe9a48c3b:/include/wx/msw/ole/dataobj.h diff --git a/include/wx/msw/ole/dataobj.h b/include/wx/msw/ole/dataobj.h index 09dff76e96..1b33e35ed9 100644 --- a/include/wx/msw/ole/dataobj.h +++ b/include/wx/msw/ole/dataobj.h @@ -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 -