xref: /aoo4110/main/xmloff/source/draw/sdxmlimp.cxx (revision b1cdbd2c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmloff.hxx"
26 
27 #include <tools/string.hxx>
28 
29 #include <xmloff/xmlscripti.hxx>
30 #include "sdxmlimp_impl.hxx"
31 #include "ximpbody.hxx"
32 
33 #include <xmloff/xmlmetai.hxx>
34 #include "ximpstyl.hxx"
35 #include "xmloff/xmlnmspe.hxx"
36 #include <xmloff/xmltoken.hxx>
37 #include <xmloff/xmluconv.hxx>
38 #include <xmloff/DocumentSettingsContext.hxx>
39 #include <com/sun/star/form/XFormsSupplier.hpp>
40 #include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
41 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
42 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
43 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
44 #include "sdpropls.hxx"
45 #include <xmloff/xmlexppr.hxx>
46 #include "xmloff/xmlerror.hxx"
47 #include <tools/debug.hxx>
48 #include <com/sun/star/style/XStyle.hpp>
49 
50 #include <xmloff/XMLFontStylesContext.hxx>
51 
52 #include <com/sun/star/document/XDocumentProperties.hpp>
53 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
54 
55 using ::rtl::OUString;
56 using ::rtl::OUStringBuffer;
57 
58 using namespace ::com::sun::star;
59 using namespace ::xmloff::token;
60 
61 //////////////////////////////////////////////////////////////////////////////
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 //////////////////////////////////////////////////////////////////////////////
74 
75 class SdXMLBodyContext_Impl : public SvXMLImportContext
76 {
GetSdImport() const77 	const SdXMLImport& GetSdImport() const
78 		{ return (const SdXMLImport&)GetImport(); }
GetSdImport()79 	SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); }
80 
81 public:
82 
83 	SdXMLBodyContext_Impl( SdXMLImport& rImport, sal_uInt16 nPrfx,
84 				const OUString& rLName,
85 				const uno::Reference< xml::sax::XAttributeList > & xAttrList );
86 	virtual ~SdXMLBodyContext_Impl();
87 
88 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
89 				const OUString& rLocalName,
90 				const uno::Reference< xml::sax::XAttributeList > & xAttrList );
91 };
92 
SdXMLBodyContext_Impl(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> &)93 SdXMLBodyContext_Impl::SdXMLBodyContext_Impl( SdXMLImport& rImport,
94 				sal_uInt16 nPrfx, const OUString& rLName,
95 				const uno::Reference< xml::sax::XAttributeList > & ) :
96 	SvXMLImportContext( rImport, nPrfx, rLName )
97 {
98 }
99 
~SdXMLBodyContext_Impl()100 SdXMLBodyContext_Impl::~SdXMLBodyContext_Impl()
101 {
102 }
103 
CreateChildContext(sal_uInt16,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)104 SvXMLImportContext *SdXMLBodyContext_Impl::CreateChildContext(
105 		sal_uInt16 /*nPrefix*/,
106 		const OUString& rLocalName,
107 		const uno::Reference< xml::sax::XAttributeList > & xAttrList )
108 {
109 	return GetSdImport().CreateBodyContext(rLocalName, xAttrList);
110 }
111 
112 //////////////////////////////////////////////////////////////////////////////
113 
114 // NB: virtually inherit so we can multiply inherit properly
115 //     in SdXMLFlatDocContext_Impl
116 class SdXMLDocContext_Impl : public virtual SvXMLImportContext
117 {
118 protected:
GetSdImport() const119 	const SdXMLImport& GetSdImport() const { return (const SdXMLImport&)GetImport(); }
GetSdImport()120 	SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); }
121 
122 public:
123 	SdXMLDocContext_Impl(
124 		SdXMLImport& rImport,
125 		sal_uInt16 nPrfx,
126 		const OUString& rLName,
127 		const uno::Reference<xml::sax::XAttributeList>& xAttrList);
128 	virtual ~SdXMLDocContext_Impl();
129 
130 	TYPEINFO();
131 
132 	virtual SvXMLImportContext *CreateChildContext(sal_uInt16 nPrefix,
133 		const OUString& rLocalName,
134 		const uno::Reference<xml::sax::XAttributeList>& xAttrList);
135 };
136 
137 //////////////////////////////////////////////////////////////////////////////
138 
SdXMLDocContext_Impl(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> &)139 SdXMLDocContext_Impl::SdXMLDocContext_Impl(
140 	SdXMLImport& rImport,
141 	sal_uInt16 nPrfx,
142 	const OUString& rLName,
143 	const uno::Reference<xml::sax::XAttributeList>&)
144 :	SvXMLImportContext(rImport, nPrfx, rLName)
145 {
146 }
147 
148 //////////////////////////////////////////////////////////////////////////////
149 
~SdXMLDocContext_Impl()150 SdXMLDocContext_Impl::~SdXMLDocContext_Impl()
151 {
152 }
153 
154 TYPEINIT1( SdXMLDocContext_Impl, SvXMLImportContext );
155 
156 //////////////////////////////////////////////////////////////////////////////
157 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)158 SvXMLImportContext *SdXMLDocContext_Impl::CreateChildContext(
159 	sal_uInt16 nPrefix,
160 	const OUString& rLocalName,
161 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
162 {
163 	SvXMLImportContext* pContext = 0L;
164 
165 	const SvXMLTokenMap& rTokenMap = GetSdImport().GetDocElemTokenMap();
166 	switch(rTokenMap.Get(nPrefix, rLocalName))
167 	{
168 		case XML_TOK_DOC_FONTDECLS:
169 		{
170 			pContext = GetSdImport().CreateFontDeclsContext( rLocalName, xAttrList );
171 			break;
172 		}
173 		case XML_TOK_DOC_SETTINGS:
174 		{
175 			if( GetImport().getImportFlags() & IMPORT_SETTINGS )
176 			{
177 				pContext = new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList );
178 			}
179 			break;
180 		}
181 		case XML_TOK_DOC_STYLES:
182 		{
183 			if( GetImport().getImportFlags() & IMPORT_STYLES )
184 			{
185 				// office:styles inside office:document
186 				pContext = GetSdImport().CreateStylesContext(rLocalName, xAttrList);
187 			}
188 			break;
189 		}
190 		case XML_TOK_DOC_AUTOSTYLES:
191 		{
192 			if( GetImport().getImportFlags() & IMPORT_AUTOSTYLES )
193 			{
194 				// office:automatic-styles inside office:document
195 				pContext = GetSdImport().CreateAutoStylesContext(rLocalName, xAttrList);
196 			}
197 			break;
198 		}
199 		case XML_TOK_DOC_MASTERSTYLES:
200 		{
201 			if( GetImport().getImportFlags() & IMPORT_MASTERSTYLES )
202 			{
203 				// office:master-styles inside office:document
204 				pContext = GetSdImport().CreateMasterStylesContext(rLocalName, xAttrList);
205 			}
206 			break;
207 		}
208 		case XML_TOK_DOC_META:
209 		{
210             DBG_WARNING("XML_TOK_DOC_META: should not have come here, maybe document is invalid?");
211 			break;
212 		}
213 		case XML_TOK_DOC_SCRIPT:
214 		{
215 			if( GetImport().getImportFlags() & IMPORT_SCRIPTS )
216 			{
217 				// office:script inside office:document
218 				pContext = GetSdImport().CreateScriptContext( rLocalName );
219 			}
220 			break;
221 		}
222 		case XML_TOK_DOC_BODY:
223 		{
224 			if( GetImport().getImportFlags() & IMPORT_CONTENT )
225 			{
226 				// office:body inside office:document
227 				pContext = new SdXMLBodyContext_Impl(GetSdImport(),nPrefix,
228 													 rLocalName, xAttrList);
229 			}
230 			break;
231 		}
232 	}
233 
234 	// call parent when no own context was created
235 	if(!pContext)
236 		pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
237 
238 	return pContext;
239 }
240 
241 //////////////////////////////////////////////////////////////////////////////
242 
243 // context for flat file xml format
244 class SdXMLFlatDocContext_Impl
245     : public SdXMLDocContext_Impl, public SvXMLMetaDocumentContext
246 {
247 public:
248     SdXMLFlatDocContext_Impl( SdXMLImport& i_rImport,
249         sal_uInt16 i_nPrefix, const OUString & i_rLName,
250         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
251         const uno::Reference<document::XDocumentProperties>& i_xDocProps,
252         const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder);
253 
254     virtual ~SdXMLFlatDocContext_Impl();
255 
256     virtual SvXMLImportContext *CreateChildContext(
257         sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
258         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList);
259 };
260 
SdXMLFlatDocContext_Impl(SdXMLImport & i_rImport,sal_uInt16 i_nPrefix,const OUString & i_rLName,const uno::Reference<xml::sax::XAttributeList> & i_xAttrList,const uno::Reference<document::XDocumentProperties> & i_xDocProps,const uno::Reference<xml::sax::XDocumentHandler> & i_xDocBuilder)261 SdXMLFlatDocContext_Impl::SdXMLFlatDocContext_Impl( SdXMLImport& i_rImport,
262         sal_uInt16 i_nPrefix, const OUString & i_rLName,
263         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
264         const uno::Reference<document::XDocumentProperties>& i_xDocProps,
265         const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder) :
266     SvXMLImportContext(i_rImport, i_nPrefix, i_rLName),
267     SdXMLDocContext_Impl(i_rImport, i_nPrefix, i_rLName, i_xAttrList),
268     SvXMLMetaDocumentContext(i_rImport, i_nPrefix, i_rLName,
269         i_xDocProps, i_xDocBuilder)
270 {
271 }
272 
~SdXMLFlatDocContext_Impl()273 SdXMLFlatDocContext_Impl::~SdXMLFlatDocContext_Impl() { }
274 
CreateChildContext(sal_uInt16 i_nPrefix,const OUString & i_rLocalName,const uno::Reference<xml::sax::XAttributeList> & i_xAttrList)275 SvXMLImportContext *SdXMLFlatDocContext_Impl::CreateChildContext(
276     sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
277     const uno::Reference<xml::sax::XAttributeList>& i_xAttrList)
278 {
279     // behave like meta base class iff we encounter office:meta
280     const SvXMLTokenMap& rTokenMap = GetSdImport().GetDocElemTokenMap();
281 	if ( XML_TOK_DOC_META == rTokenMap.Get( i_nPrefix, i_rLocalName ) ) {
282         return SvXMLMetaDocumentContext::CreateChildContext(
283                     i_nPrefix, i_rLocalName, i_xAttrList );
284     } else {
285         return SdXMLDocContext_Impl::CreateChildContext(
286                     i_nPrefix, i_rLocalName, i_xAttrList );
287     }
288 }
289 
290 //////////////////////////////////////////////////////////////////////////////
291 
292 #define SERVICE(classname,servicename,implementationname,draw,flags)\
293 uno::Sequence< OUString > SAL_CALL classname##_getSupportedServiceNames() throw()\
294 {\
295 	const OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( servicename ) );\
296 	const uno::Sequence< OUString > aSeq( &aServiceName, 1 );\
297 	return aSeq;\
298 }\
299 OUString SAL_CALL classname##_getImplementationName() throw()\
300 {\
301 	return OUString( RTL_CONSTASCII_USTRINGPARAM( implementationname ) );\
302 }\
303 uno::Reference< uno::XInterface > SAL_CALL classname##_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr) throw( uno::Exception )\
304 {\
305 	return (cppu::OWeakObject*)new SdXMLImport( rSMgr, draw, flags );\
306 }
307 
308 SERVICE( XMLImpressImportOasis, "com.sun.star.comp.Impress.XMLOasisImporter", "XMLImpressImportOasis", sal_False, IMPORT_ALL )
309 SERVICE( XMLDrawImportOasis, "com.sun.star.comp.Draw.XMLOasisImporter", "XMLDrawImportOasis", sal_True, IMPORT_ALL )
310 
311 SERVICE( XMLImpressStylesImportOasis, "com.sun.star.comp.Impress.XMLOasisStylesImporter", "XMLImpressStylesImportOasis", sal_False, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES )
312 SERVICE( XMLDrawStylesImportOasis, "com.sun.star.comp.Draw.XMLOasisStylesImporter", "XMLImpressStylesImportOasis", sal_True, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES )
313 
314 SERVICE( XMLImpressContentImportOasis, "com.sun.star.comp.Impress.XMLOasisContentImporter", "XMLImpressContentImportOasis", sal_False, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS )
315 SERVICE( XMLDrawContentImportOasis, "com.sun.star.comp.Draw.XMLOasisContentImporter", "XMLImpressContentImportOasis", sal_True, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS )
316 
317 SERVICE( XMLImpressMetaImportOasis, "com.sun.star.comp.Impress.XMLOasisMetaImporter", "XMLImpressMetaImportOasis", sal_False, IMPORT_META )
318 SERVICE( XMLDrawMetaImportOasis, "com.sun.star.comp.Draw.XMLOasisMetaImporter", "XMLImpressMetaImportOasis", sal_True, IMPORT_META )
319 
320 SERVICE( XMLImpressSettingsImportOasis, "com.sun.star.comp.Impress.XMLOasisSettingsImporter", "XMLImpressSettingsImportOasis", sal_False, IMPORT_SETTINGS )
321 SERVICE( XMLDrawSettingsImportOasis, "com.sun.star.comp.Draw.XMLOasisSettingsImporter", "XMLImpressSettingsImportOasis", sal_True, IMPORT_SETTINGS )
322 
323 //////////////////////////////////////////////////////////////////////////////
324 
325 // #110680#
SdXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,sal_Bool bIsDraw,sal_uInt16 nImportFlags)326 SdXMLImport::SdXMLImport(
327 	const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
328 	sal_Bool bIsDraw, sal_uInt16 nImportFlags )
329 :	SvXMLImport( xServiceFactory, nImportFlags ),
330 	mpMasterStylesContext(0L),
331 	mpDocElemTokenMap(0L),
332 	mpBodyElemTokenMap(0L),
333 	mpStylesElemTokenMap(0L),
334 	mpMasterPageElemTokenMap(0L),
335 	mpMasterPageAttrTokenMap(0L),
336 	mpPageMasterAttrTokenMap(0L),
337 	mpPageMasterStyleAttrTokenMap(0L),
338 	mpDrawPageAttrTokenMap(0L),
339 	mpDrawPageElemTokenMap(0L),
340 	mpPresentationPlaceholderAttrTokenMap(0L),
341 	mnStyleFamilyMask(0),
342 	mnNewPageCount(0L),
343 	mnNewMasterPageCount(0L),
344 	mbIsDraw(bIsDraw),
345 	mbLoadDoc(sal_True),
346 	mbPreview(sal_False),
347 	msPageLayouts( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ),
348 	msPreview( RTL_CONSTASCII_USTRINGPARAM( "Preview" ) )
349 {
350 	// add namespaces
351 	GetNamespaceMap().Add(
352 		GetXMLToken(XML_NP_PRESENTATION),
353         GetXMLToken(XML_N_PRESENTATION),
354 		XML_NAMESPACE_PRESENTATION);
355 
356 	GetNamespaceMap().Add(
357 		GetXMLToken(XML_NP_SMIL),
358         GetXMLToken(XML_N_SMIL_COMPAT),
359 		XML_NAMESPACE_SMIL);
360 
361 	GetNamespaceMap().Add(
362 		GetXMLToken(XML_NP_ANIMATION),
363         GetXMLToken(XML_N_ANIMATION),
364 		XML_NAMESPACE_ANIMATION);
365 }
366 
367 // XImporter
setTargetDocument(const uno::Reference<lang::XComponent> & xDoc)368 void SAL_CALL SdXMLImport::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
369 	throw(lang::IllegalArgumentException, uno::RuntimeException)
370 {
371 	SvXMLImport::setTargetDocument( xDoc );
372 
373 	uno::Reference< lang::XServiceInfo > xDocServices( GetModel(), uno::UNO_QUERY );
374 	if( !xDocServices.is() )
375 		throw lang::IllegalArgumentException();
376 
377 	mbIsDraw = !xDocServices->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) ) );
378 
379 	// prepare access to styles
380 	uno::Reference< style::XStyleFamiliesSupplier > xFamSup( GetModel(), uno::UNO_QUERY );
381 	if(xFamSup.is())
382 		mxDocStyleFamilies = xFamSup->getStyleFamilies();
383 
384 	// prepare access to master pages
385 	uno::Reference < drawing::XMasterPagesSupplier > xMasterPagesSupplier(GetModel(), uno::UNO_QUERY);
386 	if(xMasterPagesSupplier.is())
387 		mxDocMasterPages = mxDocMasterPages.query( xMasterPagesSupplier->getMasterPages() );
388 
389 	// prepare access to draw pages
390 	uno::Reference <drawing::XDrawPagesSupplier> xDrawPagesSupplier(GetModel(), uno::UNO_QUERY);
391 	if(!xDrawPagesSupplier.is())
392 		throw lang::IllegalArgumentException();
393 
394 	mxDocDrawPages = mxDocDrawPages.query( xDrawPagesSupplier->getDrawPages() );
395 	if(!mxDocDrawPages.is())
396 		throw lang::IllegalArgumentException();
397 
398 	if( mxDocDrawPages.is() && mxDocDrawPages->getCount() > 0 )
399 	{
400 		uno::Reference< form::XFormsSupplier > xFormsSupp;
401 		mxDocDrawPages->getByIndex(0) >>= xFormsSupp;
402 		mbIsFormsSupported = xFormsSupp.is();
403 	}
404 
405 	// #88546# enable progress bar increments, SdXMLImport is only used for
406 	// draw/impress import
407 	GetShapeImport()->enableHandleProgressBar();
408 
409 	uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY );
410 	if( xFac.is() )
411 	{
412 		uno::Sequence< OUString > sSNS( xFac->getAvailableServiceNames() );
413 		sal_Int32 n = sSNS.getLength();
414 		const OUString* pSNS( sSNS.getConstArray() );
415 		while( --n > 0 )
416 		{
417 			if( (*pSNS++).equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TableShape") ) )
418 			{
419 				mbIsTableShapeSupported = true;
420 				break;
421 			}
422 		}
423 	}
424 }
425 
426 // XInitialization
initialize(const uno::Sequence<uno::Any> & aArguments)427 void SAL_CALL SdXMLImport::initialize( const uno::Sequence< uno::Any >& aArguments )
428 	throw( uno::Exception, uno::RuntimeException)
429 {
430 	SvXMLImport::initialize( aArguments );
431 
432 	uno::Reference< beans::XPropertySet > xInfoSet( getImportInfo() );
433 	if( xInfoSet.is() )
434 	{
435 		uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
436 
437 		if( xInfoSetInfo->hasPropertyByName( msPageLayouts ) )
438 			xInfoSet->getPropertyValue( msPageLayouts ) >>= mxPageLayouts;
439 
440 		if( xInfoSetInfo->hasPropertyByName( msPreview ) )
441 			xInfoSet->getPropertyValue( msPreview ) >>= mbPreview;
442 
443         ::rtl::OUString const sOrganizerMode(
444             RTL_CONSTASCII_USTRINGPARAM("OrganizerMode"));
445         if (xInfoSetInfo->hasPropertyByName(sOrganizerMode))
446         {
447             sal_Bool bStyleOnly(sal_False);
448             if (xInfoSet->getPropertyValue(sOrganizerMode) >>= bStyleOnly)
449             {
450                 mbLoadDoc = !bStyleOnly;
451             }
452         }
453     }
454 }
455 
456 //////////////////////////////////////////////////////////////////////////////
457 
~SdXMLImport()458 SdXMLImport::~SdXMLImport() throw ()
459 {
460 // #80365# removed ending of progress bar here, this was an old implementation
461 // and maybe removed on demand
462 //	// stop progress view
463 //	if(mxStatusIndicator.is())
464 //	{
465 //		mxStatusIndicator->end();
466 //		mxStatusIndicator->reset();
467 //	}
468 
469 	// Styles or AutoStyles context?
470 	if(mpMasterStylesContext)
471 		mpMasterStylesContext->ReleaseRef();
472 
473 	// delete all token maps
474 	if(mpDocElemTokenMap)
475 		delete mpDocElemTokenMap;
476 	if(mpBodyElemTokenMap)
477 		delete mpBodyElemTokenMap;
478 	if(mpStylesElemTokenMap)
479 		delete mpStylesElemTokenMap;
480 	if(mpMasterPageElemTokenMap)
481 		delete mpMasterPageElemTokenMap;
482 	if(mpMasterPageAttrTokenMap)
483 		delete mpMasterPageAttrTokenMap;
484 	if(mpPageMasterAttrTokenMap)
485 		delete mpPageMasterAttrTokenMap;
486 	if(mpPageMasterStyleAttrTokenMap)
487 		delete mpPageMasterStyleAttrTokenMap;
488 	if(mpDrawPageAttrTokenMap)
489 		delete mpDrawPageAttrTokenMap;
490 	if(mpDrawPageElemTokenMap)
491 		delete mpDrawPageElemTokenMap;
492 	if(mpPresentationPlaceholderAttrTokenMap)
493 		delete mpPresentationPlaceholderAttrTokenMap;
494 }
495 
496 //////////////////////////////////////////////////////////////////////////////
497 
SetProgress(sal_Int32 nProg)498 void SdXMLImport::SetProgress(sal_Int32 nProg)
499 {
500 	// set progress view
501 	if(mxStatusIndicator.is())
502 		mxStatusIndicator->setValue(nProg);
503 }
504 
505 //////////////////////////////////////////////////////////////////////////////
506 
GetDocElemTokenMap()507 const SvXMLTokenMap& SdXMLImport::GetDocElemTokenMap()
508 {
509 	if(!mpDocElemTokenMap)
510     {
511         static __FAR_DATA SvXMLTokenMapEntry aDocElemTokenMap[] =
512 {
513 	{ XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS,	XML_TOK_DOC_FONTDECLS		},
514 	{ XML_NAMESPACE_OFFICE, XML_STYLES,			    XML_TOK_DOC_STYLES			},
515 	{ XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,	XML_TOK_DOC_AUTOSTYLES		},
516 	{ XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,		XML_TOK_DOC_MASTERSTYLES	},
517 	{ XML_NAMESPACE_OFFICE, XML_META, 				XML_TOK_DOC_META			},
518 	{ XML_NAMESPACE_OFFICE, XML_SCRIPTS,		    XML_TOK_DOC_SCRIPT			},
519 	{ XML_NAMESPACE_OFFICE, XML_BODY, 				XML_TOK_DOC_BODY			},
520 	{ XML_NAMESPACE_OFFICE, XML_SETTINGS,			XML_TOK_DOC_SETTINGS		},
521 	XML_TOKEN_MAP_END
522 };
523 
524 		mpDocElemTokenMap = new SvXMLTokenMap(aDocElemTokenMap);
525     } // if(!mpDocElemTokenMap)
526 
527 	return *mpDocElemTokenMap;
528 }
529 
530 //////////////////////////////////////////////////////////////////////////////
531 
GetBodyElemTokenMap()532 const SvXMLTokenMap& SdXMLImport::GetBodyElemTokenMap()
533 {
534 	if(!mpBodyElemTokenMap)
535     {
536         static __FAR_DATA SvXMLTokenMapEntry aBodyElemTokenMap[] =
537 {
538 	{ XML_NAMESPACE_DRAW,	XML_PAGE,				XML_TOK_BODY_PAGE	},
539 	{ XML_NAMESPACE_PRESENTATION, XML_SETTINGS, 	XML_TOK_BODY_SETTINGS	},
540 	{ XML_NAMESPACE_PRESENTATION, XML_HEADER_DECL, 	XML_TOK_BODY_HEADER_DECL	},
541 	{ XML_NAMESPACE_PRESENTATION, XML_FOOTER_DECL, 	XML_TOK_BODY_FOOTER_DECL	},
542 	{ XML_NAMESPACE_PRESENTATION, XML_DATE_TIME_DECL,XML_TOK_BODY_DATE_TIME_DECL	},
543 
544 	XML_TOKEN_MAP_END
545 };
546 
547 		mpBodyElemTokenMap = new SvXMLTokenMap(aBodyElemTokenMap);
548     } // if(!mpBodyElemTokenMap)
549 
550 	return *mpBodyElemTokenMap;
551 }
552 
553 //////////////////////////////////////////////////////////////////////////////
554 
GetStylesElemTokenMap()555 const SvXMLTokenMap& SdXMLImport::GetStylesElemTokenMap()
556 {
557 	if(!mpStylesElemTokenMap)
558     {
559         static __FAR_DATA SvXMLTokenMapEntry aStylesElemTokenMap[] =
560 {
561 	{ XML_NAMESPACE_STYLE,	XML_PAGE_LAYOUT,				XML_TOK_STYLES_PAGE_MASTER				},
562 	{ XML_NAMESPACE_STYLE,	XML_PRESENTATION_PAGE_LAYOUT,	XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT	},
563 	{ XML_NAMESPACE_STYLE,	XML_STYLE,						XML_TOK_STYLES_STYLE	},
564 	XML_TOKEN_MAP_END
565 };
566 
567 		mpStylesElemTokenMap = new SvXMLTokenMap(aStylesElemTokenMap);
568     } // if(!mpStylesElemTokenMap)
569 
570 	return *mpStylesElemTokenMap;
571 }
572 
573 //////////////////////////////////////////////////////////////////////////////
574 
GetMasterPageElemTokenMap()575 const SvXMLTokenMap& SdXMLImport::GetMasterPageElemTokenMap()
576 {
577 	if(!mpMasterPageElemTokenMap)
578     {
579         static __FAR_DATA SvXMLTokenMapEntry aMasterPageElemTokenMap[] =
580 {
581 	{ XML_NAMESPACE_STYLE,			XML_STYLE,		XML_TOK_MASTERPAGE_STYLE	},
582 	{ XML_NAMESPACE_PRESENTATION,	XML_NOTES,		XML_TOK_MASTERPAGE_NOTES	},
583 	XML_TOKEN_MAP_END
584 };
585 
586 		mpMasterPageElemTokenMap = new SvXMLTokenMap(aMasterPageElemTokenMap);
587     } // if(!mpMasterPageElemTokenMap)
588 
589 	return *mpMasterPageElemTokenMap;
590 }
591 
592 //////////////////////////////////////////////////////////////////////////////
593 
GetMasterPageAttrTokenMap()594 const SvXMLTokenMap& SdXMLImport::GetMasterPageAttrTokenMap()
595 {
596 	if(!mpMasterPageAttrTokenMap)
597     {
598         static __FAR_DATA SvXMLTokenMapEntry aMasterPageAttrTokenMap[] =
599 {
600 	{ XML_NAMESPACE_STYLE,	XML_NAME,						XML_TOK_MASTERPAGE_NAME	},
601 	{ XML_NAMESPACE_STYLE,	XML_DISPLAY_NAME,				XML_TOK_MASTERPAGE_DISPLAY_NAME	},
602 	{ XML_NAMESPACE_STYLE,	XML_PAGE_LAYOUT_NAME,			XML_TOK_MASTERPAGE_PAGE_MASTER_NAME	},
603 	{ XML_NAMESPACE_DRAW,	XML_STYLE_NAME, 				XML_TOK_MASTERPAGE_STYLE_NAME		},
604 	{ XML_NAMESPACE_PRESENTATION,	XML_PRESENTATION_PAGE_LAYOUT_NAME,	XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME },
605 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_HEADER_NAME,				XML_TOK_MASTERPAGE_USE_HEADER_NAME	},
606 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_FOOTER_NAME,				XML_TOK_MASTERPAGE_USE_FOOTER_NAME	},
607 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_DATE_TIME_NAME,				XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME	},
608 	XML_TOKEN_MAP_END
609 };
610 
611 		mpMasterPageAttrTokenMap = new SvXMLTokenMap(aMasterPageAttrTokenMap);
612     } // if(!mpMasterPageAttrTokenMap)
613 
614 	return *mpMasterPageAttrTokenMap;
615 }
616 
617 //////////////////////////////////////////////////////////////////////////////
618 
GetPageMasterAttrTokenMap()619 const SvXMLTokenMap& SdXMLImport::GetPageMasterAttrTokenMap()
620 {
621 	if(!mpPageMasterAttrTokenMap)
622     {
623         static __FAR_DATA SvXMLTokenMapEntry aPageMasterAttrTokenMap[] =
624 {
625 	{ XML_NAMESPACE_STYLE,			XML_NAME,				XML_TOK_PAGEMASTER_NAME					},
626 	XML_TOKEN_MAP_END
627 };
628 
629 		mpPageMasterAttrTokenMap = new SvXMLTokenMap(aPageMasterAttrTokenMap);
630     } // if(!mpPageMasterAttrTokenMap)
631 
632 	return *mpPageMasterAttrTokenMap;
633 }
634 
635 //////////////////////////////////////////////////////////////////////////////
636 
GetPageMasterStyleAttrTokenMap()637 const SvXMLTokenMap& SdXMLImport::GetPageMasterStyleAttrTokenMap()
638 {
639 	if(!mpPageMasterStyleAttrTokenMap)
640     {
641         static __FAR_DATA SvXMLTokenMapEntry aPageMasterStyleAttrTokenMap[] =
642 {
643 	{ XML_NAMESPACE_FO,				XML_MARGIN_TOP,		    XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP			},
644 	{ XML_NAMESPACE_FO,				XML_MARGIN_BOTTOM,		XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM		},
645 	{ XML_NAMESPACE_FO,				XML_MARGIN_LEFT,		XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT			},
646 	{ XML_NAMESPACE_FO,				XML_MARGIN_RIGHT,		XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT		},
647 	{ XML_NAMESPACE_FO,				XML_PAGE_WIDTH,	    	XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH			},
648 	{ XML_NAMESPACE_FO,				XML_PAGE_HEIGHT,		XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT			},
649 	{ XML_NAMESPACE_STYLE,			XML_PRINT_ORIENTATION,	XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION	},
650 	XML_TOKEN_MAP_END
651 };
652 
653 		mpPageMasterStyleAttrTokenMap = new SvXMLTokenMap(aPageMasterStyleAttrTokenMap);
654     } // if(!mpPageMasterStyleAttrTokenMap)
655 
656 	return *mpPageMasterStyleAttrTokenMap;
657 }
658 
659 //////////////////////////////////////////////////////////////////////////////
660 
GetDrawPageAttrTokenMap()661 const SvXMLTokenMap& SdXMLImport::GetDrawPageAttrTokenMap()
662 {
663 	if(!mpDrawPageAttrTokenMap)
664     {
665         static __FAR_DATA SvXMLTokenMapEntry aDrawPageAttrTokenMap[] =
666 {
667 	{ XML_NAMESPACE_DRAW,			XML_NAME,							XML_TOK_DRAWPAGE_NAME				},
668 	{ XML_NAMESPACE_DRAW,			XML_STYLE_NAME, 					XML_TOK_DRAWPAGE_STYLE_NAME			},
669 	{ XML_NAMESPACE_DRAW,			XML_MASTER_PAGE_NAME,				XML_TOK_DRAWPAGE_MASTER_PAGE_NAME	},
670 	{ XML_NAMESPACE_PRESENTATION,	XML_PRESENTATION_PAGE_LAYOUT_NAME,	XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME	},
671     { XML_NAMESPACE_DRAW,           XML_ID,                             XML_TOK_DRAWPAGE_DRAWID                 },
672     { XML_NAMESPACE_XML,            XML_ID,                             XML_TOK_DRAWPAGE_XMLID                  },
673 	{ XML_NAMESPACE_XLINK,			XML_HREF,							XML_TOK_DRAWPAGE_HREF				},
674 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_HEADER_NAME,				XML_TOK_DRAWPAGE_USE_HEADER_NAME	},
675 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_FOOTER_NAME,				XML_TOK_DRAWPAGE_USE_FOOTER_NAME	},
676 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_DATE_TIME_NAME,				XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME	},
677 
678 	XML_TOKEN_MAP_END
679 };
680 
681 		mpDrawPageAttrTokenMap = new SvXMLTokenMap(aDrawPageAttrTokenMap);
682     } // if(!mpDrawPageAttrTokenMap)
683 
684 	return *mpDrawPageAttrTokenMap;
685 }
686 
687 //////////////////////////////////////////////////////////////////////////////
688 
GetDrawPageElemTokenMap()689 const SvXMLTokenMap& SdXMLImport::GetDrawPageElemTokenMap()
690 {
691 	if(!mpDrawPageElemTokenMap)
692     {
693         static __FAR_DATA SvXMLTokenMapEntry aDrawPageElemTokenMap[] =
694 {
695 	{ XML_NAMESPACE_PRESENTATION,	XML_NOTES,				XML_TOK_DRAWPAGE_NOTES		},
696 	{ XML_NAMESPACE_ANIMATION,		XML_PAR,				XML_TOK_DRAWPAGE_PAR		},
697 	{ XML_NAMESPACE_ANIMATION,		XML_SEQ,				XML_TOK_DRAWPAGE_SEQ		},
698 	XML_TOKEN_MAP_END
699 };
700 
701 		mpDrawPageElemTokenMap = new SvXMLTokenMap(aDrawPageElemTokenMap);
702     } // if(!mpDrawPageElemTokenMap)
703 
704 	return *mpDrawPageElemTokenMap;
705 }
706 
707 //////////////////////////////////////////////////////////////////////////////
708 
GetPresentationPlaceholderAttrTokenMap()709 const SvXMLTokenMap& SdXMLImport::GetPresentationPlaceholderAttrTokenMap()
710 {
711 	if(!mpPresentationPlaceholderAttrTokenMap)
712     {
713         static __FAR_DATA SvXMLTokenMapEntry aPresentationPlaceholderAttrTokenMap[] =
714 {
715 	{ XML_NAMESPACE_PRESENTATION,	XML_OBJECT, 	XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME	},
716 	{ XML_NAMESPACE_SVG,			XML_X,			XML_TOK_PRESENTATIONPLACEHOLDER_X			},
717 	{ XML_NAMESPACE_SVG,			XML_Y,			XML_TOK_PRESENTATIONPLACEHOLDER_Y			},
718 	{ XML_NAMESPACE_SVG,			XML_WIDTH,		XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH		},
719 	{ XML_NAMESPACE_SVG,			XML_HEIGHT, 	XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT		},
720 	XML_TOKEN_MAP_END
721 };
722 
723 		mpPresentationPlaceholderAttrTokenMap = new SvXMLTokenMap(aPresentationPlaceholderAttrTokenMap);
724     } // if(!mpPresentationPlaceholderAttrTokenMap)
725 
726 	return *mpPresentationPlaceholderAttrTokenMap;
727 }
728 
729 //////////////////////////////////////////////////////////////////////////////
730 
CreateContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)731 SvXMLImportContext *SdXMLImport::CreateContext(sal_uInt16 nPrefix,
732 	const OUString& rLocalName,
733 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
734 {
735 	SvXMLImportContext* pContext = 0;
736 
737 	if(XML_NAMESPACE_OFFICE == nPrefix &&
738 		( IsXMLToken( rLocalName, XML_DOCUMENT_STYLES ) ||
739 		  IsXMLToken( rLocalName, XML_DOCUMENT_CONTENT ) ||
740 		  IsXMLToken( rLocalName, XML_DOCUMENT_SETTINGS )   ))
741 	{
742 		 pContext = new SdXMLDocContext_Impl(*this, nPrefix, rLocalName, xAttrList);
743 	} else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
744 		        ( IsXMLToken(rLocalName, XML_DOCUMENT_META)) ) {
745         pContext = CreateMetaContext(rLocalName, xAttrList);
746     } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
747 		        ( IsXMLToken(rLocalName, XML_DOCUMENT)) ) {
748         uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
749             mxServiceFactory->createInstance(::rtl::OUString::createFromAscii(
750                 "com.sun.star.xml.dom.SAXDocumentBuilder")),
751                 uno::UNO_QUERY_THROW);
752         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
753             GetModel(), uno::UNO_QUERY_THROW);
754         // flat OpenDocument file format
755         pContext = new SdXMLFlatDocContext_Impl( *this, nPrefix, rLocalName,
756                         xAttrList, xDPS->getDocumentProperties(), xDocBuilder);
757     } else {
758 		pContext = SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList);
759 	}
760 
761 	return pContext;
762 }
763 
764 //////////////////////////////////////////////////////////////////////////////
765 
CreateMetaContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)766 SvXMLImportContext *SdXMLImport::CreateMetaContext(const OUString& rLocalName,
767 	const uno::Reference<xml::sax::XAttributeList>&)
768 {
769 	SvXMLImportContext* pContext = 0L;
770 
771     if (getImportFlags() & IMPORT_META)
772     {
773         uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
774             mxServiceFactory->createInstance(::rtl::OUString::createFromAscii(
775                 "com.sun.star.xml.dom.SAXDocumentBuilder")),
776                 uno::UNO_QUERY_THROW);
777         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
778             GetModel(), uno::UNO_QUERY_THROW);
779         uno::Reference<document::XDocumentProperties> const xDocProps(
780             (IsStylesOnlyMode()) ? 0 : xDPS->getDocumentProperties());
781         pContext = new SvXMLMetaDocumentContext(*this,
782                         XML_NAMESPACE_OFFICE, rLocalName,
783                         xDocProps, xDocBuilder);
784 	}
785 
786 	if(!pContext)
787 	{
788 		pContext = new SvXMLImportContext(*this, XML_NAMESPACE_OFFICE, rLocalName);
789 	}
790 
791 	return pContext;
792 }
793 
794 //////////////////////////////////////////////////////////////////////////////
795 
CreateBodyContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)796 SvXMLImportContext *SdXMLImport::CreateBodyContext(const OUString& rLocalName,
797 	const uno::Reference<xml::sax::XAttributeList>&)
798 {
799 	SvXMLImportContext *pContext = 0;
800 	pContext = new SdXMLBodyContext(*this, XML_NAMESPACE_OFFICE, rLocalName);
801 	return pContext;
802 }
803 
804 //////////////////////////////////////////////////////////////////////////////
805 
CreateStylesContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)806 SvXMLStylesContext *SdXMLImport::CreateStylesContext(const OUString& rLocalName,
807 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
808 {
809 	if(GetShapeImport()->GetStylesContext())
810 		return GetShapeImport()->GetStylesContext();
811 
812 	GetShapeImport()->SetStylesContext(new SdXMLStylesContext(
813 		*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_False));
814 
815 	return GetShapeImport()->GetStylesContext();
816 }
817 
818 //////////////////////////////////////////////////////////////////////////////
819 
CreateAutoStylesContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)820 SvXMLStylesContext *SdXMLImport::CreateAutoStylesContext(const OUString& rLocalName,
821 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
822 {
823 	if(GetShapeImport()->GetAutoStylesContext())
824 		return GetShapeImport()->GetAutoStylesContext();
825 
826 	GetShapeImport()->SetAutoStylesContext(new SdXMLStylesContext(
827 		*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_True));
828 
829 	return GetShapeImport()->GetAutoStylesContext();
830 }
831 
832 //////////////////////////////////////////////////////////////////////////////
833 
CreateMasterStylesContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)834 SvXMLImportContext* SdXMLImport::CreateMasterStylesContext(const OUString& rLocalName,
835 	const uno::Reference<xml::sax::XAttributeList>&)
836 {
837 	if(mpMasterStylesContext)
838 		return mpMasterStylesContext;
839 
840 	mpMasterStylesContext = new SdXMLMasterStylesContext(
841 		*this, XML_NAMESPACE_OFFICE, rLocalName);
842 	mpMasterStylesContext->AddRef();
843 
844 	return mpMasterStylesContext;
845 }
846 
847 //////////////////////////////////////////////////////////////////////////////
848 
CreateFontDeclsContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)849 SvXMLImportContext *SdXMLImport::CreateFontDeclsContext(const OUString& rLocalName,
850 	const uno::Reference< xml::sax::XAttributeList > & xAttrList )
851 {
852 	XMLFontStylesContext *pFSContext =
853 			new XMLFontStylesContext( *this, XML_NAMESPACE_OFFICE,
854 									  rLocalName, xAttrList,
855 									  gsl_getSystemTextEncoding() );
856 	SetFontDecls( pFSContext );
857 	return pFSContext;
858 }
859 
860 //////////////////////////////////////////////////////////////////////////////
861 // import pool defaults. Parameter contains pool defaults read
862 // from input data. These data needs to be set at the model.
863 //
ImportPoolDefaults(const XMLPropStyleContext *)864 void SdXMLImport::ImportPoolDefaults(const XMLPropStyleContext*)
865 {
866 }
867 
868 //////////////////////////////////////////////////////////////////////////////
869 
CreateScriptContext(const OUString & rLocalName)870 SvXMLImportContext *SdXMLImport::CreateScriptContext(
871 									   const OUString& rLocalName )
872 {
873 	SvXMLImportContext *pContext = 0;
874 
875 	pContext = new XMLScriptContext( *this,
876 									XML_NAMESPACE_OFFICE, rLocalName,
877 									GetModel() );
878 	return pContext;
879 }
880 
881 //////////////////////////////////////////////////////////////////////////////
882 
SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & aViewProps)883 void SdXMLImport::SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps)
884 {
885 	uno::Reference< beans::XPropertySet > xPropSet( GetModel(), uno::UNO_QUERY );
886 	if( !xPropSet.is() )
887 		return;
888 
889 	awt::Rectangle aVisArea( 0,0, 28000, 21000 );
890 	sal_Int32 nCount = aViewProps.getLength();
891 
892 	const beans::PropertyValue* pValues = aViewProps.getConstArray();
893 
894 	while( nCount-- )
895 	{
896 		const OUString& rName = pValues->Name;
897 		const uno::Any rValue = pValues->Value;
898 
899 		if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaTop") ) )
900 		{
901 			rValue >>= aVisArea.Y;
902 		}
903 		else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaLeft") ) )
904 		{
905 			rValue >>= aVisArea.X;
906 		}
907 		else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaWidth") ) )
908 		{
909 			rValue >>= aVisArea.Width;
910 		}
911 		else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaHeight") ) )
912 		{
913 			rValue >>= aVisArea.Height;
914 		}
915 
916 		pValues++;
917 	}
918 
919 	try
920 	{
921 		xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ), uno::makeAny( aVisArea )  );
922 	}
923 	catch( com::sun::star::uno::Exception /*e*/ )
924 	{
925 /* #i79978# since old documents may contain invalid view settings, this is nothing to worry the user about.
926 		uno::Sequence<OUString> aSeq(0);
927         SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
928 */
929 	}
930 }
931 
SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & aConfigProps)932 void SdXMLImport::SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps)
933 {
934 	uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY );
935 	if( !xFac.is() )
936 		return;
937 
938 	uno::Reference< beans::XPropertySet > xProps( xFac->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ), uno::UNO_QUERY );
939 	if( !xProps.is() )
940 		return;
941 
942 	uno::Reference< beans::XPropertySetInfo > xInfo( xProps->getPropertySetInfo() );
943 	if( !xInfo.is() )
944 		return;
945 
946 	sal_Int32 nCount = aConfigProps.getLength();
947 	const beans::PropertyValue* pValues = aConfigProps.getConstArray();
948 
949 	while( nCount-- )
950 	{
951 		try
952 		{
953 			const OUString& rProperty = pValues->Name;
954 			if( xInfo->hasPropertyByName( rProperty ) )
955 				xProps->setPropertyValue( rProperty, pValues->Value );
956 		}
957 		catch( uno::Exception& e )
958 		{
959 			(void)e;
960 			OSL_TRACE( "#SdXMLImport::SetConfigurationSettings: Exception!" );
961 		}
962 
963 		pValues++;
964 	}
965 }
966 
967 // #80365# overload this method to read and use the hint value from the
968 // written meta information. If no info is found, guess 10 draw objects
969 //void SdXMLImport::SetStatisticAttributes(const uno::Reference<xml::sax::XAttributeList>& xAttrList)
SetStatistics(const uno::Sequence<beans::NamedValue> & i_rStats)970 void SdXMLImport::SetStatistics(
971         const uno::Sequence<beans::NamedValue> & i_rStats)
972 {
973     static const char* s_stats[] =
974         { "ObjectCount", 0 };
975 
976     SvXMLImport::SetStatistics(i_rStats);
977 
978     sal_uInt32 nCount(10);
979     for (sal_Int32 i = 0; i < i_rStats.getLength(); ++i) {
980         for (const char** pStat = s_stats; *pStat != 0; ++pStat) {
981             if (i_rStats[i].Name.equalsAscii(*pStat)) {
982                 sal_Int32 val = 0;
983                 if (i_rStats[i].Value >>= val) {
984                     nCount = val;
985                 } else {
986                     DBG_ERROR("SdXMLImport::SetStatistics: invalid entry");
987                 }
988             }
989         }
990     }
991 
992 	if(nCount)
993 	{
994 		GetProgressBarHelper()->SetReference(nCount);
995 		GetProgressBarHelper()->SetValue(0);
996 	}
997 }
998 
999 
1000 // XServiceInfo
getImplementationName()1001 OUString SAL_CALL SdXMLImport::getImplementationName() throw( uno::RuntimeException )
1002 {
1003     if( IsDraw())
1004     {
1005         // Draw
1006 
1007         switch( getImportFlags())
1008         {
1009             case IMPORT_ALL:
1010                 return XMLDrawImportOasis_getImplementationName();
1011             case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES):
1012                 return XMLDrawStylesImportOasis_getImplementationName();
1013             case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
1014                 return XMLDrawContentImportOasis_getImplementationName();
1015             case IMPORT_META:
1016                 return XMLDrawMetaImportOasis_getImplementationName();
1017             case IMPORT_SETTINGS:
1018                 return XMLDrawSettingsImportOasis_getImplementationName();
1019             default:
1020                 return XMLDrawImportOasis_getImplementationName();
1021         }
1022     }
1023     else
1024     {
1025         // Impress
1026 
1027         switch( getImportFlags())
1028         {
1029             case IMPORT_ALL:
1030                 return XMLImpressImportOasis_getImplementationName();
1031             case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES):
1032                 return XMLImpressStylesImportOasis_getImplementationName();
1033             case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
1034                 return XMLImpressContentImportOasis_getImplementationName();
1035             case IMPORT_META:
1036                 return XMLImpressMetaImportOasis_getImplementationName();
1037             case IMPORT_SETTINGS:
1038                 return XMLImpressSettingsImportOasis_getImplementationName();
1039             default:
1040                 return XMLImpressImportOasis_getImplementationName();
1041         }
1042     }
1043 }
1044 
1045 	HeaderFooterDeclMap			maHeaderDeclsMap;
1046 	HeaderFooterDeclMap			maFooterDeclsMap;
1047 	DateTimeDeclMap				maDateTimeDeclsMap;
1048 
AddHeaderDecl(const::rtl::OUString & rName,const::rtl::OUString & rText)1049 void SdXMLImport::AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText )
1050 {
1051 	if( rName.getLength() && rText.getLength() )
1052 		maHeaderDeclsMap[rName] = rText;
1053 }
1054 
AddFooterDecl(const::rtl::OUString & rName,const::rtl::OUString & rText)1055 void SdXMLImport::AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText )
1056 {
1057 	if( rName.getLength() && rText.getLength() )
1058 		maFooterDeclsMap[rName] = rText;
1059 }
1060 
AddDateTimeDecl(const::rtl::OUString & rName,const::rtl::OUString & rText,sal_Bool bFixed,const::rtl::OUString & rDateTimeFormat)1061 void SdXMLImport::AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat )
1062 {
1063 	if( rName.getLength() && (rText.getLength() || !bFixed) )
1064 	{
1065 		DateTimeDeclContextImpl aDecl;
1066 		aDecl.maStrText = rText;
1067 		aDecl.mbFixed = bFixed;
1068 		aDecl.maStrDateTimeFormat = rDateTimeFormat;
1069 		maDateTimeDeclsMap[rName] = aDecl;
1070 	}
1071 }
1072 
GetHeaderDecl(const::rtl::OUString & rName) const1073 ::rtl::OUString SdXMLImport::GetHeaderDecl( const ::rtl::OUString& rName ) const
1074 {
1075 	::rtl::OUString aRet;
1076 	HeaderFooterDeclMap::const_iterator aIter( maHeaderDeclsMap.find( rName ) );
1077 	if( aIter != maHeaderDeclsMap.end() )
1078 		aRet = (*aIter).second;
1079 
1080 	return aRet;
1081 }
1082 
GetFooterDecl(const::rtl::OUString & rName) const1083 ::rtl::OUString SdXMLImport::GetFooterDecl( const ::rtl::OUString& rName ) const
1084 {
1085 	::rtl::OUString aRet;
1086 	HeaderFooterDeclMap::const_iterator aIter( maFooterDeclsMap.find( rName ) );
1087 	if( aIter != maFooterDeclsMap.end() )
1088 		aRet = (*aIter).second;
1089 
1090 	return aRet;
1091 }
1092 
GetDateTimeDecl(const::rtl::OUString & rName,sal_Bool & rbFixed,::rtl::OUString & rDateTimeFormat)1093 ::rtl::OUString SdXMLImport::GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat )
1094 {
1095 	DateTimeDeclContextImpl aDecl;
1096 
1097 	DateTimeDeclMap::const_iterator aIter( maDateTimeDeclsMap.find( rName ) );
1098 	if( aIter != maDateTimeDeclsMap.end() )
1099 		aDecl = (*aIter).second;
1100 
1101 	rbFixed = aDecl.mbFixed;
1102 	rDateTimeFormat = aDecl.maStrDateTimeFormat;
1103 	return aDecl.maStrText;
1104 }
1105 
1106 // eof
1107