1998-11-02 09:12:29 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
2007-03-30 21:58:05 -04:00
|
|
|
// Name: wx/gtk/clipboard.h
|
|
|
|
// Purpose: wxClipboard for wxGTK
|
|
|
|
// Author: Robert Roebling, Vadim Zeitlin
|
1998-11-02 09:12:29 -05:00
|
|
|
// Id: $Id$
|
|
|
|
// Copyright: (c) 1998 Robert Roebling
|
2007-03-30 21:58:05 -04:00
|
|
|
// (c) 2007 Vadim Zeitlin
|
2004-05-23 16:53:33 -04:00
|
|
|
// Licence: wxWindows licence
|
1998-11-02 09:12:29 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2006-08-30 01:55:56 -04:00
|
|
|
#ifndef _WX_GTK_CLIPBOARD_H_
|
|
|
|
#define _WX_GTK_CLIPBOARD_H_
|
1998-11-02 09:12:29 -05:00
|
|
|
|
1999-10-20 20:25:42 -04:00
|
|
|
// ----------------------------------------------------------------------------
|
1998-11-02 09:12:29 -05:00
|
|
|
// wxClipboard
|
1999-10-20 20:25:42 -04:00
|
|
|
// ----------------------------------------------------------------------------
|
1998-11-02 09:12:29 -05:00
|
|
|
|
2008-12-21 17:15:50 -05:00
|
|
|
#include "wx/weakref.h"
|
|
|
|
|
2005-08-02 18:58:06 -04:00
|
|
|
class WXDLLIMPEXP_CORE wxClipboard : public wxClipboardBase
|
1998-11-02 09:12:29 -05:00
|
|
|
{
|
|
|
|
public:
|
2007-03-30 21:58:05 -04:00
|
|
|
// there are several clipboards in X11 (and in GDK)
|
|
|
|
enum Kind
|
|
|
|
{
|
|
|
|
Primary,
|
|
|
|
Clipboard
|
|
|
|
};
|
|
|
|
|
1999-02-06 18:25:47 -05:00
|
|
|
wxClipboard();
|
2006-09-05 16:47:48 -04:00
|
|
|
virtual ~wxClipboard();
|
1999-02-06 18:25:47 -05:00
|
|
|
|
|
|
|
// open the clipboard before SetData() and GetData()
|
|
|
|
virtual bool Open();
|
|
|
|
|
|
|
|
// close the clipboard after SetData() and GetData()
|
|
|
|
virtual void Close();
|
|
|
|
|
1999-10-21 09:56:34 -04:00
|
|
|
// query whether the clipboard is opened
|
|
|
|
virtual bool IsOpened() const;
|
|
|
|
|
1999-02-06 18:25:47 -05:00
|
|
|
// set the clipboard data. all other formats will be deleted.
|
|
|
|
virtual bool SetData( wxDataObject *data );
|
|
|
|
|
|
|
|
// add to the clipboard data.
|
|
|
|
virtual bool AddData( wxDataObject *data );
|
|
|
|
|
|
|
|
// ask if data in correct format is available
|
1999-10-20 20:25:42 -04:00
|
|
|
virtual bool IsSupported( const wxDataFormat& format );
|
1999-02-06 18:25:47 -05:00
|
|
|
|
2008-12-21 17:15:50 -05:00
|
|
|
// ask if data in correct format is available
|
|
|
|
virtual bool IsSupportedAsync( wxEvtHandler *sink );
|
|
|
|
|
1999-02-06 18:25:47 -05:00
|
|
|
// fill data with data on the clipboard (if available)
|
1999-10-20 20:25:42 -04:00
|
|
|
virtual bool GetData( wxDataObject& data );
|
1999-02-06 18:25:47 -05:00
|
|
|
|
|
|
|
// clears wxTheClipboard and the system's clipboard if possible
|
|
|
|
virtual void Clear();
|
|
|
|
|
2007-03-30 22:57:55 -04:00
|
|
|
|
2007-03-30 20:05:19 -04:00
|
|
|
|
1999-10-20 20:25:42 -04:00
|
|
|
// implementation from now on
|
2007-03-30 20:05:19 -04:00
|
|
|
// --------------------------
|
|
|
|
|
2007-03-30 21:58:05 -04:00
|
|
|
// get our clipboard item (depending on m_usePrimary value)
|
|
|
|
GdkAtom GTKGetClipboardAtom() const;
|
|
|
|
|
|
|
|
// get the data object currently being used
|
|
|
|
wxDataObject *GTKGetDataObject() { return Data(); }
|
1999-02-06 18:25:47 -05:00
|
|
|
|
2007-03-30 21:58:05 -04:00
|
|
|
// clear the data for the given clipboard kind
|
|
|
|
void GTKClearData(Kind kind);
|
1999-02-06 18:25:47 -05:00
|
|
|
|
2007-03-30 21:58:05 -04:00
|
|
|
// called when selection data is received
|
|
|
|
void GTKOnSelectionReceived(const GtkSelectionData& sel);
|
|
|
|
|
|
|
|
// called when available target information is received
|
|
|
|
bool GTKOnTargetReceived(const wxDataFormat& format);
|
1998-12-08 03:40:00 -05:00
|
|
|
|
1999-10-11 06:05:36 -04:00
|
|
|
private:
|
2007-08-15 07:52:13 -04:00
|
|
|
// the data object for the specific selection
|
|
|
|
wxDataObject *& Data(Kind kind)
|
|
|
|
{
|
|
|
|
return kind == Primary ? m_dataPrimary : m_dataClipboard;
|
|
|
|
}
|
|
|
|
|
2007-03-30 21:58:05 -04:00
|
|
|
// the data object we're currently using
|
|
|
|
wxDataObject *& Data()
|
|
|
|
{
|
2007-08-15 07:52:13 -04:00
|
|
|
return Data(m_usePrimary ? Primary : Clipboard);
|
2007-03-30 21:58:05 -04:00
|
|
|
}
|
|
|
|
|
2007-08-15 07:52:13 -04:00
|
|
|
|
2007-03-30 21:58:05 -04:00
|
|
|
// 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;
|
|
|
|
|
2008-12-21 17:15:50 -05:00
|
|
|
public:
|
|
|
|
// async stuff
|
|
|
|
wxEvtHandlerRef m_sink;
|
|
|
|
private:
|
|
|
|
GtkWidget *m_targetsWidgetAsync; // for getting list of supported formats
|
2007-03-30 21:58:05 -04:00
|
|
|
|
1999-10-20 20:25:42 -04:00
|
|
|
DECLARE_DYNAMIC_CLASS(wxClipboard)
|
1998-11-02 09:12:29 -05:00
|
|
|
};
|
|
|
|
|
2006-08-30 01:55:56 -04:00
|
|
|
#endif // _WX_GTK_CLIPBOARD_H_
|