summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2023-07-05 14:04:17 +0200
committerMichael Stahl <michael.stahl@allotropia.de>2023-07-05 19:54:17 +0200
commit6efc72b99a08384e56c5a4da7918177be60b3b09 (patch)
tree67e228fb3914c392a009bc0191a63287678fed8c /svx
parent082993c38e68089282b42fdb46179ac2574d61d5 (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.hxx1
-rw-r--r--svx/source/sdr/contact/viewobjectcontact.cxx2
-rw-r--r--svx/source/svdraw/svdobj.cxx34
-rw-r--r--svx/source/svdraw/svdobjplusdata.cxx1
-rw-r--r--svx/source/svdraw/svdovirt.cxx10
-rw-r--r--svx/source/svdraw/svdundo.cxx31
-rw-r--r--svx/source/unodraw/unoprov.cxx7
-rw-r--r--svx/source/unodraw/unoshape.cxx17
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;