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