xref: /aoo4110/main/svx/inc/svx/svdmodel.hxx (revision b1cdbd2c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVDMODEL_HXX
25 #define _SVDMODEL_HXX
26 
27 #include <com/sun/star/uno/Sequence.hxx>
28 #include <cppuhelper/weakref.hxx>
29 #include <sot/storage.hxx>
30 #include <tools/link.hxx>
31 #include <tools/contnr.hxx>
32 #include <tools/weakbase.hxx>
33 #include <vcl/mapmod.hxx>
34 #include <svl/brdcst.hxx>
35 #include <tools/string.hxx>
36 #include <tools/datetime.hxx>
37 #include <svl/hint.hxx>
38 #include <svl/style.hxx>
39 #include <svx/pageitem.hxx>
40 #include <vcl/field.hxx>
41 #include <boost/shared_ptr.hpp>
42 #include <svx/svdtypes.hxx> // fuer enum RepeatFuncts
43 #include <vcl/field.hxx>
44 #include "svx/svxdllapi.h"
45 #include <vos/ref.hxx>
46 #include <svx/xtable.hxx>
47 
48 #if defined(UNX) || defined(WNT)
49 #define DEGREE_CHAR ((sal_Unicode)176)   /* 0xB0 = Ansi */
50 #endif
51 
52 #if defined(OS2)
53 #define DEGREE_CHAR ((sal_Unicode)248)   /* 0xF8 = IBM PC (Erw. ASCII) */
54 #endif
55 
56 #ifndef DEGREE_CHAR
57 #error unbekannte Plattrorm
58 #endif
59 
60 class OutputDevice;
61 class SdrOutliner;
62 class SdrLayerAdmin;
63 class SdrObjList;
64 class SdrObject;
65 class SdrPage;
66 class SdrPageView;
67 class SdrTextObj;
68 class SdrUndoAction;
69 class SdrUndoGroup;
70 class AutoTimer;
71 class SfxItemPool;
72 class SfxItemSet;
73 class SfxRepeatTarget;
74 class SfxStyleSheet;
75 class SfxUndoAction;
76 class SfxUndoManager;
77 class SvxForbiddenCharactersTable;
78 class SvNumberFormatter;
79 class SotStorage;
80 class SdrOutlinerCache;
81 class SotStorageRef;
82 class SdrUndoFactory;
83 namespace comphelper{
84     class IEmbeddedHelper;
85 }
86 
87 class ImageMap;
88 
89 namespace sfx2{
90     class LinkManager;
91 }
92 ////////////////////////////////////////////////////////////////////////////////////////////////////
93 
94 #define SDR_SWAPGRAPHICSMODE_NONE		0x00000000
95 #define SDR_SWAPGRAPHICSMODE_TEMP		0x00000001
96 #define SDR_SWAPGRAPHICSMODE_DOC		0x00000002
97 #define SDR_SWAPGRAPHICSMODE_PURGE		0x00000100
98 #define SDR_SWAPGRAPHICSMODE_DEFAULT	(SDR_SWAPGRAPHICSMODE_TEMP|SDR_SWAPGRAPHICSMODE_DOC|SDR_SWAPGRAPHICSMODE_PURGE)
99 
100 ////////////////////////////////////////////////////////////////////////////////////////////////////
101 
102 enum SdrHintKind
103 {
104 				  HINT_UNKNOWN,         // Unbekannt
105 				  HINT_LAYERCHG,        // Layerdefinition geaendert
106 				  HINT_LAYERORDERCHG,   // Layerreihenfolge geaendert (Insert/Remove/ChangePos)
107 				  HINT_PAGEORDERCHG,    // Reihenfolge der Seiten (Zeichenseiten oder Masterpages) geaendert (Insert/Remove/ChangePos)
108 				  HINT_OBJCHG,          // Objekt geaendert
109 				  HINT_OBJINSERTED,     // Neues Zeichenobjekt eingefuegt
110 				  HINT_OBJREMOVED,      // Zeichenobjekt aus Liste entfernt
111 				  HINT_MODELCLEARED,    // gesamtes Model geloescht (keine Pages mehr da). not impl.
112 				  HINT_REFDEVICECHG,    // RefDevice geaendert
113 				  HINT_DEFAULTTABCHG,   // Default Tabulatorweite geaendert
114 				  HINT_DEFFONTHGTCHG,   // Default FontHeight geaendert
115 				  HINT_MODELSAVED,      // Dokument wurde gesichert
116 				  HINT_SWITCHTOPAGE,    // #94278# UNDO/REDO at an object evtl. on another page
117 				  HINT_BEGEDIT,			// Is called after the object has entered text edit mode
118 				  HINT_ENDEDIT			// Is called after the object has left text edit mode
119 };
120 
121 class SVX_DLLPUBLIC SdrHint: public SfxHint
122 {
123 public:
124 	Rectangle								maRectangle;
125 	const SdrPage*							mpPage;
126 	const SdrObject*						mpObj;
127 	const SdrObjList*						mpObjList;
128 	SdrHintKind								meHint;
129 
130 public:
131 	TYPEINFO();
132 
133 	SdrHint();
134 	SdrHint(SdrHintKind eNewHint);
135 	SdrHint(const SdrObject& rNewObj);
136 	SdrHint(const SdrObject& rNewObj, const Rectangle& rRect);
137 
138 	void SetPage(const SdrPage* pNewPage);
139 	void SetObjList(const SdrObjList* pNewOL);
140 	void SetObject(const SdrObject* pNewObj);
141 	void SetKind(SdrHintKind eNewKind);
142 	void SetRect(const Rectangle& rNewRect);
143 
144 	const SdrPage* GetPage() const;
145 	const SdrObjList* GetObjList() const;
146 	const SdrObject* GetObject() const;
147 	SdrHintKind GetKind() const;
148 	const Rectangle& GetRect() const;
149 };
150 
151 ////////////////////////////////////////////////////////////////////////////////////////////////////
152 
153 // Flag um nach dem Laden des Pools Aufzuraeumen (d.h. die RefCounts
154 // neu zu bestimmen und unbenutztes wegzuwerfen). sal_False == aktiv
155 #define LOADREFCOUNTS (sal_False)
156 
157 struct SdrDocumentStreamInfo
158 {
159 	FASTBOOL	    mbDeleteAfterUse;
160 	String		    maUserData;
161     com::sun::star::uno::Reference < com::sun::star::embed::XStorage > mxStorageRef;
162 	sal_Bool		    mbDummy1 : 1;
163 };
164 
165 struct SdrModelImpl;
166 
167 class SVX_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase< SdrModel >
168 {
169 protected:
170 	DateTime       aReadDate;  // Datum des Einstreamens
171 	Container      maMaPag;     // StammSeiten (Masterpages)
172 	Container      maPages;
173 	Link           aUndoLink;  // Link fuer einen NotifyUndo-Handler
174 	Link           aIOProgressLink;
175 	String         aTablePath;
176 	Size           aMaxObjSize; // z.B. fuer Autogrowing Text
177     Fraction       aObjUnit;   // Beschreibung der Koordinateneinheiten fuer ClipBoard, Drag&Drop, ...
178     MapUnit        eObjUnit;   // see above
179     FieldUnit      eUIUnit;      // Masseinheit, Masstab (z.B. 1/1000) fuer die UI (Statuszeile) wird von ImpSetUIUnit() gesetzt
180     Fraction       aUIScale;     // see above
181     String         aUIUnitStr;   // see above
182     Fraction       aUIUnitFact;  // see above
183     int            nUIUnitKomma; // see above
184     FASTBOOL       bUIOnlyKomma; // see above
185 
186 	SdrLayerAdmin*  pLayerAdmin;
187 	SfxItemPool*    pItemPool;
188 	FASTBOOL        bMyPool;        // zum Aufraeumen von pMyPool ab 303a
189 	comphelper::IEmbeddedHelper*
190                     m_pEmbeddedHelper; // helper for embedded objects to get rid of the SfxObjectShell
191 	SdrOutliner*    pDrawOutliner;  // ein Outliner zur Textausgabe
192 	SdrOutliner*    pHitTestOutliner;// ein Outliner fuer den HitTest
193 	sal_uIntPtr           nDefTextHgt;    // Default Texthoehe in logischen Einheiten
194 	OutputDevice*   pRefOutDev;     // ReferenzDevice fuer die EditEngine
195 	sal_uIntPtr           nProgressAkt;   // fuer den
196 	sal_uIntPtr           nProgressMax;   // ProgressBar-
197 	sal_uIntPtr           nProgressOfs;   // -Handler
198 	rtl::Reference< SfxStyleSheetBasePool > mxStyleSheetPool;
199 	SfxStyleSheet*	pDefaultStyleSheet;
200     SfxStyleSheet* mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; // #119287#
201 	sfx2::LinkManager* pLinkManager;   // LinkManager
202 	Container*      pUndoStack;
203 	Container*      pRedoStack;
204 	SdrUndoGroup*   pAktUndoGroup;  // Fuer mehrstufige
205 	sal_uInt16          nUndoLevel;     // Undo-Klammerung
206 	bool			mbUndoEnabled;	// If false no undo is recorded or we are during the execution of an undo action
207 	sal_uInt16          nProgressPercent; // fuer den ProgressBar-Handler
208 	sal_uInt16          nLoadVersion;   // Versionsnummer der geladenen Datei
209 	sal_Bool        mbChanged;
210 	FASTBOOL        bInfoChanged;
211 	FASTBOOL        bPagNumsDirty;
212 	FASTBOOL        bMPgNumsDirty;
213 	FASTBOOL        bPageNotValid;  // sal_True=Doc ist nur ObjektTraeger. Page ist nicht gueltig.
214 	FASTBOOL        bSavePortable;  // Metafiles portabel speichern
215 	FASTBOOL        bNoBitmapCaching;   // Bitmaps fuer Screenoutput cachen
216 	FASTBOOL        bReadOnly;
217 	FASTBOOL        bTransparentTextFrames;
218 	FASTBOOL        bSaveCompressed;
219 	FASTBOOL        bSwapGraphics;
220 	FASTBOOL        bPasteResize; // Objekte werden gerade resized wegen Paste mit anderem MapMode
221 	FASTBOOL		bSaveOLEPreview;      // save preview metafile of OLE objects
222 	sal_uInt16          nStreamCompressMode;  // Komprimiert schreiben?
223 	sal_uInt16          nStreamNumberFormat;
224 	sal_uInt16          nDefaultTabulator;
225 	sal_uInt32          nMaxUndoCount;
226 	FASTBOOL        bSaveNative;
227 	sal_Bool            bStarDrawPreviewMode;
228     bool            mbDisableTextEditUsesCommonUndoManager;
229 
230 
231 //////////////////////////////////////////////////////////////////////////////
232 // sdr::Comment interface
233 private:
234 	// the next unique comment ID, used for counting added comments. Initialized
235 	// to 0. UI shows one more due to the fact that 0 is a no-no for users.
236 	sal_uInt32											mnUniqueCommentID;
237 
238 public:
239 	// create a new, unique comment ID
240 	sal_uInt32 GetNextUniqueCommentID();
241 
242 	// get the author name
243 	::rtl::OUString GetDocumentAuthorName() const;
244 
245 	// for export
GetUniqueCommentID() const246 	sal_uInt32 GetUniqueCommentID() const { return mnUniqueCommentID; }
247 
248 	// for import
SetUniqueCommentID(sal_uInt32 nNewID)249 	void SetUniqueCommentID(sal_uInt32 nNewID) { if(nNewID != mnUniqueCommentID) { mnUniqueCommentID = nNewID; } }
250 	/** cl: added this for OJ to complete his reporting engine, does not work
251 		correctly so only enable it for his model */
252 	bool IsAllowShapePropertyChangeListener() const;
253 	void SetAllowShapePropertyChangeListener( bool bAllow );
254 
255 	sal_uInt16          nStarDrawPreviewMasterPageNum;
256 	// Reserven fuer kompatible Erweiterungen
257 //-/	SfxItemPool*    pUndoItemPool;
258 	SotStorage*		pModelStorage;
259 	SvxForbiddenCharactersTable* mpForbiddenCharactersTable;
260 	sal_uIntPtr			nSwapGraphicsMode;
261 
262 	SdrOutlinerCache* mpOutlinerCache;
263 	SdrModelImpl*	mpImpl;
264 	sal_uInt16          mnCharCompressType;
265 	sal_uInt16          mnHandoutPageCount;
266 	sal_uInt16          nReserveUInt6;
267 	sal_uInt16          nReserveUInt7;
268 	FASTBOOL        mbModelLocked;
269 	FASTBOOL        mbKernAsianPunctuation;
270     FASTBOOL        mbAddExtLeading;
271 	FASTBOOL        mbInDestruction;
272 
273     // lists for colors, dashes, lineends, hatches, gradients and bitmaps for this model
274     XColorListSharedPtr     maColorTable;
275     XDashListSharedPtr      maDashList;
276     XLineEndListSharedPtr   maLineEndList;
277     XHatchListSharedPtr     maHatchList;
278     XGradientListSharedPtr  maGradientList;
279     XBitmapListSharedPtr    maBitmapList;
280 
281 	// New src638: NumberFormatter for drawing layer and
282 	// method for getting it. It is constructed on demand
283 	// and destroyed when destroying the SdrModel.
284 	SvNumberFormatter* mpNumberFormatter;
285 public:
286 	const SvNumberFormatter& GetNumberFormatter() const;
287 
getHandoutPageCount() const288 	sal_uInt16 getHandoutPageCount() const { return mnHandoutPageCount; }
setHandoutPageCount(sal_uInt16 nHandoutPageCount)289 	void setHandoutPageCount( sal_uInt16 nHandoutPageCount ) { mnHandoutPageCount = nHandoutPageCount; }
290 
291 protected:
292 
293 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoModel();
294 
295 private:
296 	// Nicht implementiert:
297 	SVX_DLLPRIVATE SdrModel(const SdrModel& rSrcModel);
298 	SVX_DLLPRIVATE void operator=(const SdrModel& rSrcModel);
299 	SVX_DLLPRIVATE FASTBOOL operator==(const SdrModel& rCmpModel) const;
300 //#if 0 // _SOLAR__PRIVATE
301 	SVX_DLLPRIVATE void ImpPostUndoAction(SdrUndoAction* pUndo);
302 	SVX_DLLPRIVATE void ImpSetUIUnit();
303 	SVX_DLLPRIVATE void ImpSetOutlinerDefaults( SdrOutliner* pOutliner, sal_Bool bInit = sal_False );
304 	SVX_DLLPRIVATE void ImpReformatAllTextObjects();
305 	SVX_DLLPRIVATE void ImpReformatAllEdgeObjects();	// #103122#
306 	SVX_DLLPRIVATE void ImpCtor(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bLoadRefCounts = true);
307 
308 //#endif // __PRIVATE
309 
310 	// this is a weak reference to a possible living api wrapper for this model
311 	::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoModel;
312 
313 public:
314 //#if 0 // _SOLAR__PRIVATE
IsPasteResize() const315 	FASTBOOL IsPasteResize() const        { return bPasteResize; }
SetPasteResize(FASTBOOL bOn)316 	void     SetPasteResize(FASTBOOL bOn) { bPasteResize=bOn; }
317 //#endif // __PRIVATE
318 	TYPEINFO();
319 	// Steckt man hier seinen eigenen Pool rein, so wird die Klasse auch
320 	// Aktionen an ihm vornehmen (Put(),Remove()). Bei Zerstoerung von
321 	// SdrModel wird dieser Pool ver delete geloescht!
322 	// Gibt man den Konstruktor stattdessen eine NULL mit, so macht sich
323 	// die Klasse einen eigenen Pool (SdrItemPool), den sie dann auch im
324 	// Destruktor zerstoert.
325 	// Bei Verwendung eines eigenen Pools ist darauf zu achten, dass dieser
326 	// von SdrItemPool abgeleitet ist, falls man von SdrAttrObj abgeleitete
327 	// Zeichenobjekte verwenden moechte. Setzt man degegen nur vom abstrakten
328 	// Basisobjekt SdrObject abgeleitete Objekte ein, so ist man frei in der
329 	// Wahl des Pools.
330 	SdrModel(SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
331 	SdrModel(const String& rPath, SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS);
332 	virtual ~SdrModel();
333 	void ClearModel(sal_Bool bCalledFromDestructor);
334 
335 	// Hier kann man erfragen, ob das Model gerade eingrstreamt wird
IsLoading() const336 	FASTBOOL IsLoading() const                  { return sal_False /*BFS01 bLoading */; }
337 	// Muss z.B. ueberladen werden, um das Swappen/LoadOnDemand von Grafiken
338 	// zu ermoeglichen. Wird rbDeleteAfterUse auf sal_True gesetzt, so wird
339 	// die SvStream-Instanz vom Aufrufer nach Gebrauch destruiert.
340 	// Wenn diese Methode NULL liefert, wird zum Swappen eine temporaere
341 	// Datei angelegt.
342 	// Geliefert werden muss der Stream, aus dem das Model geladen wurde
343 	// bzw. in den es zuletzt gespeichert wurde.
344 	virtual SvStream* GetDocumentStream( SdrDocumentStreamInfo& rStreamInfo ) const;
345 	// Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln.
346 	void BurnInStyleSheetAttributes();
347 	// Wer sich von SdrPage ableitet muss sich auch von SdrModel ableiten
348 	// und diese beiden VM AllocPage() und AllocModel() ueberladen...
349 	virtual SdrPage*  AllocPage(FASTBOOL bMasterPage);
350 	virtual SdrModel* AllocModel() const;
351 
352 	// Aenderungen an den Layern setzen das Modified-Flag und broadcasten am Model!
GetLayerAdmin() const353 	const SdrLayerAdmin& GetLayerAdmin() const                  { return *pLayerAdmin; }
GetLayerAdmin()354 	SdrLayerAdmin&       GetLayerAdmin()                        { return *pLayerAdmin; }
355 
GetItemPool() const356 	const SfxItemPool&   GetItemPool() const                    { return *pItemPool; }
GetItemPool()357 	SfxItemPool&         GetItemPool()                          { return *pItemPool; }
358 
359 	SdrOutliner&         GetDrawOutliner(const SdrTextObj* pObj=NULL) const;
360 
361 	/** returns a new created and non shared outliner.
362 		The outliner will not get updated when the SdrModel is changed.
363 	*/
364 	boost::shared_ptr< SdrOutliner > CreateDrawOutliner(const SdrTextObj* pObj=NULL);
365 
GetHitTestOutliner() const366 	SdrOutliner&         GetHitTestOutliner() const { return *pHitTestOutliner; }
367 	const SdrTextObj*    GetFormattingTextObj() const;
368 	// Die TextDefaults (Font,Hoehe,Farbe) in ein Set putten
369 	void         		 SetTextDefaults() const;
370 	static void    		 SetTextDefaults( SfxItemPool* pItemPool, sal_uIntPtr nDefTextHgt );
371 
372 	// ReferenzDevice fuer die EditEngine
373 	void                 SetRefDevice(OutputDevice* pDev);
GetRefDevice() const374 	OutputDevice*        GetRefDevice() const                   { return pRefOutDev; }
375 	// Wenn ein neuer MapMode am RefDevice gesetzt wird o.ae.
376 	void                 RefDeviceChanged(); // noch nicht implementiert
377 	// Default-Schrifthoehe in logischen Einheiten
378 	void                 SetDefaultFontHeight(sal_uIntPtr nVal);
GetDefaultFontHeight() const379 	sal_uIntPtr                GetDefaultFontHeight() const           { return nDefTextHgt; }
380 	// Default-Tabulatorweite fuer die EditEngine
381 	void                 SetDefaultTabulator(sal_uInt16 nVal);
GetDefaultTabulator() const382 	sal_uInt16               GetDefaultTabulator() const            { return nDefaultTabulator; }
383 
384 	// Der DefaultStyleSheet wird jedem Zeichenobjekt verbraten das in diesem
385 	// Model eingefuegt wird und kein StyleSheet gesetzt hat.
GetDefaultStyleSheet() const386 	SfxStyleSheet*       GetDefaultStyleSheet() const             { return pDefaultStyleSheet; }
SetDefaultStyleSheet(SfxStyleSheet * pDefSS)387 	void                 SetDefaultStyleSheet(SfxStyleSheet* pDefSS) { pDefaultStyleSheet = pDefSS; }
388 
389     // #119287# default StyleSheet for SdrGrafObj and SdrOle2Obj
GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const390     SfxStyleSheet* GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const { return mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; }
SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet * pDefSS)391 	void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet* pDefSS) { mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = pDefSS; }
392 
GetLinkManager()393 	sfx2::LinkManager*      GetLinkManager()                         { return pLinkManager; }
SetLinkManager(sfx2::LinkManager * pLinkMgr)394 	void                 SetLinkManager( sfx2::LinkManager* pLinkMgr ) { pLinkManager = pLinkMgr; }
395 
GetPersist() const396     ::comphelper::IEmbeddedHelper*     GetPersist() const               { return m_pEmbeddedHelper; }
ClearPersist()397 	void				 ClearPersist()                                 { m_pEmbeddedHelper = 0; }
SetPersist(::comphelper::IEmbeddedHelper * p)398 	void				 SetPersist( ::comphelper::IEmbeddedHelper *p ) { m_pEmbeddedHelper = p; }
399 
400 	// Masseinheit fuer die Zeichenkoordinaten.
401 	// Default ist 1 logische Einheit = 1/100mm (Unit=MAP_100TH_MM, Fract=(1,1)).
402 	// Beispiele:
403 	//   MAP_POINT,    Fraction(72,1)    : 1 log Einh = 72 Point   = 1 Inch
404 	//   MAP_POINT,    Fraction(1,20)    : 1 log Einh = 1/20 Point = 1 Twip
405 	//   MAP_TWIP,     Fraction(1,1)     : 1 log Einh = 1 Twip
406 	//   MAP_100TH_MM, Fraction(1,10)    : 1 log Einh = 1/1000mm
407 	//   MAP_MM,       Fraction(1000,1)  : 1 log Einh = 1000mm     = 1m
408 	//   MAP_CM,       Fraction(100,1)   : 1 log Einh = 100cm      = 1m
409 	//   MAP_CM,       Fraction(100,1)   : 1 log Einh = 100cm      = 1m
410 	//   MAP_CM,       Fraction(100000,1): 1 log Einh = 100000cm   = 1km
411 	// (PS: Lichtjahre sind somit also nicht darstellbar).
412 	// Die Skalierungseinheit wird benoetigt, damit die Engine das Clipboard
413 	// mit den richtigen Groessen beliefern kann.
GetScaleUnit() const414 	MapUnit          GetScaleUnit() const                       { return eObjUnit; }
415 	void             SetScaleUnit(MapUnit eMap);
GetScaleFraction() const416 	const Fraction&  GetScaleFraction() const                   { return aObjUnit; }
417 	void             SetScaleFraction(const Fraction& rFrac);
418 	// Beides gleichzeitig setzen ist etwas performanter
419 	void             SetScaleUnit(MapUnit eMap, const Fraction& rFrac);
420 
421 	// Maximale Groesse z.B. fuer Autogrowing-Texte
GetMaxObjSize() const422 	const Size&      GetMaxObjSize() const                      { return aMaxObjSize; }
SetMaxObjSize(const Size & rSiz)423 	void             SetMaxObjSize(const Size& rSiz)            { aMaxObjSize=rSiz; }
424 
425 	// Damit die View! in der Statuszeile vernuenftige Zahlen anzeigen kann:
426 	// Default ist mm.
427 	void             SetUIUnit(FieldUnit eUnit);
GetUIUnit() const428 	FieldUnit        GetUIUnit() const                          { return eUIUnit; }
429 	// Der Masstab der Zeichnung. Default 1/1.
430 	void             SetUIScale(const Fraction& rScale);
GetUIScale() const431 	const Fraction&  GetUIScale() const                         { return aUIScale; }
432 	// Beides gleichzeitig setzen ist etwas performanter
433 	void             SetUIUnit(FieldUnit eUnit, const Fraction& rScale);
434 
GetUIUnitFact() const435 	const Fraction&  GetUIUnitFact() const                      { return aUIUnitFact; }
GetUIUnitStr() const436 	const String&    GetUIUnitStr() const                       { return aUIUnitStr; }
GetUIUnitKomma() const437 	int              GetUIUnitKomma() const                     { return nUIUnitKomma; }
IsUIOnlyKomma() const438 	FASTBOOL         IsUIOnlyKomma() const                      { return bUIOnlyKomma; }
439 
440 	static void		 TakeUnitStr(FieldUnit eUnit, String& rStr);
441 	void             TakeMetricStr(long nVal, String& rStr, FASTBOOL bNoUnitChars=sal_False, sal_Int32 nNumDigits = -1) const;
442 	void             TakeWinkStr(long nWink, String& rStr, FASTBOOL bNoDegChar=sal_False) const;
443 	void             TakePercentStr(const Fraction& rVal, String& rStr, FASTBOOL bNoPercentChar=sal_False) const;
444 
445 	// RecalcPageNums wird idR. nur von der Page gerufen.
IsPagNumsDirty() const446 	FASTBOOL         IsPagNumsDirty() const                     { return bPagNumsDirty; };
IsMPgNumsDirty() const447 	FASTBOOL         IsMPgNumsDirty() const                     { return bMPgNumsDirty; };
448 	void             RecalcPageNums(FASTBOOL bMaster);
449 	// Nach dem Insert gehoert die Page dem SdrModel.
450 	virtual void     InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
451 	virtual void     DeletePage(sal_uInt16 nPgNum);
452 	// Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
453 	virtual SdrPage* RemovePage(sal_uInt16 nPgNum);
454 	virtual void     MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
455 	const SdrPage* GetPage(sal_uInt16 nPgNum) const;
456 	SdrPage* GetPage(sal_uInt16 nPgNum);
457 	sal_uInt16 GetPageCount() const;
458 	// #109538#
459 	virtual void PageListChanged();
460 
461 	// Masterpages
462 	virtual void     InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF);
463 	virtual void     DeleteMasterPage(sal_uInt16 nPgNum);
464 	// Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
465 	virtual SdrPage* RemoveMasterPage(sal_uInt16 nPgNum);
466 	virtual void     MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos);
467 	const SdrPage* GetMasterPage(sal_uInt16 nPgNum) const;
468 	SdrPage* GetMasterPage(sal_uInt16 nPgNum);
469 	sal_uInt16 GetMasterPageCount() const;
470 	// #109538#
471 	virtual void MasterPageListChanged();
472 
473 	// Modified-Flag. Wird automatisch gesetzt, wenn an den Pages oder
474 	// Zeichenobjekten was geaendert wird. Zuruecksetzen muss man es
475 	// jedoch selbst (z.B. bei Save() ...).
IsChanged() const476 	sal_Bool IsChanged() const { return mbChanged; }
477 	virtual void SetChanged(sal_Bool bFlg = sal_True);
478 
479 	// PageNotValid bedeutet, dass das Model lediglich Objekte traegt die zwar
480 	// auf einer Page verankert sind, die Page aber nicht gueltig ist. Diese
481 	// Kennzeichnung wird fuers Clipboard/Drag&Drop benoetigt.
IsPageNotValid() const482 	FASTBOOL        IsPageNotValid() const                     { return bPageNotValid; }
SetPageNotValid(FASTBOOL bJa=sal_True)483 	void            SetPageNotValid(FASTBOOL bJa=sal_True)         { bPageNotValid=bJa; }
484 
485 	// Schaltet man dieses Flag auf sal_True, so werden Grafikobjekte
486 	// portabel gespeichert. Es findet dann beim Speichern ggf.
487 	// eine implizite Wandlung von Metafiles statt.
488 	// Default=FALSE. Flag ist nicht persistent.
IsSavePortable() const489 	FASTBOOL        IsSavePortable() const                     { return bSavePortable; }
SetSavePortable(FASTBOOL bJa=sal_True)490 	void            SetSavePortable(FASTBOOL bJa=sal_True)         { bSavePortable=bJa; }
491 
492 	// Schaltet man dieses Flag auf sal_True, so werden
493 	// Pixelobjekte (stark) komprimiert gespeichert.
494 	// Default=FALSE. Flag ist nicht persistent.
IsSaveCompressed() const495 	FASTBOOL        IsSaveCompressed() const                   { return bSaveCompressed; }
SetSaveCompressed(FASTBOOL bJa=sal_True)496 	void            SetSaveCompressed(FASTBOOL bJa=sal_True)       { bSaveCompressed=bJa; }
497 
498 	// Schaltet man dieses Flag auf sal_True, so werden
499 	// Grafikobjekte mit gesetztem Native-Link
500 	// native gespeichert.
501 	// Default=FALSE. Flag ist nicht persistent.
IsSaveNative() const502 	FASTBOOL        IsSaveNative() const                       { return bSaveNative; }
SetSaveNative(FASTBOOL bJa=sal_True)503 	void            SetSaveNative(FASTBOOL bJa=sal_True)           { bSaveNative=bJa; }
504 
505 	// Schaltet man dieses Flag auf sal_True, so werden die Grafiken
506 	// von Grafikobjekten:
507 	// - beim Laden eines Dokuments nicht sofort mitgeladen,
508 	//   sondern erst wenn sie gebraucht (z.B. angezeigt) werden.
509 	// - ggf. wieder aus dem Speicher geworfen, falls Sie gerade
510     //   nicht benoetigt werden.
511 	// Damit das funktioniert, muss die virtuelle Methode
512 	// GetDocumentStream() ueberladen werden.
513 	// Default=FALSE. Flag ist nicht persistent.
IsSwapGraphics() const514 	FASTBOOL        IsSwapGraphics() const { return bSwapGraphics; }
515 	void            SetSwapGraphics(FASTBOOL bJa=sal_True);
SetSwapGraphicsMode(sal_uIntPtr nMode)516 	void			SetSwapGraphicsMode(sal_uIntPtr nMode) { nSwapGraphicsMode = nMode; }
GetSwapGraphicsMode() const517 	sal_uIntPtr			GetSwapGraphicsMode() const { return nSwapGraphicsMode; }
518 
IsSaveOLEPreview() const519 	FASTBOOL        IsSaveOLEPreview() const          { return bSaveOLEPreview; }
SetSaveOLEPreview(FASTBOOL bSet)520 	void            SetSaveOLEPreview( FASTBOOL bSet) { bSaveOLEPreview = bSet; }
521 
522 	// Damit die Bildschirmausgabe von Bitmaps (insbesondere bei gedrehten)
523 	// etwas schneller wird, werden sie gecachet. Diesen Cache kann man mit
524 	// diesem Flag ein-/ausschalten. Beim naechsten Paint wird an den Objekten
525 	// dann ggf. ein Image gemerkt bzw. freigegeben. Wandert ein Bitmapobjekt
526 	// in's Undo, so wird der Cache fuer dieses Objekt sofort ausgeschaltet
527 	// (Speicher sparen).
528 	// Default=Cache eingeschaltet. Flag ist nicht persistent.
IsBitmapCaching() const529 	FASTBOOL        IsBitmapCaching() const                     { return !bNoBitmapCaching; }
SetBitmapCaching(FASTBOOL bJa=sal_True)530 	void            SetBitmapCaching(FASTBOOL bJa=sal_True)         { bNoBitmapCaching=!bJa; }
531 
532 	// Defaultmaessig (sal_False) kann man Textrahmen ohne Fuellung durch
533 	// Mausklick selektieren. Nach Aktivierung dieses Flags trifft man sie
534 	// nur noch in dem Bereich, wo sich auch tatsaechlich Text befindet.
IsPickThroughTransparentTextFrames() const535 	FASTBOOL        IsPickThroughTransparentTextFrames() const  { return bTransparentTextFrames; }
SetPickThroughTransparentTextFrames(FASTBOOL bOn)536 	void            SetPickThroughTransparentTextFrames(FASTBOOL bOn) { bTransparentTextFrames=bOn; }
537 
538 	// Darf denn das Model ueberhaupt veraendert werden?
539 	// Wird nur von den Possibility-Methoden der View ausgewerdet.
540 	// Direkte Manipulationen am Model, ... berueksichtigen dieses Flag nicht.
541 	// Sollte ueberladen werden und entsprechend des ReadOnly-Status des Files
542 	// sal_True oder sal_False liefern (Methode wird oeffters gerufen, also ein Flag
543 	// verwenden!).
544 	virtual FASTBOOL IsReadOnly() const;
545 	virtual void     SetReadOnly(FASTBOOL bYes);
546 
547 	// Vermischen zweier SdrModel. Zu beachten sei, dass rSourceModel nicht
548 	// const ist. Die Pages werden beim einfuegen nicht kopiert, sondern gemoved.
549 	// rSourceModel ist anschliessend u.U. weitgehend leer.
550 	// nFirstPageNum,nLastPageNum: Die aus rSourceModel zu uebernehmenden Seiten
551 	// nDestPos..................: Einfuegeposition
552 	// bMergeMasterPages.........: sal_True =benoetigte MasterPages werden aus
553 	//                                   rSourceModel ebenfalls uebernommen
554 	//                             sal_False=Die MasterPageDescriptoren der Seiten
555 	//                                   aus rSourceModel werden auf die
556 	//                                   vorhandenen MasterPages gemappt.
557 	// bUndo.....................: Fuer das Merging wird eine UndoAction generiert.
558 	//                             Undo ist nur fuer das ZielModel, nicht fuer
559 	//                             rSourceModel.
560 	// bTreadSourceAsConst.......: sal_True=Das SourceModel wird nicht veraendert,.
561 	//                             d.h die Seiten werden kopiert.
562 	virtual void Merge(SdrModel& rSourceModel,
563 			   sal_uInt16 nFirstPageNum=0, sal_uInt16 nLastPageNum=0xFFFF,
564 			   sal_uInt16 nDestPos=0xFFFF,
565 			   FASTBOOL bMergeMasterPages=sal_False, FASTBOOL bAllMasterPages=sal_False,
566 			   FASTBOOL bUndo=sal_True, FASTBOOL bTreadSourceAsConst=sal_False);
567 
568 	// Ist wie Merge(SourceModel=DestModel,nFirst,nLast,nDest,sal_False,sal_False,bUndo,!bMoveNoCopy);
569 	void CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
570 				   sal_uInt16 nDestPos,
571 				   FASTBOOL bUndo=sal_True, FASTBOOL bMoveNoCopy=sal_False);
572 
573 	// Mit BegUndo() / EndUndo() ist es moeglich beliebig viele UndoActions
574 	// beliebig tief zu klammern. Als Kommentar der
575 	// UndoAction wird der des ersten BegUndo(String) aller Klammerungen
576 	// verwendet. Der NotifyUndoActionHdl wird in diesem Fall erst beim letzten
577 	// EndUndo() gerufen. Bei einer leeren Klammerung wird keine UndoAction
578 	// generiert.
579 	// Alle direkten Aktionen am SdrModel erzeugen keine UndoActions, die
580 	// Aktionen an der SdrView dagegen generieren solche.
581 	void BegUndo();                       // Undo-Klammerung auf
582 	void BegUndo(const String& rComment); // Undo-Klammerung auf
583 	void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE); // Undo-Klammerung auf
584 	void BegUndo(SdrUndoGroup* pUndoGrp); // Undo-Klammerung auf
585 	void EndUndo();                       // Undo-Klammerung zu
586 	void AddUndo(SdrUndoAction* pUndo);
GetUndoBracketLevel() const587 	sal_uInt16 GetUndoBracketLevel() const                       { return nUndoLevel; }
GetAktUndoGroup() const588 	const SdrUndoGroup* GetAktUndoGroup() const              { return pAktUndoGroup; }
589 	// nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
590 	void SetUndoComment(const String& rComment);
591 	void SetUndoComment(const String& rComment, const String& rObjDescr);
592 
593 	// Das Undo-Managment findet nur statt, wenn kein NotifyUndoAction-Handler
594 	// gesetzt ist.
595 	// Default ist 16. Minimaler MaxUndoActionCount ist 1!
596 	void  SetMaxUndoActionCount(sal_uIntPtr nAnz);
GetMaxUndoActionCount() const597 	sal_uIntPtr GetMaxUndoActionCount() const { return nMaxUndoCount; }
598 	void  ClearUndoBuffer();
599 	// UndoAction(0) ist die aktuelle (also die zuletzt eingegangene)
GetUndoActionCount() const600 	sal_uIntPtr GetUndoActionCount() const                      { return pUndoStack!=NULL ? pUndoStack->Count() : 0; }
GetUndoAction(sal_uIntPtr nNum) const601 	const SfxUndoAction* GetUndoAction(sal_uIntPtr nNum) const  { return (SfxUndoAction*)(pUndoStack!=NULL ? pUndoStack->GetObject(nNum) : NULL); }
602 	// RedoAction(0) ist die aktuelle (also die des letzten Undo)
GetRedoActionCount() const603 	sal_uIntPtr GetRedoActionCount() const                      { return pRedoStack!=NULL ? pRedoStack->Count() : 0; }
GetRedoAction(sal_uIntPtr nNum) const604 	const SfxUndoAction* GetRedoAction(sal_uIntPtr nNum) const  { return (SfxUndoAction*)(pRedoStack!=NULL ? pRedoStack->GetObject(nNum) : NULL); }
605 
606 	FASTBOOL Undo();
607 	FASTBOOL Redo();
608 	FASTBOOL Repeat(SfxRepeatTarget&);
609 
610 	// Hier kann die Applikation einen Handler setzen, der die auflaufenden
611 	// UndoActions einsammelt. Der Handler hat folgendes Aussehen:
612 	//   void __EXPORT NotifyUndoActionHdl(SfxUndoAction* pUndoAction);
613 	// Beim Aufruf des Handlers findet eine Eigentumsuebereignung statt; die
614 	// UndoAction gehoert somit dem Handler, nicht mehr dem SdrModel.
SetNotifyUndoActionHdl(const Link & rLink)615 	void        SetNotifyUndoActionHdl(const Link& rLink)    { aUndoLink=rLink; }
GetNotifyUndoActionHdl() const616 	const Link& GetNotifyUndoActionHdl() const               { return aUndoLink; }
617 
618 	/** application can set it's own undo manager, BegUndo, EndUndo and AddUndoAction
619 		calls are routet to this interface if given */
620 	void SetSdrUndoManager( SfxUndoManager*	pUndoManager );
621     SfxUndoManager* GetSdrUndoManager() const;
622 
623 	/** applications can set their own undo factory to overide creation of
624 		undo actions. The SdrModel will become owner of the given SdrUndoFactory
625 		and delete it upon its destruction. */
626 	void SetSdrUndoFactory( SdrUndoFactory* pUndoFactory );
627 
628 	/** returns the models undo factory. This must be used to create
629 		undo actions for this model. */
630 	SdrUndoFactory& GetSdrUndoFactory() const;
631 
632 	// Hier kann man einen Handler setzen der beim Streamen mehrfach gerufen
633 	// wird und ungefaehre Auskunft ueber den Fortschreitungszustand der
634 	// Funktion gibt. Der Handler muss folgendes Aussehen haben:
635 	//   void __EXPORT class::IOProgressHdl(const sal_uInt16& nPercent);
636 	// Der erste Aufruf des Handlers erfolgt grundsaetzlich mit 0, der letzte
637 	// mit 100. Dazwischen erfolgen maximal 99 Aufrufe mit Werten 1...99.
638 	// Man kann also durchaus bei 0 den Progressbar Initiallisieren und bei
639 	// 100 wieder schliessen. Zu beachten sei, dass der Handler auch gerufen
640 	// wird, wenn die App Draw-Daten im officeweiten Draw-Exchange-Format
641 	// bereitstellt, denn dies geschieht durch streamen in einen MemoryStream.
SetIOProgressHdl(const Link & rLink)642 	void        SetIOProgressHdl(const Link& rLink)          { aIOProgressLink=rLink; }
GetIOProgressHdl() const643 	const Link& GetIOProgressHdl() const                     { return aIOProgressLink; }
644 
645 	// Zugriffsmethoden fuer Paletten, Listen und Tabellen
646     void SetColorTableAtSdrModel(XColorListSharedPtr aTable);
647     XColorListSharedPtr GetColorTableFromSdrModel() const;
648 
649     void SetDashListAtSdrModel(XDashListSharedPtr aList);
650     XDashListSharedPtr GetDashListFromSdrModel() const;
651 
652     void SetLineEndListAtSdrModel(XLineEndListSharedPtr aList);
653     XLineEndListSharedPtr GetLineEndListFromSdrModel() const;
654 
655     void SetHatchListAtSdrModel(XHatchListSharedPtr aList);
656     XHatchListSharedPtr GetHatchListFromSdrModel() const;
657 
658     void SetGradientListAtSdrModel(XGradientListSharedPtr aList);
659     XGradientListSharedPtr GetGradientListFromSdrModel() const;
660 
661     void SetBitmapListAtSdrModel(XBitmapListSharedPtr aList);
662     XBitmapListSharedPtr GetBitmapListFromSdrModel() const;
663 
664 	// Der StyleSheetPool wird der DrawingEngine nur bekanntgemacht.
665 	// Zu loeschen hat ihn schliesslich der, der ihn auch konstruiert hat.
GetStyleSheetPool() const666 	SfxStyleSheetBasePool* GetStyleSheetPool() const         { return mxStyleSheetPool.get(); }
SetStyleSheetPool(SfxStyleSheetBasePool * pPool)667 	void SetStyleSheetPool(SfxStyleSheetBasePool* pPool)     { mxStyleSheetPool=pPool; }
668 
669 	// Diese Methode fuert einen Konsistenzcheck auf die Struktur des Models
670 	// durch. Geprueft wird insbesondere die Verkettung von Verschachtelten
671 	// Gruppenobjekten, aber auch Stati wie bInserted sowie Model* und Page*
672 	// der Objects, SubLists und Pages. Bei korrekter Struktur liefert die
673 	// Methode sal_True, andernfalls FALSE.
674 	// Dieser Check steht nur zur Verfuegung, wenn die Engine mit DBG_UTIL
675 	// uebersetzt wurde. Andernfalls liefert die Methode immer TRUE. (ni)
676 	FASTBOOL CheckConsistence() const;
677 
678 	void 	SetStarDrawPreviewMode(sal_Bool bPreview);
IsStarDrawPreviewMode()679 	sal_Bool 	IsStarDrawPreviewMode() { return bStarDrawPreviewMode; }
680 
GetDisableTextEditUsesCommonUndoManager() const681     bool GetDisableTextEditUsesCommonUndoManager() const { return mbDisableTextEditUsesCommonUndoManager; }
SetDisableTextEditUsesCommonUndoManager(bool bNew)682     void SetDisableTextEditUsesCommonUndoManager(bool bNew) { mbDisableTextEditUsesCommonUndoManager = bNew; }
683 
GetModelStorage() const684 	SotStorage*	GetModelStorage() const { return pModelStorage; }
SetModelStorage(SotStorage * pStor)685 	void		SetModelStorage( SotStorage* pStor ) { pModelStorage = pStor; }
686 
687 	::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoModel();
688 	void setUnoModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xModel );
689 
690 	// these functions are used by the api to disable repaints during a
691 	// set of api calls.
isLocked() const692 	sal_Bool isLocked() const { return (sal_Bool)mbModelLocked; }
693 	void setLock( sal_Bool bLock );
694 
695 	void			SetForbiddenCharsTable( vos::ORef<SvxForbiddenCharactersTable> xForbiddenChars );
696 	vos::ORef<SvxForbiddenCharactersTable>	GetForbiddenCharsTable() const;
697 
698 	void SetCharCompressType( sal_uInt16 nType );
GetCharCompressType() const699 	sal_uInt16 GetCharCompressType() const { return mnCharCompressType; }
700 
701 	void SetKernAsianPunctuation( sal_Bool bEnabled );
IsKernAsianPunctuation() const702 	sal_Bool IsKernAsianPunctuation() const { return (sal_Bool)mbKernAsianPunctuation; }
703 
704     void SetAddExtLeading( sal_Bool bEnabled );
IsAddExtLeading() const705     sal_Bool IsAddExtLeading() const { return (sal_Bool)mbAddExtLeading; }
706 
707 	void ReformatAllTextObjects();
708 
709 	FASTBOOL HasTransparentObjects( sal_Bool bCheckForAlphaChannel = sal_False ) const;
710 
711 	SdrOutliner* createOutliner( sal_uInt16 nOutlinerMode );
712 	void disposeOutliner( SdrOutliner* pOutliner );
713 
IsWriter() const714 	sal_Bool IsWriter() const { return !bMyPool; }
715 
716 	/** returns the numbering type that is used to format page fields in drawing shapes */
717 	virtual SvxNumType GetPageNumType() const;
718 
719 	/** copies the items from the source set to the destination set. Both sets must have
720 		same ranges but can have different pools. If pNewModel is optional. If it is null,
721 		this model is used. */
722 
723 	void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel );
724 
725 	bool IsInDestruction() const;
726 
727     static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId();
728 
GetImageMapForObject(SdrObject *)729 	virtual ImageMap* GetImageMapForObject(SdrObject*){return NULL;};
GetHyperlinkCount(SdrObject *)730 	virtual sal_Int32 GetHyperlinkCount(SdrObject*){return 0;}
731 
732 	/** enables (true) or disables (false) recording of undo actions
733 		If undo actions are added while undo is disabled, they are deleted.
734 		Disabling undo does not clear the current undo buffer! */
735 	void EnableUndo( bool bEnable );
736 
737 	/** returns true if undo is currently enabled
738 		This returns false if undo was disabled using EnableUndo( false ) and
739 		also during the runtime of the Undo() and Redo() methods. */
740 	bool IsUndoEnabled() const;
741 };
742 
743 typedef tools::WeakReference< SdrModel > SdrModelWeakRef;
744 
745 ////////////////////////////////////////////////////////////////////////////////////////////////////
746 
747 #endif //_SVDMODEL_HXX
748 
749 /* /////////////////////////////////////////////////////////////////////////////////////////////////
750             +-----------+
751 			| SdrModel  |
752             +--+------+-+
753                |      +-----------+
754           +----+-----+            |
755 		  |   ...    |            |
756      +----+---+ +----+---+  +-----+--------+
757 	 |SdrPage | |SdrPage |  |SdrLayerAdmin |
758      +---+----+ +-+--+--++  +---+-------+--+
759          |        |  |  |       |       +-------------------+
760     +----+----+           +-----+-----+             +-------+-------+
761 	|   ...   |           |    ...    |             |      ...      |
762 +---+---+ +---+---+  +----+----+ +----+----+  +-----+------+ +------+-----+
763 |SdrObj | |SdrObj |  |SdrLayer | |SdrLayer |  |SdrLayerSet | |SdrLayerSet |
764 +-------+ +-------+  +---------+ +---------+  +------------+ +------------+
765 Die Klasse SdrModel ist der Kopf des Datenmodells der StarView Drawing-Engine.
766 
767 ///////////////////////////////////////////////////////////////////////////////////////////////// */
768 
769