X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/43d811ea55a6dee36e17e6815dcd891a82d62e28..ca6911c361b04290fe1f0e64b616249b3b3d71ba:/include/wx/msw/ole/dataobj.h?ds=sidebyside diff --git a/include/wx/msw/ole/dataobj.h b/include/wx/msw/ole/dataobj.h index 7a7c8a84ed..dc7a89c2f2 100644 --- a/include/wx/msw/ole/dataobj.h +++ b/include/wx/msw/ole/dataobj.h @@ -1,113 +1,79 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: ole/dataobj.h +// Name: msw/ole/dataobj.h // Purpose: declaration of the wxDataObject class // Author: Vadim Zeitlin -// Modified by: +// Modified by: // Created: 10.05.98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifndef _OLEDATAOBJ_H -#define _OLEDATAOBJ_H +#ifndef _WX_MSW_OLE_DATAOBJ_H +#define _WX_MSW_OLE_DATAOBJ_H // ---------------------------------------------------------------------------- // forward declarations // ---------------------------------------------------------------------------- + struct IDataObject; // ---------------------------------------------------------------------------- // wxDataObject is a "smart" and polymorphic piece of data. -// -// @@@ it's currently "read-only" from COM point of view, i.e. we don't support -// SetData. We don't support all advise functions neither (but it's easy to -// do if we really want them) // ---------------------------------------------------------------------------- -class wxDataObject +class WXDLLIMPEXP_CORE wxDataObject : public wxDataObjectBase { public: - // all data formats (values are the same as in windows.h, do not change!) - enum StdFormat - { - Invalid, - Text, - Bitmap, - MetafilePict, - Sylk, - Dif, - Tiff, - OemText, - Dib, - Palette, - Pendata, - Riff, - Wave, - UnicodeText, - EnhMetafile, - Hdrop, - Locale, - Max - }; + // ctor & dtor + wxDataObject(); + virtual ~wxDataObject(); - #ifdef __DEBUG__ - // function to return symbolic name of clipboard format (debug messages) - static const char *GetFormatName(wxDataFormat format); - #else // not used in release mode - inline const char* GetFormatName(wxDataFormat format) { return ""; } - #endif + // retrieve IDataObject interface (for other OLE related classes) + IDataObject *GetInterface() const { return m_pIDataObject; } - // ctor & dtor - wxDataObject(); - ~wxDataObject(); + // 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(); - // pure virtuals to override - // get the best suited format for our data - virtual wxDataFormat GetPreferredFormat() const = 0; - // decide if we support this format (should be one of values of - // StdFormat enumerations or a user-defined format) - virtual bool IsSupportedFormat(wxDataFormat format) const = 0; - // get the (total) size of data - virtual uint GetDataSize() const = 0; - // copy raw data to provided pointer - virtual void GetDataHere(void *pBuf) const = 0; + // return true if we support this format in "Get" direction + bool IsSupportedFormat(const wxDataFormat& format) const + { return wxDataObjectBase::IsSupported(format, Get); } - // accessors - // retrieve IDataObject interface (for other OLE related classes) - IDataObject *GetInterface() const { return m_pIDataObject; } + // 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; + } -private: - IDataObject *m_pIDataObject; // pointer to the COM interface -}; + // function to return symbolic name of clipboard format (for debug messages) +#ifdef __WXDEBUG__ + static const wxChar *GetFormatName(wxDataFormat format); -// ---------------------------------------------------------------------------- -// wxTextDataObject is a specialization of wxDataObject for text data -// ---------------------------------------------------------------------------- -class wxTextDataObject : public wxDataObject -{ + #define wxGetFormatName(format) wxDataObject::GetFormatName(format) +#else // !Debug + #define wxGetFormatName(format) _T("") +#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 wxDataObject::Text; } - virtual bool IsSupportedFormat(wxDataFormat format) const - { return format == wxDataObject::Text || format == wxDataObject::Locale; } - virtual uint GetDataSize() const - { return m_strText.Len() + 1; } // +1 for trailing '\0'of course - virtual void GetDataHere(void *pBuf) const - { memcpy(pBuf, m_strText.c_str(), GetDataSize()); } + 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; -}; + IDataObject *m_pIDataObject; // pointer to the COM interface -// ---------------------------------------------------------------------------- -// @@@ TODO: wx{Bitmap|Metafile|...}DataObject -// ---------------------------------------------------------------------------- + wxDECLARE_NO_COPY_CLASS(wxDataObject); +}; -#endif //_OLEDATAOBJ_H +#endif //_WX_MSW_OLE_DATAOBJ_H