21 #include <config_features.h>
26 #include <com/sun/star/lang/XComponent.hpp>
27 #include <com/sun/star/text/RelOrientation.hpp>
28 #include <com/sun/star/frame/XTerminateListener.hpp>
29 #include <com/sun/star/frame/Desktop.hpp>
41 #include <editeng/editeng.hxx>
86 #include <svx/strings.hrc>
117 #include <unordered_set>
120 #include <libxml/xmlwriter.h>
124 #include <rtl/character.hxx>
150 nInventor(rData.nInventor),
151 nIdentifier(rData.nIdentifier) {}
171 bResizeFreeAllowed(true),
172 bResizePropAllowed(true),
173 bRotateFreeAllowed(true),
174 bRotate90Allowed(true),
175 bMirrorFreeAllowed(true),
176 bMirror45Allowed(true),
177 bMirror90Allowed(true),
178 bTransparenceAllowed(true),
180 bEdgeRadiusAllowed(true),
181 bNoOrthoDesired(true),
183 bCanConvToPath(true),
184 bCanConvToPoly(true),
185 bCanConvToContour(
false),
186 bCanConvToPathLineToArea(true),
187 bCanConvToPolyLineToArea(true) {}
198 meRelativeWidthRelation(
text::RelOrientation::PAGE_FRAME),
199 meRelativeHeightRelation(
text::RelOrientation::PAGE_FRAME) {}
207 return std::make_unique<sdr::properties::EmptyProperties>(*this);
219 const_cast< SdrObject* >(
this)->CreateObjectSpecificProperties();
230 mpImpl->maObjectUsers.push_back(&rNewUser);
235 const sdr::ObjectUserVector::iterator aFindResult =
236 std::find(
mpImpl->maObjectUsers.begin(),
mpImpl->maObjectUsers.end(), &rOldUser);
237 if (aFindResult !=
mpImpl->maObjectUsers.end())
239 mpImpl->maObjectUsers.erase(aFindResult);
248 return std::make_unique<sdr::contact::ViewContactOfSdrObj>(*this);
256 const_cast< SdrObject* >(
this)->CreateObjectSpecificViewContact();
299 if(pOldPage != pNewPage)
331 SAL_WARN(
"svx",
"SdrObject::~SdrObject: Destructed incarnation of SdrObject not member of this SdrModel (!)");
337 : mpFillGeometryDefiningShape(nullptr)
338 ,mrSdrModelFromSdrObject(rSdrModel)
339 ,m_pUserCall(nullptr)
341 ,mpParentOfSdrObject(nullptr)
345 ,mpSvxShape( nullptr )
346 ,mbDoNotInsertIntoPageAutomatically(
false)
375 : mpFillGeometryDefiningShape(nullptr)
376 ,mrSdrModelFromSdrObject(rSdrModel)
377 ,m_pUserCall(nullptr)
379 ,mpParentOfSdrObject(nullptr)
383 ,mpSvxShape( nullptr )
384 ,mbDoNotInsertIntoPageAutomatically(
false)
450 aList.swap(
mpImpl->maObjectUsers);
453 DBG_ASSERT(pObjectUser,
"SdrObject::~SdrObject: corrupt ObjectUser list (!)");
454 pObjectUser->ObjectInDestruction(*
this);
475 if(
nullptr == pObject)
485 if(pShape->HasSdrObjectOwnership())
497 uno::Reference< lang::XComponent > xShapeComp( pObject->
getWeakUnoShape().get(), uno::UNO_QUERY_THROW );
498 xShapeComp->dispose();
500 catch(
const uno::Exception& )
539 if(
nullptr == pOldPage ||
nullptr == pNewPage)
557 class TerminateListener :
public ::cppu::WeakImplHelper< css::frame::XTerminateListener >
559 void SAL_CALL queryTermination(
const lang::EventObject& )
override
561 void SAL_CALL notifyTermination(
const lang::EventObject& )
override
563 mpGlobalItemPool.clear();
565 virtual void SAL_CALL disposing( const ::css::lang::EventObject& )
override
573 if(!mpGlobalItemPool)
577 mpGlobalItemPool->SetSecondaryPool(pGlobalOutlPool.get());
579 mpGlobalItemPool->FreezeIdRanges();
581 mpGlobalItemPool->acquire();
585 uno::Reference< frame::XTerminateListener > xListener(
new TerminateListener );
586 xDesktop->addTerminateListener( xListener );
600 mpImpl->meRelativeWidthRelation = eValue;
610 mpImpl->meRelativeHeightRelation = eValue;
615 if (!
mpImpl->mnRelativeWidth)
618 return &*
mpImpl->mnRelativeWidth;
623 return mpImpl->meRelativeWidthRelation;
628 if (!
mpImpl->mnRelativeHeight)
631 return &*
mpImpl->mnRelativeHeight;
636 return mpImpl->meRelativeHeightRelation;
679 for (
size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum) {
704 SdrEdgeObj const*
const pEdge(dynamic_cast<SdrEdgeObj const*>(&rListener));
747 if(
nullptr == pParent)
770 std::unique_ptr<SdrUndoAction> pUndoAction =
794 static const OUString
EMPTY =
u"";
819 std::unique_ptr<SdrUndoAction> pUndoAction =
863 std::unique_ptr<SdrUndoAction> pUndoAction =
896 if (pParentList->IsObjOrdNumsDirty())
898 pParentList->RecalcObjOrdNums();
914 rVal <<= uno::Sequence<beans::PropertyValue>();
983 if(xPrimitives.empty())
990 if(!aRange.isEmpty())
993 static_cast<tools::Long>(floor(aRange.getMinX())),
1009 if(!(bPlusDataBroadcast || bObjectChange))
1014 if(bPlusDataBroadcast)
1050 aObjectVector.push_back(const_cast< SdrObject* >(
this));
1061 return (eXLS != drawing::LineStyle_NONE);
1072 return new SdrObject(rTargetModel, *
this);
1080 if (!aName.isEmpty())
1081 sName +=
" '" + aName +
"'";
1087 return SvxResId(STR_ObjNamePluralNONE);
1093 sal_Int32
nPos = aStr.indexOf(
"%1");
1098 aStr = aStr.replaceAt(nPos, 2, aObjName);
1101 nPos = aStr.indexOf(
"%2");
1104 aStr = aStr.replaceAt(nPos, 2,
u"0");
1183 rVC.getViewIndependentPrimitive2DContainer(xSequence);
1185 if(!xSequence.empty())
1192 aExtractor.
process(xSequence);
1194 const sal_uInt32 nSize(rResult.size());
1203 for(sal_uInt32
a(0);
a < nSize;
a++)
1225 for (sal_uInt32 nHdlNum=0; nHdlNum<8; ++nHdlNum)
1227 std::unique_ptr<SdrHdl> pH;
1238 rHdlList.
AddHdl(std::move(pH));
1266 if (bLft) aTmpRect.
SetLeft(aPos.X() );
1267 if (bRgt) aTmpRect.
SetRight(aPos.X() );
1268 if (bTop) aTmpRect.
SetTop(aPos.Y() );
1269 if (bBtm) aTmpRect.
SetBottom(aPos.Y() );
1277 bool bXNeg=(nXMul<0)!=(nXDiv<0);
1278 bool bYNeg=(nYMul<0)!=(nYDiv<0);
1279 nXMul=std::abs(nXMul);
1280 nYMul=std::abs(nYMul);
1281 nXDiv=std::abs(nXDiv);
1282 nYDiv=std::abs(nYDiv);
1290 bool bUseX=(aXFact<aYFact) != bBigOrtho;
1293 if (bYNeg) nNeed=-nNeed;
1298 if (bXNeg) nNeed=-nNeed;
1303 if ((bLft || bRgt) && nXDiv!=0) {
1306 aTmpRect.
AdjustTop( -((nNeed-nHgt0b)/2) );
1309 if ((bTop || bBtm) && nYDiv!=0) {
1423 return PointerStyle::Cross;
1437 if (bXMirr || bYMirr) {
1459 NbcRotate( rRef, nAngle, sin( a ), cos( a ) );
1468 if (sn==1.0 && cs==0.0) {
1473 }
else if (sn==0.0 && cs==-1.0) {
1478 }
else if (sn==-1.0 && cs==0.0) {
1504 }
else if (dx==dy) {
1509 }
else if (dx==-dy) {
1553 mpImpl->mnRelativeWidth.reset();
1554 mpImpl->meRelativeWidthRelation = text::RelOrientation::PAGE_FRAME;
1555 mpImpl->meRelativeHeightRelation = text::RelOrientation::PAGE_FRAME;
1556 mpImpl->mnRelativeHeight.reset();
1568 NbcCrop(rRef, fxFact, fyFact);
1608 Size aSiz(rPnt.X()-aRelPos0.X(),rPnt.Y()-aRelPos0.Y());
1771 (
void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"SdrObject"));
1772 (
void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"ptr"),
"%p",
this);
1773 (
void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"symbol"),
"%s", BAD_CAST(
typeid(*this).name()));
1774 (
void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"name"),
"%s", BAD_CAST(
GetName().toUtf8().getStr()));
1775 (
void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"title"),
"%s", BAD_CAST(
GetTitle().toUtf8().getStr()));
1776 (
void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"description"),
"%s", BAD_CAST(
GetDescription().toUtf8().getStr()));
1777 (
void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST(
"nOrdNum"),
"%" SAL_PRIuUINT32,
GetOrdNumDirect());
1778 (
void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST(
"aOutRect"), BAD_CAST(
m_aOutRect.
toString().getStr()));
1791 pOutliner->dumpAsXml(pWriter);
1793 (
void)xmlTextWriterEndElement(pWriter);
1862 return PointerStyle::RefHand;
1874 for(
auto const& rPolygon : aPolyPolygon)
1895 return std::make_unique<SdrObjGeoData>();
1911 if (rGeo.
pGPL!=
nullptr) {
1934 if (rGeo.
pGPL!=
nullptr) {
1950 std::unique_ptr<SdrObjGeoData> pGeo =
NewGeoData();
2034 aRef1.setX(pPoolItem->GetValue() );
2038 aRef1.setY(pPoolItem->GetValue() );
2055 aNewSnap.
Move(n-aNewSnap.
Left(),0);
2060 aNewSnap.
Move(0,n-aNewSnap.
Top());
2072 if (aNewSnap!=rSnap) {
2117 bool b = pPoolItem->GetValue();
2122 bool b = pPoolItem->GetValue();
2132 bool b = pPoolItem->GetValue();
2138 bool b = pPoolItem->GetValue();
2145 nLayer = pPoolItem->GetValue();
2149 OUString aLayerName = pPoolItem->GetValue();
2155 if(
nullptr != pLayer)
2157 nLayer=pLayer->
GetID();
2166 OUString
aName = pPoolItem->GetValue();
2180 if (aNewLogic!=rLogic) {
2187 aResizeX *= pPoolItem->GetValue();
2191 aResizeY *= pPoolItem->GetValue();
2220 if (!aName.isEmpty())
2230 if(
nullptr != pLayer)
2235 Point aRef2(aRef1); aRef2.AdjustY( 1 );
2299 case 0 : aPt=aR.
TopLeft();
break;
2342 pGPL->
Rotate(rRef,nAngle,sn,cs,
this);
2352 pGPL->
Mirror(rRef1,rRef2,
this);
2362 pGPL->
Shear(rRef,tn,bVShear,
this);
2385 rExtractedHairlines.clear();
2386 rExtractedLineFills.clear();
2388 if(rxSequence.empty())
2396 aExtractor.
process(rxSequence);
2417 if(!xSequence.empty())
2427 aMergedHairlinePolyPolygon.
append(rExtractedHairline);
2438 if(aMergedLineFillPolyPolygon.
count() || (bForceLineDash && aMergedHairlinePolyPolygon.
count()))
2444 bool bBuildGroup(
false);
2446 if(aMergedLineFillPolyPolygon.
count())
2452 aMergedLineFillPolyPolygon);
2466 if(aMergedHairlinePolyPolygon.
count())
2475 aMergedHairlinePolyPolygon);
2487 if(aLinePolygonPart)
2494 bool bAddOriginalGeometry(
false);
2499 if(eOldFillStyle != drawing::FillStyle_NONE)
2501 bAddOriginalGeometry =
true;
2506 if(bBuildGroup || bAddOriginalGeometry)
2510 if(bAddOriginalGeometry)
2524 if(aLinePolygonPart)
2529 if(aLineHairlinePart)
2538 if(aLinePolygonPart)
2540 pRetval = aLinePolygonPart;
2542 else if(aLineHairlinePart)
2544 pRetval = aLineHairlinePart;
2550 if(
nullptr == pRetval)
2582 if(dynamic_cast<const SdrObjGroup*>( pRet) !=
nullptr)
2597 if (
SdrPathObj *pPathObj = dynamic_cast<SdrPathObj*>(pRet))
2622 if(pRet && bLineToArea)
2625 pRet.reset(pNewRet);
2629 if(pRet && pRet->GetLayer() !=
GetLayer())
2719 return m_pPlusData->pUserDataList->GetUserDataCount();
2725 return &
m_pPlusData->pUserDataList->GetUserData(nNum);
2732 OSL_FAIL(
"SdrObject::AppendUserData(): pData is NULL pointer.");
2740 m_pPlusData->pUserDataList->AppendUserData(std::move(pData));
2752 OSL_FAIL(
"SdrObject::DeleteUserData(): Invalid Index.");
2809 switch ( eUserCall )
2825 const uno::Reference< uno::XInterface>& xOldUnoShape(
maWeakUnoShape );
2827 if ( _rxUnoShape == xOldUnoShape )
2829 if ( !xOldUnoShape.is() )
2839 bool bTransferOwnership(
false );
2840 if ( xOldUnoShape.is() )
2849 mpSvxShape = comphelper::getFromUnoTunnel<SvxShape>( _rxUnoShape );
2852 if ( bTransferOwnership )
2856 SAL_WARN(
"svx.uno",
"a UNO shape took over an SdrObject previously owned by another UNO shape!");
2868 #if OSL_DEBUG_LEVEL > 0
2870 "SdrObject::getSvxShape: still having IMPL-Pointer to dead object!" );
2886 OSL_ENSURE(
mpSvxShape ==
nullptr,
"SdrObject::getUnoShape: XShape already dead, but still an IMPL pointer!" );
2928 if(
nullptr == pPageCandidate)
2942 if(
nullptr != pPageCandidate)
2944 uno::Reference< uno::XInterface > xPage(pPageCandidate->
getUnoPage());
2947 SvxDrawPage* pDrawPage = comphelper::getFromUnoTunnel<SvxDrawPage>(xPage);
3029 double fRotate, fShearX;
3030 rMatrix.
decompose(aScale, aTranslate, fRotate, fShearX);
3113 if (
const E3dScene* pE3dObj = dynamic_cast<const E3dScene*>(
this))
3115 SdrObjList* pObjList = pE3dObj->GetSubList();
3127 std::unordered_set<OUString> aNameSet;
3136 if (rNameSet.empty())
3146 pObj = aIter.
Next();
3148 rNameSet.insert(pObj->
GetName());
3154 OUString sRootName(sName);
3156 if (!sName.isEmpty() && rtl::isAsciiDigit(sName[sName.getLength() - 1]))
3158 sal_Int32
nPos(sName.getLength() - 1);
3159 while (
nPos > 0 && rtl::isAsciiDigit(sName[--
nPos]));
3165 for (sal_uInt32
n = 1; rNameSet.find(sName) != rNameSet.end();
n++)
3166 sName = sRootName +
" " + OUString::number(
n);
3167 rNameSet.insert(sName);
3174 MapUnit eMapUnit(getSdrModelFromSdrObject().GetItemPool().GetMetric(0));
3175 if(eMapUnit == MapUnit::Map100thMM)
3185 OSL_FAIL(
"Missing unit translation to PoolMetric!");
3208 bool bSetSnapRect(
nullptr != pSnapRect);
3212 switch (nIdentifier)
3216 if(
nullptr != pSnapRect)
3231 if(
nullptr != pSnapRect)
3260 if(
nullptr != pSnapRect)
3266 bSetSnapRect =
false;
3282 if(
nullptr != pSnapRect)
3284 pObj =
new SdrCircObj(rSdrModel, eCircKind, *pSnapRect);
3285 bSetSnapRect =
false;
3312 #if HAVE_FEATURE_AVMEDIA
3331 if(bSetSnapRect &&
nullptr != pSnapRect)
3342 auto it = std::find(rLL.begin(), rLL.end(), rLink);
3343 if (it != rLL.end()) {
3344 OSL_FAIL(
"SdrObjFactory::InsertMakeObjectHdl(): Link already in place.");
3346 rLL.push_back(rLink);
3353 auto it = std::find(rLL.begin(), rLL.end(), rLink);
3354 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
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
virtual std::unique_ptr< SdrObjGeoData > NewGeoData() const
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
void SetNavigationPosition(const sal_uInt32 nPosition)
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()
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
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
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
constexpr TypedWhichId< SdrTransformRef1XItem > SDRATTR_TRANSFORMREF1X(SDRATTR_NOTPERSIST_FIRST+30)
void DelReference(SdrVirtObj &rVrtObj)
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
void RemoveObjectUser(sdr::ObjectUser &rOldUser)
const Point & GetStart() const
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)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
periodic cubic Spline (ni)
virtual bool HasText() const
SdrObject * GetObj(size_t nNum) const
const css::uno::WeakReference< css::drawing::XShape > & getWeakUnoShape() const
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 SetRelativeHeightRelation(sal_Int16 eValue)
continuously activated OLE (PlugIn-Frame or similar)
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
tools::Rectangle m_aOutRect
abstract object (SdrObject)
virtual void ConnectToNode(bool bTail1, SdrObject *pObj)
virtual void AddToHdlList(SdrHdlList &rHdlList) const
void NbcMirrorGluePoints(const Point &rRef1, const Point &rRef2)
css::uno::WeakReference< css::drawing::XShape > maWeakUnoShape
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)
void SetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject)
static rtl::Reference< SdrItemPool > mpGlobalItemPool
virtual SdrObjList * GetSubList() const
void AddListener(SfxListener &rListener)
virtual void AddToPlusHdlList(SdrHdlList &rHdlList, SdrHdl &rHdl) const
sdr::contact::ViewContact & GetViewContact() const
B2DPolyPolygon mergeToSinglePolyPolygon(const B2DPolyPolygonVector &rInput)
virtual 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)
constexpr tools::Long Width() const
static rtl::Reference< SfxItemPool > CreatePool()
const SdrHdl * GetHdl() const
SdrObjList * mpParentOfSdrObject
virtual std::unique_ptr< SdrObjGeoData > GetGeoData() const
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 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
virtual Point GetSnapPoint(sal_uInt32 i) const
B2DHomMatrix createScaleB2DHomMatrix(double fScaleX, double fScaleY)
virtual void SetAnchorPos(const Point &rPnt)
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
OUString SvxResId(TranslateId aId)
virtual css::uno::Reference< css::drawing::XShape > getUnoShape()
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)
virtual SdrPage * getSdrPageFromSdrObjList() const override
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)
constexpr TypedWhichId< SdrAngleItem > SDRATTR_ROTATEANGLE(SDRATTR_NOTPERSIST_FIRST+16)
void SetObjectItem(const SfxPoolItem &rItem)
void SetRelativeWidth(double nValue)
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)
virtual bool HasLimitedRotation() const
SdrLayer * GetLayer(sal_uInt16 i)
void SetMarkProtect(bool bProt)
virtual void SetBoundAndSnapRectsDirty(bool bNotMyself=false, bool bRecursive=true)
sal_uInt32 GetOrdNumDirect() const
SdrObject * GetConnectedNode(bool bTail1) const override
constexpr TypedWhichId< SdrHorzShearOneItem > SDRATTR_HORZSHEARONE(SDRATTR_NOTPERSIST_FIRST+23)
virtual ~ISdrObjectFilter()=0
bool m_bNotVisibleAsMaster
virtual SfxStyleSheet * GetStyleSheet() const =0
exports com.sun.star. text
foreign graphic (StarView Graphic)
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)
virtual void RestoreGeoData(const SdrObjGeoData &rGeo)
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
Polygon/PolyPolygon represented by SdrPathObj.
virtual const SdrGluePointList * GetGluePointList() const
bool mbSupportTextIndentingOnLineWidthChange
virtual void SetObjectItem(const SfxPoolItem &rItem)=0
#define DBG_ASSERT(sCon, aError)
void SetMergedItemSetAndBroadcast(const SfxItemSet &rSet, bool bClearAllItems=false)
std::unique_ptr< sdr::properties::BaseProperties > mpProperties
virtual void InternalSetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr, bool bBroadcast)
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)
bool Equals(const SdrObject &) const
virtual void AdjustToMaxRect(const tools::Rectangle &rMaxRect, bool bShrinkOnly=false)
void notifyShapePropertyChange(const svx::ShapePropertyProviderId _eProperty) const
void ForceMetricToItemPoolMetric(basegfx::B2DPolyPolygon &rPolyPolygon) const noexcept
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
OUString ImpGetDescriptionStr(TranslateId pStrCacheID) const
virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat &rDrag) const
virtual bool supportsFullDrag() const
sal_uInt32 mnNavigationPosition
const SdrPage * GetPage(sal_uInt16 nPgNum) const
void ActionChanged() const
SdrView * GetView() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const
constexpr TypedWhichId< SdrObjVisibleItem > SDRATTR_OBJVISIBLE(SDRATTR_NOTPERSIST_FIRST+35)
const OUString & GetName() const
TitleText, special text object for StarDraw.
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
Universal Network Object packed into SvDraw object.
SdrModel & getSdrModelFromSdrObject() const
SdrObjUserCall * m_pUserCall
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)
constexpr SdrLayerID SDRLAYER_NOTFOUND(-1)
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)
virtual void setUnoShape(const css::uno::Reference< css::drawing::XShape > &_rxUnoShape)
Sets a new UNO representation of the shape.
const double * GetRelativeWidth() const
virtual void Mirror(const Point &rRef1, const Point &rRef2)
sal_Int16 GetRelativeWidthRelation() const
Polyline represented by SdrPathObj.
virtual SdrInventor GetObjInventor() const
virtual void DisconnectFromNode(bool bTail1)
constexpr TypedWhichId< SdrYesNoItem > SDRATTR_OBJSIZEPROTECT(SDRATTR_NOTPERSIST_FIRST+1)
static rtl::Reference< SvxShape > CreateShapeByTypeAndInventor(SdrObjKind nType, SdrInventor nInventor, SdrObject *pObj, SvxDrawPage *pPage=nullptr, OUString const &referer=OUString())
SdrModel & mrSdrModelFromSdrObject
void AppendUserData(std::unique_ptr< SdrObjUserData > pData)
virtual SdrLayerID GetLayer() const
bool HasLineStyle() const
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)
static void RemoveMakeObjectHdl(Link< SdrObjCreatorParams, SdrObject * > const &rLink)
rectangle (round corners optional)
virtual const tools::Rectangle & GetLastBoundRect() const
virtual void NbcReformatText()
virtual void NbcSetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject)
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)
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact()
sal_Int32 GetDenominator() const
virtual SdrGluePointList * ForceGluePointList()
virtual PointerStyle GetMacroPointer(const SdrObjMacroHitRec &rRec) const
static SdrItemPool & GetGlobalDrawObjectItemPool()
virtual void SetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr, bool bBroadcast)=0
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
virtual void NbcSetSnapRect(const tools::Rectangle &rRect)
void GetGrabBagItem(css::uno::Any &rVal) const
constexpr tools::Long Height() 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)
constexpr o3tl::Length MapToO3tlLength(MapUnit eU, o3tl::Length ePixelValue=o3tl::Length::px)
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 ...
std::unique_ptr< SfxGrabBagItem > m_pGrabBagItem
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
std::u16string_view trim(std::u16string_view str)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
virtual SdrObject * CloneSdrObject(SdrModel &rTargetModel) const
void SetDescription(const OUString &rStr)
void RemoveListener(SfxListener &rListener)
virtual void NbcCrop(const basegfx::B2DPoint &rRef, double fxFact, double fyFact)
Reference< XComponentContext > getProcessComponentContext()
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< 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
B2DPolygon simplifyCurveSegments(const B2DPolygon &rCandidate)
SdrObjList * getParentSdrObjListFromSdrObject() const
void InvalidateSdrObject()
void NbcSetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr)
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const
void notifyPropertyChange(const ShapePropertyProviderId _eProperty) const
notifies changes in the given property to all registered listeners
helper class for notifying XPropertyChangeListeners
virtual void SetChanged()
constexpr TypedWhichId< SdrOnePositionXItem > SDRATTR_ONEPOSITIONX(SDRATTR_NOTPERSIST_FIRST+10)
void SetPrintable(bool bPrn)
std::unique_ptr< SdrObjPlusData > m_pPlusData
constexpr TypedWhichId< XLineColorItem > XATTR_LINECOLOR(XATTR_LINE_FIRST+3)
virtual Point GetPoint(sal_uInt32 i) const
bool HasSdrObjectOwnership() const
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
const OUString & GetName() 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 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)
OutlineText, special text object for StarDraw.
object that represents a SdrPage
bool m_bDetectedRangeSegmentation false
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)