From 211916f86585cb4f6258eb30e0474e4c21cd37f1 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Wed, 26 Sep 2012 11:14:04 +0200 Subject: n#780843 fix docx import of cont section's header/footer on title page Change-Id: I129e154a3fea8a96607dc6350a99f4d6ca68196e --- writerfilter/source/dmapper/PropertyMap.cxx | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'writerfilter/source') diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 682a3d7f2f9a..e1258cc9449a 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -1001,6 +1001,35 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) if ((m_bTitlePage && m_bIsFirstSection) || !m_bTitlePage) xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_DESC_NAME ), uno::makeAny( m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName )); + else + { + // In this miserable situation (second or later section on a title page), make sure that the header / footer is not lost. + uno::Reference< container::XNameAccess > xPageStyles(rDM_Impl.GetPageStyles(), uno::UNO_QUERY); + if (xPageStyles->hasByName(m_sFollowPageStyleName)) + { + uno::Reference xCurrent(xPageStyles->getByName(rPropNameSupplier.GetName(PROP_STANDARD)), uno::UNO_QUERY); + uno::Reference xFollow(xPageStyles->getByName(m_sFollowPageStyleName), uno::UNO_QUERY); + + if (xFollow->getPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_ON)).get()) + { + xCurrent->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_ON), uno::makeAny(sal_True)); + uno::Reference xCurrentRange(xCurrent->getPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_TEXT)), uno::UNO_QUERY_THROW); + xCurrentRange->setString(""); + uno::Reference xCurrentTxt(xCurrentRange, uno::UNO_QUERY_THROW); + uno::Reference xFollowTxt(xFollow->getPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_TEXT)), uno::UNO_QUERY_THROW); + xCurrentTxt->copyText(xFollowTxt); + } + if (xFollow->getPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_ON)).get()) + { + xCurrent->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_ON), uno::makeAny(sal_True)); + uno::Reference xCurrentRange(xCurrent->getPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_TEXT)), uno::UNO_QUERY_THROW); + xCurrentRange->setString(""); + uno::Reference xCurrentTxt(xCurrentRange, uno::UNO_QUERY_THROW); + uno::Reference xFollowTxt(xFollow->getPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_TEXT)), uno::UNO_QUERY_THROW); + xCurrentTxt->copyText(xFollowTxt); + } + } + } // handle page breaks with odd/even page numbering style::PageStyleLayout nPageStyleLayout(style::PageStyleLayout_ALL); if (m_nBreakType == 3) -- cgit