X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e1ee679c2e3f48bc4f2607e35033ed5505ed6665..2d6dd9c09e7084d402fc923d2f09d8b7158a1a04:/include/wx/dataobj.h diff --git a/include/wx/dataobj.h b/include/wx/dataobj.h index 9ef5f2bc7f..2201cd195a 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 -// Licence: wxWindows license +// Copyright: (c) wxWidgets Team +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _WX_DATAOBJ_H_BASE_ #define _WX_DATAOBJ_H_BASE_ -#ifdef __GNUG__ - #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" // ============================================================================ /* @@ -77,10 +76,24 @@ 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" +#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; + // ---------------------------------------------------------------------------- // wxDataObject represents a piece of data which knows which formats it // supports and knows how to render itself in each of them - GetDataHere(), @@ -128,13 +141,19 @@ 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 - virtual bool SetData(const wxDataFormat& format, - size_t len, const void *buf) = 0; + // 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; + } + + // returns true if this format is supported + bool IsSupported(const wxDataFormat& format, Direction dir = Get) const; }; // ---------------------------------------------------------------------------- @@ -145,21 +164,23 @@ public: #include "wx/msw/ole/dataobj.h" #elif defined(__WXMOTIF__) #include "wx/motif/dataobj.h" -#elif defined(__WXGTK__) +#elif defined(__WXX11__) + #include "wx/x11/dataobj.h" +#elif defined(__WXGTK20__) #include "wx/gtk/dataobj.h" -#elif defined(__WXQT__) - #include "wx/qt/dnd.h" +#elif defined(__WXGTK__) + #include "wx/gtk1/dataobj.h" #elif defined(__WXMAC__) - #include "wx/mac/dnd.h" + #include "wx/mac/dataobj.h" +#elif defined(__WXCOCOA__) + #include "wx/cocoa/dataobj.h" #elif defined(__WXPM__) - #include "wx/os2/dnd.h" -#elif defined(__WXSTUBS__) - #include "wx/stubs/dnd.h" + #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. // @@ -178,7 +199,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) { } @@ -197,20 +218,20 @@ 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 len, const void *WXUNUSED(buf)) - { return FALSE; } + 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(); } @@ -224,6 +245,8 @@ public: private: // the one and only format we support wxDataFormat m_format; + + DECLARE_NO_COPY_CLASS(wxDataObjectSimple) }; // ---------------------------------------------------------------------------- @@ -236,27 +259,41 @@ private: // wxDataObject directly. // ---------------------------------------------------------------------------- -WX_DECLARE_LIST(wxDataObjectSimple, wxSimpleDataObjectList); +WX_DECLARE_EXPORTED_LIST(wxDataObjectSimple, wxSimpleDataObjectList); class WXDLLEXPORT wxDataObjectComposite : public wxDataObject { public: // ctor - wxDataObjectComposite() { m_preferred = 0; } + 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 recieved data from + // the clipboard or the DnD operation. You can use this method to find + // out what kind of data object was recieved. + wxDataFormat GetReceivedFormat() const; // 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); +#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 protected: // returns the pointer to the object which supports this format or NULL @@ -269,6 +306,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; + + DECLARE_NO_COPY_CLASS(wxDataObjectComposite) }; // ============================================================================ @@ -289,7 +330,14 @@ 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( +#if wxUSE_UNICODE + wxDF_UNICODETEXT +#else + wxDF_TEXT +#endif + ), + m_text(text) { } @@ -301,12 +349,43 @@ public: // implement base class pure virtuals // ---------------------------------- + + // some platforms have 2 and not 1 format for text data +#if wxUSE_UNICODE && (defined(__WXGTK20__) || defined(__WXMAC__)) + 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 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 private: wxString m_text; + + DECLARE_NO_COPY_CLASS(wxTextDataObject) }; // ---------------------------------------------------------------------------- @@ -328,38 +407,32 @@ public: virtual wxBitmap GetBitmap() const { return m_bitmap; } virtual void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; } -private: +protected: wxBitmap m_bitmap; + + DECLARE_NO_COPY_CLASS(wxBitmapDataObjectBase) }; // ---------------------------------------------------------------------------- // 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; } - - // a helper function - void AddFile(const wxString& filename) { m_filenames.Add(filename); } - - // 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); + // get a reference to our array + const wxArrayString& GetFilenames() const { return m_filenames; } -private: +protected: wxArrayString m_filenames; + + DECLARE_NO_COPY_CLASS(wxFileDataObjectBase) }; // ---------------------------------------------------------------------------- @@ -373,7 +446,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(); @@ -402,10 +475,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; + + DECLARE_NO_COPY_CLASS(wxCustomDataObject) }; // ---------------------------------------------------------------------------- @@ -414,10 +502,39 @@ 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(__WXGTK20__) + #include "wx/gtk/dataobj2.h" + #elif defined(__WXGTK__) + #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" + #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 + { + public: + wxURLDataObject(const wxString& url = wxEmptyString) + : wxTextDataObject(url) + { + } + + wxString GetURL() const { return GetText(); } + void SetURL(const wxString& url) { SetText(url); } + }; +#endif // __WXMSW__/!__WXMSW__ + +#endif // wxUSE_DATAOBJ #endif // _WX_DATAOBJ_H_BASE_