LibreOffice Module svx (master) 1
svdmodel.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#pragma once
21
22#include <functional>
23#include <memory>
24#include <com/sun/star/uno/Sequence.hxx>
26#include <editeng/outliner.hxx>
27#include <rtl/ustring.hxx>
28#include <tools/weakbase.h>
30#include <tools/degree.hxx>
31#include <tools/fldunit.hxx>
32#include <tools/fract.hxx>
33#include <svl/hint.hxx>
34#include <o3tl/enumarray.hxx>
35
36#include <svl/style.hxx>
37#include <svx/xtable.hxx>
38
39#include <svx/svdtypes.hxx>
40#include <svx/svxdllapi.h>
41
42#include <rtl/ref.hxx>
43#include <deque>
44
45#ifdef DBG_UTIL
46// SdrObjectLifetimeWatchDog
47#include <unordered_set>
48#endif
49
50class OutputDevice;
51class SdrOutliner;
52class SdrLayerAdmin;
53class SdrObjList;
54class SdrObject;
55class SdrPage;
56class SdrPageView;
57class SdrTextObj;
58class SdrUndoAction;
59class SdrUndoGroup;
60class AutoTimer;
61class SfxItemPool;
62class SfxItemSet;
63class SfxRepeatTarget;
64class SfxStyleSheet;
65class SfxUndoAction;
66class SfxUndoManager;
67class XBitmapList;
68class XColorList;
69class XDashList;
70class XGradientList;
71class XHatchList;
72class XLineEndList;
76class SdrUndoFactory;
77class ImageMap;
78class TextChain;
79enum class CharCompressType;
80namespace comphelper
81{
82 class IEmbeddedHelper;
83 class LifecycleProxy;
84}
85namespace sfx2
86{
87 class LinkManager;
88}
89namespace com::sun::star::beans {
90 struct PropertyValue;
91}
92
93namespace svx
94{
95class Theme;
96}
97
98constexpr const sal_Unicode DEGREE_CHAR = u'\x00B0'; /* U+00B0 DEGREE SIGN */
99
100
101enum class SdrHintKind
102{
103 LayerChange, // changed layer definition
104 LayerOrderChange, // order of layer changed (Insert/Remove/ChangePos)
105 PageOrderChange, // order of pages (object pages or master pages) changed (Insert/Remove/ChangePos)
106 ObjectChange, // object changed
107 ObjectInserted, // new object inserted
108 ObjectRemoved, // symbol object removed from list
109 ModelCleared, // deleted the whole model (no pages exist anymore). not impl.
110 RefDeviceChange, // RefDevice changed
111 DefaultTabChange, // Default tabulator width changed
112 SwitchToPage, // #94278# UNDO/REDO at an object evtl. on another page
113 BeginEdit, // Is called after the object has entered text edit mode
114 EndEdit // Is called after the object has left text edit mode
115};
116
118{
119private:
123
124public:
125 explicit SdrHint(SdrHintKind eNewHint);
126 explicit SdrHint(SdrHintKind eNewHint, const SdrObject& rNewObj);
127 explicit SdrHint(SdrHintKind eNewHint, const SdrPage* pPage);
128 explicit SdrHint(SdrHintKind eNewHint, const SdrObject& rNewObj, const SdrPage* pPage);
129
130 const SdrPage* GetPage() const { return mpPage;}
131 const SdrObject* GetObject() const { return mpObj;}
132 SdrHintKind GetKind() const { return meHint;}
133};
134
136//
137// SdrModel
138// DlgEdModel
139// FmFormModel
140// ScDrawLayer
141// SdDrawDocument
142// SwDrawModel
143// OReportModel
144
145struct SdrModelImpl;
146
148{
149#ifdef DBG_UTIL
150 // SdrObjectLifetimeWatchDog:
151 // Use maAllIncarnatedObjects to keep track of all SdrObjects incarnated using this SdrModel
152 // (what is now possible after the paradigm change that a SdrObject stays at a single SdrModel
153 // for it's whole lifetime).
154 // The two methods are exclusive, debug-only, only-accessible-by SdrObject accesses to else
155 // hidden/non-existing maAllIncarnatedObjects.
156 // SdrObject::SdrObject uses impAddIncarnatedSdrObjectToSdrModel, while SdrObject::~SdrObject
157 // uses impRemoveIncarnatedSdrObjectToSdrModel.
158 // There are two places which may trigger SAL_WARN warnings:
159 // - impRemoveIncarnatedSdrObjectToSdrModel when the to-be-removed SdrObject is not member of SdrModel
160 // - SdrModel::~SdrModel after all SdrObjects *should* be cleaned-up.
161 // SdrModel::~SdrModel will also - for convenience - Free the non-deleted SdrObjects if there
162 // are any.
163 // Using std::unordered_set will use quasi constant access times, so this watchdog will not
164 // be expensive. Nonetheless, only use with debug code. It may be seductive to use this in
165 // product code, too, especially if it will indeed trigger - but its intention is clearly
166 // to find/identify MemoryLeaks caused by SdrObjects
167 friend void impAddIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel);
168 friend void impRemoveIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel);
169 std::unordered_set< SdrObject* > maAllIncarnatedObjects;
170#endif
171protected:
172 std::vector<rtl::Reference<SdrPage>> maMasterPages;
173 std::vector<rtl::Reference<SdrPage>> maPages;
174 std::function<void(std::unique_ptr<SdrUndoAction>)> m_aUndoLink; // link to a NotifyUndo-Handler
175 Size m_aMaxObjSize; // e.g. for auto-growing text
176 Fraction m_aObjUnit; // description of the coordinate units for ClipBoard, Drag&Drop, ...
177 MapUnit m_eObjUnit; // see above
178 FieldUnit m_eUIUnit; // unit, scale (e.g. 1/1000) for the UI (status bar) is set by ImpSetUIUnit()
179 Fraction m_aUIScale; // see above
180 OUString m_aUIUnitStr; // see above
182 int m_nUIUnitDecimalMark; // see above
183
184 std::unique_ptr<SdrLayerAdmin> m_pLayerAdmin;
186 comphelper::IEmbeddedHelper* m_pEmbeddedHelper; // helper for embedded objects to get rid of the SfxObjectShell
187 std::unique_ptr<SdrOutliner> m_pDrawOutliner; // an Outliner for outputting text
188 std::unique_ptr<SdrOutliner> m_pHitTestOutliner;// an Outliner for the HitTest
189 std::unique_ptr<SdrOutliner> m_pChainingOutliner; // an Outliner for chaining overflowing text
190 sal_Int32 mnDefTextHgt; // Default text height in logical units
191 VclPtr<OutputDevice> m_pRefOutDev; // ReferenceDevice for the EditEngine
196 std::deque<std::unique_ptr<SfxUndoAction>> m_aUndoStack;
197 std::deque<std::unique_ptr<SfxUndoAction>> m_aRedoStack;
198 std::unique_ptr<SdrUndoGroup> m_pCurrentUndoGroup; // For multi-level
199 sal_uInt16 m_nUndoLevel; // undo nesting
200 bool m_bIsWriter:1; // to clean up pMyPool from 303a
201 bool m_bThemedControls:1; // If false UnoControls should not use theme colors
202 bool mbUndoEnabled:1; // If false no undo is recorded or we are during the execution of an undo action
203 bool mbChanged:1;
206 bool m_bTransportContainer:1; // doc is temporary object container, no display (e.g. clipboard)
210 bool m_bPasteResize:1; // Objects are being resized due to Paste with different MapMode
213 bool mbVOCInvalidationIsReliable:1; // does the app reliably invalidate the VOC, or do we need to rebuild the primitives on every render?
215 sal_uInt32 m_nMaxUndoCount;
216
217 std::unique_ptr<TextChain> m_pTextChain;
218
219
220public:
221 std::shared_ptr<SvxForbiddenCharactersTable> mpForbiddenCharactersTable;
222
223 std::unique_ptr<SdrOutlinerCache> mpOutlinerCache;
224 //get a vector of all the SdrOutliner belonging to the model
225 std::vector<SdrOutliner*> GetActiveOutliners() const;
226 std::unique_ptr<SdrModelImpl> mpImpl;
233
234 // Color, Dash, Line-End, Hatch, Gradient, Bitmap property lists ...
236
237 sal_uInt16 getHandoutPageCount() const { return mnHandoutPageCount; }
238 void setHandoutPageCount( sal_uInt16 nHandoutPageCount ) { mnHandoutPageCount = nHandoutPageCount; }
239
240 // Adapt to given Size and Borders scaling all contained data, maybe
241 // including PresObj's in higher derivations
242 virtual void adaptSizeAndBorderForAllPages(
243 const Size& rNewSize,
244 tools::Long nLeft = 0,
245 tools::Long nRight = 0,
246 tools::Long nUpper = 0,
247 tools::Long nLower = 0);
248
249protected:
250 virtual css::uno::Reference< css::uno::XInterface > createUnoModel();
251
252private:
253 SdrModel(const SdrModel& rSrcModel) = delete;
254 void operator=(const SdrModel& rSrcModel) = delete;
255 bool operator==(const SdrModel& rCmpModel) const = delete;
256 SVX_DLLPRIVATE void ImpPostUndoAction(std::unique_ptr<SdrUndoAction> pUndo);
257 SVX_DLLPRIVATE void ImpSetUIUnit();
258 SVX_DLLPRIVATE void ImpSetOutlinerDefaults( SdrOutliner* pOutliner, bool bInit = false );
259 SVX_DLLPRIVATE void ImpReformatAllTextObjects();
260 SVX_DLLPRIVATE void ImpReformatAllEdgeObjects();
261 SVX_DLLPRIVATE void ImpCreateTables(bool bDisablePropertyFiles);
262
263 // this is a weak reference to a possible living api wrapper for this model
264 css::uno::Reference< css::uno::XInterface > mxUnoModel;
265
266 // used to disable unique name checking during page move
267 bool mbMakePageObjectsNamesUnique = true;
268
269public:
270 SVX_DLLPRIVATE virtual bool IsCreatingDataObj() const { return false; }
271 bool IsTransportContainer() const { return m_bTransportContainer; }
272 bool AreControlsThemed() { return m_bThemedControls; }
273 bool IsPasteResize() const { return m_bPasteResize; }
274 void SetPasteResize(bool bOn) { m_bPasteResize=bOn; }
275 // If a custom Pool is put here, the class will call methods
276 // on it (Put(), Remove()). On disposal of SdrModel the pool
277 // will be deleted with delete.
278 // If you give NULL instead, it will create an own pool (SdrItemPool)
279 // which will also be disposed in the destructor.
280 // If you do use a custom Pool, make sure you inherit from SdrItemPool,
281 // if you want to use symbol objects inherited from SdrAttrObj.
282 // If, however, you use objects inheriting from SdrObject you are free
283 // to choose a pool of your liking.
284 //
285 // tdf#118731 a bDisablePropertyFiles of true will disable ability to load
286 // XPropertyFiles describing defaults. Useful for UI preview widgets
287 explicit SdrModel(
288 SfxItemPool* pPool = nullptr,
289 ::comphelper::IEmbeddedHelper* pPers = nullptr,
290 bool bDisablePropertyFiles = false);
291 virtual ~SdrModel() override;
292 void ClearModel(bool bCalledFromDestructor);
293
294 // Override this to enable the Swap/LoadOnDemand of graphics.
295 // If rbDeleteAfterUse is set to sal_True the SvStream instance from
296 // the caller will be disposed after use.
297 // If this method returns NULL, a temporary file will be allocated for
298 // swapping.
299 // The stream from which the model was loaded or in which is was saved last
300 // needs to be delivered
301 virtual css::uno::Reference<
302 css::embed::XStorage> GetDocumentStorage() const;
303 css::uno::Reference<
304 css::io::XInputStream >
305 GetDocumentStream(OUString const& rURL,
306 ::comphelper::LifecycleProxy const & rProxy) const;
307 // Change the template attributes of the symbol objects to hard attributes
308 void BurnInStyleSheetAttributes();
309 // If you inherit from SdrPage you also need to inherit from SdrModel
310 // and implement both VM AllocPage() and AllocModel()...
311 virtual rtl::Reference<SdrPage> AllocPage(bool bMasterPage);
312 virtual SdrModel* AllocModel() const;
313
314 // Changes on the layers set the modified flag and broadcast on the model!
315 const SdrLayerAdmin& GetLayerAdmin() const { return *m_pLayerAdmin; }
316 SdrLayerAdmin& GetLayerAdmin() { return *m_pLayerAdmin; }
317
318 const SfxItemPool& GetItemPool() const { return *m_pItemPool; }
319 SfxItemPool& GetItemPool() { return *m_pItemPool; }
320
321 SdrOutliner& GetDrawOutliner(const SdrTextObj* pObj=nullptr) const;
322
323 SdrOutliner& GetHitTestOutliner() const { return *m_pHitTestOutliner; }
324 const SdrTextObj* GetFormattingTextObj() const;
325 // put the TextDefaults (Font,Height,Color) in a Set
326 void SetTextDefaults() const;
327 static void SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt );
328
329 SdrOutliner& GetChainingOutliner(const SdrTextObj* pObj) const;
330 TextChain * GetTextChain() const;
331
332 // ReferenceDevice for the EditEngine
333 void SetRefDevice(OutputDevice* pDev);
334 OutputDevice* GetRefDevice() const { return m_pRefOutDev.get(); }
335 // If a new MapMode is set on the RefDevice (or similar)
336 void RefDeviceChanged(); // not yet implemented
337 // default font height in logical units
338 void SetDefaultFontHeight(sal_Int32 nVal);
339 // default tabulator width for the EditEngine
340 void SetDefaultTabulator(sal_uInt16 nVal);
341 sal_uInt16 GetDefaultTabulator() const { return m_nDefaultTabulator; }
342
343 // The DefaultStyleSheet will be used in every symbol object which is inserted
344 // in this model and does not have a StyleSheet set.
345 SfxStyleSheet* GetDefaultStyleSheet() const { return m_pDefaultStyleSheet; }
346 void SetDefaultStyleSheet(SfxStyleSheet* pDefSS) { m_pDefaultStyleSheet = pDefSS; }
347
348 // #i119287# default StyleSheet for SdrGrafObj and SdrOle2Obj
349 SfxStyleSheet* GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const { return mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; }
350 void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet* pDefSS) { mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = pDefSS; }
351
352 sfx2::LinkManager* GetLinkManager() { return m_pLinkManager; }
353 void SetLinkManager( sfx2::LinkManager* pLinkMgr ) { m_pLinkManager = pLinkMgr; }
354
355 ::comphelper::IEmbeddedHelper* GetPersist() const { return m_pEmbeddedHelper; }
356 void SetPersist( ::comphelper::IEmbeddedHelper *p ) { m_pEmbeddedHelper = p; }
357
358 // Unit for the symbol coordination
359 // Default is 1 logical unit = 1/100mm (Unit=MapUnit::Map100thMM, Fract=(1,1)).
360 // Examples:
361 // MapUnit::MapPoint, Fraction(72,1) : 1 log Einh = 72 Point = 1 Inch
362 // MapUnit::MapPoint, Fraction(1,20) : 1 log Einh = 1/20 Point = 1 Twip
363 // MapUnit::MapTwip, Fraction(1,1) : 1 log Einh = 1 Twip
364 // MapUnit::Map100thMM, Fraction(1,10) : 1 log Einh = 1/1000mm
365 // MapUnit::MapMM, Fraction(1000,1) : 1 log Einh = 1000mm = 1m
366 // MapUnit::MapCM, Fraction(100,1) : 1 log Einh = 100cm = 1m
367 // MapUnit::MapCM, Fraction(100000,1): 1 log Einh = 100000cm = 1km
368 // (FWIW: you cannot represent light years).
369 // The scaling unit is needed for the Engine to serve the Clipboard
370 // with the correct sizes.
371 MapUnit GetScaleUnit() const { return m_eObjUnit; }
372 void SetScaleUnit(MapUnit eMap);
373 const Fraction& GetScaleFraction() const { return m_aObjUnit; }
374 void SetScaleFraction(const Fraction& rFrac);
375 // Setting both simultaneously performs a little better
376 void SetScaleUnit(MapUnit eMap, const Fraction& rFrac);
377
378 // maximal size e.g. for auto growing texts
379 const Size& GetMaxObjSize() const { return m_aMaxObjSize; }
380 void SetMaxObjSize(const Size& rSiz) { m_aMaxObjSize=rSiz; }
381
382 // For the View! to display sane numbers in the status bar: Default is mm.
383 void SetUIUnit(FieldUnit eUnit);
384 FieldUnit GetUIUnit() const { return m_eUIUnit; }
385 // The scale of the drawing. Default 1/1.
386 void SetUIScale(const Fraction& rScale);
387 const Fraction& GetUIScale() const { return m_aUIScale; }
388 // Setting both simultaneously performs a little better
389 void SetUIUnit(FieldUnit eUnit, const Fraction& rScale);
390
391 static OUString GetUnitString(FieldUnit eUnit);
392 OUString GetMetricString(tools::Long nVal, bool bNoUnitChars = false, sal_Int32 nNumDigits = -1) const;
393 static OUString GetAngleString(Degree100 nAngle);
394 static OUString GetPercentString(const Fraction& rVal);
395
396 // RecalcPageNums is ordinarily only called by the Page.
397 bool IsPagNumsDirty() const { return m_bPagNumsDirty; };
398 bool IsMPgNumsDirty() const { return m_bMPgNumsDirty; };
399 void RecalcPageNums(bool bMaster);
400 // After the Insert the Page belongs to the SdrModel.
401 virtual void InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
402 virtual void DeletePage(sal_uInt16 nPgNum);
403 // Remove means transferring ownership to the caller (opposite of Insert)
404 virtual rtl::Reference<SdrPage> RemovePage(sal_uInt16 nPgNum);
405 virtual void MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
406 const SdrPage* GetPage(sal_uInt16 nPgNum) const;
407 SdrPage* GetPage(sal_uInt16 nPgNum);
408 sal_uInt16 GetPageCount() const;
409 virtual void PageListChanged();
410
411 // Masterpages
412 virtual void InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
413 void DeleteMasterPage(sal_uInt16 nPgNum);
414 // Remove means transferring ownership to the caller (opposite of Insert)
415 virtual rtl::Reference<SdrPage> RemoveMasterPage(sal_uInt16 nPgNum);
416 void MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
417 const SdrPage* GetMasterPage(sal_uInt16 nPgNum) const;
418 SdrPage* GetMasterPage(sal_uInt16 nPgNum);
419 sal_uInt16 GetMasterPageCount() const;
420 virtual void MasterPageListChanged();
421
422 // modified flag. Is set automatically when something changes on the Pages
423 // symbol objects. You need to reset it yourself, however, e.g. on Save().
424 bool IsChanged() const { return mbChanged; }
425 virtual void SetChanged(bool bFlg = true);
426
427 // If set to sal_True, graphics from graphics objects will:
428 // - not be loaded immediately when loading a document,
429 // but only once they are needed (e.g. displayed).
430 // - be pruned from memory if they are not needed.
431 // For that to work, override the virtual method GetDocumentStream().
432 // Default=FALSE. Flag is not persistent.
433 bool IsSwapGraphics() const { return m_bSwapGraphics; }
434 void SetSwapGraphics();
435
436 // Text frames without filling can be select with a mouse click by default (sal_False).
437 // With this flag set to true you can hit them only in the area in which text is to be
438 // found.
439 bool IsPickThroughTransparentTextFrames() const { return m_bTransparentTextFrames; }
440 void SetPickThroughTransparentTextFrames(bool bOn) { m_bTransparentTextFrames=bOn; }
441
442 // Can the model be changed at all?
443 // Is only evaluated by the possibility methods of the View.
444 // Direct manipulations on the model, ... do not respect this flag.
445 // Override this and return the appropriate ReadOnly status
446 // of the files, i.e. true or false. (Method is called multiple
447 // times, so use one flag only!)
448 virtual bool IsReadOnly() const;
449 void SetReadOnly(bool bYes);
450
451 // Mixing two SdrModels. Mind that rSourceModel is not const.
452 // The pages will not be copied but moved, when inserted.
453 // rSourceModel may very well be empty afterwards.
454 // nFirstPageNum,nLastPageNum: The pages to take from rSourceModel
455 // nDestPos..................: position to insert
456 // bMergeMasterPages.........: sal_True = needed MasterPages will be taken
457 // from rSourceModel
458 // sal_False= the MasterPageDescriptors of
459 // the pages of the rSourceModel will be
460 // mapped on the existing MasterPages.
461 // bUndo.....................: An undo action is generated for the merging.
462 // Undo is only for the target model, not for the
463 // rSourceModel.
464 // bTreadSourceAsConst.......: sal_True=the SourceModel will not be changed,
465 // so pages will be copied.
466 virtual void Merge(SdrModel& rSourceModel,
467 sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
468 sal_uInt16 nDestPos,
469 bool bMergeMasterPages, bool bAllMasterPages,
470 bool bUndo = true, bool bTreadSourceAsConst = false);
471
472 // Behaves like Merge(SourceModel=DestModel,nFirst,nLast,nDest,sal_False,sal_False,bUndo,!bMoveNoCopy);
473 void CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
474 sal_uInt16 nDestPos,
475 bool bUndo, bool bMoveNoCopy);
476
477 // BegUndo() / EndUndo() enables you to group arbitrarily many UndoActions
478 // arbitrarily deeply. As comment for the UndoAction the first BegUndo(String) of all
479 // nestings will be used.
480 // In that case the NotifyUndoActionHdl will be called on the last EndUndo().
481 // No UndoAction will be generated for an empty group.
482 // All direct modifications on the SdrModel do not create an UndoActions.
483 // Actions on the SdrView however do generate those.
484 void BegUndo(); // open Undo group
485 void BegUndo(const OUString& rComment); // open Undo group
486 void BegUndo(const OUString& rComment, const OUString& rObjDescr, SdrRepeatFunc eFunc); // open Undo group
487 void EndUndo(); // close Undo group
488 void AddUndo(std::unique_ptr<SdrUndoAction> pUndo);
489 sal_uInt16 GetUndoBracketLevel() const { return m_nUndoLevel; }
490 // only after the first BegUndo or before the last EndUndo:
491 void SetUndoComment(const OUString& rComment);
492 void SetUndoComment(const OUString& rComment, const OUString& rObjDescr);
493
494 // The Undo management is only done if NotifyUndoAction-Handler is not set.
495 // Default is 16. Minimal MaxUndoActionCount is 1.
496 void SetMaxUndoActionCount(sal_uInt32 nCount);
497 void ClearUndoBuffer();
498
499 bool HasUndoActions() const;
500 bool HasRedoActions() const;
501 void Undo();
502 void Redo();
503 void Repeat(SfxRepeatTarget&);
504
505 // The application can set a handler here which collects the UndoActions einsammelt.
506 // The handler has the following signature:
507 // void NotifyUndoActionHdl(SfxUndoAction* pUndoAction);
508 // When calling the handler ownership is transferred;
509 // The UndoAction belongs to the Handler, not the SdrModel.
510 void SetNotifyUndoActionHdl(const std::function<void(std::unique_ptr<SdrUndoAction>)>& rLink) { m_aUndoLink=rLink; }
511
514 void SetSdrUndoManager( SfxUndoManager* pUndoManager );
515 SfxUndoManager* GetSdrUndoManager() const;
516
520 void SetSdrUndoFactory( SdrUndoFactory* pUndoFactory );
521
524 SdrUndoFactory& GetSdrUndoFactory() const;
525
526 // Accessor methods for Palettes, Lists and Tables
527 // FIXME: this badly needs re-factoring...
529 void SetPropertyList( XPropertyListRef const & p ) { maProperties[ p->Type() ] = p; }
530
531 // friendlier helpers
539
540 // The DrawingEngine only references the StyleSheetPool, whoever
541 // made it needs to delete it.
542 SfxStyleSheetBasePool* GetStyleSheetPool() const { return mxStyleSheetPool.get(); }
543 void SetStyleSheetPool(SfxStyleSheetBasePool* pPool) { mxStyleSheetPool=pPool; }
544
545 void SetTheme(std::unique_ptr<svx::Theme> pTheme);
546 svx::Theme* GetTheme();
547
548 void SetStarDrawPreviewMode(bool bPreview);
549 bool IsStarDrawPreviewMode() const { return m_bStarDrawPreviewMode; }
550
551 bool GetDisableTextEditUsesCommonUndoManager() const { return mbDisableTextEditUsesCommonUndoManager; }
552 void SetDisableTextEditUsesCommonUndoManager(bool bNew) { mbDisableTextEditUsesCommonUndoManager = bNew; }
553
554 css::uno::Reference< css::uno::XInterface > const & getUnoModel();
555 void setUnoModel( const css::uno::Reference< css::uno::XInterface >& xModel );
556
557 // these functions are used by the api to disable repaints during a
558 // set of api calls.
559 bool isLocked() const { return mbModelLocked; }
560 void setLock( bool bLock );
561
562 void SetForbiddenCharsTable( const std::shared_ptr<SvxForbiddenCharactersTable>& xForbiddenChars );
563 const std::shared_ptr<SvxForbiddenCharactersTable>& GetForbiddenCharsTable() const { return mpForbiddenCharactersTable;}
564
565 void SetCharCompressType( CharCompressType nType );
566 CharCompressType GetCharCompressType() const { return mnCharCompressType; }
567
568 void SetKernAsianPunctuation( bool bEnabled );
569 bool IsKernAsianPunctuation() const { return mbKernAsianPunctuation; }
570
571 void SetAddExtLeading( bool bEnabled );
572 bool IsAddExtLeading() const { return mbAddExtLeading; }
573
574 // tdf#99729 compatibility flag
575 void SetAnchoredTextOverflowLegacy(bool bEnabled);
576 bool IsAnchoredTextOverflowLegacy() const;
577
578 void ReformatAllTextObjects();
579
580 std::unique_ptr<SdrOutliner> createOutliner( OutlinerMode nOutlinerMode );
581 void disposeOutliner( std::unique_ptr<SdrOutliner> pOutliner );
582
583 bool IsWriter() const { return m_bIsWriter; }
584
585 // Used as a fallback in *::ReadUserDataSequence() to process common properties
586 void ReadUserDataSequenceValue(const css::beans::PropertyValue *pValue);
587 void WriteUserDataSequence(css::uno::Sequence < css::beans::PropertyValue >& rValues);
588
590 virtual SvxNumType GetPageNumType() const;
591
594 static void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel );
595
596 bool IsInDestruction() const { return mbInDestruction;}
597
598 static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId();
599
603 void EnableUndo( bool bEnable );
604
608 bool IsUndoEnabled() const;
609
610 // used to prevent object name change during page move
611 bool DoesMakePageObjectsNamesUnique() const { return mbMakePageObjectsNamesUnique; }
612 void DoMakePageObjectsNamesUnique(bool bDo) { mbMakePageObjectsNamesUnique = bDo; }
613
614 virtual sal_Int32 getImagePreferredDPI() const { return 0; }
615
616 virtual void dumpAsXml(xmlTextWriterPtr pWriter) const;
617
618 bool IsVOCInvalidationIsReliable() const { return mbVOCInvalidationIsReliable; }
619 void SetVOCInvalidationIsReliable(bool b) { mbVOCInvalidationIsReliable = b; }
620};
621
622/*
623 +-----------+
624 | SdrModel |
625 +--+------+-+
626 | +-----------+
627 +----+-----+ |
628 | ... | |
629 +----+---+ +----+---+ +-----+--------+
630 |SdrPage | |SdrPage | |SdrLayerAdmin |
631 +---+----+ +-+--+--++ +---+-------+--+
632 | | | | | +-------------------+
633 +----+----+ +-----+-----+ +-------+-------+
634 | ... | | ... | | ... |
635+---+---+ +---+---+ +----+----+ +----+----+ +-----+------+ +------+-----+
636|SdrObj | |SdrObj | |SdrLayer | |SdrLayer | |SdrLayerSet | |SdrLayerSet |
637+-------+ +-------+ +---------+ +---------+ +------------+ +------------+
638This class: SdrModel is the head of the data models for the StarView Drawing Engine.
639
641
642/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
FPDF_PAGE mpPage
CharCompressType
bool mbChanged
const SdrPage * GetPage() const
Definition: svdmodel.hxx:130
const SdrPage * mpPage
Definition: svdmodel.hxx:122
SdrHintKind GetKind() const
Definition: svdmodel.hxx:132
const SdrObject * mpObj
Definition: svdmodel.hxx:121
const SdrObject * GetObject() const
Definition: svdmodel.hxx:131
SdrHintKind meHint
Definition: svdmodel.hxx:120
sfx2::LinkManager * m_pLinkManager
Definition: svdmodel.hxx:195
bool m_bStarDrawPreviewMode
Definition: svdmodel.hxx:211
bool m_bIsWriter
Definition: svdmodel.hxx:200
int m_nUIUnitDecimalMark
Definition: svdmodel.hxx:182
bool IsPagNumsDirty() const
Definition: svdmodel.hxx:397
bool m_bPagNumsDirty
Definition: svdmodel.hxx:204
VclPtr< OutputDevice > m_pRefOutDev
Definition: svdmodel.hxx:191
bool IsKernAsianPunctuation() const
Definition: svdmodel.hxx:569
std::function< void(std::unique_ptr< SdrUndoAction >)> m_aUndoLink
Definition: svdmodel.hxx:174
bool isLocked() const
Definition: svdmodel.hxx:559
XBitmapListRef GetBitmapList() const
Definition: svdmodel.hxx:535
::comphelper::IEmbeddedHelper * GetPersist() const
Definition: svdmodel.hxx:355
Fraction m_aObjUnit
Definition: svdmodel.hxx:176
CharCompressType mnCharCompressType
Definition: svdmodel.hxx:227
sal_uInt16 m_nDefaultTabulator
Definition: svdmodel.hxx:214
void SetLinkManager(sfx2::LinkManager *pLinkMgr)
Definition: svdmodel.hxx:353
void setHandoutPageCount(sal_uInt16 nHandoutPageCount)
Definition: svdmodel.hxx:238
sal_uInt16 mnHandoutPageCount
Definition: svdmodel.hxx:228
bool IsPickThroughTransparentTextFrames() const
Definition: svdmodel.hxx:439
std::unique_ptr< SdrOutlinerCache > mpOutlinerCache
Definition: svdmodel.hxx:223
void SetNotifyUndoActionHdl(const std::function< void(std::unique_ptr< SdrUndoAction >)> &rLink)
Definition: svdmodel.hxx:510
bool IsPasteResize() const
Definition: svdmodel.hxx:273
css::uno::Reference< css::uno::XInterface > mxUnoModel
Definition: svdmodel.hxx:264
std::unique_ptr< SdrModelImpl > mpImpl
Definition: svdmodel.hxx:226
SfxStyleSheet * GetDefaultStyleSheet() const
Definition: svdmodel.hxx:345
sal_uInt16 GetDefaultTabulator() const
Definition: svdmodel.hxx:341
bool m_bMPgNumsDirty
Definition: svdmodel.hxx:205
bool AreControlsThemed()
Definition: svdmodel.hxx:272
XDashListRef GetDashList() const
Definition: svdmodel.hxx:532
bool IsMPgNumsDirty() const
Definition: svdmodel.hxx:398
std::unique_ptr< SdrUndoGroup > m_pCurrentUndoGroup
Definition: svdmodel.hxx:198
std::unique_ptr< SdrOutliner > m_pChainingOutliner
Definition: svdmodel.hxx:189
std::unique_ptr< SdrLayerAdmin > m_pLayerAdmin
Definition: svdmodel.hxx:184
bool mbDisableTextEditUsesCommonUndoManager
Definition: svdmodel.hxx:212
bool m_bTransportContainer
Definition: svdmodel.hxx:206
void SetVOCInvalidationIsReliable(bool b)
Definition: svdmodel.hxx:619
o3tl::enumarray< XPropertyListType, XPropertyListRef > maProperties
Definition: svdmodel.hxx:235
Fraction m_aUIScale
Definition: svdmodel.hxx:179
MapUnit m_eObjUnit
Definition: svdmodel.hxx:177
Size m_aMaxObjSize
Definition: svdmodel.hxx:175
void SetDefaultStyleSheet(SfxStyleSheet *pDefSS)
Definition: svdmodel.hxx:346
XGradientListRef GetGradientList() const
Definition: svdmodel.hxx:538
XPatternListRef GetPatternList() const
Definition: svdmodel.hxx:536
sfx2::LinkManager * GetLinkManager()
Definition: svdmodel.hxx:352
bool IsWriter() const
Definition: svdmodel.hxx:583
SfxStyleSheet * GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const
Definition: svdmodel.hxx:349
bool m_bThemedControls
Definition: svdmodel.hxx:201
MapUnit GetScaleUnit() const
Definition: svdmodel.hxx:371
bool IsChanged() const
Definition: svdmodel.hxx:424
bool operator==(const SdrModel &rCmpModel) const =delete
bool IsStarDrawPreviewMode() const
Definition: svdmodel.hxx:549
sal_uInt16 GetUndoBracketLevel() const
Definition: svdmodel.hxx:489
void SetPersist(::comphelper::IEmbeddedHelper *p)
Definition: svdmodel.hxx:356
bool m_bTransparentTextFrames
Definition: svdmodel.hxx:208
void SetMaxObjSize(const Size &rSiz)
Definition: svdmodel.hxx:380
bool DoesMakePageObjectsNamesUnique() const
Definition: svdmodel.hxx:611
XLineEndListRef GetLineEndList() const
Definition: svdmodel.hxx:537
SfxStyleSheet * mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj
Definition: svdmodel.hxx:194
bool mbVOCInvalidationIsReliable
Definition: svdmodel.hxx:213
bool IsAddExtLeading() const
Definition: svdmodel.hxx:572
std::vector< rtl::Reference< SdrPage > > maMasterPages
Definition: svdmodel.hxx:172
const SfxItemPool & GetItemPool() const
Definition: svdmodel.hxx:318
const Size & GetMaxObjSize() const
Definition: svdmodel.hxx:379
virtual sal_Int32 getImagePreferredDPI() const
Definition: svdmodel.hxx:614
bool IsInDestruction() const
Definition: svdmodel.hxx:596
OUString m_aUIUnitStr
Definition: svdmodel.hxx:180
bool m_bPasteResize
Definition: svdmodel.hxx:210
SfxStyleSheet * m_pDefaultStyleSheet
Definition: svdmodel.hxx:193
bool IsVOCInvalidationIsReliable() const
Definition: svdmodel.hxx:618
void SetStyleSheetPool(SfxStyleSheetBasePool *pPool)
Definition: svdmodel.hxx:543
virtual SVX_DLLPRIVATE bool IsCreatingDataObj() const
Definition: svdmodel.hxx:270
bool mbInDestruction
Definition: svdmodel.hxx:232
XColorListRef GetColorList() const
Definition: svdmodel.hxx:534
bool m_bReadOnly
Definition: svdmodel.hxx:207
bool mbAddExtLeading
Definition: svdmodel.hxx:231
bool GetDisableTextEditUsesCommonUndoManager() const
Definition: svdmodel.hxx:551
void SetPickThroughTransparentTextFrames(bool bOn)
Definition: svdmodel.hxx:440
bool mbModelLocked
Definition: svdmodel.hxx:229
rtl::Reference< SfxItemPool > m_pItemPool
Definition: svdmodel.hxx:185
CharCompressType GetCharCompressType() const
Definition: svdmodel.hxx:566
FieldUnit GetUIUnit() const
Definition: svdmodel.hxx:384
std::unique_ptr< SdrOutliner > m_pDrawOutliner
Definition: svdmodel.hxx:187
void DoMakePageObjectsNamesUnique(bool bDo)
Definition: svdmodel.hxx:612
SfxItemPool & GetItemPool()
Definition: svdmodel.hxx:319
void operator=(const SdrModel &rSrcModel)=delete
XHatchListRef GetHatchList() const
Definition: svdmodel.hxx:533
SfxStyleSheetBasePool * GetStyleSheetPool() const
Definition: svdmodel.hxx:542
void SetPasteResize(bool bOn)
Definition: svdmodel.hxx:274
void SetDisableTextEditUsesCommonUndoManager(bool bNew)
Definition: svdmodel.hxx:552
const std::shared_ptr< SvxForbiddenCharactersTable > & GetForbiddenCharsTable() const
Definition: svdmodel.hxx:563
bool mbUndoEnabled
Definition: svdmodel.hxx:202
OutputDevice * GetRefDevice() const
Definition: svdmodel.hxx:334
sal_uInt32 m_nMaxUndoCount
Definition: svdmodel.hxx:215
const Fraction & GetScaleFraction() const
Definition: svdmodel.hxx:373
void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet *pDefSS)
Definition: svdmodel.hxx:350
void SetPropertyList(XPropertyListRef const &p)
Definition: svdmodel.hxx:529
std::deque< std::unique_ptr< SfxUndoAction > > m_aUndoStack
Definition: svdmodel.hxx:196
Fraction m_aUIUnitFact
Definition: svdmodel.hxx:181
std::vector< rtl::Reference< SdrPage > > maPages
Definition: svdmodel.hxx:173
rtl::Reference< SfxStyleSheetBasePool > mxStyleSheetPool
Definition: svdmodel.hxx:192
SdrLayerAdmin & GetLayerAdmin()
Definition: svdmodel.hxx:316
SdrModel(SfxItemPool *pPool=nullptr, ::comphelper::IEmbeddedHelper *pPers=nullptr, bool bDisablePropertyFiles=false)
std::deque< std::unique_ptr< SfxUndoAction > > m_aRedoStack
Definition: svdmodel.hxx:197
const Fraction & GetUIScale() const
Definition: svdmodel.hxx:387
bool IsSwapGraphics() const
Definition: svdmodel.hxx:433
std::unique_ptr< TextChain > m_pTextChain
Definition: svdmodel.hxx:217
std::unordered_set< SdrObject * > maAllIncarnatedObjects
Definition: svdmodel.hxx:169
bool m_bSwapGraphics
Definition: svdmodel.hxx:209
SdrModel(const SdrModel &rSrcModel)=delete
const SdrLayerAdmin & GetLayerAdmin() const
Definition: svdmodel.hxx:315
sal_uInt16 getHandoutPageCount() const
Definition: svdmodel.hxx:237
comphelper::IEmbeddedHelper * m_pEmbeddedHelper
Definition: svdmodel.hxx:186
SdrOutliner & GetHitTestOutliner() const
Definition: svdmodel.hxx:323
sal_uInt16 m_nUndoLevel
Definition: svdmodel.hxx:199
bool mbKernAsianPunctuation
Definition: svdmodel.hxx:230
const XPropertyListRef & GetPropertyList(XPropertyListType t) const
Definition: svdmodel.hxx:528
bool IsTransportContainer() const
Definition: svdmodel.hxx:271
std::shared_ptr< SvxForbiddenCharactersTable > mpForbiddenCharactersTable
Definition: svdmodel.hxx:221
FieldUnit m_eUIUnit
Definition: svdmodel.hxx:178
std::unique_ptr< SdrOutliner > m_pHitTestOutliner
Definition: svdmodel.hxx:188
sal_Int32 mnDefTextHgt
Definition: svdmodel.hxx:190
bool mbChanged
Definition: svdmodel.hxx:203
Abstract DrawObject.
Definition: svdobj.hxx:261
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Definition: svdpage.hxx:377
Abstract base class (ABC) for all UndoActions of DrawingEngine.
Definition: svdundo.hxx:61
The SdrUndoFactory can be set and retrieved from the SdrModel.
Definition: svdundo.hxx:727
Aggregation of arbitrarily many UndoActions to a single UndoAction.
Definition: svdundo.hxx:93
reference_type * get() const
static XBitmapListRef AsBitmapList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:379
static XLineEndListRef AsLineEndList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:385
static XDashListRef AsDashList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:370
static XColorListRef AsColorList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:376
static XGradientListRef AsGradientList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:388
static XHatchListRef AsHatchList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:373
static XPatternListRef AsPatternList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:382
A named theme has a named color set.
Definition: ColorSets.hxx:91
OUString GetUnitString(tools::Long nVal_100, FieldUnit eFieldUnit, sal_Unicode cSep)
Definition: dlgunit.hxx:27
float u
constexpr OUStringLiteral IsReadOnly(u"IsReadOnly")
struct _xmlTextWriter * xmlTextWriterPtr
FieldUnit
void * p
MapUnit
SvGenericNameContainerMapImpl maProperties
long Long
static bool bInit
Definition: objfac3d.cxx:30
OutlinerMode
constexpr const sal_Unicode DEGREE_CHAR
Definition: svdmodel.hxx:98
SdrHintKind
Definition: svdmodel.hxx:102
void impAddIncarnatedSdrObjectToSdrModel(SdrObject &rSdrObject, SdrModel &rSdrModel)
Definition: svdobj.cxx:336
void impRemoveIncarnatedSdrObjectToSdrModel(SdrObject &rSdrObject, SdrModel &rSdrModel)
Definition: svdobj.cxx:340
SdrRepeatFunc
Definition: svdtypes.hxx:66
#define SVX_DLLPRIVATE
Definition: svxdllapi.h:30
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
SvxNumType
sal_uInt16 sal_Unicode
XPropertyListType t
Definition: xtable.cxx:371
XPropertyListType
Definition: xtable.hxx:131