f83577df45
* 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
|