xref: /trunk/main/svtools/inc/svtools/transfer.hxx (revision 45fd3b9a)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _TRANSFER_HXX
25 #define _TRANSFER_HXX
26 
27 #include "svtools/svtdllapi.h"
28 #include <tools/globname.hxx>
29 #include <tools/gen.hxx>
30 #include <sot/formats.hxx>
31 #include <cppuhelper/implbase1.hxx>
32 #include <cppuhelper/implbase4.hxx>
33 #include <com/sun/star/frame/XTerminateListener.hpp>
34 #include <com/sun/star/lang/XUnoTunnel.hpp>
35 #include <com/sun/star/datatransfer/XTransferable.hpp>
36 #include <com/sun/star/datatransfer/clipboard/XClipboardOwner.hpp>
37 #include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
38 #include <com/sun/star/datatransfer/dnd/XDragGestureRecognizer.hpp>
39 #include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
40 #include <com/sun/star/datatransfer/dnd/DropTargetDragEvent.hpp>
41 #include <com/sun/star/datatransfer/dnd/DropTargetDropEvent.hpp>
42 #include <com/sun/star/datatransfer/dnd/XDragSourceListener.hpp>
43 #ifndef _COM_SUN_STAR_DATATRANSFER_DND_XDROPTARGETELISTENER_HPP_
44 #include <com/sun/star/datatransfer/dnd/XDropTargetListener.hpp>
45 #endif
46 #include <com/sun/star/io/XInputStream.hpp>
47 
48 // ------------------------
49 // - Forward declarations -
50 // ------------------------
51 
52 class BitmapEx;
53 class GDIMetaFile;
54 class Graphic;
55 class ImageMap;
56 class SotStorageStreamRef;
57 class INetBookmark;
58 class INetImage;
59 class FileList;
60 class Window;
61 class Link;
62 
63 // ---------------------
64 // - Drag&Drop defines -
65 // ---------------------
66 
67 #define DND_ACTION_NONE		::com::sun::star::datatransfer::dnd::DNDConstants::ACTION_NONE
68 #define DND_ACTION_COPY		::com::sun::star::datatransfer::dnd::DNDConstants::ACTION_COPY
69 #define DND_ACTION_MOVE		::com::sun::star::datatransfer::dnd::DNDConstants::ACTION_MOVE
70 #define DND_ACTION_COPYMOVE ::com::sun::star::datatransfer::dnd::DNDConstants::ACTION_COPY_OR_MOVE
71 #define DND_ACTION_LINK		::com::sun::star::datatransfer::dnd::DNDConstants::ACTION_LINK
72 
73 #define DND_POINTER_NONE	0
74 #define DND_IMAGE_NONE		0
75 
76 // --------------------------------
77 // - TransferableObjectDescriptor -
78 // --------------------------------
79 
80 struct TransferableObjectDescriptor
81 {
82 	SvGlobalName		maClassName;
83 	sal_uInt16			mnViewAspect;
84 	Point				maDragStartPos;
85 	Size				maSize;
86 	sal_uInt32			mnOle2Misc;
87 	String				maTypeName;
88 	String				maDisplayName;
89 	sal_Bool			mbCanLink;
90 	void*				mpDummy1;
91 	void*				mpDummy2;
92 	sal_Bool			mbDummy1;
93 
94     SVT_DLLPUBLIC friend SvStream&	operator>>( SvStream& rIStm, TransferableObjectDescriptor& rObjDesc );
95     SVT_DLLPUBLIC friend SvStream&	operator<<( SvStream& rOStm, const TransferableObjectDescriptor& rObjDesc );
96 };
97 
98 // -------------------
99 // - AcceptDragEvent -
100 // -------------------
101 
102 struct AcceptDropEvent
103 {
104 	sal_Int8														mnAction;
105 	Point															maPosPixel;
106 	const ::com::sun::star::datatransfer::dnd::DropTargetDragEvent	maDragEvent;
107 	sal_Bool														mbLeaving;
108     sal_Bool                                                        mbDefault;
109     sal_Bool                                                        mbDummy1;
110     sal_Bool                                                        mbDummy2;
111     sal_Bool                                                        mbDummy3;
112 
AcceptDropEventAcceptDropEvent113 	AcceptDropEvent() :
114 		mnAction( DND_ACTION_NONE ),
115 		mbLeaving( sal_False ),
116         mbDefault( sal_False ) {}
117 
AcceptDropEventAcceptDropEvent118 	AcceptDropEvent( sal_Int8 nAction,
119 					 const Point& rPosPixel,
120 					 const ::com::sun::star::datatransfer::dnd::DropTargetDragEvent& rDragEvent,
121 					 sal_Bool bLeaving = sal_False ) :
122 		mnAction( nAction ),
123 		maPosPixel( rPosPixel ),
124 		maDragEvent( rDragEvent ),
125 		mbLeaving( bLeaving ),
126         mbDefault( sal_False ) {}
127 };
128 
129 // --------------------
130 // - ExecuteDropEvent -
131 // --------------------
132 
133 struct ExecuteDropEvent
134 {
135 	sal_Int8														mnAction;
136 	Point															maPosPixel;
137 	const ::com::sun::star::datatransfer::dnd::DropTargetDropEvent	maDropEvent;
138     sal_Bool                                                        mbDefault;
139     sal_Bool                                                        mbDummy1;
140     sal_Bool                                                        mbDummy2;
141     sal_Bool                                                        mbDummy3;
142 
ExecuteDropEventExecuteDropEvent143 	ExecuteDropEvent() :
144 		mnAction( DND_ACTION_NONE ),
145         mbDefault( sal_False ) {}
146 
ExecuteDropEventExecuteDropEvent147 	ExecuteDropEvent( sal_Int8 nAction,
148 					  const Point& rPosPixel,
149 					  const ::com::sun::star::datatransfer::dnd::DropTargetDropEvent& rDropEvent ) :
150 		mnAction( nAction ),
151 		maPosPixel( rPosPixel ),
152 		maDropEvent( rDropEvent ),
153         mbDefault( sal_False ) {}
154 };
155 
156 // ----------------------
157 // - TransferableHelper -
158 // ----------------------
159 
160 class SVT_DLLPUBLIC TransferableHelper : public ::cppu::WeakImplHelper4< ::com::sun::star::datatransfer::XTransferable,
161 														   ::com::sun::star::datatransfer::clipboard::XClipboardOwner,
162 														   ::com::sun::star::datatransfer::dnd::XDragSourceListener,
163 														   ::com::sun::star::lang::XUnoTunnel >
164 {
165 private:
166 
167 	// nested class to implement the XTerminateListener interface
168 	class TerminateListener : public ::cppu::WeakImplHelper1< ::com::sun::star::frame::XTerminateListener >
169 	{
170 	private:
171 
172 		TransferableHelper&	mrParent;
173 		void*				mpDummy;
174 
175 	private:
176 
177 		// XEventListener
178 		virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw( ::com::sun::star::uno::RuntimeException );
179 
180 		// XTerminateListener
181 		virtual void SAL_CALL queryTermination( const ::com::sun::star::lang::EventObject& aEvent ) throw( ::com::sun::star::frame::TerminationVetoException, ::com::sun::star::uno::RuntimeException );
182 		virtual void SAL_CALL notifyTermination( const ::com::sun::star::lang::EventObject& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
183 
184 	public:
185 
186 		                      TerminateListener( TransferableHelper& rDropTargetHelper );
187 		virtual	              ~TerminateListener();
188 	};
189 
190 	friend class TransferableHelper::TerminateListener;
191 
192 private:
193 
194 	DataFlavorExList																			        maDummy;
195 	::com::sun::star::uno::Any																	        maAny;
196 	::rtl::OUString  																			        maLastFormat;
197 	mutable ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard >	mxClipboard;
198 	::com::sun::star::uno::Reference< ::com::sun::star::frame::XTerminateListener >				        mxTerminateListener;
199 	DataFlavorExVector*																			        mpFormats;
200     TransferableObjectDescriptor*                                                                       mpObjDesc;
201 	void*																						        mpDummy1;
202 
203 protected:
204 	inline const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard >&
getOwnClipboard() const205 		getOwnClipboard() const { return mxClipboard; }
206 
207 private:
208 
209     // XTransferable
210 	virtual ::com::sun::star::uno::Any SAL_CALL	getTransferData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) throw(::com::sun::star::datatransfer::UnsupportedFlavorException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
211     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() throw(::com::sun::star::uno::RuntimeException);
212     virtual sal_Bool SAL_CALL isDataFlavorSupported( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) throw(::com::sun::star::uno::RuntimeException);
213 
214 	// XEventListener
215 	virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
216 
217     // XDragSourceListener
218     virtual void SAL_CALL dragDropEnd( const ::com::sun::star::datatransfer::dnd::DragSourceDropEvent& dsde ) throw(::com::sun::star::uno::RuntimeException);
219     virtual void SAL_CALL dragEnter( const ::com::sun::star::datatransfer::dnd::DragSourceDragEvent& dsde ) throw(::com::sun::star::uno::RuntimeException);
220     virtual void SAL_CALL dragExit( const ::com::sun::star::datatransfer::dnd::DragSourceEvent& dse ) throw(::com::sun::star::uno::RuntimeException);
221     virtual void SAL_CALL dragOver( const ::com::sun::star::datatransfer::dnd::DragSourceDragEvent& dsde ) throw(::com::sun::star::uno::RuntimeException);
222     virtual void SAL_CALL dropActionChanged( const ::com::sun::star::datatransfer::dnd::DragSourceDragEvent& dsde ) throw(::com::sun::star::uno::RuntimeException);
223 
224 private:
225 
226 	// XClipboardOwner
227     virtual void SAL_CALL lostOwnership( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard >& xClipboard, const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& xTrans ) throw(::com::sun::star::uno::RuntimeException);
228 
229 protected:
230 	// derivees need to access lostOwnership in case hey override it
231 	// on windows, changing the access rights to a method gives unresolved externals, so we introduce
232 	// this impl-method here 'til the next incompatible update
implCallOwnLostOwnership(const::com::sun::star::uno::Reference<::com::sun::star::datatransfer::clipboard::XClipboard> & _rxClipboard,const::com::sun::star::uno::Reference<::com::sun::star::datatransfer::XTransferable> & _rxTrans)233 	inline	void	implCallOwnLostOwnership(
234 						const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard >& _rxClipboard,
235 						const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& _rxTrans
236 					)
237 			{
238 				TransferableHelper::lostOwnership( _rxClipboard, _rxTrans );
239 			}
240 
241 
242 private:
243 
244 	SVT_DLLPRIVATE void			    ImplFlush();
245 
246 protected:
247 
248 	virtual			    ~TransferableHelper();
249 
250 	void			    AddFormat( SotFormatStringId nFormat );
251 	void			    AddFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
252 	void			    RemoveFormat( SotFormatStringId nFormat );
253 	void			    RemoveFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
254 	sal_Bool		    HasFormat( SotFormatStringId nFormat );
HasFormat(const::com::sun::star::datatransfer::DataFlavor & rFlavor)255 	inline sal_Bool	    HasFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) { return isDataFlavorSupported( rFlavor ); }
256 	void			    ClearFormats();
257 
258 	sal_Bool		    SetAny( const ::com::sun::star::uno::Any& rAny, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
259 	sal_Bool		    SetString( const ::rtl::OUString& rString, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
260 	sal_Bool		    SetBitmapEx( const BitmapEx& rBitmap, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
261 	sal_Bool		    SetGDIMetaFile( const GDIMetaFile& rMtf, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
262 	sal_Bool		    SetGraphic( const Graphic& rGraphic, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
263     sal_Bool            SetImageMap( const ImageMap& rIMap, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
264 	sal_Bool		    SetTransferableObjectDescriptor( const TransferableObjectDescriptor& rDesc, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
265 	sal_Bool		    SetINetBookmark( const INetBookmark& rBmk, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
266 	sal_Bool		    SetINetImage( const INetImage& rINtImg, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
267 	sal_Bool		    SetFileList( const FileList& rFileList, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
268 	sal_Bool		    SetObject( void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
269 	sal_Bool		    SetInterface( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rIf,
270 					    			  const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
271 
272 protected:
273 
274 	virtual void	    AddSupportedFormats() = 0;
275 	virtual sal_Bool    GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) = 0;
276 	virtual sal_Bool    WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
277 	virtual void	    DragFinished( sal_Int8 nDropAction );
278 	virtual void	    ObjectReleased();
279 
280 public:
281 
282 					    TransferableHelper();
283 
284     void                PrepareOLE( const TransferableObjectDescriptor& rObjDesc );
285 
286 	void			    CopyToClipboard( Window *pWindow ) const;
287 	void			    CopyToSelection( Window *pWindow ) const;
288 	void			    StartDrag( Window* pWindow, sal_Int8 nDragSourceActions,
289 					    		   sal_Int32 nDragPointer = DND_POINTER_NONE,
290 					    		   sal_Int32 nDragImage = DND_IMAGE_NONE );
291 
292 	static void			ClearSelection( Window *pWindow );
293 
294 	static ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > GetSystemClipboard();
295 	static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelId();
296 
297 public:
298 
299     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException );
300 };
301 
302 // --------------------------
303 // - TransferableDataHelper -
304 // --------------------------
305 
306 struct TransferableDataHelper_Impl;
307 
308 class SVT_DLLPUBLIC TransferableDataHelper
309 {
310     friend class DropTargetHelper;
311 
312 private:
313 
314 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >			mxTransfer;
315 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard >	mxClipboard;
316 	DataFlavorExVector*																			mpFormats;
317     TransferableObjectDescriptor*                                                               mpObjDesc;
318 	TransferableDataHelper_Impl*                                                                mpImpl;
319 	void*																						mpDummy4;
320 
321 protected:
322 	void						InitFormats();
323 
324 public:
325 
326     static void                 FillDataFlavorExVector( const ::com::sun::star::uno::Sequence< ::com::sun::star::datatransfer::DataFlavor >& rDataFlavorSeq,
327                                                         DataFlavorExVector& rDataFlavorExVector );
328 
329 								TransferableDataHelper();
330 								TransferableDataHelper( const TransferableDataHelper& rDataHelper );
331 								TransferableDataHelper( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& rxTransferable );
332 								~TransferableDataHelper();
333 
334 	TransferableDataHelper&		operator=( const TransferableDataHelper& rDataHelper );
335 
GetTransferable() const336 	const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >&	GetTransferable() const { return mxTransfer; }
337 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >			GetXTransferable() const;
338 
339 	sal_Bool					HasFormat( SotFormatStringId nFormat ) const;
340 	sal_Bool					HasFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) const;
341 
342 	sal_uInt32					GetFormatCount() const;
343 
344 	SotFormatStringId			                GetFormat( sal_uInt32 nFormat ) const;
345 	::com::sun::star::datatransfer::DataFlavor	GetFormatDataFlavor( sal_uInt32 nFormat ) const;
346 
GetDataFlavorExVector() const347 	DataFlavorExVector&			GetDataFlavorExVector() const {return *mpFormats; }
348 
349 	sal_Bool					StartClipboardListening( );
350 	void						StopClipboardListening( );
351 
352 	void						Rebind( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& _rxNewData );
353 
354 public:
355 
356 	::com::sun::star::uno::Any	GetAny( SotFormatStringId nFormat ) const;
357 	::com::sun::star::uno::Any	GetAny( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) const;
358 
359 	sal_Bool					GetString( SotFormatStringId nFormat, String& rStr );
360 	sal_Bool					GetString( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, String& rStr );
361 
362 	sal_Bool					GetString( SotFormatStringId nFormat, ::rtl::OUString& rStr );
363 	sal_Bool					GetString( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::rtl::OUString& rStr );
364 
365 	sal_Bool					GetBitmapEx( SotFormatStringId nFormat, BitmapEx& rBmp );
366 	sal_Bool					GetBitmapEx( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, BitmapEx& rBmp );
367 
368 	sal_Bool					GetGDIMetaFile( SotFormatStringId nFormat, GDIMetaFile& rMtf );
369 	sal_Bool					GetGDIMetaFile( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, GDIMetaFile& rMtf );
370 
371 	sal_Bool					GetGraphic( SotFormatStringId nFormat, Graphic& rGraphic );
372 	sal_Bool					GetGraphic( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, Graphic& rGraphic );
373 
374     sal_Bool                    GetImageMap( SotFormatStringId nFormat, ImageMap& rIMap );
375     sal_Bool                    GetImageMap( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ImageMap& rImap );
376 
377 	sal_Bool					GetTransferableObjectDescriptor( SotFormatStringId nFormat, TransferableObjectDescriptor& rDesc );
378 	sal_Bool					GetTransferableObjectDescriptor( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, TransferableObjectDescriptor& rDesc );
379 
380 	sal_Bool					GetINetBookmark( SotFormatStringId nFormat, INetBookmark& rBmk );
381 	sal_Bool					GetINetBookmark( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, INetBookmark& rBmk );
382 
383 	sal_Bool					GetINetImage( SotFormatStringId nFormat, INetImage& rINtImg );
384 	sal_Bool					GetINetImage( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, INetImage& rINtImg );
385 
386 	sal_Bool					GetFileList( SotFormatStringId nFormat, FileList& rFileList );
387 	sal_Bool					GetFileList( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, FileList& rFileList );
388 
389 	sal_Bool					GetSequence( SotFormatStringId nFormat, ::com::sun::star::uno::Sequence< sal_Int8 >& rSeq );
390 	sal_Bool					GetSequence( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Sequence< sal_Int8 >& rSeq );
391 
392 	sal_Bool					GetSotStorageStream( SotFormatStringId nFormat, SotStorageStreamRef& rStreamRef );
393 	sal_Bool					GetSotStorageStream( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, SotStorageStreamRef& rStreamRef );
394 
395     sal_Bool                    GetInputStream( SotFormatStringId nFormat, ::com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& xStream );
396     sal_Bool                    GetInputStream( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& xStream );
397 
398 	sal_Bool					GetInterface( SotFormatStringId nFormat, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rIf );
399 	sal_Bool					GetInterface( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rIf );
400 
401 public:
402 
403 	static TransferableDataHelper	CreateFromSystemClipboard( Window * pWindow );
404 	static TransferableDataHelper	CreateFromSelection( Window * pWindow );
405 	static sal_Bool					IsEqual( const ::com::sun::star::datatransfer::DataFlavor& rInternalFlavor,
406 											 const ::com::sun::star::datatransfer::DataFlavor& rRequestFlavor,
407 											 sal_Bool bCompareParameters = sal_False );
408 };
409 
410 // --------------------
411 // - DragSourceHelper -
412 // --------------------
413 
414 class SVT_DLLPUBLIC DragSourceHelper
415 {
416 private:
417 
418 	// nested class to implement the XDragGestureListener interface
419 	class DragGestureListener : public ::cppu::WeakImplHelper1< ::com::sun::star::datatransfer::dnd::XDragGestureListener >
420 	{
421 	private:
422 
423 		DragSourceHelper&	mrParent;
424 		void*				mpDummy1;
425 		void*				mpDummy2;
426 
427 	private:
428 
429 		// XEventListener
430 		virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
431 
432 		// XDragGestureListener
433 		virtual void SAL_CALL dragGestureRecognized( const ::com::sun::star::datatransfer::dnd::DragGestureEvent& rDGE ) throw( ::com::sun::star::uno::RuntimeException );
434 
435 	public:
436 
437 		DragGestureListener( DragSourceHelper& rDragSourceHelper );
438 		~DragGestureListener();
439 	};
440 
441 	friend class DragSourceHelper::DragGestureListener;
442 
443 private:
444 
445 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureRecognizer >	mxDragGestureRecognizer;
446 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureListener >	mxDragGestureListener;
447 	void*																							mpDummy1;
448 	void*																							mpDummy2;
449 
450 						// not available
451 						DragSourceHelper();
452 	DragSourceHelper&	operator=( const DragSourceHelper& rDragSourceHelper );
453 	sal_Bool			operator==( const DragSourceHelper& rDragSourceHelper ) const;
454 
455 public:
456 
457 						// to be overridden by the application
458 	virtual void		StartDrag( sal_Int8 nAction, const Point& rPosPixel );
459 
460 						DragSourceHelper( Window* pWindow );
461 	virtual 			~DragSourceHelper();
462 };
463 
464 // --------------------
465 // - DropTargetHelper -
466 // --------------------
467 
468 class SVT_DLLPUBLIC DropTargetHelper
469 {
470 private:
471 
472 	// nested class to implement the XDropTargetListener interface
473 	class DropTargetListener : public ::cppu::WeakImplHelper1< ::com::sun::star::datatransfer::dnd::XDropTargetListener >
474 	{
475 	private:
476 
477 		DropTargetHelper&	mrParent;
478         AcceptDropEvent*    mpLastDragOverEvent;
479 		void*				mpDummy2;
480 		void*				mpDummy3;
481 		void*				mpDummy4;
482 
483 	private:
484 
485 		// XEventListener
486 		virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
487 
488 		// XDropTargetListener
489 		virtual void SAL_CALL drop( const ::com::sun::star::datatransfer::dnd::DropTargetDropEvent& dtde ) throw(::com::sun::star::uno::RuntimeException);
490 		virtual void SAL_CALL dragEnter( const ::com::sun::star::datatransfer::dnd::DropTargetDragEnterEvent& dtdee ) throw(::com::sun::star::uno::RuntimeException);
491 		virtual void SAL_CALL dragExit( const ::com::sun::star::datatransfer::dnd::DropTargetEvent& dte ) throw(::com::sun::star::uno::RuntimeException);
492 		virtual void SAL_CALL dragOver( const ::com::sun::star::datatransfer::dnd::DropTargetDragEvent& dtde ) throw(::com::sun::star::uno::RuntimeException);
493 		virtual void SAL_CALL dropActionChanged( const ::com::sun::star::datatransfer::dnd::DropTargetDragEvent& dtde ) throw(::com::sun::star::uno::RuntimeException);
494 
495 	public:
496 
497 		DropTargetListener( DropTargetHelper& rDropTargetHelper );
498 		~DropTargetListener();
499 	};
500 
501 	friend class DropTargetHelper::DropTargetListener;
502 
503 private:
504 
505 	DataFlavorExList																				maDummy;
506 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget >			mxDropTarget;
507 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener >	mxDropTargetListener;
508 	DataFlavorExVector*																				mpFormats;
509 	void*																							mpDummy1;
510 	void*																							mpDummy2;
511 	void*																							mpDummy3;
512 
513 						// not available
514 						DropTargetHelper();
515 	DropTargetHelper&	operator=( const DropTargetHelper& rDropTargetHelper );
516 	sal_Bool			operator==( const DropTargetHelper& rDropTargetHelper ) const;
517 
518 	void				ImplConstruct();
519 
520 						// called by our own implementation of XDropTargetListener (DropTargetListener instance)
521 	void				ImplBeginDrag( const ::com::sun::star::uno::Sequence< ::com::sun::star::datatransfer::DataFlavor >& rSupportedDataFlavors );
522 	void				ImplEndDrag();
523 
524 public:
525 
526 						// to be overridden by the application
527 	virtual sal_Int8	AcceptDrop( const AcceptDropEvent& rEvt );
528 	virtual sal_Int8	ExecuteDrop( const ExecuteDropEvent& rEvt );
529 
530 						DropTargetHelper( Window* pWindow );
531 						DropTargetHelper( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget >& rxDropTarget );
532 
533 	virtual 			~DropTargetHelper();
534 
535 						// typically called by the application in ::AcceptDrop and ::ExecuteDrop and (see above)
536 	sal_Bool			IsDropFormatSupported( SotFormatStringId nFormat );
537 	sal_Bool			IsDropFormatSupported( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
538 
GetDataFlavorExVector() const539 	DataFlavorExVector&	GetDataFlavorExVector() const {return *mpFormats; }
540 
541 };
542 
543 
544 //------------------------
545 // TransferDataContainer
546 //------------------------
547 
548 struct TransferDataContainer_Impl;
549 
550 class SVT_DLLPUBLIC TransferDataContainer : public TransferableHelper
551 {
552 	TransferDataContainer_Impl* pImpl;
553 
554 protected:
555 
556 	virtual void		AddSupportedFormats();
557 	virtual sal_Bool	GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
558 	virtual void		DragFinished( sal_Int8 nDropAction );
559 
560 public:
561 
562                         TransferDataContainer();
563 	                    ~TransferDataContainer();
564 
565 	void                ClearData();
566 
567 	void                CopyINetBookmark( const INetBookmark& rBkmk );
568 	void                CopyINetImage( const INetImage& rINtImg );
569     void                CopyImageMap( const ImageMap& rImgMap );
570 	void                CopyGraphic( const Graphic& rGrf );
571 	void                CopyString( const String& rStr );
572 	void                CopyString( sal_uInt16 nFmt, const String& rStr );
573 	void                CopyAny( sal_uInt16 nFmt, const ::com::sun::star::uno::Any& rAny );
574 
575 	void                CopyByteString( sal_uLong nFormatId, const ByteString& rStr );
576 	void                CopyAnyData( sal_uLong nFormatId, const sal_Char* pData, sal_uLong nLen );
577 
578 	sal_Bool            HasAnyData() const;
579 
580     using TransferableHelper::StartDrag;
581 	void                StartDrag( Window* pWindow, sal_Int8 nDragSourceActions,
582 				                   const Link& rCallbck,
583 				                   sal_Int32 nDragPointer = DND_POINTER_NONE,
584 				                   sal_Int32 nDragImage = DND_IMAGE_NONE );
585 };
586 
587 #endif
588