1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/clipbrd.h 3// Purpose: wxClipboad class and clipboard functions 4// Author: Vadim Zeitlin 5// Modified by: 6// Created: 19.10.99 7// RCS-ID: $Id: clipbrd.h 49563 2007-10-31 20:46:21Z VZ $ 8// Copyright: (c) wxWidgets Team 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_CLIPBRD_H_BASE_ 13#define _WX_CLIPBRD_H_BASE_ 14 15#include "wx/defs.h" 16 17#if wxUSE_CLIPBOARD 18 19 20#include "wx/object.h" 21#include "wx/wxchar.h" 22 23class WXDLLIMPEXP_FWD_CORE wxDataFormat; 24class WXDLLIMPEXP_FWD_CORE wxDataObject; 25class WXDLLIMPEXP_FWD_CORE wxClipboard; 26 27// ---------------------------------------------------------------------------- 28// wxClipboard represents the system clipboard. Normally, you should use 29// wxTheClipboard which is a global pointer to the (unique) clipboard. 30// 31// Clipboard can be used to copy data to/paste data from. It works together 32// with wxDataObject. 33// ---------------------------------------------------------------------------- 34 35class WXDLLEXPORT wxClipboardBase : public wxObject 36{ 37public: 38 wxClipboardBase() {} 39 40 // open the clipboard before Add/SetData() and GetData() 41 virtual bool Open() = 0; 42 43 // close the clipboard after Add/SetData() and GetData() 44 virtual void Close() = 0; 45 46 // query whether the clipboard is opened 47 virtual bool IsOpened() const = 0; 48 49 // add to the clipboard data 50 // 51 // NB: the clipboard owns the pointer and will delete it, so data must be 52 // allocated on the heap 53 virtual bool AddData( wxDataObject *data ) = 0; 54 55 // set the clipboard data, this is the same as Clear() followed by 56 // AddData() 57 virtual bool SetData( wxDataObject *data ) = 0; 58 59 // ask if data in correct format is available 60 virtual bool IsSupported( const wxDataFormat& format ) = 0; 61 62 // fill data with data on the clipboard (if available) 63 virtual bool GetData( wxDataObject& data ) = 0; 64 65 // clears wxTheClipboard and the system's clipboard if possible 66 virtual void Clear() = 0; 67 68 // flushes the clipboard: this means that the data which is currently on 69 // clipboard will stay available even after the application exits (possibly 70 // eating memory), otherwise the clipboard will be emptied on exit 71 virtual bool Flush() { return false; } 72 73 // X11 has two clipboards which get selected by this call. Empty on MSW. 74 virtual void UsePrimarySelection( bool WXUNUSED(primary) = false ) { } 75 76 // Returns global instance (wxTheClipboard) of the object: 77 static wxClipboard *Get(); 78}; 79 80// ---------------------------------------------------------------------------- 81// globals 82// ---------------------------------------------------------------------------- 83 84// The global clipboard object - backward compatible access macro: 85#define wxTheClipboard (wxClipboard::Get()) 86 87// ---------------------------------------------------------------------------- 88// include platform-specific class declaration 89// ---------------------------------------------------------------------------- 90 91#if defined(__WXMSW__) 92 #include "wx/msw/clipbrd.h" 93#elif defined(__WXMOTIF__) 94 #include "wx/motif/clipbrd.h" 95#elif defined(__WXGTK20__) 96 #include "wx/gtk/clipbrd.h" 97#elif defined(__WXGTK__) 98 #include "wx/gtk1/clipbrd.h" 99#elif defined(__WXX11__) 100 #include "wx/x11/clipbrd.h" 101#elif defined(__WXMGL__) 102 #include "wx/mgl/clipbrd.h" 103#elif defined(__WXMAC__) 104 #include "wx/mac/clipbrd.h" 105#elif defined(__WXCOCOA__) 106 #include "wx/cocoa/clipbrd.h" 107#elif defined(__WXPM__) 108 #include "wx/os2/clipbrd.h" 109#endif 110 111// ---------------------------------------------------------------------------- 112// helpful class for opening the clipboard and automatically closing it 113// ---------------------------------------------------------------------------- 114 115class WXDLLEXPORT wxClipboardLocker 116{ 117public: 118 wxClipboardLocker(wxClipboard *clipboard = (wxClipboard *)NULL) 119 { 120 m_clipboard = clipboard ? clipboard : wxTheClipboard; 121 if ( m_clipboard ) 122 { 123 m_clipboard->Open(); 124 } 125 } 126 127 bool operator!() const { return !m_clipboard->IsOpened(); } 128 129 ~wxClipboardLocker() 130 { 131 if ( m_clipboard ) 132 { 133 m_clipboard->Close(); 134 } 135 } 136 137private: 138 wxClipboard *m_clipboard; 139 140 DECLARE_NO_COPY_CLASS(wxClipboardLocker) 141}; 142 143#endif // wxUSE_CLIPBOARD 144 145#endif // _WX_CLIPBRD_H_BASE_ 146