LibreOffice Module sw (master) 1
dcontact.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#ifndef INCLUDED_SW_INC_DCONTACT_HXX
20#define INCLUDED_SW_INC_DCONTACT_HXX
21
22#include <svx/svdobj.hxx>
23#include <svx/svdovirt.hxx>
24#include "fmtanchr.hxx"
25#include "frmfmt.hxx"
26#include <list>
27#include <vector>
28#include <memory>
29
30#include "calbck.hxx"
32
33class SwFlyFrame;
34class SwFrame;
35class SwPageFrame;
37class SwFlyDrawObj;
38class SwRect;
39class SwDrawContact;
40struct SwPosition;
41class SdrTextObj;
42class SwContact;
43
50inline const SwFrameFormat *FindFrameFormat( const SdrObject *pObj )
51{ return ::FindFrameFormat( const_cast<SdrObject*>(pObj) ); }
52bool HasWrap( const SdrObject* pObj );
53
54void setContextWritingMode( SdrObject* pObj, SwFrame const * pAnchor );
55
58
61
63bool IsMarqueeTextObj( const SdrObject& rObj );
64
66class SAL_DLLPUBLIC_RTTI SwContact : public SdrObjUserCall, public SwClient
67{
72
93 void MoveObjToLayer( const bool _bToVisible,
94 SdrObject* _pDrawObj );
95
96protected:
97 void SetInDTOR();
98 virtual void SwClientNotify(const SwModify&, const SfxHint& rHint) override;
99
100public:
101
103 SwContact( SwFrameFormat *pToRegisterIn );
104 virtual ~SwContact() override;
105
106 virtual const SwAnchoredObject* GetAnchoredObj( const SdrObject* _pSdrObj ) const = 0;
107 virtual SwAnchoredObject* GetAnchoredObj( SdrObject* _pSdrObj ) = 0;
108
109 virtual const SdrObject *GetMaster() const = 0;
110 virtual SdrObject *GetMaster() = 0;
111
112 SwFrameFormat *GetFormat() { return static_cast<SwFrameFormat*>(GetRegisteredIn()); }
114 { return static_cast<const SwFrameFormat*>(GetRegisteredIn()); }
115
116 bool IsInDTOR() const { return mbInDTOR;}
117
125 virtual void MoveObjToVisibleLayer( SdrObject* _pDrawObj );
126
134 virtual void MoveObjToInvisibleLayer( SdrObject* _pDrawObj );
135
139 {
140 assert( GetFormat() );
141
142 return GetFormat()->GetAnchor();
143 }
144
145 RndStdIds GetAnchorId() const { return GetAnchorFormat().GetAnchorId(); }
146 bool ObjAnchoredAtPage() const { return GetAnchorId() == RndStdIds::FLY_AT_PAGE; }
147 bool ObjAnchoredAtFly() const { return GetAnchorId() == RndStdIds::FLY_AT_FLY; }
148 bool ObjAnchoredAtPara() const { return GetAnchorId() == RndStdIds::FLY_AT_PARA; }
149 bool ObjAnchoredAtChar() const { return GetAnchorId() == RndStdIds::FLY_AT_CHAR; }
150 bool ObjAnchoredAsChar() const { return GetAnchorId() == RndStdIds::FLY_AS_CHAR; }
151
153 {
154 assert( GetAnchorFormat().GetContentAnchor() );
155 return *(GetAnchorFormat().GetContentAnchor());
156 }
157
159 virtual void GetAnchoredObjs( std::vector<SwAnchoredObject*>& _roAnchoredObjs ) const = 0;
160
164 sal_uInt32 GetMinOrdNum() const;
165
169 sal_uInt32 GetMaxOrdNum() const;
170};
171
176{
177private:
179 void SwClientNotify(const SwModify&, const SfxHint& rHint) override;
180 sal_uInt32 GetOrdNumForNewRef(const SwFlyFrame* pFly, SwFrame const& rAnchorFrame);
181
182public:
183
185 SwFlyDrawContact(SwFlyFrameFormat* pToRegisterIn, SdrModel& rTargetModel);
186 static SwVirtFlyDrawObj* CreateNewRef(SwFlyFrame* pFly, SwFlyFrameFormat* pFormat, SwFrame const& rAnchorFrame);
187 virtual ~SwFlyDrawContact() override;
188
189 virtual const SwAnchoredObject* GetAnchoredObj( const SdrObject* _pSdrObj ) const override;
190 virtual SwAnchoredObject* GetAnchoredObj( SdrObject* _pSdrObj ) override;
191
192 virtual const SdrObject* GetMaster() const override
193 { return const_cast<SwFlyDrawContact*>(this)->GetMaster(); };
194 virtual SdrObject* GetMaster() override;
195
199 virtual void MoveObjToVisibleLayer( SdrObject* _pDrawObj ) override;
200 virtual void MoveObjToInvisibleLayer( SdrObject* _pDrawObj ) override;
201
203 virtual void GetAnchoredObjs( std::vector<SwAnchoredObject*>& _roAnchoredObjs ) const override;
204};
205
210class SwDrawVirtObj final : public SdrVirtObj
211{
212 private:
213 // data for connection to writer layout
217
222
226 virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
227
228 // protected destructor
229 virtual ~SwDrawVirtObj() override;
230
231 public:
233 SdrModel& rSdrModel,
234 SdrObject& _rNewObj,
235 SwDrawContact& _rDrawContact);
236 // copy constructor
237 SwDrawVirtObj(SdrModel& rSdrModel, SwDrawVirtObj const & rSource);
238
240 virtual Point GetOffset() const override;
241
242 virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
243
247 const SwFrame* GetAnchorFrame() const;
250
252 void AddToDrawingPage(SwFrame const& rAnchorFrame);
254
257 bool IsConnected() const;
258
259 virtual void NbcSetAnchorPos(const Point& rPnt) override;
260
262 virtual void RecalcBoundRect() override;
263 virtual ::basegfx::B2DPolyPolygon TakeXorPoly() const override;
264 virtual ::basegfx::B2DPolyPolygon TakeContour() const override;
265 virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
266 virtual void NbcMove(const Size& rSiz) override;
267 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
268 virtual void NbcRotate(const Point& rRef, Degree100 nAngle, double sn, double cs) override;
269 virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override;
270 virtual void NbcShear(const Point& rRef, Degree100 nAngle, double tn, bool bVShear) override;
271 virtual void Move(const Size& rSiz) override;
272 virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true) override;
273 virtual void Rotate(const Point& rRef, Degree100 nAngle, double sn, double cs) override;
274 virtual void Mirror(const Point& rRef1, const Point& rRef2) override;
275 virtual void Shear(const Point& rRef, Degree100 nAngle, double tn, bool bVShear) override;
276 virtual void RecalcSnapRect() override;
277 virtual const tools::Rectangle& GetSnapRect() const override;
278 virtual void SetSnapRect(const tools::Rectangle& rRect) override;
279 virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
280 virtual const tools::Rectangle& GetLogicRect() const override;
281 virtual void SetLogicRect(const tools::Rectangle& rRect) override;
282 virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override;
283 virtual Point GetSnapPoint(sal_uInt32 i) const override;
284 virtual Point GetPoint(sal_uInt32 i) const override;
285 virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i) override;
286
287 virtual bool HasTextEdit() const override;
288
289 virtual SdrLayerID GetLayer() const override;
290 virtual void NbcSetLayer(SdrLayerID nLayer) override;
291 virtual void SetLayer(SdrLayerID nLayer) override;
292
293 virtual void SetBoundRectDirty() override;
294 virtual const tools::Rectangle& GetCurrentBoundRect() const override;
295 virtual const tools::Rectangle& GetLastBoundRect() const override;
296};
297
298bool CheckControlLayer( const SdrObject *pObj );
299
303class SAL_DLLPUBLIC_RTTI SwDrawContact final : public SwContact
304{
305 private:
309
311 std::vector< rtl::Reference<SwDrawVirtObj> > maDrawVirtObjs;
312
316
320
327
328 friend class NestedUserCallHdl;
329
330
331 void InvalidateObjs_( const bool _bUpdateSortedObjsList = false );
332
333 SwDrawContact( const SwDrawContact& ) = delete;
335
336 virtual void SwClientNotify(const SwModify&, const SfxHint& rHint) override;
337
338 public:
339
340 SwDrawContact( SwFrameFormat *pToRegisterIn, SdrObject *pObj );
341 virtual ~SwDrawContact() override;
342
343 virtual const SwAnchoredObject* GetAnchoredObj( const SdrObject* _pSdrObj ) const override;
344 virtual SwAnchoredObject* GetAnchoredObj( SdrObject* _pSdrObj ) override;
345
346 virtual const SdrObject* GetMaster() const override
347 { return const_cast<SwDrawContact*>(this)->GetMaster(); };
348 virtual SdrObject* GetMaster() override;
349
350 const SwFrame* GetAnchorFrame( const SdrObject* _pDrawObj = nullptr ) const;
351 SwFrame* GetAnchorFrame( SdrObject const * _pDrawObj = nullptr );
352
354 {
355 return maAnchoredDrawObj.GetPageFrame();
356 }
358 {
359 return maAnchoredDrawObj.GetPageFrame();
360 }
361 void ChkPage();
362 SwPageFrame* FindPage( const SwRect &rRect );
363
367 void ConnectToLayout( const SwFormatAnchor *pAnch = nullptr );
370 void InsertMasterIntoDrawPage();
371
372 void DisconnectFromLayout( bool _bMoveMasterToInvisibleLayer = true );
375 void DisconnectObjFromLayout( SdrObject* _pDrawObj );
382 void RemoveMasterFromDrawPage();
383
384 void RemoveAllVirtObjs();
385
388 SdrObject* GetDrawObjectByAnchorFrame( const SwFrame& _rAnchorFrame );
389
391 virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle& rOldBoundRect) override;
392 virtual sal_Int32 GetPDFAnchorStructureElementId(SdrObject const& rObj, OutputDevice const&) override;
393
396 void Changed_(const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle* pOldBoundRect);
397
399 void ChangeMasterObject( SdrObject *pNewMaster );
400
401 SwDrawVirtObj* AddVirtObj(SwFrame const& rAnchorFrame);
402
403 void NotifyBackgroundOfAllVirtObjs( const tools::Rectangle* pOldBoundRect );
404
407 static void GetTextObjectsFromFormat( std::list<SdrTextObj*>&, SwDoc& );
408 virtual void GetAnchoredObjs( std::vector<SwAnchoredObject*>& _roAnchoredObjs ) const override;
409};
410
411#endif
412
413/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
helper class for method <SwDrawContact::Changed_(..)> for handling nested <SdrObjUserCall> events
Definition: dcontact.cxx:1019
virtual sal_Int32 GetPDFAnchorStructureElementId(SdrObject const &rObj, OutputDevice const &)
virtual void Changed(const SdrObject &rObj, SdrUserCallType eType, const tools::Rectangle &rOldBoundRect)
class for the positioning of drawing objects
wrapper class for the positioning of Writer fly frames and drawing objects
SwPageFrame * GetPageFrame()
const SwModify * GetRegisteredIn() const
Definition: calbck.hxx:166
virtual void SwClientNotify(const SwModify &, const SfxHint &rHint) override
Definition: calbck.cxx:120
Base class for the following contact objects (frame + draw objects).
Definition: dcontact.hxx:67
virtual const SwAnchoredObject * GetAnchoredObj(const SdrObject *_pSdrObj) const =0
virtual SdrObject * GetMaster()=0
bool IsInDTOR() const
Definition: dcontact.hxx:116
virtual const SdrObject * GetMaster() const =0
bool ObjAnchoredAtPage() const
Definition: dcontact.hxx:146
bool ObjAnchoredAsChar() const
Definition: dcontact.hxx:150
bool ObjAnchoredAtFly() const
Definition: dcontact.hxx:147
virtual void MoveObjToVisibleLayer(SdrObject *_pDrawObj)
method to move drawing object to corresponding visible layer
Definition: dcontact.cxx:210
const SwFrameFormat * GetFormat() const
Definition: dcontact.hxx:113
const SwPosition & GetContentAnchor() const
Definition: dcontact.hxx:152
virtual void SwClientNotify(const SwModify &, const SfxHint &rHint) override
Definition: dcontact.cxx:421
virtual void GetAnchoredObjs(std::vector< SwAnchoredObject * > &_roAnchoredObjs) const =0
get data collection of anchored objects, handled by with contact
bool ObjAnchoredAtChar() const
Definition: dcontact.hxx:149
bool ObjAnchoredAtPara() const
Definition: dcontact.hxx:148
virtual void MoveObjToInvisibleLayer(SdrObject *_pDrawObj)
method to move drawing object to corresponding invisible layer
Definition: dcontact.cxx:237
const SwFormatAnchor & GetAnchorFormat() const
some virtual helper methods for information about the object (Writer fly frame resp.
Definition: dcontact.hxx:138
bool mbInDTOR
boolean, indicating destruction of contact object important note: boolean has to be set at the beginn...
Definition: dcontact.hxx:71
RndStdIds GetAnchorId() const
Definition: dcontact.hxx:145
virtual SwAnchoredObject * GetAnchoredObj(SdrObject *_pSdrObj)=0
SwFrameFormat * GetFormat()
Definition: dcontact.hxx:112
Definition: doc.hxx:194
ContactObject for connection of formats as representatives of draw objects in SwClient and the object...
Definition: dcontact.hxx:304
bool mbDisconnectInProgress
internal flag to indicate that disconnect from layout is in progress
Definition: dcontact.hxx:319
SwDrawContact & operator=(const SwDrawContact &)=delete
SwAnchoredDrawObject maAnchoredDrawObj
anchored drawing object instance for the 'master' drawing object
Definition: dcontact.hxx:308
const SwPageFrame * GetPageFrame() const
Definition: dcontact.hxx:353
bool mbUserCallActive
Needed data for handling of nested <SdrObjUserCall> events in method <Changed_(..)>
Definition: dcontact.hxx:323
SdrUserCallType meEventTypeOfCurrentUserCall
event type, which is handled for <mpSdrObjHandledByCurrentUserCall>.
Definition: dcontact.hxx:326
SwDrawContact(const SwDrawContact &)=delete
virtual const SdrObject * GetMaster() const override
Definition: dcontact.hxx:346
bool mbMasterObjCleared
boolean indicating set 'master' drawing object has been cleared.
Definition: dcontact.hxx:315
SwPageFrame * GetPageFrame()
Definition: dcontact.hxx:357
std::vector< rtl::Reference< SwDrawVirtObj > > maDrawVirtObjs
container for 'virtual' drawing object supporting drawing objects in headers/footers.
Definition: dcontact.hxx:311
new class for re-direct methods calls at a 'virtual' drawing object to its referenced object.
Definition: dcontact.hxx:211
virtual void SetLayer(SdrLayerID nLayer) override
Definition: dcontact.cxx:2676
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
Definition: dcontact.cxx:2509
virtual void RecalcBoundRect() override
All overridden methods which need to use the offset.
Definition: dcontact.cxx:2463
virtual void NbcSetLayer(SdrLayerID nLayer) override
Definition: dcontact.cxx:2670
virtual void SetSnapRect(const tools::Rectangle &rRect) override
Definition: dcontact.cxx:2593
virtual const tools::Rectangle & GetSnapRect() const override
Definition: dcontact.cxx:2585
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
Definition: dcontact.cxx:2629
virtual ::basegfx::B2DPolyPolygon TakeContour() const override
Definition: dcontact.cxx:2481
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
Definition: dcontact.cxx:2489
const SwFrame * GetAnchorFrame() const
Definition: dcontact.cxx:2315
virtual ~SwDrawVirtObj() override
Definition: dcontact.cxx:2306
virtual const tools::Rectangle & GetCurrentBoundRect() const override
Definition: dcontact.cxx:2429
virtual rtl::Reference< SdrObject > CloneSdrObject(SdrModel &rTargetModel) const override
Definition: dcontact.cxx:2310
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
Definition: dcontact.cxx:2527
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
Definition: dcontact.cxx:2603
SwAnchoredObject & AnchoredObj()
Definition: dcontact.hxx:246
virtual void RecalcSnapRect() override
Definition: dcontact.cxx:2579
virtual const tools::Rectangle & GetLogicRect() const override
Definition: dcontact.cxx:2611
virtual bool HasTextEdit() const override
Definition: dcontact.cxx:2658
SwFrame * AnchorFrame()
Definition: dcontact.cxx:2321
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
AW: Need own sdr::contact::ViewContact since AnchorPos from parent is not used but something own (top...
Definition: dcontact.cxx:2271
virtual void Mirror(const Point &rRef1, const Point &rRef2) override
Definition: dcontact.cxx:2560
virtual void Resize(const Point &rRef, const Fraction &xFact, const Fraction &yFact, bool bUnsetRelative=true) override
Definition: dcontact.cxx:2538
void RemoveFromDrawingPage()
Definition: dcontact.cxx:2403
virtual Point GetPoint(sal_uInt32 i) const override
Definition: dcontact.cxx:2645
virtual void NbcSetPoint(const Point &rPnt, sal_uInt32 i) override
Definition: dcontact.cxx:2650
virtual void NbcMove(const Size &rSiz) override
Definition: dcontact.cxx:2504
SwDrawContact & mrDrawContact
writer-drawing contact object the 'virtual' drawing object is controlled by.
Definition: dcontact.hxx:221
void RemoveFromWriterLayout()
Definition: dcontact.cxx:2327
virtual void NbcSetAnchorPos(const Point &rPnt) override
Definition: dcontact.cxx:2421
SwDrawVirtObj(SdrModel &rSdrModel, SdrObject &_rNewObj, SwDrawContact &_rDrawContact)
Definition: dcontact.cxx:2276
virtual ::basegfx::B2DPolyPolygon TakeXorPoly() const override
Definition: dcontact.cxx:2473
virtual void SetLogicRect(const tools::Rectangle &rRect) override
Definition: dcontact.cxx:2619
virtual void Rotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
Definition: dcontact.cxx:2549
virtual void Shear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
Definition: dcontact.cxx:2568
virtual const tools::Rectangle & GetLastBoundRect() const override
Definition: dcontact.cxx:2439
virtual void SetBoundRectDirty() override
Definition: dcontact.cxx:2458
bool IsConnected() const
is 'virtual' drawing object connected to writer layout and / to drawing layer.
Definition: dcontact.cxx:2413
virtual Point GetOffset() const override
access to offset
Definition: dcontact.cxx:2444
void AddToDrawingPage(SwFrame const &rAnchorFrame)
connection to drawing layer
Definition: dcontact.cxx:2337
const SwAnchoredObject & GetAnchoredObj() const
connection to writer layout
Definition: dcontact.hxx:245
virtual void Move(const Size &rSiz) override
Definition: dcontact.cxx:2533
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
Definition: dcontact.cxx:2515
virtual Point GetSnapPoint(sal_uInt32 i) const override
Definition: dcontact.cxx:2637
virtual SdrLayerID GetLayer() const override
Definition: dcontact.cxx:2665
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
Definition: dcontact.cxx:2521
SwAnchoredDrawObject maAnchoredDrawObj
anchored drawing object instance for the 'virtual' drawing object
Definition: dcontact.hxx:216
ContactObject for connection between frames (or their formats respectively) in SwClient and the drawo...
Definition: dcontact.hxx:176
rtl::Reference< SwFlyDrawObj > mpMasterObj
Definition: dcontact.hxx:178
virtual const SdrObject * GetMaster() const override
Definition: dcontact.hxx:192
general base class for all free-flowing frames
Definition: flyfrm.hxx:79
FlyAnchors.
Definition: fmtanchr.hxx:37
Style of a layout element.
Definition: frmfmt.hxx:62
Base class of the Writer layout elements.
Definition: frame.hxx:315
A page of the document layout.
Definition: pagefrm.hxx:58
Of course Writer needs its own rectangles.
Definition: swrect.hxx:35
bool IsMarqueeTextObj(const SdrObject &rObj)
Returns true if the SrdObject is a Marquee-Object (scrolling text)
Definition: dcontact.cxx:183
SwRect GetBoundRectOfAnchoredObj(const SdrObject *pObj)
returns the BoundRect inclusive distance of the object.
Definition: dcontact.cxx:155
SwContact * GetUserCall(const SdrObject *)
Returns the UserCall if applicable from the group object.
Definition: dcontact.cxx:172
void setContextWritingMode(SdrObject *pObj, SwFrame const *pAnchor)
Definition: dcontact.cxx:103
SW_DLLPUBLIC SwFrameFormat * FindFrameFormat(SdrObject *pObj)
The other way round: Search format for given object.
Definition: dcontact.cxx:121
bool HasWrap(const SdrObject *pObj)
Definition: dcontact.cxx:140
bool CheckControlLayer(const SdrObject *pObj)
Definition: dcontact.cxx:683
virtual SotClipboardFormatId GetFormat(const TransferableDataHelper &aHelper) override
const SwFrame * FindPage(const SwRect &rRect, const SwFrame *pPage)
Definition: frmtool.cxx:3729
Marks a position in the document model.
Definition: pam.hxx:37
SdrUserCallType
#define SW_DLLPUBLIC
Definition: swdllapi.h:28
RndStdIds