// classes
//-------------------------------------------------------------------------
+class wxDataFormat;
+class wxDataBroker;
class wxDataObject;
class wxTextDataObject;
class wxBitmapDataObject;
class wxFileDataObject;
//-------------------------------------------------------------------------
-// wxDataObject
+// wxDataFormat
//-------------------------------------------------------------------------
-class wxDataObject: public wxObject
+class wxDataFormat
{
- DECLARE_ABSTRACT_CLASS( wxDataObject )
-
public:
+ // the clipboard formats under GDK are GdkAtoms
+ typedef GdkAtom NativeFormat;
+
+ wxDataFormat();
+ wxDataFormat( wxDataFormatId type );
+ wxDataFormat( const wxString &id );
+ wxDataFormat( const wxChar *id );
+ wxDataFormat( NativeFormat format );
+
+ wxDataFormat& operator=(NativeFormat format)
+ { SetId(format); return *this; }
+ wxDataFormat& operator=(const wxDataFormat& format)
+ { SetId(format); return *this; }
+
+ // comparison (must have both versions)
+ bool operator==(wxDataFormatId type) const
+ { return m_type == (wxDataFormatId)type; }
+ bool operator!=(wxDataFormatId type) const
+ { return m_type != (wxDataFormatId)type; }
+ bool operator==(NativeFormat format) const
+ { return m_format == (NativeFormat)format; }
+ bool operator!=(NativeFormat format) const
+ { return m_format != (NativeFormat)format; }
+ bool operator==(const wxDataFormat& format) const
+ { return m_format == format.m_format; }
+ bool operator!=(const wxDataFormat& format) const
+ { return m_format != format.m_format; }
+
+ // explicit and implicit conversions to NativeFormat which is one of
+ // standard data types (implicit conversion is useful for preserving the
+ // compatibility with old code)
+ NativeFormat GetFormatId() const { return m_format; }
+ operator NativeFormat() const { return m_format; }
+
+ // this only works with standard ids
+ void SetId( wxDataFormatId type );
- wxDataObject() {}
- ~wxDataObject() {}
+ // this only works with standard ids
+ void SetId( NativeFormat format );
- virtual wxDataFormat GetFormat() const = 0;
-
- // implementation
-
- GdkAtom m_formatAtom;
+ // string ids are used for custom types - this SetId() must be used for
+ // application-specific formats
+ wxString GetId() const;
+ void SetId( const wxChar *id );
+
+ // implementation
+ wxDataFormatId GetType() const;
+
+private:
+ wxDataFormatId m_type;
+ NativeFormat m_format;
+
+ void PrepareFormats();
+ void SetType( wxDataFormatId type );
};
-// ----------------------------------------------------------------------------
-// wxTextDataObject is a specialization of wxDataObject for text data
-// ----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// wxDataObject
+//----------------------------------------------------------------------------
-class wxTextDataObject : public wxDataObject
+class wxDataObject : public wxObject
{
- DECLARE_DYNAMIC_CLASS( wxTextDataObject )
-
public:
-
- wxTextDataObject() {}
- wxTextDataObject( const wxString& strText )
- : m_strText(strText) { }
-
- virtual wxDataFormat GetFormat() const
- { return wxDF_TEXT; }
+ wxDataObject();
+ ~wxDataObject();
+
+ 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;
- void SetText( const wxString& strText)
- { m_strText = strText; }
+ // copy raw data (in the specified format) to provided pointer
+ virtual bool GetDataHere(const wxDataFormat& format, void *buf) const = 0;
- wxString GetText() const
- { return m_strText; }
+ // get data from the buffer (in the given format)
+ virtual bool SetData(const wxDataFormat& format, const void *buf) = 0;
-private:
- wxString m_strText;
+ // 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;
+private:
+ DECLARE_DYNAMIC_CLASS( wxDataObject )
};
-// ----------------------------------------------------------------------------
-// wxFileDataObject is a specialization of wxDataObject for file names
-// ----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// wxTextDataObject is a specialization of wxDataObject for text data
+//----------------------------------------------------------------------------
-class wxFileDataObject : public wxDataObject
+class wxTextDataObject : public wxDataObject
{
- DECLARE_DYNAMIC_CLASS( wxFileDataObject )
-
public:
+ // ctors
+ wxTextDataObject();
+ wxTextDataObject(const wxString& strText);
+ void Init(const wxString& strText) { m_strText = strText; }
+
+ virtual wxDataFormat GetPreferredFormat() const
+ { return wxDF_TEXT; }
+ virtual bool IsSupportedFormat(const wxDataFormat& format) const
+ { return format == wxDF_TEXT; }
+
+ 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);
+
+ // additional helpers
+ void SetText(const wxString& strText) { m_strText = strText; }
+ wxString GetText() const { return m_strText; }
- wxFileDataObject(void) {}
-
- virtual wxDataFormat GetFormat() const
- { return wxDF_FILENAME; }
-
- void AddFile( const wxString &file )
- { m_files += file; m_files += (char)0; }
-
- wxString GetFiles() const
- { return m_files; }
+private:
+ wxString m_strText;
private:
- wxString m_files;
-
+ DECLARE_DYNAMIC_CLASS( wxTextDataObject )
};
-// ----------------------------------------------------------------------------
-// wxBitmapDataObject is a specialization of wxDataObject for bitmaps
-// ----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// wxFileDataObject is a specialization of wxDataObject for file names
+//----------------------------------------------------------------------------
-class wxBitmapDataObject : public wxDataObject
+class wxFileDataObject : public wxDataObject
{
- DECLARE_DYNAMIC_CLASS( wxBitmapDataObject )
-
public:
-
- wxBitmapDataObject(void) {}
-
- virtual wxDataFormat GetFormat() const
- { return wxDF_BITMAP; }
-
- void SetBitmap( const wxBitmap &bitmap )
- { m_bitmap = bitmap; }
+ wxFileDataObject();
- wxBitmap GetBitmap() const
- { return m_bitmap; }
+ void AddFile( const wxString &file );
+ wxString GetFiles() const;
+ virtual wxDataFormat GetPreferredFormat() const
+ { return wxDF_FILENAME; }
+ virtual bool IsSupportedFormat(const wxDataFormat& format) const
+ { return format == wxDF_FILENAME; }
+
+ 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);
+
+public:
+ wxString m_files;
+
private:
- wxBitmap m_bitmap;
+ DECLARE_DYNAMIC_CLASS( wxFileDataObject )
};
-// ----------------------------------------------------------------------------
-// wxPrivateDataObject is a specialization of wxDataObject for app specific data
-// ----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// wxBitmapDataObject is a specialization of wxDataObject for bitmaps
+//----------------------------------------------------------------------------
-class wxPrivateDataObject : public wxDataObject
+class wxBitmapDataObject : public wxDataObject
{
- DECLARE_DYNAMIC_CLASS( wxPrivateDataObject )
-
public:
+ // ctors
+ wxBitmapDataObject();
+ wxBitmapDataObject(const wxBitmap& bitmap);
- wxPrivateDataObject()
- { m_size = 0; m_data = (char*) NULL; }
-
- ~wxPrivateDataObject()
- { if (m_data) delete[] m_data; }
-
- virtual wxDataFormat GetFormat() const
- { return wxDF_PRIVATE; }
+ // destr
+ ~wxBitmapDataObject();
- // the string ID identifies the format of clipboard or DnD data. a word
- // processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
- // to the clipboard - the latter with the Id "WXWORD_FORMAT".
+ // set/get our bitmap
+ void SetBitmap(const wxBitmap& bitmap);
+ const wxBitmap GetBitmap() const { return m_bitmap; }
+
+ virtual wxDataFormat GetPreferredFormat() const
+ { return wxDF_BITMAP; }
+ virtual bool IsSupportedFormat(const wxDataFormat& format) const
+ { return format == wxDF_BITMAP; }
+
+ virtual size_t GetDataSize(const wxDataFormat& format) const;
+ virtual bool GetDataHere(const wxDataFormat& format, void *buf) const;
- void SetId( const wxString& id )
- { m_id = id; }
-
- wxString GetId() const
- { return m_id; }
+ // sets PNG data
+ virtual bool SetData(const wxDataFormat& format, const void *buf);
- // will make internal copy
- void SetData( const char *data, size_t size );
-
- size_t GetDataSize() const
- { return m_size; }
+ // sets PNG data
+ virtual void SetPngData(const void *buf, size_t size);
- char* GetData() const
- { return m_data; }
+ void *GetData()
+ { return m_pngData; }
-private:
- size_t m_size;
- char* m_data;
- wxString m_id;
+private:
+ wxBitmap m_bitmap;
+ size_t m_pngSize;
+ void *m_pngData;
+
+ void DoConvertToPng();
+
+private:
+ DECLARE_DYNAMIC_CLASS( wxBitmapDataObject );
};
-
-#endif
+#endif
//__GTKDNDH__