X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/371a5b4e62eb415107e045588f614fa49e866e78..2aa54d47d66b5cda0dca2b743e11c954581a7b99:/include/wx/dataobj.h diff --git a/include/wx/dataobj.h b/include/wx/dataobj.h index 1cdd0dfe6c..8832aad706 100644 --- a/include/wx/dataobj.h +++ b/include/wx/dataobj.h @@ -5,25 +5,24 @@ // Modified by: // Created: 26.05.99 // RCS-ID: $Id$ -// Copyright: (c) wxWindows Team +// Copyright: (c) wxWidgets Team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _WX_DATAOBJ_H_BASE_ #define _WX_DATAOBJ_H_BASE_ -#if defined(__GNUG__) && !defined(__APPLE__) - #pragma interface "dataobjbase.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- - #include "wx/defs.h" + +#if wxUSE_DATAOBJ + #include "wx/string.h" #include "wx/bitmap.h" #include "wx/list.h" +#include "wx/arrstr.h" // ============================================================================ /* @@ -56,7 +55,7 @@ public: typedef NativeFormat; wxDataFormat(NativeFormat format = wxDF_INVALID); - wxDataFormat(const wxChar *format); + wxDataFormat(const wxString& format); wxDataFormat& operator=(NativeFormat format); wxDataFormat& operator=(const wxDataFormat& format); @@ -68,7 +67,7 @@ public: NativeFormat GetType() const; wxString GetId() const; - void SetId(const wxChar *format); + void SetId(const wxString& format); }; */ @@ -77,19 +76,23 @@ public: #include "wx/msw/ole/dataform.h" #elif defined(__WXMOTIF__) #include "wx/motif/dataform.h" -#elif defined(__WXGTK__) +#elif defined(__WXGTK20__) #include "wx/gtk/dataform.h" +#elif defined(__WXGTK__) + #include "wx/gtk1/dataform.h" #elif defined(__WXX11__) #include "wx/x11/dataform.h" #elif defined(__WXMAC__) - #include "wx/mac/dataform.h" + #include "wx/osx/dataform.h" +#elif defined(__WXCOCOA__) + #include "wx/cocoa/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; +extern WXDLLIMPEXP_CORE const wxDataFormat& wxFormatInvalid; // ---------------------------------------------------------------------------- // wxDataObject represents a piece of data which knows which formats it @@ -111,7 +114,7 @@ extern WXDLLEXPORT const wxDataFormat& wxFormatInvalid; // to be supported by SetData() or GetDataHere(). // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDataObjectBase +class WXDLLIMPEXP_CORE wxDataObjectBase { public: enum Direction @@ -138,18 +141,18 @@ public: virtual size_t GetDataSize(const wxDataFormat& format) const = 0; // copy raw data (in the specified format) to the provided buffer, return - // TRUE if data copied successfully, FALSE otherwise + // true if data copied successfully, false otherwise virtual bool GetDataHere(const wxDataFormat& format, void *buf) const = 0; // get data from the buffer of specified length (in the given format), - // return TRUE if the data was read successfully, FALSE otherwise + // return true if the data was read successfully, false otherwise virtual bool SetData(const wxDataFormat& WXUNUSED(format), size_t WXUNUSED(len), const void * WXUNUSED(buf)) { - return FALSE; + return false; } - // returns TRUE if this format is supported + // returns true if this format is supported bool IsSupported(const wxDataFormat& format, Direction dir = Get) const; }; @@ -163,17 +166,21 @@ public: #include "wx/motif/dataobj.h" #elif defined(__WXX11__) #include "wx/x11/dataobj.h" -#elif defined(__WXGTK__) +#elif defined(__WXGTK20__) #include "wx/gtk/dataobj.h" +#elif defined(__WXGTK__) + #include "wx/gtk1/dataobj.h" #elif defined(__WXMAC__) - #include "wx/mac/dataobj.h" + #include "wx/osx/dataobj.h" +#elif defined(__WXCOCOA__) + #include "wx/cocoa/dataobj.h" #elif defined(__WXPM__) #include "wx/os2/dataobj.h" #endif // ---------------------------------------------------------------------------- // wxDataObjectSimple is a wxDataObject which only supports one format (in -// both Get and Set directions, but you may return FALSE from GetDataHere() or +// both Get and Set directions, but you may return false from GetDataHere() or // SetData() if one of them is not supported). This is the simplest possible // wxDataObject implementation. // @@ -187,7 +194,7 @@ public: // Otherwise, you should use wxDataObjectComposite or wxDataObject directly. // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDataObjectSimple : public wxDataObject +class WXDLLIMPEXP_CORE wxDataObjectSimple : public wxDataObject { public: // ctor takes the format we support, but it can also be set later with @@ -211,11 +218,11 @@ public: // copy our data to the buffer virtual bool GetDataHere(void *WXUNUSED(buf)) const - { return FALSE; } + { return false; } // copy data from buffer to our data virtual bool SetData(size_t WXUNUSED(len), const void *WXUNUSED(buf)) - { return FALSE; } + { return false; } // implement base class pure virtuals // ---------------------------------- @@ -238,6 +245,8 @@ public: private: // the one and only format we support wxDataFormat m_format; + + wxDECLARE_NO_COPY_CLASS(wxDataObjectSimple); }; // ---------------------------------------------------------------------------- @@ -252,16 +261,29 @@ private: WX_DECLARE_EXPORTED_LIST(wxDataObjectSimple, wxSimpleDataObjectList); -class WXDLLEXPORT wxDataObjectComposite : public wxDataObject +class WXDLLIMPEXP_CORE wxDataObjectComposite : public wxDataObject { public: // ctor wxDataObjectComposite(); + virtual ~wxDataObjectComposite(); // add data object (it will be deleted by wxDataObjectComposite, hence it // must be allocated on the heap) whose format will become the preferred - // one if preferred == TRUE - void Add(wxDataObjectSimple *dataObject, bool preferred = FALSE); + // one if preferred == true + void Add(wxDataObjectSimple *dataObject, bool preferred = false); + + // Report the format passed to the SetData method. This should be the + // format of the data object within the composite that received data from + // the clipboard or the DnD operation. You can use this method to find + // out what kind of data object was received. + wxDataFormat GetReceivedFormat() const; + + // Returns the pointer to the object which supports this format or NULL. + // The returned pointer is owned by wxDataObjectComposite and must + // therefore not be destroyed by the caller. + wxDataObjectSimple *GetObject(const wxDataFormat& format, + wxDataObjectBase::Direction dir = Get) const; // implement base class pure virtuals // ---------------------------------- @@ -271,10 +293,6 @@ public: 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); - -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 ); @@ -290,6 +308,10 @@ private: // the index of the preferred one (0 initially, so by default the first // one is the preferred) size_t m_preferred; + + wxDataFormat m_receivedFormat; + + wxDECLARE_NO_COPY_CLASS(wxDataObjectComposite); }; // ============================================================================ @@ -304,13 +326,66 @@ private: // wxTextDataObject contains text data // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxTextDataObject : public wxDataObjectSimple +#if wxUSE_UNICODE + #if defined(__WXGTK20__) + #define wxNEEDS_UTF8_FOR_TEXT_DATAOBJ + #elif defined(__WXMAC__) + #define wxNEEDS_UTF16_FOR_TEXT_DATAOBJ + #endif +#endif // wxUSE_UNICODE + +class WXDLLIMPEXP_CORE wxHTMLDataObject : public wxDataObjectSimple +{ +public: + // ctor: you can specify the text here or in SetText(), or override + // GetText() + wxHTMLDataObject(const wxString& html = wxEmptyString) + : wxDataObjectSimple(wxDF_HTML), + m_html(html) + { + } + + // virtual functions which you may override if you want to provide text on + // demand only - otherwise, the trivial default versions will be used + virtual size_t GetLength() const { return m_html.Len() + 1; } + virtual wxString GetHTML() const { return m_html; } + virtual void SetHTML(const wxString& html) { m_html = html; } + + virtual size_t GetDataSize() const; + virtual bool GetDataHere(void *buf) const; + virtual bool SetData(size_t len, const void *buf); + + // Must provide overloads to avoid hiding them (and warnings about it) + virtual size_t GetDataSize(const wxDataFormat&) const + { + return GetDataSize(); + } + virtual bool GetDataHere(const wxDataFormat&, void *buf) const + { + return GetDataHere(buf); + } + virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) + { + return SetData(len, buf); + } + +private: + wxString m_html; +}; + +class WXDLLIMPEXP_CORE wxTextDataObject : public wxDataObjectSimple { public: // ctor: you can specify the text here or in SetText(), or override // GetText() wxTextDataObject(const wxString& text = wxEmptyString) - : wxDataObjectSimple(wxUSE_UNICODE?wxDF_UNICODETEXT:wxDF_TEXT), + : wxDataObjectSimple( +#if wxUSE_UNICODE + wxDF_UNICODETEXT +#else + wxDF_TEXT +#endif + ), m_text(text) { } @@ -323,27 +398,50 @@ public: // implement base class pure virtuals // ---------------------------------- + + // some platforms have 2 and not 1 format for text data +#if defined(wxNEEDS_UTF8_FOR_TEXT_DATAOBJ) || defined(wxNEEDS_UTF16_FOR_TEXT_DATAOBJ) + virtual size_t GetFormatCount(Direction WXUNUSED(dir) = Get) const { return 2; } + virtual void GetAllFormats(wxDataFormat *formats, + wxDataObjectBase::Direction WXUNUSED(dir) = Get) const; + + virtual size_t GetDataSize() const { return GetDataSize(GetPreferredFormat()); } + virtual bool GetDataHere(void *buf) const { return GetDataHere(GetPreferredFormat(), buf); } + virtual bool SetData(size_t len, const void *buf) { return SetData(GetPreferredFormat(), len, buf); } + + size_t GetDataSize(const wxDataFormat& format) const; + bool GetDataHere(const wxDataFormat& format, void *pBuf) const; + bool SetData(const wxDataFormat& format, size_t nLen, const void* pBuf); +#else // !wxNEEDS_UTF{8,16}_FOR_TEXT_DATAOBJ virtual size_t GetDataSize() const; virtual bool GetDataHere(void *buf) const; virtual bool SetData(size_t len, const void *buf); + // Must provide overloads to avoid hiding them (and warnings about it) + virtual size_t GetDataSize(const wxDataFormat&) const + { + return GetDataSize(); + } + virtual bool GetDataHere(const wxDataFormat&, void *buf) const + { + return GetDataHere(buf); + } + virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) + { + return SetData(len, buf); + } +#endif // different wxTextDataObject implementations 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)); } + wxDECLARE_NO_COPY_CLASS(wxTextDataObject); }; // ---------------------------------------------------------------------------- // wxBitmapDataObject contains a bitmap // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxBitmapDataObjectBase : public wxDataObjectSimple +class WXDLLIMPEXP_CORE wxBitmapDataObjectBase : public wxDataObjectSimple { public: // ctor: you can specify the bitmap here or in SetBitmap(), or override @@ -360,6 +458,8 @@ public: protected: wxBitmap m_bitmap; + + wxDECLARE_NO_COPY_CLASS(wxBitmapDataObjectBase); }; // ---------------------------------------------------------------------------- @@ -369,7 +469,7 @@ protected: // data from drag and drop operation. // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxFileDataObjectBase : public wxDataObjectSimple +class WXDLLIMPEXP_CORE wxFileDataObjectBase : public wxDataObjectSimple { public: // ctor: use AddFile() later to fill the array @@ -378,19 +478,10 @@ public: // get a reference to our array const wxArrayString& GetFilenames() const { return m_filenames; } - // the Get() functions do nothing for us - virtual size_t GetDataSize() const { return 0; } - virtual bool GetDataHere(void *WXUNUSED(buf)) const { return FALSE; } - protected: wxArrayString m_filenames; -private: - // 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)); } + wxDECLARE_NO_COPY_CLASS(wxFileDataObjectBase); }; // ---------------------------------------------------------------------------- @@ -399,7 +490,7 @@ private: // It is understood that this data can be copied bitwise. // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxCustomDataObject : public wxDataObjectSimple +class WXDLLIMPEXP_CORE wxCustomDataObject : public wxDataObjectSimple { public: // if you don't specify the format in the ctor, you can still use @@ -433,20 +524,25 @@ public: virtual size_t GetDataSize() const; virtual bool GetDataHere(void *buf) const; virtual bool SetData(size_t size, const void *buf); + // Must provide overloads to avoid hiding them (and warnings about it) + virtual size_t GetDataSize(const wxDataFormat&) const + { + return GetDataSize(); + } + virtual bool GetDataHere(const wxDataFormat&, void *buf) const + { + return GetDataHere(buf); + } + virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) + { + return SetData(len, buf); + } 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)); } - - DECLARE_NO_COPY_CLASS(wxCustomDataObject) + wxDECLARE_NO_COPY_CLASS(wxCustomDataObject); }; // ---------------------------------------------------------------------------- @@ -455,26 +551,40 @@ private: #if defined(__WXMSW__) #include "wx/msw/ole/dataobj2.h" - // wxURLDataObject defined in msw/ole/dataobj2.h -#else // !__WXMSW__ +#elif defined(__WXGTK20__) + #include "wx/gtk/dataobj2.h" + // wxURLDataObject defined in msw/ole/dataobj2.h + +#else #if defined(__WXGTK__) - #include "wx/gtk/dataobj2.h" + #include "wx/gtk1/dataobj2.h" #elif defined(__WXX11__) #include "wx/x11/dataobj2.h" + #elif defined(__WXMOTIF__) + #include "wx/motif/dataobj2.h" #elif defined(__WXMAC__) - #include "wx/mac/dataobj2.h" + #include "wx/osx/dataobj2.h" + #elif defined(__WXCOCOA__) + #include "wx/cocoa/dataobj2.h" #elif defined(__WXPM__) #include "wx/os2/dataobj2.h" #endif // wxURLDataObject is simply wxTextDataObject with a different name - class WXDLLEXPORT wxURLDataObject : public wxTextDataObject + class WXDLLIMPEXP_CORE wxURLDataObject : public wxTextDataObject { public: + wxURLDataObject(const wxString& url = wxEmptyString) + : wxTextDataObject(url) + { + } + wxString GetURL() const { return GetText(); } void SetURL(const wxString& url) { SetText(url); } }; -#endif // __WXMSW__/!__WXMSW__ +#endif + +#endif // wxUSE_DATAOBJ #endif // _WX_DATAOBJ_H_BASE_