diff options
author | Tamás Zolnai <tamas.zolnai@collabora.com> | 2019-08-05 03:37:34 +0200 |
---|---|---|
committer | Tamás Zolnai <tamas.zolnai@collabora.com> | 2019-08-05 15:13:41 +0200 |
commit | e4680c2b746dd8607a92a8470cefd1109caae66f (patch) | |
tree | ed24141284280daac838e5f56c8baf6011a741f0 /writerfilter | |
parent | 6d981f971774bb26fa269126ec890acec2171bd4 (diff) |
tdf126701: MSForms: Fix import of date field at the end of the paragraph.
We need to create date field before the paragraph is finished
(line break is inserted). A date field can not span between
paragraphs.
Extend other related unit tests too. In other use cases, the field
content changes to an invalid data.
Reviewed-on: https://gerrit.libreoffice.org/76971
Tested-by: Jenkins
Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
(cherry picked from commit b36ef83ea59eeaca239e58b95aa0b1acdcb99efc)
Change-Id: Id274649e0aaaf6e3c31e042afd126cefc368c858
Reviewed-on: https://gerrit.libreoffice.org/76977
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 25 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.hxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.cxx | 7 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.hxx | 2 |
4 files changed, 20 insertions, 16 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 6a0095651ffd..0c788dbb9c41 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3055,7 +3055,7 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) pContext->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE)); m_pImpl->clearDeferredBreak(COLUMN_BREAK); } - m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)); + finishParagraph(); return; } case cFieldStart: @@ -3248,15 +3248,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) m_pImpl->m_pSdtHelper->getLocale().truncate(); return; } - bool bIsInTable = (m_pImpl->hasTableManager() && m_pImpl->getTableManager().isInTable()) || - (m_pImpl->m_nTableDepth > 0); - if(bIsInTable || m_pImpl->IsInShape()) - { - // Inside an object we need to import date field earlier - m_pImpl->m_pSdtHelper->createDateContentControl(bIsInTable); - } } - if (!m_pImpl->hasTableManager()) return; @@ -3289,7 +3281,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) if ( m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun() ) { mbIsSplitPara = true; - m_pImpl->finishParagraph( m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) ); + finishParagraph(); lcl_startParagraphGroup(); } @@ -3319,7 +3311,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) xContext->Erase(PROP_NUMBERING_LEVEL); } m_pImpl->SetParaSectpr(false); - m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove); + finishParagraph(bRemove); if (bRemove) m_pImpl->RemoveLastParagraph(); } @@ -3338,7 +3330,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) if (m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun()) { m_pImpl->m_bIsSplitPara = true; - m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)); + finishParagraph(); lcl_startParagraphGroup(); } m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE)); @@ -3348,7 +3340,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) if (m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun()) { mbIsSplitPara = true; - m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)); + finishParagraph(); lcl_startParagraphGroup(); } m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE)); @@ -3793,6 +3785,13 @@ void DomainMapper::HandleRedline( Sprm& rSprm ) m_pImpl->SetCurrentRedlineIsRead(); } +void DomainMapper::finishParagraph(const bool bRemove) +{ + if (m_pImpl->m_pSdtHelper->validateDateFormat()) + m_pImpl->m_pSdtHelper->createDateContentControl(); + m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove); +} + } //namespace dmapper } //namespace writerfilter diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index e6b082cfcd47..e7a52764bf94 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -159,6 +159,8 @@ private: // Table virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) override; + void finishParagraph(const bool bRemove = false); + static void handleUnderlineType(const Id nId, const ::tools::SvRef<PropertyMap>& rContext); void handleParaJustification(const sal_Int32 nIntValue, const ::tools::SvRef<PropertyMap>& rContext, const bool bExchangeLeftRight); static bool getColorFromId(const Id, sal_Int32 &nColor); diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index 0a109c53d000..5e56340e0b80 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -98,7 +98,7 @@ bool SdtHelper::validateDateFormat() return !m_sDateFormat.toString().isEmpty() && !m_sLocale.toString().isEmpty(); } -void SdtHelper::createDateContentControl(bool bInsideTable) +void SdtHelper::createDateContentControl() { if(!m_xDateFieldStartRange.is()) return; @@ -117,7 +117,10 @@ void SdtHelper::createDateContentControl(bool bInsideTable) try { xCrsr->gotoRange(m_xDateFieldStartRange, false); - if(bInsideTable) + bool bIsInTable + = (m_rDM_Impl.hasTableManager() && m_rDM_Impl.getTableManager().isInTable()) + || (m_rDM_Impl.m_nTableDepth > 0); + if (bIsInTable) xCrsr->goRight(1, false); xCrsr->gotoEnd(true); } diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx index 5efb397edd8a..8f8f3ef9ba7b 100644 --- a/writerfilter/source/dmapper/SdtHelper.hxx +++ b/writerfilter/source/dmapper/SdtHelper.hxx @@ -124,7 +124,7 @@ public: /// Create drop-down control from w:sdt's w:dropDownList. void createDropDownControl(); /// Create date control from w:sdt's w:date. - void createDateContentControl(bool bInsideTable = false); + void createDateContentControl(); void appendToInteropGrabBag(const css::beans::PropertyValue& rValue); css::uno::Sequence<css::beans::PropertyValue> getInteropGrabBagAndClear(); |