diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2021-11-18 20:06:08 +0300 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2021-12-21 12:48:39 +0100 |
commit | b704b18bbee7ecc19e5a53db8991b886b9c980eb (patch) | |
tree | 29bf01ed493208fd7ee98e245c6aed30353c771d /writerfilter | |
parent | c635dcd89a62a015daddd2976eaef1db771a0ab8 (diff) |
sw: support for other sdt attributes roundtrip in datepicker
Word Control Field with datepicker is implemented with LO datepicker,
but during this conversion we lose some field data, like control
color, data mapping, etc. This data is already retrieved and stored
in grab bag, so we need just to keep this grabbag in field and use
it again on export.
Change-Id: I6af8204fe1a7d2f9081d83372a6786b2f86260d8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125486
Tested-by: Jenkins
Reviewed-by: Vasily Melenchuk <vasily.melenchuk@cib.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127196
Tested-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 9 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.cxx | 3 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.hxx | 15 |
3 files changed, 22 insertions, 5 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 35e775745d8b..3ddb4c27c470 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1104,12 +1104,15 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } break; case NS_ooxml::LN_CT_DataBinding_prefixMappings: + m_pImpl->m_pSdtHelper->setDataBindingPrefixMapping(sStringValue); m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_prefixMappings", sStringValue); break; case NS_ooxml::LN_CT_DataBinding_xpath: + m_pImpl->m_pSdtHelper->setDataBindingXPath(sStringValue); m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_xpath", sStringValue); break; case NS_ooxml::LN_CT_DataBinding_storeItemID: + m_pImpl->m_pSdtHelper->setDataBindingStoreItemID(sStringValue); m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_storeItemID", sStringValue); break; case NS_ooxml::LN_CT_SdtPlaceholder_docPart_val: @@ -3361,11 +3364,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) } else if (m_pImpl->m_pSdtHelper->getControlType() == SdtControlType::datePicker) { - if (!m_pImpl->m_pSdtHelper->isInteropGrabBagEmpty()) - { - m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear(); - } - else if (IsInHeaderFooter() && m_pImpl->IsDiscardHeaderFooter()) + if (IsInHeaderFooter() && m_pImpl->IsDiscardHeaderFooter()) { m_pImpl->m_pSdtHelper->getDateFormat().truncate(); m_pImpl->m_pSdtHelper->getLocale().truncate(); diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index a1918d1f3756..d64f6aaf5b55 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -196,6 +196,9 @@ void SdtHelper::createDateContentControl() sFullDate = sFullDate.copy(0, nTimeSep); xNameCont->insertByName(ODF_FORMDATE_CURRENTDATE, uno::makeAny(sFullDate)); } + + // Store all unused sdt parameters from grabbag + xNameCont->insertByName("SdtParams", uno::makeAny(getInteropGrabBagAndClear())); } } diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx index 3eb18e5d9e65..ed2c3c690f7a 100644 --- a/writerfilter/source/dmapper/SdtHelper.hxx +++ b/writerfilter/source/dmapper/SdtHelper.hxx @@ -66,6 +66,14 @@ class SdtHelper final : public virtual SvRefBase OUStringBuffer m_sDate; /// Date format string as it comes from the ooxml document. OUStringBuffer m_sDateFormat; + + /// <w:dataBinding w:prefixMappings=""> + OUString m_sDataBindingPrefixMapping; + /// <w:dataBinding w:xpath=""> + OUString m_sDataBindingXPath; + /// <w:dataBinding w:storeItemID=""> + OUString m_sDataBindingStoreItemID; + /// Start range of the date field css::uno::Reference<css::text::XTextRange> m_xDateFieldStartRange; /// Locale string as it comes from the ooxml document. @@ -93,6 +101,13 @@ public: OUStringBuffer& getDateFormat() { return m_sDateFormat; } + void setDataBindingPrefixMapping(const OUString& sValue) + { + m_sDataBindingPrefixMapping = sValue; + } + void setDataBindingXPath(const OUString& sValue) { m_sDataBindingXPath = sValue; } + void setDataBindingStoreItemID(const OUString& sValue) { m_sDataBindingStoreItemID = sValue; } + void setDateFieldStartRange(const css::uno::Reference<css::text::XTextRange>& xStartRange) { m_xDateFieldStartRange = xStartRange; |