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

Generated by: LCOV version 1.10