* changing datatransfer from CFPasteboard to NSPasteboard API * factoring and cleaning up * Switching back naming * missed file * getting wxCFStringRef to be independent of system headers * add unichar include * using wxCFStringRef in header * moving to private headers, change method name * adapting to lesser content in cfstring.h * Removing malloc/free usage * use wxScopedArray throughout * using wxMemoryBuffer instead of char[] * fixing nonprecomp headers * missing forward decl in non-precomp builds
		
			
				
	
	
		
			114 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/osx/private/datatransfer.h
 | |
| // Purpose:     OS X specific data transfer implementation
 | |
| // Author:      Stefan Csomor
 | |
| // Created:     2019-03-29
 | |
| // Copyright:   (c) 2019 Stefan Csomor <vadim@wxwidgets.org>
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_OSX_PRIVATE_DATATRANSFER_H_
 | |
| #define _WX_OSX_PRIVATE_DATATRANSFER_H_
 | |
| 
 | |
| #include "wx/osx/private.h"
 | |
| #include "wx/osx/dataform.h"
 | |
| 
 | |
| class WXDLLIMPEXP_FWD_CORE wxDataObject;
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxOSXDataSourceItem
 | |
| {
 | |
| public:
 | |
|     virtual ~wxOSXDataSourceItem();
 | |
| 
 | |
|     virtual wxDataFormat::NativeFormat AvailableType(CFArrayRef types) const = 0;
 | |
| 
 | |
|     virtual bool GetData( const wxDataFormat& dataFormat, wxMemoryBuffer& target) = 0;
 | |
| 
 | |
|     virtual bool GetData( wxDataFormat::NativeFormat type, wxMemoryBuffer& target) = 0;
 | |
| 
 | |
|     virtual CFDataRef DoGetData(wxDataFormat::NativeFormat type) const = 0;
 | |
| };
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxOSXDataSource
 | |
| {
 | |
| public:
 | |
|     // the number of source items
 | |
|     virtual size_t GetItemCount() const = 0;
 | |
| 
 | |
|     // get source item by index, needs to be deleted after use
 | |
|     virtual const wxOSXDataSourceItem* GetItem(size_t pos) const = 0;
 | |
| 
 | |
|     // returns true if there is any data in this source conforming to dataFormat
 | |
|     virtual bool IsSupported(const wxDataFormat &dataFormat);
 | |
| 
 | |
|     // returns true if there is any data in this source supported by dataobj
 | |
|     virtual bool IsSupported(const wxDataObject &dataobj);
 | |
| 
 | |
|     // returns true if there is any data in this source of types
 | |
|     virtual bool HasData(CFArrayRef types) const = 0;
 | |
| 
 | |
| };
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxOSXDataSinkItem
 | |
| {
 | |
| public:
 | |
|     virtual ~wxOSXDataSinkItem();
 | |
| 
 | |
|     virtual void SetFilename(const wxString& filename);
 | |
| 
 | |
|     // translating from wx into native representation
 | |
|     virtual void SetData(const wxDataFormat& format, const void *buf, size_t size) = 0;
 | |
| 
 | |
|     // translating from wx into native representation
 | |
|     virtual void SetData(wxDataFormat::NativeFormat format, const void *buf, size_t size) = 0;
 | |
| 
 | |
|    // native implementation for setting data
 | |
|     virtual void DoSetData(wxDataFormat::NativeFormat format, CFDataRef data) = 0;
 | |
| };
 | |
| 
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxOSXDataSink
 | |
| {
 | |
| public:
 | |
|     // delete all created sink items
 | |
|     virtual void Clear() = 0;
 | |
| 
 | |
|     // create a new sink item
 | |
|     virtual wxOSXDataSinkItem* CreateItem() = 0;
 | |
| 
 | |
|     // flush the created sink items into the system sink representation
 | |
|     virtual void Flush() = 0 ;
 | |
| };
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxOSXPasteboard : public wxOSXDataSink, public wxOSXDataSource
 | |
| {
 | |
| public:
 | |
|     wxOSXPasteboard(OSXPasteboard native);
 | |
|     ~wxOSXPasteboard();
 | |
| 
 | |
|     // sink methods
 | |
| 
 | |
|     virtual wxOSXDataSinkItem* CreateItem() wxOVERRIDE;
 | |
| 
 | |
|     void Clear() wxOVERRIDE;
 | |
| 
 | |
|     void Flush() wxOVERRIDE;
 | |
| 
 | |
|     // source methods
 | |
| 
 | |
|     virtual size_t GetItemCount() const wxOVERRIDE;
 | |
| 
 | |
|     virtual const wxOSXDataSourceItem* GetItem(size_t pos) const wxOVERRIDE;
 | |
| 
 | |
|     virtual bool HasData(CFArrayRef types) const wxOVERRIDE;
 | |
| 
 | |
|     static wxOSXPasteboard* GetGeneralClipboard();
 | |
| private:
 | |
|     void DeleteSinkItems();
 | |
| 
 | |
|     OSXPasteboard m_pasteboard;
 | |
|     wxVector<wxOSXDataSinkItem*> m_sinkItems;
 | |
| };
 | |
| 
 | |
| #endif
 |