1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include "comphelper/anytostring.hxx"
21 #include "cppuhelper/exc_hlp.hxx"
22 #include <osl/diagnose.h>
23 #include <tools/multisel.hxx>
25 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
26 #include <com/sun/star/drawing/XDrawPages.hpp>
27 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
28 #include <com/sun/star/drawing/XMasterPageTarget.hpp>
29 #include <com/sun/star/xml/dom/XDocument.hpp>
30 #include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
31 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
32 #include <com/sun/star/style/XStyle.hpp>
33 #include <com/sun/star/presentation/XPresentationPage.hpp>
34 #include <com/sun/star/task/XStatusIndicator.hpp>
36 #include "oox/drawingml/theme.hxx"
37 #include "oox/drawingml/drawingmltypes.hxx"
38 #include "oox/drawingml/themefragmenthandler.hxx"
39 #include "drawingml/textliststylecontext.hxx"
40 #include "oox/ppt/pptshape.hxx"
41 #include "oox/ppt/presentationfragmenthandler.hxx"
42 #include "oox/ppt/slidefragmenthandler.hxx"
43 #include "oox/ppt/layoutfragmenthandler.hxx"
44 #include "oox/ppt/pptimport.hxx"
46 #include <com/sun/star/office/XAnnotation.hpp>
47 #include <com/sun/star/office/XAnnotationAccess.hpp>
49 using namespace ::com::sun::star
;
50 using namespace ::oox::core
;
51 using namespace ::oox::drawingml
;
52 using namespace ::com::sun::star::uno
;
53 using namespace ::com::sun::star::beans
;
54 using namespace ::com::sun::star::drawing
;
55 using namespace ::com::sun::star::presentation
;
56 using namespace ::com::sun::star::xml::sax
;
58 namespace oox
{ namespace ppt
{
60 PresentationFragmentHandler::PresentationFragmentHandler( XmlFilterBase
& rFilter
, const OUString
& rFragmentPath
) throw()
61 : FragmentHandler2( rFilter
, rFragmentPath
)
62 , mpTextListStyle( new TextListStyle
)
63 , mbCommentAuthorsRead(false)
65 TextParagraphPropertiesVector
& rParagraphDefaulsVector( mpTextListStyle
->getListStyle() );
66 TextParagraphPropertiesVector::iterator
aParagraphDefaultIter( rParagraphDefaulsVector
.begin() );
67 while( aParagraphDefaultIter
!= rParagraphDefaulsVector
.end() )
69 // ppt is having zero bottom margin per default, whereas OOo is 0,5cm,
70 // so this attribute needs to be set always
71 (*aParagraphDefaultIter
++)->getParaBottomMargin() = TextSpacing( 0 );
75 PresentationFragmentHandler::~PresentationFragmentHandler() throw()
79 void ResolveTextFields( XmlFilterBase
& rFilter
)
81 const oox::core::TextFieldStack
& rTextFields
= rFilter
.getTextFieldStack();
82 if ( rTextFields
.size() )
84 Reference
< frame::XModel
> xModel( rFilter
.getModel() );
85 oox::core::TextFieldStack::const_iterator
aIter( rTextFields
.begin() );
86 while( aIter
!= rTextFields
.end() )
88 const OUString sURL
= "URL";
89 Reference
< drawing::XDrawPagesSupplier
> xDPS( xModel
, uno::UNO_QUERY_THROW
);
90 Reference
< drawing::XDrawPages
> xDrawPages( xDPS
->getDrawPages(), uno::UNO_QUERY_THROW
);
92 const oox::core::TextField
& rTextField( *aIter
++ );
93 Reference
< XPropertySet
> xPropSet( rTextField
.xTextField
, UNO_QUERY
);
94 Reference
< XPropertySetInfo
> xPropSetInfo( xPropSet
->getPropertySetInfo() );
95 if ( xPropSetInfo
->hasPropertyByName( sURL
) )
98 if ( xPropSet
->getPropertyValue( sURL
) >>= aURL
)
100 const OUString sSlide
= "#Slide ";
101 const OUString sNotes
= "#Notes ";
103 sal_Int32 nPageNumber
= 0;
104 if ( aURL
.match( sSlide
) )
105 nPageNumber
= aURL
.copy( sSlide
.getLength() ).toInt32();
106 else if ( aURL
.match( sNotes
) )
108 nPageNumber
= aURL
.copy( sNotes
.getLength() ).toInt32();
115 Reference
< XDrawPage
> xDrawPage
;
116 xDrawPages
->getByIndex( nPageNumber
- 1 ) >>= xDrawPage
;
119 Reference
< ::com::sun::star::presentation::XPresentationPage
> xPresentationPage( xDrawPage
, UNO_QUERY_THROW
);
120 xDrawPage
= xPresentationPage
->getNotesPage();
122 Reference
< container::XNamed
> xNamed( xDrawPage
, UNO_QUERY_THROW
);
123 aURL
= "#" + xNamed
->getName();
124 xPropSet
->setPropertyValue( sURL
, Any( aURL
) );
125 Reference
< text::XTextContent
> xContent( rTextField
.xTextField
, UNO_QUERY
);
126 Reference
< text::XTextRange
> xTextRange( rTextField
.xTextCursor
, UNO_QUERY
);
127 rTextField
.xText
->insertTextContent( xTextRange
, xContent
, sal_True
);
129 catch( uno::Exception
& )
139 void PresentationFragmentHandler::importSlide(sal_uInt32 nSlide
, bool bFirstPage
, bool bImportNotesPage
)
141 PowerPointImport
& rFilter
= dynamic_cast< PowerPointImport
& >( getFilter() );
143 Reference
< frame::XModel
> xModel( rFilter
.getModel() );
144 Reference
< drawing::XDrawPage
> xSlide
;
146 // importing slide pages and its corresponding notes page
147 Reference
< drawing::XDrawPagesSupplier
> xDPS( xModel
, uno::UNO_QUERY_THROW
);
148 Reference
< drawing::XDrawPages
> xDrawPages( xDPS
->getDrawPages(), uno::UNO_QUERY_THROW
);
153 xDrawPages
->getByIndex( 0 ) >>= xSlide
;
155 xSlide
= xDrawPages
->insertNewByIndex( xDrawPages
->getCount() );
157 OUString aSlideFragmentPath
= getFragmentPathFromRelId( maSlidesVector
[ nSlide
] );
158 if( !aSlideFragmentPath
.isEmpty() )
160 SlidePersistPtr pMasterPersistPtr
;
161 SlidePersistPtr
pSlidePersistPtr( new SlidePersist( rFilter
, false, false, xSlide
,
162 ShapePtr( new PPTShape( Slide
, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle
) );
164 FragmentHandlerRef
xSlideFragmentHandler( new SlideFragmentHandler( rFilter
, aSlideFragmentPath
, pSlidePersistPtr
, Slide
) );
166 // importing the corresponding masterpage/layout
167 OUString aLayoutFragmentPath
= xSlideFragmentHandler
->getFragmentPathFromFirstTypeFromOfficeDoc( "slideLayout" );
168 OUString aCommentFragmentPath
= xSlideFragmentHandler
->getFragmentPathFromFirstTypeFromOfficeDoc( "comments" );
169 if ( !aLayoutFragmentPath
.isEmpty() )
172 RelationsRef xLayoutRelations
= rFilter
.importRelations( aLayoutFragmentPath
);
173 OUString aMasterFragmentPath
= xLayoutRelations
->getFragmentPathFromFirstTypeFromOfficeDoc( "slideMaster" );
174 if( !aMasterFragmentPath
.isEmpty() )
176 // check if the corresponding masterpage+layout has already been imported
177 std::vector
< SlidePersistPtr
>& rMasterPages( rFilter
.getMasterPages() );
178 std::vector
< SlidePersistPtr
>::iterator
aIter( rMasterPages
.begin() );
179 while( aIter
!= rMasterPages
.end() )
181 if ( ( (*aIter
)->getPath() == aMasterFragmentPath
) && ( (*aIter
)->getLayoutPath() == aLayoutFragmentPath
) )
183 pMasterPersistPtr
= *aIter
;
189 if ( !pMasterPersistPtr
.get() )
190 { // masterpersist not found, we have to load it
191 Reference
< drawing::XDrawPage
> xMasterPage
;
192 Reference
< drawing::XMasterPagesSupplier
> xMPS( xModel
, uno::UNO_QUERY_THROW
);
193 Reference
< drawing::XDrawPages
> xMasterPages( xMPS
->getMasterPages(), uno::UNO_QUERY_THROW
);
195 if( !(rFilter
.getMasterPages().size() ))
196 xMasterPages
->getByIndex( 0 ) >>= xMasterPage
;
198 xMasterPage
= xMasterPages
->insertNewByIndex( xMasterPages
->getCount() );
200 pMasterPersistPtr
= SlidePersistPtr( new SlidePersist( rFilter
, true, false, xMasterPage
,
201 ShapePtr( new PPTShape( Master
, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle
) );
202 pMasterPersistPtr
->setLayoutPath( aLayoutFragmentPath
);
203 rFilter
.getMasterPages().push_back( pMasterPersistPtr
);
204 rFilter
.setActualSlidePersist( pMasterPersistPtr
);
205 FragmentHandlerRef
xMasterFragmentHandler( new SlideFragmentHandler( rFilter
, aMasterFragmentPath
, pMasterPersistPtr
, Master
) );
207 // set the correct theme
208 OUString aThemeFragmentPath
= xMasterFragmentHandler
->getFragmentPathFromFirstTypeFromOfficeDoc( "theme" );
209 if( !aThemeFragmentPath
.isEmpty() )
211 std::map
< OUString
, oox::drawingml::ThemePtr
>& rThemes( rFilter
.getThemes() );
212 std::map
< OUString
, oox::drawingml::ThemePtr
>::iterator
aIter2( rThemes
.find( aThemeFragmentPath
) );
213 if( aIter2
== rThemes
.end() )
215 oox::drawingml::ThemePtr
pThemePtr( new oox::drawingml::Theme() );
216 pMasterPersistPtr
->setTheme( pThemePtr
);
217 Reference
<xml::dom::XDocument
> xDoc
=
218 rFilter
.importFragment(aThemeFragmentPath
);
220 rFilter
.importFragment(
221 new ThemeFragmentHandler(
222 rFilter
, aThemeFragmentPath
, *pThemePtr
),
223 Reference
<xml::sax::XFastSAXSerializable
>(
226 rThemes
[ aThemeFragmentPath
] = pThemePtr
;
227 pThemePtr
->setFragment(xDoc
);
231 pMasterPersistPtr
->setTheme( (*aIter2
).second
);
234 importSlide( xMasterFragmentHandler
, pMasterPersistPtr
);
235 rFilter
.importFragment( new LayoutFragmentHandler( rFilter
, aLayoutFragmentPath
, pMasterPersistPtr
) );
236 pMasterPersistPtr
->createBackground( rFilter
);
237 pMasterPersistPtr
->createXShapes( rFilter
);
242 // importing slide page
243 if (pMasterPersistPtr
.get()) {
244 pSlidePersistPtr
->setMasterPersist( pMasterPersistPtr
);
245 pSlidePersistPtr
->setTheme( pMasterPersistPtr
->getTheme() );
246 Reference
< drawing::XMasterPageTarget
> xMasterPageTarget( pSlidePersistPtr
->getPage(), UNO_QUERY
);
247 if( xMasterPageTarget
.is() )
248 xMasterPageTarget
->setMasterPage( pMasterPersistPtr
->getPage() );
250 rFilter
.getDrawPages().push_back( pSlidePersistPtr
);
251 rFilter
.setActualSlidePersist( pSlidePersistPtr
);
252 importSlide( xSlideFragmentHandler
, pSlidePersistPtr
);
253 pSlidePersistPtr
->createBackground( rFilter
);
254 pSlidePersistPtr
->createXShapes( rFilter
);
256 if(bImportNotesPage
) {
258 // now importing the notes page
259 OUString aNotesFragmentPath
= xSlideFragmentHandler
->getFragmentPathFromFirstTypeFromOfficeDoc( "notesSlide" );
260 if( !aNotesFragmentPath
.isEmpty() )
262 Reference
< XPresentationPage
> xPresentationPage( xSlide
, UNO_QUERY
);
263 if ( xPresentationPage
.is() )
265 Reference
< XDrawPage
> xNotesPage( xPresentationPage
->getNotesPage() );
266 if ( xNotesPage
.is() )
268 SlidePersistPtr
pNotesPersistPtr( new SlidePersist( rFilter
, false, true, xNotesPage
,
269 ShapePtr( new PPTShape( Slide
, "com.sun.star.drawing.GroupShape" ) ), mpTextListStyle
) );
270 FragmentHandlerRef
xNotesFragmentHandler( new SlideFragmentHandler( getFilter(), aNotesFragmentPath
, pNotesPersistPtr
, Slide
) );
271 rFilter
.getNotesPages().push_back( pNotesPersistPtr
);
272 rFilter
.setActualSlidePersist( pNotesPersistPtr
);
273 importSlide( xNotesFragmentHandler
, pNotesPersistPtr
);
274 pNotesPersistPtr
->createBackground( rFilter
);
275 pNotesPersistPtr
->createXShapes( rFilter
);
281 if( !mbCommentAuthorsRead
&& !aCommentFragmentPath
.isEmpty() )
283 // Comments are present and commentAuthors.xml has still not been read
284 mbCommentAuthorsRead
= true;
285 OUString aCommentAuthorsFragmentPath
= "ppt/commentAuthors.xml";
286 Reference
< XPresentationPage
> xPresentationPage( xSlide
, UNO_QUERY
);
287 Reference
< XDrawPage
> xCommentAuthorsPage( xPresentationPage
->getNotesPage() );
288 SlidePersistPtr
pCommentAuthorsPersistPtr(
289 new SlidePersist( rFilter
, false, true, xCommentAuthorsPage
,
292 Slide
, "com.sun.star.drawing.GroupShape" ) ),
294 FragmentHandlerRef
xCommentAuthorsFragmentHandler(
295 new SlideFragmentHandler( getFilter(),
296 aCommentAuthorsFragmentPath
,
297 pCommentAuthorsPersistPtr
,
300 importSlide( xCommentAuthorsFragmentHandler
, pCommentAuthorsPersistPtr
);
301 maAuthorList
.setValues( pCommentAuthorsPersistPtr
->getCommentAuthors() );
303 if( !aCommentFragmentPath
.isEmpty() )
305 Reference
< XPresentationPage
> xPresentationPage( xSlide
, UNO_QUERY
);
306 Reference
< XDrawPage
> xCommentsPage( xPresentationPage
->getNotesPage() );
307 SlidePersistPtr
pCommentsPersistPtr(
309 rFilter
, false, true, xCommentsPage
,
312 Slide
, "com.sun.star.drawing.GroupShape" ) ),
315 FragmentHandlerRef
xCommentsFragmentHandler(
316 new SlideFragmentHandler(
318 aCommentFragmentPath
,
321 pCommentsPersistPtr
->getCommentsList().cmLst
.clear();
322 importSlide( xCommentsFragmentHandler
, pCommentsPersistPtr
);
324 //set comment chars for last comment on slide
325 SlideFragmentHandler
* comment_handler
=
326 dynamic_cast<SlideFragmentHandler
*>(xCommentsFragmentHandler
.get());
327 // some comments have no text -> set empty string as text to avoid
328 // crash (back() on empty vector is undefined) and losing other
329 // comment data that might be there (author, position, timestamp etc.)
330 pCommentsPersistPtr
->getCommentsList().cmLst
.back().setText(
331 comment_handler
->getCharVector().empty() ? "" :
332 comment_handler
->getCharVector().back() );
333 pCommentsPersistPtr
->getCommentAuthors().setValues(maAuthorList
);
335 //insert all comments from commentsList
336 for(int i
=0; i
<pCommentsPersistPtr
->getCommentsList().getSize(); i
++)
339 Comment aComment
= pCommentsPersistPtr
->getCommentsList().getCommentAtIndex(i
);
340 uno::Reference
< office::XAnnotationAccess
> xAnnotationAccess( xSlide
, UNO_QUERY_THROW
);
341 uno::Reference
< office::XAnnotation
> xAnnotation( xAnnotationAccess
->createAndInsertAnnotation() );
342 int nPosX
= aComment
.getIntX();
343 int nPosY
= aComment
.getIntY();
344 xAnnotation
->setPosition(
345 geometry::RealPoint2D(
346 ::oox::drawingml::convertEmuToHmm( nPosX
) * 15.87,
347 ::oox::drawingml::convertEmuToHmm( nPosY
) * 15.87 ) );
348 xAnnotation
->setAuthor( aComment
.getAuthor(maAuthorList
) );
349 xAnnotation
->setDateTime( aComment
.getDateTime() );
350 uno::Reference
< text::XText
> xText( xAnnotation
->getTextRange() );
351 xText
->setString( aComment
.get_text());
352 } catch( css::lang::IllegalArgumentException
& ) {}
357 catch( uno::Exception
& )
359 OSL_FAIL( OString("oox::ppt::PresentationFragmentHandler::EndDocument(), "
360 "exception caught: " +
362 comphelper::anyToString( cppu::getCaughtException() ),
363 RTL_TEXTENCODING_UTF8
)).getStr() );
368 void PresentationFragmentHandler::finalizeImport()
370 PowerPointImport
& rFilter
= dynamic_cast< PowerPointImport
& >( getFilter() );
372 sal_Int32 nPageCount
= maSlidesVector
.size();
374 // we will take the FilterData property "PageRange" if available, otherwise full range is used
375 comphelper::SequenceAsHashMap
& rFilterData
= rFilter
.getFilterData();
377 // writing back the original PageCount of this document, it can be accessed from the XModel
378 // via getArgs after the import.
379 rFilterData
["OriginalPageCount"] = makeAny(nPageCount
);
380 bool bImportNotesPages
= rFilterData
.getUnpackedValueOrDefault("ImportNotesPages", true);
381 OUString aPageRange
= rFilterData
.getUnpackedValueOrDefault("PageRange", OUString());
383 if( !aPageRange
.getLength() )
385 aPageRange
= OUStringBuffer()
386 .append( static_cast< sal_Int32
>( 1 ) )
388 .append( nPageCount
).makeStringAndClear();
391 StringRangeEnumerator
aRangeEnumerator( aPageRange
, 0, nPageCount
- 1 );
392 StringRangeEnumerator::Iterator aIter
= aRangeEnumerator
.begin();
393 StringRangeEnumerator::Iterator aEnd
= aRangeEnumerator
.end();
396 // todo: localized progress bar text
397 const Reference
< task::XStatusIndicator
>& rxStatusIndicator( getFilter().getStatusIndicator() );
398 if ( rxStatusIndicator
.is() )
399 rxStatusIndicator
->start( OUString(), 10000 );
403 int nPagesImported
= 0;
406 if ( rxStatusIndicator
.is() )
407 rxStatusIndicator
->setValue((nPagesImported
* 10000) / aRangeEnumerator
.size());
409 importSlide(*aIter
, !nPagesImported
, bImportNotesPages
);
413 ResolveTextFields( rFilter
);
415 catch( uno::Exception
& )
417 OSL_FAIL( OString("oox::ppt::PresentationFragmentHandler::finalizeImport(), "
418 "exception caught: " +
420 comphelper::anyToString( cppu::getCaughtException() ),
421 RTL_TEXTENCODING_UTF8
)).getStr() );
423 // todo error handling;
424 if ( rxStatusIndicator
.is() )
425 rxStatusIndicator
->end();
430 ::oox::core::ContextHandlerRef
PresentationFragmentHandler::onCreateContext( sal_Int32 aElementToken
, const AttributeList
& rAttribs
)
432 switch( aElementToken
)
434 case PPT_TOKEN( presentation
):
435 case PPT_TOKEN( sldMasterIdLst
):
436 case PPT_TOKEN( notesMasterIdLst
):
437 case PPT_TOKEN( sldIdLst
):
439 case PPT_TOKEN( sldMasterId
):
440 maSlideMasterVector
.push_back( rAttribs
.getString( R_TOKEN( id
), OUString() ) );
442 case PPT_TOKEN( sldId
):
443 maSlidesVector
.push_back( rAttribs
.getString( R_TOKEN( id
), OUString() ) );
445 case PPT_TOKEN( notesMasterId
):
446 maNotesMasterVector
.push_back( rAttribs
.getString( R_TOKEN( id
), OUString() ) );
448 case PPT_TOKEN( sldSz
):
449 maSlideSize
= GetSize2D( rAttribs
.getFastAttributeList() );
451 case PPT_TOKEN( notesSz
):
452 maNotesSize
= GetSize2D( rAttribs
.getFastAttributeList() );
454 case PPT_TOKEN( custShowLst
):
455 return new CustomShowListContext( *this, maCustomShowList
);
456 case PPT_TOKEN( defaultTextStyle
):
457 return new TextListStyleContext( *this, *mpTextListStyle
);
462 bool PresentationFragmentHandler::importSlide( const FragmentHandlerRef
& rxSlideFragmentHandler
,
463 const SlidePersistPtr
& rSlidePersistPtr
)
465 Reference
< drawing::XDrawPage
> xSlide( rSlidePersistPtr
->getPage() );
466 SlidePersistPtr
pMasterPersistPtr( rSlidePersistPtr
->getMasterPersist() );
467 if ( pMasterPersistPtr
.get() )
469 // Setting "Layout" property adds extra title and outliner preset shapes to the master slide
470 Reference
< drawing::XDrawPage
> xMasterSlide(pMasterPersistPtr
->getPage());
471 const int nCount
= xMasterSlide
->getCount();
473 const OUString sLayout
= "Layout";
474 uno::Reference
< beans::XPropertySet
> xSet( xSlide
, uno::UNO_QUERY_THROW
);
475 xSet
->setPropertyValue( sLayout
, Any( pMasterPersistPtr
->getLayoutFromValueToken() ) );
477 while( nCount
< xMasterSlide
->getCount())
479 Reference
< drawing::XShape
> xShape
;
480 xMasterSlide
->getByIndex(xMasterSlide
->getCount()-1) >>= xShape
;
481 xMasterSlide
->remove(xShape
);
484 while( xSlide
->getCount() )
486 Reference
< drawing::XShape
> xShape
;
487 xSlide
->getByIndex(0) >>= xShape
;
488 xSlide
->remove( xShape
);
491 Reference
< XPropertySet
> xPropertySet( xSlide
, UNO_QUERY
);
492 if ( xPropertySet
.is() )
494 awt::Size
& rPageSize( rSlidePersistPtr
->isNotesPage() ? maNotesSize
: maSlideSize
);
495 xPropertySet
->setPropertyValue( "Width", Any( rPageSize
.Width
) );
496 xPropertySet
->setPropertyValue( "Height", Any( rPageSize
.Height
) );
498 oox::ppt::HeaderFooter
aHeaderFooter( rSlidePersistPtr
->getHeaderFooter() );
499 if ( !rSlidePersistPtr
->isMasterPage() )
500 aHeaderFooter
.mbSlideNumber
= aHeaderFooter
.mbHeader
= aHeaderFooter
.mbFooter
= aHeaderFooter
.mbDateTime
= false;
503 if ( rSlidePersistPtr
->isNotesPage() )
504 xPropertySet
->setPropertyValue( "IsHeaderVisible", Any( aHeaderFooter
.mbHeader
) );
505 xPropertySet
->setPropertyValue( "IsFooterVisible", Any( aHeaderFooter
.mbFooter
) );
506 xPropertySet
->setPropertyValue( "IsDateTimeVisible", Any( aHeaderFooter
.mbDateTime
) );
507 xPropertySet
->setPropertyValue( "IsPageNumberVisible", Any( aHeaderFooter
.mbSlideNumber
) );
509 catch( uno::Exception
& )
513 rSlidePersistPtr
->setPath( rxSlideFragmentHandler
->getFragmentPath() );
514 return getFilter().importFragment( rxSlideFragmentHandler
);
519 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */