Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_svx / svdmodel.hxx
blobea363006b0e359851bb0db5f97f40a856ed2ff55
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: svdmodel.hxx,v $
10 * $Revision: 1.12 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SVDMODEL_HXX
32 #define _SVDMODEL_HXX
34 #ifndef _CPPUHELPER_WEAKREF_HXX_
35 #include <cppuhelper/weakref.hxx>
36 #endif
38 #include <bf_so3/svstor.hxx>
40 #ifndef _LINK_HXX //autogen
41 #include <tools/link.hxx>
42 #endif
43 #ifndef _CONTNR_HXX //autogen
44 #include <tools/contnr.hxx>
45 #endif
46 #ifndef _MAPMOD_HXX //autogen
47 #include <vcl/mapmod.hxx>
48 #endif
49 #ifndef _SFXBRDCST_HXX //autogen
50 #include <bf_svtools/brdcst.hxx>
51 #endif
52 #ifndef _STRING_HXX //autogen
53 #include <tools/string.hxx>
54 #endif
55 #ifndef _DATETIME_HXX //autogen
56 #include <tools/datetime.hxx>
57 #endif
58 #ifndef _SFXHINT_HXX //autogen
59 #include <bf_svtools/hint.hxx>
60 #endif
62 #ifndef _SVX_PAGEITEM_HXX
63 #include <bf_svx/pageitem.hxx>
64 #endif
66 #ifndef _SV_FIELD_HXX
67 #include <vcl/field.hxx>
68 #endif
70 class OutputDevice;
72 #ifndef _SVDTYPES_HXX
73 #include <bf_svx/svdtypes.hxx> // fuer enum RepeatFuncts
74 #endif
76 #ifndef _SV_FIELD_HXX //autogen
77 #include <vcl/field.hxx>
78 #endif
80 #include <vos/ref.hxx>
81 class AutoTimer;
82 class SotStorage;
83 namespace binfilter {
85 class SvNumberFormatter;
87 class SvStorageRef;
88 class SvPersist;
89 class SfxItemPool;
90 class SfxItemSet;
91 class SfxRepeatTarget;
92 class SfxStyleSheet;
93 class SfxStyleSheetBasePool;
94 class SfxUndoAction;
96 #if defined(UNX) || defined(WIN) || defined(WNT)
97 #define DEGREE_CHAR ((sal_Unicode)176) /* 0xB0 = Ansi */
98 #endif
100 #if defined(DOS) || defined(OS2)
101 #define DEGREE_CHAR ((sal_Unicode)248) /* 0xF8 = IBM PC (Erw. ASCII) */
102 #endif
104 #ifndef DEGREE_CHAR
105 #error unbekannte Plattrorm
106 #endif
108 class SdrOutliner;
109 class SdrIOHeader;
110 class SdrLayerAdmin;
111 class SdrObjList;
112 class SdrObject;
113 class SdrPage;
114 class SdrPageView;
115 class SdrTextObj;
116 class SdrUndoAction;
117 class SdrUndoGroup;
118 class SvxLinkManager;
119 class XBitmapList;
120 class XBitmapTable;
121 class XColorTable;
122 class XDashList;
123 class XDashTable;
124 class XGradientList;
125 class XGradientTable;
126 class XHatchList;
127 class XHatchTable;
128 class XLineEndList;
129 class XLineEndTable;
130 class SvxForbiddenCharactersTable;
131 class SdrOutlinerCache;
133 ////////////////////////////////////////////////////////////////////////////////////////////////////
135 #define SDR_SWAPGRAPHICSMODE_NONE 0x00000000
136 #define SDR_SWAPGRAPHICSMODE_TEMP 0x00000001
137 #define SDR_SWAPGRAPHICSMODE_DOC 0x00000002
138 #define SDR_SWAPGRAPHICSMODE_PURGE 0x00000100
139 #define SDR_SWAPGRAPHICSMODE_DEFAULT (SDR_SWAPGRAPHICSMODE_TEMP|SDR_SWAPGRAPHICSMODE_DOC|SDR_SWAPGRAPHICSMODE_PURGE)
141 ////////////////////////////////////////////////////////////////////////////////////////////////////
143 enum SdrHintKind
145 HINT_UNKNOWN, // Unbekannt
146 HINT_LAYERCHG, // Layerdefinition geaendert
147 HINT_LAYERORDERCHG, // Layerreihenfolge geaendert (Insert/Remove/ChangePos)
148 HINT_LAYERSETCHG, // Layerset geaendert
149 HINT_LAYERSETORDERCHG,// Layersetreihenfolge geaendert (Insert/Remove/ChangePos)
150 HINT_PAGECHG, // Page geaendert
151 HINT_PAGEORDERCHG, // Reihenfolge der Seiten (Zeichenseiten oder Masterpages) geaendert (Insert/Remove/ChangePos)
152 HINT_OBJCHG, // Objekt geaendert
153 HINT_OBJINSERTED, // Neues Zeichenobjekt eingefuegt
154 HINT_OBJREMOVED, // Zeichenobjekt aus Liste entfernt
155 HINT_MODELCLEARED, // gesamtes Model geloescht (keine Pages mehr da). not impl.
156 HINT_OBJLISTCLEARED, // ObjList geloescht (ohne Undo)
157 HINT_REFDEVICECHG, // RefDevice geaendert
158 HINT_DEFAULTTABCHG, // Default Tabulatorweite geaendert
159 HINT_DEFFONTHGTCHG, // Default FontHeight geaendert
160 HINT_MODELSAVED, // Dokument wurde gesichert
161 HINT_CONTROLINSERTED, // UnoControl wurde eingefuegt
162 HINT_CONTROLREMOVED, // UnoControl wurde entfernt
163 HINT_SWITCHTOPAGE, // #94278# UNDO/REDO at an object evtl. on another page
164 HINT_OBJLISTCLEAR, // Is called before an SdrObjList will be cleared
165 HINT_BEGEDIT, // Is called after the object has entered text edit mode
166 HINT_ENDEDIT // Is called after the object has left text edit mode
169 class SdrHint: public SfxHint {
170 public:
171 Rectangle aRect;
172 const SdrPage* pPage;
173 const SdrObject* pObj;
174 const SdrObjList* pObjList;
175 FASTBOOL bNeedRepaint;
176 SdrHintKind eHint;
177 FASTBOOL bAniRepaint;
178 public:
179 TYPEINFO();
180 SdrHint(): pPage(NULL),pObj(NULL),pObjList(NULL),bNeedRepaint(FALSE),eHint(HINT_UNKNOWN),bAniRepaint(FALSE) {}
181 SdrHint(SdrHintKind eNewHint): pPage(NULL),pObj(NULL),pObjList(NULL),bNeedRepaint(FALSE),eHint(eNewHint),bAniRepaint(FALSE) {}
182 SdrHint(const SdrPage& rNewPage);
183 SdrHint(const SdrObject& rNewObj);
184 SdrHint(const SdrObject& rNewObj, const Rectangle& rRect);
185 void SetPage(const SdrPage* pNewPage) { pPage=pNewPage; }
186 void SetObjList(const SdrObjList* pNewOL) { pObjList=pNewOL; }
187 void SetObject(const SdrObject* pNewObj) { pObj=pNewObj; }
188 void SetKind(SdrHintKind eNewKind) { eHint=eNewKind; }
189 void SetRect(const Rectangle& rNewRect) { aRect=rNewRect; }
190 void SetNeedRepaint(FASTBOOL bOn) { bNeedRepaint=bOn; }
191 void SetAniRepaint(FASTBOOL bOn) { bAniRepaint=bOn; }
192 const SdrPage* GetPage() const { return pPage; }
193 const SdrObjList* GetObjList() const { return pObjList; }
194 const SdrObject* GetObject() const { return pObj; }
195 SdrHintKind GetKind() const { return eHint; }
196 const Rectangle& GetRect() const { return aRect; }
197 FASTBOOL IsNeedRepaint() const { return bNeedRepaint; }
198 FASTBOOL IsAniRepaint() const { return bAniRepaint; }
201 ////////////////////////////////////////////////////////////////////////////////////////////////////
203 // Flag um nach dem Laden des Pools Aufzuraeumen (d.h. die RefCounts
204 // neu zu bestimmen und unbenutztes wegzuwerfen). FALSE == aktiv
205 #define LOADREFCOUNTS (FALSE)
207 class SdrModelInfo {
208 public:
209 DateTime aCreationDate;
210 DateTime aLastWriteDate;
211 DateTime aLastReadDate;
212 DateTime aLastPrintDate;
213 rtl_TextEncoding eCreationCharSet;
214 rtl_TextEncoding eLastWriteCharSet;
215 rtl_TextEncoding eLastReadCharSet;
216 UINT16 nCompressMode;
217 UINT16 nNumberFormat;
219 /* old SV-stuff, there is no possibility to determine
220 this informations in another way
221 GUIType eCreationGUI;
222 CPUType eCreationCPU;
223 SystemType eCreationSys;
224 GUIType eLastWriteGUI;
225 CPUType eLastWriteCPU;
226 SystemType eLastWriteSys;
227 GUIType eLastReadGUI;
228 CPUType eLastReadCPU;
229 SystemType eLastReadSys;
232 public:
233 // bei bInit=TRUE werden die Member mit den aktuellen
234 // Informationen gesetzt, sonst gibts nur Defaults.
235 SdrModelInfo(FASTBOOL bInit=FALSE);
236 friend SvStream& operator<<(SvStream& rOut, const SdrModelInfo& rModInfo);
237 friend SvStream& operator>>(SvStream& rIn, SdrModelInfo& rModInfo);
240 struct SdrDocumentStreamInfo
242 FASTBOOL mbDeleteAfterUse;
243 String maUserData;
244 SvStorageRef* mpStorageRef;
245 BOOL mbDummy1 : 1;
248 class SdrModel: public SfxBroadcaster {
249 protected:
250 SdrModelInfo aInfo;
251 DateTime aReadDate; // Datum des Einstreamens
252 Container aMaPag; // StammSeiten (Masterpages)
253 Container aPages;
254 Link aUndoLink; // Link fuer einen NotifyUndo-Handler
255 Link aIOProgressLink;
256 String aTablePath;
257 String aLoadedModelFN; // fuer Referenzen auf ein anderes Dok
258 Size aMaxObjSize; // z.B. fuer Autogrowing Text
259 Fraction aObjUnit; // ?Beschreibung der Koordinateneinheiten
260 MapUnit eObjUnit; // ?fuer ClipBoard, Drag&Drop, ...
261 FieldUnit eUIUnit; // ?Masseinheit
262 Fraction aUIScale; // ?Masstab (z.B. 1/1000)
263 String aUIUnitStr; // ?fuer die UI wird von ImpSetUIUnit() gesetzt
264 Fraction aUIUnitFact; // ?(Statuszeile) wird von ImpSetUIUnit() gesetzt
265 int nUIUnitKomma; // ? wird von ImpSetUIUnit() gesetzt
266 FASTBOOL bUIOnlyKomma; // ? wird von ImpSetUIUnit() gesetzt
268 SdrLayerAdmin* pLayerAdmin;
269 SfxItemPool* pItemPool;
270 FASTBOOL bMyPool; // zum Aufraeumen von pMyPool ab 303a
271 SvPersist* pPersist;
272 SdrOutliner* pDrawOutliner; // ein Outliner zur Textausgabe
273 SdrOutliner* pHitTestOutliner;// ein Outliner fuer den HitTest
274 ULONG nDefTextHgt; // Default Texthoehe in logischen Einheiten
275 OutputDevice* pRefOutDev; // ReferenzDevice fuer die EditEngine
276 ULONG nProgressAkt; // fuer den
277 ULONG nProgressMax; // ProgressBar-
278 ULONG nProgressOfs; // -Handler
279 SfxStyleSheetBasePool* pStyleSheetPool;
280 SfxStyleSheet* pDefaultStyleSheet;
281 SvxLinkManager* pLinkManager; // LinkManager
282 SdrModel* pLoadedModel; // fuer Referenzen auf ein anderes Dok
283 Container* pUndoStack;
284 Container* pRedoStack;
285 SdrUndoGroup* pAktUndoGroup; // Fuer mehrstufige
286 USHORT nUndoLevel; // Undo-Klammerung
287 USHORT nProgressPercent; // fuer den ProgressBar-Handler
288 USHORT nLoadVersion; // Versionsnummer der geladenen Datei
289 FASTBOOL bExtColorTable; // Keinen eigenen ColorTable
290 FASTBOOL bChanged;
291 FASTBOOL bInfoChanged;
292 FASTBOOL bPagNumsDirty;
293 FASTBOOL bMPgNumsDirty;
294 FASTBOOL bPageNotValid; // TRUE=Doc ist nur ObjektTraeger. Page ist nicht gueltig.
295 FASTBOOL bSavePortable; // Metafiles portabel speichern
296 FASTBOOL bNoBitmapCaching; // Bitmaps fuer Screenoutput cachen
297 FASTBOOL bLoading; // Model wird gerade eingestreamt
298 FASTBOOL bStreamingSdrModel; // Gestreamt wird ein SdrModel, ohne applikationsspeziefische Daten
299 FASTBOOL bReadOnly;
300 FASTBOOL bTransparentTextFrames;
301 FASTBOOL bSaveCompressed;
302 FASTBOOL bSwapGraphics;
303 FASTBOOL bPasteResize; // Objekte werden gerade resized wegen Paste mit anderem MapMode
304 FASTBOOL bSaveOLEPreview; // save preview metafile of OLE objects
305 UINT16 nStreamCompressMode; // Komprimiert schreiben?
306 UINT16 nStreamNumberFormat;
307 UINT16 nDefaultTabulator;
308 SdrPageView* pAktPaintPV;
309 UINT32 nMaxUndoCount;
310 FASTBOOL bSaveNative;
311 BOOL bStarDrawPreviewMode;
312 UINT16 nStarDrawPreviewMasterPageNum;
313 // Reserven fuer kompatible Erweiterungen
314 //-/ SfxItemPool* pUndoItemPool;
315 SotStorage* pModelStorage;
316 SvxForbiddenCharactersTable* mpForbiddenCharactersTable;
317 ULONG nSwapGraphicsMode;
319 SdrOutlinerCache* mpOutlinerCache;
320 UINT32 nReserveUInt3;
321 UINT16 mnCharCompressType;
322 UINT16 nReserveUInt5;
323 UINT16 nReserveUInt6;
324 UINT16 nReserveUInt7;
325 FASTBOOL mbModelLocked;
326 FASTBOOL mbKernAsianPunctuation;
327 FASTBOOL mbInDestruction;
329 // Zeiger auf Paletten, Listen und Tabellen
330 XColorTable* pColorTable;
331 XDashList* pDashList;
332 XLineEndList* pLineEndList;
333 XHatchList* pHatchList;
334 XGradientList* pGradientList;
335 XBitmapList* pBitmapList;
337 // New src638: NumberFormatter for drawing layer and
338 // method for getting it. It is constructed on demand
339 // and destroyed when destroying the SdrModel.
340 SvNumberFormatter* mpNumberFormatter;
341 public:
342 protected:
344 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoModel();
346 private:
347 // Nicht implementiert:
348 SdrModel(const SdrModel& rSrcModel);
349 #if _SOLAR__PRIVATE
350 // Zaehlt alle rauszustreamenden Objekte
351 ULONG ImpCountAllSteamComponents() const;
353 void ImpSetUIUnit();
354 void ImpSetOutlinerDefaults( SdrOutliner* pOutliner, BOOL bInit = FALSE );
355 void ImpReformatAllTextObjects();
356 void ImpReformatAllEdgeObjects(); // #103122#
357 void ImpCreateTables();
358 void ImpCtor(SfxItemPool* pPool, SvPersist* pPers, FASTBOOL bUseExtColorTable,
359 FASTBOOL bLoadRefCounts = TRUE);
361 #endif // __PRIVATE
363 // this is a weak reference to a possible living api wrapper for this model
364 ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > mxUnoModel;
366 public:
367 #if _SOLAR__PRIVATE
368 FASTBOOL IsPasteResize() const { return bPasteResize; }
369 void SetPasteResize(FASTBOOL bOn) { bPasteResize=bOn; }
370 #endif // __PRIVATE
371 TYPEINFO();
372 // Steckt man hier seinen eigenen Pool rein, so wird die Klasse auch
373 // Aktionen an ihm vornehmen (Put(),Remove()). Bei Zerstoerung von
374 // SdrModel wird dieser Pool ver delete geloescht!
375 // Gibt man den Konstruktor stattdessen eine NULL mit, so macht sich
376 // die Klasse einen eigenen Pool (SdrItemPool), den sie dann auch im
377 // Destruktor zerstoert.
378 // Bei Verwendung eines eigenen Pools ist darauf zu achten, dass dieser
379 // von SdrItemPool abgeleitet ist, falls man von SdrAttrObj abgeleitete
380 // Zeichenobjekte verwenden moechte. Setzt man degegen nur vom abstrakten
381 // Basisobjekt SdrObject abgeleitete Objekte ein, so ist man frei in der
382 // Wahl des Pools.
383 SdrModel(SfxItemPool* pPool=NULL, SvPersist* pPers=NULL, INT32 bLoadRefCounts = LOADREFCOUNTS);
384 SdrModel(const String& rPath, SfxItemPool* pPool=NULL, SvPersist* pPers=NULL, INT32 bLoadRefCounts = LOADREFCOUNTS);
385 SdrModel(const String& rPath, SfxItemPool* pPool, SvPersist* pPers, FASTBOOL bUseExtColorTable, INT32 bLoadRefCounts = LOADREFCOUNTS);
386 virtual ~SdrModel();
387 void Clear();
388 // Intern genutzt:
389 void DoProgress(ULONG nVal);
390 void IncProgress() { DoProgress(nProgressAkt+1); }
391 // DokumentInfo des Model erfragen
392 const SdrModelInfo& GetInfo() const { return aInfo; }
393 SdrModelInfo& GetInfo() { return aInfo; }
394 // Hier kann man erfragen, ob das Model gerade eingrstreamt wird
395 FASTBOOL IsLoading() const { return bLoading; }
396 // Um ein SdrModel im Office-weiten Format ins Clipboard zu stellen darf
397 // der entsprechende Stream keine applikationsspeziefischen Daten
398 // beinhalten. Ableitungen von SdrModel/SdrPage muessen dieses Flag beim
399 // Streamen abfragen und entspsrechend reagieren.
400 FASTBOOL IsStreamingSdrModel() const { return bStreamingSdrModel; }
401 void SetStreamingSdrModel(FASTBOOL bOn) { bStreamingSdrModel=bOn; }
402 // Muss z.B. ueberladen werden, um das Swappen/LoadOnDemand von Grafiken
403 // zu ermoeglichen. Wird rbDeleteAfterUse auf TRUE gesetzt, so wird
404 // die SvStream-Instanz vom Aufrufer nach Gebrauch destruiert.
405 // Wenn diese Methode NULL liefert, wird zum Swappen eine temporaere
406 // Datei angelegt.
407 // Geliefert werden muss der Stream, aus dem das Model geladen wurde
408 // bzw. in den es zuletzt gespeichert wurde.
409 virtual SvStream* GetDocumentStream( SdrDocumentStreamInfo& rStreamInfo ) const;
410 // Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln.
411 // Nichtpersistente Objekte aus dem Model entfernen. Dies sind einerseits
412 // Objekte die bei SdrObject::IsNotPersistent() ein FALSE liefert. Wurde
413 // zuvor SetStreamingSdrModel(TRUE) gerufen, so werden auch OLE-Objekte
414 // entfernt. Fuer #44515#.
415 // Wer sich von SdrPage ableitet muss sich auch von SdrModel ableiten
416 // und diese beiden VM AllocPage() und AllocModel() ueberladen...
417 virtual SdrPage* AllocPage(FASTBOOL bMasterPage);
418 virtual SdrModel* AllocModel() const;
419 // Auch diese Methode sollte dann ueberladen werden. Ein gelinktes
420 // Gruppenobjekt verwendet diesen Aufruf z.B. um sich zu aktuallisieren.
421 // Die Methode muss ein neues Model alloziieren und aus der uebergebenen
422 // Datei laden. Bei Misserfolg kann die Methode NULL liefern.
423 virtual void DisposeLoadedModels();
425 // Aenderungen an den Layern setzen das Modified-Flag und broadcasten am Model!
426 const SdrLayerAdmin& GetLayerAdmin() const { return *pLayerAdmin; }
427 SdrLayerAdmin& GetLayerAdmin() { return *pLayerAdmin; }
429 const SfxItemPool& GetItemPool() const { return *pItemPool; }
430 SfxItemPool& GetItemPool() { return *pItemPool; }
432 //-/ const SfxItemPool& GetUndoItemPool() const { return *pUndoItemPool; }
433 //-/ SfxItemPool& GetUndoItemPool() { return *pUndoItemPool; }
435 SdrOutliner& GetDrawOutliner(const SdrTextObj* pObj=NULL) const;
436 SdrOutliner& GetHitTestOutliner() const { return *pHitTestOutliner; }
437 // Die TextDefaults (Font,Hoehe,Farbe) in ein Set putten
438 void SetTextDefaults() const;
439 static void SetTextDefaults( SfxItemPool* pItemPool, ULONG nDefTextHgt );
441 // ReferenzDevice fuer die EditEngine
442 void SetRefDevice(OutputDevice* pDev);
443 OutputDevice* GetRefDevice() const { return pRefOutDev; }
444 // Wenn ein neuer MapMode am RefDevice gesetzt wird o.ae.
445 void RefDeviceChanged(); // noch nicht implementiert
446 // Default-Schrifthoehe in logischen Einheiten
447 void SetDefaultFontHeight(ULONG nVal);
448 ULONG GetDefaultFontHeight() const { return nDefTextHgt; }
449 // Default-Tabulatorweite fuer die EditEngine
450 void SetDefaultTabulator(USHORT nVal);
451 USHORT GetDefaultTabulator() const { return nDefaultTabulator; }
453 // Der DefaultStyleSheet wird jedem Zeichenobjekt verbraten das in diesem
454 // Model eingefuegt wird und kein StyleSheet gesetzt hat.
455 SfxStyleSheet* GetDefaultStyleSheet() const { return pDefaultStyleSheet; }
456 void SetDefaultStyleSheet(SfxStyleSheet* pDefSS) { pDefaultStyleSheet=pDefSS; }
458 SvxLinkManager* GetLinkManager() { return pLinkManager; }
459 void SetLinkManager(SvxLinkManager* pLinkMgr) { pLinkManager = pLinkMgr; }
461 SvPersist* GetPersist() const { return pPersist; }
462 void ClearPersist() { pPersist = 0; }
463 void SetPersist( SvPersist *p ) { pPersist = p; }
465 // Masseinheit fuer die Zeichenkoordinaten.
466 // Default ist 1 logische Einheit = 1/100mm (Unit=MAP_100TH_MM, Fract=(1,1)).
467 // Beispiele:
468 // MAP_POINT, Fraction(72,1) : 1 log Einh = 72 Point = 1 Inch
469 // MAP_POINT, Fraction(1,20) : 1 log Einh = 1/20 Point = 1 Twip
470 // MAP_TWIP, Fraction(1,1) : 1 log Einh = 1 Twip
471 // MAP_100TH_MM, Fraction(1,10) : 1 log Einh = 1/1000mm
472 // MAP_MM, Fraction(1000,1) : 1 log Einh = 1000mm = 1m
473 // MAP_CM, Fraction(100,1) : 1 log Einh = 100cm = 1m
474 // MAP_CM, Fraction(100,1) : 1 log Einh = 100cm = 1m
475 // MAP_CM, Fraction(100000,1): 1 log Einh = 100000cm = 1km
476 // (PS: Lichtjahre sind somit also nicht darstellbar).
477 // Die Skalierungseinheit wird benoetigt, damit die Engine das Clipboard
478 // mit den richtigen Groessen beliefern kann.
479 MapUnit GetScaleUnit() const { return eObjUnit; }
480 void SetScaleUnit(MapUnit eMap);
481 const Fraction& GetScaleFraction() const { return aObjUnit; }
482 void SetScaleFraction(const Fraction& rFrac);
483 // Beides gleichzeitig setzen ist etwas performanter
484 void SetScaleUnit(MapUnit eMap, const Fraction& rFrac);
486 // Maximale Groesse z.B. fuer Autogrowing-Texte
487 const Size& GetMaxObjSize() const { return aMaxObjSize; }
488 void SetMaxObjSize(const Size& rSiz) { aMaxObjSize=rSiz; }
490 // Damit die View! in der Statuszeile vernuenftige Zahlen anzeigen kann:
491 // Default ist mm.
492 void SetUIUnit(FieldUnit eUnit);
493 FieldUnit GetUIUnit() const { return eUIUnit; }
494 // Der Masstab der Zeichnung. Default 1/1.
495 void SetUIScale(const Fraction& rScale);
496 const Fraction& GetUIScale() const { return aUIScale; }
497 // Beides gleichzeitig setzen ist etwas performanter
498 void SetUIUnit(FieldUnit eUnit, const Fraction& rScale);
500 const Fraction& GetUIUnitFact() const { return aUIUnitFact; }
501 const String& GetUIUnitStr() const { return aUIUnitStr; }
502 int GetUIUnitKomma() const { return nUIUnitKomma; }
503 FASTBOOL IsUIOnlyKomma() const { return bUIOnlyKomma; }
505 void TakeUnitStr(FieldUnit eUnit, String& rStr) const;
506 void TakeMetricStr(long nVal, String& rStr, FASTBOOL bNoUnitChars=FALSE, sal_Int32 nNumDigits = -1) const;
508 // RecalcPageNums wird idR. nur von der Page gerufen.
509 FASTBOOL IsPagNumsDirty() const { return bPagNumsDirty; };
510 FASTBOOL IsMPgNumsDirty() const { return bMPgNumsDirty; };
511 void RecalcPageNums(FASTBOOL bMaster);
512 // Nach dem Insert gehoert die Page dem SdrModel.
513 virtual void InsertPage(SdrPage* pPage, USHORT nPos=0xFFFF);
514 virtual void DeletePage(USHORT nPgNum);
515 // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
516 virtual SdrPage* RemovePage(USHORT nPgNum);
517 const SdrPage* GetPage(USHORT nPgNum) const { return (SdrPage*)(aPages.GetObject(nPgNum)); }
518 SdrPage* GetPage(USHORT nPgNum) { return (SdrPage*)(aPages.GetObject(nPgNum)); }
519 //USHORT GetPageNum(const SdrPage* pPage) const;
520 USHORT GetPageCount() const { return USHORT(aPages.Count()); }
521 // Masterpages
522 virtual void InsertMasterPage(SdrPage* pPage, USHORT nPos=0xFFFF);
523 virtual void DeleteMasterPage(USHORT nPgNum);
524 // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert)
525 virtual SdrPage* RemoveMasterPage(USHORT nPgNum);
526 virtual void MoveMasterPage(USHORT nPgNum, USHORT nNewPos);
527 const SdrPage* GetMasterPage(USHORT nPgNum) const { return (SdrPage*)(aMaPag.GetObject(nPgNum)); }
528 SdrPage* GetMasterPage(USHORT nPgNum) { return (SdrPage*)(aMaPag.GetObject(nPgNum)); }
529 //USHORT GetMasterPageNum(const SdrPage* pPage) const;
530 USHORT GetMasterPageCount() const { return USHORT(aMaPag.Count()); }
532 // Modified-Flag. Wird automatisch gesetzt, wenn an den Pages oder
533 // Zeichenobjekten was geaendert wird. Zuruecksetzen muss man es
534 // jedoch selbst (z.B. bei Save() ...).
535 FASTBOOL IsChanged() const { return bChanged; }
536 virtual void SetChanged(FASTBOOL bFlg=TRUE);
538 // PageNotValid bedeutet, dass das Model lediglich Objekte traegt die zwar
539 // auf einer Page verankert sind, die Page aber nicht gueltig ist. Diese
540 // Kennzeichnung wird fuers Clipboard/Drag&Drop benoetigt.
541 FASTBOOL IsPageNotValid() const { return bPageNotValid; }
542 void SetPageNotValid(FASTBOOL bJa=TRUE) { bPageNotValid=bJa; }
544 // Schaltet man dieses Flag auf TRUE, so werden Grafikobjekte
545 // portabel gespeichert. Es findet dann beim Speichern ggf.
546 // eine implizite Wandlung von Metafiles statt.
547 // Default=FALSE. Flag ist nicht persistent.
548 FASTBOOL IsSavePortable() const { return bSavePortable; }
549 void SetSavePortable(FASTBOOL bJa=TRUE) { bSavePortable=bJa; }
551 // Schaltet man dieses Flag auf TRUE, so werden
552 // Pixelobjekte (stark) komprimiert gespeichert.
553 // Default=FALSE. Flag ist nicht persistent.
554 FASTBOOL IsSaveCompressed() const { return bSaveCompressed; }
555 void SetSaveCompressed(FASTBOOL bJa=TRUE) { bSaveCompressed=bJa; }
557 // Schaltet man dieses Flag auf TRUE, so werden
558 // Grafikobjekte mit gesetztem Native-Link
559 // native gespeichert.
560 // Default=FALSE. Flag ist nicht persistent.
561 FASTBOOL IsSaveNative() const { return bSaveNative; }
562 void SetSaveNative(FASTBOOL bJa=TRUE) { bSaveNative=bJa; }
564 // Schaltet man dieses Flag auf TRUE, so werden die Grafiken
565 // von Grafikobjekten:
566 // - beim Laden eines Dokuments nicht sofort mitgeladen,
567 // sondern erst wenn sie gebraucht (z.B. angezeigt) werden.
568 // - ggf. wieder aus dem Speicher geworfen, falls Sie gerade
569 // nicht benötigt werden.
570 // Damit das funktioniert, muss die virtuelle Methode
571 // GetDocumentStream() ueberladen werden.
572 // Default=FALSE. Flag ist nicht persistent.
573 FASTBOOL IsSwapGraphics() const { return bSwapGraphics; }
574 void SetSwapGraphics(FASTBOOL bJa=TRUE);
575 void SetSwapGraphicsMode(ULONG nMode) { nSwapGraphicsMode = nMode; }
576 ULONG GetSwapGraphicsMode() const { return nSwapGraphicsMode; }
578 FASTBOOL IsSaveOLEPreview() const { return bSaveOLEPreview; }
579 void SetSaveOLEPreview( FASTBOOL bSet) { bSaveOLEPreview = bSet; }
581 // Damit die Bildschirmausgabe von Bitmaps (insbesondere bei gedrehten)
582 // etwas schneller wird, werden sie gecachet. Diesen Cache kann man mit
583 // diesem Flag ein-/ausschalten. Beim naechsten Paint wird an den Objekten
584 // dann ggf. ein Image gemerkt bzw. freigegeben. Wandert ein Bitmapobjekt
585 // in's Undo, so wird der Cache fuer dieses Objekt sofort ausgeschaltet
586 // (Speicher sparen).
587 // Default=Cache eingeschaltet. Flag ist nicht persistent.
588 FASTBOOL IsBitmapCaching() const { return !bNoBitmapCaching; }
589 void SetBitmapCaching(FASTBOOL bJa=TRUE) { bNoBitmapCaching=!bJa; }
591 // Defaultmaessig (FALSE) kann man Textrahmen ohne Fuellung durch
592 // Mausklick selektieren. Nach Aktivierung dieses Flags trifft man sie
593 // nur noch in dem Bereich, wo sich auch tatsaechlich Text befindet.
594 FASTBOOL IsPickThroughTransparentTextFrames() const { return bTransparentTextFrames; }
595 void SetPickThroughTransparentTextFrames(FASTBOOL bOn) { bTransparentTextFrames=bOn; }
597 // Die Seite, die gerade an einer View gepaintet wird.
598 SdrPageView* GetPaintingPageView() const { return pAktPaintPV; }
599 void SetPaintingPageView(SdrPageView* pPV) { pAktPaintPV=pPV; }
601 // Darf denn das Model ueberhaupt veraendert werden?
602 // Wird nur von den Possibility-Methoden der View ausgewerdet.
603 // Direkte Manipulationen am Model, ... berueksichtigen dieses Flag nicht.
604 // Sollte ueberladen werden und entsprechend des ReadOnly-Status des Files
605 // TRUE oder FALSE liefern (Methode wird oeffters gerufen, also ein Flag
606 // verwenden!).
607 virtual FASTBOOL IsReadOnly() const;
608 virtual void SetReadOnly(FASTBOOL bYes);
610 // Vermischen zweier SdrModel. Zu beachten sei, dass rSourceModel nicht
611 // const ist. Die Pages werden beim einfuegen nicht kopiert, sondern gemoved.
612 // rSourceModel ist anschliessend u.U. weitgehend leer.
613 // nFirstPageNum,nLastPageNum: Die aus rSourceModel zu uebernehmenden Seiten
614 // nDestPos..................: Einfuegeposition
615 // bMergeMasterPages.........: TRUE =benoetigte MasterPages werden aus
616 // rSourceModel ebenfalls uebernommen
617 // FALSE=Die MasterPageDescriptoren der Seiten
618 // aus rSourceModel werden auf die
619 // vorhandenen MasterPages gemappt.
620 // bUndo.....................: Fuer das Merging wird eine UndoAction generiert.
621 // Undo ist nur fuer das ZielModel, nicht fuer
622 // rSourceModel.
623 // bTreadSourceAsConst.......: TRUE=Das SourceModel wird nicht veraendert,.
624 // d.h die Seiten werden kopiert.
626 // Ist wie Merge(SourceModel=DestModel,nFirst,nLast,nDest,FALSE,FALSE,bUndo,!bMoveNoCopy);
628 // Mit BegUndo() / EndUndo() ist es moeglich beliebig viele UndoActions
629 // beliebig tief zu klammern. Als Kommentar der
630 // UndoAction wird der des ersten BegUndo(String) aller Klammerungen
631 // verwendet. Der NotifyUndoActionHdl wird in diesem Fall erst beim letzten
632 // EndUndo() gerufen. Bei einer leeren Klammerung wird keine UndoAction
633 // generiert.
634 // Alle direkten Aktionen am SdrModel erzeugen keine UndoActions, die
635 // Aktionen an der SdrView dagegen generieren solche.
636 void AddUndo(SdrUndoAction* pUndo);
637 USHORT GetUndoBracketLevel() const { return nUndoLevel; }
638 const SdrUndoGroup* GetAktUndoGroup() const { return pAktUndoGroup; }
639 // nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
641 // Das Undo-Managment findet nur statt, wenn kein NotifyUndoAction-Handler
642 // gesetzt ist.
643 // Default ist 16. Minimaler MaxUndoActionCount ist 1!
644 void SetMaxUndoActionCount(ULONG nAnz);
645 ULONG GetMaxUndoActionCount() const { return nMaxUndoCount; }
646 void ClearUndoBuffer();
647 // UndoAction(0) ist die aktuelle (also die zuletzt eingegangene)
648 ULONG GetUndoActionCount() const { return pUndoStack!=NULL ? pUndoStack->Count() : 0; }
649 const SfxUndoAction* GetUndoAction(ULONG nNum) const { return (SfxUndoAction*)(pUndoStack!=NULL ? pUndoStack->GetObject(nNum) : NULL); }
650 // RedoAction(0) ist die aktuelle (also die des letzten Undo)
651 ULONG GetRedoActionCount() const { return pRedoStack!=NULL ? pRedoStack->Count() : 0; }
652 const SfxUndoAction* GetRedoAction(ULONG nNum) const { return (SfxUndoAction*)(pRedoStack!=NULL ? pRedoStack->GetObject(nNum) : NULL); }
655 // Hier kann die Applikation einen Handler setzen, der die auflaufenden
656 // UndoActions einsammelt. Der Handler hat folgendes Aussehen:
657 // void __EXPORT NotifyUndoActionHdl(SfxUndoAction* pUndoAction);
658 // Beim Aufruf des Handlers findet eine Eigentumsuebereignung statt; die
659 // UndoAction gehoert somit dem Handler, nicht mehr dem SdrModel.
660 void SetNotifyUndoActionHdl(const Link& rLink) { aUndoLink=rLink; }
661 const Link& GetNotifyUndoActionHdl() const { return aUndoLink; }
663 // Hier kann man einen Handler setzen der beim Streamen mehrfach gerufen
664 // wird und ungefaehre Auskunft ueber den Fortschreitungszustand der
665 // Funktion gibt. Der Handler muss folgendes Aussehen haben:
666 // void __EXPORT class::IOProgressHdl(const USHORT& nPercent);
667 // Der erste Aufruf des Handlers erfolgt grundsaetzlich mit 0, der letzte
668 // mit 100. Dazwischen erfolgen maximal 99 Aufrufe mit Werten 1...99.
669 // Man kann also durchaus bei 0 den Progressbar Initiallisieren und bei
670 // 100 wieder schliessen. Zu beachten sei, dass der Handler auch gerufen
671 // wird, wenn die App Draw-Daten im officeweiten Draw-Exchange-Format
672 // bereitstellt, denn dies geschieht durch streamen in einen MemoryStream.
673 void SetIOProgressHdl(const Link& rLink) { aIOProgressLink=rLink; }
674 const Link& GetIOProgressHdl() const { return aIOProgressLink; }
676 // void AddViewListener(SfxListener& rListener) { AddListener(rListener); }
677 // void RemoveViewListener(SfxListener& rListener) { RemoveListener(rListener); }
679 // Zugriffsmethoden fuer Paletten, Listen und Tabellen
680 void SetColorTable(XColorTable* pTable) { pColorTable=pTable; }
681 XColorTable* GetColorTable() const { return pColorTable; }
682 void SetDashList(XDashList* pList) { pDashList=pList; }
683 XDashList* GetDashList() const { return pDashList; }
684 void SetLineEndList(XLineEndList* pList) { pLineEndList=pList; }
685 XLineEndList* GetLineEndList() const { return pLineEndList; }
686 void SetHatchList(XHatchList* pList) { pHatchList=pList; }
687 XHatchList* GetHatchList() const { return pHatchList; }
688 void SetGradientList(XGradientList* pList) { pGradientList=pList; }
689 XGradientList* GetGradientList() const { return pGradientList; }
690 void SetBitmapList(XBitmapList* pList) { pBitmapList=pList; }
691 XBitmapList* GetBitmapList() const { return pBitmapList; }
693 // Der StyleSheetPool wird der DrawingEngine nur bekanntgemacht.
694 // Zu loeschen hat ihn schliesslich der, der ihn auch konstruiert hat.
695 SfxStyleSheetBasePool* GetStyleSheetPool() const { return pStyleSheetPool; }
696 void SetStyleSheetPool(SfxStyleSheetBasePool* pPool) { pStyleSheetPool = pPool; }
698 // Strings werden beim rausstreamen in den am Stream eingestellten
699 // StreamCharSet konvertiert.
700 // Abgeleitete Klassen mit eigenen persistenten Membern ueberladen
701 // die virtuellen Methoden ReadData() und WriteData().
702 friend SvStream& operator<<(SvStream& rOut, const SdrModel& rMod);
703 // Wenn das Model im Stream in einem fremden CharSet vorliegt
704 // wird beim einstreamen implizit auf den SystemCharSet konvertiert.
705 // Abgeleitete Klassen mit eigenen persistenten Membern ueberladen
706 // die virtuellen Methoden ReadData() und WriteData().
707 friend SvStream& operator>>(SvStream& rIn, SdrModel& rMod);
709 // Stream muss am Anfang des SdrModel stehen. Die FileVersion des im
710 // Stream befindlichen Models muss >=11 sein, ansonsten wird die
711 // ModelInfo nicht geschrieben.
713 // Abgeleitete Klassen ueberladen lediglich die Methoden ReadData() und
714 // WriteData(). Diese werden von den Streamoperatoren des Model gerufen.
715 // Wichtig ist, dass die ueberladen Methoden der abgeleiteten Klasse
716 // als erstes die Methode der Basisklasse rufen, da sonst der CharSet
717 // am Stream nicht korrekt gesetzt wird, ...
718 virtual void WriteData(SvStream& rOut) const;
719 virtual void ReadData(const SdrIOHeader& rHead, SvStream& rIn);
720 // AfterRead wird gerufen, nachdem das gesamte Model eingestreamt
721 // worden ist. Damit ist ein PostProcessing moeglich um beispielsweise
722 // Objektverknuepfungen ueber Surrogate herzustellen o.ae.
723 // Anwendungsbeispiel hierfuer SdrEdgeObj (Objektverbinder)
724 // Der Aufruf erfolgt innerhalb des Streamoperators des Models unmittelbar
725 // nach ReadData.
726 virtual void AfterRead();
728 // Diese Methode fuert einen Konsistenzcheck auf die Struktur des Models
729 // durch. Geprueft wird insbesondere die Verkettung von Verschachtelten
730 // Gruppenobjekten, aber auch Stati wie bInserted sowie Model* und Page*
731 // der Objects, SubLists und Pages. Bei korrekter Struktur liefert die
732 // Methode TRUE, andernfalls FALSE.
733 // Dieser Check steht nur zur Verfuegung, wenn die Engine mit DBG_UTIL
734 // uebersetzt wurde. Andernfalls liefert die Methode immer TRUE. (ni)
736 BOOL IsStarDrawPreviewMode() { return bStarDrawPreviewMode; }
738 SotStorage* GetModelStorage() const { return pModelStorage; }
739 void SetModelStorage( SotStorage* pStor ) { pModelStorage = pStor; }
741 // pre- and postprocessing for objects for saving
742 void PreSave();
743 void PostSave();
745 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoModel();
746 void setUnoModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xModel ) { mxUnoModel = xModel; }
748 // these functions are used by the api to disable repaints during a
749 // set of api calls.
750 BOOL isLocked() const { return mbModelLocked; }
751 void setLock( BOOL bLock );
753 void SetForbiddenCharsTable( vos::ORef<SvxForbiddenCharactersTable> xForbiddenChars );
754 vos::ORef<SvxForbiddenCharactersTable> GetForbiddenCharsTable() const;
756 void SetCharCompressType( UINT16 nType );
757 UINT16 GetCharCompressType() const { return mnCharCompressType; }
759 void SetKernAsianPunctuation( sal_Bool bEnabled );
760 sal_Bool IsKernAsianPunctuation() const { return (sal_Bool)mbKernAsianPunctuation; }
762 void ReformatAllTextObjects();
765 SdrOutliner* createOutliner( USHORT nOutlinerMode );
766 void disposeOutliner( SdrOutliner* pOutliner );
768 sal_Bool IsWriter() const { return !bMyPool; }
770 /** returns the numbering type that is used to format page fields in drawing shapes */
771 virtual SvxNumType GetPageNumType() const;
773 /** copies the items from the source set to the destination set. Both sets must have
774 same ranges but can have different pools. If pNewModel is optional. If it is null,
775 this model is used. */
776 void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel );
778 bool IsInDestruction() const;
781 ////////////////////////////////////////////////////////////////////////////////////////////////////
783 }//end of namespace binfilter
784 #endif //_SVDMODEL_HXX
786 /* /////////////////////////////////////////////////////////////////////////////////////////////////
787 ?----------?
788 | SdrModel |
789 ?-?-----??
790 | ?----------?
791 ?---?----? |
792 | ... | |
793 ?---?--??---?--? ?----?-------?
794 |SdrPage | |SdrPage | |SdrLayerAdmin |
795 ?--?---???-?-ÂÙ ?--?------?-?
796 | | | | | ?------------------?
797 ?---?---? ?----?----? ?------?------?
798 | ... | | ... | | ... |
799 ?--?--??--?--? ?---?---??---?---? ?----?-----??-----?----?
800 |SdrObj | |SdrObj | |SdrLayer | |SdrLayer | |SdrLayerSet | |SdrLayerSet |
801 ?------??------? ?--------??--------? ?-----------??-----------?
802 Die Klasse SdrModel ist der Kopf des Datenmodells der StarView Drawing-Engine.
804 ///////////////////////////////////////////////////////////////////////////////////////////////// */