diff options
author | Tobias Lippert <drtl@fastmail.fm> | 2014-02-27 12:10:14 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-03-10 09:42:17 -0500 |
commit | 4de3859d884549ef9f6e141b71592e69d51f6f94 (patch) | |
tree | ef5711bb354b543a998dbd59a9837a22555741ac /editeng | |
parent | 5b12e2bb76d8e9af30672cc34b884c54b5e639f5 (diff) |
RTF writing now uses SfxStyleSheetIterator to iterate over style sheets
Change-Id: I9d5e86eecf1849d8ae7f9e7052c434844e27ddfd
Reviewed-on: https://gerrit.libreoffice.org/8481
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/editeng/impedit4.cxx | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index 06a94e5833ac..86058772bc1e 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -78,6 +78,8 @@ #include <vector> #include <boost/scoped_ptr.hpp> +#include <boost/make_shared.hpp> +#include <boost/unordered_map.hpp> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -307,19 +309,6 @@ sal_uInt32 ImpEditEngine::WriteXML( SvStream& rOutput, EditSelection aSel ) return 0; } -static sal_uInt16 getStylePos( const SfxStyles& rStyles, SfxStyleSheet* pSheet ) -{ - sal_uInt16 nNumber = 0; - SfxStyles::const_iterator iter( rStyles.begin() ); - while( iter != rStyles.end() ) - { - if( (*iter++).get() == pSheet ) - return nNumber; - ++nNumber; - } - return 0; -} - sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) { DBG_ASSERT( GetUpdateMode(), "WriteRTF for UpdateMode = sal_False!" ); @@ -456,19 +445,31 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) rOutput.WriteChar( '}' ); rOutput << endl; + boost::unordered_map<SfxStyleSheetBase*, sal_uInt32> aStyleSheetToIdMap; // StyleSheets... if ( GetStyleSheetPool() ) { - sal_uInt16 nStyles = (sal_uInt16)GetStyleSheetPool()->GetStyles().size(); - if ( nStyles ) + SfxStyleSheetIteratorPtr aSSSIterator = boost::make_shared<SfxStyleSheetIterator>(GetStyleSheetPool(), + SFX_STYLE_FAMILY_ALL); + // fill aStyleSheetToIdMap + sal_uInt32 nId = 1; + for ( SfxStyleSheetBase* pStyle = aSSSIterator->First(); pStyle; + pStyle = aSSSIterator->Next() ) { + aStyleSheetToIdMap[pStyle] = nId; + nId++; + } + + if ( aSSSIterator->Count() ) + { + + sal_uInt32 nStyle = 0; rOutput.WriteChar( '{' ).WriteCharPtr( OOO_STRING_SVTOOLS_RTF_STYLESHEET ); - for ( sal_uInt16 nStyle = 0; nStyle < nStyles; nStyle++ ) + for ( SfxStyleSheetBase* pStyle = aSSSIterator->First(); pStyle; + pStyle = aSSSIterator->Next() ) { - SfxStyleSheet* pStyle = (SfxStyleSheet*)GetStyleSheetPool()->GetStyles()[ nStyle ].get(); - rOutput << endl; rOutput.WriteChar( '{' ).WriteCharPtr( OOO_STRING_SVTOOLS_RTF_S ); sal_uInt32 nNumber = nStyle + 1; @@ -490,23 +491,25 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) SfxStyleSheet* pParent = (SfxStyleSheet*)GetStyleSheetPool()->Find( pStyle->GetParent(), pStyle->GetFamily() ); DBG_ASSERT( pParent, "Parent not found!" ); rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_SBASEDON ); - nNumber = getStylePos( GetStyleSheetPool()->GetStyles(), pParent ) + 1; + nNumber = aStyleSheetToIdMap.find(pParent)->second; rOutput.WriteNumber( nNumber ); } // Next Style ... (more) - SfxStyleSheet* pNext = pStyle; + // we assume that we have only SfxStyleSheet in the pool + SfxStyleSheet* pNext = static_cast<SfxStyleSheet*>(pStyle); if ( !pStyle->GetFollow().isEmpty() && ( pStyle->GetFollow() != pStyle->GetName() ) ) pNext = (SfxStyleSheet*)GetStyleSheetPool()->Find( pStyle->GetFollow(), pStyle->GetFamily() ); DBG_ASSERT( pNext, "Next ot found!" ); rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_SNEXT ); - nNumber = getStylePos( GetStyleSheetPool()->GetStyles(), pNext ) + 1; + nNumber = aStyleSheetToIdMap.find(pNext)->second; rOutput.WriteNumber( nNumber ); // Name of the template ... rOutput.WriteCharPtr( " " ).WriteCharPtr( OUStringToOString(pStyle->GetName(), eDestEnc).getStr() ); rOutput.WriteCharPtr( ";}" ); + nStyle++; } rOutput.WriteChar( '}' ); rOutput << endl; @@ -546,7 +549,7 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) { // Number of template rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_S ); - sal_uInt32 nNumber = getStylePos( GetStyleSheetPool()->GetStyles(), pNode->GetStyleSheet() ) + 1; + sal_uInt32 nNumber = aStyleSheetToIdMap.find(pNode->GetStyleSheet())->second; rOutput.WriteNumber( nNumber ); // All Attribute |