tdf#154285 Check upper bound of arguments in SbRtl_Minute function
[LibreOffice.git] / sd / source / ui / inc / sdxfer.hxx
blobb93ef331f1d4d2e2d8c834ec2a316df90ebe40dd
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 #pragma once
22 #include <vcl/graph.hxx>
23 #include <vcl/transfer.hxx>
24 #include <vcl/vclptr.hxx>
25 #include <sfx2/objsh.hxx>
26 #include <svl/lstner.hxx>
27 #include <svl/urlbmk.hxx>
29 // SdTransferable
30 class SdDrawDocument;
31 class SdrObject;
32 class ImageMap;
33 class VirtualDevice;
35 namespace sd {
36 class DrawDocShell;
37 class View;
40 class SAL_DLLPUBLIC_RTTI SdTransferable : public TransferDataContainer, public SfxListener
42 public:
44 SdTransferable( SdDrawDocument* pSrcDoc, ::sd::View* pWorkView, bool bInitOnGetData );
45 virtual ~SdTransferable() override;
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( std::unique_ptr<TransferableObjectDescriptor> pObjDesc );
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( 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* );
74 static SdTransferable* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) noexcept;
76 // SfxListener
77 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
79 virtual void DragFinished( sal_Int8 nDropAction ) override;
80 SdDrawDocument* GetSourceDoc() const { return mpSourceDoc;}
82 /** User data objects can be used to store information temporarily
83 at the transferable. The slide sorter uses this to store
84 previews of the slides that are referenced by the
85 transferable.
87 class UserData {public:virtual~UserData(){}};
89 /** Add a user data object. When it was added before (and not
90 removed) then this call is ignored.
92 void AddUserData (const std::shared_ptr<UserData>& rpData);
94 /** Return the number of user data objects.
96 sal_Int32 GetUserDataCount() const;
98 /** Return the specified user data object. When the index is not
99 valid, ie not in the range [0,count) then an empty pointer is
100 returned.
102 std::shared_ptr<UserData> GetUserData (const sal_Int32 nIndex) const;
104 protected:
106 virtual void AddSupportedFormats() override;
107 virtual bool GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) override;
108 virtual bool WriteObject( SvStream& rOStm, void* pUserObject, sal_uInt32 nUserObjectId, const css::datatransfer::DataFlavor& rFlavor ) override;
109 virtual void ObjectReleased() override final;
111 private:
113 SfxObjectShellRef maDocShellRef;
114 ::sd::DrawDocShell* mpPageDocShell;
115 std::vector<OUString> maPageBookmarks;
116 std::unique_ptr<TransferableDataHelper> mpOLEDataHelper;
117 std::unique_ptr<TransferableObjectDescriptor> mpObjDesc;
118 const ::sd::View* mpSdView;
119 ::sd::View* mpSdViewIntern;
120 SdDrawDocument* mpSdDrawDocument;
121 SdDrawDocument* mpSdDrawDocumentIntern;
122 SdDrawDocument* mpSourceDoc;
123 VclPtr<VirtualDevice> mpVDev;
124 std::optional<INetBookmark> moBookmark;
125 std::optional<Graphic> moGraphic;
126 std::unique_ptr<ImageMap> mpImageMap;
127 ::tools::Rectangle maVisArea;
128 Point maStartPos;
129 bool mbInternalMove : 1;
130 bool mbOwnDocument : 1;
131 bool mbOwnView : 1;
132 bool mbLateInit : 1;
133 bool mbPageTransferable : 1;
134 bool mbPageTransferablePersistent : 1;
135 ::std::vector<std::shared_ptr<UserData> > maUserData;
137 SdTransferable( const SdTransferable& ) = delete;
138 SdTransferable& operator=( const SdTransferable& ) = delete;
140 void CreateObjectReplacement( SdrObject* pObj );
141 void CreateData();
145 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */