writerfilter/source/dmapper/DomainMapper_Impl.cxx | 88 ++++++---------------- writerfilter/source/dmapper/DomainMapper_Impl.hxx | 3 2 files changed, 28 insertions(+), 63 deletions(-)
New commits: commit 07338e20663f9a52f819d0d0c93e8599406d1ff2 Author: Jan Holesovsky <ke...@collabora.com> Date: Fri Feb 21 13:56:18 2014 +0100 Kill copy'n'paste. Change-Id: I3d457efc89873ca92a4458b1ac0a125848c942a8 diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index a5f839c..b66b7f3 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1337,14 +1337,18 @@ uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendTextSectionAfter( return xRet; } - -void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType) +void DomainMapper_Impl::PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType) { + const PropertyIds ePropIsOn = bHeader? PROP_HEADER_IS_ON: PROP_FOOTER_IS_ON; + const PropertyIds ePropShared = bHeader? PROP_HEADER_IS_SHARED: PROP_FOOTER_IS_SHARED; + const PropertyIds ePropTextLeft = bHeader? PROP_HEADER_TEXT_LEFT: PROP_FOOTER_TEXT_LEFT; + const PropertyIds ePropText = bHeader? PROP_HEADER_TEXT: PROP_FOOTER_TEXT; + m_bInHeaderFooterImport = true; //get the section context PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION); - //ask for the header name of the given type + //ask for the header/footer name of the given type SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() ); if(pSectionContext) { @@ -1362,21 +1366,22 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType) { PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); - //switch on header use + //switch on header/footer use xPageStyle->setPropertyValue( - rPropNameSupplier.GetName(PROP_HEADER_IS_ON), - uno::makeAny(sal_True) ); + rPropNameSupplier.GetName(ePropIsOn), + uno::makeAny(sal_True)); // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it - // Even if the 'Even' header is blank - the flag should be imported (so it would look in LO like in Word) + // Even if the 'Even' header/footer is blank - the flag should be imported (so it would look in LO like in Word) if (GetSettingsTable()->GetEvenAndOddHeaders()) - xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_SHARED), uno::makeAny( false )); + xPageStyle->setPropertyValue(rPropNameSupplier.GetName(ePropShared), uno::makeAny(false)); //set the interface - uno::Reference< text::XText > xHeaderText; - xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_HEADER_TEXT_LEFT : PROP_HEADER_TEXT) ) >>= xHeaderText; - m_aTextAppendStack.push( TextAppendContext(uno::Reference< text::XTextAppend >( xHeaderText, uno::UNO_QUERY_THROW), - m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : m_xBodyText->createTextCursorByRange(xHeaderText->getStart()))); + uno::Reference< text::XText > xText; + xPageStyle->getPropertyValue(rPropNameSupplier.GetName(bLeft? ePropTextLeft: ePropText)) >>= xText; + + m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >(xText, uno::UNO_QUERY_THROW), + m_bIsNewDoc? uno::Reference<text::XTextCursor>(): m_xBodyText->createTextCursorByRange(xText->getStart()))); } else { @@ -1389,59 +1394,16 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType) } } +void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType) +{ + PushPageHeaderFooter(/* bHeader = */ true, eType); +} void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType) { - m_bInHeaderFooterImport = true; - - //get the section context - PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION); - //ask for the footer name of the given type - SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() ); - if(pSectionContext) - { - uno::Reference< beans::XPropertySet > xPageStyle = - pSectionContext->GetPageStyle( - GetPageStyles(), - m_xTextFactory, - eType == SectionPropertyMap::PAGE_FIRST ); - if (!xPageStyle.is()) - return; - try - { - bool bLeft = eType == SectionPropertyMap::PAGE_LEFT; - if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders())) - { - PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); - - //switch on footer use - xPageStyle->setPropertyValue( - rPropNameSupplier.GetName(PROP_FOOTER_IS_ON), - uno::makeAny(sal_True) ); - - // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it - // Even if the 'Even' footer is blank - the flag should be imported (so it would look in LO like in Word) - if (GetSettingsTable()->GetEvenAndOddHeaders()) - xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_SHARED), uno::makeAny( false )); - - //set the interface - uno::Reference< text::XText > xFooterText; - xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_FOOTER_TEXT_LEFT : PROP_FOOTER_TEXT) ) >>= xFooterText; - m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >( xFooterText, uno::UNO_QUERY_THROW ), - m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : m_xBodyText->createTextCursorByRange(xFooterText->getStart()))); - } - else - { - m_bDiscardHeaderFooter = true; - } - } - catch( const uno::Exception& ) - { - } - } + PushPageHeaderFooter(/* bHeader = */ false, eType); } - void DomainMapper_Impl::PopPageHeaderFooter() { //header and footer always have an empty paragraph at the end diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 18d768c..758dcaa 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -755,6 +755,9 @@ public: /// ST_PositivePercentage values we received std::queue<OUString> m_aPositivePercentages; bool isInIndexContext() { return m_bStartIndex;} + +private: + void PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType); }; } //namespace dmapper } //namespace writerfilter commit fd859ee5802d6fa353526e632b49a8208444769e Author: Jan Holesovsky <ke...@collabora.com> Date: Fri Feb 21 13:29:42 2014 +0100 Related fdo#38054: Don't crash when opening this document. The document itself is (I think) corrupted, but we shouldn't crash anyway. Change-Id: I7ecfaed7003de2976e47992c89bb695a5cdffda4 diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 70b7320..a5f839c 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1358,7 +1358,7 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType) try { bool bLeft = eType == SectionPropertyMap::PAGE_LEFT; - if ((!bLeft && !m_pSettingsTable->GetEvenAndOddHeaders()) || (m_pSettingsTable->GetEvenAndOddHeaders())) + if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders())) { PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); @@ -1369,7 +1369,7 @@ void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType) // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it // Even if the 'Even' header is blank - the flag should be imported (so it would look in LO like in Word) - if( m_pSettingsTable->GetEvenAndOddHeaders() ) + if (GetSettingsTable()->GetEvenAndOddHeaders()) xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_SHARED), uno::makeAny( false )); //set the interface @@ -1410,7 +1410,7 @@ void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType) try { bool bLeft = eType == SectionPropertyMap::PAGE_LEFT; - if ((!bLeft && !m_pSettingsTable->GetEvenAndOddHeaders()) || (m_pSettingsTable->GetEvenAndOddHeaders())) + if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders())) { PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); @@ -1421,7 +1421,7 @@ void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType) // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it // Even if the 'Even' footer is blank - the flag should be imported (so it would look in LO like in Word) - if( m_pSettingsTable->GetEvenAndOddHeaders() ) + if (GetSettingsTable()->GetEvenAndOddHeaders()) xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_SHARED), uno::makeAny( false )); //set the interface @@ -4061,7 +4061,7 @@ void DomainMapper_Impl::ResetParaMarkerRedline( ) void DomainMapper_Impl::ApplySettingsTable() { - if( m_pSettingsTable && m_xTextFactory.is() ) + if (m_pSettingsTable && m_xTextFactory.is()) { try { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits