diff options
author | Eike Rathke <erack@apache.org> | 2011-09-10 21:44:00 +0000 |
---|---|---|
committer | Eike Rathke <erack@apache.org> | 2011-09-10 21:44:00 +0000 |
commit | 42988f67c40e2ee55de547f88213526dcf04669a (patch) | |
tree | 308ffba4188c25543666bea518682858c0dae309 /oox | |
parent | b7fdae2b62b87f7eeae1fde07cb35e18571655d6 (diff) |
impress212: ppt slide persist, minor improvment
# User sj <sj@openoffice.org>
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/ppt/presentationfragmenthandler.cxx | 85 |
1 files changed, 44 insertions, 41 deletions
diff --git a/oox/source/ppt/presentationfragmenthandler.cxx b/oox/source/ppt/presentationfragmenthandler.cxx index 6976c965ad83..b652cb64d742 100644 --- a/oox/source/ppt/presentationfragmenthandler.cxx +++ b/oox/source/ppt/presentationfragmenthandler.cxx @@ -173,6 +173,7 @@ void PresentationFragmentHandler::endDocument() throw (SAXException, RuntimeExce OUString aSlideFragmentPath = getFragmentPathFromRelId( maSlidesVector[ nSlide ] ); if( aSlideFragmentPath.getLength() > 0 ) { + rtl::OUString aMasterFragmentPath; SlidePersistPtr pMasterPersistPtr; SlidePersistPtr pSlidePersistPtr( new SlidePersist( rFilter, sal_False, sal_False, xSlide, ShapePtr( new PPTShape( Slide, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle ) ); @@ -185,7 +186,7 @@ void PresentationFragmentHandler::endDocument() throw (SAXException, RuntimeExce { // importing layout RelationsRef xLayoutRelations = rFilter.importRelations( aLayoutFragmentPath ); - OUString aMasterFragmentPath = xLayoutRelations->getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "slideMaster" ) ); + aMasterFragmentPath = xLayoutRelations->getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "slideMaster" ) ); if( aMasterFragmentPath.getLength() ) { // check if the corresponding masterpage+layout has already been imported @@ -200,48 +201,50 @@ void PresentationFragmentHandler::endDocument() throw (SAXException, RuntimeExce } aIter++; } - if ( aIter == rMasterPages.end() ) - { // masterpersist not found, we have to load it - Reference< drawing::XDrawPage > xMasterPage; - Reference< drawing::XMasterPagesSupplier > xMPS( xModel, uno::UNO_QUERY_THROW ); - Reference< drawing::XDrawPages > xMasterPages( xMPS->getMasterPages(), uno::UNO_QUERY_THROW ); - - if( !(rFilter.getMasterPages().size() )) - xMasterPages->getByIndex( 0 ) >>= xMasterPage; - else - xMasterPage = xMasterPages->insertNewByIndex( xMasterPages->getCount() ); - - pMasterPersistPtr = SlidePersistPtr( new SlidePersist( rFilter, sal_True, sal_False, xMasterPage, - ShapePtr( new PPTShape( Master, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle ) ); - pMasterPersistPtr->setLayoutPath( aLayoutFragmentPath ); - rFilter.getMasterPages().push_back( pMasterPersistPtr ); - rFilter.setActualSlidePersist( pMasterPersistPtr ); - FragmentHandlerRef xMasterFragmentHandler( new SlideFragmentHandler( rFilter, aMasterFragmentPath, pMasterPersistPtr, Master ) ); - - // set the correct theme - OUString aThemeFragmentPath = xMasterFragmentHandler->getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "theme" ) ); - if( aThemeFragmentPath.getLength() > 0 ) - { - std::map< OUString, oox::drawingml::ThemePtr >& rThemes( rFilter.getThemes() ); - std::map< OUString, oox::drawingml::ThemePtr >::iterator aIter2( rThemes.find( aThemeFragmentPath ) ); - if( aIter2 == rThemes.end() ) - { - oox::drawingml::ThemePtr pThemePtr( new oox::drawingml::Theme() ); - pMasterPersistPtr->setTheme( pThemePtr ); - rFilter.importFragment( new ThemeFragmentHandler( rFilter, aThemeFragmentPath, *pThemePtr ) ); - rThemes[ aThemeFragmentPath ] = pThemePtr; - } - else - { - pMasterPersistPtr->setTheme( (*aIter2).second ); - } - } - importSlide( xMasterFragmentHandler, pMasterPersistPtr ); - rFilter.importFragment( new LayoutFragmentHandler( rFilter, aLayoutFragmentPath, pMasterPersistPtr ) ); - pMasterPersistPtr->createBackground( rFilter ); - pMasterPersistPtr->createXShapes( rFilter ); + } + } + + if ( !pMasterPersistPtr.get() ) + { // masterpersist not found, we have to load it + Reference< drawing::XDrawPage > xMasterPage; + Reference< drawing::XMasterPagesSupplier > xMPS( xModel, uno::UNO_QUERY_THROW ); + Reference< drawing::XDrawPages > xMasterPages( xMPS->getMasterPages(), uno::UNO_QUERY_THROW ); + + if( !(rFilter.getMasterPages().size() )) + xMasterPages->getByIndex( 0 ) >>= xMasterPage; + else + xMasterPage = xMasterPages->insertNewByIndex( xMasterPages->getCount() ); + + pMasterPersistPtr = SlidePersistPtr( new SlidePersist( rFilter, sal_True, sal_False, xMasterPage, + ShapePtr( new PPTShape( Master, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle ) ); + pMasterPersistPtr->setLayoutPath( aLayoutFragmentPath ); + rFilter.getMasterPages().push_back( pMasterPersistPtr ); + rFilter.setActualSlidePersist( pMasterPersistPtr ); + + FragmentHandlerRef xMasterFragmentHandler( new SlideFragmentHandler( rFilter, aMasterFragmentPath, pMasterPersistPtr, Master ) ); + + // set the correct theme + OUString aThemeFragmentPath = xMasterFragmentHandler->getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "theme" ) ); + if( aThemeFragmentPath.getLength() > 0 ) + { + std::map< OUString, oox::drawingml::ThemePtr >& rThemes( rFilter.getThemes() ); + std::map< OUString, oox::drawingml::ThemePtr >::iterator aIter2( rThemes.find( aThemeFragmentPath ) ); + if( aIter2 == rThemes.end() ) + { + oox::drawingml::ThemePtr pThemePtr( new oox::drawingml::Theme() ); + pMasterPersistPtr->setTheme( pThemePtr ); + rFilter.importFragment( new ThemeFragmentHandler( rFilter, aThemeFragmentPath, *pThemePtr ) ); + rThemes[ aThemeFragmentPath ] = pThemePtr; + } + else + { + pMasterPersistPtr->setTheme( (*aIter2).second ); } } + importSlide( xMasterFragmentHandler, pMasterPersistPtr ); + rFilter.importFragment( new LayoutFragmentHandler( rFilter, aLayoutFragmentPath, pMasterPersistPtr ) ); + pMasterPersistPtr->createBackground( rFilter ); + pMasterPersistPtr->createXShapes( rFilter ); } // importing slide page |