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 .
19 #ifndef INCLUDED_SW_INC_NDOLE_HXX
20 #define INCLUDED_SW_INC_NDOLE_HXX
22 #include "ndnotxt.hxx"
23 #include <svtools/embedhlp.hxx>
24 #include <drawinglayer/primitive2d/Primitive2DContainer.hxx>
25 #include <rtl/ref.hxx>
28 class SwGrfFormatColl
;
31 class SwOLEListener_Impl
;
32 namespace sfx2
{ class SvBaseLink
; }
35 class SW_DLLPUBLIC SwOLEObj
37 friend class SwOLENode
;
39 const SwOLENode
* m_pOLENode
;
40 rtl::Reference
<SwOLEListener_Impl
> m_xListener
;
42 /** Either ref or name are known. If only name is known, ref is obtained
43 on demand by GetOleRef() from Sfx. */
44 svt::EmbeddedObjectRef m_xOLERef
;
47 // eventually buffered data if it is a chart OLE
48 drawinglayer::primitive2d::Primitive2DContainer m_aPrimitive2DSequence
;
49 basegfx::B2DRange m_aRange
;
50 sal_uInt32 m_nGraphicVersion
;
51 std::unique_ptr
<DeflateData
> m_pDeflateData
;
53 SwOLEObj( const SwOLEObj
& rObj
) = delete;
55 void SetNode( SwOLENode
* pNode
);
57 DECL_LINK(IsProtectedHdl
, LinkParamNone
*, bool);
60 SwOLEObj( const svt::EmbeddedObjectRef
& pObj
);
61 SwOLEObj( OUString aName
, sal_Int64 nAspect
);
62 ~SwOLEObj() COVERITY_NOEXCEPT_FALSE
;
65 static bool UnloadObject( css::uno::Reference
< css::embed::XEmbeddedObject
> const & xObj
,
69 OUString
GetDescription();
71 css::uno::Reference
< css::embed::XEmbeddedObject
> const & GetOleRef();
72 svt::EmbeddedObjectRef
& GetObject();
73 const OUString
& GetCurrentPersistName() const { return m_aName
; }
74 OUString
GetStyleString();
75 bool IsOleRef() const; ///< To avoid unnecessary loading of object.
76 bool IsProtected() const;
78 // try to get OLE visualization in form of a Primitive2DSequence
79 // and the corresponding B2DRange. This data may be locally buffered
80 drawinglayer::primitive2d::Primitive2DContainer
const & tryToGetChartContentAsPrimitive2DSequence(
81 basegfx::B2DRange
& rRange
,
83 void resetBufferedData();
85 SvxDrawPage
* tryToGetChartDrawPage() const;
87 void dumpAsXml(xmlTextWriterPtr pWriter
) const;
92 class SW_DLLPUBLIC SwOLENode final
: public SwNoTextNode
95 mutable SwOLEObj maOLEObj
;
96 OUString msChartTableName
; ///< with chart objects: name of referenced table.
97 bool mbOLESizeInvalid
; /**< Should be considered at SwDoc::PrtOLENotify
98 (e.g. copied). Is not persistent. */
100 sfx2::SvBaseLink
* mpObjectLink
;
103 SwOLENode( SwNode
& rWhere
,
104 const svt::EmbeddedObjectRef
&,
105 SwGrfFormatColl
*pGrfColl
,
106 SwAttrSet
const * pAutoAttr
);
108 SwOLENode( SwNode
& rWhere
,
109 const OUString
&rName
,
111 SwGrfFormatColl
*pGrfColl
,
112 SwAttrSet
const * pAutoAttr
);
114 SwOLENode( const SwOLENode
& ) = delete;
116 using SwNoTextNode::GetGraphic
;
119 const SwOLEObj
& GetOLEObj() const { return maOLEObj
; }
120 SwOLEObj
& GetOLEObj() { return maOLEObj
; }
121 virtual ~SwOLENode() override
;
123 /// Is in ndcopy.cxx.
124 virtual SwContentNode
* MakeCopy(SwDoc
&, SwNode
& rWhere
, bool bNewFrames
) const override
;
126 virtual Size
GetTwipSize() const override
;
128 const Graphic
* GetGraphic();
130 void GetNewReplacement();
132 virtual bool SavePersistentData() override
;
133 virtual bool RestorePersistentData() override
;
135 virtual void dumpAsXml(xmlTextWriterPtr pWriter
) const override
;
137 bool IsInGlobalDocSection() const;
138 bool IsOLEObjectDeleted() const;
140 bool IsOLESizeInvalid() const { return mbOLESizeInvalid
; }
141 void SetOLESizeInvalid( bool b
){ mbOLESizeInvalid
= b
; }
143 sal_Int64
GetAspect() const { return maOLEObj
.GetObject().GetViewAspect(); }
144 void SetAspect( sal_Int64 nAspect
) { maOLEObj
.GetObject().SetViewAspect( nAspect
); }
146 /** Remove OLE-object from "memory".
147 inline void Unload() { aOLEObj.Unload(); } */
148 OUString
GetDescription() const { return maOLEObj
.GetDescription(); }
150 bool UpdateLinkURL_Impl();
151 void BreakFileLink_Impl();
152 void DisconnectFileLink_Impl();
154 void CheckFileLink_Impl();
157 bool IsChart() const;
159 const OUString
& GetChartTableName() const { return msChartTableName
; }
160 void SetChartTableName( const OUString
& rNm
) { msChartTableName
= rNm
; }
163 // react on visual change (invalidate)
167 /// Inline methods from Node.hxx
168 inline SwOLENode
*SwNode::GetOLENode()
170 return SwNodeType::Ole
== m_nNodeType
? static_cast<SwOLENode
*>(this) : nullptr;
173 inline const SwOLENode
*SwNode::GetOLENode() const
175 return SwNodeType::Ole
== m_nNodeType
? static_cast<const SwOLENode
*>(this) : nullptr;
180 class DocumentSettingManager
;
186 ::sw::DocumentSettingManager
&m_rManager
;
187 bool m_bOrigPurgeOle
;
189 PurgeGuard(const SwDoc
& rDoc
);
190 ~PurgeGuard() COVERITY_NOEXCEPT_FALSE
;
193 #endif // _ INCLUDED_SW_INC_NDOLE_HXX
195 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */