LCOV - code coverage report
Current view: top level - include/svx - svdobj.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 34 34 100.0 %
Date: 2015-06-13 12:38:46 Functions: 36 58 62.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 INCLUDED_SVX_SVDOBJ_HXX
      21             : #define INCLUDED_SVX_SVDOBJ_HXX
      22             : 
      23             : #include <typeinfo>
      24             : #include <com/sun/star/uno/Any.hxx>
      25             : #include <cppuhelper/weakref.hxx>
      26             : #include <rtl/ustring.hxx>
      27             : #include <vcl/vclptr.hxx>
      28             : #include <svl/lstner.hxx>
      29             : #include <svl/poolitem.hxx>
      30             : #include <svx/svdtypes.hxx>
      31             : #include <svx/xenum.hxx>
      32             : #include <svx/svxdllapi.h>
      33             : #include <svx/shapeproperty.hxx>
      34             : #include <tools/link.hxx>
      35             : #include <tools/weakbase.hxx>
      36             : #include <tools/mapunit.hxx>
      37             : #include <tools/gen.hxx>
      38             : 
      39             : class SfxBroadcaster;
      40             : class Pointer;
      41             : class AutoTimer;
      42             : class OutlinerParaObject;
      43             : class SdrOutliner;
      44             : class SdrDragStat;
      45             : class SdrHdl;
      46             : class SdrHdlList;
      47             : class SdrItemPool;
      48             : class SdrModel;
      49             : class SdrObjList;
      50             : class SdrObject;
      51             : class SdrPage;
      52             : class SdrPageView;
      53             : class SdrView;
      54             : class SfxItemSet;
      55             : class SfxGrabBagItem;
      56             : class SfxSetItem;
      57             : class SfxStyleSheet;
      58             : class SfxUndoAction;
      59             : class XFillAttrSetItem;
      60             : class XLineAttrSetItem;
      61             : class SfxItemPool;
      62             : namespace tools { class PolyPolygon; }
      63             : class SfxPoolItem;
      64             : class SdrVirtObj;
      65             : class SdrDragView;
      66             : class SdrObjUserDataList;
      67             : class SdrObjPlusData;
      68             : class SdrGluePoint;
      69             : class SdrGluePointList;
      70             : class SetOfByte;
      71             : class OutputDevice;
      72             : class Fraction;
      73             : 
      74             : namespace basegfx {
      75             : 
      76             : class B2DPolyPolygon;
      77             : class B2DHomMatrix;
      78             : 
      79             : }
      80             : 
      81             : namespace sdr
      82             : {
      83             :     namespace properties
      84             :     {
      85             :         class BaseProperties;
      86             :     }
      87             : 
      88             :     class ObjectUser;
      89             : }
      90             : 
      91             : // #110094#
      92             : namespace sdr
      93             : {
      94             :     namespace contact
      95             :     {
      96             :         class ViewContact;
      97             :     } // end of namespace contact
      98             : }
      99             : 
     100             : namespace svx
     101             : {
     102             :     class PropertyChangeNotifier;
     103             : }
     104             : 
     105             : enum SdrObjKind {
     106             :     OBJ_NONE       = 0,  /// abstract object (SdrObject)
     107             :     OBJ_GRUP       = 1,  /// object group
     108             :     OBJ_LINE       = 2,  /// line
     109             :     OBJ_RECT       = 3,  /// rectangle (round corners optional)
     110             :     OBJ_CIRC       = 4,  /// circle, ellipse
     111             :     OBJ_SECT       = 5,  /// circle section
     112             :     OBJ_CARC       = 6,  /// circle arc
     113             :     OBJ_CCUT       = 7,  /// circle cut
     114             :     OBJ_POLY       = 8,  /// polygon, PolyPolygon
     115             :     OBJ_PLIN       = 9,  /// PolyLine
     116             :     OBJ_PATHLINE   =10,  /// open Bezier-curve
     117             :     OBJ_PATHFILL   =11,  /// closed Bezier-curve
     118             :     OBJ_FREELINE   =12,  /// open free-hand line
     119             :     OBJ_FREEFILL   =13,  /// closed free-hand line
     120             :     OBJ_SPLNLINE   =14,  /// natural cubic Spline                  (ni)
     121             :     OBJ_SPLNFILL   =15,  /// periodic cubic Spline                 (ni)
     122             :     OBJ_TEXT       =16,  /// text object
     123             :     OBJ_TEXTEXT    =17,  /// text extension frame                  (ni)
     124             :     OBJ_wegFITTEXT,      /// FitToSize-Text (all lines equal)
     125             :     OBJ_wegFITALLTEXT,   /// FitToSize-Text (by line)              (ni)
     126             :     OBJ_TITLETEXT  =20,  /// TitleText, special text object for StarDraw
     127             :     OBJ_OUTLINETEXT=21,  /// OutlineText, special text object for StarDraw
     128             :     OBJ_GRAF       =22,  /// foreign graphic (StarView Graphic)
     129             :     OBJ_OLE2       =23,  /// OLE object
     130             :     OBJ_EDGE       =24,  /// connector object
     131             :     OBJ_CAPTION    =25,  /// caption object
     132             :     OBJ_PATHPOLY   =26,  /// Polygon/PolyPolygon represented by SdrPathObj
     133             :     OBJ_PATHPLIN   =27,  /// Polyline represented by SdrPathObj
     134             :     OBJ_PAGE       =28,  /// object that represents a SdrPage
     135             :     OBJ_MEASURE    =29,  /// measurement object
     136             :     OBJ_DUMMY      =30,  /// dummy object for saving holes (to recover surrogates later)
     137             :     OBJ_FRAME      =31,  /// continuously activated OLE (PlugIn-Frame or similar)
     138             :     OBJ_UNO        =32,  /// Universal Network Object packed into SvDraw object
     139             :     OBJ_CUSTOMSHAPE=33,  /// custom shape
     140             :     OBJ_MEDIA      =34,  /// media shape
     141             :     OBJ_TABLE      =35,  /// table
     142             :     OBJ_OPENGL     =36,  /// opengl graphic
     143             :     OBJ_MAXI
     144             : };
     145             : 
     146             : enum SdrUserCallType {SDRUSERCALL_MOVEONLY,         // only moved, size unchanged
     147             :                       SDRUSERCALL_RESIZE,           // size and maybe position changed
     148             :                       SDRUSERCALL_CHGATTR,          // attribute changed. Eventually new size, because of line width
     149             :                       SDRUSERCALL_DELETE,           // object is going to be deleted soon, no attributes anymore
     150             :                       SDRUSERCALL_COPY,             // assign operator called, everything can be changed
     151             :                       SDRUSERCALL_INSERTED,         // inserted into an object list (e.g. Page)
     152             :                       SDRUSERCALL_REMOVED,          // removed from an object list
     153             :                       SDRUSERCALL_CHILD_MOVEONLY,   // a child within a group has changed
     154             :                       SDRUSERCALL_CHILD_RESIZE,     // a child within a group has changed
     155             :                       SDRUSERCALL_CHILD_CHGATTR,    // a child within a group has changed
     156             :                       SDRUSERCALL_CHILD_DELETE,     // a child within a group has changed
     157             :                       SDRUSERCALL_CHILD_COPY,       // a child within a group has changed
     158             :                       SDRUSERCALL_CHILD_INSERTED,   // a child within a group has changed
     159             :                       SDRUSERCALL_CHILD_REMOVED};   // a child within a group has changed
     160             : 
     161       10045 : class SVX_DLLPUBLIC SdrObjUserCall
     162             : {
     163             : public:
     164             :     TYPEINFO();
     165             :     virtual ~SdrObjUserCall();
     166             :     virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const Rectangle& rOldBoundRect);
     167             : };
     168             : 
     169           1 : class SVX_DLLPUBLIC SdrObjMacroHitRec
     170             : {
     171             : public:
     172             :     Point                       aPos;
     173             :     Point                       aDownPos;
     174             :     VclPtr<OutputDevice>        pOut;
     175             :     const SetOfByte*            pVisiLayer;
     176             :     const SdrPageView*          pPageView;
     177             :     sal_uInt16                  nTol;
     178             :     bool                        bDown;
     179             : 
     180             :     SdrObjMacroHitRec();
     181             : };
     182             : 
     183             : // User data of a drawing object, e.g. application specific data.
     184             : // Every drawing object can have arbitrarily many such records (SV list).
     185             : // Whoever wants to save data here, must inherit from this and set a corresponding link in the factory.
     186             : class SVX_DLLPUBLIC SdrObjUserData
     187             : {
     188             : protected:
     189             :     sal_uInt32                      nInventor;
     190             :     sal_uInt16                      nIdentifier;
     191             :     sal_uInt16                      nVersion;
     192             : 
     193             : private:
     194             :     void operator=(const SdrObjUserData& rData) SAL_DELETED_FUNCTION;
     195             :     bool operator==(const SdrObjUserData& rData) const SAL_DELETED_FUNCTION;
     196             :     bool operator!=(const SdrObjUserData& rData) const SAL_DELETED_FUNCTION;
     197             : 
     198             : public:
     199             :     TYPEINFO();
     200             : 
     201             :     SdrObjUserData(sal_uInt32 nInv, sal_uInt16 nId, sal_uInt16 nVer);
     202             :     SdrObjUserData(const SdrObjUserData& rData);
     203             :     virtual ~SdrObjUserData();
     204             : 
     205             :     virtual SdrObjUserData* Clone(SdrObject* pObj1) const = 0; // #i71039# NULL -> 0
     206       89237 :     sal_uInt32 GetInventor() const { return nInventor;}
     207       77272 :     sal_uInt16 GetId() const { return nIdentifier;}
     208             : };
     209             : 
     210             : // all geometrical data of an arbitrary object for use in undo/redo
     211             : class SVX_DLLPUBLIC SdrObjGeoData
     212             : {
     213             : public:
     214             :     Rectangle                   aBoundRect;
     215             :     Point                       aAnchor;
     216             :     SdrGluePointList*           pGPL;
     217             :     bool                        bMovProt;
     218             :     bool                        bSizProt;
     219             :     bool                        bNoPrint;
     220             :     bool                        bClosedObj;
     221             :     bool                        mbVisible;
     222             :     SdrLayerID                  mnLayerID;
     223             : 
     224             : public:
     225             :     SdrObjGeoData();
     226             :     virtual ~SdrObjGeoData();
     227             : };
     228             : 
     229             : // provides information about various ZObject properties
     230             : class SVX_DLLPUBLIC SdrObjTransformInfoRec
     231             : {
     232             : public:
     233             :     bool bSelectAllowed : 1;           // if false, object cannot be selected
     234             :     bool bMoveAllowed : 1;             // if false, object cannot be moved
     235             :     bool bResizeFreeAllowed : 1;       // if false, object cannot be resized freely
     236             :     bool bResizePropAllowed : 1;       // if false, object cannot even be resized proportionally
     237             :     bool bRotateFreeAllowed : 1;       // if false, object cannot be rotated freely
     238             :     bool bRotate90Allowed : 1;         // if false, object cannot even be rotated in 90 degree steps
     239             :     bool bMirrorFreeAllowed : 1;       // if false, object cannot be mirrored freely
     240             :     bool bMirror45Allowed : 1;         // if false, object cannot even be mirrored over axes in a 45 degree raster
     241             :     bool bMirror90Allowed : 1;         // if false, object cannot even be mirrored over axes in a 90 degree raster
     242             :     bool bTransparenceAllowed : 1;     // if false, object does not have an interactive transparence control
     243             :     bool bGradientAllowed : 1;         // if false, object dooes not have an interactive gradient control
     244             :     bool bShearAllowed : 1;            // if false, object cannot be sheared
     245             :     bool bEdgeRadiusAllowed : 1;
     246             :     bool bNoOrthoDesired : 1;          // is true for Rect; is false for BMP, MTF
     247             :     bool bNoContortion : 1;            // if false, Kein verzerren (bei Crook) moeglich (nur true bei PathObj und Gruppierten PathObjs)
     248             :     bool bCanConvToPath : 1;           // if false, no conversion into PathObj possible
     249             :     bool bCanConvToPoly : 1;           // if false, no conversion into PolyObj possible
     250             :     bool bCanConvToContour : 1;        // if false, no conversion down to whole contour possible
     251             :     bool bCanConvToPathLineToArea : 1; // if false, no conversion into PathObj with transformation from LineToArea possible
     252             :     bool bCanConvToPolyLineToArea : 1; // if false, no conversion into PolyObj with transformation from LineToArea possible
     253             : 
     254             :     SdrObjTransformInfoRec();
     255             : };
     256             : 
     257             : // Abstract DrawObject
     258             : 
     259             : class SvxShape;
     260             : class SVX_DLLPUBLIC SdrObject: public SfxListener, public tools::WeakBase< SdrObject >
     261             : {
     262             : private:
     263             :     struct Impl;
     264             :     Impl* mpImpl;
     265             : 
     266             :     SdrObject( const SdrObject& ) SAL_DELETED_FUNCTION;
     267             : 
     268             : public:
     269             :     void AddObjectUser(sdr::ObjectUser& rNewUser);
     270             :     void RemoveObjectUser(sdr::ObjectUser& rOldUser);
     271             : 
     272             :     // BaseProperties section
     273             : private:
     274             :     sdr::properties::BaseProperties*                                mpProperties;
     275             : protected:
     276             :     virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties();
     277             : public:
     278             :     virtual sdr::properties::BaseProperties& GetProperties() const;
     279             : 
     280             :     // #110094# DrawContact section
     281             : private:
     282             :     sdr::contact::ViewContact*                                      mpViewContact;
     283             : protected:
     284             :     virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact();
     285             : public:
     286             :     sdr::contact::ViewContact& GetViewContact() const;
     287             : 
     288             :     // DrawContact support: Methods for handling Object changes
     289             :     void ActionChanged() const;
     290             : 
     291             : private:
     292             :     friend class                SdrObjListIter;
     293             :     friend class                SdrVirtObj;
     294             :     friend class                SdrRectObj;
     295             : 
     296             : protected:
     297             :     Rectangle                   aOutRect;     // surrounding rectangle for Paint (incl. LineWdt, ...)
     298             :     Point                       aAnchor;      // anchor position (Writer)
     299             :     Point                       aGridOffset;  // hack (Calc)
     300             :     SdrObjList*                 pObjList;     // list that includes this object
     301             :     SdrPage*                    pPage;
     302             :     SdrModel*                   pModel;
     303             :     SdrObjUserCall*             pUserCall;
     304             :     SdrObjPlusData*             pPlusData;    // Broadcaster, UserData, connektors, ... (this is the Bitsack)
     305             : 
     306             :     sal_uInt32                  nOrdNum;      // order number of the object in the list
     307             : 
     308             :     SfxGrabBagItem*             pGrabBagItem; // holds the GrabBagItem property
     309             : 
     310             : 
     311             :     // Position in the navigation order.  SAL_MAX_UINT32 when not used.
     312             :     sal_uInt32                  mnNavigationPosition;
     313             :     SdrLayerID                  mnLayerID;
     314             : 
     315             :     // object is only pointing to another one
     316             :     bool                        bVirtObj : 1;
     317             :     bool                        bSnapRectDirty : 1;
     318             :     bool                        bNetLock : 1;   // ni
     319             :     bool                        bInserted : 1;  // only if set to true, there are RepaintBroadcast & SetModify
     320             :     bool                        bGrouped : 1;   // member of a group object?
     321             : 
     322             :     // the following flags will be streamed
     323             :     bool                        bMovProt : 1;   // if true, the position is protected
     324             :     bool                        bSizProt : 1;   // if true, the size is protected
     325             :     bool                        bNoPrint : 1;   // if true, the object is not printed.
     326             :     bool                        mbVisible : 1;  // if false, the object is not visible on screen (but maybe on printer, depending on bNoprint
     327             :     // If bEmptyPresObj is true, it is a presentation object that has no content yet.
     328             :     // The flag's default value is false.
     329             :     // The management is done by the application.
     330             :     // Neither assign operator nor cloning copies the flag!
     331             :     // The flag is persistent.
     332             :     bool                        bEmptyPresObj : 1;     // empty presentation object (Draw)
     333             : 
     334             :     // if true, object is invisible as object of the MasterPage
     335             :     bool                        bNotVisibleAsMaster : 1;
     336             : 
     337             :     // if true, the object is closed, i.e. no line, arc...
     338             :     bool                        bClosedObj : 1;
     339             : 
     340             :     bool                        bIsEdge : 1;
     341             :     bool                        bIs3DObj : 1;
     342             :     bool                        bMarkProt : 1;  // marking forbidden, persistent
     343             :     bool                        bIsUnoObj : 1;
     344             :     bool                        bNotMasterCachable : 1;
     345             : 
     346             :     // #i25616#
     347             :     bool                        mbLineIsOutsideGeometry : 1;
     348             : 
     349             :     // #i25616#
     350             :     bool                        mbSupportTextIndentingOnLineWidthChange : 1;
     351             : 
     352             :     // on import of OLE object from MS documents the BLIP size might be retrieved,
     353             :     // in this case the following member is initialized as nonempty rectangle
     354             :     Rectangle                   maBLIPSizeRectangle;
     355             : 
     356             :     // global static ItemPool for not-yet-inserted items
     357             : private:
     358             :     static SdrItemPool*         mpGlobalItemPool;
     359             : 
     360             : public:
     361             :     static SdrItemPool& GetGlobalDrawObjectItemPool();
     362             :     void SetRelativeWidth( double nValue );
     363             :     void SetRelativeWidthRelation( sal_Int16 eValue );
     364             :     void SetRelativeHeight( double nValue );
     365             :     void SetRelativeHeightRelation( sal_Int16 eValue );
     366             :     const double* GetRelativeWidth() const;
     367             :     sal_Int16 GetRelativeWidthRelation() const;
     368             :     const double* GetRelativeHeight() const;
     369             :     sal_Int16 GetRelativeHeightRelation() const;
     370             :     // evil calc grid/shape drawlayer syncing
     371      187308 :     Point GetGridOffset() const { return aGridOffset; }
     372       11292 :     void SetGridOffset( const Point& rGridOffset ){ aGridOffset = rGridOffset; }
     373             : protected:
     374             :     void ImpDeleteUserData();
     375             :     Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const;
     376             : 
     377             :     // for GetDragComment
     378             :     void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, OUString& rStr, sal_uInt16 nVal=0) const;
     379             : 
     380             :     void ImpForcePlusData();
     381             : 
     382             :     OUString GetAngleStr(long nAngle, bool bNoDegChar = false) const;
     383             :     OUString GetMetrStr(long nVal, MapUnit eWantMap=MAP_MM, bool bNoUnitChars = false) const;
     384             : 
     385             :     // bNotMyself=true means: set only ObjList to dirty, don't mark this object as dirty.
     386             :     // This is needed for instance for NbcMove, because usually one moves SnapRect and aOutRect
     387             :     // at the same time to avoid recomputation.
     388             : public:
     389             :     virtual void SetRectsDirty(bool bNotMyself = false);
     390             : protected:
     391             : 
     392             :     // override if the class inherits from SdrObjPlusData:
     393             :     static SdrObjPlusData* NewPlusData();
     394             : 
     395             : protected:
     396             :     /// A derived class must override these 3 methods if it has own geometric
     397             :     /// data that must be saved for Undo.
     398             :     /// NewGeoData() creates an empty instance of a class derived from
     399             :     /// SdrObjGeoData.
     400             :     virtual SdrObjGeoData* NewGeoData() const;
     401             :     virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
     402             :     virtual void RestGeoData(const SdrObjGeoData& rGeo);
     403             : 
     404             : protected:
     405             :     virtual ~SdrObject();
     406             : 
     407             : public:
     408             :     TYPEINFO_OVERRIDE();
     409             :     SdrObject();
     410             : 
     411             :     // frees the SdrObject pointed to by the argument
     412             :     // In case the object has an SvxShape, which has the ownership of the object, it
     413             :     // is actually *not* deleted.
     414             :     static  void    Free( SdrObject*& _rpObject );
     415             : 
     416             :     // this method is only for access from Property objects
     417             :     virtual void SetBoundRectDirty();
     418             : 
     419             :     virtual void SetObjList(SdrObjList* pNewObjList);
     420    39226749 :     SdrObjList* GetObjList() const { return pObjList;}
     421             : 
     422             :     virtual void SetPage(SdrPage* pNewPage);
     423      468556 :     SdrPage* GetPage() const { return pPage;}
     424             : 
     425             :     virtual void SetModel(SdrModel* pNewModel);
     426     2654850 :     SdrModel* GetModel() const { return pModel;}
     427             :     SfxItemPool & GetObjectItemPool() const;
     428             : 
     429             :     void AddListener(SfxListener& rListener);
     430             :     void RemoveListener(SfxListener& rListener);
     431             :     const SfxBroadcaster* GetBroadcaster() const;
     432             : 
     433             :     void AddReference(SdrVirtObj& rVrtObj);
     434             :     void DelReference(SdrVirtObj& rVrtObj);
     435             :     virtual sal_uInt32 GetObjInventor() const;
     436             :     virtual sal_uInt16 GetObjIdentifier() const;
     437             :     virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
     438             : 
     439             :     // Layer interface
     440             :     virtual SdrLayerID GetLayer() const;
     441             :     virtual void NbcSetLayer(SdrLayerID nLayer);
     442             :     virtual void SetLayer(SdrLayerID nLayer);
     443             :     // renaming GetLayerSet -> getMergedHierarchyLayerSet to make clear what happens here. rSet needs to be empty.
     444             :     void getMergedHierarchyLayerSet(SetOfByte& rSet) const;
     445             : 
     446             :     // UserCall interface
     447             :     void SetUserCall(SdrObjUserCall* pUser);
     448     2397369 :     SdrObjUserCall* GetUserCall() const { return pUserCall;}
     449             :     void SendUserCall(SdrUserCallType eUserCall, const Rectangle& rBoundRect) const;
     450             : 
     451             :     // Such a reference point is for instance:
     452             :     // - a symbol's point that should snap to the raster when inserting the symbol
     453             :     // - or an image's fix point within an animation object
     454             :     virtual bool HasRefPoint() const;
     455             :     virtual Point GetRefPoint() const;
     456             :     virtual void SetRefPoint(const Point& rPnt);
     457             : 
     458             :     // #i68101#
     459             :     // An object may have a user-set Name (Get/SetName()), e.g SdrGrafObj, SdrObjGroup
     460             :     // or SdrOle2Obj.
     461             :     // It may also have a Title and a Description for accessibility purposes.
     462             :     void SetName(const OUString& rStr);
     463             :     OUString GetName() const;
     464             :     void SetTitle(const OUString& rStr);
     465             :     OUString GetTitle() const;
     466             :     void SetDescription(const OUString& rStr);
     467             :     OUString GetDescription() const;
     468             : 
     469             :     // for group objects
     470             :     bool IsGroupObject() const;
     471             :     virtual SdrObjList* GetSubList() const;
     472             :     SdrObject* GetUpGroup() const;
     473             : 
     474             :     /// The order number (aka ZOrder, aka z-index) determines whether a
     475             :     /// SdrObject is located above or below another.  Objects are painted from
     476             :     /// lowest to highest order number.  If the order of SdrObjects in the
     477             :     /// SdrObjList is changed, the bObjOrdNumsDirty flag is set on the SdrPage
     478             :     /// and the next GetOrdNum() call recalculates the order number of all
     479             :     /// SdrObjects in the SdrObjList.
     480             :     sal_uInt32 GetOrdNum() const;
     481             : 
     482             :     // Warning: this method should only be used if you really know what you're doing
     483      284919 :     sal_uInt32 GetOrdNumDirect() const { return nOrdNum;}
     484             : 
     485             :     // setting the order number should only happen from the model or from the page
     486             :     void SetOrdNum(sal_uInt32 nNum);
     487             : 
     488             :     // GrabBagItem for interim interop purposes
     489             :     void GetGrabBagItem(com::sun::star::uno::Any& rVal) const;
     490             : 
     491             :     void SetGrabBagItem(const com::sun::star::uno::Any& rVal);
     492             : 
     493             :     // Return the position in the navigation order for the called object.
     494             :     // Note that this method may update the navigation position of the
     495             :     // called and of other SdrObjects.  Therefore this method can not be
     496             :     // const.
     497             :     // @return
     498             :     //     If no navigation position has been explicitly defined then the
     499             :     //     result of GetOrdNum() is returned.
     500             :     sal_uInt32 GetNavigationPosition();
     501             : 
     502             :     // Set the position in the navigation position to the given value.
     503             :     // This method is typically used only by the model after a change to
     504             :     // the navigation order.
     505             :     // This method does not change the navigation position of other
     506             :     // objects.
     507             :     // Use SdrObjList::SetObjectNavigationPosition() instead.
     508             :     void SetNavigationPosition (const sal_uInt32 nPosition);
     509             : 
     510             :     // #111111#
     511             :     // To make clearer that this method may trigger RecalcBoundRect and thus may be
     512             :     // expensive and sometimes problematic (inside a bigger object change You will get
     513             :     // non-useful BoundRects sometimes) i rename that method from GetBoundRect() to
     514             :     // GetCurrentBoundRect().
     515             :     virtual const Rectangle& GetCurrentBoundRect() const;
     516             : 
     517             :     // #111111#
     518             :     // To have a possibility to get the last calculated BoundRect e.g for producing
     519             :     // the first rectangle for repaints (old and new need to be used) without forcing
     520             :     // a RecalcBoundRect (which may be problematical and expensive sometimes) i add here
     521             :     // a new method for accessing the last BoundRect.
     522             :     virtual const Rectangle& GetLastBoundRect() const;
     523             : 
     524             :     virtual void RecalcBoundRect();
     525             : 
     526             :     void BroadcastObjectChange() const;
     527             : 
     528             :     // set modified-flag in the model
     529             :     virtual void SetChanged();
     530             : 
     531             :     // Tooling for painting a single object to a OutputDevice. This will be needed as long
     532             :     // as not all painting is changed to use DrawContact objects.
     533             :     bool SingleObjectPainter(OutputDevice& rOut) const;
     534             :     bool LineGeometryUsageIsNecessary() const;
     535             : 
     536             :     // Returns a copy of the object. Every inherited class must reimplement this (in class Foo
     537             :     // it should be sufficient to do "virtual Foo* Clone() const { return CloneHelper< Foo >(); }".
     538             :     // Note that this function uses operator= internally.
     539             :     virtual SdrObject* Clone() const;
     540             : 
     541             :     virtual SdrObject* CloneWithShellIDs( const OUString& rSrcShellID, const OUString& rDestShellID ) const;
     542             : 
     543             :     // implemented mainly for the purposes of Clone()
     544             :     SdrObject& operator=(const SdrObject& rObj);
     545             : 
     546             :     // TakeObjName...() is for the display in the UI, e.g. "3 frames selected"
     547             :     virtual OUString TakeObjNameSingul() const;
     548             :     virtual OUString TakeObjNamePlural() const;
     549             : 
     550             :     /// The Xor-Polygon is required by the View to drag the object.
     551             :     /// All polygons within the PolyPolygon are interpreted as PolyLine.
     552             :     /// To get a closed Polygon, close it explicitly.
     553             :     virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
     554             : 
     555             :     /// contour for TextToContour
     556             :     virtual basegfx::B2DPolyPolygon TakeContour() const;
     557             : 
     558             :     /// Via GetHdlCount the number of Handles can be retrieved.
     559             :     /// Normally 8, if it's a line 2.
     560             :     /// For Polygon objects (Polygon/Spline/Bezier) the number may be much
     561             :     /// larger.  Polygon objects are also allowed to select a point of a
     562             :     /// selected object.  The handle of that point will then be replaced by
     563             :     /// a new set of handles (PlusHdl).  For a Polygon this would be a simple
     564             :     /// selection Handle, for a Bezier curve this may be up to 3 Handles
     565             :     /// (including Weights).
     566             :     /// GetHdl() and GetPlusHdl() must create Handle instances with new!
     567             :     /// An object that returns true from HasSpacialDrag() must provide these
     568             :     /// methods (incl. FillHdlList()).
     569             :     virtual sal_uInt32 GetHdlCount() const;
     570             :     virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const;
     571             :     virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const;
     572             :     virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const;
     573             :     virtual void AddToHdlList(SdrHdlList& rHdlList) const;
     574             :     virtual void addCropHandles(SdrHdlList& rTarget) const;
     575             : 
     576             :     /// The standard transformations (Move,Resize,Rotate,Mirror,Shear) are
     577             :     /// taken over by the View (TakeXorPoly(),...).
     578             :     /// Object type specific dragging like corner radius of Rectangle,
     579             :     /// control points of Splines, weights of Bezier curves, pointer of
     580             :     /// Label objects must be handled by the object itself.
     581             :     /// To keep the Model free of state, the state is kept in the View
     582             :     /// and then passed to the object. EndDrag usually returns true for success,
     583             :     /// false may be returned if the dragging did not modify the object,
     584             :     /// where the View already handles the case that the pointer was not
     585             :     /// moved at all.
     586             :     virtual bool hasSpecialDrag() const;
     587             :     virtual bool beginSpecialDrag(SdrDragStat& rDrag) const;
     588             :     virtual bool applySpecialDrag(SdrDragStat& rDrag);
     589             :     virtual OUString getSpecialDragComment(const SdrDragStat& rDrag) const;
     590             :     virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const;
     591             : 
     592             :     // FullDrag support. This is for standard interactions and for SdrObjOwn
     593             :     // support. If supportsFullDrag() returns true, getFullDragClone has to
     594             :     // return a cloned SdrObject (who's ownership it loses) at which modifications
     595             :     // like Move(), Scale(), etc or applySpecialDrag() will be executed. That
     596             :     // object will be visualized on overlay for full drag, but should not be
     597             :     // part of the model, thus not changing anything since it's only a temporary
     598             :     // helper object for interaction
     599             :     virtual bool supportsFullDrag() const;
     600             :     virtual SdrObject* getFullDragClone() const;
     601             : 
     602             :     /// Every object must be able to create itself interactively.
     603             :     /// On MouseDown first an object is created, and its BegCreate() method
     604             :     /// is called.  On every MouseMove, MovCreate() is called.  BrkCreate()
     605             :     /// is called if the user cancels the interactive object creation.
     606             :     /// EndCreate() is called on the MouseUp event.  If EndCreate() returns
     607             :     /// true, the creation is finished; the object is inserted into the
     608             :     /// corresponding list.  Otherwise it is assumed that further points
     609             :     /// are necessary to create the object (Polygon, ...).  The parameter
     610             :     /// eCmd contains the number of mouse clicks (if the application
     611             :     /// provides it).
     612             :     /// BckCreate() will undo the previous EndCreate(), e.g. to delete the
     613             :     /// last point of the Polygon.  If BckCreate() returns false, creation
     614             :     /// is cancelled.
     615             :     virtual bool BegCreate(SdrDragStat& rStat);
     616             :     virtual bool MovCreate(SdrDragStat& rStat); // if true, Xor needs to be repainted
     617             :     virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd);
     618             :     virtual bool BckCreate(SdrDragStat& rStat);
     619             :     virtual void BrkCreate(SdrDragStat& rStat);
     620             : 
     621             :     /// get the cursor/pointer that signals creating this object
     622             :     virtual Pointer GetCreatePointer() const;
     623             : 
     624             :     /// Polygon dragged by the user when creating the object
     625             :     virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const;
     626             : 
     627             :     /// The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and
     628             :     /// SetLogicRect call the corresponding Nbc-methods, send a Repaint
     629             :     /// broadcast and set the Modified state on the Model.
     630             :     /// Derived classes should usually only override the Nbc methods.
     631             :     /// Nbc means "no broadcast".
     632             :     virtual void NbcMove  (const Size& rSiz);
     633             :     virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
     634             :     virtual void NbcCrop  (const Point& rRef, const Fraction& xFact, const Fraction& yFact);
     635             :     virtual void NbcRotate(const Point& rRef, long nAngle, double sn, double cs);
     636             :     virtual void NbcMirror(const Point& rRef1, const Point& rRef2);
     637             :     virtual void NbcShear (const Point& rRef, long nAngle, double tn, bool bVShear);
     638             : 
     639             :     virtual void Move  (const Size& rSiz);
     640             :     virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true);
     641             :     virtual void Crop  (const Point& rRef, const Fraction& xFact, const Fraction& yFact);
     642             :     virtual void Rotate(const Point& rRef, long nAngle, double sn, double cs);
     643             :     virtual void Mirror(const Point& rRef1, const Point& rRef2);
     644             :     virtual void Shear (const Point& rRef, long nAngle, double tn, bool bVShear);
     645             : 
     646             :     /// The relative position of a SdrObject is the distance of the upper
     647             :     /// left corner of the logic bounding rectangle (SnapRect) to the anchor.
     648             :     virtual void NbcSetRelativePos(const Point& rPnt);
     649             :     virtual void SetRelativePos(const Point& rPnt);
     650             :     virtual Point GetRelativePos() const;
     651             :     void ImpSetAnchorPos(const Point& rPnt);
     652             :     virtual void NbcSetAnchorPos(const Point& rPnt);
     653             :     virtual void SetAnchorPos(const Point& rPnt);
     654             :     virtual const Point& GetAnchorPos() const;
     655             : 
     656             :     /// Snap is not done on the BoundRect but if possible on logic coordinates
     657             :     /// (i.e. without considering stroke width, ...)
     658             :     /// SetSnapRect() tries to size the Object so that it fits into the
     659             :     /// passed Rect (without stroke width, ...)
     660             :     virtual void RecalcSnapRect();
     661             :     virtual const Rectangle& GetSnapRect() const;
     662             :     virtual void SetSnapRect(const Rectangle& rRect);
     663             :     virtual void NbcSetSnapRect(const Rectangle& rRect);
     664             : 
     665             :     // Logic Rect: for the Rect for instance without regard to rotation angle, shear, ...
     666             :     virtual const Rectangle& GetLogicRect() const;
     667             :     virtual void SetLogicRect(const Rectangle& rRect);
     668             :     virtual void NbcSetLogicRect(const Rectangle& rRect);
     669             : 
     670             :     // the default is to set the logic rect to the given rectangle rMaxRect. If the shape
     671             :     // has an intrinsic aspect ratio it may set the logic rect so the aspect
     672             :     // ratio is kept but still inside the rectangle rMaxRect.
     673             :     // If bShrinkOnly is set to true, the size of the current logic rect will not
     674             :     // be changed if it is smaller than the given rectangle rMaxRect.
     675             :     virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false );
     676             : 
     677             :     // rotation and shear angle
     678             :     virtual long GetRotateAngle() const;
     679             :     virtual long GetShearAngle(bool bVertical = false) const;
     680             : 
     681             :     /// snap to special points of an Object (polygon points, center of circle)
     682             :     virtual sal_uInt32 GetSnapPointCount() const;
     683             :     virtual Point GetSnapPoint(sal_uInt32 i) const;
     684             : 
     685             :     // For objects, whose points can be moved individually.
     686             :     // (e.g. polygons, polylines, lines)
     687             :     // The points of those objects are selected (if necessary multiselection),
     688             :     // deleted, inserted, or as a multiselection moved or rotated...
     689             :     // Only such objects can have PlusHandles (e.g. the weights of an Bezier curve).
     690             :     virtual bool IsPolyObj() const;
     691             :     virtual sal_uInt32 GetPointCount() const;
     692             :     virtual Point GetPoint(sal_uInt32 i) const;
     693             :     void SetPoint(const Point& rPnt, sal_uInt32 i);
     694             :     virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i);
     695             : 
     696             :     // get all geometrical data for undo/redo
     697             :     virtual SdrObjGeoData* GetGeoData() const;
     698             :     virtual void SetGeoData(const SdrObjGeoData& rGeo);
     699             : 
     700             :     // ItemSet access
     701             :     const SfxItemSet& GetMergedItemSet() const;
     702             :     void SetMergedItem(const SfxPoolItem& rItem);
     703             :     void ClearMergedItem(const sal_uInt16 nWhich = 0);
     704             :     void SetMergedItemSet(const SfxItemSet& rSet, bool bClearAllItems = false);
     705             :     const SfxPoolItem& GetMergedItem(const sal_uInt16 nWhich) const;
     706             : 
     707             :     // internal versions
     708             : protected:
     709             :     const SfxItemSet& GetObjectItemSet() const;
     710             :     void SetObjectItem(const SfxPoolItem& rItem);
     711             :     void SetObjectItemSet(const SfxItemSet& rSet);
     712             :     const SfxPoolItem& GetObjectItem(const sal_uInt16 nWhich) const;
     713             : 
     714             :     // get SfxMapUnit the object is using
     715             :     SfxMapUnit GetObjectMapUnit() const;
     716             : 
     717             : public:
     718             :     // syntactical sugar for ItemSet accesses
     719             :     void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems = false);
     720             : 
     721             :     // NotPersistAttr for Layer, ObjName, geometrical transformations etc.
     722             :     void TakeNotPersistAttr(SfxItemSet& rAttr, bool bMerge) const;
     723             :     void ApplyNotPersistAttr(const SfxItemSet& rAttr);
     724             :     void NbcApplyNotPersistAttr(const SfxItemSet& rAttr);
     725             : 
     726             :     // if bDontRemoveHardAttr is false, set all attributes, which were set in the style sheet, to their default value
     727             :     // if true, all hard attributes keep their values
     728             :     void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
     729             :     virtual void NbcSetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
     730             :     SfxStyleSheet* GetStyleSheet() const;
     731             : 
     732             :     virtual bool HasTextEdit() const;
     733             : 
     734             :     // returns true if TextEditMode started
     735             :     virtual bool BegTextEdit(SdrOutliner& rOutl);
     736             :     virtual void EndTextEdit(SdrOutliner& rOutl);
     737             : 
     738             :     // keep text in outliner's format
     739             :     // SetOutlinerParaObject: transfer ownership of *pTextObject!
     740             :     void SetOutlinerParaObject(OutlinerParaObject* pTextObject);
     741             :     virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject);
     742             :     virtual OutlinerParaObject* GetOutlinerParaObject() const;
     743             :     virtual void NbcReformatText();
     744             :     virtual void ReformatText();
     745             : 
     746             :     void BurnInStyleSheetAttributes();
     747             : 
     748             :     // macro abilities, e.g. a rectangle as PushButton.
     749             :     virtual bool HasMacro() const;
     750             :     virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec) const;
     751             :     virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec) const;
     752             :     virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec) const;
     753             :     virtual bool DoMacro (const SdrObjMacroHitRec& rRec);
     754             :     virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec) const;
     755             :     bool IsMacroHit(const SdrObjMacroHitRec& rRec) const;
     756             : 
     757             :     // Connectors
     758             :     // (see also documentation in SvdoEdge.hxx, SdrEdgeObj,
     759             :     // as well as SvdGlue.hxx and SvdGlEV.hxx)
     760             :     // There are nodes and edges. In theory an edge can also be a node, but this isn't implemented yet.
     761             :     // A node has a number of glue points, onto which edges can glued to
     762             :     // An edge can be either
     763             :     // - without any connection to any node,
     764             :     // - or connected on one end to a node, while the other end is not connected,
     765             :     // - or connected on both ends with exactly one node each.
     766             :     // The edge is listener for its up to two nodes.
     767             :     // Whenever a node is moved or resized, all its connected edges follow.
     768             :     // This is also true for SetGluePoint()... on the node.
     769             :     // On the other hand, moving/resizing an edge breaks the connection.
     770             : 
     771             :     // is object a node?
     772             :     virtual bool IsNode() const;
     773             : 
     774             :     // automatic glue points:
     775             :     // a node object must provide four vertex and corner positions
     776             :     // usually 0: top, 1: right, 2: bottom, 3: left
     777             :     virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const;
     778             : 
     779             :     // usually:
     780             :     // 0: top-left, 1: top-right, 2: bottom-right, 3: bottom-left
     781             :     virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const;
     782             : 
     783             :     // list of all glue points, can be NULL
     784             :     virtual const SdrGluePointList* GetGluePointList() const;
     785             :     //virtual SdrGluePointList* GetGluePointList();
     786             : 
     787             :     // after changing the GluePointList, one has to call the object's SendRepaintBroadcast!
     788             :     virtual SdrGluePointList* ForceGluePointList();
     789             : 
     790             :     // to be set temporarily when transforming related object(?)
     791             :     void SetGlueReallyAbsolute(bool bOn);
     792             :     void NbcRotateGluePoints(const Point& rRef, long nAngle, double sn, double cs);
     793             :     void NbcMirrorGluePoints(const Point& rRef1, const Point& rRef2);
     794             :     void NbcShearGluePoints (const Point& rRef, long nAngle, double tn, bool bVShear);
     795             : 
     796             :     // is object an edge?
     797             :     virtual bool IsEdge() const;
     798             : 
     799             :     // if bTail1 is true, line start, otherwise line end
     800             :     // if pObj is null disconnect
     801             :     virtual void ConnectToNode(bool bTail1, SdrObject* pObj);
     802             :     virtual void DisconnectFromNode(bool bTail1);
     803             :     virtual SdrObject* GetConnectedNode(bool bTail1) const;
     804             : 
     805             :     // sets the writing mode of the object's context
     806             :     // Objects which itself do not support different writing modes will ignore this call.
     807             :     // Objects which support different writing modes, but have an own, explicit writing mode set,
     808             :     // will also ignore this call.
     809             :     // Objects which support different writing modes, and whose own mode is set to css.text.WritingMode2.CONTEXT,
     810             :     // will use the given writing mode to calculate their "effective writing mode".
     811             :     // The behaviour of this method is undefined if you pass css.text.WritingMode2.CONTEXT.
     812             :     // @param _nContextWritingMode
     813             :     //     the effective writing mode of the context of the object
     814             :     virtual void    SetContextWritingMode( const sal_Int16 _nContextWritingMode );
     815             : 
     816             :     // If an object is able to convert itself into a polygon or into a Bezier curve (or into both),
     817             :     // then the following methods should be overridden.
     818             :     // E.g., convert a RectObj with line width 10, SOLID_PEN into a polygon:
     819             :     // In the bLineToArea=false mode a PolyObj with four supporting points,
     820             :     // line width 10 and SOLID_PEN shall be created.
     821             :     // On the contrary in the bLineToArea=true mode the generated object should
     822             :     // still have a line attribute NULL_PEN, and the line (also line pattern)
     823             :     // itself should be emulated by the polygon area, which thereby can be
     824             :     // manipulated by the user afterwards.
     825             :     // The RectObj therefore can only convert correctly if it has an area attribute NULL_BRUSH.
     826             :     // In this case it would have to:
     827             :     // - set SOLID_BRUSH with the color of the given pen,
     828             :     // - set NULL_PEN, and
     829             :     // - generate tools::PolyPolygon with two polygons with four supporting points each.
     830             :     // In each case the return value is a SdrObject*, because it is also
     831             :     // allowed to return group objects (e.g. for SdrTextObj).
     832             :     // In the case of the conversion from TextObj to PathObj,
     833             :     // both modi (bLineToArea=true/false) would be identical.
     834             :     // The methods' default implementations report "I'm unable to do this" (false/null).
     835             :     virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const;
     836             :     SdrObject* ConvertToPolyObj(bool bBezier, bool bLineToArea) const;
     837             : 
     838             :     // convert this path object to contour object; bForceLineDash converts even
     839             :     // when there is no filled new polygon created from line-to-polygon conversion,
     840             :     // specially used for XLINE_DASH and 3D conversion
     841             :     SdrObject* ConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const;
     842             :     static SdrObject* ImpConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false);
     843             : 
     844             :     // if true, reference onto an object
     845       15660 :     bool IsVirtualObj() const { return bVirtObj;}
     846             : 
     847             :     // is true, if object can probably be filled
     848             :     // is false, if object has probably line ends
     849             :     // is invalid, if this is a group object
     850        4166 :     bool IsClosedObj() const { return bClosedObj;}
     851             : 
     852       55554 :     bool IsEdgeObj() const { return bIsEdge;}
     853         988 :     bool Is3DObj() const { return bIs3DObj;}
     854         371 :     bool IsUnoObj() const { return bIsUnoObj;}
     855             :     void SetMarkProtect(bool bProt);
     856        1493 :     bool IsMarkProtect() const { return bMarkProt;}
     857             :     void SetInserted(bool bIns);
     858     1496594 :     bool IsInserted() const { return bInserted;}
     859             :     void SetMoveProtect(bool bProt);
     860         860 :     bool IsMoveProtect() const { return bMovProt;}
     861             :     void SetResizeProtect(bool bProt);
     862        1746 :     bool IsResizeProtect() const { return bSizProt;}
     863             :     void SetPrintable(bool bPrn);
     864        1408 :     bool IsPrintable() const { return !bNoPrint;}
     865             :     void SetVisible(bool bVisible);
     866       73143 :     bool IsVisible() const { return mbVisible;}
     867             :     void SetEmptyPresObj(bool bEpt);
     868       58279 :     bool IsEmptyPresObj() const { return bEmptyPresObj;}
     869             :     void SetNotVisibleAsMaster(bool bFlg);
     870        2016 :     bool IsNotVisibleAsMaster() const { return bNotVisibleAsMaster;}
     871             : 
     872             :     // #i25616#
     873         584 :     bool LineIsOutsideGeometry() const { return mbLineIsOutsideGeometry;}
     874             : 
     875             :     // #i25616#
     876       70662 :     bool DoesSupportTextIndentingOnLineWidthChange() const { return mbSupportTextIndentingOnLineWidthChange;}
     877             : 
     878             :     // application specific data
     879             :     sal_uInt16 GetUserDataCount() const;
     880             :     SdrObjUserData* GetUserData(sal_uInt16 nNum) const;
     881             : 
     882             :     void AppendUserData(SdrObjUserData* pData);
     883             : 
     884             :     // removes the record from the list and performs delete (FreeMem+Dtor).
     885             :     void DeleteUserData(sal_uInt16 nNum);
     886             : 
     887             :     // switch ItemPool for this object
     888             :     void MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L);
     889             : 
     890             :     // access to the UNO representation of the shape
     891             :     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape();
     892      185418 :     ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > getWeakUnoShape() const { return maWeakUnoShape; }
     893             : 
     894             :     static SdrObject* getSdrObjectFromXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xInt );
     895             : 
     896             :     // sets a new UNO representation of the shape
     897             :     //  This is only a public interface function. The actual work is
     898             :     //  done by impl_setUnoShape().
     899             :     // Calling this function is only allowed for the UNO representation
     900             :     // itself!
     901             :     void setUnoShape(
     902             :             const com::sun::star::uno::Reference<
     903             :                 com::sun::star::uno::XInterface>& _rxUnoShape);
     904             : 
     905             :     // retrieves the instance responsible for notifying changes in the properties of the shape associated with
     906             :     // the SdrObject
     907             :     //
     908             :     // @precond
     909             :     //     There already exists an SvxShape instance associated with the SdrObject
     910             :     // @throws ::com::sun::star::uno::RuntimeException
     911             :     //     if there does nt yet exists an SvxShape instance associated with the SdrObject.
     912             :     svx::PropertyChangeNotifier&
     913             :         getShapePropertyChangeNotifier();
     914             : 
     915             :     // notifies a change in the given property, to all applicable listeners registered at the associated SvxShape
     916             :     //
     917             :     // This method is equivalent to calling getShapePropertyChangeNotifier().notifyPropertyChange( _eProperty ),
     918             :     // exception that it is allowed to be called when there does not yet exist an associated SvxShape - in which
     919             :     // case the method will silently return without doing anything.
     920             :     void    notifyShapePropertyChange( const svx::ShapeProperty _eProperty ) const;
     921             : 
     922             :     // transformation interface for StarOfficeAPI. This implements support for
     923             :     // homogen 3x3 matrices containing the transformation of the SdrObject. At the
     924             :     // moment it contains a shearX, rotation and translation, but for setting all linear
     925             :     // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
     926             :     //
     927             :     // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon
     928             :     // with the base geometry and returns TRUE. Otherwise it returns FALSE.
     929             :     virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const;
     930             : 
     931             :     // sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
     932             :     // If it's an SdrPathObj it will use the provided geometry information. The Polygon has
     933             :     // to use (0,0) as upper left and will be scaled to the given size in the matrix.
     934             :     virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon);
     935             : 
     936             :     // #116168#
     937             :     // give info if object is in destruction
     938             :     bool IsInDestruction() const;
     939             : 
     940             :     // return if fill is != XFILL_NONE
     941             :     bool HasFillStyle() const;
     942             :     bool HasLineStyle() const;
     943             : 
     944             :     // on import of OLE object from MS documents the BLIP size might be retrieved,
     945             :     // the following methods are used to control it;
     946             :     // usually this data makes no sense after the import is finished, since the object
     947             :     // might be resized
     948           9 :     Rectangle GetBLIPSizeRectangle() const { return maBLIPSizeRectangle;}
     949             :     void SetBLIPSizeRectangle( const Rectangle& aRect );
     950             : 
     951             :     /// @see mbDoNotInsertIntoPageAutomatically
     952             :     void SetDoNotInsertIntoPageAutomatically(bool bSet);
     953             :     /// @see mbDoNotInsertIntoPageAutomatically
     954        3700 :     bool IsDoNotInsertIntoPageAutomatically() const { return mbDoNotInsertIntoPageAutomatically;}
     955             : 
     956             :     // #i121917#
     957             :     virtual bool HasText() const;
     958             : 
     959             :     OString stringify() const;
     960             : 
     961             :     virtual void dumpAsXml(struct _xmlTextWriter* pWriter) const;
     962             : 
     963             : protected:
     964             :     // Sets a new UNO shape
     965             :     //
     966             :     // The default implementation of this function sets the new UNO
     967             :     // shape. Derived classes should override the function to handle
     968             :     // any other actions that are needed when the shape is being
     969             :     // changed.
     970             :     //
     971             :     // The implementation _must_ call the same method of its parent
     972             :     // class (preferably as the first step)!
     973             :     virtual void    impl_setUnoShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxUnoShape );
     974             : 
     975             :     // helper function for reimplementing Clone().
     976             :     template< typename T > T* CloneHelper() const;
     977             : 
     978             : private:
     979             :     // only for internal use!
     980             :     SvxShape* getSvxShape();
     981             : 
     982             :     // do not use directly, always use getSvxShape() if you have to!
     983             :     SvxShape*   mpSvxShape;
     984             :     ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface >
     985             :                 maWeakUnoShape;
     986             :     // HACK: Do not automatically insert newly created object into a page.
     987             :     // The user needs to do it manually later.
     988             :     bool mbDoNotInsertIntoPageAutomatically;
     989             : };
     990             : 
     991             : // Whoever creates his own objects must set a link in the SdrObjFactory class.
     992             : // The handler must have the following signature:
     993             : //    void Hdl(SdrObjFactory*)
     994             : // He must take a look at the referenced instance's nInventor and nIdentifier values,
     995             : // and must create a new drawing object instance accordingly.
     996             : // He must also make the pNewObj pointer reference to this instance.
     997             : class SVX_DLLPUBLIC SdrObjFactory
     998             : {
     999             : public:
    1000             :     sal_uInt32                      nInventor;
    1001             :     sal_uInt16                      nIdentifier;
    1002             : 
    1003             :     // for MakeNewObj():
    1004             :     SdrPage*                    pPage;
    1005             :     SdrModel*                   pModel;
    1006             :     SdrObject*                  pNewObj;
    1007             : 
    1008             :     // for MakeNewObjUserData():
    1009             :     SdrObject*                  pObj;
    1010             :     SdrObjUserData*             pNewData;
    1011             : 
    1012             : private:
    1013             : 
    1014             :     static SVX_DLLPRIVATE SdrObject* CreateObjectFromFactory(
    1015             :         sal_uInt32 nInventor, sal_uInt16 nIdentifier, SdrPage* pPage, SdrModel* pModel );
    1016             : 
    1017             :     SVX_DLLPRIVATE SdrObjFactory(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pNewPage, SdrModel* pNewModel);
    1018             : 
    1019             : public:
    1020             :     static SdrObject* MakeNewObject(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pPage, SdrModel* pModel=NULL);
    1021             :     static SdrObject* MakeNewObject( sal_uInt32 nInventor, sal_uInt16 nIdentifier, const Rectangle& rSnapRect, SdrPage* pPage );
    1022             :     static void InsertMakeObjectHdl(const Link<>& rLink);
    1023             :     static void RemoveMakeObjectHdl(const Link<>& rLink);
    1024             :     static void InsertMakeUserDataHdl(const Link<>& rLink);
    1025             :     static void RemoveMakeUserDataHdl(const Link<>& rLink);
    1026             : };
    1027             : 
    1028             : typedef tools::WeakReference< SdrObject > SdrObjectWeakRef;
    1029             : 
    1030         734 : template< typename T > T* SdrObject::CloneHelper() const
    1031             : {
    1032             :     OSL_ASSERT( typeid( T ) == typeid( *this ));
    1033         734 :     T* pObj = dynamic_cast< T* >( SdrObjFactory::MakeNewObject(GetObjInventor(),GetObjIdentifier(),NULL));
    1034         734 :     if (pObj!=NULL)
    1035         734 :         *pObj=*static_cast< const T* >( this );
    1036         734 :     return pObj;
    1037             : }
    1038             : 
    1039             : #endif // INCLUDED_SVX_SVDOBJ_HXX
    1040             : 
    1041             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11