X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/06cfab17389f4bbd38560dd86ee39931e979bb1e..f77c0fe312a1dedde4a86c9b967d095802c10384:/include/wx/gtk/clipbrd.h diff --git a/include/wx/gtk/clipbrd.h b/include/wx/gtk/clipbrd.h index ace437d5d9..df95600542 100644 --- a/include/wx/gtk/clipbrd.h +++ b/include/wx/gtk/clipbrd.h @@ -1,110 +1,116 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: clipboard.h -// Purpose: -// Author: Robert Roebling +// Name: wx/gtk/clipboard.h +// Purpose: wxClipboard for wxGTK +// Author: Robert Roebling, Vadim Zeitlin // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// (c) 2007 Vadim Zeitlin +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#ifndef _WX_GTK_CLIPBOARD_H_ +#define _WX_GTK_CLIPBOARD_H_ -#ifndef __GTKCLIPBOARDH__ -#define __GTKCLIPBOARDH__ +// ---------------------------------------------------------------------------- +// wxClipboard +// ---------------------------------------------------------------------------- -#ifdef __GNUG__ -#pragma interface -#endif +class WXDLLIMPEXP_CORE wxClipboard : public wxClipboardBase +{ +public: + // there are several clipboards in X11 (and in GDK) + enum Kind + { + Primary, + Clipboard + }; -#include "wx/defs.h" + wxClipboard(); + virtual ~wxClipboard(); -#if wxUSE_CLIPBOARD + // open the clipboard before SetData() and GetData() + virtual bool Open(); -#include "wx/object.h" -#include "wx/list.h" -#include "wx/dataobj.h" -#include "wx/control.h" -#include "wx/module.h" + // close the clipboard after SetData() and GetData() + virtual void Close(); -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- + // query whether the clipboard is opened + virtual bool IsOpened() const; -class wxClipboard; -class wxClipboardModule; + // set the clipboard data. all other formats will be deleted. + virtual bool SetData( wxDataObject *data ); -//----------------------------------------------------------------------------- -// global data -//----------------------------------------------------------------------------- + // add to the clipboard data. + virtual bool AddData( wxDataObject *data ); -extern wxClipboard* wxTheClipboard; + // ask if data in correct format is available + virtual bool IsSupported( const wxDataFormat& format ); -//----------------------------------------------------------------------------- -// wxClipboard -//----------------------------------------------------------------------------- + // fill data with data on the clipboard (if available) + virtual bool GetData( wxDataObject& data ); -class wxClipboard: public wxObject -{ - DECLARE_DYNAMIC_CLASS(wxClipboard) + // clears wxTheClipboard and the system's clipboard if possible + virtual void Clear(); -public: - - wxClipboard(); - ~wxClipboard(); - - // open the clipboard before SetData() and GetData() - virtual bool Open(); - - // close the clipboard after SetData() and GetData() - virtual void Close(); - - // can be called several times - virtual bool SetData( wxDataObject *data ); - - // format available on the clipboard ? - // supply ID if private format, the same as wxPrivateDataObject::SetId() - virtual bool IsSupportedFormat( wxDataFormat format, const wxString &id = "" ); - - // fill data with data on the clipboard (if available) - virtual bool GetData( wxDataObject *data ); - - // clears wxTheClipboard and the system's clipboard if possible - virtual void Clear(); - - // implementation - - GdkAtom GetTargetAtom( wxDataFormat format, const wxString &id = "" ); - - bool m_open; - - bool m_ownsClipboard; - bool m_ownsPrimarySelection; - - wxList m_dataObjects; - GtkWidget *m_clipboardWidget; - - bool m_formatSupported; - GdkAtom m_targetRequested; - - wxDataObject *m_receivedData; -}; -//----------------------------------------------------------------------------- -// wxClipboardModule -//----------------------------------------------------------------------------- -class wxClipboardModule: public wxModule -{ - DECLARE_DYNAMIC_CLASS(wxClipboardModule) - -public: - wxClipboardModule() {} - bool OnInit(); - void OnExit(); -}; + // implementation from now on + // -------------------------- + + // get our clipboard item (depending on m_usePrimary value) + GdkAtom GTKGetClipboardAtom() const; + + // get the data object currently being used + wxDataObject *GTKGetDataObject() { return Data(); } + + // clear the data for the given clipboard kind + void GTKClearData(Kind kind); -#endif + // called when selection data is received + void GTKOnSelectionReceived(const GtkSelectionData& sel); - // wxUSE_CLIPBOARD + // called when available target information is received + bool GTKOnTargetReceived(const wxDataFormat& format); + +private: + // the data object we're currently using + wxDataObject *& Data() + { + return m_usePrimary ? m_dataPrimary : m_dataClipboard; + } + + // set or unset selection ownership + bool SetSelectionOwner(bool set = true); + + // add atom to the list of supported targets + void AddSupportedTarget(GdkAtom atom); + + // check if the given format is supported + bool DoIsSupported(const wxDataFormat& format); + + + // both of these pointers can be non-NULL simultaneously but we only use + // one of them at any moment depending on m_usePrimary value, use Data() + // (from inside) or GTKGetDataObject() (from outside) accessors + wxDataObject *m_dataPrimary, + *m_dataClipboard; + + // this is used to temporarily hold the object passed to our GetData() so + // that GTK callbacks could access it + wxDataObject *m_receivedData; + + // used to pass information about the format we need from DoIsSupported() + // to GTKOnTargetReceived() + GdkAtom m_targetRequested; + + GtkWidget *m_clipboardWidget; // for getting and offering data + GtkWidget *m_targetsWidget; // for getting list of supported formats + + bool m_open; + bool m_formatSupported; + + + DECLARE_DYNAMIC_CLASS(wxClipboard) +}; -#endif - // __GTKCLIPBOARDH__ +#endif // _WX_GTK_CLIPBOARD_H_