1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 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/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 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 . 18 */ 19 20 #ifndef INCLUDED_SD_SOURCE_UI_INC_SDXFER_HXX 21 #define INCLUDED_SD_SOURCE_UI_INC_SDXFER_HXX 22 23 #include <vcl/transfer.hxx> 24 #include <vcl/vclptr.hxx> 25 #include <sfx2/objsh.hxx> 26 #include <svl/lstner.hxx> 27 28 // SdTransferable 29 class SdDrawDocument; 30 class SdrObject; 31 class INetBookmark; 32 class ImageMap; 33 class VirtualDevice; 34 35 namespace sd { 36 class DrawDocShell; 37 class View; 38 } 39 40 class SAL_DLLPUBLIC_RTTI SdTransferable : public TransferableHelper, public SfxListener 41 { 42 public: 43 44 SdTransferable( SdDrawDocument* pSrcDoc, ::sd::View* pWorkView, bool bInitOnGetData ); 45 virtual ~SdTransferable() override; 46 SetDocShell(const SfxObjectShellRef & rRef)47 void SetDocShell( const SfxObjectShellRef& rRef ) { maDocShellRef = rRef; } GetDocShell() const48 const SfxObjectShellRef& GetDocShell() const { return maDocShellRef; } 49 SetWorkDocument(const SdDrawDocument * pWorkDoc)50 void SetWorkDocument( const SdDrawDocument* pWorkDoc ) { mpSdDrawDocument = mpSdDrawDocumentIntern = const_cast<SdDrawDocument*>(pWorkDoc); } GetWorkDocument() const51 const SdDrawDocument* GetWorkDocument() const { return mpSdDrawDocument; } 52 53 void SetView(const ::sd::View* pView); GetView() const54 const ::sd::View* GetView() const { return mpSdView; } 55 56 void SetObjectDescriptor( std::unique_ptr<TransferableObjectDescriptor> pObjDesc ); 57 SetStartPos(const Point & rStartPos)58 void SetStartPos( const Point& rStartPos ) { maStartPos = rStartPos; } GetStartPos() const59 const Point& GetStartPos() const { return maStartPos; } 60 SetInternalMove(bool bSet)61 void SetInternalMove( bool bSet ) { mbInternalMove = bSet; } IsInternalMove() const62 bool IsInternalMove() const { return mbInternalMove; } 63 HasSourceDoc(const SdDrawDocument * pDoc) const64 bool HasSourceDoc( const SdDrawDocument* pDoc ) const { return( mpSourceDoc == pDoc ); } 65 66 void SetPageBookmarks( const std::vector<OUString>& rPageBookmarks, bool bPersistent ); IsPageTransferable() const67 bool IsPageTransferable() const { return mbPageTransferable; } HasPageBookmarks() const68 bool HasPageBookmarks() const { return( mpPageDocShell && ( !maPageBookmarks.empty() ) ); } GetPageBookmarks() const69 const std::vector<OUString>& GetPageBookmarks() const { return maPageBookmarks; } GetPageDocShell() const70 ::sd::DrawDocShell* GetPageDocShell() const { return mpPageDocShell; } 71 72 bool SetTableRTF( SdDrawDocument* ); 73 74 static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId(); 75 static SdTransferable* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) throw(); 76 77 // SfxListener 78 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; 79 80 virtual void DragFinished( sal_Int8 nDropAction ) override; GetSourceDoc() const81 SdDrawDocument* GetSourceDoc() const { return mpSourceDoc;} 82 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 86 transferable. 87 */ ~UserData()88 class UserData {public:virtual~UserData(){}}; 89 90 /** Add a user data object. When it was added before (and not 91 removed) then this call is ignored. 92 */ 93 void AddUserData (const std::shared_ptr<UserData>& rpData); 94 95 /** Return the number of user data objects. 96 */ 97 sal_Int32 GetUserDataCount() const; 98 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 101 returned. 102 */ 103 std::shared_ptr<UserData> GetUserData (const sal_Int32 nIndex) const; 104 105 protected: 106 107 virtual void AddSupportedFormats() override; 108 virtual bool GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) override; 109 virtual bool WriteObject( tools::SvRef<SotStorageStream>& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const css::datatransfer::DataFlavor& rFlavor ) override; 110 virtual void ObjectReleased() override final; 111 112 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& rId ) override; 113 114 private: 115 116 SfxObjectShellRef maDocShellRef; 117 ::sd::DrawDocShell* mpPageDocShell; 118 std::vector<OUString> maPageBookmarks; 119 std::unique_ptr<TransferableDataHelper> mpOLEDataHelper; 120 std::unique_ptr<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 std::unique_ptr<INetBookmark> mpBookmark; 128 std::unique_ptr<Graphic> mpGraphic; 129 std::unique_ptr<ImageMap> mpImageMap; 130 ::tools::Rectangle maVisArea; 131 Point maStartPos; 132 bool mbInternalMove : 1; 133 bool mbOwnDocument : 1; 134 bool mbOwnView : 1; 135 bool const mbLateInit : 1; 136 bool mbPageTransferable : 1; 137 bool mbPageTransferablePersistent : 1; 138 ::std::vector<std::shared_ptr<UserData> > maUserData; 139 140 SdTransferable( const SdTransferable& ) = delete; 141 SdTransferable& operator=( const SdTransferable& ) = delete; 142 143 void CreateObjectReplacement( SdrObject* pObj ); 144 void CreateData(); 145 146 }; 147 148 #endif // INCLUDED_SD_SOURCE_UI_INC_SDXFER_HXX 149 150 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 151