1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SD_SOURCE_UI_INC_SDXFER_HXX
21 #define INCLUDED_SD_SOURCE_UI_INC_SDXFER_HXX
23 #include <svtools/transfer.hxx>
24 #include <vcl/graph.hxx>
25 #include <sfx2/objsh.hxx>
26 #include <svl/lstner.hxx>
40 class SdTransferable
: public TransferableHelper
, public SfxListener
44 SdTransferable( SdDrawDocument
* pSrcDoc
, ::sd::View
* pWorkView
, bool bInitOnGetData
);
45 virtual ~SdTransferable();
47 void SetDocShell( const SfxObjectShellRef
& rRef
) { maDocShellRef
= rRef
; }
48 const SfxObjectShellRef
& GetDocShell() const { return maDocShellRef
; }
50 void SetWorkDocument( const SdDrawDocument
* pWorkDoc
) { mpSdDrawDocument
= mpSdDrawDocumentIntern
= const_cast<SdDrawDocument
*>(pWorkDoc
); }
51 const SdDrawDocument
* GetWorkDocument() const { return mpSdDrawDocument
; }
53 void SetView(const ::sd::View
* pView
);
54 const ::sd::View
* GetView() const { return mpSdView
; }
56 void SetObjectDescriptor( const TransferableObjectDescriptor
& rObjDesc
);
58 void SetStartPos( const Point
& rStartPos
) { maStartPos
= rStartPos
; }
59 const Point
& GetStartPos() const { return maStartPos
; }
61 void SetInternalMove( bool bSet
) { mbInternalMove
= bSet
; }
62 bool IsInternalMove() const { return mbInternalMove
; }
64 bool HasSourceDoc( const SdDrawDocument
* pDoc
) const { return( mpSourceDoc
== pDoc
); }
66 void SetPageBookmarks( const std::vector
<OUString
>& rPageBookmarks
, bool bPersistent
);
67 bool IsPageTransferable() const { return mbPageTransferable
; }
68 bool HasPageBookmarks() const { return( mpPageDocShell
&& ( !maPageBookmarks
.empty() ) ); }
69 const std::vector
<OUString
>& GetPageBookmarks() const { return maPageBookmarks
; }
70 ::sd::DrawDocShell
* GetPageDocShell() const { return mpPageDocShell
; }
72 bool SetTableRTF( SdDrawDocument
*, const ::com::sun::star::datatransfer::DataFlavor
& );
74 static const ::com::sun::star::uno::Sequence
< sal_Int8
>& getUnoTunnelId();
75 static SdTransferable
* getImplementation( const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& rxData
) throw();
78 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) SAL_OVERRIDE
;
80 virtual void DragFinished( sal_Int8 nDropAction
) SAL_OVERRIDE
;
81 SdDrawDocument
* GetSourceDoc() const { return mpSourceDoc
;}
83 /** User data objects can be used to store information temporarily
84 at the transferable. The slide sorter uses this to store
85 previews of the slides that are referenced by the
88 class UserData
{public:virtual~UserData(){}};
90 /** Add a user data object. When it was added before (and not
91 removed) then this call is ignored.
93 void AddUserData (const ::boost::shared_ptr
<UserData
>& rpData
);
95 /** Return the number of user data objects.
97 sal_Int32
GetUserDataCount() const;
99 /** Return the specified user data object. When the index is not
100 valid, ie not in the range [0,count) then an empty pointer is
103 ::boost::shared_ptr
<UserData
> GetUserData (const sal_Int32 nIndex
) const;
107 virtual void AddSupportedFormats() SAL_OVERRIDE
;
108 virtual bool GetData( const css::datatransfer::DataFlavor
& rFlavor
, const OUString
& rDestDoc
) SAL_OVERRIDE
;
109 virtual bool WriteObject( tools::SvRef
<SotStorageStream
>& rxOStm
, void* pUserObject
, SotClipboardFormatId nUserObjectId
, const ::com::sun::star::datatransfer::DataFlavor
& rFlavor
) SAL_OVERRIDE
;
110 virtual void ObjectReleased() SAL_OVERRIDE
;
112 virtual sal_Int64 SAL_CALL
getSomething( const ::com::sun::star::uno::Sequence
< sal_Int8
>& rId
) throw( ::com::sun::star::uno::RuntimeException
, std::exception
) SAL_OVERRIDE
;
116 SfxObjectShellRef maDocShellRef
;
117 ::sd::DrawDocShell
* mpPageDocShell
;
118 std::vector
<OUString
> maPageBookmarks
;
119 TransferableDataHelper
* mpOLEDataHelper
;
120 TransferableObjectDescriptor
* mpObjDesc
;
121 const ::sd::View
* mpSdView
;
122 ::sd::View
* mpSdViewIntern
;
123 SdDrawDocument
* mpSdDrawDocument
;
124 SdDrawDocument
* mpSdDrawDocumentIntern
;
125 SdDrawDocument
* mpSourceDoc
;
126 VclPtr
<VirtualDevice
> mpVDev
;
127 INetBookmark
* mpBookmark
;
129 ImageMap
* mpImageMap
;
132 bool mbInternalMove
: 1;
133 bool mbOwnDocument
: 1;
136 bool mbPageTransferable
: 1;
137 bool mbPageTransferablePersistent
: 1;
139 ::std::vector
<boost::shared_ptr
<UserData
> > maUserData
;
141 SdTransferable( const SdTransferable
& ) SAL_DELETED_FUNCTION
;
142 SdTransferable
& operator=( const SdTransferable
& ) SAL_DELETED_FUNCTION
;
144 void CreateObjectReplacement( SdrObject
* pObj
);
149 #endif // INCLUDED_SD_SOURCE_UI_INC_SDXFER_HXX
151 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */