android: Update app-specific/MIME type icons
[LibreOffice.git] / include / svx / svdmodel.hxx
blob69beb464617521d271c7de92966a1f44cd837d33
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #pragma once
22 #include <functional>
23 #include <memory>
24 #include <com/sun/star/uno/Sequence.hxx>
25 #include <editeng/forbiddencharacterstable.hxx>
26 #include <editeng/outliner.hxx>
27 #include <rtl/ustring.hxx>
28 #include <tools/weakbase.h>
29 #include <svl/SfxBroadcaster.hxx>
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>
36 #include <svl/style.hxx>
37 #include <svx/xtable.hxx>
39 #include <svx/svdtypes.hxx>
40 #include <svx/svxdllapi.h>
42 #include <rtl/ref.hxx>
43 #include <deque>
45 #ifdef DBG_UTIL
46 // SdrObjectLifetimeWatchDog
47 #include <unordered_set>
48 #endif
50 class OutputDevice;
51 class SdrOutliner;
52 class SdrLayerAdmin;
53 class SdrObjList;
54 class SdrObject;
55 class SdrPage;
56 class SdrPageView;
57 class SdrTextObj;
58 class SdrUndoAction;
59 class SdrUndoGroup;
60 class AutoTimer;
61 class SfxItemPool;
62 class SfxItemSet;
63 class SfxRepeatTarget;
64 class SfxStyleSheet;
65 class SfxUndoAction;
66 class SfxUndoManager;
67 class XBitmapList;
68 class XColorList;
69 class XDashList;
70 class XGradientList;
71 class XHatchList;
72 class XLineEndList;
73 class SvxForbiddenCharactersTable;
74 class SvNumberFormatter;
75 class SdrOutlinerCache;
76 class SdrUndoFactory;
77 class ImageMap;
78 class TextChain;
79 enum class CharCompressType;
80 enum class SdrCompatibilityFlag;
81 namespace comphelper
83 class IEmbeddedHelper;
84 class LifecycleProxy;
86 namespace sfx2
88 class LinkManager;
90 namespace com::sun::star::beans {
91 struct PropertyValue;
94 namespace model
96 class Theme;
99 constexpr const sal_Unicode DEGREE_CHAR = u'\x00B0'; /* U+00B0 DEGREE SIGN */
102 enum class SdrHintKind
104 LayerChange, // changed layer definition
105 LayerOrderChange, // order of layer changed (Insert/Remove/ChangePos)
106 PageOrderChange, // order of pages (object pages or master pages) changed (Insert/Remove/ChangePos)
107 ObjectChange, // object changed
108 ObjectInserted, // new object inserted
109 ObjectRemoved, // symbol object removed from list
110 ModelCleared, // deleted the whole model (no pages exist anymore). not impl.
111 RefDeviceChange, // RefDevice changed
112 DefaultTabChange, // Default tabulator width changed
113 SwitchToPage, // #94278# UNDO/REDO at an object evtl. on another page
114 BeginEdit, // Is called after the object has entered text edit mode
115 EndEdit // Is called after the object has left text edit mode
118 class SVXCORE_DLLPUBLIC SdrHint final : public SfxHint
120 private:
121 SdrHintKind meHint;
122 const SdrObject* mpObj;
123 const SdrPage* mpPage;
125 public:
126 explicit SdrHint(SdrHintKind eNewHint);
127 explicit SdrHint(SdrHintKind eNewHint, const SdrObject& rNewObj);
128 explicit SdrHint(SdrHintKind eNewHint, const SdrPage* pPage);
129 explicit SdrHint(SdrHintKind eNewHint, const SdrObject& rNewObj, const SdrPage* pPage);
131 const SdrPage* GetPage() const { return mpPage;}
132 const SdrObject* GetObject() const { return mpObj;}
133 SdrHintKind GetKind() const { return meHint;}
136 ////////////////////////////////////////////////////////////////////////////////////////////////////
138 // SdrModel
139 // DlgEdModel
140 // FmFormModel
141 // ScDrawLayer
142 // SdDrawDocument
143 // SwDrawModel
144 // OReportModel
146 struct SdrModelImpl;
148 class SVXCORE_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase
150 #ifdef DBG_UTIL
151 // SdrObjectLifetimeWatchDog:
152 // Use maAllIncarnatedObjects to keep track of all SdrObjects incarnated using this SdrModel
153 // (what is now possible after the paradigm change that a SdrObject stays at a single SdrModel
154 // for it's whole lifetime).
155 // The two methods are exclusive, debug-only, only-accessible-by SdrObject accesses to else
156 // hidden/non-existing maAllIncarnatedObjects.
157 // SdrObject::SdrObject uses impAddIncarnatedSdrObjectToSdrModel, while SdrObject::~SdrObject
158 // uses impRemoveIncarnatedSdrObjectToSdrModel.
159 // There are two places which may trigger SAL_WARN warnings:
160 // - impRemoveIncarnatedSdrObjectToSdrModel when the to-be-removed SdrObject is not member of SdrModel
161 // - SdrModel::~SdrModel after all SdrObjects *should* be cleaned-up.
162 // SdrModel::~SdrModel will also - for convenience - Free the non-deleted SdrObjects if there
163 // are any.
164 // Using std::unordered_set will use quasi constant access times, so this watchdog will not
165 // be expensive. Nonetheless, only use with debug code. It may be seductive to use this in
166 // product code, too, especially if it will indeed trigger - but its intention is clearly
167 // to find/identify MemoryLeaks caused by SdrObjects
168 friend void impAddIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel);
169 friend void impRemoveIncarnatedSdrObjectToSdrModel(SdrObject& rSdrObject, SdrModel& rSdrModel);
170 std::unordered_set< SdrObject* > maAllIncarnatedObjects;
171 #endif
172 protected:
173 std::vector<rtl::Reference<SdrPage>> maMasterPages;
174 std::vector<rtl::Reference<SdrPage>> maPages;
175 std::function<void(std::unique_ptr<SdrUndoAction>)> m_aUndoLink; // link to a NotifyUndo-Handler
176 Size m_aMaxObjSize; // e.g. for auto-growing text
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
181 Fraction m_aUIUnitFact; // see above
182 int m_nUIUnitDecimalMark; // see above
184 std::unique_ptr<SdrLayerAdmin> m_pLayerAdmin;
185 rtl::Reference<SfxItemPool> m_pItemPool;
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
192 rtl::Reference< SfxStyleSheetBasePool > mxStyleSheetPool;
193 SfxStyleSheet* m_pDefaultStyleSheet;
194 SfxStyleSheet* mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; // #i119287#
195 sfx2::LinkManager* m_pLinkManager; // LinkManager
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;
204 bool m_bPagNumsDirty:1;
205 bool m_bMPgNumsDirty:1;
206 bool m_bTransportContainer:1; // doc is temporary object container, no display (e.g. clipboard)
207 bool m_bReadOnly:1;
208 bool m_bTransparentTextFrames:1;
209 bool m_bSwapGraphics:1;
210 bool m_bPasteResize:1; // Objects are being resized due to Paste with different MapMode
211 bool m_bStarDrawPreviewMode:1;
212 bool mbDisableTextEditUsesCommonUndoManager:1;
213 bool mbVOCInvalidationIsReliable:1; // does the app reliably invalidate the VOC, or do we need to rebuild the primitives on every render?
214 sal_uInt16 m_nDefaultTabulator;
215 sal_uInt32 m_nMaxUndoCount;
217 std::unique_ptr<TextChain> m_pTextChain;
220 public:
221 std::shared_ptr<SvxForbiddenCharactersTable> mpForbiddenCharactersTable;
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;
227 CharCompressType mnCharCompressType;
228 sal_uInt16 mnHandoutPageCount;
229 bool mbModelLocked;
230 bool mbKernAsianPunctuation;
231 bool mbAddExtLeading;
232 bool mbInDestruction;
234 // Color, Dash, Line-End, Hatch, Gradient, Bitmap property lists ...
235 o3tl::enumarray<XPropertyListType, XPropertyListRef> maProperties;
237 sal_uInt16 getHandoutPageCount() const { return mnHandoutPageCount; }
238 void setHandoutPageCount( sal_uInt16 nHandoutPageCount ) { mnHandoutPageCount = nHandoutPageCount; }
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);
249 protected:
250 virtual css::uno::Reference< css::uno::XInterface > createUnoModel();
252 private:
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);
263 // this is a weak reference to a possible living api wrapper for this model
264 css::uno::Reference< css::uno::XInterface > mxUnoModel;
266 // used to disable unique name checking during page move
267 bool mbMakePageObjectsNamesUnique = true;
269 public:
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.
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);
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;
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; }
318 const SfxItemPool& GetItemPool() const { return *m_pItemPool; }
319 SfxItemPool& GetItemPool() { return *m_pItemPool; }
321 SdrOutliner& GetDrawOutliner(const SdrTextObj* pObj=nullptr) const;
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 );
329 SdrOutliner& GetChainingOutliner(const SdrTextObj* pObj) const;
330 TextChain * GetTextChain() const;
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; }
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; }
348 // #i119287# default StyleSheet for SdrGrafObj and SdrOle2Obj
349 SfxStyleSheet* GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const { return mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; }
350 void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet* pDefSS) { mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = pDefSS; }
352 sfx2::LinkManager* GetLinkManager() { return m_pLinkManager; }
353 void SetLinkManager( sfx2::LinkManager* pLinkMgr ) { m_pLinkManager = pLinkMgr; }
355 ::comphelper::IEmbeddedHelper* GetPersist() const { return m_pEmbeddedHelper; }
356 void SetPersist( ::comphelper::IEmbeddedHelper *p ) { m_pEmbeddedHelper = p; }
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);
374 // maximal size e.g. for auto growing texts
375 const Size& GetMaxObjSize() const { return m_aMaxObjSize; }
376 void SetMaxObjSize(const Size& rSiz) { m_aMaxObjSize=rSiz; }
378 // For the View! to display sane numbers in the status bar: Default is mm.
379 void SetUIUnit(FieldUnit eUnit);
380 FieldUnit GetUIUnit() const { return m_eUIUnit; }
381 // The scale of the drawing. Default 1/1.
382 void SetUIScale(const Fraction& rScale);
383 const Fraction& GetUIScale() const { return m_aUIScale; }
384 // Setting both simultaneously performs a little better
385 void SetUIUnit(FieldUnit eUnit, const Fraction& rScale);
387 static OUString GetUnitString(FieldUnit eUnit);
388 OUString GetMetricString(tools::Long nVal, bool bNoUnitChars = false, sal_Int32 nNumDigits = -1) const;
389 static OUString GetAngleString(Degree100 nAngle);
390 static OUString GetPercentString(const Fraction& rVal);
392 // RecalcPageNums is ordinarily only called by the Page.
393 bool IsPagNumsDirty() const { return m_bPagNumsDirty; };
394 bool IsMPgNumsDirty() const { return m_bMPgNumsDirty; };
395 void RecalcPageNums(bool bMaster);
396 // After the Insert the Page belongs to the SdrModel.
397 virtual void InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
398 virtual void DeletePage(sal_uInt16 nPgNum);
399 // Remove means transferring ownership to the caller (opposite of Insert)
400 virtual rtl::Reference<SdrPage> RemovePage(sal_uInt16 nPgNum);
401 virtual void MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
402 const SdrPage* GetPage(sal_uInt16 nPgNum) const;
403 SdrPage* GetPage(sal_uInt16 nPgNum);
404 sal_uInt16 GetPageCount() const;
405 virtual void PageListChanged();
407 // Masterpages
408 virtual void InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
409 void DeleteMasterPage(sal_uInt16 nPgNum);
410 // Remove means transferring ownership to the caller (opposite of Insert)
411 virtual rtl::Reference<SdrPage> RemoveMasterPage(sal_uInt16 nPgNum);
412 void MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
413 const SdrPage* GetMasterPage(sal_uInt16 nPgNum) const;
414 SdrPage* GetMasterPage(sal_uInt16 nPgNum);
415 sal_uInt16 GetMasterPageCount() const;
416 virtual void MasterPageListChanged();
418 // modified flag. Is set automatically when something changes on the Pages
419 // symbol objects. You need to reset it yourself, however, e.g. on Save().
420 bool IsChanged() const { return mbChanged; }
421 virtual void SetChanged(bool bFlg = true);
423 // If set to sal_True, graphics from graphics objects will:
424 // - not be loaded immediately when loading a document,
425 // but only once they are needed (e.g. displayed).
426 // - be pruned from memory if they are not needed.
427 // For that to work, override the virtual method GetDocumentStream().
428 // Default=FALSE. Flag is not persistent.
429 bool IsSwapGraphics() const { return m_bSwapGraphics; }
430 void SetSwapGraphics();
432 // Text frames without filling can be select with a mouse click by default (sal_False).
433 // With this flag set to true you can hit them only in the area in which text is to be
434 // found.
435 bool IsPickThroughTransparentTextFrames() const { return m_bTransparentTextFrames; }
436 void SetPickThroughTransparentTextFrames(bool bOn) { m_bTransparentTextFrames=bOn; }
438 // Can the model be changed at all?
439 // Is only evaluated by the possibility methods of the View.
440 // Direct manipulations on the model, ... do not respect this flag.
441 // Override this and return the appropriate ReadOnly status
442 // of the files, i.e. true or false. (Method is called multiple
443 // times, so use one flag only!)
444 virtual bool IsReadOnly() const;
445 void SetReadOnly(bool bYes);
447 // Mixing two SdrModels. Mind that rSourceModel is not const.
448 // The pages will not be copied but moved, when inserted.
449 // rSourceModel may very well be empty afterwards.
450 // nFirstPageNum,nLastPageNum: The pages to take from rSourceModel
451 // nDestPos..................: position to insert
452 // bMergeMasterPages.........: sal_True = needed MasterPages will be taken
453 // from rSourceModel
454 // sal_False= the MasterPageDescriptors of
455 // the pages of the rSourceModel will be
456 // mapped on the existing MasterPages.
457 // bUndo.....................: An undo action is generated for the merging.
458 // Undo is only for the target model, not for the
459 // rSourceModel.
460 // bTreadSourceAsConst.......: sal_True=the SourceModel will not be changed,
461 // so pages will be copied.
462 virtual void Merge(SdrModel& rSourceModel,
463 sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
464 sal_uInt16 nDestPos,
465 bool bMergeMasterPages, bool bAllMasterPages,
466 bool bUndo = true, bool bTreadSourceAsConst = false);
468 // Behaves like Merge(SourceModel=DestModel,nFirst,nLast,nDest,sal_False,sal_False,bUndo,!bMoveNoCopy);
469 void CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
470 sal_uInt16 nDestPos,
471 bool bUndo, bool bMoveNoCopy);
473 // BegUndo() / EndUndo() enables you to group arbitrarily many UndoActions
474 // arbitrarily deeply. As comment for the UndoAction the first BegUndo(String) of all
475 // nestings will be used.
476 // In that case the NotifyUndoActionHdl will be called on the last EndUndo().
477 // No UndoAction will be generated for an empty group.
478 // All direct modifications on the SdrModel do not create an UndoActions.
479 // Actions on the SdrView however do generate those.
480 void BegUndo(); // open Undo group
481 void BegUndo(const OUString& rComment); // open Undo group
482 void BegUndo(const OUString& rComment, const OUString& rObjDescr, SdrRepeatFunc eFunc); // open Undo group
483 void EndUndo(); // close Undo group
484 void AddUndo(std::unique_ptr<SdrUndoAction> pUndo);
485 sal_uInt16 GetUndoBracketLevel() const { return m_nUndoLevel; }
486 // only after the first BegUndo or before the last EndUndo:
487 void SetUndoComment(const OUString& rComment);
488 void SetUndoComment(const OUString& rComment, const OUString& rObjDescr);
490 // The Undo management is only done if NotifyUndoAction-Handler is not set.
491 // Default is 16. Minimal MaxUndoActionCount is 1.
492 void SetMaxUndoActionCount(sal_uInt32 nCount);
493 void ClearUndoBuffer();
495 bool HasUndoActions() const;
496 bool HasRedoActions() const;
497 void Undo();
498 void Redo();
499 void Repeat(SfxRepeatTarget&);
501 // The application can set a handler here which collects the UndoActions einsammelt.
502 // The handler has the following signature:
503 // void NotifyUndoActionHdl(SfxUndoAction* pUndoAction);
504 // When calling the handler ownership is transferred;
505 // The UndoAction belongs to the Handler, not the SdrModel.
506 void SetNotifyUndoActionHdl(const std::function<void(std::unique_ptr<SdrUndoAction>)>& rLink) { m_aUndoLink=rLink; }
508 /** application can set its own undo manager, BegUndo, EndUndo and AddUndoAction
509 calls are routed to this interface if given */
510 void SetSdrUndoManager( SfxUndoManager* pUndoManager );
511 SfxUndoManager* GetSdrUndoManager() const;
513 /** applications can set their own undo factory to override creation of
514 undo actions. The SdrModel will become owner of the given SdrUndoFactory
515 and delete it upon its destruction. */
516 void SetSdrUndoFactory( SdrUndoFactory* pUndoFactory );
518 /** returns the models undo factory. This must be used to create
519 undo actions for this model. */
520 SdrUndoFactory& GetSdrUndoFactory() const;
522 // Accessor methods for Palettes, Lists and Tables
523 // FIXME: this badly needs re-factoring...
524 const XPropertyListRef& GetPropertyList( XPropertyListType t ) const { return maProperties[ t ]; }
525 void SetPropertyList( XPropertyListRef const & p ) { maProperties[ p->Type() ] = p; }
527 // friendlier helpers
528 XDashListRef GetDashList() const { return XPropertyList::AsDashList(GetPropertyList( XPropertyListType::Dash )); }
529 XHatchListRef GetHatchList() const { return XPropertyList::AsHatchList(GetPropertyList( XPropertyListType::Hatch )); }
530 XColorListRef GetColorList() const { return XPropertyList::AsColorList(GetPropertyList( XPropertyListType::Color )); }
531 XBitmapListRef GetBitmapList() const { return XPropertyList::AsBitmapList(GetPropertyList( XPropertyListType::Bitmap )); }
532 XPatternListRef GetPatternList() const { return XPropertyList::AsPatternList(GetPropertyList( XPropertyListType::Pattern )); }
533 XLineEndListRef GetLineEndList() const { return XPropertyList::AsLineEndList(GetPropertyList( XPropertyListType::LineEnd )); }
534 XGradientListRef GetGradientList() const { return XPropertyList::AsGradientList(GetPropertyList( XPropertyListType::Gradient )); }
536 // The DrawingEngine only references the StyleSheetPool, whoever
537 // made it needs to delete it.
538 SfxStyleSheetBasePool* GetStyleSheetPool() const { return mxStyleSheetPool.get(); }
539 void SetStyleSheetPool(SfxStyleSheetBasePool* pPool) { mxStyleSheetPool=pPool; }
541 void setTheme(std::shared_ptr<model::Theme> const& pTheme);
542 std::shared_ptr<model::Theme> const& getTheme() const;
544 void SetStarDrawPreviewMode(bool bPreview);
545 bool IsStarDrawPreviewMode() const { return m_bStarDrawPreviewMode; }
547 bool GetDisableTextEditUsesCommonUndoManager() const { return mbDisableTextEditUsesCommonUndoManager; }
548 void SetDisableTextEditUsesCommonUndoManager(bool bNew) { mbDisableTextEditUsesCommonUndoManager = bNew; }
550 css::uno::Reference< css::uno::XInterface > const & getUnoModel();
551 void setUnoModel( const css::uno::Reference< css::uno::XInterface >& xModel );
553 // these functions are used by the api to disable repaints during a
554 // set of api calls.
555 bool isLocked() const { return mbModelLocked; }
556 void setLock( bool bLock );
558 void SetForbiddenCharsTable( const std::shared_ptr<SvxForbiddenCharactersTable>& xForbiddenChars );
559 const std::shared_ptr<SvxForbiddenCharactersTable>& GetForbiddenCharsTable() const { return mpForbiddenCharactersTable;}
561 void SetCharCompressType( CharCompressType nType );
562 CharCompressType GetCharCompressType() const { return mnCharCompressType; }
564 void SetKernAsianPunctuation( bool bEnabled );
565 bool IsKernAsianPunctuation() const { return mbKernAsianPunctuation; }
567 void SetAddExtLeading( bool bEnabled );
568 bool IsAddExtLeading() const { return mbAddExtLeading; }
570 void SetCompatibilityFlag(SdrCompatibilityFlag eFlag, bool bEnabled);
571 /// @returns state of the SdrCompatibilityFlag
572 bool GetCompatibilityFlag(SdrCompatibilityFlag eFlag) const;
574 void ReformatAllTextObjects();
576 std::unique_ptr<SdrOutliner> createOutliner( OutlinerMode nOutlinerMode );
577 void disposeOutliner( std::unique_ptr<SdrOutliner> pOutliner );
579 bool IsWriter() const { return m_bIsWriter; }
581 // Used as a fallback in *::ReadUserDataSequence() to process common properties
582 void ReadUserDataSequenceValue(const css::beans::PropertyValue *pValue);
583 void WriteUserDataSequence(css::uno::Sequence < css::beans::PropertyValue >& rValues);
585 /** returns the numbering type that is used to format page fields in drawing shapes */
586 virtual SvxNumType GetPageNumType() const;
588 /** copies the items from the source set to the destination set. Both sets must have
589 same ranges but can have different pools. */
590 static void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel );
592 bool IsInDestruction() const { return mbInDestruction;}
594 static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId();
596 /** enables (true) or disables (false) recording of undo actions
597 If undo actions are added while undo is disabled, they are deleted.
598 Disabling undo does not clear the current undo buffer! */
599 void EnableUndo( bool bEnable );
601 /** returns true if undo is currently enabled
602 This returns false if undo was disabled using EnableUndo( false ) and
603 also during the runtime of the Undo() and Redo() methods. */
604 bool IsUndoEnabled() const;
606 // used to prevent object name change during page move
607 bool DoesMakePageObjectsNamesUnique() const { return mbMakePageObjectsNamesUnique; }
608 void DoMakePageObjectsNamesUnique(bool bDo) { mbMakePageObjectsNamesUnique = bDo; }
610 virtual sal_Int32 getImagePreferredDPI() const { return 0; }
612 virtual void dumpAsXml(xmlTextWriterPtr pWriter) const;
614 bool IsVOCInvalidationIsReliable() const { return mbVOCInvalidationIsReliable; }
615 void SetVOCInvalidationIsReliable(bool b) { mbVOCInvalidationIsReliable = b; }
619 +-----------+
620 | SdrModel |
621 +--+------+-+
622 | +-----------+
623 +----+-----+ |
624 | ... | |
625 +----+---+ +----+---+ +-----+--------+
626 |SdrPage | |SdrPage | |SdrLayerAdmin |
627 +---+----+ +-+--+--++ +---+-------+--+
628 | | | | | +-------------------+
629 +----+----+ +-----+-----+ +-------+-------+
630 | ... | | ... | | ... |
631 +---+---+ +---+---+ +----+----+ +----+----+ +-----+------+ +------+-----+
632 |SdrObj | |SdrObj | |SdrLayer | |SdrLayer | |SdrLayerSet | |SdrLayerSet |
633 +-------+ +-------+ +---------+ +---------+ +------------+ +------------+
634 This class: SdrModel is the head of the data models for the StarView Drawing Engine.
636 ///////////////////////////////////////////////////////////////////////////////////////////////// */
638 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */