summaryrefslogtreecommitdiff
path: root/svx/inc/svx/svdobj.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/inc/svx/svdobj.hxx')
-rw-r--r--svx/inc/svx/svdobj.hxx1188
1 files changed, 1188 insertions, 0 deletions
diff --git a/svx/inc/svx/svdobj.hxx b/svx/inc/svx/svdobj.hxx
new file mode 100644
index 000000000000..b554e67aa4d4
--- /dev/null
+++ b/svx/inc/svx/svdobj.hxx
@@ -0,0 +1,1188 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SVDOBJ_HXX
+#define _SVDOBJ_HXX
+
+#include <memory>
+#include <cppuhelper/weakref.hxx>
+#include <vcl/mapmod.hxx>
+#include <tools/weakbase.hxx>
+#include <svl/lstner.hxx>
+#include <vcl/timer.hxx>
+#include <svx/svdsob.hxx>
+#include <svx/svdtypes.hxx> // fuer SdrLayerID
+#include <svx/svdglue.hxx> // Klebepunkte
+#include <svx/xdash.hxx>
+#include <svx/xpoly.hxx>
+#include <svx/xenum.hxx>
+#include <vcl/bitmapex.hxx>
+#include <svx/sdrobjectuser.hxx>
+#include "svx/svxdllapi.h"
+#include "svx/shapeproperty.hxx"
+
+//************************************************************
+// Vorausdeklarationen
+//************************************************************
+
+class SfxBroadcaster;
+class Pointer;
+class AutoTimer;
+class OutlinerParaObject;
+class SdrOutliner;
+class SdrDragStat;
+class SdrHdl;
+class SdrHdlList;
+class SdrItemPool;
+class SdrModel;
+class SdrObjList;
+class SdrObject;
+class SdrPage;
+class SdrPageView;
+class SdrView;
+class SfxItemSet;
+class SfxSetItem;
+class SfxStyleSheet;
+class SfxUndoAction;
+class XFillAttrSetItem;
+class XLineAttrSetItem;
+class SfxItemPool;
+class PolyPolygon;
+class SfxPoolItem;
+class SdrVirtObj;
+class SdrDragView;
+
+namespace sdr
+{
+ namespace properties
+ {
+ class BaseProperties;
+ } // end of namespace properties
+} // end of namespace sdr
+
+// #110094#
+namespace sdr
+{
+ namespace contact
+ {
+ class ViewContact;
+ } // end of namespace contact
+} // end of namespace sdr
+
+namespace svx
+{
+ class PropertyChangeNotifier;
+}
+
+//************************************************************
+// Defines
+//************************************************************
+
+enum SdrObjKind {OBJ_NONE = 0, // Abstraktes Objekt (SdrObject)
+ OBJ_GRUP = 1, // Objektgruppe
+ OBJ_LINE = 2, // Strecke
+ OBJ_RECT = 3, // Rechteck ww. mit runden Ecken
+ OBJ_CIRC = 4, // Kreis, Ellipse
+ OBJ_SECT = 5, // Kreissektor
+ OBJ_CARC = 6, // Kreisbogen
+ OBJ_CCUT = 7, // Kreisabschnitt
+ OBJ_POLY = 8, // Polygon, PolyPolygon
+ OBJ_PLIN = 9, // PolyLine
+ OBJ_PATHLINE =10, // Offene Bezierkurve
+ OBJ_PATHFILL =11, // Geschlossene Bezierkurve
+ OBJ_FREELINE =12, // Offene Freihandlinie
+ OBJ_FREEFILL =13, // Geschlossene Freihandlinie
+ OBJ_SPLNLINE =14, // Natuerlicher kubischer Spline (ni)
+ OBJ_SPLNFILL =15, // Periodischer kubischer Spline (ni)
+ OBJ_TEXT =16, // Textobjekt
+ OBJ_TEXTEXT =17, // Texterweiterungsrahmen (ni)
+ OBJ_wegFITTEXT, // FitToSize-Text (alle Zeilen gleich)
+ OBJ_wegFITALLTEXT, // FitToSize-Text (Zeilenweise) (ni)
+ OBJ_TITLETEXT =20, // Titeltext. Spezial-Textobjekt fuer StarDraw
+ OBJ_OUTLINETEXT=21, // OutlineText. Spezial-Textobjekt fuer StarDraw
+ OBJ_GRAF =22, // Fremdgrafik - (StarView Graphic)
+ OBJ_OLE2 =23, // OLE-Objekt
+ OBJ_EDGE =24, // Verbindungsobjekt fuer Konnektoren
+ OBJ_CAPTION =25, // Legendenobjekt
+ OBJ_PATHPOLY =26, // Polygon/PolyPolygon dargestellt durch SdrPathObj
+ OBJ_PATHPLIN =27, // Polyline dargestellt durch SdrPathObj
+ OBJ_PAGE =28, // Objekt, das eine SdrPage darstellt
+ OBJ_MEASURE =29, // Bemassungsobjekt
+ OBJ_DUMMY =30, // Dummyobjekt zum speichern von Luecken (zur anschliessenden Wiederherstellung der Surrogate)
+ OBJ_FRAME =31, // staendig aktives OLE (PlugIn-Frame oder sowas)
+ OBJ_UNO =32, // Universal Network Object im SvDraw-Obj eingepackt
+ OBJ_CUSTOMSHAPE=33, // CustomShape
+ OBJ_MEDIA =34, // Media shape
+ OBJ_TABLE =35, // Table
+ OBJ_MAXI};
+
+enum SdrUserCallType {SDRUSERCALL_MOVEONLY, // Nur verschoben, Groesse unveraendert
+ SDRUSERCALL_RESIZE, // Groesse und evtl. auch Pos veraendert
+ SDRUSERCALL_CHGATTR, // Attribute veraendert. Moeglicherweise neue Groesse wg. Linienbreite
+ SDRUSERCALL_DELETE, // Obj gibt es gleich nicht mehr. Schon keine Attr mehr.
+ SDRUSERCALL_COPY, // Zuweisungsoperator gerufen. Kann alles geaendert sein
+ SDRUSERCALL_INSERTED, // In eine Objektliste (z.B. Page) eingefuegt
+ SDRUSERCALL_REMOVED, // Aus der Objektliste entfernt
+ SDRUSERCALL_CHILD_MOVEONLY, // Ein Child einer Gruppe hat sich veraendert
+ SDRUSERCALL_CHILD_RESIZE, // Ein Child einer Gruppe hat sich veraendert
+ SDRUSERCALL_CHILD_CHGATTR, // Ein Child einer Gruppe hat sich veraendert
+ SDRUSERCALL_CHILD_DELETE, // Ein Child einer Gruppe hat sich veraendert
+ SDRUSERCALL_CHILD_COPY, // Ein Child einer Gruppe hat sich veraendert
+ SDRUSERCALL_CHILD_INSERTED, // Ein Child einer Gruppe hat sich veraendert
+ SDRUSERCALL_CHILD_REMOVED}; // Ein Child einer Gruppe hat sich veraendert
+
+/* nur voruebergehend, weil sonst MUSS-Aenderung */
+// #define nLayerID nLayerId
+
+//************************************************************
+// Hilfsklasse SdrObjUserCall
+//************************************************************
+
+class SVX_DLLPUBLIC SdrObjUserCall
+{
+public:
+ TYPEINFO();
+ virtual ~SdrObjUserCall();
+ virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const Rectangle& rOldBoundRect);
+};
+
+//************************************************************
+// Hilfsklasse SdrObjMacroHitRec
+//************************************************************
+
+class SdrObjMacroHitRec
+{
+public:
+ Point aPos;
+ Point aDownPos;
+ OutputDevice* pOut;
+ const SetOfByte* pVisiLayer;
+ const SdrPageView* pPageView;
+ USHORT nTol;
+ bool bDown;
+
+public:
+ SdrObjMacroHitRec()
+ : pOut(NULL),
+ pVisiLayer(NULL),
+ pPageView(NULL),
+ nTol(0),
+ bDown(FALSE)
+ {}
+};
+
+//************************************************************
+// Hilfsklasse SdrObjUserData
+//
+// Anwenderdaten an einem Zeichenobjekt, z.B. applikationsspezifische Daten.
+// Jedes Zeichenobjekt kann beliebig viele dieser Records haben (SV-Liste).
+// Wer hier Daten halten will, muss sich ableiten und auch an der Factory
+// einen entsprechenden Link setzen.
+//
+//************************************************************
+
+class SVX_DLLPUBLIC SdrObjUserData
+{
+protected:
+ UINT32 nInventor;
+ UINT16 nIdentifier;
+ UINT16 nVersion;
+
+private:
+ SVX_DLLPRIVATE void operator=(const SdrObjUserData& rData); // nicht implementiert
+ SVX_DLLPRIVATE sal_Bool operator==(const SdrObjUserData& rData) const; // nicht implementiert
+ SVX_DLLPRIVATE sal_Bool operator!=(const SdrObjUserData& rData) const; // nicht implementiert
+
+public:
+ TYPEINFO();
+
+ SdrObjUserData(UINT32 nInv, UINT16 nId, UINT16 nVer)
+ : nInventor(nInv),
+ nIdentifier(nId),
+ nVersion(nVer)
+ {}
+ SdrObjUserData(const SdrObjUserData& rData)
+ : nInventor(rData.nInventor),
+ nIdentifier(rData.nIdentifier),
+ nVersion(rData.nVersion)
+ {}
+ virtual ~SdrObjUserData();
+
+ virtual SdrObjUserData* Clone(SdrObject* pObj1) const = 0; // #i71039# NULL -> 0
+ UINT32 GetInventor() const { return nInventor; }
+ UINT16 GetId() const { return nIdentifier; }
+
+ virtual bool HasMacro (const SdrObject* pObj) const;
+ virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
+ virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
+ virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
+ virtual bool DoMacro (const SdrObjMacroHitRec& rRec, SdrObject* pObj);
+ virtual XubString GetMacroPopupComment(const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
+};
+
+//************************************************************
+// Hilfsklasse SdrObjUserDataList
+//************************************************************
+
+class SdrObjUserDataList
+{
+ Container aList;
+
+public:
+ SdrObjUserDataList()
+ : aList(1024,4,4)
+ {}
+ ~SdrObjUserDataList() { Clear(); }
+
+ void Clear();
+ USHORT GetUserDataCount() const { return USHORT(aList.Count()); }
+ SdrObjUserData* GetUserData(USHORT nNum) const { return (SdrObjUserData*)aList.GetObject(nNum); }
+ void InsertUserData(SdrObjUserData* pData, USHORT nPos=0xFFFF) { aList.Insert(pData,nPos); }
+ SdrObjUserData* RemoveUserData(USHORT nNum) { return (SdrObjUserData*)aList.Remove(nNum);}
+ void DeleteUserData(USHORT nNum) { delete RemoveUserData(nNum); }
+};
+
+//************************************************************
+// Hilfsklasse SdrObjGeoData
+//
+// Alle geometrischen Daten eines beliebigen Objektes zur Übergabe an's Undo/Redo
+//
+//************************************************************
+
+class SVX_DLLPUBLIC SdrObjGeoData
+{
+public:
+ Rectangle aBoundRect;
+ Point aAnchor;
+ SdrGluePointList* pGPL;
+ BOOL bMovProt;
+ BOOL bSizProt;
+ BOOL bNoPrint;
+ BOOL bClosedObj;
+ bool mbVisible;
+ SdrLayerID mnLayerID;
+
+public:
+ SdrObjGeoData();
+ virtual ~SdrObjGeoData();
+};
+
+//************************************************************
+// Hilfsklasse SdrObjPlusData
+//
+// Bitsack fuer DrawObjekte
+//
+//************************************************************
+
+class SdrObjPlusData
+{
+ friend class SdrObject;
+
+public:
+ SfxBroadcaster* pBroadcast; // Broadcaster, falls dieses Obj referenziert wird (bVirtObj=TRUE). Auch fuer Konnektoren etc.
+ SdrObjUserDataList* pUserDataList; // applikationsspeziefische Daten
+ SdrGluePointList* pGluePoints; // Klebepunkte zum Ankleben von Objektverbindern
+ AutoTimer* pAutoTimer;
+
+ // #i68101#
+ // object name, title and description
+ String aObjName;
+ String aObjTitle;
+ String aObjDescription;
+
+ // Name to be used by applications
+ XubString aHTMLName;
+
+public:
+ TYPEINFO();
+ SdrObjPlusData();
+ virtual ~SdrObjPlusData();
+ virtual SdrObjPlusData* Clone(SdrObject* pObj1) const;
+};
+
+//************************************************************
+// Hilfsklasse SdrObjTransformInfoRec
+//
+// gibt Auskunft ueber verschiedene Eigenschaften eines ZObjects
+//
+//************************************************************
+
+class SdrObjTransformInfoRec
+{
+public:
+ unsigned bSelectAllowed : 1; // FALSE=Obj kann nicht selektiert werden
+ unsigned bMoveAllowed : 1; // FALSE=Obj kann nicht verschoben werden
+ unsigned bResizeFreeAllowed : 1; // FALSE=Obj kann nicht frei resized werden
+ unsigned bResizePropAllowed : 1; // FALSE=Obj kann nichtmal proportional resized werden
+ unsigned bRotateFreeAllowed : 1; // FALSE=Obj kann nicht frei gedreht werden
+ unsigned bRotate90Allowed : 1; // FALSE=Obj kann nichtmal im 90deg Raster gedreht werden
+ unsigned bMirrorFreeAllowed : 1; // FALSE=Obj kann nicht frei gespiegelt werden
+ unsigned bMirror45Allowed : 1; // FALSE=Obj kann nichtmal ueber Achse im 45deg Raster gespiegelt werden
+ unsigned bMirror90Allowed : 1; // FALSE=Obj kann ebenfalls nicht ueber Achse im 90deg Raster gespiegelt werden
+ unsigned bTransparenceAllowed : 1; // FALSE=Obj does not have an interactive transparence control
+ unsigned bGradientAllowed : 1; // FALSE=Obj dooes not have an interactive gradient control
+ unsigned bShearAllowed : 1; // FALSE=Obj kann nicht verzerrt werden
+ unsigned bEdgeRadiusAllowed : 1;
+ unsigned bNoOrthoDesired : 1; // TRUE bei Rect; ... FALSE bei BMP,MTF;
+ unsigned bNoContortion : 1; // FALSE=Kein verzerren (bei Crook) moeglich (nur TRUE bei PathObj und Gruppierten PathObjs)
+ unsigned bCanConvToPath : 1; // FALSE=Keine Konvertierung in PathObj moeglich
+ unsigned bCanConvToPoly : 1; // FALSE=Keine Konvertierung in PolyObj moeglich
+ unsigned bCanConvToContour : 1; // FALSE=no conversion down to whole contour possible
+ unsigned bCanConvToPathLineToArea : 1; // FALSE=Keine Konvertierung in PathObj moeglich mit Wandlung von LineToArea
+ unsigned bCanConvToPolyLineToArea : 1; // FALSE=Keine Konvertierung in PolyObj moeglich mit Wandlung von LineToArea
+
+public:
+ SdrObjTransformInfoRec()
+ : bSelectAllowed(TRUE),
+ bMoveAllowed(TRUE),
+ bResizeFreeAllowed(TRUE),
+ bResizePropAllowed(TRUE),
+ bRotateFreeAllowed(TRUE),
+ bRotate90Allowed(TRUE),
+ bMirrorFreeAllowed(TRUE),
+ bMirror45Allowed(TRUE),
+ bMirror90Allowed(TRUE),
+ bTransparenceAllowed(TRUE),
+ bGradientAllowed(TRUE),
+ bShearAllowed(TRUE),
+ bEdgeRadiusAllowed(TRUE),
+ bNoOrthoDesired(TRUE),
+ bNoContortion(TRUE),
+ bCanConvToPath(TRUE),
+ bCanConvToPoly(TRUE),
+ bCanConvToContour(FALSE),
+ bCanConvToPathLineToArea(TRUE),
+ bCanConvToPolyLineToArea(TRUE)
+ {}
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// To make things more safe, allow users of the object to register at it. The users need to be derived
+// from SdrObjectUser to get a call. The users do not need to call RemoveObjectUser() at the object
+// when they get called from PageInDestruction().
+class SdrObject;
+
+class SdrObjectUser
+{
+public:
+ virtual void ObjectInDestruction(const SdrObject& rObject) = 0;
+};
+
+// typedef for GetParentContacts()
+typedef ::std::vector< SdrObjectUser* > ObjectUserVector;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// @@@@ @@@@@ @@@@@@ @@@@@ @@@@ @@@@@@
+// @@ @@ @@ @@ @@ @@ @@ @@ @@
+// @@ @@ @@ @@ @@ @@ @@ @@
+// @@ @@ @@@@@ @@ @@@@ @@ @@
+// @@ @@ @@ @@ @@ @@ @@ @@
+// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
+// @@@@ @@@@@ @@@@ @@@@@ @@@@ @@
+//
+// Abstraktes DrawObject
+//
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+class SvxShape;
+class SVX_DLLPUBLIC SdrObject: public SfxListener, public tools::WeakBase< SdrObject >
+{
+private:
+ // ObjectUser section
+ sdr::ObjectUserVector maObjectUsers;
+
+public:
+ void AddObjectUser(sdr::ObjectUser& rNewUser);
+ void RemoveObjectUser(sdr::ObjectUser& rOldUser);
+
+ // BaseProperties section
+private:
+ sdr::properties::BaseProperties* mpProperties;
+protected:
+ virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties();
+public:
+ virtual sdr::properties::BaseProperties& GetProperties() const;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // #110094# DrawContact section
+private:
+ sdr::contact::ViewContact* mpViewContact;
+protected:
+ virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact();
+public:
+ sdr::contact::ViewContact& GetViewContact() const;
+
+ // DrawContact support: Methods for handling Object changes
+ void ActionChanged() const;
+
+private:
+ friend class SdrObjListIter;
+ friend class SdrVirtObj;
+ friend class SdrRectObj;
+
+protected:
+ Rectangle aOutRect; // umschliessendes Rechteck fuer Paint (inkl. LineWdt, ...)
+ Point aAnchor; // Ankerposition (Writer)
+ SdrObjList* pObjList; // Liste, in dem das Obj eingefuegt ist.
+ SdrPage* pPage;
+ SdrModel* pModel;
+ SdrObjUserCall* pUserCall;
+ SdrObjPlusData* pPlusData; // Broadcaster, UserData, Konnektoren, ... (Das ist der Bitsack)
+
+ sal_uInt32 nOrdNum; // Rangnummer des Obj in der Liste
+
+ /** Position in the navigation order. SAL_MAX_UINT32 when not used.
+ */
+ sal_uInt32 mnNavigationPosition;
+ SdrLayerID mnLayerID;
+
+ // Objekt zeigt nur auf ein Anderes
+ unsigned bVirtObj : 1;
+ unsigned bSnapRectDirty : 1;
+ unsigned bNetLock : 1; // ni
+ unsigned bInserted : 1; // nur wenn TRUE gibt's RepaintBroadcast & SetModify
+ unsigned bGrouped : 1; // Member eines GroupObjektes?
+
+ // Die folgende Flags werden gestreamt
+ unsigned bMovProt : 1; // If true, the position is protected
+ unsigned bSizProt : 1; // If true, the size is protected
+ unsigned bNoPrint : 1; // If true, the object is not printed.
+ unsigned mbVisible : 1; // If false, the object is not visible on screen (but maybe on printer, depending on bNoprint
+ // Wenn bEmptyPresObj TRUE ist, handelt es sich um ein
+ // Praesentationsobjekt, dem noch kein Inhalt zugewiesen
+ // wurde. Default ist das Flag auf FALSE. Die Verwaltung
+ // uebernimmt die Applikation. Im Zuweisungsoperator sowie
+ // beim Clone wird das Flag nicht mitkopiert!
+ // Das Flag ist persistent.
+ unsigned bEmptyPresObj : 1; // Leeres Praesentationsobjekt (Draw)
+
+ // TRUE=Objekt ist als Objekt der MasterPage nicht sichtbar
+ unsigned bNotVisibleAsMaster : 1;
+
+ // TRUE=Es handelt sich hierbei um ein geschlossenes Objekt, also nicht Linie oder Kreisbogen ...
+ unsigned bClosedObj : 1;
+
+ unsigned bIsEdge : 1;
+ unsigned bIs3DObj : 1;
+ unsigned bMarkProt : 1; // Markieren verboten. Persistent
+ unsigned bIsUnoObj : 1;
+ unsigned bNotMasterCachable : 1;
+
+ // #i25616#
+ unsigned mbLineIsOutsideGeometry : 1;
+
+ // #i25616#
+ unsigned mbSupportTextIndentingOnLineWidthChange : 1;
+
+ // on import of OLE object from MS documents the BLIP size might be retrieved,
+ // in this case the following member is initialized as nonempty rectangle
+ Rectangle maBLIPSizeRectangle;
+
+ // global static ItemPool for not-yet-insetred items
+private:
+ static SdrItemPool* mpGlobalItemPool;
+public:
+ static SdrItemPool& GetGlobalDrawObjectItemPool();
+private:
+ SVX_DLLPRIVATE static void FreeGlobalDrawObjectItemPool();
+
+protected:
+ void ImpDeleteUserData();
+ SdrObjUserData* ImpGetMacroUserData() const;
+ Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const;
+
+ // Fuer GetDragComment
+ void ImpTakeDescriptionStr(USHORT nStrCacheID, String& rStr, USHORT nVal=0) const;
+
+ void ImpForcePlusData() { if (pPlusData==NULL) pPlusData=NewPlusData(); }
+
+ String GetWinkStr(long nWink, bool bNoDegChar = false) const;
+ String GetMetrStr(long nVal, MapUnit eWantMap=MAP_MM, bool bNoUnitChars = false) const;
+
+ // bNotMyself=TRUE bedeutet: Nur die ObjList auf Dirty setzen, nicht mich.
+ // Wird z.B. benoetigt fuer NbcMove, denn da movt man SnapRect und aOutRect
+ // i.d.R. gleich mit um die Neuberechnung zu sparen.
+public:
+ virtual void SetRectsDirty(sal_Bool bNotMyself = sal_False);
+protected:
+
+ // ueberladen, wenn man sich von SdrObjPlusData abgeleitet hat:
+ virtual SdrObjPlusData* NewPlusData() const;
+
+protected:
+ // Diese 3 Methoden muss ein abgeleitetes Objekt ueberladen, wenn es eigene
+ // geometrische Daten besitzt, die fuer den Undo-Fall gesichert werden
+ // sollen. NewGeoData() erzeugt lediglich eine leere Instanz auf eine von
+ // SdrObjGeoData abgeleitete Klasse.
+ virtual SdrObjGeoData* NewGeoData() const;
+ virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
+ virtual void RestGeoData(const SdrObjGeoData& rGeo);
+
+protected:
+ virtual ~SdrObject();
+
+public:
+ TYPEINFO();
+ SdrObject();
+
+ /** fres the SdrObject pointed to by the argument
+
+ In case the object has an SvxShape, which has the ownership of the object, it
+ is actually *not* deleted.
+ */
+ static void Free( SdrObject*& _rpObject );
+
+ // This method is only for access from Property objects
+ virtual void SetBoundRectDirty();
+
+ virtual void SetObjList(SdrObjList* pNewObjList);
+ SdrObjList* GetObjList() const { return pObjList; }
+
+ virtual void SetPage(SdrPage* pNewPage);
+ SdrPage* GetPage() const { return pPage; }
+
+ virtual void SetModel(SdrModel* pNewModel);
+ SdrModel* GetModel() const { return pModel; }
+ SdrItemPool* GetObjectItemPool() const;
+
+ void AddListener(SfxListener& rListener);
+ void RemoveListener(SfxListener& rListener);
+ const SfxBroadcaster* GetBroadcaster() const { return pPlusData!=NULL ? pPlusData->pBroadcast : NULL; }
+
+ virtual void AddReference(SdrVirtObj& rVrtObj);
+ virtual void DelReference(SdrVirtObj& rVrtObj);
+ virtual UINT32 GetObjInventor() const;
+ virtual UINT16 GetObjIdentifier() const;
+ virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
+
+ // Layer interface
+ virtual SdrLayerID GetLayer() const;
+ virtual void NbcSetLayer(SdrLayerID nLayer);
+ virtual void SetLayer(SdrLayerID nLayer);
+ // renaming GetLayerSet -> getMergedHierarchyLayerSet to make clear what happens here. rSet needs to be empty.
+ virtual void getMergedHierarchyLayerSet(SetOfByte& rSet) const;
+
+ // UserCall interface
+ void SetUserCall(SdrObjUserCall* pUser) { pUserCall=pUser; }
+ SdrObjUserCall* GetUserCall() const { return pUserCall; }
+ void SendUserCall(SdrUserCallType eUserCall, const Rectangle& rBoundRect) const;
+
+ // Ein solcher Referenzpunkt ist z.B. der Punkt eines Symbols, der
+ // der beim Einfuegen des Symbols auf das Raster gefangen werden soll
+ // oder der Fixpunkt eines Bildes innerhalb eines Animationsobjektes.
+ virtual bool HasRefPoint() const;
+ virtual Point GetRefPoint() const;
+ virtual void SetRefPoint(const Point& rPnt);
+
+ // #i68101#
+ // An object may have a user-set Name (Get/SetName()), e.g SdrGrafObj, SdrObjGroup
+ // or SdrOle2Obj.
+ // It may also have a Title and a Description for accessibility purposes.
+ void SetName(const String& rStr);
+ String GetName() const;
+ void SetTitle(const String& rStr);
+ String GetTitle() const;
+ void SetDescription(const String& rStr);
+ String GetDescription() const;
+
+ // support for HTMLName
+ void SetHTMLName(const String& rStr);
+ String GetHTMLName() const;
+
+ // Fuer Gruppenobjekte
+ sal_Bool IsGroupObject() const { return GetSubList()!=NULL; }
+ virtual SdrObjList* GetSubList() const;
+ SdrObject* GetUpGroup() const;
+
+ // Ueber die Objekt-Ordnungsnummer kann man feststellen, ob ein Objekt vor
+ // oder hinter einem anderen liegt. Objekte mit kleinen Ordnungsnummern werden
+ // zuerst gezeichnet, Objekte mit grossen Ordnungsnummern zuletzt.
+ // Wird die Reihenfolge der Objekte in der Liste veraendert, so wird ein
+ // Dirty-Flag gesetzt (an der Page). Beim naechsten SdrObject::GetOrdNum()
+ // werden die Ordnungsnummer aller Objekte der Liste neu bestimmt.
+ UINT32 GetOrdNum() const;
+
+ // Diese Methode sollte nur verwendet werden, wenn man ganz genau weiss,
+ // was man macht:
+ UINT32 GetOrdNumDirect() const { return nOrdNum; }
+
+ // Das Setzen der Ordnungsnummer sollte nur vom Model bzw. von der Page
+ // geschehen.
+ void SetOrdNum(UINT32 nNum) { nOrdNum=nNum; }
+
+ /** Return the position in the navigation order for the called object.
+ Note that this method may update the navigation position of the
+ called and of other SdrObjects. Therefore this method can not be
+ const.
+ @return
+ If no navigation position has been explicitly defined then the
+ result of GetOrdNum() is returned.
+ */
+ sal_uInt32 GetNavigationPosition (void);
+
+ /** Set the position in the navigation position to the given value.
+ This method is typically used only by the model after a change to
+ the navigation order.
+ This method does not change the navigation position of other
+ objects.
+ Use SdrObjList::SetObjectNavigationPosition() instead.
+ */
+ void SetNavigationPosition (const sal_uInt32 nPosition);
+
+ const AutoTimer* GetAutoTimer() const { return pPlusData!=NULL ? pPlusData->pAutoTimer : NULL; }
+ AutoTimer* GetAutoTimer() { return pPlusData!=NULL ? pPlusData->pAutoTimer : NULL; }
+ AutoTimer* ForceAutoTimer();
+
+ // #111111#
+ // To make clearer that this method may trigger RecalcBoundRect and thus may be
+ // expensive and somtimes problematic (inside a bigger object change You will get
+ // non-useful BoundRects sometimes) i rename that method from GetBoundRect() to
+ // GetCurrentBoundRect().
+ virtual const Rectangle& GetCurrentBoundRect() const;
+
+ // #111111#
+ // To have a possibility to get the last calculated BoundRect e.g for producing
+ // the first rectangle for repaints (old and new need to be used) without forcing
+ // a RecalcBoundRect (which may be problematical and expensive sometimes) i add here
+ // a new method for accessing the last BoundRect.
+ virtual const Rectangle& GetLastBoundRect() const;
+
+ virtual void RecalcBoundRect();
+
+ void BroadcastObjectChange() const;
+
+ // Modified-Flag am Model setzen
+ virtual void SetChanged();
+
+ // Tooling for painting a single object to a OutputDevice. This will be needed as long
+ // as not all painting is changed to use DrawContact objects.
+ sal_Bool SingleObjectPainter(OutputDevice& rOut) const;
+ BOOL LineGeometryUsageIsNecessary() const;
+
+ // Clone() soll eine komplette Kopie des Objektes erzeugen.
+ virtual SdrObject* Clone() const;
+ virtual void operator=(const SdrObject& rObj);
+
+ // TakeObjName...() ist fuer die Anzeige in der UI, z.B. "3 Rahmen selektiert".
+ virtual void TakeObjNameSingul(String& rName) const;
+ virtual void TakeObjNamePlural(String& rName) const;
+
+ // Das Xor-Polygon wird von der View zu Draggen des Objektes benoetigt.
+ // Alle Polygone innerhalb des PolyPolygon werden als PolyLine interpretiert.
+ // Moechte man ein geschlossenes Polygon, so muss man es explizit schliessen.
+ virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
+
+ // Die Kontur fuer TextToContour
+ virtual basegfx::B2DPolyPolygon TakeContour() const;
+
+ // Ueber GetHdlCount gibt ein Objekt die Anzahl seiner Handles preis.
+ // Im Normalfall werden dies 8 sein, bei einer Strecke 2. Bei Polygonobjekten
+ // (Polygon,Spline,Bezier) kann die Handleanzahl wesentlich groesser werden.
+ // Polygonobjekten wird ausserdem die Moeglichkeit eingeraeumt einen Punkt
+ // eines selektierten Objekts zu selektieren. Das Handle dieses Punktes wird
+ // dann durch einen Satz neuer Handles ausgetauscht (PlusHdl). Bei einem
+ // Polygon wird das wohl ein einfacher Selektionshandle sein, bei einer
+ // Bezierkurve dagegen koennen das schon bis zu 3 Handles werden (inkl Gewichte).
+ // GetHdl() und GetPlusHdl() muessen Handleinstanzen mit new erzeugen!
+ // Ein Objekt, das bei HasSpacialDrag() TRUE liefert muss diese Methoden
+ // zur Verfuegung stellen (inkl. FillHdlList).
+ virtual sal_uInt32 GetHdlCount() const;
+ virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const;
+ virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const;
+ virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const;
+ virtual void AddToHdlList(SdrHdlList& rHdlList) const;
+
+ // Die Standardtransformationen (Move,Resize,Rotate,Mirror,Shear) werden von der
+ // View uebernommen (TakeXorPoly(),...).
+ // Objektspeziefisches draggen wie z.B. Eckenradius bei Rechtecken,
+ // Stuetzstellen bei Splines, Gewichte bei Bezierkurven und Pointer von
+ // Labelobjekten muss vom Objekt selbst gehandled werden. Um das Model
+ // Statusfrei zu halten werden die Statusdaten an der View gehalten und dem
+ // Objekt dann uebergeben. EndDrag liefrt im Normalfall TRUE fuer Erfolg.
+ // FALSE kann zurueckgegeben werden, wenn das Dragging das Objekt nicht
+ // veraendert hat, wobei dir evtl. Tatsache das die Maus nicht bewegt wurde
+ // bereits von der View abgefangen wird.
+ virtual bool hasSpecialDrag() const;
+ virtual bool beginSpecialDrag(SdrDragStat& rDrag) const;
+ virtual bool applySpecialDrag(SdrDragStat& rDrag);
+ virtual String getSpecialDragComment(const SdrDragStat& rDrag) const;
+ virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const;
+
+ // FullDrag support. This is for standard interactions and for SdrObjOwn
+ // support. If supportsFullDrag() returns true, getFullDragClone has to
+ // return a cloned SdrObject (who's ownership it loses) at which modifications
+ // like Move(), Scale(), etc or applySpecialDrag() will be executed. That
+ // object will be visualized on overlay for full drag, but should not be
+ // part of the model, thus not changing anything since it's only a temporary
+ // helper object for interaction
+ virtual bool supportsFullDrag() const;
+ virtual SdrObject* getFullDragClone() const;
+
+ // Jedes Objekt muss in der Lage sein sich selbst interaktiv zu erzeugen.
+ // Beim MausDown wird zunaechst ein neues Objekt erzeugt und dann seine
+ // BegCreate()-Methode gerufen. Bei jedem MausMode wird dann MovCreate
+ // gerufen. BrkCreate() bedeutet, dass der User die interaktive Objekt-
+ // erzeugung abgebrochen hat. EndCreate() wird gerufen beim MouseUp-Event.
+ // Liefert EndCreate() ein TRUE, so ist die Objekterzeugung abgeschlossen;
+ // das Objekt wird in die entsprechende Liste eingefuegt. Andernfalls
+ // (EndCreate()==FALSE) gehe ich davon aus, dass weitere Punkte zur
+ // Objekterzeugung notwendig sind (Polygon,...). Der Parameter eCmd
+ // enthaelt die Anzahl der Mausklicks (so die App diese durchreicht).
+ // BckCreate() -> Letztes EndCreate() rueckgaengig machen (z.B. letzten
+ // Polygonpunkt wieder loeschen).
+ // RetrunCode: TRUE=Weiter gehts, FALSE=Create dadurch abgebrochen.
+ virtual bool BegCreate(SdrDragStat& rStat);
+ virtual bool MovCreate(SdrDragStat& rStat); // TRUE=Xor muss repainted werden
+ virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd);
+ virtual bool BckCreate(SdrDragStat& rStat);
+ virtual void BrkCreate(SdrDragStat& rStat);
+
+ // damit holt man sich den Pointer, der das Createn dieses Objekts symbolisiert
+ virtual Pointer GetCreatePointer() const;
+
+ // Polygon das waehrend des Erzeugens aufgezogen wird
+ virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const;
+
+ // Die Methoden Move, Resize, Rotate, Mirror, Shear, SetSnapRect und
+ // SetLogicRect rufen jeweils die entsprechenden Nbc-Methoden, versenden einen
+ // Repaint-Broadcast und setzen den Modified-Status am Model. Abgeleitete
+ // Objekte sollten i.d.R. nur die Nbc-Methoden ueberladen.
+ // Nbc bedeutet: 'NoBroadcast'.
+ virtual void NbcMove (const Size& rSiz);
+ virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
+ virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs);
+ virtual void NbcMirror(const Point& rRef1, const Point& rRef2);
+ virtual void NbcShear (const Point& rRef, long nWink, double tn, bool bVShear);
+
+ virtual void Move (const Size& rSiz);
+ virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
+ virtual void Rotate(const Point& rRef, long nWink, double sn, double cs);
+ virtual void Mirror(const Point& rRef1, const Point& rRef2);
+ virtual void Shear (const Point& rRef, long nWink, double tn, bool bVShear);
+
+ // Die relative Position eines Zeichenobjektes ist die Entfernung der
+ // linken oberen Eche des logisch umschliessenden Rechtecks (SnapRect)
+ // zum Anker.
+ virtual void NbcSetRelativePos(const Point& rPnt);
+ virtual void SetRelativePos(const Point& rPnt);
+ virtual Point GetRelativePos() const;
+ void ImpSetAnchorPos(const Point& rPnt) { aAnchor=rPnt; }
+ virtual void NbcSetAnchorPos(const Point& rPnt);
+ virtual void SetAnchorPos(const Point& rPnt);
+ virtual const Point& GetAnchorPos() const;
+
+ // Snap wird nicht auf dem BoundRect ausgefuehrt, sondern nach Moeglichkeit auf
+ // logischen Koordinaten (also ohne Beruecksichtigung von Strichstaerke, ... ).
+ // SetSnapRect() versucht das Objekt so hinzusizen, dass es in das uebergebene
+ // Rect passt (ohne Strichstaerke, ...)
+ virtual void RecalcSnapRect();
+ virtual const Rectangle& GetSnapRect() const;
+ virtual void SetSnapRect(const Rectangle& rRect);
+ virtual void NbcSetSnapRect(const Rectangle& rRect);
+
+ // Logic Rect: Beim Rect z.B. ohne Beruecksichtigung des Drehwinkels, Shear, ...
+ virtual const Rectangle& GetLogicRect() const;
+ virtual void SetLogicRect(const Rectangle& rRect);
+ virtual void NbcSetLogicRect(const Rectangle& rRect);
+
+ /** the defaul is to set the logic rect to the given rectangle rMaxRect. If the shape
+ has an intrinsic aspect ratio it may set the logic rect so the aspect
+ ratio is kept but still inside the rectangle rMaxRect.
+
+ If bShrinkOnly is set to true, the size of the current logic rect will not
+ be changed if it is smaller than the given rectangle rMaxRect. */
+ virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false );
+
+ // Drehwinkel und Shear
+ virtual long GetRotateAngle() const;
+ virtual long GetShearAngle(bool bVertical = false) const;
+
+ // Zum Fangen von/auf ausgezeichneten Punkten eines Obj (Polygonpunkte,
+ // Kreismittelpunkt, ...)
+ virtual sal_uInt32 GetSnapPointCount() const;
+ virtual Point GetSnapPoint(sal_uInt32 i) const;
+
+ // Fuer Objekte, bei denen jeder einzelne Punkt verschoben werden kann,
+ // z.B. Polygone, Polylines, Linien, ... . Bei diesen Objekten werden
+ // Punkte selektiert (ggf. Mehrfachselektion), geloescht, eingefuegt,
+ // als Mehrfachselektion verschoben und gedreht, ...
+ // Nur solche Objekte koennen PlusHandles haben (z.B. die Gewichte an den
+ // Bezierkurven.
+ virtual sal_Bool IsPolyObj() const;
+ virtual sal_uInt32 GetPointCount() const;
+ virtual Point GetPoint(sal_uInt32 i) const;
+ void SetPoint(const Point& rPnt, sal_uInt32 i);
+ virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i);
+
+ // Alle geometrischen Daten holen fuer's Undo/Redo
+ virtual SdrObjGeoData* GetGeoData() const;
+ virtual void SetGeoData(const SdrObjGeoData& rGeo);
+
+ // ItemSet access
+ const SfxItemSet& GetMergedItemSet() const;
+ void SetMergedItem(const SfxPoolItem& rItem);
+ void ClearMergedItem(const sal_uInt16 nWhich = 0);
+ void SetMergedItemSet(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False);
+ const SfxPoolItem& GetMergedItem(const sal_uInt16 nWhich) const;
+
+ // internal versions
+protected:
+ const SfxItemSet& GetObjectItemSet() const;
+ void SetObjectItem(const SfxPoolItem& rItem);
+ void ClearObjectItem(const sal_uInt16 nWhich = 0);
+ void SetObjectItemSet(const SfxItemSet& rSet);
+ const SfxPoolItem& GetObjectItem(const sal_uInt16 nWhich) const;
+
+public:
+ // syntactical sugar for ItemSet accesses
+ void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False);
+
+ // NotPersistAttr fuer Layer, ObjName, geometrische Transformationen, ...
+ void TakeNotPersistAttr(SfxItemSet& rAttr, bool bMerge) const;
+ void ApplyNotPersistAttr(const SfxItemSet& rAttr);
+ void NbcApplyNotPersistAttr(const SfxItemSet& rAttr);
+
+ // bDontRemoveHardAttr=FALSE: alle in der Vorlage gesetzten Attribute werden am
+ // Zeichenobjekt auf Default gesetzt; TRUE: alle harten Attribute bleiben erhalten.
+ void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void NbcSetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ SfxStyleSheet* GetStyleSheet() const;
+
+ // TextEdit
+ virtual bool HasTextEdit() const;
+
+ // Return==TRUE: TextEditMode gestartet
+ virtual sal_Bool BegTextEdit(SdrOutliner& rOutl);
+ virtual void EndTextEdit(SdrOutliner& rOutl);
+
+ // Text wird im Format des Outliners gehalten
+ // SetOutlinerParaObject: Eigentumsuebereignung von *pTextObject!
+ virtual void SetOutlinerParaObject(OutlinerParaObject* pTextObject);
+ virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject);
+ virtual OutlinerParaObject* GetOutlinerParaObject() const;
+ virtual void NbcReformatText();
+ virtual void ReformatText();
+
+ void BurnInStyleSheetAttributes();
+
+ // Macrofaehigkeit, z.B. ein Rechteck als PushButton.
+ virtual bool HasMacro() const;
+ virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec) const;
+ virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec) const;
+ virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec) const;
+ virtual bool DoMacro (const SdrObjMacroHitRec& rRec);
+ virtual XubString GetMacroPopupComment(const SdrObjMacroHitRec& rRec) const;
+ sal_Bool IsMacroHit(const SdrObjMacroHitRec& rRec) const { return CheckMacroHit(rRec)!=NULL; }
+
+ // Konnektoren. (siehe auch Dokumentation in SvdoEdge.HXX, SdrEdgeObj
+ // sowie SvdGlue.HXX und SvdGlEV.HXX)
+ // Es gibt Knoten und Kanten. Eine Kante kann theoretisch auch Knoten
+ // sein, das ist jedoch in dieser Version noch nicht implementiert.
+ // Ein Knoten hat eine Anzahl von Klebepunkten, wo Kanten angeklebt
+ // werden koennen.
+ // Eine Kante kann
+ // - ohne Verbindungen sein
+ // - an einem Ende auf der Wiese stehen und am anderen Ende an
+ // genau einem Knoten gebunden sein
+ // - an beiden Enden mit jeweils genau einem Knoten verbunden sein.
+ // Die Kante ist Listener bei seinen bis zu 2 Knoten.
+ // Wird der Knoten verschoben oder Resized, folgen alle angebundenen
+ // Kanten. Ebenso bei SetGluePoint()... am Knoten.
+ // Beim Verschieben/Resizen der Kante wird dagegen die Verbindung
+ // geloesst.
+ // Objekt ist ein Knoten?
+ virtual bool IsNode() const;
+
+ // Automatische Klebepunkte:
+ // je 4 Scheitelpunkt- und Eckpositionen muss ein Knotenobjekt liefern
+ // i.d.R. 0=oben, 1=rechts, 2=unten, 3=links
+ virtual SdrGluePoint GetVertexGluePoint(USHORT nNum) const;
+
+ // i.d.R. 0=linksoben, 1=rechtsoben, 2=rechtsunten, 3=linksunten
+ virtual SdrGluePoint GetCornerGluePoint(USHORT nNum) const;
+
+ // Liste aller Klebepunkte. Kann NULL sein.
+ virtual const SdrGluePointList* GetGluePointList() const;
+ //virtual SdrGluePointList* GetGluePointList();
+
+ // Nach veraendern der GluePointList muss man am Obj SendRepaintBroadcast rufen!
+ virtual SdrGluePointList* ForceGluePointList();
+
+ // Temporaer zu setzen fuer Transformationen am Bezugsobjekt
+ void SetGlueReallyAbsolute(bool bOn);
+ void NbcRotateGluePoints(const Point& rRef, long nWink, double sn, double cs);
+ void NbcMirrorGluePoints(const Point& rRef1, const Point& rRef2);
+ void NbcShearGluePoints (const Point& rRef, long nWink, double tn, bool bVShear);
+
+ // Objekt ist eine Kante?
+ virtual bool IsEdge() const;
+
+ // bTail1=TRUE: Linienanfang, sonst LinienEnde
+ // pObj=NULL: Disconnect
+ virtual void ConnectToNode(bool bTail1, SdrObject* pObj);
+ virtual void DisconnectFromNode(bool bTail1);
+ virtual SdrObject* GetConnectedNode(bool bTail1) const;
+
+ /** sets the writing mode of the object's context
+
+ Objects which itself do not support different writing modes will ignore this call.
+
+ Objects which support different writing modes, but have an own, explicit writing mode set,
+ will also ignore this call.
+
+ Objects which support different writing modes, and whose own mode is set to css.text.WritingMode2.CONTEXT,
+ will use the given writing mode to calculate their "effective writing mode".
+
+ The behaviour of this method is undefined if you pass css.text.WritingMode2.CONTEXT.
+
+ @param _nContextWritingMode
+ the effective writing mode of the context of the object
+ */
+ virtual void SetContextWritingMode( const sal_Int16 _nContextWritingMode );
+
+ // Wenn ein Objekt in der Lage ist, sich in ein Polygon oder in eine
+ // Bezierkurve (oder beides) zu verwandeln, dann sollten die folgenden
+ // Methoden ueberladen werden.
+ // Z.B. Ein RectObj mit Strichstaerke 10, SOLID_PEN in Polygon wandeln:
+ // Im Modus bLineToArea=FALSE soll ein PolyObj mit 4 Stuetzstellen,
+ // Strichstaerke 10 und SOLiD_PEN erzeugt werden.
+ // Im Modus bLineToArea=TRUE dagegen soll das generierte Obj immer ein
+ // LinienAttribut NULL_PEN haben, und die Linie (auch Linienmuster) selbst
+ // durch Polygonflaechen emuliert werden, die dadurch anschliessend vom
+ // Anwender manipuliert werden koennen. Das RectObj kann sich somit also
+ // nur korrekt konvertieren, wenn es als Flaechenattribut NULL_BRUSH
+ // besitzt. Es muesste in diesem Fall dann:
+ // - SOLID_BRUSH mit der Farbe des gesetzten Pen setzen
+ // - NULL_PEN setzen
+ // - PolyPolygon mit 2 Polygonen zu je 4 Stuetzstellen generieren.
+ // Der Returnwert ist jeweils ein SdrObject*, da als Rueckgabe zur Not
+ // auch Gruppenobjekte erlaubt sind (z.B. fuer SdrTextObj).
+ // Bei der Konvertierung von TextObj nach PathObj wird es wohl so sein,
+ // dass beide Modi (bLineToArea=TRUE/FALSE) identisch sind.
+ // Defaulted sind diese Methoden auf "Ich kann das nicht" (FALSE/NULL).
+ virtual SdrObject* DoConvertToPolyObj(BOOL bBezier) const;
+ SdrObject* ConvertToPolyObj(BOOL bBezier, BOOL bLineToArea) const;
+
+ // convert this path object to contour object; bForceLineDash converts even
+ // when there is no filled new polygon created from line-to-polygon conversion,
+ // specially used for XLINE_DASH and 3D conversion
+ SdrObject* ConvertToContourObj(SdrObject* pRet, BOOL bForceLineDash = FALSE) const;
+ SdrObject* ImpConvertToContourObj(SdrObject* pRet, BOOL bForceLineDash = FALSE) const;
+
+ // TRUE: Referenz auf ein Obj
+ sal_Bool IsVirtualObj() const { return bVirtObj; }
+
+ // TRUE=Obj kann warsch. gefuellt werden; FALSE=Obj kann warsch. Linienenden haben.
+ // ungueltig, wenn es sich um ein GroupObj handelt.
+ sal_Bool IsClosedObj() const { return bClosedObj; }
+
+ sal_Bool IsEdgeObj() const { return bIsEdge; }
+ sal_Bool Is3DObj() const { return bIs3DObj; }
+ sal_Bool IsUnoObj() const { return bIsUnoObj; }
+ sal_Bool IsMasterCachable() const { return !bNotMasterCachable; }
+ sal_Bool ShareLock() { sal_Bool r=!bNetLock; bNetLock=TRUE; return r; }
+ void ShareUnlock() { bNetLock=FALSE; }
+ sal_Bool IsShareLock() const { return bNetLock; }
+ void SetMarkProtect(sal_Bool bProt) { bMarkProt=bProt; }
+ sal_Bool IsMarkProtect() const { return bMarkProt; }
+ void SetInserted(sal_Bool bIns);
+ sal_Bool IsInserted() const { return bInserted; }
+ void SetGrouped(sal_Bool bGrp) { bGrouped=bGrp; }
+ sal_Bool IsGrouped() const { return bGrouped; }
+ void SetMoveProtect(sal_Bool bProt);
+ sal_Bool IsMoveProtect() const { return bMovProt; }
+ void SetResizeProtect(sal_Bool bProt);
+ sal_Bool IsResizeProtect() const { return bSizProt; }
+ void SetPrintable(sal_Bool bPrn);
+ sal_Bool IsPrintable() const { return !bNoPrint; }
+ void SetVisible(sal_Bool bVisible);
+ sal_Bool IsVisible() const { return mbVisible; }
+ void SetEmptyPresObj(sal_Bool bEpt) { bEmptyPresObj=bEpt; }
+ sal_Bool IsEmptyPresObj() const { return bEmptyPresObj; }
+ void SetNotVisibleAsMaster(sal_Bool bFlg) { bNotVisibleAsMaster=bFlg; }
+ sal_Bool IsNotVisibleAsMaster() const { return bNotVisibleAsMaster; }
+
+ // #i25616#
+ sal_Bool LineIsOutsideGeometry() const { return mbLineIsOutsideGeometry; }
+
+ // #i25616#
+ sal_Bool DoesSupportTextIndentingOnLineWidthChange() const { return mbSupportTextIndentingOnLineWidthChange; }
+
+ // applikationsspeziefische Daten
+ USHORT GetUserDataCount() const;
+ SdrObjUserData* GetUserData(USHORT nNum) const;
+
+ // Insert uebernimmt den auf dem Heap angelegten Record in den Besitz
+ // des Zeichenobjekts
+ void InsertUserData(SdrObjUserData* pData, USHORT nPos=0xFFFF);
+
+ // Delete entfernt den Record aus der Liste und ruft
+ // ein delete (FreeMem+Dtor).
+ void DeleteUserData(USHORT nNum);
+
+ // ItemPool fuer dieses Objekt wechseln
+ void MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ // access to the UNO representation of the shape
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape();
+ ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > getWeakUnoShape() const { return maWeakUnoShape; }
+
+ static SdrObject* getSdrObjectFromXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xInt );
+
+ // helper struct for granting access exclusive to SvxShape
+ struct GrantXShapeAccess
+ {
+ friend class SvxShape;
+ private:
+ GrantXShapeAccess() { }
+ };
+
+ // setting the UNO representation is allowed for the UNO representation itself only!
+ void setUnoShape(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxUnoShape,
+ GrantXShapeAccess /*aGrant*/
+ )
+ {
+ impl_setUnoShape( _rxUnoShape );
+ }
+
+ /** retrieves the instance responsible for notifying changes in the properties of the shape associated with
+ the SdrObject
+
+ @precond
+ There already exists an SvxShape instance associated with the SdrObject
+ @throws ::com::sun::star::uno::RuntimeException
+ if there does nt yet exists an SvxShape instance associated with the SdrObject.
+ */
+ ::svx::PropertyChangeNotifier&
+ getShapePropertyChangeNotifier();
+
+ /** notifies a change in the given property, to all applicable listeners registered at the associated SvxShape
+
+ This method is equivalent to calling getShapePropertyChangeNotifier().notifyPropertyChange( _eProperty ),
+ exception that it is allowed to be called when there does not yet exist an associated SvxShape - in which
+ case the method will silently return without doing anything.
+ */
+ void notifyShapePropertyChange( const ::svx::ShapeProperty _eProperty ) const;
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // transformation interface for StarOfficeAPI. This implements support for
+ // homogen 3x3 matrices containing the transformation of the SdrObject. At the
+ // moment it contains a shearX, rotation and translation, but for setting all linear
+ // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
+ //
+ // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon
+ // with the base geometry and returns TRUE. Otherwise it returns FALSE.
+ virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const;
+
+ // sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
+ // If it's an SdrPathObj it will use the provided geometry information. The Polygon has
+ // to use (0,0) as upper left and will be scaled to the given size in the matrix.
+ virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon);
+
+ sal_Bool IsTransparent( BOOL bCheckForAlphaChannel = FALSE ) const;
+
+ // #116168#
+ // Give info if object is in destruction
+ sal_Bool IsInDestruction() const;
+
+ // return if fill is != XFILL_NONE
+ bool HasFillStyle() const;
+ bool HasLineStyle() const;
+
+ // on import of OLE object from MS documents the BLIP size might be retrieved,
+ // the following methods are used to control it;
+ // usually this data makes no sence after the import is finished, since the object
+ // might be resized
+ Rectangle GetBLIPSizeRectangle() const;
+ void SetBLIPSizeRectangle( const Rectangle& aRect );
+
+protected:
+ void impl_setUnoShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxUnoShape );
+
+private:
+ /** only for internal use!
+ */
+ SvxShape* getSvxShape() const;
+
+ /** do not use directly, always use getSvxShape() if you have to! */
+ SvxShape* mpSvxShape;
+ ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface >
+ maWeakUnoShape;
+};
+
+//************************************************************
+// SdrDummyObj
+//
+// Wer sich eigene Objekte schafft muss einen Link in der Klasse
+// SdrObjFactory setzen. Der Handler hat folgendes aussehen:
+// void Hdl(SdrObjFactory*)
+// Er muss sich aus der uebergebenen Instanz die Werte nInventor und
+// nIdentifier ansehen und entsprechend mit new eine Zeichenobjektinstanz
+// erzeugen. Einen Zeiger auf diese Instanz hat er in der Membervariablen
+// pNewObj zu hinterlassen.
+//
+//************************************************************
+
+class SVX_DLLPUBLIC SdrObjFactory
+{
+public:
+ UINT32 nInventor;
+ UINT16 nIdentifier;
+
+ // fuer MakeNewObj():
+ SdrPage* pPage;
+ SdrModel* pModel;
+ SdrObject* pNewObj;
+
+ // fuer MakeNewObjUserData():
+ SdrObject* pObj;
+ SdrObjUserData* pNewData;
+
+private:
+ SVX_DLLPRIVATE SdrObjFactory(UINT32 nInvent, UINT16 nIdent, SdrPage* pNewPage, SdrModel* pNewModel);
+ SVX_DLLPRIVATE SdrObjFactory(UINT32 nInvent, UINT16 nIdent, SdrObject* pObj1);
+
+public:
+ static SdrObject* MakeNewObject(UINT32 nInvent, UINT16 nIdent, SdrPage* pPage, SdrModel* pModel=NULL);
+ static void InsertMakeObjectHdl(const Link& rLink);
+ static void RemoveMakeObjectHdl(const Link& rLink);
+ static SdrObjUserData* MakeNewObjUserData(UINT32 nInvent, UINT16 nIdent, SdrObject* pObj);
+ static void InsertMakeUserDataHdl(const Link& rLink);
+ static void RemoveMakeUserDataHdl(const Link& rLink);
+};
+
+typedef tools::WeakReference< SdrObject > SdrObjectWeakRef;
+
+#endif //_SVDOBJ_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */