Kaydet (Commit) 4de3859d authored tarafından Tobias Lippert's avatar Tobias Lippert Kaydeden (comit) Caolán McNamara

RTF writing now uses SfxStyleSheetIterator to iterate over style sheets

Change-Id: I9d5e86eecf1849d8ae7f9e7052c434844e27ddfd
Reviewed-on: https://gerrit.libreoffice.org/8481Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 5b12e2bb
...@@ -78,6 +78,8 @@ ...@@ -78,6 +78,8 @@
#include <vector> #include <vector>
#include <boost/scoped_ptr.hpp> #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;
using namespace ::com::sun::star::uno; using namespace ::com::sun::star::uno;
...@@ -307,19 +309,6 @@ sal_uInt32 ImpEditEngine::WriteXML( SvStream& rOutput, EditSelection aSel ) ...@@ -307,19 +309,6 @@ sal_uInt32 ImpEditEngine::WriteXML( SvStream& rOutput, EditSelection aSel )
return 0; 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 ) sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
{ {
DBG_ASSERT( GetUpdateMode(), "WriteRTF for UpdateMode = sal_False!" ); DBG_ASSERT( GetUpdateMode(), "WriteRTF for UpdateMode = sal_False!" );
...@@ -456,19 +445,31 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) ...@@ -456,19 +445,31 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
rOutput.WriteChar( '}' ); rOutput.WriteChar( '}' );
rOutput << endl; rOutput << endl;
boost::unordered_map<SfxStyleSheetBase*, sal_uInt32> aStyleSheetToIdMap;
// StyleSheets... // StyleSheets...
if ( GetStyleSheetPool() ) if ( GetStyleSheetPool() )
{ {
sal_uInt16 nStyles = (sal_uInt16)GetStyleSheetPool()->GetStyles().size(); SfxStyleSheetIteratorPtr aSSSIterator = boost::make_shared<SfxStyleSheetIterator>(GetStyleSheetPool(),
if ( nStyles ) 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 ); 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 << endl;
rOutput.WriteChar( '{' ).WriteCharPtr( OOO_STRING_SVTOOLS_RTF_S ); rOutput.WriteChar( '{' ).WriteCharPtr( OOO_STRING_SVTOOLS_RTF_S );
sal_uInt32 nNumber = nStyle + 1; sal_uInt32 nNumber = nStyle + 1;
...@@ -490,23 +491,25 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) ...@@ -490,23 +491,25 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
SfxStyleSheet* pParent = (SfxStyleSheet*)GetStyleSheetPool()->Find( pStyle->GetParent(), pStyle->GetFamily() ); SfxStyleSheet* pParent = (SfxStyleSheet*)GetStyleSheetPool()->Find( pStyle->GetParent(), pStyle->GetFamily() );
DBG_ASSERT( pParent, "Parent not found!" ); DBG_ASSERT( pParent, "Parent not found!" );
rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_SBASEDON ); rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_SBASEDON );
nNumber = getStylePos( GetStyleSheetPool()->GetStyles(), pParent ) + 1; nNumber = aStyleSheetToIdMap.find(pParent)->second;
rOutput.WriteNumber( nNumber ); rOutput.WriteNumber( nNumber );
} }
// Next Style ... (more) // 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() ) ) if ( !pStyle->GetFollow().isEmpty() && ( pStyle->GetFollow() != pStyle->GetName() ) )
pNext = (SfxStyleSheet*)GetStyleSheetPool()->Find( pStyle->GetFollow(), pStyle->GetFamily() ); pNext = (SfxStyleSheet*)GetStyleSheetPool()->Find( pStyle->GetFollow(), pStyle->GetFamily() );
DBG_ASSERT( pNext, "Next ot found!" ); DBG_ASSERT( pNext, "Next ot found!" );
rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_SNEXT ); rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_SNEXT );
nNumber = getStylePos( GetStyleSheetPool()->GetStyles(), pNext ) + 1; nNumber = aStyleSheetToIdMap.find(pNext)->second;
rOutput.WriteNumber( nNumber ); rOutput.WriteNumber( nNumber );
// Name of the template ... // Name of the template ...
rOutput.WriteCharPtr( " " ).WriteCharPtr( OUStringToOString(pStyle->GetName(), eDestEnc).getStr() ); rOutput.WriteCharPtr( " " ).WriteCharPtr( OUStringToOString(pStyle->GetName(), eDestEnc).getStr() );
rOutput.WriteCharPtr( ";}" ); rOutput.WriteCharPtr( ";}" );
nStyle++;
} }
rOutput.WriteChar( '}' ); rOutput.WriteChar( '}' );
rOutput << endl; rOutput << endl;
...@@ -546,7 +549,7 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel ) ...@@ -546,7 +549,7 @@ sal_uInt32 ImpEditEngine::WriteRTF( SvStream& rOutput, EditSelection aSel )
{ {
// Number of template // Number of template
rOutput.WriteCharPtr( OOO_STRING_SVTOOLS_RTF_S ); 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 ); rOutput.WriteNumber( nNumber );
// All Attribute // All Attribute
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment