fdo#74697 Add Bluez 5 support for impress remote.
[LibreOffice.git] / include / svx / svdmodel.hxx
blobd57c992f3ace017ca3f14ad379618ba3ec69df6b
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 _SVDMODEL_HXX
21 #define _SVDMODEL_HXX
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>
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> // fuer enum RepeatFuncts
43 #include "svx/svxdllapi.h"
45 #include <rtl/ref.hxx>
46 #include <deque>
48 #if defined(UNX) || defined(WNT)
49 #define DEGREE_CHAR ((sal_Unicode)176) /* 0xB0 = Ansi */
50 #endif
52 #ifndef DEGREE_CHAR
53 #error unbekannte Plattrorm
54 #endif
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
86 class IEmbeddedHelper;
87 class LifecycleProxy;
89 namespace sfx2
91 class LinkManager;
93 ////////////////////////////////////////////////////////////////////////////////////////////////////
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)
101 ////////////////////////////////////////////////////////////////////////////////////////////////////
103 enum SdrHintKind
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
122 class SVX_DLLPUBLIC SdrHint: public SfxHint
124 public:
125 Rectangle maRectangle;
126 const SdrPage* mpPage;
127 const SdrObject* mpObj;
128 const SdrObjList* mpObjList;
129 SdrHintKind meHint;
131 public:
132 TYPEINFO();
134 explicit SdrHint(SdrHintKind eNewHint);
135 explicit SdrHint(const SdrObject& rNewObj);
137 void SetPage(const SdrPage* pNewPage);
138 void SetObject(const SdrObject* pNewObj);
139 void SetKind(SdrHintKind eNewKind);
141 const SdrPage* GetPage() const;
142 const SdrObject* GetObject() const;
143 SdrHintKind GetKind() const;
146 ////////////////////////////////////////////////////////////////////////////////////////////////////
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)
152 struct SdrModelImpl;
154 class SVX_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase< SdrModel >
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
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 sal_uInt16 nStreamCompressMode; // Komprimiert schreiben?
213 sal_uInt16 nStreamNumberFormat;
214 sal_uInt16 nDefaultTabulator;
215 sal_uInt32 nMaxUndoCount;
218 //////////////////////////////////////////////////////////////////////////////
219 // sdr::Comment interface
220 private:
221 // the next unique comment ID, used for counting added comments. Initialized
222 // to 0. UI shows one more due to the fact that 0 is a no-no for users.
223 sal_uInt32 mnUniqueCommentID;
225 public:
226 // create a new, unique comment ID
227 sal_uInt32 GetNextUniqueCommentID();
229 // get the author name
230 OUString GetDocumentAuthorName() const;
232 // for export
233 sal_uInt32 GetUniqueCommentID() const { return mnUniqueCommentID; }
235 // for import
236 void SetUniqueCommentID(sal_uInt32 nNewID) { if(nNewID != mnUniqueCommentID) { mnUniqueCommentID = nNewID; } }
238 sal_uInt16 nStarDrawPreviewMasterPageNum;
239 SvxForbiddenCharactersTable* mpForbiddenCharactersTable;
240 sal_uIntPtr nSwapGraphicsMode;
242 SdrOutlinerCache* mpOutlinerCache;
243 SdrModelImpl* mpImpl;
244 sal_uInt16 mnCharCompressType;
245 sal_uInt16 mnHandoutPageCount;
246 sal_uInt16 nReserveUInt6;
247 sal_uInt16 nReserveUInt7;
248 bool mbModelLocked;
249 bool mbKernAsianPunctuation;
250 bool mbAddExtLeading;
251 bool mbInDestruction;
253 // Color, Dash, Line-End, Hatch, Gradient, Bitmap property lists ...
254 XPropertyListRef maProperties[XPROPERTY_LIST_COUNT];
256 // New src638: NumberFormatter for drawing layer and
257 // method for getting it. It is constructed on demand
258 // and destroyed when destroying the SdrModel.
259 SvNumberFormatter* mpNumberFormatter;
260 public:
261 sal_uInt16 getHandoutPageCount() const { return mnHandoutPageCount; }
262 void setHandoutPageCount( sal_uInt16 nHandoutPageCount ) { mnHandoutPageCount = nHandoutPageCount; }
264 protected:
266 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoModel();
268 private:
269 // Nicht implementiert:
270 SVX_DLLPRIVATE SdrModel(const SdrModel& rSrcModel);
271 SVX_DLLPRIVATE void operator=(const SdrModel& rSrcModel);
272 SVX_DLLPRIVATE bool operator==(const SdrModel& rCmpModel) const;
273 SVX_DLLPRIVATE void ImpPostUndoAction(SdrUndoAction* pUndo);
274 SVX_DLLPRIVATE void ImpSetUIUnit();
275 SVX_DLLPRIVATE void ImpSetOutlinerDefaults( SdrOutliner* pOutliner, sal_Bool bInit = sal_False );
276 SVX_DLLPRIVATE void ImpReformatAllTextObjects();
277 SVX_DLLPRIVATE void ImpReformatAllEdgeObjects(); // #103122#
278 SVX_DLLPRIVATE void ImpCreateTables();
279 SVX_DLLPRIVATE void ImpCtor(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable,
280 bool bLoadRefCounts = true);
283 // this is a weak reference to a possible living api wrapper for this model
284 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoModel;
286 public:
287 bool IsPasteResize() const { return bPasteResize; }
288 void SetPasteResize(bool bOn) { bPasteResize=bOn; }
289 TYPEINFO();
290 // Steckt man hier seinen eigenen Pool rein, so wird die Klasse auch
291 // Aktionen an ihm vornehmen (Put(),Remove()). Bei Zerstoerung von
292 // SdrModel wird dieser Pool ver delete geloescht!
293 // Gibt man den Konstruktor stattdessen eine NULL mit, so macht sich
294 // die Klasse einen eigenen Pool (SdrItemPool), den sie dann auch im
295 // Destruktor zerstoert.
296 // Bei Verwendung eines eigenen Pools ist darauf zu achten, dass dieser
297 // von SdrItemPool abgeleitet ist, falls man von SdrAttrObj abgeleitete
298 // Zeichenobjekte verwenden moechte. Setzt man degegen nur vom abstrakten
299 // Basisobjekt SdrObject abgeleitete Objekte ein, so ist man frei in der
300 // Wahl des Pools.
301 explicit SdrModel(SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
302 explicit SdrModel(const String& rPath, SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
303 SdrModel(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
304 SdrModel(const String& rPath, SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
305 virtual ~SdrModel();
306 void ClearModel(sal_Bool bCalledFromDestructor);
308 // Hier kann man erfragen, ob das Model gerade eingrstreamt wird
309 bool IsLoading() const { return sal_False /*BFS01 bLoading */; }
310 // Muss z.B. ueberladen werden, um das Swappen/LoadOnDemand von Grafiken
311 // zu ermoeglichen. Wird rbDeleteAfterUse auf sal_True gesetzt, so wird
312 // die SvStream-Instanz vom Aufrufer nach Gebrauch destruiert.
313 // Wenn diese Methode NULL liefert, wird zum Swappen eine temporaere
314 // Datei angelegt.
315 // Geliefert werden muss der Stream, aus dem das Model geladen wurde
316 // bzw. in den es zuletzt gespeichert wurde.
317 virtual ::com::sun::star::uno::Reference<
318 ::com::sun::star::embed::XStorage> GetDocumentStorage() const;
319 ::com::sun::star::uno::Reference<
320 ::com::sun::star::io::XInputStream >
321 GetDocumentStream(OUString const& rURL,
322 ::comphelper::LifecycleProxy & rProxy) const;
323 // Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln.
324 void BurnInStyleSheetAttributes();
325 // Wer sich von SdrPage ableitet muss sich auch von SdrModel ableiten
326 // und diese beiden VM AllocPage() und AllocModel() ueberladen...
327 virtual SdrPage* AllocPage(bool bMasterPage);
328 virtual SdrModel* AllocModel() const;
330 // Aenderungen an den Layern setzen das Modified-Flag und broadcasten am Model!
331 const SdrLayerAdmin& GetLayerAdmin() const { return *pLayerAdmin; }
332 SdrLayerAdmin& GetLayerAdmin() { return *pLayerAdmin; }
334 const SfxItemPool& GetItemPool() const { return *pItemPool; }
335 SfxItemPool& GetItemPool() { return *pItemPool; }
337 SdrOutliner& GetDrawOutliner(const SdrTextObj* pObj=NULL) const;
339 SdrOutliner& GetHitTestOutliner() const { return *pHitTestOutliner; }
340 const SdrTextObj* GetFormattingTextObj() const;
341 // Die TextDefaults (Font,Hoehe,Farbe) in ein Set putten
342 void SetTextDefaults() const;
343 static void SetTextDefaults( SfxItemPool* pItemPool, sal_uIntPtr nDefTextHgt );
345 // ReferenzDevice fuer die EditEngine
346 void SetRefDevice(OutputDevice* pDev);
347 OutputDevice* GetRefDevice() const { return pRefOutDev; }
348 // Wenn ein neuer MapMode am RefDevice gesetzt wird o.ae.
349 void RefDeviceChanged(); // noch nicht implementiert
350 // Default-Schrifthoehe in logischen Einheiten
351 void SetDefaultFontHeight(sal_uIntPtr nVal);
352 sal_uIntPtr GetDefaultFontHeight() const { return nDefTextHgt; }
353 // Default-Tabulatorweite fuer die EditEngine
354 void SetDefaultTabulator(sal_uInt16 nVal);
355 sal_uInt16 GetDefaultTabulator() const { return nDefaultTabulator; }
357 // Der DefaultStyleSheet wird jedem Zeichenobjekt verbraten das in diesem
358 // Model eingefuegt wird und kein StyleSheet gesetzt hat.
359 SfxStyleSheet* GetDefaultStyleSheet() const { return pDefaultStyleSheet; }
360 void SetDefaultStyleSheet(SfxStyleSheet* pDefSS) { pDefaultStyleSheet = pDefSS; }
362 // #i119287# default StyleSheet for SdrGrafObj and SdrOle2Obj
363 SfxStyleSheet* GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const { return mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; }
364 void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet* pDefSS) { mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = pDefSS; }
366 sfx2::LinkManager* GetLinkManager() { return pLinkManager; }
367 void SetLinkManager( sfx2::LinkManager* pLinkMgr ) { pLinkManager = pLinkMgr; }
369 ::comphelper::IEmbeddedHelper* GetPersist() const { return m_pEmbeddedHelper; }
370 void ClearPersist() { m_pEmbeddedHelper = 0; }
371 void SetPersist( ::comphelper::IEmbeddedHelper *p ) { m_pEmbeddedHelper = p; }
373 // Masseinheit fuer die Zeichenkoordinaten.
374 // Default ist 1 logische Einheit = 1/100mm (Unit=MAP_100TH_MM, Fract=(1,1)).
375 // Beispiele:
376 // MAP_POINT, Fraction(72,1) : 1 log Einh = 72 Point = 1 Inch
377 // MAP_POINT, Fraction(1,20) : 1 log Einh = 1/20 Point = 1 Twip
378 // MAP_TWIP, Fraction(1,1) : 1 log Einh = 1 Twip
379 // MAP_100TH_MM, Fraction(1,10) : 1 log Einh = 1/1000mm
380 // MAP_MM, Fraction(1000,1) : 1 log Einh = 1000mm = 1m
381 // MAP_CM, Fraction(100,1) : 1 log Einh = 100cm = 1m
382 // MAP_CM, Fraction(100000,1): 1 log Einh = 100000cm = 1km
383 // (PS: Lichtjahre sind somit also nicht darstellbar).
384 // Die Skalierungseinheit wird benoetigt, damit die Engine das Clipboard
385 // mit den richtigen Groessen beliefern kann.
386 MapUnit GetScaleUnit() const { return eObjUnit; }
387 void SetScaleUnit(MapUnit eMap);
388 const Fraction& GetScaleFraction() const { return aObjUnit; }
389 void SetScaleFraction(const Fraction& rFrac);
390 // Beides gleichzeitig setzen ist etwas performanter
391 void SetScaleUnit(MapUnit eMap, const Fraction& rFrac);
393 // Maximale Groesse z.B. fuer Autogrowing-Texte
394 const Size& GetMaxObjSize() const { return aMaxObjSize; }
395 void SetMaxObjSize(const Size& rSiz) { aMaxObjSize=rSiz; }
397 // Damit die View! in der Statuszeile vernuenftige Zahlen anzeigen kann:
398 // Default ist mm.
399 void SetUIUnit(FieldUnit eUnit);
400 FieldUnit GetUIUnit() const { return eUIUnit; }
401 // Der Masstab der Zeichnung. Default 1/1.
402 void SetUIScale(const Fraction& rScale);
403 const Fraction& GetUIScale() const { return aUIScale; }
404 // Beides gleichzeitig setzen ist etwas performanter
405 void SetUIUnit(FieldUnit eUnit, const Fraction& rScale);
407 const Fraction& GetUIUnitFact() const { return aUIUnitFact; }
408 const String& GetUIUnitStr() const { return aUIUnitStr; }
409 int GetUIUnitKomma() const { return nUIUnitKomma; }
410 bool IsUIOnlyKomma() const { return bUIOnlyKomma; }
412 static void TakeUnitStr(FieldUnit eUnit, String& rStr);
413 void TakeMetricStr(long nVal, OUString& rStr, bool bNoUnitChars = false, sal_Int32 nNumDigits = -1) const;
414 void TakeWinkStr(long nWink, OUString& rStr, bool bNoDegChar = false) const;
415 void TakePercentStr(const Fraction& rVal, String& rStr, bool bNoPercentChar = false) const;
417 // RecalcPageNums wird idR. nur von der Page gerufen.
418 bool IsPagNumsDirty() const { return bPagNumsDirty; };
419 bool IsMPgNumsDirty() const { return bMPgNumsDirty; };
420 void RecalcPageNums(bool bMaster);
421 // Nach dem Insert gehoert die Page dem SdrModel.
422 virtual void InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
423 virtual void DeletePage(sal_uInt16 nPgNum);
424 // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
425 virtual SdrPage* RemovePage(sal_uInt16 nPgNum);
426 virtual void MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
427 const SdrPage* GetPage(sal_uInt16 nPgNum) const;
428 SdrPage* GetPage(sal_uInt16 nPgNum);
429 sal_uInt16 GetPageCount() const;
430 // #109538#
431 virtual void PageListChanged();
433 // Masterpages
434 virtual void InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
435 virtual void DeleteMasterPage(sal_uInt16 nPgNum);
436 // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
437 virtual SdrPage* RemoveMasterPage(sal_uInt16 nPgNum);
438 virtual void MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
439 const SdrPage* GetMasterPage(sal_uInt16 nPgNum) const;
440 SdrPage* GetMasterPage(sal_uInt16 nPgNum);
441 sal_uInt16 GetMasterPageCount() const;
442 // #109538#
443 virtual void MasterPageListChanged();
445 // Modified-Flag. Wird automatisch gesetzt, wenn an den Pages oder
446 // Zeichenobjekten was geaendert wird. Zuruecksetzen muss man es
447 // jedoch selbst (z.B. bei Save() ...).
448 sal_Bool IsChanged() const { return mbChanged; }
449 virtual void SetChanged(sal_Bool bFlg = sal_True);
451 // PageNotValid bedeutet, dass das Model lediglich Objekte traegt die zwar
452 // auf einer Page verankert sind, die Page aber nicht gueltig ist. Diese
453 // Kennzeichnung wird fuers Clipboard/Drag&Drop benoetigt.
454 bool IsPageNotValid() const { return bPageNotValid; }
455 void SetPageNotValid(bool bJa = true) { bPageNotValid=bJa; }
457 // Schaltet man dieses Flag auf sal_True, so werden Grafikobjekte
458 // portabel gespeichert. Es findet dann beim Speichern ggf.
459 // eine implizite Wandlung von Metafiles statt.
460 // Default=FALSE. Flag ist nicht persistent.
461 bool IsSavePortable() const { return bSavePortable; }
462 void SetSavePortable(bool bJa = true) { bSavePortable=bJa; }
464 // Schaltet man dieses Flag auf sal_True, so werden
465 // Pixelobjekte (stark) komprimiert gespeichert.
466 // Default=FALSE. Flag ist nicht persistent.
467 bool IsSaveCompressed() const { return bSaveCompressed; }
468 void SetSaveCompressed(bool bJa = true) { bSaveCompressed=bJa; }
470 // Schaltet man dieses Flag auf sal_True, so werden
471 // Grafikobjekte mit gesetztem Native-Link
472 // native gespeichert.
473 // Default=FALSE. Flag ist nicht persistent.
474 bool IsSaveNative() const { return bSaveNative; }
475 void SetSaveNative(bool bJa = true) { bSaveNative=bJa; }
477 // Schaltet man dieses Flag auf sal_True, so werden die Grafiken
478 // von Grafikobjekten:
479 // - beim Laden eines Dokuments nicht sofort mitgeladen,
480 // sondern erst wenn sie gebraucht (z.B. angezeigt) werden.
481 // - ggf. wieder aus dem Speicher geworfen, falls Sie gerade
482 // nicht benoetigt werden.
483 // Damit das funktioniert, muss die virtuelle Methode
484 // GetDocumentStream() ueberladen werden.
485 // Default=FALSE. Flag ist nicht persistent.
486 bool IsSwapGraphics() const { return bSwapGraphics; }
487 void SetSwapGraphics(bool bJa = true);
488 void SetSwapGraphicsMode(sal_uIntPtr nMode) { nSwapGraphicsMode = nMode; }
489 sal_uIntPtr GetSwapGraphicsMode() const { return nSwapGraphicsMode; }
491 bool IsSaveOLEPreview() const { return bSaveOLEPreview; }
492 void SetSaveOLEPreview( bool bSet) { bSaveOLEPreview = bSet; }
494 // Damit die Bildschirmausgabe von Bitmaps (insbesondere bei gedrehten)
495 // etwas schneller wird, werden sie gecachet. Diesen Cache kann man mit
496 // diesem Flag ein-/ausschalten. Beim naechsten Paint wird an den Objekten
497 // dann ggf. ein Image gemerkt bzw. freigegeben. Wandert ein Bitmapobjekt
498 // in's Undo, so wird der Cache fuer dieses Objekt sofort ausgeschaltet
499 // (Speicher sparen).
500 // Default=Cache eingeschaltet. Flag ist nicht persistent.
501 bool IsBitmapCaching() const { return !bNoBitmapCaching; }
502 void SetBitmapCaching(bool bJa = true) { bNoBitmapCaching=!bJa; }
504 // Defaultmaessig (sal_False) kann man Textrahmen ohne Fuellung durch
505 // Mausklick selektieren. Nach Aktivierung dieses Flags trifft man sie
506 // nur noch in dem Bereich, wo sich auch tatsaechlich Text befindet.
507 bool IsPickThroughTransparentTextFrames() const { return bTransparentTextFrames; }
508 void SetPickThroughTransparentTextFrames(bool bOn) { bTransparentTextFrames=bOn; }
510 // Darf denn das Model ueberhaupt veraendert werden?
511 // Wird nur von den Possibility-Methoden der View ausgewerdet.
512 // Direkte Manipulationen am Model, ... berueksichtigen dieses Flag nicht.
513 // Sollte ueberladen werden und entsprechend des ReadOnly-Status des Files
514 // sal_True oder sal_False liefern (Methode wird oeffters gerufen, also ein Flag
515 // verwenden!).
516 virtual bool IsReadOnly() const;
517 virtual void SetReadOnly(bool bYes);
519 // Vermischen zweier SdrModel. Zu beachten sei, dass rSourceModel nicht
520 // const ist. Die Pages werden beim einfuegen nicht kopiert, sondern gemoved.
521 // rSourceModel ist anschliessend u.U. weitgehend leer.
522 // nFirstPageNum,nLastPageNum: Die aus rSourceModel zu uebernehmenden Seiten
523 // nDestPos..................: Einfuegeposition
524 // bMergeMasterPages.........: sal_True =benoetigte MasterPages werden aus
525 // rSourceModel ebenfalls uebernommen
526 // sal_False=Die MasterPageDescriptoren der Seiten
527 // aus rSourceModel werden auf die
528 // vorhandenen MasterPages gemappt.
529 // bUndo.....................: Fuer das Merging wird eine UndoAction generiert.
530 // Undo ist nur fuer das ZielModel, nicht fuer
531 // rSourceModel.
532 // bTreadSourceAsConst.......: sal_True=Das SourceModel wird nicht veraendert,.
533 // d.h die Seiten werden kopiert.
534 virtual void Merge(SdrModel& rSourceModel,
535 sal_uInt16 nFirstPageNum=0, sal_uInt16 nLastPageNum=0xFFFF,
536 sal_uInt16 nDestPos=0xFFFF,
537 bool bMergeMasterPages = false, bool bAllMasterPages = false,
538 bool bUndo = true, bool bTreadSourceAsConst = false);
540 // Ist wie Merge(SourceModel=DestModel,nFirst,nLast,nDest,sal_False,sal_False,bUndo,!bMoveNoCopy);
541 void CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
542 sal_uInt16 nDestPos,
543 bool bUndo = true, bool bMoveNoCopy = false);
545 // Mit BegUndo() / EndUndo() ist es moeglich beliebig viele UndoActions
546 // beliebig tief zu klammern. Als Kommentar der
547 // UndoAction wird der des ersten BegUndo(String) aller Klammerungen
548 // verwendet. Der NotifyUndoActionHdl wird in diesem Fall erst beim letzten
549 // EndUndo() gerufen. Bei einer leeren Klammerung wird keine UndoAction
550 // generiert.
551 // Alle direkten Aktionen am SdrModel erzeugen keine UndoActions, die
552 // Aktionen an der SdrView dagegen generieren solche.
553 void BegUndo(); // Undo-Klammerung auf
554 void BegUndo(const String& rComment); // Undo-Klammerung auf
555 void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE); // Undo-Klammerung auf
556 void EndUndo(); // Undo-Klammerung zu
557 void AddUndo(SdrUndoAction* pUndo);
558 sal_uInt16 GetUndoBracketLevel() const { return nUndoLevel; }
559 const SdrUndoGroup* GetAktUndoGroup() const { return pAktUndoGroup; }
560 // nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
561 void SetUndoComment(const String& rComment);
562 void SetUndoComment(const String& rComment, const String& rObjDescr);
564 // Das Undo-Management findet nur statt, wenn kein NotifyUndoAction-Handler
565 // gesetzt ist.
566 // Default ist 16. Minimaler MaxUndoActionCount ist 1!
567 void SetMaxUndoActionCount(sal_uIntPtr nAnz);
568 sal_uIntPtr GetMaxUndoActionCount() const { return nMaxUndoCount; }
569 void ClearUndoBuffer();
571 bool HasUndoActions() const;
572 bool HasRedoActions() const;
573 bool Undo();
574 bool Redo();
575 bool Repeat(SfxRepeatTarget&);
577 // Hier kann die Applikation einen Handler setzen, der die auflaufenden
578 // UndoActions einsammelt. Der Handler hat folgendes Aussehen:
579 // void NotifyUndoActionHdl(SfxUndoAction* pUndoAction);
580 // Beim Aufruf des Handlers findet eine Eigentumsuebereignung statt; die
581 // UndoAction gehoert somit dem Handler, nicht mehr dem SdrModel.
582 void SetNotifyUndoActionHdl(const Link& rLink) { aUndoLink=rLink; }
583 const Link& GetNotifyUndoActionHdl() const { return aUndoLink; }
585 /** application can set it's own undo manager, BegUndo, EndUndo and AddUndoAction
586 calls are routet to this interface if given */
587 void SetSdrUndoManager( SfxUndoManager* pUndoManager );
588 SfxUndoManager* GetSdrUndoManager() const;
590 /** applications can set their own undo factory to overide creation of
591 undo actions. The SdrModel will become owner of the given SdrUndoFactory
592 and delete it upon its destruction. */
593 void SetSdrUndoFactory( SdrUndoFactory* pUndoFactory );
595 /** returns the models undo factory. This must be used to create
596 undo actions for this model. */
597 SdrUndoFactory& GetSdrUndoFactory() const;
599 // Hier kann man einen Handler setzen der beim Streamen mehrfach gerufen
600 // wird und ungefaehre Auskunft ueber den Fortschreitungszustand der
601 // Funktion gibt. Der Handler muss folgendes Aussehen haben:
602 // void class::IOProgressHdl(const USHORT& nPercent);
603 // Der erste Aufruf des Handlers erfolgt grundsaetzlich mit 0, der letzte
604 // mit 100. Dazwischen erfolgen maximal 99 Aufrufe mit Werten 1...99.
605 // Man kann also durchaus bei 0 den Progressbar Initiallisieren und bei
606 // 100 wieder schliessen. Zu beachten sei, dass der Handler auch gerufen
607 // wird, wenn die App Draw-Daten im officeweiten Draw-Exchange-Format
608 // bereitstellt, denn dies geschieht durch streamen in einen MemoryStream.
609 void SetIOProgressHdl(const Link& rLink) { aIOProgressLink=rLink; }
610 const Link& GetIOProgressHdl() const { return aIOProgressLink; }
612 // Accessor methods for Palettes, Lists and Tabeles
613 // FIXME: this badly needs re-factoring ...
614 XPropertyListRef GetPropertyList( XPropertyListType t ) const { return maProperties[ t ]; }
615 void SetPropertyList( XPropertyListRef p ) { maProperties[ p->Type() ] = p; }
617 // friendlier helpers
618 XDashListRef GetDashList() const { return GetPropertyList( XDASH_LIST )->AsDashList(); }
619 XHatchListRef GetHatchList() const { return GetPropertyList( XHATCH_LIST )->AsHatchList(); }
620 XColorListRef GetColorList() const { return GetPropertyList( XCOLOR_LIST )->AsColorList(); }
621 XBitmapListRef GetBitmapList() const { return GetPropertyList( XBITMAP_LIST )->AsBitmapList(); }
622 XLineEndListRef GetLineEndList() const { return GetPropertyList( XLINE_END_LIST )->AsLineEndList(); }
623 XGradientListRef GetGradientList() const { return GetPropertyList( XGRADIENT_LIST )->AsGradientList(); }
625 // Der StyleSheetPool wird der DrawingEngine nur bekanntgemacht.
626 // Zu loeschen hat ihn schliesslich der, der ihn auch konstruiert hat.
627 SfxStyleSheetBasePool* GetStyleSheetPool() const { return mxStyleSheetPool.get(); }
628 void SetStyleSheetPool(SfxStyleSheetBasePool* pPool) { mxStyleSheetPool=pPool; }
630 void SetStarDrawPreviewMode(sal_Bool bPreview);
631 sal_Bool IsStarDrawPreviewMode() { return bStarDrawPreviewMode; }
633 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoModel();
634 void setUnoModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xModel );
636 // these functions are used by the api to disable repaints during a
637 // set of api calls.
638 bool isLocked() const { return mbModelLocked; }
639 void setLock( bool bLock );
641 void SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> xForbiddenChars );
642 rtl::Reference<SvxForbiddenCharactersTable> GetForbiddenCharsTable() const;
644 void SetCharCompressType( sal_uInt16 nType );
645 sal_uInt16 GetCharCompressType() const { return mnCharCompressType; }
647 void SetKernAsianPunctuation( sal_Bool bEnabled );
648 sal_Bool IsKernAsianPunctuation() const { return (sal_Bool)mbKernAsianPunctuation; }
650 void SetAddExtLeading( sal_Bool bEnabled );
651 sal_Bool IsAddExtLeading() const { return (sal_Bool)mbAddExtLeading; }
653 void ReformatAllTextObjects();
655 SdrOutliner* createOutliner( sal_uInt16 nOutlinerMode );
656 void disposeOutliner( SdrOutliner* pOutliner );
658 sal_Bool IsWriter() const { return !bMyPool; }
660 /** returns the numbering type that is used to format page fields in drawing shapes */
661 virtual SvxNumType GetPageNumType() const;
663 /** copies the items from the source set to the destination set. Both sets must have
664 same ranges but can have different pools. If pNewModel is optional. If it is null,
665 this model is used. */
667 void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel );
669 bool IsInDestruction() const;
671 static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId();
673 /** enables (true) or disables (false) recording of undo actions
674 If undo actions are added while undo is disabled, they are deleted.
675 Disabling undo does not clear the current undo buffer! */
676 void EnableUndo( bool bEnable );
678 /** returns true if undo is currently enabled
679 This returns false if undo was disabled using EnableUndo( false ) and
680 also during the runtime of the Undo() and Redo() methods. */
681 bool IsUndoEnabled() const;
683 void SetDrawingLayerPoolDefaults();
686 typedef tools::WeakReference< SdrModel > SdrModelWeakRef;
688 ////////////////////////////////////////////////////////////////////////////////////////////////////
690 #endif //_SVDMODEL_HXX
692 /* /////////////////////////////////////////////////////////////////////////////////////////////////
693 +-----------+
694 | SdrModel |
695 +--+------+-+
696 | +-----------+
697 +----+-----+ |
698 | ... | |
699 +----+---+ +----+---+ +-----+--------+
700 |SdrPage | |SdrPage | |SdrLayerAdmin |
701 +---+----+ +-+--+--++ +---+-------+--+
702 | | | | | +-------------------+
703 +----+----+ +-----+-----+ +-------+-------+
704 | ... | | ... | | ... |
705 +---+---+ +---+---+ +----+----+ +----+----+ +-----+------+ +------+-----+
706 |SdrObj | |SdrObj | |SdrLayer | |SdrLayer | |SdrLayerSet | |SdrLayerSet |
707 +-------+ +-------+ +---------+ +---------+ +------------+ +------------+
708 This class: SdrModel is the head of the data modells for the StarView Drawing Engine.
710 ///////////////////////////////////////////////////////////////////////////////////////////////// */
712 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */