summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorofftkp <parisoplop@gmail.com>2022-12-28 00:10:34 +0200
committerMiklos Vajna <vmiklos@collabora.com>2023-01-04 08:58:23 +0000
commitd20c11d4418053b1c5583255f626032a37a7e65e (patch)
tree0685608f47fb288cf0e22e7a3545fc8da9749965
parent3ae04064c671dbf1e1472571f53b2804109137aa (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.idl6
-rw-r--r--oox/source/token/tokens.txt1
-rw-r--r--sw/inc/formatcontentcontrol.hxx7
-rw-r--r--sw/inc/unoprnms.hxx1
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport17.cxx2
-rw-r--r--sw/source/core/txtnode/attrcontentcontrol.cxx2
-rw-r--r--sw/source/core/unocore/unocontentcontrol.cxx28
-rw-r--r--sw/source/core/unocore/unomap1.cxx1
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx18
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx1
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx16
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx6
-rw-r--r--writerfilter/source/dmapper/SdtHelper.cxx4
-rw-r--r--writerfilter/source/dmapper/SdtHelper.hxx6
-rw-r--r--writerfilter/source/ooxml/model.xml12
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"/>