20 #ifndef INCLUDED_VCL_TRANSFER_HXX
21 #define INCLUDED_VCL_TRANSFER_HXX
30 #include <com/sun/star/frame/XTerminateListener.hpp>
31 #include <com/sun/star/lang/XServiceInfo.hpp>
32 #include <com/sun/star/lang/XUnoTunnel.hpp>
33 #include <com/sun/star/datatransfer/XTransferable2.hpp>
34 #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
35 #include <com/sun/star/datatransfer/clipboard/XClipboardOwner.hpp>
36 #include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
37 #include <com/sun/star/datatransfer/dnd/XDragGestureListener.hpp>
38 #include <com/sun/star/datatransfer/dnd/DropTargetDragEvent.hpp>
39 #include <com/sun/star/datatransfer/dnd/DropTargetDropEvent.hpp>
40 #include <com/sun/star/datatransfer/dnd/XDragSourceListener.hpp>
41 #include <com/sun/star/datatransfer/dnd/XDropTargetListener.hpp>
42 #include <com/sun/star/embed/Aspects.hpp>
50 namespace tools {
template <
typename T>
class SvRef; }
51 template <
typename Arg,
typename Ret>
class Link;
66 #define DND_ACTION_NONE css::datatransfer::dnd::DNDConstants::ACTION_NONE
67 #define DND_ACTION_COPY css::datatransfer::dnd::DNDConstants::ACTION_COPY
68 #define DND_ACTION_MOVE css::datatransfer::dnd::DNDConstants::ACTION_MOVE
69 #define DND_ACTION_COPYMOVE css::datatransfer::dnd::DNDConstants::ACTION_COPY_OR_MOVE
70 #define DND_ACTION_LINK css::datatransfer::dnd::DNDConstants::ACTION_LINK
72 #define DND_POINTER_NONE 0
73 #define DND_IMAGE_NONE 0
85 : mnViewAspect(
css::
embed::Aspects::MSOLE_CONTENT)
94 const css::datatransfer::dnd::DropTargetDragEvent
maDragEvent;
102 mbDefault(
false ) {}
105 const Point& rPosPixel,
106 const css::datatransfer::dnd::DropTargetDragEvent& rDragEvent ) :
107 maPosPixel( rPosPixel ),
108 maDragEvent( rDragEvent ),
111 mbDefault(
false ) {}
122 const Point& rPosPixel,
123 const css::datatransfer::dnd::DropTargetDropEvent& rDropEvent ) :
124 maPosPixel( rPosPixel ),
125 maDropEvent( rDropEvent ),
127 mbDefault(
false ) {}
131 css::datatransfer::clipboard::XClipboardOwner,
132 css::datatransfer::dnd::XDragSourceListener,
133 css::lang::XUnoTunnel >
147 virtual void SAL_CALL disposing(
const css::lang::EventObject& Source )
override;
150 virtual void SAL_CALL queryTermination(
const css::lang::EventObject& aEvent )
override;
151 virtual void SAL_CALL notifyTermination(
const css::lang::EventObject& aEvent )
override;
170 mutable css::uno::Reference< css::datatransfer::clipboard::XClipboard >
mxClipboard;
173 std::unique_ptr<TransferableObjectDescriptor>
mxObjDesc;
178 const css::uno::Reference< css::datatransfer::clipboard::XClipboard >&
184 virtual css::uno::Any SAL_CALL
getTransferData(
const css::datatransfer::DataFlavor& rFlavor )
override;
190 const css::datatransfer::DataFlavor& rFlavor,
const OUString& rDestDoc )
override;
196 virtual void SAL_CALL
disposing(
const css::lang::EventObject& Source )
override;
199 virtual void SAL_CALL
dragDropEnd(
const css::datatransfer::dnd::DragSourceDropEvent& dsde )
override;
200 virtual void SAL_CALL
dragEnter(
const css::datatransfer::dnd::DragSourceDragEvent& dsde )
override;
201 virtual void SAL_CALL
dragExit(
const css::datatransfer::dnd::DragSourceEvent& dse )
override;
202 virtual void SAL_CALL
dragOver(
const css::datatransfer::dnd::DragSourceDragEvent& dsde )
override;
203 virtual void SAL_CALL
dropActionChanged(
const css::datatransfer::dnd::DragSourceDragEvent& dsde )
override;
206 virtual void SAL_CALL
lostOwnership(
const css::uno::Reference< css::datatransfer::clipboard::XClipboard >& xClipboard,
const css::uno::Reference< css::datatransfer::XTransferable >& xTrans )
override;
213 const css::uno::Reference< css::datatransfer::clipboard::XClipboard >& _rxClipboard,
214 const css::uno::Reference< css::datatransfer::XTransferable >& _rxTrans
228 void AddFormat(
const css::datatransfer::DataFlavor& rFlavor );
230 void RemoveFormat(
const css::datatransfer::DataFlavor& rFlavor );
234 bool SetAny(
const css::uno::Any& rAny );
235 bool SetString(
const OUString& rString );
243 bool SetObject(
void* pUserObject, sal_uInt32 nUserObjectId,
const css::datatransfer::DataFlavor& rFlavor );
248 virtual bool GetData(
const css::datatransfer::DataFlavor& rFlavor,
const OUString& rDestDoc ) = 0;
253 void CopyToSelection(
const css::uno::Reference<css::datatransfer::clipboard::XClipboard> &rClipboard)
const;
258 void CopyToClipboard(
const css::uno::Reference<css::datatransfer::clipboard::XClipboard> &rClipboard)
const;
272 virtual sal_Int64 SAL_CALL
getSomething(
const css::uno::Sequence< sal_Int8 >& rId )
override;
281 css::uno::Reference< css::datatransfer::XTransferable >
mxTransfer;
282 css::uno::Reference< css::datatransfer::clipboard::XClipboard >
mxClipboard;
284 std::unique_ptr<TransferableObjectDescriptor>
mxObjDesc;
285 std::unique_ptr<TransferableDataHelper_Impl>
mxImpl;
291 static void FillDataFlavorExVector(
const css::uno::Sequence< css::datatransfer::DataFlavor >& rDataFlavorSeq,
303 const
css::
uno::Reference<
css::datatransfer::XTransferable >& GetTransferable()
const {
return mxTransfer; }
304 css::uno::Reference< css::datatransfer::XTransferable > GetXTransferable()
const;
307 bool HasFormat(
const css::datatransfer::DataFlavor& rFlavor )
const;
309 sal_uInt32 GetFormatCount()
const;
312 css::datatransfer::DataFlavor GetFormatDataFlavor( sal_uInt32 nFormat )
const;
316 bool StartClipboardListening( );
317 void StopClipboardListening( );
319 void Rebind(
const css::uno::Reference< css::datatransfer::XTransferable >& _rxNewData );
322 css::uno::Any GetAny(
const css::datatransfer::DataFlavor& rFlavor,
const OUString& rDestDoc )
const;
325 bool GetString(
const css::datatransfer::DataFlavor& rFlavor, OUString& rStr )
const;
339 bool GetGDIMetaFile(
const css::datatransfer::DataFlavor& rFlavor,
GDIMetaFile& rMtf )
const;
342 bool GetGraphic(
const css::datatransfer::DataFlavor& rFlavor,
Graphic& rGraphic )
const;
345 bool GetImageMap(
const css::datatransfer::DataFlavor& rFlavor,
ImageMap& rImap )
const;
351 bool GetINetBookmark(
const css::datatransfer::DataFlavor& rFlavor,
INetBookmark& rBmk )
const;
354 bool GetINetImage(
const css::datatransfer::DataFlavor& rFlavor,
INetImage& rINtImg )
const;
357 bool GetFileList(
FileList& rFileList )
const;
359 css::uno::Sequence<sal_Int8> GetSequence(
SotClipboardFormatId nFormat,
const OUString& rDestDoc )
const;
360 css::uno::Sequence<sal_Int8> GetSequence(
const css::datatransfer::DataFlavor& rFlavor,
const OUString& rDestDoc )
const;
365 css::uno::Reference<css::io::XInputStream> GetInputStream(
SotClipboardFormatId nFormat,
const OUString& rDestDoc )
const;
366 css::uno::Reference<css::io::XInputStream> GetInputStream(
const css::datatransfer::DataFlavor& rFlavor,
const OUString& rDestDoc )
const;
368 static TransferableDataHelper CreateFromClipboard(
const css::uno::Reference<css::datatransfer::clipboard::XClipboard>& rClipboard);
371 static bool IsEqual(
const css::datatransfer::DataFlavor& rInternalFlavor,
372 const css::datatransfer::DataFlavor& rRequestFlavor );
380 class SAL_DLLPRIVATE
DragGestureListener final :
public cppu::WeakImplHelper< css::datatransfer::dnd::XDragGestureListener >
389 virtual void SAL_CALL disposing(
const css::lang::EventObject& Source )
override;
392 virtual void SAL_CALL dragGestureRecognized(
const css::datatransfer::dnd::DragGestureEvent& rDGE )
override;
426 class SAL_DLLPRIVATE
DropTargetListener final :
public cppu::WeakImplHelper< css::datatransfer::dnd::XDropTargetListener >
434 virtual void SAL_CALL disposing(
const css::lang::EventObject& Source )
override;
437 virtual void SAL_CALL drop(
const css::datatransfer::dnd::DropTargetDropEvent& dtde )
override;
438 virtual void SAL_CALL dragEnter(
const css::datatransfer::dnd::DropTargetDragEnterEvent& dtdee )
override;
439 virtual void SAL_CALL dragExit(
const css::datatransfer::dnd::DropTargetEvent& dte )
override;
440 virtual void SAL_CALL dragOver(
const css::datatransfer::dnd::DropTargetDragEvent& dtde )
override;
441 virtual void SAL_CALL dropActionChanged(
const css::datatransfer::dnd::DropTargetDragEvent& dtde )
override;
453 css::uno::Reference< css::datatransfer::dnd::XDropTarget >
mxDropTarget;
465 void ImplBeginDrag(
const css::uno::Sequence< css::datatransfer::DataFlavor >& rSupportedDataFlavors );
475 DropTargetHelper(
const css::uno::Reference< css::datatransfer::dnd::XDropTarget >& rxDropTarget );
491 std::unique_ptr<TransferDataContainer_Impl>
pImpl;
494 virtual bool GetData(
const css::datatransfer::DataFlavor& rFlavor,
const OUString& rDestDoc )
override;
502 void CopyString(
const OUString& rStr );
508 bool HasAnyData()
const;
BitmapEx GetBitmapEx(BitmapEx const &rBitmapEx, DrawModeFlags nDrawMode)
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
bool SetINetImage(const INetImage &rINtImg, const css::datatransfer::DataFlavor &rFlavor)
VCL_DLLPRIVATE void ImplFlush()
const css::datatransfer::dnd::DropTargetDropEvent maDropEvent
DropTargetHelper()=delete
css::uno::Reference< css::frame::XTerminateListener > mxTerminateListener
bool SetBitmapEx(const BitmapEx &rBitmap, const css::datatransfer::DataFlavor &rFlavor)
TransferableObjectDescriptor()
virtual sal_Bool SAL_CALL isDataFlavorSupported(const css::datatransfer::DataFlavor &rFlavor) override
virtual void SAL_CALL dragOver(const css::datatransfer::dnd::DragSourceDragEvent &dsde) override
virtual void AddSupportedFormats()=0
::std::vector< DataFlavorEx > DataFlavorExVector
css::uno::Reference< css::datatransfer::dnd::XDragGestureRecognizer > mxDragGestureRecognizer
bool SetTransferableObjectDescriptor(const TransferableObjectDescriptor &rDesc)
exports com.sun.star. embed
bool HasFormat(SotClipboardFormatId nFormat)
DataFlavorExVector maFormats
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
css::uno::Reference< css::datatransfer::clipboard::XClipboard > VCL_DLLPUBLIC GetSystemClipboard()
TransferableHelper & mrParent
virtual void DragFinished(sal_Int8 nDropAction)
virtual sal_Bool SAL_CALL isComplex() override
css::uno::Reference< css::datatransfer::dnd::XDropTarget > mxDropTarget
void ImplBeginDrag(const css::uno::Sequence< css::datatransfer::DataFlavor > &rSupportedDataFlavors)
DragSourceHelper(vcl::Window *pWindow)
bool SetINetBookmark(const INetBookmark &rBmk, const css::datatransfer::DataFlavor &rFlavor)
bool SetObject(void *pUserObject, sal_uInt32 nUserObjectId, const css::datatransfer::DataFlavor &rFlavor)
OUString GetString(int nId)
void AddFormat(SotClipboardFormatId nFormat)
DataFlavorExVector maFormats
const DataFlavorExVector & GetDataFlavorExVector() const
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
virtual css::uno::Any SAL_CALL getTransferData2(const css::datatransfer::DataFlavor &rFlavor, const OUString &rDestDoc) override
VCL_DLLPUBLIC friend SvStream & WriteTransferableObjectDescriptor(SvStream &rOStm, const TransferableObjectDescriptor &rObjDesc)
virtual bool WriteObject(tools::SvRef< SotTempStream > &rxOStm, void *pUserObject, sal_uInt32 nUserObjectId, const css::datatransfer::DataFlavor &rFlavor)
std::unique_ptr< TransferableDataHelper_Impl > mxImpl
std::unique_ptr< TransferableObjectDescriptor > mxObjDesc
std::unique_ptr< TransferDataContainer_Impl > pImpl
virtual void SAL_CALL dragEnter(const css::datatransfer::dnd::DragSourceDragEvent &dsde) override
virtual void SAL_CALL dropActionChanged(const css::datatransfer::dnd::DragSourceDragEvent &dsde) override
virtual sal_Int8 ExecuteDrop(const ExecuteDropEvent &rEvt)
bool operator==(const ItalicMatrix &a, const ItalicMatrix &b)
ExecuteDropEvent(sal_Int8 nAction, const Point &rPosPixel, const css::datatransfer::dnd::DropTargetDropEvent &rDropEvent)
bool SetGraphic(const Graphic &rGraphic)
DragSourceHelper & mrParent
void RemoveFormat(SotClipboardFormatId nFormat)
bool SetString(const OUString &rString)
void implCallOwnLostOwnership(const css::uno::Reference< css::datatransfer::clipboard::XClipboard > &_rxClipboard, const css::uno::Reference< css::datatransfer::XTransferable > &_rxTrans)
virtual sal_Int8 AcceptDrop(const AcceptDropEvent &rEvt)
static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId()
virtual ~DropTargetHelper()
void PrepareOLE(const TransferableObjectDescriptor &rObjDesc)
const css::uno::Reference< css::datatransfer::clipboard::XClipboard > & getOwnClipboard() const
void StartDrag(vcl::Window *pWindow, sal_Int8 nDragSourceActions)
void CopyToClipboard(const css::uno::Reference< css::datatransfer::clipboard::XClipboard > &rClipboard) const
std::unique_ptr< TransferableObjectDescriptor > mxObjDesc
DropTargetHelper & mrParent
virtual SotClipboardFormatId GetFormat(const TransferableDataHelper &aHelper) override
virtual void SAL_CALL dragExit(const css::datatransfer::dnd::DragSourceEvent &dse) override
virtual void SAL_CALL dragDropEnd(const css::datatransfer::dnd::DragSourceDropEvent &dsde) override
virtual void SAL_CALL lostOwnership(const css::uno::Reference< css::datatransfer::clipboard::XClipboard > &xClipboard, const css::uno::Reference< css::datatransfer::XTransferable > &xTrans) override
virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence< sal_Int8 > &rId) override
virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() override
bool SetImageMap(const ImageMap &rIMap)
css::uno::Reference< css::datatransfer::clipboard::XClipboard > mxClipboard
void CopyToPrimarySelection() const
css::uno::Reference< css::datatransfer::dnd::XDropTargetListener > mxDropTargetListener
virtual void ObjectReleased()
std::unique_ptr< AcceptDropEvent > mpLastDragOverEvent
DragSourceHelper & operator=(const DragSourceHelper &rDragSourceHelper)=delete
css::uno::Reference< css::datatransfer::dnd::XDragGestureListener > mxDragGestureListener
bool IsDropFormatSupported(SotClipboardFormatId nFormat) const
virtual ~DragSourceHelper()
css::uno::Reference< css::datatransfer::XTransferable > mxTransfer
css::uno::Reference< css::datatransfer::clipboard::XClipboard > VCL_DLLPUBLIC GetSystemPrimarySelection()
DataFlavorExVector maFormats
void CopyToSelection(const css::uno::Reference< css::datatransfer::clipboard::XClipboard > &rClipboard) const
css::uno::Reference< css::datatransfer::clipboard::XClipboard > mxClipboard
bool SetAny(const css::uno::Any &rAny)
static void ClearPrimarySelection()
virtual css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor &rFlavor) override
bool SetGDIMetaFile(const GDIMetaFile &rMtf)
const css::datatransfer::dnd::DropTargetDragEvent maDragEvent
bool m_bDetectedRangeSegmentation false
virtual bool GetData(const css::datatransfer::DataFlavor &rFlavor, const OUString &rDestDoc)=0
DropTargetHelper & operator=(const DropTargetHelper &rDropTargetHelper)=delete
AcceptDropEvent(sal_Int8 nAction, const Point &rPosPixel, const css::datatransfer::dnd::DropTargetDragEvent &rDragEvent)
const DataFlavorExVector & GetDataFlavorExVector() const