LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/include/svx - svdmodel.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 49 58 84.5 %
Date: 2013-07-09 Functions: 51 60 85.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10