X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55d99c7a77789ff4904bf96eddca3715eb5af9b9..fad92e2f367f5c37ba4d80c9b57a4453e86c6ac2:/src/common/clipcmn.cpp diff --git a/src/common/clipcmn.cpp b/src/common/clipcmn.cpp index a0af907b6e..f8134784e0 100644 --- a/src/common/clipcmn.cpp +++ b/src/common/clipcmn.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/clipcmn.cpp +// Name: src/common/clipcmn.cpp // Purpose: common (to all ports) wxClipboard functions // Author: Robert Roebling // Modified by: @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "clipboardbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,54 +24,89 @@ #pragma hdrstop #endif +#if wxUSE_CLIPBOARD + #include "wx/clipbrd.h" -#include "wx/module.h" -#if wxUSE_CLIPBOARD +#ifndef WX_PRECOMP + #include "wx/dataobj.h" + #include "wx/module.h" +#endif + +// --------------------------------------------------------- +// wxClipboardEvent +// --------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxClipboardEvent,wxEvent) + +DEFINE_EVENT_TYPE(wxEVT_CLIPBOARD_CHANGED) + +bool wxClipboardEvent::SupportsFormat( const wxDataFormat &format ) const +{ +#ifdef __WXGTK20__ + // GTK has an asynchronnous API which reports + // the supported formats one by one. + // We may have to add X11 and Motif later. + wxVector::size_type n; + for (n = 0; n < m_formats.size(); n++) + { if (m_formats[n] == format) return true; } + return false; +#else + // All other ports just query the clipboard directly + // from here + wxClipboard* clipboard = (wxClipboard*) GetEventObject(); + return clipboard->IsSupported( format ); +#endif +} + +void wxClipboardEvent::AddFormat( const wxDataFormat &format ) +{ + m_formats.push_back( format ); +} + +// --------------------------------------------------------- +// wxClipboardBase +// --------------------------------------------------------- + +static wxClipboard *gs_clipboard = NULL; + +/*static*/ wxClipboard *wxClipboardBase::Get() +{ + if ( !gs_clipboard ) + { + gs_clipboard = new wxClipboard; + } + return gs_clipboard; +} + +bool wxClipboardBase::IsSupportedAsync( wxEvtHandler *sink ) +{ + // We just imitate an asynchronous API on most platforms. + // This method is overridden uner GTK. + wxClipboardEvent *event = new wxClipboardEvent(wxEVT_CLIPBOARD_CHANGED); + event->SetEventObject( this ); + + sink->QueueEvent( event ); + + return true; +} + // ---------------------------------------------------------------------------- -// wxClipboardModule: module responsible for initializing the global clipboard +// wxClipboardModule: module responsible for destroying the global clipboard // object // ---------------------------------------------------------------------------- class wxClipboardModule : public wxModule { public: - bool OnInit(); - void OnExit(); + bool OnInit() { return true; } + void OnExit() { wxDELETE(gs_clipboard); } private: DECLARE_DYNAMIC_CLASS(wxClipboardModule) }; -// ---------------------------------------------------------------------------- -// global data defined here -// ---------------------------------------------------------------------------- - IMPLEMENT_DYNAMIC_CLASS(wxClipboardModule, wxModule) -wxClipboard* wxTheClipboard = (wxClipboard *)NULL; - -// ---------------------------------------------------------------------------- -// implementation -// ---------------------------------------------------------------------------- - -wxClipboardBase::wxClipboardBase() -{ -} - -bool wxClipboardModule::OnInit() -{ - wxTheClipboard = new wxClipboard; - - return TRUE; -} - -void wxClipboardModule::OnExit() -{ - delete wxTheClipboard; - - wxTheClipboard = (wxClipboard *)NULL; -} - #endif // wxUSE_CLIPBOARD