1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SW_INC_NDOLE_HXX
#define INCLUDED_SW_INC_NDOLE_HXX
#include "ndnotxt.hxx"
#include <svtools/embedhlp.hxx>
#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
#include <rtl/ref.hxx>
class SwGrfFormatColl;
class SwDoc;
class SwOLENode;
class SwOLEListener_Impl;
namespace sfx2 { class SvBaseLink; }
class DeflateData;
class SW_DLLPUBLIC SwOLEObj
{
friend class SwOLENode;
const SwOLENode* m_pOLENode;
rtl::Reference<SwOLEListener_Impl> m_xListener;
/** Either ref or name are known. If only name is known, ref is obtained
on demand by GetOleRef() from Sfx. */
svt::EmbeddedObjectRef m_xOLERef;
OUString m_aName;
// eventually buffered data if it is a chart OLE
drawinglayer::primitive2d::Primitive2DContainer m_aPrimitive2DSequence;
basegfx::B2DRange m_aRange;
std::unique_ptr<DeflateData> m_pDeflateData;
SwOLEObj( const SwOLEObj& rObj ) = delete;
void SetNode( SwOLENode* pNode );
public:
SwOLEObj( const svt::EmbeddedObjectRef& pObj );
SwOLEObj( const OUString &rName, sal_Int64 nAspect );
~SwOLEObj() COVERITY_NOEXCEPT_FALSE;
bool UnloadObject();
static bool UnloadObject( css::uno::Reference< css::embed::XEmbeddedObject > const & xObj,
const SwDoc* pDoc,
sal_Int64 nAspect );
OUString GetDescription();
css::uno::Reference < css::embed::XEmbeddedObject > const & GetOleRef();
svt::EmbeddedObjectRef& GetObject();
const OUString& GetCurrentPersistName() const { return m_aName; }
OUString GetStyleString();
bool IsOleRef() const; ///< To avoid unnecessary loading of object.
// try to get OLE visualization in form of a Primitive2DSequence
// and the corresponding B2DRange. This data may be locally buffered
drawinglayer::primitive2d::Primitive2DContainer const & tryToGetChartContentAsPrimitive2DSequence(
basegfx::B2DRange& rRange,
bool bSynchron);
void resetBufferedData();
void dumpAsXml(xmlTextWriterPtr pWriter) const;
};
// SwOLENode
class SW_DLLPUBLIC SwOLENode: public SwNoTextNode
{
friend class SwNodes;
mutable SwOLEObj maOLEObj;
OUString msChartTableName; ///< with chart objects: name of referenced table.
bool mbOLESizeInvalid; /**< Should be considered at SwDoc::PrtOLENotify
(e.g. copied). Is not persistent. */
sfx2::SvBaseLink* mpObjectLink;
OUString maLinkURL;
SwOLENode( const SwNodeIndex &rWhere,
const svt::EmbeddedObjectRef&,
SwGrfFormatColl *pGrfColl,
SwAttrSet const * pAutoAttr );
SwOLENode( const SwNodeIndex &rWhere,
const OUString &rName,
sal_Int64 nAspect,
SwGrfFormatColl *pGrfColl,
SwAttrSet const * pAutoAttr );
SwOLENode( const SwOLENode & ) = delete;
using SwNoTextNode::GetGraphic;
public:
const SwOLEObj& GetOLEObj() const { return maOLEObj; }
SwOLEObj& GetOLEObj() { return maOLEObj; }
virtual ~SwOLENode() override;
/// Is in ndcopy.cxx.
virtual SwContentNode* MakeCopy(SwDoc*, const SwNodeIndex&, bool bNewFrames) const override;
virtual Size GetTwipSize() const override;
const Graphic* GetGraphic();
void GetNewReplacement();
virtual bool SavePersistentData() override;
virtual bool RestorePersistentData() override;
virtual void dumpAsXml(xmlTextWriterPtr pWriter) const override;
bool IsInGlobalDocSection() const;
bool IsOLEObjectDeleted() const;
bool IsOLESizeInvalid() const { return mbOLESizeInvalid; }
void SetOLESizeInvalid( bool b ){ mbOLESizeInvalid = b; }
sal_Int64 GetAspect() const { return maOLEObj.GetObject().GetViewAspect(); }
void SetAspect( sal_Int64 nAspect) { maOLEObj.GetObject().SetViewAspect( nAspect ); }
/** Remove OLE-object from "memory".
inline void Unload() { aOLEObj.Unload(); } */
OUString GetDescription() const { return maOLEObj.GetDescription(); }
bool UpdateLinkURL_Impl();
void BreakFileLink_Impl();
void DisconnectFileLink_Impl();
void CheckFileLink_Impl();
// #i99665#
bool IsChart() const;
const OUString& GetChartTableName() const { return msChartTableName; }
void SetChartTableName( const OUString& rNm ) { msChartTableName = rNm; }
// react on visual change (invalidate)
void SetChanged();
};
/// Inline methods from Node.hxx
inline SwOLENode *SwNode::GetOLENode()
{
return SwNodeType::Ole == m_nNodeType ? static_cast<SwOLENode*>(this) : nullptr;
}
inline const SwOLENode *SwNode::GetOLENode() const
{
return SwNodeType::Ole == m_nNodeType ? static_cast<const SwOLENode*>(this) : nullptr;
}
namespace sw
{
class DocumentSettingManager;
}
class PurgeGuard
{
private:
::sw::DocumentSettingManager &m_rManager;
bool m_bOrigPurgeOle;
public:
PurgeGuard(const SwDoc& rDoc);
~PurgeGuard();
};
#endif // _ INCLUDED_SW_INC_NDOLE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|