X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/06e4351185e6f6c53f179d8af833f791b2e8d40e..5724671379e0aa45299e9a9a2e3aa6474e83c29a:/include/wx/gtk/dataobj.h diff --git a/include/wx/gtk/dataobj.h b/include/wx/gtk/dataobj.h index e742cd9f41..e8d598e3dd 100644 --- a/include/wx/gtk/dataobj.h +++ b/include/wx/gtk/dataobj.h @@ -23,6 +23,8 @@ // classes //------------------------------------------------------------------------- +class wxDataFormat; +class wxDataBroker; class wxDataObject; class wxTextDataObject; class wxBitmapDataObject; @@ -30,28 +32,131 @@ class wxPrivateDataObject; class wxFileDataObject; //------------------------------------------------------------------------- -// wxDataObject +// wxDataFormat (internal) //------------------------------------------------------------------------- -class wxDataObject: public wxObject +class wxDataFormat : public wxObject { - DECLARE_ABSTRACT_CLASS( wxDataObject ) + DECLARE_CLASS( wxDataFormat ) public: + wxDataFormat(); + wxDataFormat( wxDataFormatId type ); + wxDataFormat( const wxString &id ); + wxDataFormat( const wxChar *id ); + wxDataFormat( const wxDataFormat &format ); + wxDataFormat( const GdkAtom atom ); - wxDataObject() {} - ~wxDataObject() {} + void SetType( wxDataFormatId type ); + wxDataFormatId GetType() const; - virtual wxDataFormat GetFormat() const = 0; - - // implementation - - GdkAtom m_formatAtom; + /* 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 "application/wxword", an + * image manipulation program would put a wxBitmapDataObject and a + * wxPrivateDataObject to the clipboard - the latter with "image/png". */ + + wxString GetId() const; + void SetId( const wxChar *id ); + + GdkAtom GetAtom(); + void SetAtom(GdkAtom atom) { m_hasAtom = TRUE; m_atom = atom; } + + // implicit conversion to wxDataFormatId + operator wxDataFormatId() const { return m_type; } + + bool operator==(wxDataFormatId type) const { return m_type == type; } + bool operator!=(wxDataFormatId type) const { return m_type != type; } + +private: + wxDataFormatId m_type; + wxString m_id; + bool m_hasAtom; + GdkAtom m_atom; +}; + +//------------------------------------------------------------------------- +// wxDataBroker (internal) +//------------------------------------------------------------------------- + +class wxDataBroker : public wxObject +{ + DECLARE_CLASS( wxDataBroker ) + +public: + + /* constructor */ + wxDataBroker(); + + /* add data object */ + void Add( wxDataObject *dataObject, bool preferred = FALSE ); + +private: + + /* OLE implementation, the methods don't need to be overridden */ + + /* get number of supported formats */ + virtual size_t GetFormatCount() const; + + /* return nth supported format */ + virtual wxDataFormat &GetNthFormat( size_t nth ) const; + + /* return preferrd/best supported format */ + virtual wxDataFormatId GetPreferredFormat() const; + + /* search through m_dataObjects, return TRUE if found */ + virtual bool IsSupportedFormat( wxDataFormat &format ) const; + + /* search through m_dataObjects and call child's GetSize() */ + virtual size_t GetSize( wxDataFormat& format ) const; + + /* search through m_dataObjects and call child's WriteData(dest) */ + virtual void WriteData( wxDataFormat& format, void *dest ) const; + + /* implementation */ + +public: + + wxList m_dataObjects; + size_t m_preferred; }; -// ---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +// wxDataObject to be placed in wxDataBroker +//---------------------------------------------------------------------------- + +class wxDataObject : public wxObject +{ + DECLARE_DYNAMIC_CLASS( wxDataObject ) + +public: + + /* constructor */ + wxDataObject(); + + /* destructor */ + ~wxDataObject(); + + /* write data to dest */ + virtual void WriteData( void *dest ) const = 0; + + /* get size of data */ + virtual size_t GetSize() const = 0; + + /* implementation */ + + wxDataFormat &GetFormat(); + + wxDataFormatId GetFormatType() const; + wxString GetFormatId() const; + GdkAtom GetFormatAtom() const; + + wxDataFormat m_format; +}; + +//---------------------------------------------------------------------------- // wxTextDataObject is a specialization of wxDataObject for text data -// ---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- class wxTextDataObject : public wxDataObject { @@ -59,27 +164,38 @@ class wxTextDataObject : public wxDataObject public: - wxTextDataObject() {} - wxTextDataObject( const wxString& strText ) - : m_strText(strText) { } - - virtual wxDataFormat GetFormat() const - { return wxDF_TEXT; } - - void SetText( const wxString& strText) - { m_strText = strText; } - - wxString GetText() const - { return m_strText; } + /* default constructor. call SetText() later or override + WriteData() and GetSize() for working on-demand */ + wxTextDataObject(); -private: - wxString m_strText; + /* constructor */ + wxTextDataObject( const wxString& data ); + /* set current text data */ + void SetText( const wxString& data ); + + /* get current text data */ + wxString GetText() const; + + /* by default calls WriteString() with string set by constructor or + by SetText(). can be overridden for working on-demand */ + virtual void WriteData( void *dest ) const; + + /* by default, returns length of string as set by constructor or + by SetText(). can be overridden for working on-demand */ + virtual size_t GetSize() const; + + /* write string to dest */ + void WriteString( const wxString &str, void *dest ) const; + + /* implementation */ + + wxString m_data; }; -// ---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- // wxFileDataObject is a specialization of wxDataObject for file names -// ---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- class wxFileDataObject : public wxDataObject { @@ -87,25 +203,30 @@ class wxFileDataObject : public wxDataObject public: - 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: + /* default constructor */ + wxFileDataObject(); + + /* add file name to list */ + void AddFile( const wxString &file ); + + /* get all filename as one string. each file name is 0 terminated, + the list is double zero terminated */ + wxString GetFiles() const; + + /* write list of filenames */ + virtual void WriteData( void *dest ) const; + + /* return length of list of filenames */ + virtual size_t GetSize() const; + + /* implementation */ + wxString m_files; - }; -// ---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- // wxBitmapDataObject is a specialization of wxDataObject for bitmaps -// ---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- class wxBitmapDataObject : public wxDataObject { @@ -113,66 +234,25 @@ class wxBitmapDataObject : public wxDataObject public: - wxBitmapDataObject(void) {} - - virtual wxDataFormat GetFormat() const - { return wxDF_BITMAP; } - - void SetBitmap( const wxBitmap &bitmap ) - { m_bitmap = bitmap; } - - wxBitmap GetBitmap() const - { return m_bitmap; } - -private: - wxBitmap m_bitmap; -}; + /* see wxTextDataObject for explanation */ -// ---------------------------------------------------------------------------- -// wxPrivateDataObject is a specialization of wxDataObject for app specific data -// ---------------------------------------------------------------------------- + wxBitmapDataObject(); + wxBitmapDataObject( const wxBitmap& bitmap ); -class wxPrivateDataObject : public wxDataObject -{ - DECLARE_DYNAMIC_CLASS( wxPrivateDataObject ) + void SetBitmap( const wxBitmap &bitmap ); + wxBitmap GetBitmap() const; -public: + virtual void WriteData( void *dest ) const; + virtual size_t GetSize() const; - wxPrivateDataObject() - { m_size = 0; m_data = (char*) NULL; } - - ~wxPrivateDataObject() - { if (m_data) delete[] m_data; } - - virtual wxDataFormat GetFormat() const - { return wxDF_PRIVATE; } - - // 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". - - void SetId( const wxString& id ) - { m_id = id; } - - wxString GetId() const - { return m_id; } - - // will make internal copy - void SetData( const char *data, size_t size ); - - size_t GetDataSize() const - { return m_size; } - - char* GetData() const - { return m_data; } - -private: - size_t m_size; - char* m_data; - wxString m_id; -}; + void WriteBitmap( const wxBitmap &bitmap, void *dest ) const; + + // implementation + wxBitmap m_bitmap; + +}; -#endif +#endif //__GTKDNDH__