fdo#74697 Add Bluez 5 support for impress remote.
[LibreOffice.git] / include / svx / svdobj.hxx
blob081fe76cae193c4dcfa280b375565bae0b74d693
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef _SVDOBJ_HXX
21 #define _SVDOBJ_HXX
23 #include <memory>
24 #include <typeinfo>
25 #include <cppuhelper/weakref.hxx>
26 #include <vcl/mapmod.hxx>
27 #include <tools/weakbase.hxx>
28 #include <svl/lstner.hxx>
29 #include <vcl/timer.hxx>
30 #include <svx/svdsob.hxx>
31 #include <svx/svdtypes.hxx> // fuer SdrLayerID
32 #include <svx/svdglue.hxx> // Klebepunkte
33 #include <svx/xdash.hxx>
34 #include <svx/xpoly.hxx>
35 #include <svx/xenum.hxx>
36 #include <vcl/bitmapex.hxx>
37 #include <svx/sdrobjectuser.hxx>
38 #include "svx/svxdllapi.h"
39 #include "svx/shapeproperty.hxx"
40 #include <svl/poolitem.hxx>
42 #include <boost/optional.hpp>
43 #include <boost/ptr_container/ptr_vector.hpp>
45 //************************************************************
46 // Vorausdeklarationen
47 //************************************************************
49 class SfxBroadcaster;
50 class Pointer;
51 class AutoTimer;
52 class OutlinerParaObject;
53 class SdrOutliner;
54 class SdrDragStat;
55 class SdrHdl;
56 class SdrHdlList;
57 class SdrItemPool;
58 class SdrModel;
59 class SdrObjList;
60 class SdrObject;
61 class SdrPage;
62 class SdrPageView;
63 class SdrView;
64 class SfxItemSet;
65 class SfxSetItem;
66 class SfxStyleSheet;
67 class SfxUndoAction;
68 class XFillAttrSetItem;
69 class XLineAttrSetItem;
70 class SfxItemPool;
71 class PolyPolygon;
72 class SfxPoolItem;
73 class SdrVirtObj;
74 class SdrDragView;
76 namespace sdr
78 namespace properties
80 class BaseProperties;
81 } // end of namespace properties
82 } // end of namespace sdr
84 // #110094#
85 namespace sdr
87 namespace contact
89 class ViewContact;
90 } // end of namespace contact
91 } // end of namespace sdr
93 namespace svx
95 class PropertyChangeNotifier;
98 //************************************************************
99 // Defines
100 //************************************************************
102 enum SdrObjKind {OBJ_NONE = 0, // Abstraktes Objekt (SdrObject)
103 OBJ_GRUP = 1, // Objektgruppe
104 OBJ_LINE = 2, // Strecke
105 OBJ_RECT = 3, // Rechteck ww. mit runden Ecken
106 OBJ_CIRC = 4, // Kreis, Ellipse
107 OBJ_SECT = 5, // Kreissektor
108 OBJ_CARC = 6, // Kreisbogen
109 OBJ_CCUT = 7, // Kreisabschnitt
110 OBJ_POLY = 8, // Polygon, PolyPolygon
111 OBJ_PLIN = 9, // PolyLine
112 OBJ_PATHLINE =10, // Offene Bezierkurve
113 OBJ_PATHFILL =11, // Geschlossene Bezierkurve
114 OBJ_FREELINE =12, // Offene Freihandlinie
115 OBJ_FREEFILL =13, // Geschlossene Freihandlinie
116 OBJ_SPLNLINE =14, // Natuerlicher kubischer Spline (ni)
117 OBJ_SPLNFILL =15, // Periodischer kubischer Spline (ni)
118 OBJ_TEXT =16, // Textobjekt
119 OBJ_TEXTEXT =17, // Texterweiterungsrahmen (ni)
120 OBJ_wegFITTEXT, // FitToSize-Text (alle Zeilen gleich)
121 OBJ_wegFITALLTEXT, // FitToSize-Text (Zeilenweise) (ni)
122 OBJ_TITLETEXT =20, // Titeltext. Spezial-Textobjekt fuer StarDraw
123 OBJ_OUTLINETEXT=21, // OutlineText. Spezial-Textobjekt fuer StarDraw
124 OBJ_GRAF =22, // Fremdgrafik - (StarView Graphic)
125 OBJ_OLE2 =23, // OLE-Objekt
126 OBJ_EDGE =24, // Verbindungsobjekt fuer Konnektoren
127 OBJ_CAPTION =25, // Legendenobjekt
128 OBJ_PATHPOLY =26, // Polygon/PolyPolygon dargestellt durch SdrPathObj
129 OBJ_PATHPLIN =27, // Polyline dargestellt durch SdrPathObj
130 OBJ_PAGE =28, // Objekt, das eine SdrPage darstellt
131 OBJ_MEASURE =29, // Bemassungsobjekt
132 OBJ_DUMMY =30, // Dummyobjekt zum speichern von Luecken (zur anschliessenden Wiederherstellung der Surrogate)
133 OBJ_FRAME =31, // staendig aktives OLE (PlugIn-Frame oder sowas)
134 OBJ_UNO =32, // Universal Network Object im SvDraw-Obj eingepackt
135 OBJ_CUSTOMSHAPE=33, // CustomShape
136 OBJ_MEDIA =34, // Media shape
137 OBJ_TABLE =35, // Table
138 OBJ_MAXI};
140 enum SdrUserCallType {SDRUSERCALL_MOVEONLY, // Nur verschoben, Groesse unveraendert
141 SDRUSERCALL_RESIZE, // Groesse und evtl. auch Pos veraendert
142 SDRUSERCALL_CHGATTR, // Attribute veraendert. Moeglicherweise neue Groesse wg. Linienbreite
143 SDRUSERCALL_DELETE, // Obj gibt es gleich nicht mehr. Schon keine Attr mehr.
144 SDRUSERCALL_COPY, // Zuweisungsoperator gerufen. Kann alles geaendert sein
145 SDRUSERCALL_INSERTED, // In eine Objektliste (z.B. Page) eingefuegt
146 SDRUSERCALL_REMOVED, // Aus der Objektliste entfernt
147 SDRUSERCALL_CHILD_MOVEONLY, // Ein Child einer Gruppe hat sich veraendert
148 SDRUSERCALL_CHILD_RESIZE, // Ein Child einer Gruppe hat sich veraendert
149 SDRUSERCALL_CHILD_CHGATTR, // Ein Child einer Gruppe hat sich veraendert
150 SDRUSERCALL_CHILD_DELETE, // Ein Child einer Gruppe hat sich veraendert
151 SDRUSERCALL_CHILD_COPY, // Ein Child einer Gruppe hat sich veraendert
152 SDRUSERCALL_CHILD_INSERTED, // Ein Child einer Gruppe hat sich veraendert
153 SDRUSERCALL_CHILD_REMOVED}; // Ein Child einer Gruppe hat sich veraendert
155 //************************************************************
156 // Hilfsklasse SdrObjUserCall
157 //************************************************************
159 class SVX_DLLPUBLIC SdrObjUserCall
161 public:
162 TYPEINFO();
163 virtual ~SdrObjUserCall();
164 virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const Rectangle& rOldBoundRect);
167 //************************************************************
168 // Hilfsklasse SdrObjMacroHitRec
169 //************************************************************
171 class SVX_DLLPUBLIC SdrObjMacroHitRec
173 public:
174 Point aPos;
175 Point aDownPos;
176 OutputDevice* pOut;
177 const SetOfByte* pVisiLayer;
178 const SdrPageView* pPageView;
179 sal_uInt16 nTol;
180 bool bDown;
182 SdrObjMacroHitRec();
185 //************************************************************
186 // Hilfsklasse SdrObjUserData
188 // Anwenderdaten an einem Zeichenobjekt, z.B. applikationsspezifische Daten.
189 // Jedes Zeichenobjekt kann beliebig viele dieser Records haben (SV-Liste).
190 // Wer hier Daten halten will, muss sich ableiten und auch an der Factory
191 // einen entsprechenden Link setzen.
193 //************************************************************
195 class SVX_DLLPUBLIC SdrObjUserData
197 protected:
198 sal_uInt32 nInventor;
199 sal_uInt16 nIdentifier;
200 sal_uInt16 nVersion;
202 private:
203 SVX_DLLPRIVATE void operator=(const SdrObjUserData& rData); // not implemented
204 SVX_DLLPRIVATE bool operator==(const SdrObjUserData& rData) const; // not implemented
205 SVX_DLLPRIVATE bool operator!=(const SdrObjUserData& rData) const; // not implemented
207 public:
208 TYPEINFO();
210 SdrObjUserData(sal_uInt32 nInv, sal_uInt16 nId, sal_uInt16 nVer);
211 SdrObjUserData(const SdrObjUserData& rData);
212 virtual ~SdrObjUserData();
214 virtual SdrObjUserData* Clone(SdrObject* pObj1) const = 0; // #i71039# NULL -> 0
215 sal_uInt32 GetInventor() const;
216 sal_uInt16 GetId() const;
218 virtual bool HasMacro (const SdrObject* pObj) const;
219 virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
220 virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
221 virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
222 virtual bool DoMacro (const SdrObjMacroHitRec& rRec, SdrObject* pObj);
223 virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const;
226 //************************************************************
227 // Hilfsklasse SdrObjUserDataList
228 //************************************************************
230 class SdrObjUserDataList
232 typedef boost::ptr_vector<SdrObjUserData> ListType;
233 ListType maList;
235 public:
236 SdrObjUserDataList();
237 ~SdrObjUserDataList();
239 size_t GetUserDataCount() const;
240 const SdrObjUserData* GetUserData(size_t nNum) const;
241 SdrObjUserData* GetUserData(size_t nNum);
242 void AppendUserData(SdrObjUserData* pData);
243 void DeleteUserData(size_t nNum);
246 //************************************************************
247 // Hilfsklasse SdrObjGeoData
249 // Alle geometrischen Daten eines beliebigen Objektes zur �bergabe an's Undo/Redo
251 //************************************************************
253 class SVX_DLLPUBLIC SdrObjGeoData
255 public:
256 Rectangle aBoundRect;
257 Point aAnchor;
258 SdrGluePointList* pGPL;
259 bool bMovProt;
260 bool bSizProt;
261 bool bNoPrint;
262 bool bClosedObj;
263 bool mbVisible;
264 SdrLayerID mnLayerID;
266 public:
267 SdrObjGeoData();
268 virtual ~SdrObjGeoData();
271 //************************************************************
272 // Hilfsklasse SdrObjPlusData
274 // Bitsack fuer DrawObjekte
276 //************************************************************
278 class SdrObjPlusData
280 friend class SdrObject;
282 SfxBroadcaster* pBroadcast; // Broadcaster, falls dieses Obj referenziert wird (bVirtObj=true). Auch fuer Konnektoren etc.
283 SdrObjUserDataList* pUserDataList; // applikationsspeziefische Daten
284 SdrGluePointList* pGluePoints; // Klebepunkte zum Ankleben von Objektverbindern
286 // #i68101#
287 // object name, title and description
288 OUString aObjName;
289 OUString aObjTitle;
290 OUString aObjDescription;
292 public:
293 TYPEINFO();
294 SdrObjPlusData();
295 virtual ~SdrObjPlusData();
296 virtual SdrObjPlusData* Clone(SdrObject* pObj1) const;
298 void SetGluePoints(const SdrGluePointList& rPts);
301 //************************************************************
302 // Hilfsklasse SdrObjTransformInfoRec
304 // gibt Auskunft ueber verschiedene Eigenschaften eines ZObjects
306 //************************************************************
308 class SVX_DLLPUBLIC SdrObjTransformInfoRec
310 public:
311 bool bSelectAllowed : 1; // false=Obj kann nicht selektiert werden
312 bool bMoveAllowed : 1; // false=Obj kann nicht verschoben werden
313 bool bResizeFreeAllowed : 1; // false=Obj kann nicht frei resized werden
314 bool bResizePropAllowed : 1; // false=Obj kann nichtmal proportional resized werden
315 bool bRotateFreeAllowed : 1; // false=Obj kann nicht frei gedreht werden
316 bool bRotate90Allowed : 1; // false=Obj kann nichtmal im 90deg Raster gedreht werden
317 bool bMirrorFreeAllowed : 1; // false=Obj kann nicht frei gespiegelt werden
318 bool bMirror45Allowed : 1; // false=Obj kann nichtmal ueber Achse im 45deg Raster gespiegelt werden
319 bool bMirror90Allowed : 1; // false=Obj kann ebenfalls nicht ueber Achse im 90deg Raster gespiegelt werden
320 bool bTransparenceAllowed : 1; // false=Obj does not have an interactive transparence control
321 bool bGradientAllowed : 1; // false=Obj dooes not have an interactive gradient control
322 bool bShearAllowed : 1; // false=Obj kann nicht verzerrt werden
323 bool bEdgeRadiusAllowed : 1;
324 bool bNoOrthoDesired : 1; // true bei Rect; ... false bei BMP,MTF;
325 bool bNoContortion : 1; // false=Kein verzerren (bei Crook) moeglich (nur true bei PathObj und Gruppierten PathObjs)
326 bool bCanConvToPath : 1; // false=Keine Konvertierung in PathObj moeglich
327 bool bCanConvToPoly : 1; // false=Keine Konvertierung in PolyObj moeglich
328 bool bCanConvToContour : 1; // false=no conversion down to whole contour possible
329 bool bCanConvToPathLineToArea : 1; // false=Keine Konvertierung in PathObj moeglich mit Wandlung von LineToArea
330 bool bCanConvToPolyLineToArea : 1; // false=Keine Konvertierung in PolyObj moeglich mit Wandlung von LineToArea
332 SdrObjTransformInfoRec();
335 ////////////////////////////////////////////////////////////////////////////////////////////////////
336 ////////////////////////////////////////////////////////////////////////////////////////////////////
338 // @@@@ @@@@@ @@@@@@ @@@@@ @@@@ @@@@@@
339 // @@ @@ @@ @@ @@ @@ @@ @@ @@
340 // @@ @@ @@ @@ @@ @@ @@ @@
341 // @@ @@ @@@@@ @@ @@@@ @@ @@
342 // @@ @@ @@ @@ @@ @@ @@ @@
343 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
344 // @@@@ @@@@@ @@@@ @@@@@ @@@@ @@
346 // Abstraktes DrawObject
348 ////////////////////////////////////////////////////////////////////////////////////////////////////
350 class SvxShape;
351 class SVX_DLLPUBLIC SdrObject: public SfxListener, public tools::WeakBase< SdrObject >
353 private:
354 // ObjectUser section
355 sdr::ObjectUserVector maObjectUsers;
357 public:
358 void AddObjectUser(sdr::ObjectUser& rNewUser);
359 void RemoveObjectUser(sdr::ObjectUser& rOldUser);
361 // BaseProperties section
362 private:
363 sdr::properties::BaseProperties* mpProperties;
364 protected:
365 virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties();
366 public:
367 virtual sdr::properties::BaseProperties& GetProperties() const;
369 ///////////////////////////////////////////////////////////////////////////////
370 // #110094# DrawContact section
371 private:
372 sdr::contact::ViewContact* mpViewContact;
373 protected:
374 virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact();
375 public:
376 sdr::contact::ViewContact& GetViewContact() const;
378 // DrawContact support: Methods for handling Object changes
379 void ActionChanged() const;
381 private:
382 friend class SdrObjListIter;
383 friend class SdrVirtObj;
384 friend class SdrRectObj;
386 protected:
387 Rectangle aOutRect; // umschliessendes Rechteck fuer Paint (inkl. LineWdt, ...)
388 Point aAnchor; // Ankerposition (Writer)
389 Point aGridOffset; // hack (Calc)
390 SdrObjList* pObjList; // Liste, in dem das Obj eingefuegt ist.
391 SdrPage* pPage;
392 SdrModel* pModel;
393 SdrObjUserCall* pUserCall;
394 SdrObjPlusData* pPlusData; // Broadcaster, UserData, Konnektoren, ... (Das ist der Bitsack)
396 sal_uInt32 nOrdNum; // Rangnummer des Obj in der Liste
398 /** Position in the navigation order. SAL_MAX_UINT32 when not used.
400 sal_uInt32 mnNavigationPosition;
401 SdrLayerID mnLayerID;
403 // Objekt zeigt nur auf ein Anderes
404 bool bVirtObj : 1;
405 bool bSnapRectDirty : 1;
406 bool bNetLock : 1; // ni
407 bool bInserted : 1; // nur wenn true gibt's RepaintBroadcast & SetModify
408 bool bGrouped : 1; // Member eines GroupObjektes?
410 // Die folgende Flags werden gestreamt
411 bool bMovProt : 1; // If true, the position is protected
412 bool bSizProt : 1; // If true, the size is protected
413 bool bNoPrint : 1; // If true, the object is not printed.
414 bool mbVisible : 1; // If false, the object is not visible on screen (but maybe on printer, depending on bNoprint
415 // Wenn bEmptyPresObj true ist, handelt es sich um ein
416 // Praesentationsobjekt, dem noch kein Inhalt zugewiesen
417 // wurde. Default ist das Flag auf FALSE. Die Verwaltung
418 // uebernimmt die Applikation. Im Zuweisungsoperator sowie
419 // beim Clone wird das Flag nicht mitkopiert!
420 // Das Flag ist persistent.
421 bool bEmptyPresObj : 1; // Leeres Praesentationsobjekt (Draw)
423 // true=Objekt ist als Objekt der MasterPage nicht sichtbar
424 bool bNotVisibleAsMaster : 1;
426 // true=Es handelt sich hierbei um ein geschlossenes Objekt, also nicht Linie oder Kreisbogen ...
427 bool bClosedObj : 1;
429 bool bIsEdge : 1;
430 bool bIs3DObj : 1;
431 bool bMarkProt : 1; // Markieren verboten. Persistent
432 bool bIsUnoObj : 1;
433 bool bNotMasterCachable : 1;
435 // #i25616#
436 bool mbLineIsOutsideGeometry : 1;
438 // #i25616#
439 bool mbSupportTextIndentingOnLineWidthChange : 1;
441 // on import of OLE object from MS documents the BLIP size might be retrieved,
442 // in this case the following member is initialized as nonempty rectangle
443 Rectangle maBLIPSizeRectangle;
445 // global static ItemPool for not-yet-insetred items
446 private:
447 static SdrItemPool* mpGlobalItemPool;
448 boost::optional<double> mnRelativeWidth;
449 boost::optional<double> mnRelativeHeight;
450 public:
451 static SdrItemPool& GetGlobalDrawObjectItemPool();
452 void SetRelativeWidth( double nValue ) { mnRelativeWidth.reset( nValue ); }
453 void SetRelativeHeight( double nValue ) { mnRelativeHeight.reset( nValue ); }
454 boost::optional<double> GetRelativeWidth( ) const { return mnRelativeWidth; }
455 boost::optional<double> GetRelativeHeight( ) const { return mnRelativeHeight; }
456 // evil calc grid/shape drawlayer syncing
457 Point GetGridOffset() const { return aGridOffset; }
458 void SetGridOffset( const Point& rGridOffset ){ aGridOffset = rGridOffset; }
459 protected:
460 void ImpDeleteUserData();
461 SdrObjUserData* ImpGetMacroUserData() const;
462 Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const;
464 // Fuer GetDragComment
465 void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, OUString& rStr, sal_uInt16 nVal=0) const;
467 void ImpForcePlusData();
469 OUString GetWinkStr(long nWink, bool bNoDegChar = false) const;
470 OUString GetMetrStr(long nVal, MapUnit eWantMap=MAP_MM, bool bNoUnitChars = false) const;
472 // bNotMyself=true bedeutet: Nur die ObjList auf Dirty setzen, nicht mich.
473 // Wird z.B. benoetigt fuer NbcMove, denn da movt man SnapRect und aOutRect
474 // i.d.R. gleich mit um die Neuberechnung zu sparen.
475 public:
476 virtual void SetRectsDirty(sal_Bool bNotMyself = false);
477 protected:
479 // ueberladen, wenn man sich von SdrObjPlusData abgeleitet hat:
480 virtual SdrObjPlusData* NewPlusData() const;
482 protected:
483 // Diese 3 Methoden muss ein abgeleitetes Objekt ueberladen, wenn es eigene
484 // geometrische Daten besitzt, die fuer den Undo-Fall gesichert werden
485 // sollen. NewGeoData() erzeugt lediglich eine leere Instanz auf eine von
486 // SdrObjGeoData abgeleitete Klasse.
487 virtual SdrObjGeoData* NewGeoData() const;
488 virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
489 virtual void RestGeoData(const SdrObjGeoData& rGeo);
491 protected:
492 virtual ~SdrObject();
494 public:
495 TYPEINFO();
496 SdrObject();
498 /** frees the SdrObject pointed to by the argument
500 In case the object has an SvxShape, which has the ownership of the object, it
501 is actually *not* deleted.
503 static void Free( SdrObject*& _rpObject );
505 // This method is only for access from Property objects
506 virtual void SetBoundRectDirty();
508 virtual void SetObjList(SdrObjList* pNewObjList);
509 SdrObjList* GetObjList() const;
511 virtual void SetPage(SdrPage* pNewPage);
512 SdrPage* GetPage() const;
514 virtual void SetModel(SdrModel* pNewModel);
515 SdrModel* GetModel() const;
516 SdrItemPool* GetObjectItemPool() const;
518 void AddListener(SfxListener& rListener);
519 void RemoveListener(SfxListener& rListener);
520 const SfxBroadcaster* GetBroadcaster() const;
522 virtual void AddReference(SdrVirtObj& rVrtObj);
523 virtual void DelReference(SdrVirtObj& rVrtObj);
524 virtual sal_uInt32 GetObjInventor() const;
525 virtual sal_uInt16 GetObjIdentifier() const;
526 virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
528 // Layer interface
529 virtual SdrLayerID GetLayer() const;
530 virtual void NbcSetLayer(SdrLayerID nLayer);
531 virtual void SetLayer(SdrLayerID nLayer);
532 // renaming GetLayerSet -> getMergedHierarchyLayerSet to make clear what happens here. rSet needs to be empty.
533 virtual void getMergedHierarchyLayerSet(SetOfByte& rSet) const;
535 // UserCall interface
536 void SetUserCall(SdrObjUserCall* pUser);
537 SdrObjUserCall* GetUserCall() const;
538 void SendUserCall(SdrUserCallType eUserCall, const Rectangle& rBoundRect) const;
540 // Ein solcher Referenzpunkt ist z.B. der Punkt eines Symbols, der
541 // der beim Einfuegen des Symbols auf das Raster gefangen werden soll
542 // oder der Fixpunkt eines Bildes innerhalb eines Animationsobjektes.
543 virtual bool HasRefPoint() const;
544 virtual Point GetRefPoint() const;
545 virtual void SetRefPoint(const Point& rPnt);
547 // #i68101#
548 // An object may have a user-set Name (Get/SetName()), e.g SdrGrafObj, SdrObjGroup
549 // or SdrOle2Obj.
550 // It may also have a Title and a Description for accessibility purposes.
551 void SetName(const OUString& rStr);
552 OUString GetName() const;
553 void SetTitle(const OUString& rStr);
554 OUString GetTitle() const;
555 void SetDescription(const OUString& rStr);
556 OUString GetDescription() const;
558 // Fuer Gruppenobjekte
559 bool IsGroupObject() const;
560 virtual SdrObjList* GetSubList() const;
561 SdrObject* GetUpGroup() const;
563 // Ueber die Objekt-Ordnungsnummer kann man feststellen, ob ein Objekt vor
564 // oder hinter einem anderen liegt. Objekte mit kleinen Ordnungsnummern werden
565 // zuerst gezeichnet, Objekte mit grossen Ordnungsnummern zuletzt.
566 // Wird die Reihenfolge der Objekte in der Liste veraendert, so wird ein
567 // Dirty-Flag gesetzt (an der Page). Beim naechsten SdrObject::GetOrdNum()
568 // werden die Ordnungsnummer aller Objekte der Liste neu bestimmt.
569 sal_uInt32 GetOrdNum() const;
571 // Diese Methode sollte nur verwendet werden, wenn man ganz genau weiss,
572 // was man macht:
573 sal_uInt32 GetOrdNumDirect() const;
575 // Das Setzen der Ordnungsnummer sollte nur vom Model bzw. von der Page
576 // geschehen.
577 void SetOrdNum(sal_uInt32 nNum);
579 /** Return the position in the navigation order for the called object.
580 Note that this method may update the navigation position of the
581 called and of other SdrObjects. Therefore this method can not be
582 const.
583 @return
584 If no navigation position has been explicitly defined then the
585 result of GetOrdNum() is returned.
587 sal_uInt32 GetNavigationPosition (void);
589 /** Set the position in the navigation position to the given value.
590 This method is typically used only by the model after a change to
591 the navigation order.
592 This method does not change the navigation position of other
593 objects.
594 Use SdrObjList::SetObjectNavigationPosition() instead.
596 void SetNavigationPosition (const sal_uInt32 nPosition);
598 // #111111#
599 // To make clearer that this method may trigger RecalcBoundRect and thus may be
600 // expensive and sometimes problematic (inside a bigger object change You will get
601 // non-useful BoundRects sometimes) i rename that method from GetBoundRect() to
602 // GetCurrentBoundRect().
603 virtual const Rectangle& GetCurrentBoundRect() const;
605 // #111111#
606 // To have a possibility to get the last calculated BoundRect e.g for producing
607 // the first rectangle for repaints (old and new need to be used) without forcing
608 // a RecalcBoundRect (which may be problematical and expensive sometimes) i add here
609 // a new method for accessing the last BoundRect.
610 virtual const Rectangle& GetLastBoundRect() const;
612 virtual void RecalcBoundRect();
614 void BroadcastObjectChange() const;
616 // Modified-Flag am Model setzen
617 virtual void SetChanged();
619 // Tooling for painting a single object to a OutputDevice. This will be needed as long
620 // as not all painting is changed to use DrawContact objects.
621 bool SingleObjectPainter(OutputDevice& rOut) const;
622 bool LineGeometryUsageIsNecessary() const;
625 Returns a copy of the object. Every inherited class must reimplement this (in class Foo
626 it should be sufficient to do "virtual Foo* Clone() const { return CloneHelper< Foo >(); }".
627 Note that this function uses operator= internally.
629 virtual SdrObject* Clone() const;
631 Implemented mainly for the purposes of Clone().
633 SdrObject& operator=(const SdrObject& rObj);
635 // TakeObjName...() ist fuer die Anzeige in der UI, z.B. "3 Rahmen selektiert".
636 virtual void TakeObjNameSingul(String& rName) const;
637 virtual void TakeObjNamePlural(String& rName) const;
639 // Das Xor-Polygon wird von der View zu Draggen des Objektes benoetigt.
640 // Alle Polygone innerhalb des PolyPolygon werden als PolyLine interpretiert.
641 // Moechte man ein geschlossenes Polygon, so muss man es explizit schliessen.
642 virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
644 // Die Kontur fuer TextToContour
645 virtual basegfx::B2DPolyPolygon TakeContour() const;
647 // Ueber GetHdlCount gibt ein Objekt die Anzahl seiner Handles preis.
648 // Im Normalfall werden dies 8 sein, bei einer Strecke 2. Bei Polygonobjekten
649 // (Polygon,Spline,Bezier) kann die Handleanzahl wesentlich groesser werden.
650 // Polygonobjekten wird ausserdem die Moeglichkeit eingeraeumt einen Punkt
651 // eines selektierten Objekts zu selektieren. Das Handle dieses Punktes wird
652 // dann durch einen Satz neuer Handles ausgetauscht (PlusHdl). Bei einem
653 // Polygon wird das wohl ein einfacher Selektionshandle sein, bei einer
654 // Bezierkurve dagegen koennen das schon bis zu 3 Handles werden (inkl Gewichte).
655 // GetHdl() und GetPlusHdl() muessen Handleinstanzen mit new erzeugen!
656 // Ein Objekt, das bei HasSpacialDrag() true liefert muss diese Methoden
657 // zur Verfuegung stellen (inkl. FillHdlList).
658 virtual sal_uInt32 GetHdlCount() const;
659 virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const;
660 virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const;
661 virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const;
662 virtual void AddToHdlList(SdrHdlList& rHdlList) const;
664 // Die Standardtransformationen (Move,Resize,Rotate,Mirror,Shear) werden von der
665 // View uebernommen (TakeXorPoly(),...).
666 // Objektspeziefisches draggen wie z.B. Eckenradius bei Rechtecken,
667 // Stuetzstellen bei Splines, Gewichte bei Bezierkurven und Pointer von
668 // Labelobjekten muss vom Objekt selbst gehandled werden. Um das Model
669 // Statusfrei zu halten werden die Statusdaten an der View gehalten und dem
670 // Objekt dann uebergeben. EndDrag liefrt im Normalfall true fuer Erfolg.
671 // false kann zurueckgegeben werden, wenn das Dragging das Objekt nicht
672 // veraendert hat, wobei dir evtl. Tatsache das die Maus nicht bewegt wurde
673 // bereits von der View abgefangen wird.
674 virtual bool hasSpecialDrag() const;
675 virtual bool beginSpecialDrag(SdrDragStat& rDrag) const;
676 virtual bool applySpecialDrag(SdrDragStat& rDrag);
677 virtual String getSpecialDragComment(const SdrDragStat& rDrag) const;
678 virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const;
680 // FullDrag support. This is for standard interactions and for SdrObjOwn
681 // support. If supportsFullDrag() returns true, getFullDragClone has to
682 // return a cloned SdrObject (who's ownership it loses) at which modifications
683 // like Move(), Scale(), etc or applySpecialDrag() will be executed. That
684 // object will be visualized on overlay for full drag, but should not be
685 // part of the model, thus not changing anything since it's only a temporary
686 // helper object for interaction
687 virtual bool supportsFullDrag() const;
688 virtual SdrObject* getFullDragClone() const;
690 // Jedes Objekt muss in der Lage sein sich selbst interaktiv zu erzeugen.
691 // Beim MausDown wird zunaechst ein neues Objekt erzeugt und dann seine
692 // BegCreate()-Methode gerufen. Bei jedem MausMode wird dann MovCreate
693 // gerufen. BrkCreate() bedeutet, dass der User die interaktive Objekt-
694 // erzeugung abgebrochen hat. EndCreate() wird gerufen beim MouseUp-Event.
695 // Liefert EndCreate() ein true, so ist die Objekterzeugung abgeschlossen;
696 // das Objekt wird in die entsprechende Liste eingefuegt. Andernfalls
697 // (EndCreate()==false) gehe ich davon aus, dass weitere Punkte zur
698 // Objekterzeugung notwendig sind (Polygon,...). Der Parameter eCmd
699 // enthaelt die Anzahl der Mausklicks (so die App diese durchreicht).
700 // BckCreate() -> Letztes EndCreate() rueckgaengig machen (z.B. letzten
701 // Polygonpunkt wieder loeschen).
702 // RetrunCode: true=Weiter gehts, false=Create dadurch abgebrochen.
703 virtual bool BegCreate(SdrDragStat& rStat);
704 virtual bool MovCreate(SdrDragStat& rStat); // TRUE=Xor muss repainted werden
705 virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd);
706 virtual bool BckCreate(SdrDragStat& rStat);
707 virtual void BrkCreate(SdrDragStat& rStat);
709 // damit holt man sich den Pointer, der das Createn dieses Objekts symbolisiert
710 virtual Pointer GetCreatePointer() const;
712 // Polygon das waehrend des Erzeugens aufgezogen wird
713 virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const;
715 // Die Methoden Move, Resize, Rotate, Mirror, Shear, SetSnapRect und
716 // SetLogicRect rufen jeweils die entsprechenden Nbc-Methoden, versenden einen
717 // Repaint-Broadcast und setzen den Modified-Status am Model. Abgeleitete
718 // Objekte sollten i.d.R. nur die Nbc-Methoden ueberladen.
719 // Nbc bedeutet: 'NoBroadcast'.
720 virtual void NbcMove (const Size& rSiz);
721 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
722 virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs);
723 virtual void NbcMirror(const Point& rRef1, const Point& rRef2);
724 virtual void NbcShear (const Point& rRef, long nWink, double tn, bool bVShear);
726 virtual void Move (const Size& rSiz);
727 virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true);
728 virtual void Rotate(const Point& rRef, long nWink, double sn, double cs);
729 virtual void Mirror(const Point& rRef1, const Point& rRef2);
730 virtual void Shear (const Point& rRef, long nWink, double tn, bool bVShear);
732 // Die relative Position eines Zeichenobjektes ist die Entfernung der
733 // linken oberen Eche des logisch umschliessenden Rechtecks (SnapRect)
734 // zum Anker.
735 virtual void NbcSetRelativePos(const Point& rPnt);
736 virtual void SetRelativePos(const Point& rPnt);
737 virtual Point GetRelativePos() const;
738 void ImpSetAnchorPos(const Point& rPnt);
739 virtual void NbcSetAnchorPos(const Point& rPnt);
740 virtual void SetAnchorPos(const Point& rPnt);
741 virtual const Point& GetAnchorPos() const;
743 // Snap wird nicht auf dem BoundRect ausgefuehrt, sondern nach Moeglichkeit auf
744 // logischen Koordinaten (also ohne Beruecksichtigung von Strichstaerke, ... ).
745 // SetSnapRect() versucht das Objekt so hinzusizen, dass es in das uebergebene
746 // Rect passt (ohne Strichstaerke, ...)
747 virtual void RecalcSnapRect();
748 virtual const Rectangle& GetSnapRect() const;
749 virtual void SetSnapRect(const Rectangle& rRect);
750 virtual void NbcSetSnapRect(const Rectangle& rRect);
752 // Logic Rect: Beim Rect z.B. ohne Beruecksichtigung des Drehwinkels, Shear, ...
753 virtual const Rectangle& GetLogicRect() const;
754 virtual void SetLogicRect(const Rectangle& rRect);
755 virtual void NbcSetLogicRect(const Rectangle& rRect);
757 /** the defaul is to set the logic rect to the given rectangle rMaxRect. If the shape
758 has an intrinsic aspect ratio it may set the logic rect so the aspect
759 ratio is kept but still inside the rectangle rMaxRect.
761 If bShrinkOnly is set to true, the size of the current logic rect will not
762 be changed if it is smaller than the given rectangle rMaxRect. */
763 virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false );
765 // Drehwinkel und Shear
766 virtual long GetRotateAngle() const;
767 virtual long GetShearAngle(bool bVertical = false) const;
769 // Zum Fangen von/auf ausgezeichneten Punkten eines Obj (Polygonpunkte,
770 // Kreismittelpunkt, ...)
771 virtual sal_uInt32 GetSnapPointCount() const;
772 virtual Point GetSnapPoint(sal_uInt32 i) const;
774 // Fuer Objekte, bei denen jeder einzelne Punkt verschoben werden kann,
775 // z.B. Polygone, Polylines, Linien, ... . Bei diesen Objekten werden
776 // Punkte selektiert (ggf. Mehrfachselektion), geloescht, eingefuegt,
777 // als Mehrfachselektion verschoben und gedreht, ...
778 // Nur solche Objekte koennen PlusHandles haben (z.B. die Gewichte an den
779 // Bezierkurven.
780 virtual sal_Bool IsPolyObj() const;
781 virtual sal_uInt32 GetPointCount() const;
782 virtual Point GetPoint(sal_uInt32 i) const;
783 void SetPoint(const Point& rPnt, sal_uInt32 i);
784 virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i);
786 // Alle geometrischen Daten holen fuer's Undo/Redo
787 virtual SdrObjGeoData* GetGeoData() const;
788 virtual void SetGeoData(const SdrObjGeoData& rGeo);
790 // ItemSet access
791 const SfxItemSet& GetMergedItemSet() const;
792 void SetMergedItem(const SfxPoolItem& rItem);
793 void ClearMergedItem(const sal_uInt16 nWhich = 0);
794 void SetMergedItemSet(const SfxItemSet& rSet, bool bClearAllItems = false);
795 const SfxPoolItem& GetMergedItem(const sal_uInt16 nWhich) const;
797 // internal versions
798 protected:
799 const SfxItemSet& GetObjectItemSet() const;
800 void SetObjectItem(const SfxPoolItem& rItem);
801 void SetObjectItemSet(const SfxItemSet& rSet);
802 const SfxPoolItem& GetObjectItem(const sal_uInt16 nWhich) const;
804 // get SfxMapUnit the object is using
805 SfxMapUnit GetObjectMapUnit() const;
807 public:
808 // syntactical sugar for ItemSet accesses
809 void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems = false);
811 // NotPersistAttr fuer Layer, ObjName, geometrische Transformationen, ...
812 void TakeNotPersistAttr(SfxItemSet& rAttr, bool bMerge) const;
813 void ApplyNotPersistAttr(const SfxItemSet& rAttr);
814 void NbcApplyNotPersistAttr(const SfxItemSet& rAttr);
816 // bDontRemoveHardAttr=FALSE: alle in der Vorlage gesetzten Attribute werden am
817 // Zeichenobjekt auf Default gesetzt; TRUE: alle harten Attribute bleiben erhalten.
818 void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
819 virtual void NbcSetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
820 SfxStyleSheet* GetStyleSheet() const;
822 // TextEdit
823 virtual bool HasTextEdit() const;
825 // Return==TRUE: TextEditMode gestartet
826 virtual sal_Bool BegTextEdit(SdrOutliner& rOutl);
827 virtual void EndTextEdit(SdrOutliner& rOutl);
829 // Text wird im Format des Outliners gehalten
830 // SetOutlinerParaObject: Eigentumsuebereignung von *pTextObject!
831 virtual void SetOutlinerParaObject(OutlinerParaObject* pTextObject);
832 virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject);
833 virtual OutlinerParaObject* GetOutlinerParaObject() const;
834 virtual void NbcReformatText();
835 virtual void ReformatText();
837 void BurnInStyleSheetAttributes();
839 // Macrofaehigkeit, z.B. ein Rechteck als PushButton.
840 virtual bool HasMacro() const;
841 virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec) const;
842 virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec) const;
843 virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec) const;
844 virtual bool DoMacro (const SdrObjMacroHitRec& rRec);
845 virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec) const;
846 bool IsMacroHit(const SdrObjMacroHitRec& rRec) const;
848 // Konnektoren. (siehe auch Dokumentation in SvdoEdge.HXX, SdrEdgeObj
849 // sowie SvdGlue.HXX und SvdGlEV.HXX)
850 // Es gibt Knoten und Kanten. Eine Kante kann theoretisch auch Knoten
851 // sein, das ist jedoch in dieser Version noch nicht implementiert.
852 // Ein Knoten hat eine Anzahl von Klebepunkten, wo Kanten angeklebt
853 // werden koennen.
854 // Eine Kante kann
855 // - ohne Verbindungen sein
856 // - an einem Ende auf der Wiese stehen und am anderen Ende an
857 // genau einem Knoten gebunden sein
858 // - an beiden Enden mit jeweils genau einem Knoten verbunden sein.
859 // Die Kante ist Listener bei seinen bis zu 2 Knoten.
860 // Wird der Knoten verschoben oder Resized, folgen alle angebundenen
861 // Kanten. Ebenso bei SetGluePoint()... am Knoten.
862 // Beim Verschieben/Resizen der Kante wird dagegen die Verbindung
863 // geloesst.
864 // Objekt ist ein Knoten?
865 virtual bool IsNode() const;
867 // Automatische Klebepunkte:
868 // je 4 Scheitelpunkt- und Eckpositionen muss ein Knotenobjekt liefern
869 // i.d.R. 0=oben, 1=rechts, 2=unten, 3=links
870 virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const;
872 // i.d.R. 0=linksoben, 1=rechtsoben, 2=rechtsunten, 3=linksunten
873 virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const;
875 // Liste aller Klebepunkte. Kann NULL sein.
876 virtual const SdrGluePointList* GetGluePointList() const;
877 //virtual SdrGluePointList* GetGluePointList();
879 // Nach veraendern der GluePointList muss man am Obj SendRepaintBroadcast rufen!
880 virtual SdrGluePointList* ForceGluePointList();
882 // Temporaer zu setzen fuer Transformationen am Bezugsobjekt
883 void SetGlueReallyAbsolute(bool bOn);
884 void NbcRotateGluePoints(const Point& rRef, long nWink, double sn, double cs);
885 void NbcMirrorGluePoints(const Point& rRef1, const Point& rRef2);
886 void NbcShearGluePoints (const Point& rRef, long nWink, double tn, bool bVShear);
888 // Objekt ist eine Kante?
889 virtual bool IsEdge() const;
891 // bTail1=TRUE: Linienanfang, sonst LinienEnde
892 // pObj=NULL: Disconnect
893 virtual void ConnectToNode(bool bTail1, SdrObject* pObj);
894 virtual void DisconnectFromNode(bool bTail1);
895 virtual SdrObject* GetConnectedNode(bool bTail1) const;
897 /** sets the writing mode of the object's context
899 Objects which itself do not support different writing modes will ignore this call.
901 Objects which support different writing modes, but have an own, explicit writing mode set,
902 will also ignore this call.
904 Objects which support different writing modes, and whose own mode is set to css.text.WritingMode2.CONTEXT,
905 will use the given writing mode to calculate their "effective writing mode".
907 The behaviour of this method is undefined if you pass css.text.WritingMode2.CONTEXT.
909 @param _nContextWritingMode
910 the effective writing mode of the context of the object
912 virtual void SetContextWritingMode( const sal_Int16 _nContextWritingMode );
914 // Wenn ein Objekt in der Lage ist, sich in ein Polygon oder in eine
915 // Bezierkurve (oder beides) zu verwandeln, dann sollten die folgenden
916 // Methoden ueberladen werden.
917 // Z.B. Ein RectObj mit Strichstaerke 10, SOLID_PEN in Polygon wandeln:
918 // Im Modus bLineToArea=false soll ein PolyObj mit 4 Stuetzstellen,
919 // Strichstaerke 10 und SOLiD_PEN erzeugt werden.
920 // Im Modus bLineToArea=true dagegen soll das generierte Obj immer ein
921 // LinienAttribut NULL_PEN haben, und die Linie (auch Linienmuster) selbst
922 // durch Polygonflaechen emuliert werden, die dadurch anschliessend vom
923 // Anwender manipuliert werden koennen. Das RectObj kann sich somit also
924 // nur korrekt konvertieren, wenn es als Flaechenattribut NULL_BRUSH
925 // besitzt. Es muesste in diesem Fall dann:
926 // - SOLID_BRUSH mit der Farbe des gesetzten Pen setzen
927 // - NULL_PEN setzen
928 // - PolyPolygon mit 2 Polygonen zu je 4 Stuetzstellen generieren.
929 // Der Returnwert ist jeweils ein SdrObject*, da als Rueckgabe zur Not
930 // auch Gruppenobjekte erlaubt sind (z.B. fuer SdrTextObj).
931 // Bei der Konvertierung von TextObj nach PathObj wird es wohl so sein,
932 // dass beide Modi (bLineToArea=true/false) identisch sind.
933 // Defaulted sind diese Methoden auf "Ich kann das nicht" (FALSE/NULL).
934 virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const;
935 SdrObject* ConvertToPolyObj(bool bBezier, bool bLineToArea) const;
937 // convert this path object to contour object; bForceLineDash converts even
938 // when there is no filled new polygon created from line-to-polygon conversion,
939 // specially used for XLINE_DASH and 3D conversion
940 SdrObject* ConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const;
941 SdrObject* ImpConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const;
943 // TRUE: Referenz auf ein Obj
944 bool IsVirtualObj() const;
946 // true=Obj kann warsch. gefuellt werden; false=Obj kann warsch. Linienenden haben.
947 // ungueltig, wenn es sich um ein GroupObj handelt.
948 bool IsClosedObj() const;
950 bool IsEdgeObj() const;
951 bool Is3DObj() const;
952 bool IsUnoObj() const;
953 void SetMarkProtect(bool bProt);
954 bool IsMarkProtect() const;
955 void SetInserted(bool bIns);
956 bool IsInserted() const;
957 void SetMoveProtect(bool bProt);
958 bool IsMoveProtect() const;
959 void SetResizeProtect(bool bProt);
960 bool IsResizeProtect() const;
961 void SetPrintable(bool bPrn);
962 bool IsPrintable() const;
963 void SetVisible(bool bVisible);
964 bool IsVisible() const;
965 void SetEmptyPresObj(bool bEpt);
966 bool IsEmptyPresObj() const;
967 void SetNotVisibleAsMaster(bool bFlg);
968 bool IsNotVisibleAsMaster() const;
970 // #i25616#
971 bool LineIsOutsideGeometry() const;
973 // #i25616#
974 bool DoesSupportTextIndentingOnLineWidthChange() const;
976 // applikationsspeziefische Daten
977 sal_uInt16 GetUserDataCount() const;
978 SdrObjUserData* GetUserData(sal_uInt16 nNum) const;
980 void AppendUserData(SdrObjUserData* pData);
982 // Delete entfernt den Record aus der Liste und ruft
983 // ein delete (FreeMem+Dtor).
984 void DeleteUserData(sal_uInt16 nNum);
986 // ItemPool fuer dieses Objekt wechseln
987 void MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L);
989 ////////////////////////////////////////////////////////////////////////////////////////////////////
990 // access to the UNO representation of the shape
991 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape();
992 ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > getWeakUnoShape() const { return maWeakUnoShape; }
994 static SdrObject* getSdrObjectFromXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xInt );
996 /** Sets a new UNO representation of the shape
998 * This is only a public interface function. The actual work is
999 * done by impl_setUnoShape().
1001 * Calling this function is only allowed for the UNO representation
1002 * itself!
1004 void setUnoShape(
1005 const com::sun::star::uno::Reference<
1006 com::sun::star::uno::XInterface>& _rxUnoShape);
1008 /** retrieves the instance responsible for notifying changes in the properties of the shape associated with
1009 the SdrObject
1011 @precond
1012 There already exists an SvxShape instance associated with the SdrObject
1013 @throws ::com::sun::star::uno::RuntimeException
1014 if there does nt yet exists an SvxShape instance associated with the SdrObject.
1016 ::svx::PropertyChangeNotifier&
1017 getShapePropertyChangeNotifier();
1019 /** notifies a change in the given property, to all applicable listeners registered at the associated SvxShape
1021 This method is equivalent to calling getShapePropertyChangeNotifier().notifyPropertyChange( _eProperty ),
1022 exception that it is allowed to be called when there does not yet exist an associated SvxShape - in which
1023 case the method will silently return without doing anything.
1025 void notifyShapePropertyChange( const ::svx::ShapeProperty _eProperty ) const;
1027 ////////////////////////////////////////////////////////////////////////////////////////////////////
1029 // transformation interface for StarOfficeAPI. This implements support for
1030 // homogen 3x3 matrices containing the transformation of the SdrObject. At the
1031 // moment it contains a shearX, rotation and translation, but for setting all linear
1032 // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
1034 // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon
1035 // with the base geometry and returns TRUE. Otherwise it returns FALSE.
1036 virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const;
1038 // sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
1039 // If it's an SdrPathObj it will use the provided geometry information. The Polygon has
1040 // to use (0,0) as upper left and will be scaled to the given size in the matrix.
1041 virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon);
1043 // #116168#
1044 // Give info if object is in destruction
1045 bool IsInDestruction() const;
1047 // return if fill is != XFILL_NONE
1048 bool HasFillStyle() const;
1049 bool HasLineStyle() const;
1051 // on import of OLE object from MS documents the BLIP size might be retrieved,
1052 // the following methods are used to control it;
1053 // usually this data makes no sence after the import is finished, since the object
1054 // might be resized
1055 Rectangle GetBLIPSizeRectangle() const;
1056 void SetBLIPSizeRectangle( const Rectangle& aRect );
1058 /// @see mbDoNotInsertIntoPageAutomatically
1059 void SetDoNotInsertIntoPageAutomatically(bool bSet);
1060 /// @see mbDoNotInsertIntoPageAutomatically
1061 bool IsDoNotInsertIntoPageAutomatically() const;
1063 protected:
1064 /** Sets a new UNO shape
1066 * The default implementation of this function sets the new UNO
1067 * shape. Derived classes should override the function to handle
1068 * any other actions that are needed when the shape is being
1069 * changed.
1071 * The implementation _must_ call the same method of its parent
1072 * class (preferably as the first step)!
1074 virtual void impl_setUnoShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxUnoShape );
1077 Helper function for reimplementing Clone().
1079 template< typename T > T* CloneHelper() const;
1081 private:
1082 /** only for internal use!
1084 SvxShape* getSvxShape();
1086 /** do not use directly, always use getSvxShape() if you have to! */
1087 SvxShape* mpSvxShape;
1088 ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface >
1089 maWeakUnoShape;
1090 /** HACK: Do not automatically insert newly created object into a page.
1092 * The user needs to do it manually later.
1094 bool mbDoNotInsertIntoPageAutomatically;
1097 //************************************************************
1098 // SdrDummyObj
1100 // Wer sich eigene Objekte schafft muss einen Link in der Klasse
1101 // SdrObjFactory setzen. Der Handler hat folgendes aussehen:
1102 // void Hdl(SdrObjFactory*)
1103 // Er muss sich aus der uebergebenen Instanz die Werte nInventor und
1104 // nIdentifier ansehen und entsprechend mit new eine Zeichenobjektinstanz
1105 // erzeugen. Einen Zeiger auf diese Instanz hat er in der Membervariablen
1106 // pNewObj zu hinterlassen.
1108 //************************************************************
1110 class SVX_DLLPUBLIC SdrObjFactory
1112 public:
1113 sal_uInt32 nInventor;
1114 sal_uInt16 nIdentifier;
1116 // fuer MakeNewObj():
1117 SdrPage* pPage;
1118 SdrModel* pModel;
1119 SdrObject* pNewObj;
1121 // fuer MakeNewObjUserData():
1122 SdrObject* pObj;
1123 SdrObjUserData* pNewData;
1125 private:
1126 SVX_DLLPRIVATE SdrObjFactory(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pNewPage, SdrModel* pNewModel);
1128 public:
1129 static SdrObject* MakeNewObject(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pPage, SdrModel* pModel=NULL);
1130 static void InsertMakeObjectHdl(const Link& rLink);
1131 static void RemoveMakeObjectHdl(const Link& rLink);
1132 static void InsertMakeUserDataHdl(const Link& rLink);
1133 static void RemoveMakeUserDataHdl(const Link& rLink);
1136 typedef tools::WeakReference< SdrObject > SdrObjectWeakRef;
1138 template< typename T > T* SdrObject::CloneHelper() const
1140 OSL_ASSERT( typeid( T ) == typeid( *this ));
1141 T* pObj = dynamic_cast< T* >( SdrObjFactory::MakeNewObject(GetObjInventor(),GetObjIdentifier(),NULL));
1142 if (pObj!=NULL)
1143 *pObj=*static_cast< const T* >( this );
1144 return pObj;
1147 #endif //_SVDOBJ_HXX
1149 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */