Line data Source code
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 _SVDMODEL_HXX
21 : #define _SVDMODEL_HXX
22 :
23 : #include <com/sun/star/uno/Sequence.hxx>
24 : #include <cppuhelper/weakref.hxx>
25 : #include <sot/storage.hxx>
26 : #include <tools/link.hxx>
27 : #include <tools/weakbase.hxx>
28 : #include <vcl/mapmod.hxx>
29 : #include <svl/brdcst.hxx>
30 : #include <tools/string.hxx>
31 : #include <tools/datetime.hxx>
32 : #include <svl/hint.hxx>
33 :
34 : #include <svl/style.hxx>
35 : #include <svx/xtable.hxx>
36 : #include <svx/pageitem.hxx>
37 : #include <vcl/field.hxx>
38 :
39 : #include <boost/shared_ptr.hpp>
40 :
41 : class OutputDevice;
42 : #include <svx/svdtypes.hxx> // fuer enum RepeatFuncts
43 : #include "svx/svxdllapi.h"
44 :
45 : #include <rtl/ref.hxx>
46 : #include <deque>
47 :
48 : #if defined(UNX) || defined(WNT)
49 : #define DEGREE_CHAR ((sal_Unicode)176) /* 0xB0 = Ansi */
50 : #endif
51 :
52 : #ifndef DEGREE_CHAR
53 : #error unbekannte Plattrorm
54 : #endif
55 :
56 : class SdrOutliner;
57 : class SdrLayerAdmin;
58 : class SdrObjList;
59 : class SdrObject;
60 : class SdrPage;
61 : class SdrPageView;
62 : class SdrTextObj;
63 : class SdrUndoAction;
64 : class SdrUndoGroup;
65 : class AutoTimer;
66 : class SfxItemPool;
67 : class SfxItemSet;
68 : class SfxRepeatTarget;
69 : class SfxStyleSheet;
70 : class SfxUndoAction;
71 : class SfxUndoManager;
72 : class XBitmapList;
73 : class XColorList;
74 : class XDashList;
75 : class XGradientList;
76 : class XHatchList;
77 : class XLineEndList;
78 : class SvxForbiddenCharactersTable;
79 : class SvNumberFormatter;
80 : class SotStorage;
81 : class SdrOutlinerCache;
82 : class SotStorageRef;
83 : class SdrUndoFactory;
84 : namespace comphelper
85 : {
86 : class IEmbeddedHelper;
87 : class LifecycleProxy;
88 : }
89 : namespace sfx2
90 : {
91 : class LinkManager;
92 : }
93 : ////////////////////////////////////////////////////////////////////////////////////////////////////
94 :
95 : #define SDR_SWAPGRAPHICSMODE_NONE 0x00000000
96 : #define SDR_SWAPGRAPHICSMODE_TEMP 0x00000001
97 : #define SDR_SWAPGRAPHICSMODE_DOC 0x00000002
98 : #define SDR_SWAPGRAPHICSMODE_PURGE 0x00000100
99 : #define SDR_SWAPGRAPHICSMODE_DEFAULT (SDR_SWAPGRAPHICSMODE_TEMP|SDR_SWAPGRAPHICSMODE_DOC|SDR_SWAPGRAPHICSMODE_PURGE)
100 :
101 : ////////////////////////////////////////////////////////////////////////////////////////////////////
102 :
103 : enum SdrHintKind
104 : {
105 : HINT_UNKNOWN, // Unbekannt
106 : HINT_LAYERCHG, // Layerdefinition geaendert
107 : HINT_LAYERORDERCHG, // Layerreihenfolge geaendert (Insert/Remove/ChangePos)
108 : HINT_PAGEORDERCHG, // Reihenfolge der Seiten (Zeichenseiten oder Masterpages) geaendert (Insert/Remove/ChangePos)
109 : HINT_OBJCHG, // Objekt geaendert
110 : HINT_OBJINSERTED, // Neues Zeichenobjekt eingefuegt
111 : HINT_OBJREMOVED, // Zeichenobjekt aus Liste entfernt
112 : HINT_MODELCLEARED, // gesamtes Model geloescht (keine Pages mehr da). not impl.
113 : HINT_REFDEVICECHG, // RefDevice geaendert
114 : HINT_DEFAULTTABCHG, // Default Tabulatorweite geaendert
115 : HINT_DEFFONTHGTCHG, // Default FontHeight geaendert
116 : HINT_MODELSAVED, // Dokument wurde gesichert
117 : HINT_SWITCHTOPAGE, // #94278# UNDO/REDO at an object evtl. on another page
118 : HINT_BEGEDIT, // Is called after the object has entered text edit mode
119 : HINT_ENDEDIT // Is called after the object has left text edit mode
120 : };
121 :
122 75990 : class SVX_DLLPUBLIC SdrHint: public SfxHint
123 : {
124 : public:
125 : Rectangle maRectangle;
126 : const SdrPage* mpPage;
127 : const SdrObject* mpObj;
128 : const SdrObjList* mpObjList;
129 : SdrHintKind meHint;
130 :
131 : public:
132 : TYPEINFO();
133 :
134 : explicit SdrHint(SdrHintKind eNewHint);
135 : explicit SdrHint(const SdrObject& rNewObj);
136 :
137 : void SetPage(const SdrPage* pNewPage);
138 : void SetObject(const SdrObject* pNewObj);
139 : void SetKind(SdrHintKind eNewKind);
140 :
141 : const SdrPage* GetPage() const;
142 : const SdrObject* GetObject() const;
143 : SdrHintKind GetKind() const;
144 : };
145 :
146 : ////////////////////////////////////////////////////////////////////////////////////////////////////
147 :
148 : // Flag um nach dem Laden des Pools Aufzuraeumen (d.h. die RefCounts
149 : // neu zu bestimmen und unbenutztes wegzuwerfen). sal_False == aktiv
150 : #define LOADREFCOUNTS (false)
151 :
152 : struct SdrModelImpl;
153 :
154 : class SVX_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase< SdrModel >
155 : {
156 : protected:
157 : DateTime aReadDate; // Datum des Einstreamens
158 : std::vector<SdrPage*> maMaPag; // StammSeiten (Masterpages)
159 : std::vector<SdrPage*> maPages;
160 : Link aUndoLink; // Link fuer einen NotifyUndo-Handler
161 : Link aIOProgressLink;
162 : String aTablePath;
163 : Size aMaxObjSize; // z.B. fuer Autogrowing Text
164 : Fraction aObjUnit; // Beschreibung der Koordinateneinheiten fuer ClipBoard, Drag&Drop, ...
165 : MapUnit eObjUnit; // see above
166 : FieldUnit eUIUnit; // Masseinheit, Masstab (z.B. 1/1000) fuer die UI (Statuszeile) wird von ImpSetUIUnit() gesetzt
167 : Fraction aUIScale; // see above
168 : String aUIUnitStr; // see above
169 : Fraction aUIUnitFact; // see above
170 : int nUIUnitKomma; // see above
171 :
172 : SdrLayerAdmin* pLayerAdmin;
173 : SfxItemPool* pItemPool;
174 : comphelper::IEmbeddedHelper*
175 : m_pEmbeddedHelper; // helper for embedded objects to get rid of the SfxObjectShell
176 : SdrOutliner* pDrawOutliner; // ein Outliner zur Textausgabe
177 : SdrOutliner* pHitTestOutliner;// ein Outliner fuer den HitTest
178 : sal_uIntPtr nDefTextHgt; // Default Texthoehe in logischen Einheiten
179 : OutputDevice* pRefOutDev; // ReferenzDevice fuer die EditEngine
180 : sal_uIntPtr nProgressAkt; // fuer den
181 : sal_uIntPtr nProgressMax; // ProgressBar-
182 : sal_uIntPtr nProgressOfs; // -Handler
183 : rtl::Reference< SfxStyleSheetBasePool > mxStyleSheetPool;
184 : SfxStyleSheet* pDefaultStyleSheet;
185 : SfxStyleSheet* mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; // #i119287#
186 : sfx2::LinkManager* pLinkManager; // LinkManager
187 : std::deque<SfxUndoAction*>* pUndoStack;
188 : std::deque<SfxUndoAction*>* pRedoStack;
189 : SdrUndoGroup* pAktUndoGroup; // Fuer mehrstufige
190 : sal_uInt16 nUndoLevel; // Undo-Klammerung
191 : sal_uInt16 nProgressPercent; // fuer den ProgressBar-Handler
192 : sal_uInt16 nLoadVersion; // Versionsnummer der geladenen Datei
193 : bool bMyPool:1; // zum Aufraeumen von pMyPool ab 303a
194 : bool bUIOnlyKomma:1; // see eUIUnit
195 : bool mbUndoEnabled:1; // If false no undo is recorded or we are during the execution of an undo action
196 : bool bExtColorTable:1; // Keinen eigenen ColorTable
197 : bool mbChanged:1;
198 : bool bInfoChanged:1;
199 : bool bPagNumsDirty:1;
200 : bool bMPgNumsDirty:1;
201 : bool bPageNotValid:1; // TRUE=Doc ist nur ObjektTraeger. Page ist nicht gueltig.
202 : bool bSavePortable:1; // Metafiles portabel speichern
203 : bool bNoBitmapCaching:1; // Bitmaps fuer Screenoutput cachen
204 : bool bReadOnly:1;
205 : bool bTransparentTextFrames:1;
206 : bool bSaveCompressed:1;
207 : bool bSwapGraphics:1;
208 : bool bPasteResize:1; // Objekte werden gerade resized wegen Paste mit anderem MapMode
209 : bool bSaveOLEPreview:1; // save preview metafile of OLE objects
210 : bool bSaveNative:1;
211 : bool bStarDrawPreviewMode:1;
212 : bool mbDisableTextEditUsesCommonUndoManager:1;
213 : sal_uInt16 nStreamCompressMode; // Komprimiert schreiben?
214 : sal_uInt16 nStreamNumberFormat;
215 : sal_uInt16 nDefaultTabulator;
216 : sal_uInt32 nMaxUndoCount;
217 :
218 :
219 : //////////////////////////////////////////////////////////////////////////////
220 : // sdr::Comment interface
221 : private:
222 : // the next unique comment ID, used for counting added comments. Initialized
223 : // to 0. UI shows one more due to the fact that 0 is a no-no for users.
224 : sal_uInt32 mnUniqueCommentID;
225 :
226 : public:
227 : // create a new, unique comment ID
228 : sal_uInt32 GetNextUniqueCommentID();
229 :
230 : // get the author name
231 : OUString GetDocumentAuthorName() const;
232 :
233 : // for export
234 : sal_uInt32 GetUniqueCommentID() const { return mnUniqueCommentID; }
235 :
236 : // for import
237 : void SetUniqueCommentID(sal_uInt32 nNewID) { if(nNewID != mnUniqueCommentID) { mnUniqueCommentID = nNewID; } }
238 :
239 : sal_uInt16 nStarDrawPreviewMasterPageNum;
240 : SvxForbiddenCharactersTable* mpForbiddenCharactersTable;
241 : sal_uIntPtr nSwapGraphicsMode;
242 :
243 : SdrOutlinerCache* mpOutlinerCache;
244 : SdrModelImpl* mpImpl;
245 : sal_uInt16 mnCharCompressType;
246 : sal_uInt16 mnHandoutPageCount;
247 : sal_uInt16 nReserveUInt6;
248 : sal_uInt16 nReserveUInt7;
249 : bool mbModelLocked;
250 : bool mbKernAsianPunctuation;
251 : bool mbAddExtLeading;
252 : bool mbInDestruction;
253 :
254 : // Color, Dash, Line-End, Hatch, Gradient, Bitmap property lists ...
255 : XPropertyListRef maProperties[XPROPERTY_LIST_COUNT];
256 :
257 : // New src638: NumberFormatter for drawing layer and
258 : // method for getting it. It is constructed on demand
259 : // and destroyed when destroying the SdrModel.
260 : SvNumberFormatter* mpNumberFormatter;
261 : public:
262 0 : sal_uInt16 getHandoutPageCount() const { return mnHandoutPageCount; }
263 0 : void setHandoutPageCount( sal_uInt16 nHandoutPageCount ) { mnHandoutPageCount = nHandoutPageCount; }
264 :
265 : protected:
266 :
267 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoModel();
268 :
269 : private:
270 : // Nicht implementiert:
271 : SVX_DLLPRIVATE SdrModel(const SdrModel& rSrcModel);
272 : SVX_DLLPRIVATE void operator=(const SdrModel& rSrcModel);
273 : SVX_DLLPRIVATE bool operator==(const SdrModel& rCmpModel) const;
274 : SVX_DLLPRIVATE void ImpPostUndoAction(SdrUndoAction* pUndo);
275 : SVX_DLLPRIVATE void ImpSetUIUnit();
276 : SVX_DLLPRIVATE void ImpSetOutlinerDefaults( SdrOutliner* pOutliner, sal_Bool bInit = sal_False );
277 : SVX_DLLPRIVATE void ImpReformatAllTextObjects();
278 : SVX_DLLPRIVATE void ImpReformatAllEdgeObjects(); // #103122#
279 : SVX_DLLPRIVATE void ImpCreateTables();
280 : SVX_DLLPRIVATE void ImpCtor(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable,
281 : bool bLoadRefCounts = true);
282 :
283 :
284 : // this is a weak reference to a possible living api wrapper for this model
285 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoModel;
286 :
287 : public:
288 27923 : bool IsPasteResize() const { return bPasteResize; }
289 0 : void SetPasteResize(bool bOn) { bPasteResize=bOn; }
290 : TYPEINFO();
291 : // Steckt man hier seinen eigenen Pool rein, so wird die Klasse auch
292 : // Aktionen an ihm vornehmen (Put(),Remove()). Bei Zerstoerung von
293 : // SdrModel wird dieser Pool ver delete geloescht!
294 : // Gibt man den Konstruktor stattdessen eine NULL mit, so macht sich
295 : // die Klasse einen eigenen Pool (SdrItemPool), den sie dann auch im
296 : // Destruktor zerstoert.
297 : // Bei Verwendung eines eigenen Pools ist darauf zu achten, dass dieser
298 : // von SdrItemPool abgeleitet ist, falls man von SdrAttrObj abgeleitete
299 : // Zeichenobjekte verwenden moechte. Setzt man degegen nur vom abstrakten
300 : // Basisobjekt SdrObject abgeleitete Objekte ein, so ist man frei in der
301 : // Wahl des Pools.
302 : explicit SdrModel(SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
303 : explicit SdrModel(const String& rPath, SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
304 : SdrModel(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
305 : SdrModel(const String& rPath, SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
306 : virtual ~SdrModel();
307 : void ClearModel(sal_Bool bCalledFromDestructor);
308 :
309 : // Hier kann man erfragen, ob das Model gerade eingrstreamt wird
310 64361 : bool IsLoading() const { return sal_False /*BFS01 bLoading */; }
311 : // Muss z.B. ueberladen werden, um das Swappen/LoadOnDemand von Grafiken
312 : // zu ermoeglichen. Wird rbDeleteAfterUse auf sal_True gesetzt, so wird
313 : // die SvStream-Instanz vom Aufrufer nach Gebrauch destruiert.
314 : // Wenn diese Methode NULL liefert, wird zum Swappen eine temporaere
315 : // Datei angelegt.
316 : // Geliefert werden muss der Stream, aus dem das Model geladen wurde
317 : // bzw. in den es zuletzt gespeichert wurde.
318 : virtual ::com::sun::star::uno::Reference<
319 : ::com::sun::star::embed::XStorage> GetDocumentStorage() const;
320 : ::com::sun::star::uno::Reference<
321 : ::com::sun::star::io::XInputStream >
322 : GetDocumentStream(OUString const& rURL,
323 : ::comphelper::LifecycleProxy & rProxy) const;
324 : // Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln.
325 : void BurnInStyleSheetAttributes();
326 : // Wer sich von SdrPage ableitet muss sich auch von SdrModel ableiten
327 : // und diese beiden VM AllocPage() und AllocModel() ueberladen...
328 : virtual SdrPage* AllocPage(bool bMasterPage);
329 : virtual SdrModel* AllocModel() const;
330 :
331 : // Aenderungen an den Layern setzen das Modified-Flag und broadcasten am Model!
332 8019 : const SdrLayerAdmin& GetLayerAdmin() const { return *pLayerAdmin; }
333 33130 : SdrLayerAdmin& GetLayerAdmin() { return *pLayerAdmin; }
334 :
335 0 : const SfxItemPool& GetItemPool() const { return *pItemPool; }
336 624263 : SfxItemPool& GetItemPool() { return *pItemPool; }
337 :
338 : SdrOutliner& GetDrawOutliner(const SdrTextObj* pObj=NULL) const;
339 :
340 69027 : SdrOutliner& GetHitTestOutliner() const { return *pHitTestOutliner; }
341 : const SdrTextObj* GetFormattingTextObj() const;
342 : // Die TextDefaults (Font,Hoehe,Farbe) in ein Set putten
343 : void SetTextDefaults() const;
344 : static void SetTextDefaults( SfxItemPool* pItemPool, sal_uIntPtr nDefTextHgt );
345 :
346 : // ReferenzDevice fuer die EditEngine
347 : void SetRefDevice(OutputDevice* pDev);
348 21852 : OutputDevice* GetRefDevice() const { return pRefOutDev; }
349 : // Wenn ein neuer MapMode am RefDevice gesetzt wird o.ae.
350 : void RefDeviceChanged(); // noch nicht implementiert
351 : // Default-Schrifthoehe in logischen Einheiten
352 : void SetDefaultFontHeight(sal_uIntPtr nVal);
353 0 : sal_uIntPtr GetDefaultFontHeight() const { return nDefTextHgt; }
354 : // Default-Tabulatorweite fuer die EditEngine
355 : void SetDefaultTabulator(sal_uInt16 nVal);
356 13220 : sal_uInt16 GetDefaultTabulator() const { return nDefaultTabulator; }
357 :
358 : // Der DefaultStyleSheet wird jedem Zeichenobjekt verbraten das in diesem
359 : // Model eingefuegt wird und kein StyleSheet gesetzt hat.
360 35305 : SfxStyleSheet* GetDefaultStyleSheet() const { return pDefaultStyleSheet; }
361 84 : void SetDefaultStyleSheet(SfxStyleSheet* pDefSS) { pDefaultStyleSheet = pDefSS; }
362 :
363 : // #i119287# default StyleSheet for SdrGrafObj and SdrOle2Obj
364 91 : SfxStyleSheet* GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const { return mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; }
365 84 : void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet* pDefSS) { mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = pDefSS; }
366 :
367 33390 : sfx2::LinkManager* GetLinkManager() { return pLinkManager; }
368 1178 : void SetLinkManager( sfx2::LinkManager* pLinkMgr ) { pLinkManager = pLinkMgr; }
369 :
370 256 : ::comphelper::IEmbeddedHelper* GetPersist() const { return m_pEmbeddedHelper; }
371 : void ClearPersist() { m_pEmbeddedHelper = 0; }
372 959 : void SetPersist( ::comphelper::IEmbeddedHelper *p ) { m_pEmbeddedHelper = p; }
373 :
374 : // Masseinheit fuer die Zeichenkoordinaten.
375 : // Default ist 1 logische Einheit = 1/100mm (Unit=MAP_100TH_MM, Fract=(1,1)).
376 : // Beispiele:
377 : // MAP_POINT, Fraction(72,1) : 1 log Einh = 72 Point = 1 Inch
378 : // MAP_POINT, Fraction(1,20) : 1 log Einh = 1/20 Point = 1 Twip
379 : // MAP_TWIP, Fraction(1,1) : 1 log Einh = 1 Twip
380 : // MAP_100TH_MM, Fraction(1,10) : 1 log Einh = 1/1000mm
381 : // MAP_MM, Fraction(1000,1) : 1 log Einh = 1000mm = 1m
382 : // MAP_CM, Fraction(100,1) : 1 log Einh = 100cm = 1m
383 : // MAP_CM, Fraction(100000,1): 1 log Einh = 100000cm = 1km
384 : // (PS: Lichtjahre sind somit also nicht darstellbar).
385 : // Die Skalierungseinheit wird benoetigt, damit die Engine das Clipboard
386 : // mit den richtigen Groessen beliefern kann.
387 1211 : MapUnit GetScaleUnit() const { return eObjUnit; }
388 : void SetScaleUnit(MapUnit eMap);
389 74 : const Fraction& GetScaleFraction() const { return aObjUnit; }
390 : void SetScaleFraction(const Fraction& rFrac);
391 : // Beides gleichzeitig setzen ist etwas performanter
392 : void SetScaleUnit(MapUnit eMap, const Fraction& rFrac);
393 :
394 : // Maximale Groesse z.B. fuer Autogrowing-Texte
395 68922 : const Size& GetMaxObjSize() const { return aMaxObjSize; }
396 83 : void SetMaxObjSize(const Size& rSiz) { aMaxObjSize=rSiz; }
397 :
398 : // Damit die View! in der Statuszeile vernuenftige Zahlen anzeigen kann:
399 : // Default ist mm.
400 : void SetUIUnit(FieldUnit eUnit);
401 150 : FieldUnit GetUIUnit() const { return eUIUnit; }
402 : // Der Masstab der Zeichnung. Default 1/1.
403 : void SetUIScale(const Fraction& rScale);
404 797 : const Fraction& GetUIScale() const { return aUIScale; }
405 : // Beides gleichzeitig setzen ist etwas performanter
406 : void SetUIUnit(FieldUnit eUnit, const Fraction& rScale);
407 :
408 : const Fraction& GetUIUnitFact() const { return aUIUnitFact; }
409 : const String& GetUIUnitStr() const { return aUIUnitStr; }
410 : int GetUIUnitKomma() const { return nUIUnitKomma; }
411 : bool IsUIOnlyKomma() const { return bUIOnlyKomma; }
412 :
413 : static void TakeUnitStr(FieldUnit eUnit, String& rStr);
414 : void TakeMetricStr(long nVal, OUString& rStr, bool bNoUnitChars = false, sal_Int32 nNumDigits = -1) const;
415 : void TakeWinkStr(long nWink, OUString& rStr, bool bNoDegChar = false) const;
416 : void TakePercentStr(const Fraction& rVal, String& rStr, bool bNoPercentChar = false) const;
417 :
418 : // RecalcPageNums wird idR. nur von der Page gerufen.
419 4091 : bool IsPagNumsDirty() const { return bPagNumsDirty; };
420 416 : bool IsMPgNumsDirty() const { return bMPgNumsDirty; };
421 : void RecalcPageNums(bool bMaster);
422 : // Nach dem Insert gehoert die Page dem SdrModel.
423 : virtual void InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
424 : virtual void DeletePage(sal_uInt16 nPgNum);
425 : // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
426 : virtual SdrPage* RemovePage(sal_uInt16 nPgNum);
427 : virtual void MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
428 : const SdrPage* GetPage(sal_uInt16 nPgNum) const;
429 : SdrPage* GetPage(sal_uInt16 nPgNum);
430 : sal_uInt16 GetPageCount() const;
431 : // #109538#
432 : virtual void PageListChanged();
433 :
434 : // Masterpages
435 : virtual void InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
436 : virtual void DeleteMasterPage(sal_uInt16 nPgNum);
437 : // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
438 : virtual SdrPage* RemoveMasterPage(sal_uInt16 nPgNum);
439 : virtual void MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
440 : const SdrPage* GetMasterPage(sal_uInt16 nPgNum) const;
441 : SdrPage* GetMasterPage(sal_uInt16 nPgNum);
442 : sal_uInt16 GetMasterPageCount() const;
443 : // #109538#
444 : virtual void MasterPageListChanged();
445 :
446 : // Modified-Flag. Wird automatisch gesetzt, wenn an den Pages oder
447 : // Zeichenobjekten was geaendert wird. Zuruecksetzen muss man es
448 : // jedoch selbst (z.B. bei Save() ...).
449 1576 : sal_Bool IsChanged() const { return mbChanged; }
450 : virtual void SetChanged(sal_Bool bFlg = sal_True);
451 :
452 : // PageNotValid bedeutet, dass das Model lediglich Objekte traegt die zwar
453 : // auf einer Page verankert sind, die Page aber nicht gueltig ist. Diese
454 : // Kennzeichnung wird fuers Clipboard/Drag&Drop benoetigt.
455 : bool IsPageNotValid() const { return bPageNotValid; }
456 : void SetPageNotValid(bool bJa = true) { bPageNotValid=bJa; }
457 :
458 : // Schaltet man dieses Flag auf sal_True, so werden Grafikobjekte
459 : // portabel gespeichert. Es findet dann beim Speichern ggf.
460 : // eine implizite Wandlung von Metafiles statt.
461 : // Default=FALSE. Flag ist nicht persistent.
462 : bool IsSavePortable() const { return bSavePortable; }
463 : void SetSavePortable(bool bJa = true) { bSavePortable=bJa; }
464 :
465 : // Schaltet man dieses Flag auf sal_True, so werden
466 : // Pixelobjekte (stark) komprimiert gespeichert.
467 : // Default=FALSE. Flag ist nicht persistent.
468 : bool IsSaveCompressed() const { return bSaveCompressed; }
469 : void SetSaveCompressed(bool bJa = true) { bSaveCompressed=bJa; }
470 :
471 : // Schaltet man dieses Flag auf sal_True, so werden
472 : // Grafikobjekte mit gesetztem Native-Link
473 : // native gespeichert.
474 : // Default=FALSE. Flag ist nicht persistent.
475 : bool IsSaveNative() const { return bSaveNative; }
476 : void SetSaveNative(bool bJa = true) { bSaveNative=bJa; }
477 :
478 : // Schaltet man dieses Flag auf sal_True, so werden die Grafiken
479 : // von Grafikobjekten:
480 : // - beim Laden eines Dokuments nicht sofort mitgeladen,
481 : // sondern erst wenn sie gebraucht (z.B. angezeigt) werden.
482 : // - ggf. wieder aus dem Speicher geworfen, falls Sie gerade
483 : // nicht benoetigt werden.
484 : // Damit das funktioniert, muss die virtuelle Methode
485 : // GetDocumentStream() ueberladen werden.
486 : // Default=FALSE. Flag ist nicht persistent.
487 87 : bool IsSwapGraphics() const { return bSwapGraphics; }
488 : void SetSwapGraphics(bool bJa = true);
489 0 : void SetSwapGraphicsMode(sal_uIntPtr nMode) { nSwapGraphicsMode = nMode; }
490 10 : sal_uIntPtr GetSwapGraphicsMode() const { return nSwapGraphicsMode; }
491 :
492 0 : bool IsSaveOLEPreview() const { return bSaveOLEPreview; }
493 : void SetSaveOLEPreview( bool bSet) { bSaveOLEPreview = bSet; }
494 :
495 : // Damit die Bildschirmausgabe von Bitmaps (insbesondere bei gedrehten)
496 : // etwas schneller wird, werden sie gecachet. Diesen Cache kann man mit
497 : // diesem Flag ein-/ausschalten. Beim naechsten Paint wird an den Objekten
498 : // dann ggf. ein Image gemerkt bzw. freigegeben. Wandert ein Bitmapobjekt
499 : // in's Undo, so wird der Cache fuer dieses Objekt sofort ausgeschaltet
500 : // (Speicher sparen).
501 : // Default=Cache eingeschaltet. Flag ist nicht persistent.
502 : bool IsBitmapCaching() const { return !bNoBitmapCaching; }
503 : void SetBitmapCaching(bool bJa = true) { bNoBitmapCaching=!bJa; }
504 :
505 : // Defaultmaessig (sal_False) kann man Textrahmen ohne Fuellung durch
506 : // Mausklick selektieren. Nach Aktivierung dieses Flags trifft man sie
507 : // nur noch in dem Bereich, wo sich auch tatsaechlich Text befindet.
508 22950 : bool IsPickThroughTransparentTextFrames() const { return bTransparentTextFrames; }
509 421 : void SetPickThroughTransparentTextFrames(bool bOn) { bTransparentTextFrames=bOn; }
510 :
511 : // Darf denn das Model ueberhaupt veraendert werden?
512 : // Wird nur von den Possibility-Methoden der View ausgewerdet.
513 : // Direkte Manipulationen am Model, ... berueksichtigen dieses Flag nicht.
514 : // Sollte ueberladen werden und entsprechend des ReadOnly-Status des Files
515 : // sal_True oder sal_False liefern (Methode wird oeffters gerufen, also ein Flag
516 : // verwenden!).
517 : virtual bool IsReadOnly() const;
518 : virtual void SetReadOnly(bool bYes);
519 :
520 : // Vermischen zweier SdrModel. Zu beachten sei, dass rSourceModel nicht
521 : // const ist. Die Pages werden beim einfuegen nicht kopiert, sondern gemoved.
522 : // rSourceModel ist anschliessend u.U. weitgehend leer.
523 : // nFirstPageNum,nLastPageNum: Die aus rSourceModel zu uebernehmenden Seiten
524 : // nDestPos..................: Einfuegeposition
525 : // bMergeMasterPages.........: sal_True =benoetigte MasterPages werden aus
526 : // rSourceModel ebenfalls uebernommen
527 : // sal_False=Die MasterPageDescriptoren der Seiten
528 : // aus rSourceModel werden auf die
529 : // vorhandenen MasterPages gemappt.
530 : // bUndo.....................: Fuer das Merging wird eine UndoAction generiert.
531 : // Undo ist nur fuer das ZielModel, nicht fuer
532 : // rSourceModel.
533 : // bTreadSourceAsConst.......: sal_True=Das SourceModel wird nicht veraendert,.
534 : // d.h die Seiten werden kopiert.
535 : virtual void Merge(SdrModel& rSourceModel,
536 : sal_uInt16 nFirstPageNum=0, sal_uInt16 nLastPageNum=0xFFFF,
537 : sal_uInt16 nDestPos=0xFFFF,
538 : bool bMergeMasterPages = false, bool bAllMasterPages = false,
539 : bool bUndo = true, bool bTreadSourceAsConst = false);
540 :
541 : // Ist wie Merge(SourceModel=DestModel,nFirst,nLast,nDest,sal_False,sal_False,bUndo,!bMoveNoCopy);
542 : void CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
543 : sal_uInt16 nDestPos,
544 : bool bUndo = true, bool bMoveNoCopy = false);
545 :
546 : // Mit BegUndo() / EndUndo() ist es moeglich beliebig viele UndoActions
547 : // beliebig tief zu klammern. Als Kommentar der
548 : // UndoAction wird der des ersten BegUndo(String) aller Klammerungen
549 : // verwendet. Der NotifyUndoActionHdl wird in diesem Fall erst beim letzten
550 : // EndUndo() gerufen. Bei einer leeren Klammerung wird keine UndoAction
551 : // generiert.
552 : // Alle direkten Aktionen am SdrModel erzeugen keine UndoActions, die
553 : // Aktionen an der SdrView dagegen generieren solche.
554 : void BegUndo(); // Undo-Klammerung auf
555 : void BegUndo(const String& rComment); // Undo-Klammerung auf
556 : void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE); // Undo-Klammerung auf
557 : void EndUndo(); // Undo-Klammerung zu
558 : void AddUndo(SdrUndoAction* pUndo);
559 35 : sal_uInt16 GetUndoBracketLevel() const { return nUndoLevel; }
560 : const SdrUndoGroup* GetAktUndoGroup() const { return pAktUndoGroup; }
561 : // nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
562 : void SetUndoComment(const String& rComment);
563 : void SetUndoComment(const String& rComment, const String& rObjDescr);
564 :
565 : // Das Undo-Management findet nur statt, wenn kein NotifyUndoAction-Handler
566 : // gesetzt ist.
567 : // Default ist 16. Minimaler MaxUndoActionCount ist 1!
568 : void SetMaxUndoActionCount(sal_uIntPtr nAnz);
569 : sal_uIntPtr GetMaxUndoActionCount() const { return nMaxUndoCount; }
570 : void ClearUndoBuffer();
571 :
572 : bool HasUndoActions() const;
573 : bool HasRedoActions() const;
574 : bool Undo();
575 : bool Redo();
576 : bool Repeat(SfxRepeatTarget&);
577 :
578 : // Hier kann die Applikation einen Handler setzen, der die auflaufenden
579 : // UndoActions einsammelt. Der Handler hat folgendes Aussehen:
580 : // void NotifyUndoActionHdl(SfxUndoAction* pUndoAction);
581 : // Beim Aufruf des Handlers findet eine Eigentumsuebereignung statt; die
582 : // UndoAction gehoert somit dem Handler, nicht mehr dem SdrModel.
583 2001 : void SetNotifyUndoActionHdl(const Link& rLink) { aUndoLink=rLink; }
584 0 : const Link& GetNotifyUndoActionHdl() const { return aUndoLink; }
585 :
586 : /** application can set it's own undo manager, BegUndo, EndUndo and AddUndoAction
587 : calls are routet to this interface if given */
588 : void SetSdrUndoManager( SfxUndoManager* pUndoManager );
589 : SfxUndoManager* GetSdrUndoManager() const;
590 :
591 : /** applications can set their own undo factory to overide creation of
592 : undo actions. The SdrModel will become owner of the given SdrUndoFactory
593 : and delete it upon its destruction. */
594 : void SetSdrUndoFactory( SdrUndoFactory* pUndoFactory );
595 :
596 : /** returns the models undo factory. This must be used to create
597 : undo actions for this model. */
598 : SdrUndoFactory& GetSdrUndoFactory() const;
599 :
600 : // Hier kann man einen Handler setzen der beim Streamen mehrfach gerufen
601 : // wird und ungefaehre Auskunft ueber den Fortschreitungszustand der
602 : // Funktion gibt. Der Handler muss folgendes Aussehen haben:
603 : // void class::IOProgressHdl(const USHORT& nPercent);
604 : // Der erste Aufruf des Handlers erfolgt grundsaetzlich mit 0, der letzte
605 : // mit 100. Dazwischen erfolgen maximal 99 Aufrufe mit Werten 1...99.
606 : // Man kann also durchaus bei 0 den Progressbar Initiallisieren und bei
607 : // 100 wieder schliessen. Zu beachten sei, dass der Handler auch gerufen
608 : // wird, wenn die App Draw-Daten im officeweiten Draw-Exchange-Format
609 : // bereitstellt, denn dies geschieht durch streamen in einen MemoryStream.
610 : void SetIOProgressHdl(const Link& rLink) { aIOProgressLink=rLink; }
611 : const Link& GetIOProgressHdl() const { return aIOProgressLink; }
612 :
613 : // Accessor methods for Palettes, Lists and Tabeles
614 : // FIXME: this badly needs re-factoring ...
615 10922 : XPropertyListRef GetPropertyList( XPropertyListType t ) const { return maProperties[ t ]; }
616 1113 : void SetPropertyList( XPropertyListRef p ) { maProperties[ p->Type() ] = p; }
617 :
618 : // friendlier helpers
619 1492 : XDashListRef GetDashList() const { return GetPropertyList( XDASH_LIST )->AsDashList(); }
620 1358 : XHatchListRef GetHatchList() const { return GetPropertyList( XHATCH_LIST )->AsHatchList(); }
621 435 : XColorListRef GetColorList() const { return GetPropertyList( XCOLOR_LIST )->AsColorList(); }
622 1358 : XBitmapListRef GetBitmapList() const { return GetPropertyList( XBITMAP_LIST )->AsBitmapList(); }
623 1358 : XLineEndListRef GetLineEndList() const { return GetPropertyList( XLINE_END_LIST )->AsLineEndList(); }
624 1358 : XGradientListRef GetGradientList() const { return GetPropertyList( XGRADIENT_LIST )->AsGradientList(); }
625 :
626 : // Der StyleSheetPool wird der DrawingEngine nur bekanntgemacht.
627 : // Zu loeschen hat ihn schliesslich der, der ihn auch konstruiert hat.
628 64289 : SfxStyleSheetBasePool* GetStyleSheetPool() const { return mxStyleSheetPool.get(); }
629 91 : void SetStyleSheetPool(SfxStyleSheetBasePool* pPool) { mxStyleSheetPool=pPool; }
630 :
631 : void SetStarDrawPreviewMode(sal_Bool bPreview);
632 7 : sal_Bool IsStarDrawPreviewMode() { return bStarDrawPreviewMode; }
633 :
634 0 : bool GetDisableTextEditUsesCommonUndoManager() const { return mbDisableTextEditUsesCommonUndoManager; }
635 348 : void SetDisableTextEditUsesCommonUndoManager(bool bNew) { mbDisableTextEditUsesCommonUndoManager = bNew; }
636 :
637 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoModel();
638 : void setUnoModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xModel );
639 :
640 : // these functions are used by the api to disable repaints during a
641 : // set of api calls.
642 456249 : bool isLocked() const { return mbModelLocked; }
643 : void setLock( bool bLock );
644 :
645 : void SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> xForbiddenChars );
646 : rtl::Reference<SvxForbiddenCharactersTable> GetForbiddenCharsTable() const;
647 :
648 : void SetCharCompressType( sal_uInt16 nType );
649 13168 : sal_uInt16 GetCharCompressType() const { return mnCharCompressType; }
650 :
651 : void SetKernAsianPunctuation( sal_Bool bEnabled );
652 23966 : sal_Bool IsKernAsianPunctuation() const { return (sal_Bool)mbKernAsianPunctuation; }
653 :
654 : void SetAddExtLeading( sal_Bool bEnabled );
655 23963 : sal_Bool IsAddExtLeading() const { return (sal_Bool)mbAddExtLeading; }
656 :
657 : void ReformatAllTextObjects();
658 :
659 : SdrOutliner* createOutliner( sal_uInt16 nOutlinerMode );
660 : void disposeOutliner( SdrOutliner* pOutliner );
661 :
662 134223 : sal_Bool IsWriter() const { return !bMyPool; }
663 :
664 : /** returns the numbering type that is used to format page fields in drawing shapes */
665 : virtual SvxNumType GetPageNumType() const;
666 :
667 : /** copies the items from the source set to the destination set. Both sets must have
668 : same ranges but can have different pools. If pNewModel is optional. If it is null,
669 : this model is used. */
670 :
671 : void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel );
672 :
673 : bool IsInDestruction() const;
674 :
675 : static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId();
676 :
677 : /** enables (true) or disables (false) recording of undo actions
678 : If undo actions are added while undo is disabled, they are deleted.
679 : Disabling undo does not clear the current undo buffer! */
680 : void EnableUndo( bool bEnable );
681 :
682 : /** returns true if undo is currently enabled
683 : This returns false if undo was disabled using EnableUndo( false ) and
684 : also during the runtime of the Undo() and Redo() methods. */
685 : bool IsUndoEnabled() const;
686 : };
687 :
688 : typedef tools::WeakReference< SdrModel > SdrModelWeakRef;
689 :
690 : ////////////////////////////////////////////////////////////////////////////////////////////////////
691 :
692 : #endif //_SVDMODEL_HXX
693 :
694 : /* /////////////////////////////////////////////////////////////////////////////////////////////////
695 : +-----------+
696 : | SdrModel |
697 : +--+------+-+
698 : | +-----------+
699 : +----+-----+ |
700 : | ... | |
701 : +----+---+ +----+---+ +-----+--------+
702 : |SdrPage | |SdrPage | |SdrLayerAdmin |
703 : +---+----+ +-+--+--++ +---+-------+--+
704 : | | | | | +-------------------+
705 : +----+----+ +-----+-----+ +-------+-------+
706 : | ... | | ... | | ... |
707 : +---+---+ +---+---+ +----+----+ +----+----+ +-----+------+ +------+-----+
708 : |SdrObj | |SdrObj | |SdrLayer | |SdrLayer | |SdrLayerSet | |SdrLayerSet |
709 : +-------+ +-------+ +---------+ +---------+ +------------+ +------------+
710 : This class: SdrModel is the head of the data modells for the StarView Drawing Engine.
711 :
712 : ///////////////////////////////////////////////////////////////////////////////////////////////// */
713 :
714 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|