From c220de0b393b5098c705c1a62ef7fc4698e2fa52 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sun, 21 Dec 2008 22:15:50 +0000 Subject: [PATCH] Added experimental async clipboard format query git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57484 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/clipbrd.h | 38 ++++++++++++++++++++++++++++++++++++++ include/wx/gtk/clipbrd.h | 10 ++++++++++ src/common/clipcmn.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 73 insertions(+) diff --git a/include/wx/clipbrd.h b/include/wx/clipbrd.h index 738343ac4d..f42ee1cc92 100644 --- a/include/wx/clipbrd.h +++ b/include/wx/clipbrd.h @@ -19,6 +19,7 @@ #include "wx/object.h" #include "wx/chartype.h" +#include "wx/vector.h" class WXDLLIMPEXP_FWD_CORE wxDataFormat; class WXDLLIMPEXP_FWD_CORE wxDataObject; @@ -94,6 +95,43 @@ public: bool m_usePrimary; }; +// ---------------------------------------------------------------------------- +// asynchronous clipboard event +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxClipboardEvent : public wxEvent +{ +public: + wxClipboardEvent(wxEventType commandType = wxEVT_NULL) + : wxEvent(0,commandType) + { } + + wxClipboardEvent(const wxClipboardEvent& event) + : wxEvent(event), + m_formats(event.m_formats) + { } + + bool SupportsFormat( const wxDataFormat &format ) const; + void AddFormat( const wxDataFormat &format ); + + virtual wxEvent *Clone() const { return new wxClipboardEvent(*this); } + +protected: + wxVector m_formats; + +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxClipboardEvent) +}; + +extern WXDLLIMPEXP_CORE const wxEventType wxEVT_CLIPBOARD_CHANGED; + +typedef void (wxEvtHandler::*wxClipboardEventFunction)(wxClipboardEvent&); + +#define wxClipboardEventHandler(func) \ + (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxClipboardEventFunction, &func) + +#define EVT_CLIPBOARD_CHANGED(func) wx__DECLARE_EVT0(wxEVT_CLIPBOARD_CHANGED, wxClipboardEventHandler(func)) + // ---------------------------------------------------------------------------- // globals // ---------------------------------------------------------------------------- diff --git a/include/wx/gtk/clipbrd.h b/include/wx/gtk/clipbrd.h index 04f26042eb..548e911743 100644 --- a/include/wx/gtk/clipbrd.h +++ b/include/wx/gtk/clipbrd.h @@ -15,6 +15,8 @@ // wxClipboard // ---------------------------------------------------------------------------- +#include "wx/weakref.h" + class WXDLLIMPEXP_CORE wxClipboard : public wxClipboardBase { public: @@ -46,6 +48,9 @@ public: // ask if data in correct format is available virtual bool IsSupported( const wxDataFormat& format ); + // ask if data in correct format is available + virtual bool IsSupportedAsync( wxEvtHandler *sink ); + // fill data with data on the clipboard (if available) virtual bool GetData( wxDataObject& data ); @@ -116,6 +121,11 @@ private: bool m_open; bool m_formatSupported; +public: + // async stuff + wxEvtHandlerRef m_sink; +private: + GtkWidget *m_targetsWidgetAsync; // for getting list of supported formats DECLARE_DYNAMIC_CLASS(wxClipboard) }; diff --git a/src/common/clipcmn.cpp b/src/common/clipcmn.cpp index 4b9225b042..afdd300f30 100644 --- a/src/common/clipcmn.cpp +++ b/src/common/clipcmn.cpp @@ -32,6 +32,31 @@ #include "wx/module.h" #endif +// --------------------------------------------------------- +// wxClipboardEvent +// --------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxClipboardEvent,wxEvent) + +DEFINE_EVENT_TYPE(wxEVT_CLIPBOARD_CHANGED) + +bool wxClipboardEvent::SupportsFormat( const wxDataFormat &format ) const +{ + wxVector::size_type n; + for (n = 0; n < m_formats.size(); n++) + { if (m_formats[n] == format) return true; } + return false; +} + +void wxClipboardEvent::AddFormat( const wxDataFormat &format ) +{ + m_formats.push_back( format ); +} + +// --------------------------------------------------------- +// wxClipboardBase +// --------------------------------------------------------- + static wxClipboard *gs_clipboard = NULL; /*static*/ wxClipboard *wxClipboardBase::Get() -- 2.45.2