// 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__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#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"
// ============================================================================
/*
#include "wx/motif/dataform.h"
#elif defined(__WXGTK__)
#include "wx/gtk/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(),
// 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;
+ 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;
};
// ----------------------------------------------------------------------------
#include "wx/msw/ole/dataobj.h"
#elif defined(__WXMOTIF__)
#include "wx/motif/dataobj.h"
+#elif defined(__WXX11__)
+ #include "wx/x11/dataobj.h"
#elif defined(__WXGTK__)
#include "wx/gtk/dataobj.h"
-#elif defined(__WXQT__)
- #include "wx/qt/dnd.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
// ----------------------------------------------------------------------------
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)
{
}
{ return FALSE; }
// copy data from buffer to our data
- virtual bool SetData(size_t len, const void *WXUNUSED(buf))
+ 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(); }
private:
// the one and only format we support
wxDataFormat m_format;
+
+ DECLARE_NO_COPY_CLASS(wxDataObjectSimple)
};
// ----------------------------------------------------------------------------
// 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
// 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);
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 );
+ virtual void* SetSizeInBuffer( void* buffer, size_t size,
+ const wxDataFormat& format );
+ virtual size_t GetBufferOffset( const wxDataFormat& format );
+#endif
private:
// the list of all (simple) data objects whose formats we support
// the index of the preferred one (0 initially, so by default the first
// one is the preferred)
size_t m_preferred;
+
+ DECLARE_NO_COPY_CLASS(wxDataObjectComposite)
};
// ============================================================================
// 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(wxUSE_UNICODE?wxDF_UNICODETEXT:wxDF_TEXT),
+ m_text(text)
{
}
// implement base class pure virtuals
// ----------------------------------
+
+#if wxUSE_UNICODE && defined(__WXGTK20__)
+ 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);
+#elif wxUSE_UNICODE && 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);
+ 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)); }
+#endif
+
private:
wxString m_text;
+
+ DECLARE_NO_COPY_CLASS(wxTextDataObject)
};
// ----------------------------------------------------------------------------
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; }
+ // get a reference to our array
+ const wxArrayString& GetFilenames() const { return m_filenames; }
- // a helper function
- void AddFile(const wxString& filename) { m_filenames.Add(filename); }
+ // the Get() functions do nothing for us
+ virtual size_t GetDataSize() const { return 0; }
+ virtual bool GetDataHere(void *WXUNUSED(buf)) const { return FALSE; }
- // 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);
+protected:
+ wxArrayString m_filenames;
private:
- wxArrayString m_filenames;
+ // 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)); }
+
+ DECLARE_NO_COPY_CLASS(wxFileDataObjectBase)
};
// ----------------------------------------------------------------------------
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();
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)
};
// ----------------------------------------------------------------------------
#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(__WXGTK__)
+ #include "wx/gtk/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:
+ wxString GetURL() const { return GetText(); }
+ void SetURL(const wxString& url) { SetText(url); }
+ };
+#endif // __WXMSW__/!__WXMSW__
+
+#endif // wxUSE_DATAOBJ
#endif // _WX_DATAOBJ_H_BASE_