21 #include <config_features.h>
25 #include <rtl/ustrbuf.hxx>
27 #include <com/sun/star/lang/XComponent.hpp>
28 #include <com/sun/star/text/RelOrientation.hpp>
39 #include <editeng/editeng.hxx>
84 #include <svx/strings.hrc>
115 #include <unordered_set>
118 #include <libxml/xmlwriter.h>
143 nInventor(rData.nInventor),
144 nIdentifier(rData.nIdentifier) {}
164 bResizeFreeAllowed(true),
165 bResizePropAllowed(true),
166 bRotateFreeAllowed(true),
167 bRotate90Allowed(true),
168 bMirrorFreeAllowed(true),
169 bMirror45Allowed(true),
170 bMirror90Allowed(true),
171 bTransparenceAllowed(true),
173 bEdgeRadiusAllowed(true),
174 bNoOrthoDesired(true),
176 bCanConvToPath(true),
177 bCanConvToPoly(true),
178 bCanConvToContour(false),
179 bCanConvToPathLineToArea(true),
180 bCanConvToPolyLineToArea(true) {}
192 meRelativeWidthRelation(
text::RelOrientation::PAGE_FRAME),
193 meRelativeHeightRelation(
text::RelOrientation::PAGE_FRAME) {}
201 return std::make_unique<sdr::properties::EmptyProperties>(*this);
213 const_cast< SdrObject* >(
this)->CreateObjectSpecificProperties();
224 mpImpl->maObjectUsers.push_back(&rNewUser);
229 const sdr::ObjectUserVector::iterator aFindResult =
230 std::find(
mpImpl->maObjectUsers.begin(),
mpImpl->maObjectUsers.end(), &rOldUser);
231 if (aFindResult !=
mpImpl->maObjectUsers.end())
233 mpImpl->maObjectUsers.erase(aFindResult);
242 return std::make_unique<sdr::contact::ViewContactOfSdrObj>(*this);
250 const_cast< SdrObject* >(
this)->CreateObjectSpecificViewContact();
293 if(pOldPage != pNewPage)
325 SAL_WARN(
"svx",
"SdrObject::~SdrObject: Destructed incarnation of SdrObject not member of this SdrModel (!)");
331 : mpFillGeometryDefiningShape(nullptr)
332 ,mrSdrModelFromSdrObject(rSdrModel)
335 ,mpParentOfSdrObject(nullptr)
339 ,mpSvxShape( nullptr )
341 ,mbDoNotInsertIntoPageAutomatically(false)
375 aList.swap(
mpImpl->maObjectUsers);
378 DBG_ASSERT(pObjectUser,
"SdrObject::~SdrObject: corrupt ObjectUser list (!)");
379 pObjectUser->ObjectInDestruction(*
this);
400 if(
nullptr == pObject)
410 if(pShape->HasSdrObjectOwnership())
422 uno::Reference< lang::XComponent > xShapeComp( pObject->
getWeakUnoShape(), uno::UNO_QUERY_THROW );
423 xShapeComp->dispose();
425 catch(
const uno::Exception& )
464 if(
nullptr == pOldPage ||
nullptr == pNewPage)
499 mpImpl->meRelativeWidthRelation = eValue;
509 mpImpl->meRelativeHeightRelation = eValue;
514 if (!
mpImpl->mnRelativeWidth)
517 return &*
mpImpl->mnRelativeWidth;
522 return mpImpl->meRelativeWidthRelation;
527 if (!
mpImpl->mnRelativeHeight)
530 return &*
mpImpl->mnRelativeHeight;
535 return mpImpl->meRelativeHeightRelation;
540 mpImpl->mpDiagramData = pDiagramData;
545 return mpImpl->mpDiagramData;
588 for (
size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum) {
613 SdrEdgeObj const*
const pEdge(dynamic_cast<SdrEdgeObj const*>(&rListener));
614 rListener.
StartListening(*
pPlusData->pBroadcast, pEdge ? DuplicateHandling::Allow : DuplicateHandling::Unexpected);
621 if (!
pPlusData->pBroadcast->HasListeners()) {
656 if(
nullptr == pParent)
679 std::unique_ptr<SdrUndoAction> pUndoAction =
726 std::unique_ptr<SdrUndoAction> pUndoAction =
770 std::unique_ptr<SdrUndoAction> pUndoAction =
822 rVal <<= uno::Sequence<beans::PropertyValue>();
890 if(xPrimitives.empty())
897 if(!aRange.isEmpty())
900 static_cast<tools::Long>(floor(aRange.getMinX())),
916 if(!(bPlusDataBroadcast || bObjectChange))
921 if(bPlusDataBroadcast)
957 aObjectVector.push_back(const_cast< SdrObject* >(
this));
968 return (eXLS != drawing::LineStyle_NONE);
979 return CloneHelper< SdrObject >(rTargetModel);
1026 if (!aName.isEmpty())
1030 sName.append(aName);
1033 return sName.makeStringAndClear();
1038 return SvxResId(STR_ObjNamePluralNONE);
1044 sal_Int32
nPos = aStr.indexOf(
"%1");
1049 aStr = aStr.replaceAt(nPos, 2, aObjName);
1052 nPos = aStr.indexOf(
"%2");
1055 aStr = aStr.replaceAt(nPos, 2,
"0");
1135 if(!xSequence.empty())
1142 aExtractor.
process(xSequence);
1144 const sal_uInt32 nSize(rResult.size());
1153 for(sal_uInt32
a(0);
a < nSize;
a++)
1175 for (sal_uInt32 nHdlNum=0; nHdlNum<8; ++nHdlNum)
1177 std::unique_ptr<SdrHdl> pH;
1188 rHdlList.
AddHdl(std::move(pH));
1216 if (bLft) aTmpRect.
SetLeft(aPos.X() );
1217 if (bRgt) aTmpRect.
SetRight(aPos.X() );
1218 if (bTop) aTmpRect.
SetTop(aPos.Y() );
1219 if (bBtm) aTmpRect.
SetBottom(aPos.Y() );
1227 bool bXNeg=(nXMul<0)!=(nXDiv<0);
1228 bool bYNeg=(nYMul<0)!=(nYDiv<0);
1229 nXMul=std::abs(nXMul);
1230 nYMul=std::abs(nYMul);
1231 nXDiv=std::abs(nXDiv);
1232 nYDiv=std::abs(nYDiv);
1240 bool bUseX=(aXFact<aYFact) != bBigOrtho;
1243 if (bYNeg) nNeed=-nNeed;
1248 if (bXNeg) nNeed=-nNeed;
1253 if ((bLft || bRgt) && nXDiv!=0) {
1256 aTmpRect.
AdjustTop( -((nNeed-nHgt0b)/2) );
1259 if ((bTop || bBtm) && nYDiv!=0) {
1373 return PointerStyle::Cross;
1387 if (bXMirr || bYMirr) {
1409 NbcRotate( rRef, nAngle, sin( a ), cos( a ) );
1418 if (sn==1.0 && cs==0.0) {
1423 }
else if (sn==0.0 && cs==-1.0) {
1428 }
else if (sn==-1.0 && cs==0.0) {
1454 }
else if (dx==dy) {
1459 }
else if (dx==-dy) {
1503 mpImpl->mnRelativeWidth.reset();
1504 mpImpl->meRelativeWidthRelation = text::RelOrientation::PAGE_FRAME;
1505 mpImpl->meRelativeHeightRelation = text::RelOrientation::PAGE_FRAME;
1506 mpImpl->mnRelativeHeight.reset();
1518 NbcCrop(rRef, fxFact, fyFact);
1558 Size aSiz(rPnt.X()-aRelPos0.X(),rPnt.Y()-aRelPos0.Y());
1721 xmlTextWriterStartElement(pWriter, BAD_CAST(
"SdrObject"));
1722 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
this);
1723 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"symbol"),
"%s", BAD_CAST(
typeid(*this).name()));
1724 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"name"),
"%s", BAD_CAST(
GetName().toUtf8().getStr()));
1725 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"title"),
"%s", BAD_CAST(
GetTitle().toUtf8().getStr()));
1726 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"description"),
"%s", BAD_CAST(
GetDescription().toUtf8().getStr()));
1727 xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"nOrdNum"),
"%" SAL_PRIuUINT32,
GetOrdNumDirect());
1728 xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"aOutRect"), BAD_CAST(
aOutRect.
toString().getStr()));
1741 pOutliner->dumpAsXml(pWriter);
1743 xmlTextWriterEndElement(pWriter);
1792 return PointerStyle::RefHand;
1804 for(
auto const& rPolygon : aPolyPolygon)
1841 if (rGeo.
pGPL!=
nullptr) {
1864 if (rGeo.
pGPL!=
nullptr) {
1963 aRef1.setX(static_cast<const SdrTransformRef1XItem*>(pPoolItem)->
GetValue() );
1966 aRef1.setY(static_cast<const SdrTransformRef1YItem*>(pPoolItem)->
GetValue() );
1980 aNewSnap.
Move(n-aNewSnap.
Left(),0);
1984 aNewSnap.
Move(0,n-aNewSnap.
Top());
1994 if (aNewSnap!=rSnap) {
2067 if(
nullptr != pLayer)
2069 nLayer=pLayer->
GetID();
2089 if (aNewLogic!=rLogic) {
2127 if (!aName.isEmpty())
2137 if(
nullptr != pLayer)
2142 Point aRef2(aRef1); aRef2.AdjustY( 1 );
2201 case 0 : aPt=aR.
TopLeft();
break;
2244 pGPL->
Rotate(rRef,nAngle,sn,cs,
this);
2254 pGPL->
Mirror(rRef1,rRef2,
this);
2264 pGPL->
Shear(rRef,tn,bVShear,
this);
2287 rExtractedHairlines.clear();
2288 rExtractedLineFills.clear();
2290 if(rxSequence.empty())
2298 aExtractor.
process(rxSequence);
2318 if(!xSequence.empty())
2328 aMergedHairlinePolyPolygon.
append(rExtractedHairline);
2339 if(aMergedLineFillPolyPolygon.
count() || (bForceLineDash && aMergedHairlinePolyPolygon.
count()))
2345 bool bBuildGroup(
false);
2347 if(aMergedLineFillPolyPolygon.
count())
2353 aMergedLineFillPolyPolygon);
2367 if(aMergedHairlinePolyPolygon.
count())
2376 aMergedHairlinePolyPolygon);
2388 if(aLinePolygonPart)
2395 bool bAddOriginalGeometry(
false);
2400 if(eOldFillStyle != drawing::FillStyle_NONE)
2402 bAddOriginalGeometry =
true;
2407 if(bBuildGroup || bAddOriginalGeometry)
2411 if(bAddOriginalGeometry)
2425 if(aLinePolygonPart)
2430 if(aLineHairlinePart)
2439 if(aLinePolygonPart)
2441 pRetval = aLinePolygonPart;
2443 else if(aLineHairlinePart)
2445 pRetval = aLineHairlinePart;
2451 if(
nullptr == pRetval)
2483 if(dynamic_cast<const SdrObjGroup*>( pRet) !=
nullptr)
2498 if (
SdrPathObj *pPathObj = dynamic_cast<SdrPathObj*>(pRet))
2523 if(pRet && bLineToArea)
2526 pRet.reset(pNewRet);
2530 if(pRet && pRet->GetLayer() !=
GetLayer())
2562 pPlusData->pBroadcast->Broadcast(aHint);
2620 return pPlusData->pUserDataList->GetUserDataCount();
2626 return &
pPlusData->pUserDataList->GetUserData(nNum);
2633 OSL_FAIL(
"SdrObject::AppendUserData(): pData is NULL pointer.");
2641 pPlusData->pUserDataList->AppendUserData(std::move(pData));
2648 pPlusData->pUserDataList->DeleteUserData(nNum);
2653 OSL_FAIL(
"SdrObject::DeleteUserData(): Invalid Index.");
2710 switch ( eUserCall )
2726 const uno::Reference< uno::XInterface>& xOldUnoShape(
maWeakUnoShape );
2728 if ( _rxUnoShape == xOldUnoShape )
2730 if ( !xOldUnoShape.is() )
2740 bool bTransferOwnership(
false );
2741 if ( xOldUnoShape.is() )
2750 mpSvxShape = comphelper::getUnoTunnelImplementation<SvxShape>( _rxUnoShape );
2753 if ( bTransferOwnership )
2757 SAL_WARN(
"svx.uno",
"a UNO shape took over an SdrObject previously owned by another UNO shape!");
2769 #if OSL_DEBUG_LEVEL > 0
2771 "SdrObject::getSvxShape: still having IMPL-Pointer to dead object!" );
2786 OSL_ENSURE(
mpSvxShape ==
nullptr,
"SdrObject::getUnoShape: XShape already dead, but still an IMPL pointer!" );
2822 if(
nullptr == pPageCandidate)
2836 if(
nullptr != pPageCandidate)
2838 uno::Reference< uno::XInterface > xPage(pPageCandidate->
getUnoPage());
2841 SvxDrawPage* pDrawPage = comphelper::getUnoTunnelImplementation<SvxDrawPage>(xPage);
2928 double fRotate, fShearX;
2929 rMatrix.
decompose(aScale, aTranslate, fRotate, fShearX);
3010 std::unordered_set<OUString> aNameSet;
3019 if (rNameSet.empty())
3029 pObj = aIter.
Next();
3031 rNameSet.insert(pObj->
GetName());
3037 OUString sRootName(
GetName());
3038 sal_Int32
index = sName.lastIndexOf(
"_");
3040 sRootName = sRootName.copy(0, index);
3043 while (rNameSet.find(sName) != rNameSet.end())
3045 sName = sRootName +
"_" + OUString::number(n++);
3047 rNameSet.insert(sName);
3071 bool bSetSnapRect(
nullptr != pSnapRect);
3075 switch (nIdentifier)
3079 if(
nullptr != pSnapRect)
3094 if(
nullptr != pSnapRect)
3123 if(
nullptr != pSnapRect)
3129 bSetSnapRect =
false;
3145 if(
nullptr != pSnapRect)
3147 pObj =
new SdrCircObj(rSdrModel, eCircKind, *pSnapRect);
3148 bSetSnapRect =
false;
3175 #if HAVE_FEATURE_AVMEDIA
3194 if(bSetSnapRect &&
nullptr != pSnapRect)
3205 auto it = std::find(rLL.begin(), rLL.end(), rLink);
3206 if (it != rLL.end()) {
3207 OSL_FAIL(
"SdrObjFactory::InsertMakeObjectHdl(): Link already in place.");
3209 rLL.push_back(rLink);
3216 auto it = std::find(rLL.begin(), rLL.end(), rLink);
3217 if (it != rLL.end())
void TakeNotPersistAttr(SfxItemSet &rAttr) const
virtual void Shear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
virtual bool HasTextEdit() const
virtual const SfxItemSet & GetObjectItemSet() const =0
std::shared_ptr< DiagramDataInterface > mpDiagramData
virtual bool BckCreate(SdrDragStat &rStat)
User data of a drawing object, e.g.
void SetRelativeWidthRelation(sal_Int16 eValue)
virtual basegfx::B2DPolyPolygon TakeXorPoly() const
The Xor-Polygon is required by the View to drag the object.
bool IsMacroHit(const SdrObjMacroHitRec &rRec) const
void SetNavigationPosition(const sal_uInt32 nPosition)
const css::uno::WeakReference< css::uno::XInterface > & getWeakUnoShape() const
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const
static std::unique_ptr< SdrUndoAction > CreateUndoObjectStrAttr(SdrObject &rObject, SdrUndoObjStrAttr::ObjStrAttrType eObjStrAttrType, const OUString &sOldStr, const OUString &sNewStr)
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
svx::PropertyChangeNotifier & getShapePropertyChangeNotifier()
virtual const tools::Rectangle & GetCurrentBoundRect() const
std::optional< double > mnRelativeHeight
virtual bool BegCreate(SdrDragStat &rStat)
Every object must be able to create itself interactively.
SfxItemPool & GetObjectItemPool() const
Polygon/PolyPolygon represented by SdrPathObj.
virtual void Resize(const Point &rRef, const Fraction &xFact, const Fraction &yFact, bool bUnsetRelative=true)
static SVX_DLLPRIVATE SdrObject * CreateObjectFromFactory(SdrModel &rSdrModel, SdrInventor nInventor, SdrObjKind nIdentifier)
void SetResizeProtect(bool bProt)
void SetPoint(const Point &rPnt, sal_uInt32 i)
struct _xmlTextWriter * xmlTextWriterPtr
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const
SdrObjUserCall * pUserCall
constexpr TypedWhichId< SdrTransformRef1XItem > SDRATTR_TRANSFORMREF1X(SDRATTR_NOTPERSIST_FIRST+30)
void DelReference(SdrVirtObj &rVrtObj)
std::shared_ptr< DiagramDataInterface > GetDiagramData() const
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage)
void SetName(const OUString &rStr, const bool bSetChanged=true)
virtual SdrObjList * getChildrenOfSdrObject() const
virtual bool IsPolyObj() const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact)
OUString GetMetrStr(tools::Long nVal) const
abstract object (SdrObject)
static SvxShape * CreateShapeByTypeAndInventor(sal_uInt16 nType, SdrInventor nInventor, SdrObject *pObj, SvxDrawPage *pPage=nullptr, OUString const &referer=OUString())
void RemoveObjectUser(sdr::ObjectUser &rOldUser)
const Point & GetStart() const
rectangle (round corners optional)
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs)
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties()
std::vector< Link< SdrObjCreatorParams, SdrObject * > > & ImpGetUserMakeObjHdl()
constexpr TypedWhichId< SdrObjPrintableItem > SDRATTR_OBJPRINTABLE(SDRATTR_NOTPERSIST_FIRST+2)
bool IsInDestruction() const
constexpr TypedWhichId< SdrMoveYItem > SDRATTR_MOVEY(SDRATTR_NOTPERSIST_FIRST+19)
void impAddIncarnatedSdrObjectToSdrModel(const SdrObject &rSdrObject, SdrModel &rSdrModel)
virtual void NbcInsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
OUString GetDescription() const
bool HasFillStyle() const
constexpr TypedWhichId< XFillStyleItem > XATTR_FILLSTYLE(XATTR_FILL_FIRST)
virtual Point GetRelativePos() const
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const
void SetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr)
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
virtual bool HasText() const
SdrObject * GetObj(size_t nNum) const
void RecalcObjOrdNums()
recalculate order numbers / ZIndex
virtual bool IsTextBox() const
Is this a textbox of a drawinglayer shape?
size_t GetObjCount() const
virtual void SetBoundRectDirty()
void SetGlueReallyAbsolute(bool bOn)
virtual ~SdrObjUserCall()
virtual void addCropHandles(SdrHdlList &rTarget) const
void setUnoShape(const css::uno::Reference< css::uno::XInterface > &_rxUnoShape)
void SetRelativeHeightRelation(sal_Int16 eValue)
virtual bool hasSpecialDrag() const
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
static SdrObject * MakeNewObject(SdrModel &rSdrModel, SdrInventor nInventor, SdrObjKind nObjIdentifier, const tools::Rectangle *pSnapRect=nullptr)
void DrawPolyLine(const tools::Polygon &rPoly)
SdrObjUserData(SdrInventor nInv, sal_uInt16 nId)
static void extractLineContourFromPrimitive2DSequence(const drawinglayer::primitive2d::Primitive2DContainer &rxSequence, basegfx::B2DPolygonVector &rExtractedHairlines, basegfx::B2DPolyPolygonVector &rExtractedLineFills)
virtual OUString TakeObjNameSingul() const
constexpr TypedWhichId< XLineStyleItem > XATTR_LINESTYLE(XATTR_LINE_FIRST)
const SfxBroadcaster * GetBroadcaster() const
static void InsertMakeObjectHdl(Link< SdrObjCreatorParams, SdrObject * > const &rLink)
constexpr TypedWhichId< SdrVertShearOneItem > SDRATTR_VERTSHEARONE(SDRATTR_NOTPERSIST_FIRST+24)
constexpr TypedWhichId< SdrYesNoItem > SDRATTR_OBJMOVEPROTECT(SDRATTR_NOTPERSIST_FIRST+0)
tools::Rectangle ImpDragCalcRect(const SdrDragStat &rDrag) const
virtual void ConnectToNode(bool bTail1, SdrObject *pObj)
virtual void AddToHdlList(SdrHdlList &rHdlList) const
void NbcMirrorGluePoints(const Point &rRef1, const Point &rRef2)
void SetEmptyPresObj(bool bEpt)
virtual sal_uInt32 GetPointCount() const
static void Free(SdrObject *&_rpObject)
virtual SdrObjKind GetObjIdentifier() const
virtual ~SdrObject() override
virtual sdr::properties::BaseProperties & GetProperties() const
::std::vector< ObjectUser * > ObjectUserVector
EmbeddedObjectRef * pObject
All geometrical data of an arbitrary object for use in undo/redo.
SVX_DLLPRIVATE void setParentOfSdrObject(SdrObjList *pNew)
virtual SdrObjList * GetSubList() const
virtual SdrObjGeoData * GetGeoData() const
void AddListener(SfxListener &rListener)
virtual void AddToPlusHdlList(SdrHdlList &rHdlList, SdrHdl &rHdl) const
sdr::contact::ViewContact & GetViewContact() const
B2DPolyPolygon mergeToSinglePolyPolygon(const B2DPolyPolygonVector &rInput)
void SetGrabBagItem(const css::uno::Any &rVal)
SdrCircKind ToSdrCircKind(SdrObjKind eKind)
void AddObjectUser(sdr::ObjectUser &rNewUser)
virtual const SfxItemSet & GetMergedItemSet() const
void ImpSetAnchorPos(const Point &rPnt)
virtual const tools::Rectangle & GetSnapRect() const
constexpr TypedWhichId< SdrOneSizeHeightItem > SDRATTR_ONESIZEHEIGHT(SDRATTR_NOTPERSIST_FIRST+13)
void impRemoveIncarnatedSdrObjectToSdrModel(const SdrObject &rSdrObject, SdrModel &rSdrModel)
virtual void ForceStyleToHardAttributes()
Rectangle objects (rectangle, circle, ...)
virtual SdrObject * CheckMacroHit(const SdrObjMacroHitRec &rRec) const
virtual void SetMergedItemSet(const SfxItemSet &rSet, bool bClearAllItems=false)
constexpr TypedWhichId< XLineTransparenceItem > XATTR_LINETRANSPARENCE(XATTR_LINE_FIRST+10)
const SdrHdl * GetHdl() const
SdrObjList * mpParentOfSdrObject
void ClearMergedItem(const sal_uInt16 nWhich=0)
virtual void BrkCreate(SdrDragStat &rStat)
void reset_preserve_ptr_during(uniqueptr &ptr)
constexpr TypedWhichId< SdrResizeYOneItem > SDRATTR_RESIZEYONE(SDRATTR_NOTPERSIST_FIRST+21)
virtual css::uno::Reference< css::uno::XInterface > getUnoShape()
virtual bool EndCreate(SdrDragStat &rStat, SdrCreateCmd eCmd)
void Mirror(const Point &rRef1, const Point &rRef2, const SdrObject *pObj)
SdrPage * getSdrPageFromSdrObject() const
virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const
OUString SvxResId(const char *pId)
virtual Point GetSnapPoint(sal_uInt32 i) const
virtual void SetAnchorPos(const Point &rPnt)
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
void SetRelativeHeight(double nValue)
const SfxItemSet & GetObjectItemSet() const
SfxStyleSheet * GetStyleSheet() const
SdrObject * SdrObjectPrimitiveHit(const SdrObject &rObject, const Point &rPnt, sal_uInt16 nTol, const SdrPageView &rSdrPageView, const SdrLayerIDSet *pVisiLayer, bool bTextOnly, drawinglayer::primitive2d::Primitive2DContainer *pHitContainer)
void SetOrtho4Possible(bool bOn=true)
virtual void Crop(const basegfx::B2DPoint &rRef, double fxFact, double fyFact)
void SetMergedItemSet(const SfxItemSet &rSet, bool bClearAllItems=false)
void getMergedHierarchySdrLayerIDSet(SdrLayerIDSet &rSet) const
void TakeCreateRect(tools::Rectangle &rRect) const
void Rotate(const Point &rRef, Degree100 nAngle, double sn, double cs, const SdrObject *pObj)
B2DHomMatrix createScaleTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fTranslateX, double fTranslateY)
virtual void RecalcSnapRect()
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
void BurnInStyleSheetAttributes()
constexpr TypedWhichId< SdrOnePositionYItem > SDRATTR_ONEPOSITIONY(SDRATTR_NOTPERSIST_FIRST+11)
void SetDiagramData(std::shared_ptr< DiagramDataInterface > pDiagramData)
constexpr TypedWhichId< SdrAngleItem > SDRATTR_ROTATEANGLE(SDRATTR_NOTPERSIST_FIRST+16)
constexpr SdrLayerID SDRLAYER_NOTFOUND(0xff)
void SetObjectItem(const SfxPoolItem &rItem)
void SetRelativeWidth(double nValue)
std::unique_ptr< SfxGrabBagItem > pGrabBagItem
bool Equals(const SfxItemSet &, bool bComparePool) const
virtual ~SdrObjUserData()
void NbcApplyNotPersistAttr(const SfxItemSet &rAttr)
void SetMoveProtect(bool bProt)
virtual void SetChanged(bool bFlg=true)
std::optional< double > mnRelativeWidth
virtual SdrObject * GetConnectedNode(bool bTail1) const
virtual void Changed(const SdrObject &rObj, SdrUserCallType eType, const tools::Rectangle &rOldBoundRect)
SdrObject & operator=(const SdrObject &rObj)
virtual bool HasLimitedRotation() const
SdrLayer * GetLayer(sal_uInt16 i)
void SetMarkProtect(bool bProt)
sal_uInt32 GetOrdNumDirect() const
SdrObject * GetConnectedNode(bool bTail1) const override
constexpr TypedWhichId< SdrHorzShearOneItem > SDRATTR_HORZSHEARONE(SDRATTR_NOTPERSIST_FIRST+23)
virtual ~ISdrObjectFilter()=0
Polyline represented by SdrPathObj.
virtual SfxStyleSheet * GetStyleSheet() const =0
exports com.sun.star. text
void notifyPropertyChange(const ShapeProperty _eProperty) const
notifies changes in the given property to all registered listeners
virtual void SetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr)=0
constexpr TypedWhichId< SdrOneSizeWidthItem > SDRATTR_ONESIZEWIDTH(SDRATTR_NOTPERSIST_FIRST+12)
const SfxPoolItem & GetObjectItem(const sal_uInt16 nWhich) const
virtual bool MovCreate(SdrDragStat &rStat)
std::unordered_set< const SdrObject * > maAllIncarnatedObjects
virtual void NbcSetPoint(const Point &rPnt, sal_uInt32 i)
void ResizeRect(tools::Rectangle &rRect, const Point &rRef, const Fraction &rxFact, const Fraction &ryFact)
virtual void SetLayer(SdrLayerID nLayer)
#define DBG_UNHANDLED_EXCEPTION(...)
void AddReference(SdrVirtObj &rVrtObj)
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
UNDERLYING_TYPE get() const
virtual const SdrGluePointList * GetGluePointList() const
bool mbSupportTextIndentingOnLineWidthChange
virtual void SetObjectItem(const SfxPoolItem &rItem)=0
css::uno::WeakReference< css::uno::XInterface > maWeakUnoShape
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
#define DBG_ASSERT(sCon, aError)
void SetMergedItemSetAndBroadcast(const SfxItemSet &rSet, bool bClearAllItems=false)
std::unique_ptr< sdr::properties::BaseProperties > mpProperties
void SingleObjectPainter(OutputDevice &rOut) const
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
tools::Long FRound(double fVal)
virtual void NbcMirror(const Point &rRef1, const Point &rRef2)
SdrObject(SdrModel &rSdrModel)
void TakeSdrObjectOwnership()
takes the ownership of the SdrObject.
constexpr TypedWhichId< SdrLayerNameItem > SDRATTR_LAYERNAME(SDRATTR_NOTPERSIST_FIRST+4)
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon)
tools::Rectangle aOutRect
bool Equals(const SdrObject &) const
virtual void AdjustToMaxRect(const tools::Rectangle &rMaxRect, bool bShrinkOnly=false)
void BroadcastObjectChange() const
constexpr TypedWhichId< SdrMoveXItem > SDRATTR_MOVEX(SDRATTR_NOTPERSIST_FIRST+18)
B2DPolygon createPolygonFromRect(const B2DRectangle &rRect, double fRadiusX, double fRadiusY)
sal_Int32 GetPointCount() const
virtual void SetGeoData(const SdrObjGeoData &rGeo)
virtual Degree100 GetShearAngle(bool bVertical=false) const
virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat &rDrag) const
virtual bool supportsFullDrag() const
sal_uInt32 mnNavigationPosition
OutlineText, special text object for StarDraw.
const SdrPage * GetPage(sal_uInt16 nPgNum) const
void ActionChanged() const
virtual void impl_setUnoShape(const css::uno::Reference< css::uno::XInterface > &_rxUnoShape)
Sets a new UNO shape.
SdrView * GetView() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const
constexpr TypedWhichId< SdrObjVisibleItem > SDRATTR_OBJVISIBLE(SDRATTR_NOTPERSIST_FIRST+35)
tools::Long Width() const
const OUString & GetName() const
void SetMergedItemSetAndBroadcast(const SfxItemSet &rSet, bool bClearAllItems=false)
void DeleteUserData(sal_uInt16 nNum)
OUString GetTitle() const
void NbcShearGluePoints(const Point &rRef, double tn, bool bVShear)
virtual basegfx::B2DPolyPolygon TakeContour() const
contour for TextToContour
SdrModel & getSdrModelFromSdrObject() const
sal_uInt32 GetOrdNum() const
The order number (aka ZOrder, aka z-index) determines whether a SdrObject is located above or below a...
void process(const primitive2d::Primitive2DContainer &rSource)
SdrLayer * GetLayerPerID(SdrLayerID nID)
virtual bool HasMacro() const
void SetPercent(bool bOn)
bool IsGroupObject() const
void SetVisible(bool bVisible)
constexpr TypedWhichId< SdrLogicSizeWidthItem > SDRATTR_LOGICSIZEWIDTH(SDRATTR_NOTPERSIST_FIRST+14)
sal_Int16 meRelativeWidthRelation
virtual void SetLogicRect(const tools::Rectangle &rRect)
virtual void Move(const Size &rSiz)
void SetMergedItem(const SfxPoolItem &rItem)
bool IsResizeProtect() const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
virtual void RecalcBoundRect()
virtual void SetRelativePos(const Point &rPnt)
void SetUserCall(SdrObjUserCall *pUser)
constexpr TypedWhichId< SdrShearAngleItem > SDRATTR_SHEARANGLE(SDRATTR_NOTPERSIST_FIRST+17)
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
virtual void PaintMacro(OutputDevice &rOut, const tools::Rectangle &rDirtyRect, const SdrObjMacroHitRec &rRec) const
virtual css::uno::Reference< css::drawing::XShape > CreateShape(SdrObject *pObj) const
This class represents an embedded or linked bitmap graphic object.
constexpr TypedWhichId< SdrLayerIdItem > SDRATTR_LAYERID(SDRATTR_NOTPERSIST_FIRST+3)
const SdrLayerIDSet * pVisiLayer
virtual sal_uInt32 GetHdlCount() const
Via GetHdlCount the number of Handles can be retrieved.
void SetReallyAbsolute(bool bOn, const SdrObject &rObj)
void notifyShapePropertyChange(const svx::ShapeProperty _eProperty) const
const double * GetRelativeWidth() const
virtual void Mirror(const Point &rRef1, const Point &rRef2)
sal_Int16 GetRelativeWidthRelation() const
virtual SdrInventor GetObjInventor() const
virtual void DisconnectFromNode(bool bTail1)
constexpr TypedWhichId< SdrYesNoItem > SDRATTR_OBJSIZEPROTECT(SDRATTR_NOTPERSIST_FIRST+1)
SdrModel & mrSdrModelFromSdrObject
void AppendUserData(std::unique_ptr< SdrObjUserData > pData)
virtual SdrLayerID GetLayer() const
bool HasLineStyle() const
static SfxItemPool * CreatePool()
constexpr TypedWhichId< SdrRotateOneItem > SDRATTR_ROTATEONE(SDRATTR_NOTPERSIST_FIRST+22)
SvxShape * getSvxShape()
only for internal use!
#define ENSURE_OR_THROW(c, m)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
virtual void RestGeoData(const SdrObjGeoData &rGeo)
static void RemoveMakeObjectHdl(Link< SdrObjCreatorParams, SdrObject * > const &rLink)
virtual const tools::Rectangle & GetLastBoundRect() const
virtual void NbcReformatText()
static SdrItemPool * mpGlobalItemPool
void InsertedStateChange()
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const
void SetActionRect(const tools::Rectangle &rR)
void Broadcast(const SfxHint &rHint)
SdrObjectUniquePtr ConvertToPolyObj(bool bBezier, bool bLineToArea) const
void SetDoNotInsertIntoPageAutomatically(bool bSet)
void SetDefaultMetric(MapUnit eNewMetric)
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact()
virtual void NbcSetOutlinerParaObject(std::unique_ptr< OutlinerParaObject > pTextObject)
sal_Int32 GetDenominator() const
virtual SdrGluePointList * ForceGluePointList()
virtual PointerStyle GetMacroPointer(const SdrObjMacroHitRec &rRec) const
virtual SdrObjGeoData * NewGeoData() const
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
static SdrItemPool & GetGlobalDrawObjectItemPool()
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
virtual void NbcSetSnapRect(const tools::Rectangle &rRect)
void GetGrabBagItem(css::uno::Any &rVal) const
virtual void NbcSetLogicRect(const tools::Rectangle &rRect)
virtual std::unique_ptr< BaseProperties > Clone(SdrObject &rObj) const =0
void SetBLIPSizeRectangle(const tools::Rectangle &aRect)
void SetOrdNum(sal_uInt32 nNum)
void SetObjectItemSet(const SfxItemSet &rSet)
OUString ImpGetDescriptionStr(const char *pStrCacheID) const
object that represents a SdrPage
css::uno::Reference< css::uno::XInterface > const & getUnoPage()
SdrObject * ConvertToContourObj(SdrObject *pRet, bool bForceLineDash=false) const
virtual void NbcMove(const Size &rSiz)
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
const SfxItemSet & GetMergedItemSet() const
SdrObjUserData * GetUserData(sal_uInt16 nNum) const
void SetRasterOp(RasterOp eRasterOp)
virtual PointerStyle GetCreatePointer() const
get the cursor/pointer that signals creating this object
virtual void dumpAsXml(xmlTextWriterPtr pWriter) const
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
virtual SdrObject * CloneSdrObject(SdrModel &rTargetModel) const
void SetOutlinerParaObject(std::unique_ptr< OutlinerParaObject > pTextObject)
void SetDescription(const OUString &rStr)
void RemoveListener(SfxListener &rListener)
tools::Long Height() const
virtual SdrPage * getSdrPageFromSdrObjList() const
virtual void NbcCrop(const basegfx::B2DPoint &rRef, double fxFact, double fyFact)
FIXME: The virtual object is not yet fully implemented and tested.
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
sal_Int32 GetNumerator() const
tools::Rectangle aBoundRect
sal_uInt32 GetNavigationPosition() const
constexpr TypedWhichId< SdrLogicSizeHeightItem > SDRATTR_LOGICSIZEHEIGHT(SDRATTR_NOTPERSIST_FIRST+15)
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
RasterOp GetRasterOp() const
virtual SdrObjectUniquePtr getFullDragClone() const
void SetSdrObjListRectsDirty()
const Point & GetNow() const
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const
sal_uInt16 GetUserDataCount() const
const Point & GetAnchorPos() const
virtual OUString TakeObjNamePlural() const
virtual void Rotate(const Point &rRef, Degree100 nAngle, double sn, double cs)
SdrObject * getParentSdrObjectFromSdrObject() const
std::unique_ptr< SdrObjPlusData > pPlusData
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
Universal Network Object packed into SvDraw object.
std::unique_ptr< SdrGluePointList > pGPL
virtual void SetSnapRect(const tools::Rectangle &rRect)
virtual bool applySpecialDrag(SdrDragStat &rDrag)
constexpr TypedWhichId< SdrTransformRef1YItem > SDRATTR_TRANSFORMREF1Y(SDRATTR_NOTPERSIST_FIRST+31)
sal_Int16 GetRelativeHeightRelation() const
virtual void SetMergedItem(const SfxPoolItem &rItem)
std::unique_ptr< sdr::contact::ViewContact > mpViewContact
#define SAL_WARN(area, stream)
void SetNotVisibleAsMaster(bool bFlg)
const SfxItemPool & GetItemPool() const
virtual void NbcSetAnchorPos(const Point &rPnt)
basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D &aViewInformation) const
virtual Degree100 GetRotateAngle() const
OUString GetMetricString(tools::Long nVal, bool bNoUnitChars=false, sal_Int32 nNumDigits=-1) const
bool LineGeometryUsageIsNecessary() const
virtual void SetContextWritingMode(const sal_Int16 _nContextWritingMode)
tools::Rectangle maBLIPSizeRectangle
#define DBG_TESTSOLARMUTEX()
std::unique_ptr< Impl > mpImpl
virtual const tools::Rectangle & GetLogicRect() const
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
virtual bool DoMacro(const SdrObjMacroHitRec &rRec)
void Shear(const Point &rRef, double tn, bool bVShear, const SdrObject *pObj)
sdr::ObjectUserVector maObjectUsers
bool IsInDestruction() const
continuously activated OLE (PlugIn-Frame or similar)
B2DPolygon simplifyCurveSegments(const B2DPolygon &rCandidate)
SdrObjList * getParentSdrObjListFromSdrObject() const
void InvalidateSdrObject()
virtual void NbcSetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr)
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const
helper class for notifying XPropertyChangeListeners
virtual void SetChanged()
TitleText, special text object for StarDraw.
constexpr TypedWhichId< SdrOnePositionXItem > SDRATTR_ONEPOSITIONX(SDRATTR_NOTPERSIST_FIRST+10)
void SetPrintable(bool bPrn)
periodic cubic Spline (ni)
constexpr TypedWhichId< XLineColorItem > XATTR_LINECOLOR(XATTR_LINE_FIRST+3)
virtual Point GetPoint(sal_uInt32 i) const
bool HasSdrObjectOwnership() const
foreign graphic (StarView Graphic)
virtual void NbcSetRelativePos(const Point &rPnt)
The relative position of a SdrObject is the distance of the upper left corner of the logic bounding r...
SdrObjUserCall * GetUserCall() const
virtual SdrObject * getSdrObjectFromSdrObjList() const
virtual OutlinerParaObject * GetOutlinerParaObject() const
void SetTitle(const OUString &rStr)
bool mbLineIsOutsideGeometry
virtual void ClearMergedItem(const sal_uInt16 nWhich)
virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat &rDrag) const
Polygon dragged by the user when creating the object.
const SdrPageView * pPageView
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
void ApplyNotPersistAttr(const SfxItemSet &rAttr)
svx::PropertyChangeNotifier & getShapePropertyChangeNotifier()
bool mbDoNotInsertIntoPageAutomatically
::std::vector< B2DPolygon > B2DPolygonVector
SdrObject * ImpConvertToContourObj(bool bForceLineDash)
constexpr TypedWhichId< SfxStringItem > SDRATTR_OBJECTNAME(SDRATTR_NOTPERSIST_FIRST+5)
sal_Int16 meRelativeHeightRelation
void SetSecondaryPool(SfxItemPool *pPool)
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
sal_uInt16 GetPageCount() const
bool IsMoveProtect() const
virtual void SetObjectItemSet(const SfxItemSet &rSet)=0
SdrHdlKind GetKind() const
const double * GetRelativeHeight() const
Utility class SdrEdgeObj.
virtual sal_uInt32 GetSnapPointCount() const
snap to special points of an Object (polygon points, center of circle)
constexpr TypedWhichId< SdrResizeXOneItem > SDRATTR_RESIZEXONE(SDRATTR_NOTPERSIST_FIRST+20)
void NbcRotateGluePoints(const Point &rRef, Degree100 nAngle, double sn, double cs)
::std::vector< B2DPolyPolygon > B2DPolyPolygonVector
virtual void NbcSetLayer(SdrLayerID nLayer)