summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorEike Rathke <erack@apache.org>2011-09-10 21:44:00 +0000
committerEike Rathke <erack@apache.org>2011-09-10 21:44:00 +0000
commit42988f67c40e2ee55de547f88213526dcf04669a (patch)
tree308ffba4188c25543666bea518682858c0dae309 /oox
parentb7fdae2b62b87f7eeae1fde07cb35e18571655d6 (diff)
impress212: ppt slide persist, minor improvment
# User sj <sj@openoffice.org>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/ppt/presentationfragmenthandler.cxx85
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