diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2023-07-05 14:04:17 +0200 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2023-07-05 19:54:17 +0200 |
commit | 6efc72b99a08384e56c5a4da7918177be60b3b09 (patch) | |
tree | 67e228fb3914c392a009bc0191a63287678fed8c /svx | |
parent | 082993c38e68089282b42fdb46179ac2574d61d5 (diff) |
tdf#138504 svx,etc.: decorative flag on SdrObject shapes
* SdrObject new member m_IsDecorative
* new Undo SdrUndoObjDecorative
* surprising amount of changes in sw including additional SwUndoFlyDecorative
* svx API SvxShape property "Decorative"
* UI checkbox "Decorative"
* ODF import/export as loext:decorative on style:graphic-properties
* PDF/UA export: ViewObjectContcat tag shapes with this flag as Artifact
Change-Id: I37f7a0597eab92c6c6aff94fad6c16c59b231c80
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154063
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/inc/svdobjplusdata.hxx | 1 | ||||
-rw-r--r-- | svx/source/sdr/contact/viewobjectcontact.cxx | 2 | ||||
-rw-r--r-- | svx/source/svdraw/svdobj.cxx | 34 | ||||
-rw-r--r-- | svx/source/svdraw/svdobjplusdata.cxx | 1 | ||||
-rw-r--r-- | svx/source/svdraw/svdovirt.cxx | 10 | ||||
-rw-r--r-- | svx/source/svdraw/svdundo.cxx | 31 | ||||
-rw-r--r-- | svx/source/unodraw/unoprov.cxx | 7 | ||||
-rw-r--r-- | svx/source/unodraw/unoshape.cxx | 17 |
8 files changed, 102 insertions, 1 deletions
diff --git a/svx/source/inc/svdobjplusdata.hxx b/svx/source/inc/svdobjplusdata.hxx index 5e00a37c57c6..ef2bc2abd027 100644 --- a/svx/source/inc/svdobjplusdata.hxx +++ b/svx/source/inc/svdobjplusdata.hxx @@ -32,6 +32,7 @@ class SdrObjPlusData final OUString aObjName; OUString aObjTitle; OUString aObjDescription; + bool isDecorative = false; public: SdrObjPlusData(); diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx b/svx/source/sdr/contact/viewobjectcontact.cxx index bc3b5ee178bd..fabf99a13d75 100644 --- a/svx/source/sdr/contact/viewobjectcontact.cxx +++ b/svx/source/sdr/contact/viewobjectcontact.cxx @@ -398,7 +398,7 @@ drawinglayer::primitive2d::Primitive2DContainer const & ViewObjectContact::getPr // was done at ImplRenderPaintProc::createRedirectedPrimitive2DSequence before if (!xNewPrimitiveSequence.empty() && isExportPDFTags()) { - if (nullptr != pSdrObj) + if (nullptr != pSdrObj && !pSdrObj->IsDecorative()) { vcl::PDFWriter::StructElement eElement(vcl::PDFWriter::NonStructElement); const SdrInventor nInventor(pSdrObj->GetObjInventor()); diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 03f9f0f95739..6ea7dfe83839 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -868,6 +868,40 @@ OUString SdrObject::GetDescription() const return OUString(); } +void SdrObject::SetDecorative(bool const isDecorative) +{ + ImpForcePlusData(); + + if (m_pPlusData->isDecorative == isDecorative) + { + return; + } + + if (getSdrModelFromSdrObject().IsUndoEnabled()) + { + std::unique_ptr<SdrUndoAction> pUndoAction( + SdrUndoFactory::CreateUndoObjectDecorative( + *this, m_pPlusData->isDecorative)); + getSdrModelFromSdrObject().BegUndo(pUndoAction->GetComment()); + getSdrModelFromSdrObject().AddUndo(std::move(pUndoAction)); + } + + m_pPlusData->isDecorative = isDecorative; + + if (getSdrModelFromSdrObject().IsUndoEnabled()) + { + getSdrModelFromSdrObject().EndUndo(); + } + + SetChanged(); + BroadcastObjectChange(); +} + +bool SdrObject::IsDecorative() const +{ + return m_pPlusData == nullptr ? false : m_pPlusData->isDecorative; +} + sal_uInt32 SdrObject::GetOrdNum() const { if (SdrObjList* pParentList = getParentSdrObjListFromSdrObject()) diff --git a/svx/source/svdraw/svdobjplusdata.cxx b/svx/source/svdraw/svdobjplusdata.cxx index af27c5629fa8..8318b3df963f 100644 --- a/svx/source/svdraw/svdobjplusdata.cxx +++ b/svx/source/svdraw/svdobjplusdata.cxx @@ -50,6 +50,7 @@ SdrObjPlusData* SdrObjPlusData::Clone(SdrObject* pObj1) const pNewPlusData->aObjName = aObjName; pNewPlusData->aObjTitle = aObjTitle; pNewPlusData->aObjDescription = aObjDescription; + pNewPlusData->isDecorative = isDecorative; return pNewPlusData; } diff --git a/svx/source/svdraw/svdovirt.cxx b/svx/source/svdraw/svdovirt.cxx index e8f6284b3b2e..25a38804a78b 100644 --- a/svx/source/svdraw/svdovirt.cxx +++ b/svx/source/svdraw/svdovirt.cxx @@ -141,6 +141,16 @@ OUString SdrVirtObj::GetDescription() const return mxRefObj->GetDescription(); } +void SdrVirtObj::SetDecorative(bool const isDecorative) +{ + return mxRefObj->SetDecorative(isDecorative); +} + +bool SdrVirtObj::IsDecorative() const +{ + return mxRefObj->IsDecorative(); +} + const tools::Rectangle& SdrVirtObj::GetCurrentBoundRect() const { auto aRectangle = mxRefObj->GetCurrentBoundRect(); // TODO: Optimize this. diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index 9df18d9eb1f7..3788f8d7154c 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -1216,6 +1216,31 @@ OUString SdrUndoObjStrAttr::GetComment() const return aStr; } +SdrUndoObjDecorative::SdrUndoObjDecorative(SdrObject & rObj, bool const WasDecorative) + : SdrUndoObj(rObj) + , m_WasDecorative(WasDecorative) +{ +} + +void SdrUndoObjDecorative::Undo() +{ + ImpShowPageOfThisObject(); + + mxObj->SetDecorative(m_WasDecorative); +} + +void SdrUndoObjDecorative::Redo() +{ + mxObj->SetDecorative(!m_WasDecorative); + + ImpShowPageOfThisObject(); +} + +OUString SdrUndoObjDecorative::GetComment() const +{ + return ImpGetDescriptionStr(STR_UndoObjDecorative); +} + SdrUndoLayer::SdrUndoLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) : SdrUndoAction(rNewModel) @@ -1714,6 +1739,12 @@ std::unique_ptr<SdrUndoAction> SdrUndoFactory::CreateUndoObjectStrAttr( SdrObjec return std::make_unique<SdrUndoObjStrAttr>( rObject, eObjStrAttrType, sOldStr, sNewStr ); } +std::unique_ptr<SdrUndoAction> SdrUndoFactory::CreateUndoObjectDecorative( + SdrObject& rObject, bool const WasDecorative) +{ + return std::make_unique<SdrUndoObjDecorative>(rObject, WasDecorative); +} + // layer std::unique_ptr<SdrUndoAction> SdrUndoFactory::CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx index 0022cb77f4f5..105ed7a2d60e 100644 --- a/svx/source/unodraw/unoprov.cxx +++ b/svx/source/unodraw/unoprov.cxx @@ -475,6 +475,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxPluginPropertyMap() // #i68101# { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, }; return aPluginPropertyMap_Impl; @@ -509,6 +510,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxFramePropertyMap() // #i68101# { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, }; return aFramePropertyMap_Impl; @@ -542,6 +544,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxAppletPropertyMap() // #i68101# { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, }; return aAppletPropertyMap_Impl; @@ -598,6 +601,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxControlShapePropertyM // #i68101# { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, // #i112587# { UNO_NAME_MISC_OBJ_PRINTABLE, SDRATTR_OBJPRINTABLE , cppu::UnoType<bool>::get(), 0, 0}, { u"Visible", SDRATTR_OBJVISIBLE , cppu::UnoType<bool>::get(), 0, 0}, @@ -624,6 +628,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxPageShapePropertyMap( // #i68101# { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, }; return aPageShapePropertyMap_Impl; @@ -709,6 +714,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxMediaShapePropertyMap // #i68101# { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, {u"PrivateStream", OWN_ATTR_MEDIA_STREAM, cppu::UnoType<css::io::XInputStream>::get(), 0, 0}, {u"PrivateTempFileURL", OWN_ATTR_MEDIA_TEMPFILEURL, cppu::UnoType<OUString>::get(), css::beans::PropertyAttribute::READONLY, 0}, { u"MediaMimeType", OWN_ATTR_MEDIA_MIMETYPE, cppu::UnoType<OUString>::get(), 0, 0}, @@ -738,6 +744,7 @@ static o3tl::span<SfxItemPropertyMapEntry const> ImplGetSvxTableShapePropertyMap { u"UINameSingular", OWN_ATTR_UINAME_SINGULAR , ::cppu::UnoType<OUString>::get(), css::beans::PropertyAttribute::READONLY, 0}, { UNO_NAME_MISC_OBJ_TITLE, OWN_ATTR_MISC_OBJ_TITLE , cppu::UnoType<OUString>::get(), 0, 0}, { UNO_NAME_MISC_OBJ_DESCRIPTION, OWN_ATTR_MISC_OBJ_DESCRIPTION , cppu::UnoType<OUString>::get(), 0, 0}, + { u"Decorative", OWN_ATTR_MISC_OBJ_DECORATIVE, ::cppu::UnoType<bool>::get(), 0, 0 }, { u"Model", OWN_ATTR_OLEMODEL , cppu::UnoType<css::table::XTable>::get(), css::beans::PropertyAttribute::READONLY, 0}, { u"TableTemplate", OWN_ATTR_TABLETEMPLATE , cppu::UnoType<css::container::XIndexAccess>::get(), 0, 0}, { u"UseFirstRowStyle", OWN_ATTR_TABLETEMPLATE_FIRSTROW, cppu::UnoType<bool>::get(),0, 0}, diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 95adad4150a0..b186a95097c2 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -2395,6 +2395,16 @@ bool SvxShape::setPropertyValueImpl( const OUString&, const SfxItemPropertyMapEn } break; } + case OWN_ATTR_MISC_OBJ_DECORATIVE: + { + bool isDecorative; + if (rValue >>= isDecorative) + { + pSdrObject->SetDecorative(isDecorative); + return true; + } + break; + } case SDRATTR_OBJPRINTABLE: { @@ -2839,6 +2849,13 @@ bool SvxShape::getPropertyValueImpl( const OUString&, const SfxItemPropertyMapEn break; } + case OWN_ATTR_MISC_OBJ_DECORATIVE: + { + bool const isDecorative(GetSdrObject()->IsDecorative()); + rValue <<= isDecorative; + break; + } + case SDRATTR_OBJPRINTABLE: rValue <<= GetSdrObject()->IsPrintable(); break; |