diff options
author | offtkp <parisoplop@gmail.com> | 2022-12-28 00:10:34 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2023-01-04 08:58:23 +0000 |
commit | d20c11d4418053b1c5583255f626032a37a7e65e (patch) | |
tree | 0685608f47fb288cf0e22e7a3545fc8da9749965 | |
parent | 3ae04064c671dbf1e1472571f53b2804109137aa (diff) |
docx: Preserve w15:appearance SdtPr attribute
Now roundtrips the w15:appearance value which dictates whether there's
an effect when hovering a placeholder.
Change-Id: I3c911a0cfe31e235b9d981bbff0c1bb5827a85ef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144845
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit 2fe73bd2362287afc8242289a900821186b36137)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144994
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r-- | offapi/com/sun/star/text/ContentControl.idl | 6 | ||||
-rw-r--r-- | oox/source/token/tokens.txt | 1 | ||||
-rw-r--r-- | sw/inc/formatcontentcontrol.hxx | 7 | ||||
-rw-r--r-- | sw/inc/unoprnms.hxx | 1 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport17.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/txtnode/attrcontentcontrol.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/unocore/unocontentcontrol.cxx | 28 | ||||
-rw-r--r-- | sw/source/core/unocore/unomap1.cxx | 1 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 18 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 16 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.cxx | 4 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.hxx | 6 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 12 |
15 files changed, 111 insertions, 0 deletions
diff --git a/offapi/com/sun/star/text/ContentControl.idl b/offapi/com/sun/star/text/ContentControl.idl index cb980a24b0ff..34beff3cb127 100644 --- a/offapi/com/sun/star/text/ContentControl.idl +++ b/offapi/com/sun/star/text/ContentControl.idl @@ -92,6 +92,12 @@ service ContentControl */ [optional, property] string Color; + /** The appearance: just remembered. + + @since LibreOffice 7.6 + */ + [optional, property] string Appearance; + /** Combo box that allows free-form text as well, i.e. not dropdown. @since LibreOffice 7.5 diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt index 1b634835254c..c68d10f7de1e 100644 --- a/oox/source/token/tokens.txt +++ b/oox/source/token/tokens.txt @@ -599,6 +599,7 @@ anyType anyURI appName appWorkspace +appearance apples applyAlignment applyAlignmentFormats diff --git a/sw/inc/formatcontentcontrol.hxx b/sw/inc/formatcontentcontrol.hxx index 9c142ed711f0..f65b67d37cc4 100644 --- a/sw/inc/formatcontentcontrol.hxx +++ b/sw/inc/formatcontentcontrol.hxx @@ -169,6 +169,9 @@ class SW_DLLPUBLIC SwContentControl : public sw::BroadcastingModify /// The color: just remembered. OUString m_aColor; + /// The appearance: just remembered. + OUString m_aAppearance; + /// The alias: just remembered. OUString m_aAlias; @@ -355,6 +358,10 @@ public: OUString GetColor() const { return m_aColor; } + void SetAppearance(const OUString& rAppearance) { m_aAppearance = rAppearance; } + + const OUString& GetAppearance() const { return m_aAppearance; } + void SetAlias(const OUString& rAlias) { m_aAlias = rAlias; } const OUString& GetAlias() const { return m_aAlias; } diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx index 3c6b5d8464ab..3a8df7c69182 100644 --- a/sw/inc/unoprnms.hxx +++ b/sw/inc/unoprnms.hxx @@ -889,6 +889,7 @@ #define UNO_NAME_DATA_BINDING_XPATH "DataBindingXpath" #define UNO_NAME_DATA_BINDING_STORE_ITEM_ID "DataBindingStoreItemID" #define UNO_NAME_COLOR "Color" +#define UNO_NAME_APPEARANCE "Appearance" #define UNO_NAME_ALIAS "Alias" #define UNO_NAME_TAG "Tag" #define UNO_NAME_ID "Id" diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx index a9daa8042f15..395f0dbf03fc 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx @@ -298,6 +298,7 @@ CPPUNIT_TEST_FIXTURE(Test, testDateContentControlExport) xContentControlProps->setPropertyValue("DataBindingXpath", uno::Any(OUString("/ns0:employees[1]/ns0:employee[1]/ns0:hireDate[1]"))); xContentControlProps->setPropertyValue("DataBindingStoreItemID", uno::Any(OUString("{241A8A02-7FFD-488D-8827-63FBE74E8BC9}"))); xContentControlProps->setPropertyValue("Color", uno::Any(OUString("008000"))); + xContentControlProps->setPropertyValue("Appearance", uno::Any(OUString("hidden"))); xContentControlProps->setPropertyValue("Alias", uno::Any(OUString("myalias"))); xContentControlProps->setPropertyValue("Tag", uno::Any(OUString("mytag"))); xContentControlProps->setPropertyValue("Id", uno::Any(static_cast<sal_Int32>(123))); @@ -325,6 +326,7 @@ CPPUNIT_TEST_FIXTURE(Test, testDateContentControlExport) assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dataBinding", "xpath", "/ns0:employees[1]/ns0:employee[1]/ns0:hireDate[1]"); assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dataBinding", "storeItemID", "{241A8A02-7FFD-488D-8827-63FBE74E8BC9}"); assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w15:color", "val", "008000"); + assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w15:appearance", "val", "hidden"); assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:alias", "val", "myalias"); assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:tag", "val", "mytag"); assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:id", "val", "123"); diff --git a/sw/source/core/txtnode/attrcontentcontrol.cxx b/sw/source/core/txtnode/attrcontentcontrol.cxx index f1279c9cc66d..d324f52513a5 100644 --- a/sw/source/core/txtnode/attrcontentcontrol.cxx +++ b/sw/source/core/txtnode/attrcontentcontrol.cxx @@ -551,6 +551,8 @@ void SwContentControl::dumpAsXml(xmlTextWriterPtr pWriter) const BAD_CAST(m_aDataBindingStoreItemID.toUtf8().getStr())); (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("color"), BAD_CAST(m_aColor.toUtf8().getStr())); + (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("appearance"), + BAD_CAST(m_aAppearance.toUtf8().getStr())); (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("alias"), BAD_CAST(m_aAlias.toUtf8().getStr())); (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("tag"), BAD_CAST(m_aTag.toUtf8().getStr())); diff --git a/sw/source/core/unocore/unocontentcontrol.cxx b/sw/source/core/unocore/unocontentcontrol.cxx index ee8cebe913c5..1c37d5cbfc05 100644 --- a/sw/source/core/unocore/unocontentcontrol.cxx +++ b/sw/source/core/unocore/unocontentcontrol.cxx @@ -175,6 +175,7 @@ public: OUString m_aDataBindingXpath; OUString m_aDataBindingStoreItemID; OUString m_aColor; + OUString m_aAppearance; OUString m_aAlias; OUString m_aTag; sal_Int32 m_nId; @@ -556,6 +557,7 @@ void SwXContentControl::AttachImpl(const uno::Reference<text::XTextRange>& xText pContentControl->SetDataBindingXpath(m_pImpl->m_aDataBindingXpath); pContentControl->SetDataBindingStoreItemID(m_pImpl->m_aDataBindingStoreItemID); pContentControl->SetColor(m_pImpl->m_aColor); + pContentControl->SetAppearance(m_pImpl->m_aAppearance); pContentControl->SetAlias(m_pImpl->m_aAlias); pContentControl->SetTag(m_pImpl->m_aTag); pContentControl->SetId(m_pImpl->m_nId); @@ -1006,6 +1008,21 @@ void SAL_CALL SwXContentControl::setPropertyValue(const OUString& rPropertyName, } } } + else if (rPropertyName == UNO_NAME_APPEARANCE) + { + OUString aValue; + if (rValue >>= aValue) + { + if (m_pImpl->m_bIsDescriptor) + { + m_pImpl->m_aAppearance = aValue; + } + else + { + m_pImpl->m_pContentControl->SetAppearance(aValue); + } + } + } else if (rPropertyName == UNO_NAME_ALIAS) { OUString aValue; @@ -1303,6 +1320,17 @@ uno::Any SAL_CALL SwXContentControl::getPropertyValue(const OUString& rPropertyN aRet <<= m_pImpl->m_pContentControl->GetColor(); } } + else if (rPropertyName == UNO_NAME_APPEARANCE) + { + if (m_pImpl->m_bIsDescriptor) + { + aRet <<= m_pImpl->m_aAppearance; + } + else + { + aRet <<= m_pImpl->m_pContentControl->GetAppearance(); + } + } else if (rPropertyName == UNO_NAME_ALIAS) { if (m_pImpl->m_bIsDescriptor) diff --git a/sw/source/core/unocore/unomap1.cxx b/sw/source/core/unocore/unomap1.cxx index 5e96a882029a..0fe6db437118 100644 --- a/sw/source/core/unocore/unomap1.cxx +++ b/sw/source/core/unocore/unomap1.cxx @@ -1045,6 +1045,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetContentControlProper { u"" UNO_NAME_DATA_BINDING_XPATH, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, { u"" UNO_NAME_DATA_BINDING_STORE_ITEM_ID, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, { u"" UNO_NAME_COLOR, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, + { u"" UNO_NAME_APPEARANCE, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, { u"" UNO_NAME_ALIAS, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, { u"" UNO_NAME_TAG, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, { u"" UNO_NAME_ID, 0, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, 0 }, diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index d3bdc6fa6164..f1599b6bba3a 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -623,6 +623,8 @@ void SdtBlockHelper::DeleteAndResetTheLists() m_aPlaceHolderDocPart.clear(); if (!m_aColor.isEmpty()) m_aColor.clear(); + if (!m_aAppearance.isEmpty()) + m_aAppearance.clear(); m_bShowingPlaceHolder = false; m_nId = 0; m_nTabIndex = 0; @@ -722,6 +724,11 @@ void SdtBlockHelper::WriteExtraParams(::sax_fastparser::FSHelperPtr& pSerializer pSerializer->singleElementNS(XML_w15, XML_color, FSNS(XML_w, XML_val), m_aColor); } + if (!m_aAppearance.isEmpty()) + { + pSerializer->singleElementNS(XML_w15, XML_appearance, FSNS(XML_w15, XML_val), m_aAppearance); + } + if (!m_aAlias.isEmpty()) pSerializer->singleElementNS(XML_w, XML_alias, FSNS(XML_w, XML_val), m_aAlias); @@ -833,6 +840,11 @@ void SdtBlockHelper::GetSdtParamsFromGrabBag(const uno::Sequence<beans::Property m_aColor = sValue; } } + else if (aPropertyValue.Name == "ooxml:CT_SdtPr_appearance") + { + if (!(aPropertyValue.Value >>= m_aAppearance)) + SAL_WARN("sw.ww8", "DocxAttributeOutput::GrabBag: unexpected sdt appearance value"); + } else if (aPropertyValue.Name == "ooxml:CT_SdtPr_showingPlcHdr") { if (!(aPropertyValue.Value >>= m_bShowingPlaceHolder)) @@ -2401,6 +2413,12 @@ void DocxAttributeOutput::WriteContentControlStart() m_pContentControl->GetColor()); } + if (!m_pContentControl->GetAppearance().isEmpty()) + { + m_pSerializer->singleElementNS(XML_w15, XML_appearance, FSNS(XML_w15, XML_val), + m_pContentControl->GetAppearance()); + } + if (!m_pContentControl->GetAlias().isEmpty()) { m_pSerializer->singleElementNS(XML_w, XML_alias, FSNS(XML_w, XML_val), diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 9628eb3942cc..14b8e8075de5 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -142,6 +142,7 @@ public: rtl::Reference<sax_fastparser::FastAttributeList> m_pTextAttrs; rtl::Reference<sax_fastparser::FastAttributeList> m_pDataBindingAttrs; OUString m_aColor; + OUString m_aAppearance; OUString m_aPlaceHolderDocPart; bool m_bShowingPlaceHolder; OUString m_aAlias; diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index a3007aeb1b3a..034e27079c7c 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1205,6 +1205,10 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtColor_val", sStringValue); m_pImpl->m_pSdtHelper->SetColor(sStringValue); break; + case NS_ooxml::LN_CT_SdtAppearance_val: + m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtAppearance_val", sStringValue); + m_pImpl->m_pSdtHelper->SetAppearance(sStringValue); + break; case NS_ooxml::LN_CT_SdtText_multiLine: m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtText_multiLine", sStringValue); break; @@ -2807,6 +2811,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) case NS_ooxml::LN_CT_SdtPlaceholder_docPart: case NS_ooxml::LN_CT_SdtPr_showingPlcHdr: case NS_ooxml::LN_CT_SdtPr_color: + case NS_ooxml::LN_CT_SdtPr_appearance: case NS_ooxml::LN_CT_SdtPr_tag: case NS_ooxml::LN_CT_SdtPr_tabIndex: case NS_ooxml::LN_CT_SdtPr_lock: @@ -2829,6 +2834,16 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) break; } + if (nSprmId == NS_ooxml::LN_CT_SdtPr_appearance) + { + writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); + if (pProperties) + { + pProperties->resolve(*this); + } + break; + } + if (nSprmId == NS_ooxml::LN_CT_SdtPr_alias) { m_pImpl->m_pSdtHelper->SetAlias(sStringValue); @@ -2911,6 +2926,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) case NS_ooxml::LN_CT_SdtPlaceholder_docPart: sName = "ooxml:CT_SdtPlaceholder_docPart"; break; case NS_ooxml::LN_CT_SdtPr_showingPlcHdr: sName = "ooxml:CT_SdtPr_showingPlcHdr"; break; case NS_ooxml::LN_CT_SdtPr_color: sName = "ooxml:CT_SdtPr_color"; break; + case NS_ooxml::LN_CT_SdtPr_appearance: sName = "ooxml:CT_SdtPr_appearance"; break; default: assert(false); }; if ( diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 0946a5eb8c9c..cd9ab435e23e 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -931,6 +931,12 @@ void DomainMapper_Impl::PopSdt() uno::Any(m_pSdtHelper->GetColor())); } + if (!m_pSdtHelper->GetAppearance().isEmpty()) + { + xContentControlProps->setPropertyValue("Appearance", + uno::Any(m_pSdtHelper->GetAppearance())); + } + if (!m_pSdtHelper->GetAlias().isEmpty()) { xContentControlProps->setPropertyValue("Alias", diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index a80c03ed4ba5..99fd0de0de9d 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -475,6 +475,10 @@ void SdtHelper::SetColor(const OUString& rColor) { m_aColor = rColor; } OUString SdtHelper::GetColor() const { return m_aColor; } +void SdtHelper::SetAppearance(const OUString& rAppearance) { m_aAppearance = rAppearance; } + +const OUString& SdtHelper::GetAppearance() const { return m_aAppearance; } + void SdtHelper::SetAlias(const OUString& rAlias) { m_aAlias = rAlias; } const OUString& SdtHelper::GetAlias() const { return m_aAlias; } diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx index 38fda74ec55f..1f45268eaa06 100644 --- a/writerfilter/source/dmapper/SdtHelper.hxx +++ b/writerfilter/source/dmapper/SdtHelper.hxx @@ -125,6 +125,9 @@ class SdtHelper final : public virtual SvRefBase /// <w:sdtPr>'s <w15:color w:val="...">. OUString m_aColor; + /// <w:sdtPr>'s <w15:appearance w:val="...">. + OUString m_aAppearance; + /// <w:sdtPr>'s <w:alias w:val="...">. OUString m_aAlias; @@ -219,6 +222,9 @@ public: void SetColor(const OUString& rColor); OUString GetColor() const; + void SetAppearance(const OUString& rAppearance); + const OUString& GetAppearance() const; + void SetAlias(const OUString& rAlias); const OUString& GetAlias() const; diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index 833af5f1aa27..b0dea8f744c3 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -13946,6 +13946,11 @@ <data type="string"/> </attribute> </define> + <define name="CT_SdtAppearance"> + <attribute name="w15:val"> + <data type="string"/> + </attribute> + </define> <define name="CT_SdtPr"> <choice> <element name="rPr"> @@ -14020,6 +14025,9 @@ <element name="w15:color"> <ref name="CT_SdtColor"/> </element> + <element name="w15:appearance"> + <ref name="CT_SdtAppearance"/> + </element> </choice> </define> <define name="CT_SdtEndPr"> @@ -18263,6 +18271,9 @@ <resource name="CT_SdtColor" resource="Properties"> <attribute name="val" tokenid="ooxml:CT_SdtColor_val"/> </resource> + <resource name="CT_SdtAppearance" resource="Properties"> + <attribute name="w15:val" tokenid="ooxml:CT_SdtAppearance_val"/> + </resource> <resource name="CT_SdtPr" resource="Properties"> <element name="rPr" tokenid="ooxml:CT_SdtPr_rPr"/> <element name="alias" tokenid="ooxml:CT_SdtPr_alias"/> @@ -18288,6 +18299,7 @@ <element name="group" tokenid="ooxml:CT_SdtPr_group"/> <element name="bibliography" tokenid="ooxml:CT_SdtPr_bibliography"/> <element name="w15:color" tokenid="ooxml:CT_SdtPr_color"/> + <element name="w15:appearance" tokenid="ooxml:CT_SdtPr_appearance"/> </resource> <resource name="CT_SdtEndPr" resource="Properties"> <element name="rPr" tokenid="ooxml:CT_SdtEndPr_rPr"/> |