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;
43 
44  bool mbChangeTwipSize :1;
45  bool mbFrameInPaint :1;
46  bool mbScaleImageMap :1;
47 
48  std::shared_ptr< SwAsyncRetrieveInputStreamThreadConsumer > mpThreadConsumer;
50  css::uno::Reference<css::io::XInputStream> mxInputStream;
52 
53  SwGrfNode( const SwNodeIndex& rWhere,
54  const OUString& rGrfName, const OUString& rFltName,
55  const Graphic* pGraphic,
56  SwGrfFormatColl* pGrfColl,
57  SwAttrSet const * pAutoAttr );
59  SwGrfNode( const SwNodeIndex& rWhere,
60  const OUString& rGrfName, const OUString& rFltName,
61  SwGrfFormatColl* pGrfColl,
62  SwAttrSet const * pAutoAttr );
63  SwGrfNode( const SwNodeIndex& rWhere,
64  const GraphicObject& rGrfObj,
65  SwGrfFormatColl* pGrfColl,
66  SwAttrSet const * pAutoAttr );
67 
68  void InsertLink( const OUString& rGrfName, const OUString& rFltName );
69 
72  void onGraphicChanged();
73 
74 public:
75  virtual ~SwGrfNode() override;
76  const Graphic& GetGrf(bool bWait = false) const;
77  const GraphicObject& GetGrfObj(bool bWait = false) const;
78  const GraphicObject* GetReplacementGrfObj() const;
79 
81  void SetGraphic(const Graphic& rGraphic);
82 
84  void StartGraphicAnimation(OutputDevice* pOut, const Point& rPt, const Size& rSz, long nExtraData, OutputDevice* pFirstFrameOutDev)
85  { maGrfObj.StartAnimation(pOut, rPt, rSz, nExtraData, pFirstFrameOutDev); }
86  void StopGraphicAnimation(OutputDevice* pOut, long nExtraData) { maGrfObj.StopAnimation(pOut, nExtraData); }
87 
88  virtual Size GetTwipSize() const override;
89  void SetTwipSize( const Size& rSz );
90 
91  bool IsTransparent() const;
92 
93  bool IsAnimated() const { return maGrfObj.IsAnimated(); }
94 
95  bool IsChgTwipSize() const { return mbChangeTwipSize; }
96  void SetChgTwipSize( bool b)
97  {
98  mbChangeTwipSize = b;
99  }
100 
101  bool IsFrameInPaint() const { return mbFrameInPaint; }
102  void SetFrameInPaint( bool b ) { mbFrameInPaint = b; }
103 
104  bool IsScaleImageMap() const { return mbScaleImageMap; }
105  void SetScaleImageMap( bool b ) { mbScaleImageMap = b; }
106 
108  virtual SwContentNode* MakeCopy(SwDoc*, const SwNodeIndex&, bool bNewFrames) const override;
109 
112  bool ReRead( const OUString& rGrfName, const OUString& rFltName,
113  const Graphic* pGraphic = nullptr,
114  bool bModify = true );
115 private:
117  bool SwapIn( bool bWaitForData = false );
118 
119 public:
120  bool HasEmbeddedStreamName() const { return maGrfObj.HasUserData(); }
121 
123  virtual bool SavePersistentData() override;
124  virtual bool RestorePersistentData() override;
125 
127  bool IsGrfLink() const { return mxLink.is(); }
128  bool IsLinkedFile() const;
129  bool IsLinkedDDE() const;
130  const tools::SvRef<sfx2::SvBaseLink>& GetLink() const { return mxLink; }
131  bool GetFileFilterNms( OUString* pFileNm, OUString* pFilterNm ) const;
132  void ReleaseLink();
133 
136  void ScaleImageMap();
137 
139  GraphicAttr& GetGraphicAttr( GraphicAttr&, const SwFrame* pFrame ) const;
140 
141  std::weak_ptr< SwAsyncRetrieveInputStreamThreadConsumer > GetThreadConsumer() const { return mpThreadConsumer;}
142  bool IsLinkedInputStreamReady() const { return mbLinkedInputStreamReady;}
143  void TriggerAsyncRetrieveInputStream();
144  void ApplyInputStream(
145  const css::uno::Reference<css::io::XInputStream>& xInputStream,
146  const bool bIsStreamReadOnly );
147  void UpdateLinkWithInputStream();
148  bool IsAsyncRetrieveInputStreamPossible() const;
149 };
150 
151 // Inline methods from Node.hxx - it is only now that we know TextNode!!
153 {
154  return SwNodeType::Grf == m_nNodeType ? static_cast<SwGrfNode*>(this) : nullptr;
155 }
156 
157 inline const SwGrfNode *SwNode::GetGrfNode() const
158 {
159  return SwNodeType::Grf == m_nNodeType ? static_cast<const SwGrfNode*>(this) : nullptr;
160 }
161 
162 inline bool SwGrfNode::IsLinkedFile() const
163 {
164  return mxLink.is() && OBJECT_CLIENT_GRF == mxLink->GetObjType();
165 }
166 
167 inline bool SwGrfNode::IsLinkedDDE() const
168 {
169  return mxLink.is() && OBJECT_CLIENT_DDE == mxLink->GetObjType();
170 }
171 
172 #endif
173 
174 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool is() const
Base class of the Writer layout elements.
Definition: frame.hxx:295
std::shared_ptr< SwAsyncRetrieveInputStreamThreadConsumer > mpThreadConsumer
Definition: ndgrf.hxx:48
bool HasEmbeddedStreamName() const
Definition: ndgrf.hxx:120
const tools::SvRef< sfx2::SvBaseLink > & GetLink() const
Definition: ndgrf.hxx:130
tools::SvRef< sfx2::SvBaseLink > mxLink
If graphics only as link then pointer is set.
Definition: ndgrf.hxx:40
bool StartAnimation(OutputDevice *pOut, const Point &rPt, const Size &rSz, long nExtraData=0, OutputDevice *pFirstFrameOutDev=nullptr)
virtual Size GetTwipSize() const =0
bool IsFrameInPaint() const
Definition: ndgrf.hxx:101
Definition: doc.hxx:185
bool IsLinkedFile() const
Definition: ndgrf.hxx:162
void StopAnimation(OutputDevice *pOut=nullptr, long nExtraData=0)
bool IsLinkedInputStreamReady() const
Definition: ndgrf.hxx:142
Size mnGrfSize
Definition: ndgrf.hxx:41
#define OBJECT_CLIENT_GRF
void SetChgTwipSize(bool b)
Definition: ndgrf.hxx:96
class to provide creation of a thread to retrieve an input stream given by a URL and to consume the r...
void StartGraphicAnimation(OutputDevice *pOut, const Point &rPt, const Size &rSz, long nExtraData, OutputDevice *pFirstFrameOutDev)
wrappers for non-const calls at GraphicObject
Definition: ndgrf.hxx:84
bool mbLinkedInputStreamReady
Definition: ndgrf.hxx:49
css::uno::Reference< css::io::XInputStream > mxInputStream
Definition: ndgrf.hxx:50
bool IsAnimated() const
Definition: ndgrf.hxx:93
std::weak_ptr< SwAsyncRetrieveInputStreamThreadConsumer > GetThreadConsumer() const
Definition: ndgrf.hxx:141
bool IsChgTwipSize() const
Definition: ndgrf.hxx:95
bool HasUserData() const
virtual SwContentNode * MakeCopy(SwDoc *, const SwNodeIndex &, bool bNewFrames) const =0
void StopGraphicAnimation(OutputDevice *pOut, long nExtraData)
Definition: ndgrf.hxx:86
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:104
virtual bool RestorePersistentData()
Dummies for loading/saving of persistent data when working with graphics and OLE objects.
Definition: ndnotxt.cxx:74
void SetFrameInPaint(bool b)
Definition: ndgrf.hxx:102
virtual bool SavePersistentData()
Definition: ndnotxt.cxx:79
bool IsLinkedDDE() const
Definition: ndgrf.hxx:167
void SetScaleImageMap(bool b)
Definition: ndgrf.hxx:105
#define OBJECT_CLIENT_DDE
bool mbIsStreamReadOnly
Definition: ndgrf.hxx:51
bool IsGrfLink() const
Query link-data.
Definition: ndgrf.hxx:127
std::unique_ptr< GraphicObject > mpReplacementGraphic
Definition: ndgrf.hxx:39
SwNodeType const m_nNodeType
Definition: node.hxx:84
bool IsAnimated() const
SwGrfNode * GetGrfNode()
Definition: ndgrf.hxx:152