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

Generated by: LCOV version 1.10