This is an automated email from the ASF dual-hosted git repository. jimjag pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 133c6580916191e3f51cdef1f04f1b673d0077f1 Author: Jim Jagielski <[email protected]> AuthorDate: Wed Nov 4 12:16:25 2026 -0500 svx, xmloff: add a Decorative shape property and write it as draw:decorative in ODF 1.4 The OWN_ATTR id range is full (EE_ITEMS_START follows it), so the new id sits just below it. There is no undo for the flag. --- main/svx/inc/svx/svdobj.hxx | 4 ++++ main/svx/inc/svx/unoshprp.hxx | 7 ++++++- main/svx/source/svdraw/svdobj.cxx | 24 +++++++++++++++++++++++- main/svx/source/unodraw/unoprov.cxx | 7 +++++++ main/svx/source/unodraw/unoshape.cxx | 32 +++++++++++++++++++++++++++++++- main/xmloff/source/draw/sdpropls.cxx | 1 + 6 files changed, 72 insertions(+), 3 deletions(-) diff --git a/main/svx/inc/svx/svdobj.hxx b/main/svx/inc/svx/svdobj.hxx index 8cce8185b0..6ee75fe017 100644 --- a/main/svx/inc/svx/svdobj.hxx +++ b/main/svx/inc/svx/svdobj.hxx @@ -310,6 +310,7 @@ public: String aObjName; String aObjTitle; String aObjDescription; + bool mbDecorative; // Name to be used by applications XubString aHTMLName; @@ -599,6 +600,9 @@ public: String GetTitle() const; void SetDescription(const String& rStr); String GetDescription() const; + // ODF 1.4 draw:decorative; not covered by undo + void SetDecorative(bool bNew); + bool IsDecorative() const; // support for HTMLName void SetHTMLName(const String& rStr); diff --git a/main/svx/inc/svx/unoshprp.hxx b/main/svx/inc/svx/unoshprp.hxx index 8c12089c21..900aef2560 100644 --- a/main/svx/inc/svx/unoshprp.hxx +++ b/main/svx/inc/svx/unoshprp.hxx @@ -188,6 +188,10 @@ #define OWN_ATTR_EDGE_POLYPOLYGONBEZIER (OWN_ATTR_VALUE_START+88) // maximum is OWN_ATTR_VALUE_START+88, see svl/inc/svl/solar.hrc +// ODF 1.4 draw:decorative. The range above is full (EE_ITEMS_START follows it), so this id lies just below it and the +// range checks in unoshape.cxx test it explicitly. +#define OWN_ATTR_MISC_OBJ_DECORATIVE (OWN_ATTR_VALUE_START-1) + // #FontWork# #define FONTWORK_PROPERTIES \ { MAP_CHAR_LEN("FontWorkStyle"), XATTR_FORMTXTSTYLE, /*ENUM*/&::getCppuType((const sal_Int32*)0), 0, 0}, \ @@ -331,7 +335,8 @@ { MAP_CHAR_LEN("UINamePlural"), OWN_ATTR_UINAME_PLURAL , &::getCppuType((const ::rtl::OUString*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ /* #i68101# */ \ { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, \ - { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, \ + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, #define LINKTARGET_PROPERTIES \ { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYNAME), OWN_ATTR_LDNAME , &::getCppuType((const ::rtl::OUString*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ diff --git a/main/svx/source/svdraw/svdobj.cxx b/main/svx/source/svdraw/svdobj.cxx index ab0c7f3de6..947beb865f 100644 --- a/main/svx/source/svdraw/svdobj.cxx +++ b/main/svx/source/svdraw/svdobj.cxx @@ -251,7 +251,8 @@ SdrObjPlusData::SdrObjPlusData(): pBroadcast(NULL), pUserDataList(NULL), pGluePoints(NULL), - pAutoTimer(NULL) + pAutoTimer(NULL), + mbDecorative(false) { } @@ -288,6 +289,7 @@ SdrObjPlusData* SdrObjPlusData::Clone(SdrObject* pObj1) const pNeuPlusData->aObjName = aObjName; pNeuPlusData->aObjTitle = aObjTitle; pNeuPlusData->aObjDescription = aObjDescription; + pNeuPlusData->mbDecorative = mbDecorative; if (pAutoTimer!=NULL) { pNeuPlusData->pAutoTimer=new AutoTimer; @@ -839,6 +841,26 @@ String SdrObject::GetDescription() const return String(); } +void SdrObject::SetDecorative(bool bNew) +{ + if(bNew && !pPlusData) + { + ImpForcePlusData(); + } + + if(pPlusData && pPlusData->mbDecorative != bNew) + { + pPlusData->mbDecorative = bNew; + SetChanged(); + BroadcastObjectChange(); + } +} + +bool SdrObject::IsDecorative() const +{ + return pPlusData && pPlusData->mbDecorative; +} + void SdrObject::SetHTMLName(const String& rStr) { if(rStr.Len() && !pPlusData) diff --git a/main/svx/source/unodraw/unoprov.cxx b/main/svx/source/unodraw/unoprov.cxx index dcfa435b6f..01eb22f6d7 100644 --- a/main/svx/source/unodraw/unoprov.cxx +++ b/main/svx/source/unodraw/unoprov.cxx @@ -521,6 +521,7 @@ SfxItemPropertyMapEntry* ImplGetSvxPluginPropertyMap() // #i68101# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, {0,0,0,0,0,0} }; @@ -556,6 +557,7 @@ SfxItemPropertyMapEntry* ImplGetSvxFramePropertyMap() // #i68101# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, {0,0,0,0,0,0} }; @@ -590,6 +592,7 @@ SfxItemPropertyMapEntry* ImplGetSvxAppletPropertyMap() // #i68101# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, {0,0,0,0,0,0} }; @@ -641,6 +644,7 @@ SfxItemPropertyMapEntry* ImplGetSvxControlShapePropertyMap() // #i68101# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, // #i112587# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_PRINTABLE), SDRATTR_OBJPRINTABLE , &::getBooleanCppuType(), 0, 0}, { MAP_CHAR_LEN("Visible"), SDRATTR_OBJVISIBLE , &::getBooleanCppuType(), 0, 0}, @@ -667,6 +671,7 @@ SfxItemPropertyMapEntry* ImplGetSvxPageShapePropertyMap() // #i68101# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, {0,0,0,0,0,0} }; @@ -756,6 +761,7 @@ SfxItemPropertyMapEntry* ImplGetSvxMediaShapePropertyMap() // #i68101# { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, {0,0,0,0,0,0} }; @@ -780,6 +786,7 @@ SfxItemPropertyMapEntry* ImplGetSvxTableShapePropertyMap() { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_NAME), SDRATTR_OBJECTNAME , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const ::rtl::OUString*)0), 0, 0}, + { MAP_CHAR_LEN("Decorative"), OWN_ATTR_MISC_OBJ_DECORATIVE , &::getBooleanCppuType(), 0, 0}, { MAP_CHAR_LEN("Model"), OWN_ATTR_OLEMODEL , &::com::sun::star::table::XTable::static_type(), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, { MAP_CHAR_LEN("TableTemplate"), OWN_ATTR_TABLETEMPLATE , &::com::sun::star::container::XIndexAccess::static_type(), 0, 0}, { MAP_CHAR_LEN("UseFirstRowStyle"), OWN_ATTR_TABLETEMPLATE_FIRSTROW, &::getBooleanCppuType(),0, 0}, diff --git a/main/svx/source/unodraw/unoshape.cxx b/main/svx/source/unodraw/unoshape.cxx index 084664e485..7acf7b8f9f 100644 --- a/main/svx/source/unodraw/unoshape.cxx +++ b/main/svx/source/unodraw/unoshape.cxx @@ -686,7 +686,7 @@ void SvxItemPropertySet_ObtainSettingsFromPropertySet(const SvxItemPropertySet& if(pEntry) { // entry found - if(pEntry->nWID >= OWN_ATTR_VALUE_START && pEntry->nWID <= OWN_ATTR_VALUE_END) + if((pEntry->nWID >= OWN_ATTR_VALUE_START && pEntry->nWID <= OWN_ATTR_VALUE_END) || pEntry->nWID == OWN_ATTR_MISC_OBJ_DECORATIVE) { // Special ID im PropertySet, kann nur direkt am // Objekt gesetzt werden+ @@ -2584,6 +2584,17 @@ bool SvxShape::setPropertyValueImpl( const ::rtl::OUString&, const SfxItemProper break; } + case OWN_ATTR_MISC_OBJ_DECORATIVE: + { + sal_Bool bDecorative = sal_False; + if( rValue >>= bDecorative ) + { + mpObj->SetDecorative( bDecorative ); + return true; + } + break; + } + case SDRATTR_OBJPRINTABLE: { sal_Bool bPrintable = sal_Bool(); @@ -2979,6 +2990,10 @@ bool SvxShape::getPropertyValueImpl( const ::rtl::OUString&, const SfxItemProper break; } + case OWN_ATTR_MISC_OBJ_DECORATIVE: + rValue <<= static_cast<sal_Bool>( mpObj->IsDecorative() ); + break; + case SDRATTR_OBJPRINTABLE: rValue <<= static_cast<sal_Bool>( mpObj->IsPrintable() ); break; @@ -3084,6 +3099,11 @@ bool SvxShape::getPropertyStateImpl( const SfxItemPropertySimpleEntry* pProperty rState = beans::PropertyState_AMBIGUOUS_VALUE; } } + else if( pProperty->nWID == OWN_ATTR_MISC_OBJ_DECORATIVE ) + { + // a default of false must not make every shape export the property + rState = mpObj->IsDecorative() ? beans::PropertyState_DIRECT_VALUE : beans::PropertyState_DEFAULT_VALUE; + } else if((( pProperty->nWID >= OWN_ATTR_VALUE_START && pProperty->nWID <= OWN_ATTR_VALUE_END ) || ( pProperty->nWID >= SDRATTR_NOTPERSIST_FIRST && pProperty->nWID <= SDRATTR_NOTPERSIST_LAST )) && ( pProperty->nWID != SDRATTR_TEXTDIRECTION ) ) { @@ -3107,6 +3127,11 @@ bool SvxShape::setPropertyToDefaultImpl( const SfxItemPropertySimpleEntry* pProp mpObj->ClearMergedItem( XATTR_FILLBMP_TILE ); return true; } + else if( pProperty->nWID == OWN_ATTR_MISC_OBJ_DECORATIVE ) + { + mpObj->SetDecorative( false ); + return true; + } else if((pProperty->nWID >= OWN_ATTR_VALUE_START && pProperty->nWID <= OWN_ATTR_VALUE_END ) || ( pProperty->nWID >= SDRATTR_NOTPERSIST_FIRST && pProperty->nWID <= SDRATTR_NOTPERSIST_LAST )) { @@ -3197,6 +3222,11 @@ uno::Any SAL_CALL SvxShape::_getPropertyDefault( const OUString& aPropertyName ) if( !mpObj.is() || pMap == NULL || mpModel == NULL ) throw beans::UnknownPropertyException(); + if( pMap->nWID == OWN_ATTR_MISC_OBJ_DECORATIVE ) + { + return uno::makeAny( sal_False ); + } + if(( pMap->nWID >= OWN_ATTR_VALUE_START && pMap->nWID <= OWN_ATTR_VALUE_END ) || ( pMap->nWID >= SDRATTR_NOTPERSIST_FIRST && pMap->nWID <= SDRATTR_NOTPERSIST_LAST )) { diff --git a/main/xmloff/source/draw/sdpropls.cxx b/main/xmloff/source/draw/sdpropls.cxx index 8fc0b5588d..fb3771282e 100644 --- a/main/xmloff/source/draw/sdpropls.cxx +++ b/main/xmloff/source/draw/sdpropls.cxx @@ -296,6 +296,7 @@ const XMLPropertyMapEntry aXMLSDProperties[] = // misc object properties GMAP( "MoveProtect", XML_NAMESPACE_STYLE, XML_PROTECT, XML_SD_TYPE_MOVE_PROTECT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, CTF_SD_MOVE_PROTECT ), GMAP( "SizeProtect", XML_NAMESPACE_STYLE, XML_PROTECT, XML_SD_TYPE_SIZE_PROTECT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_MERGE_ATTRIBUTE, CTF_SD_SIZE_PROTECT ), + GMAPV( "Decorative", XML_NAMESPACE_DRAW, XML_DECORATIVE, XML_TYPE_BOOL, 0, SvtSaveOptions::ODFVER_014 ), MAP_END() };
