LibreOffice Module sw (master)  1
ndgrf.hxx
Go to the documentation of this file.
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_SW_INC_NDGRF_HXX
21 #define INCLUDED_SW_INC_NDGRF_HXX
22 
23 #include <sfx2/lnkbase.hxx>
24 #include <vcl/GraphicObject.hxx>
25 #include "ndnotxt.hxx"
26 #include <memory>
27 
29 
30 class SwGrfFormatColl;
31 class SwDoc;
32 
33 // SwGrfNode
35 {
36  friend class SwNodes;
37 
39  std::unique_ptr<GraphicObject> mpReplacementGraphic;
42  bool mbInSwapIn :1; // to avoid recursion in SwGrfNode::SwapIn
43  bool mbInBaseLinkSwapIn :1; // to avoid recursion in SwBaseLink::SwapIn
44 
45  bool mbChangeTwipSize :1;
46  bool mbFrameInPaint :1;
47  bool mbScaleImageMap :1;
48 
49  std::shared_ptr< SwAsyncRetrieveInputStreamThreadConsumer > mpThreadConsumer;
51  css::uno::Reference<css::io::XInputStream> mxInputStream;
53 
54  SwGrfNode( const SwNodeIndex& rWhere,
55  const OUString& rGrfName, const OUString& rFltName,
56  const Graphic* pGraphic,
57  SwGrfFormatColl* pGrfColl,
58  SwAttrSet const * pAutoAttr );
60  SwGrfNode( const SwNodeIndex& rWhere,
61  const OUString& rGrfName, const OUString& rFltName,
62  SwGrfFormatColl* pGrfColl,
63  SwAttrSet const * pAutoAttr );
64  SwGrfNode( const SwNodeIndex& rWhere,
65  const GraphicObject& rGrfObj,
66  SwGrfFormatColl* pGrfColl,
67  SwAttrSet const * pAutoAttr );
68 
69  void InsertLink( const OUString& rGrfName, const OUString& rFltName );
70 
73  void onGraphicChanged();
74 
75 public:
76  virtual ~SwGrfNode() override;
77  const Graphic& GetGrf(bool bWait = false) const;
78  const GraphicObject& GetGrfObj(bool bWait = false) const;
79  const GraphicObject* GetReplacementGrfObj() const;
80 
82  void SetGraphic(const Graphic& rGraphic);
83  void TriggerGraphicArrived();
84 
86  void StartGraphicAnimation(OutputDevice* pOut, const Point& rPt, const Size& rSz, tools::Long nExtraData, OutputDevice* pFirstFrameOutDev)
87  { maGrfObj.StartAnimation(pOut, rPt, rSz, nExtraData, pFirstFrameOutDev); }
88  void StopGraphicAnimation(const OutputDevice* pOut, tools::Long nExtraData) { maGrfObj.StopAnimation(pOut, nExtraData); }
89 
90  virtual Size GetTwipSize() const override;
91  void SetTwipSize( const Size& rSz );
92 
93  bool IsTransparent() const;
94 
95  bool IsAnimated() const { return maGrfObj.IsAnimated(); }
96 
97  bool IsChgTwipSize() const { return mbChangeTwipSize; }
98  void SetChgTwipSize( bool b)
99  {
100  mbChangeTwipSize = b;
101  }
102 
103  bool IsFrameInPaint() const { return mbFrameInPaint; }
104  void SetFrameInPaint( bool b ) { mbFrameInPaint = b; }
105 
106  bool IsScaleImageMap() const { return mbScaleImageMap; }
107  void SetScaleImageMap( bool b ) { mbScaleImageMap = b; }
108 
110  virtual SwContentNode* MakeCopy(SwDoc&, const SwNodeIndex&, bool bNewFrames) const override;
111 
114  bool ReRead( const OUString& rGrfName, const OUString& rFltName,
115  const Graphic* pGraphic = nullptr,
116  bool bModify = true );
117 private:
119  bool SwapIn( bool bWaitForData = false );
120 
121 public:
122  bool HasEmbeddedStreamName() const { return maGrfObj.HasUserData(); }
123 
125  virtual bool SavePersistentData() override;
126  virtual bool RestorePersistentData() override;
127 
129  bool IsGrfLink() const { return mxLink.is(); }
130  bool IsLinkedFile() const;
131  bool IsLinkedDDE() const;
132  const tools::SvRef<sfx2::SvBaseLink>& GetLink() const { return mxLink; }
133  bool GetFileFilterNms( OUString* pFileNm, OUString* pFilterNm ) const;
134  void ReleaseLink();
135 
138  void ScaleImageMap();
139 
141  GraphicAttr& GetGraphicAttr( GraphicAttr&, const SwFrame* pFrame ) const;
142 
143  std::weak_ptr< SwAsyncRetrieveInputStreamThreadConsumer > GetThreadConsumer() const { return mpThreadConsumer;}
144  bool IsLinkedInputStreamReady() const { return mbLinkedInputStreamReady;}
145  void TriggerAsyncRetrieveInputStream();
146  void ApplyInputStream(
147  const css::uno::Reference<css::io::XInputStream>& xInputStream,
148  const bool bIsStreamReadOnly );
149  void UpdateLinkWithInputStream();
150  bool IsAsyncRetrieveInputStreamPossible() const;
151 };
152 
153 // Inline methods from Node.hxx - it is only now that we know TextNode!!
155 {
156  return SwNodeType::Grf == m_nNodeType ? static_cast<SwGrfNode*>(this) : nullptr;
157 }
158 
159 inline const SwGrfNode *SwNode::GetGrfNode() const
160 {
161  return SwNodeType::Grf == m_nNodeType ? static_cast<const SwGrfNode*>(this) : nullptr;
162 }
163 
164 inline bool SwGrfNode::IsLinkedFile() const
165 {
167 }
168 
169 inline bool SwGrfNode::IsLinkedDDE() const
170 {
172 }
173 
174 #endif
175 
176 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool is() const
Base class of the Writer layout elements.
Definition: frame.hxx:298
std::shared_ptr< SwAsyncRetrieveInputStreamThreadConsumer > mpThreadConsumer
Definition: ndgrf.hxx:49
bool HasEmbeddedStreamName() const
Definition: ndgrf.hxx:122
const tools::SvRef< sfx2::SvBaseLink > & GetLink() const
Definition: ndgrf.hxx:132
tools::SvRef< sfx2::SvBaseLink > mxLink
If graphics only as link then pointer is set.
Definition: ndgrf.hxx:40
void StopGraphicAnimation(const OutputDevice *pOut, tools::Long nExtraData)
Definition: ndgrf.hxx:88
virtual Size GetTwipSize() const =0
long Long
bool IsFrameInPaint() const
Definition: ndgrf.hxx:103
Definition: doc.hxx:186
bool IsLinkedFile() const
Definition: ndgrf.hxx:164
bool IsLinkedInputStreamReady() const
Definition: ndgrf.hxx:144
Size mnGrfSize
Definition: ndgrf.hxx:41
void SetChgTwipSize(bool b)
Definition: ndgrf.hxx:98
void StopAnimation(const OutputDevice *pOut=nullptr, tools::Long nExtraData=0)
class to provide creation of a thread to retrieve an input stream given by a URL and to consume the r...
bool mbLinkedInputStreamReady
Definition: ndgrf.hxx:50
css::uno::Reference< css::io::XInputStream > mxInputStream
Definition: ndgrf.hxx:51
bool IsAnimated() const
Definition: ndgrf.hxx:95
std::weak_ptr< SwAsyncRetrieveInputStreamThreadConsumer > GetThreadConsumer() const
Definition: ndgrf.hxx:143
bool IsChgTwipSize() const
Definition: ndgrf.hxx:97
bool HasUserData() const
GraphicObject maGrfObj
Definition: ndgrf.hxx:38
Marks a node in the document model.
Definition: ndindex.hxx:31
#define SW_DLLPUBLIC
Definition: swdllapi.h:28
bool IsScaleImageMap() const
Definition: ndgrf.hxx:106
virtual bool RestorePersistentData()
Dummies for loading/saving of persistent data when working with graphics and OLE objects.
Definition: ndnotxt.cxx:75
SwNodeType m_nNodeType
Definition: node.hxx:84
void SetFrameInPaint(bool b)
Definition: ndgrf.hxx:104
virtual bool SavePersistentData()
Definition: ndnotxt.cxx:80
virtual SwContentNode * MakeCopy(SwDoc &, const SwNodeIndex &, bool bNewFrames) const =0
bool IsLinkedDDE() const
Definition: ndgrf.hxx:169
void SetScaleImageMap(bool b)
Definition: ndgrf.hxx:107
bool StartAnimation(OutputDevice *pOut, const Point &rPt, const Size &rSz, tools::Long nExtraData=0, OutputDevice *pFirstFrameOutDev=nullptr)
bool mbIsStreamReadOnly
Definition: ndgrf.hxx:52
void StartGraphicAnimation(OutputDevice *pOut, const Point &rPt, const Size &rSz, tools::Long nExtraData, OutputDevice *pFirstFrameOutDev)
wrappers for non-const calls at GraphicObject
Definition: ndgrf.hxx:86
bool IsGrfLink() const
Query link-data.
Definition: ndgrf.hxx:129
std::unique_ptr< GraphicObject > mpReplacementGraphic
Definition: ndgrf.hxx:39
bool IsAnimated() const
SwGrfNode * GetGrfNode()
Definition: ndgrf.hxx:154