xref: /trunk/main/xmloff/source/draw/sdxmlimp.cxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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)\
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 {
370     SvXMLImport::setTargetDocument( xDoc );
371 
372     uno::Reference< lang::XServiceInfo > xDocServices( GetModel(), uno::UNO_QUERY );
373     if( !xDocServices.is() )
374         throw lang::IllegalArgumentException();
375 
376     mbIsDraw = !xDocServices->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) ) );
377 
378     // prepare access to styles
379     uno::Reference< style::XStyleFamiliesSupplier > xFamSup( GetModel(), uno::UNO_QUERY );
380     if(xFamSup.is())
381         mxDocStyleFamilies = xFamSup->getStyleFamilies();
382 
383     // prepare access to master pages
384     uno::Reference < drawing::XMasterPagesSupplier > xMasterPagesSupplier(GetModel(), uno::UNO_QUERY);
385     if(xMasterPagesSupplier.is())
386         mxDocMasterPages = mxDocMasterPages.query( xMasterPagesSupplier->getMasterPages() );
387 
388     // prepare access to draw pages
389     uno::Reference <drawing::XDrawPagesSupplier> xDrawPagesSupplier(GetModel(), uno::UNO_QUERY);
390     if(!xDrawPagesSupplier.is())
391         throw lang::IllegalArgumentException();
392 
393     mxDocDrawPages = mxDocDrawPages.query( xDrawPagesSupplier->getDrawPages() );
394     if(!mxDocDrawPages.is())
395         throw lang::IllegalArgumentException();
396 
397     if( mxDocDrawPages.is() && mxDocDrawPages->getCount() > 0 )
398     {
399         uno::Reference< form::XFormsSupplier > xFormsSupp;
400         mxDocDrawPages->getByIndex(0) >>= xFormsSupp;
401         mbIsFormsSupported = xFormsSupp.is();
402     }
403 
404     // #88546# enable progress bar increments, SdXMLImport is only used for
405     // draw/impress import
406     GetShapeImport()->enableHandleProgressBar();
407 
408     uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY );
409     if( xFac.is() )
410     {
411         uno::Sequence< OUString > sSNS( xFac->getAvailableServiceNames() );
412         sal_Int32 n = sSNS.getLength();
413         const OUString* pSNS( sSNS.getConstArray() );
414         while( --n > 0 )
415         {
416             if( (*pSNS++).equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TableShape") ) )
417             {
418                 mbIsTableShapeSupported = true;
419                 break;
420             }
421         }
422     }
423 }
424 
425 // XInitialization
initialize(const uno::Sequence<uno::Any> & aArguments)426 void SAL_CALL SdXMLImport::initialize( const uno::Sequence< uno::Any >& aArguments )
427 {
428     SvXMLImport::initialize( aArguments );
429 
430     uno::Reference< beans::XPropertySet > xInfoSet( getImportInfo() );
431     if( xInfoSet.is() )
432     {
433         uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
434 
435         if( xInfoSetInfo->hasPropertyByName( msPageLayouts ) )
436             xInfoSet->getPropertyValue( msPageLayouts ) >>= mxPageLayouts;
437 
438         if( xInfoSetInfo->hasPropertyByName( msPreview ) )
439             xInfoSet->getPropertyValue( msPreview ) >>= mbPreview;
440 
441         ::rtl::OUString const sOrganizerMode(
442             RTL_CONSTASCII_USTRINGPARAM("OrganizerMode"));
443         if (xInfoSetInfo->hasPropertyByName(sOrganizerMode))
444         {
445             sal_Bool bStyleOnly(sal_False);
446             if (xInfoSet->getPropertyValue(sOrganizerMode) >>= bStyleOnly)
447             {
448                 mbLoadDoc = !bStyleOnly;
449             }
450         }
451     }
452 }
453 
454 //////////////////////////////////////////////////////////////////////////////
455 
~SdXMLImport()456 SdXMLImport::~SdXMLImport() throw ()
457 {
458 // #80365# removed ending of progress bar here, this was an old implementation
459 // and maybe removed on demand
460 //  // stop progress view
461 //  if(mxStatusIndicator.is())
462 //  {
463 //      mxStatusIndicator->end();
464 //      mxStatusIndicator->reset();
465 //  }
466 
467     // Styles or AutoStyles context?
468     if(mpMasterStylesContext)
469         mpMasterStylesContext->ReleaseRef();
470 
471     // delete all token maps
472     if(mpDocElemTokenMap)
473         delete mpDocElemTokenMap;
474     if(mpBodyElemTokenMap)
475         delete mpBodyElemTokenMap;
476     if(mpStylesElemTokenMap)
477         delete mpStylesElemTokenMap;
478     if(mpMasterPageElemTokenMap)
479         delete mpMasterPageElemTokenMap;
480     if(mpMasterPageAttrTokenMap)
481         delete mpMasterPageAttrTokenMap;
482     if(mpPageMasterAttrTokenMap)
483         delete mpPageMasterAttrTokenMap;
484     if(mpPageMasterStyleAttrTokenMap)
485         delete mpPageMasterStyleAttrTokenMap;
486     if(mpDrawPageAttrTokenMap)
487         delete mpDrawPageAttrTokenMap;
488     if(mpDrawPageElemTokenMap)
489         delete mpDrawPageElemTokenMap;
490     if(mpPresentationPlaceholderAttrTokenMap)
491         delete mpPresentationPlaceholderAttrTokenMap;
492 }
493 
494 //////////////////////////////////////////////////////////////////////////////
495 
SetProgress(sal_Int32 nProg)496 void SdXMLImport::SetProgress(sal_Int32 nProg)
497 {
498     // set progress view
499     if(mxStatusIndicator.is())
500         mxStatusIndicator->setValue(nProg);
501 }
502 
503 //////////////////////////////////////////////////////////////////////////////
504 
GetDocElemTokenMap()505 const SvXMLTokenMap& SdXMLImport::GetDocElemTokenMap()
506 {
507     if(!mpDocElemTokenMap)
508     {
509         static __FAR_DATA SvXMLTokenMapEntry aDocElemTokenMap[] =
510 {
511     { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS,    XML_TOK_DOC_FONTDECLS       },
512     { XML_NAMESPACE_OFFICE, XML_STYLES,             XML_TOK_DOC_STYLES          },
513     { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES      },
514     { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,      XML_TOK_DOC_MASTERSTYLES    },
515     { XML_NAMESPACE_OFFICE, XML_META,               XML_TOK_DOC_META            },
516     { XML_NAMESPACE_OFFICE, XML_SCRIPTS,            XML_TOK_DOC_SCRIPT          },
517     { XML_NAMESPACE_OFFICE, XML_BODY,               XML_TOK_DOC_BODY            },
518     { XML_NAMESPACE_OFFICE, XML_SETTINGS,           XML_TOK_DOC_SETTINGS        },
519     XML_TOKEN_MAP_END
520 };
521 
522         mpDocElemTokenMap = new SvXMLTokenMap(aDocElemTokenMap);
523     } // if(!mpDocElemTokenMap)
524 
525     return *mpDocElemTokenMap;
526 }
527 
528 //////////////////////////////////////////////////////////////////////////////
529 
GetBodyElemTokenMap()530 const SvXMLTokenMap& SdXMLImport::GetBodyElemTokenMap()
531 {
532     if(!mpBodyElemTokenMap)
533     {
534         static __FAR_DATA SvXMLTokenMapEntry aBodyElemTokenMap[] =
535 {
536     { XML_NAMESPACE_DRAW,   XML_PAGE,               XML_TOK_BODY_PAGE   },
537     { XML_NAMESPACE_PRESENTATION, XML_SETTINGS,     XML_TOK_BODY_SETTINGS   },
538     { XML_NAMESPACE_PRESENTATION, XML_HEADER_DECL,  XML_TOK_BODY_HEADER_DECL    },
539     { XML_NAMESPACE_PRESENTATION, XML_FOOTER_DECL,  XML_TOK_BODY_FOOTER_DECL    },
540     { XML_NAMESPACE_PRESENTATION, XML_DATE_TIME_DECL,XML_TOK_BODY_DATE_TIME_DECL    },
541 
542     XML_TOKEN_MAP_END
543 };
544 
545         mpBodyElemTokenMap = new SvXMLTokenMap(aBodyElemTokenMap);
546     } // if(!mpBodyElemTokenMap)
547 
548     return *mpBodyElemTokenMap;
549 }
550 
551 //////////////////////////////////////////////////////////////////////////////
552 
GetStylesElemTokenMap()553 const SvXMLTokenMap& SdXMLImport::GetStylesElemTokenMap()
554 {
555     if(!mpStylesElemTokenMap)
556     {
557         static __FAR_DATA SvXMLTokenMapEntry aStylesElemTokenMap[] =
558 {
559     { XML_NAMESPACE_STYLE,  XML_PAGE_LAYOUT,                XML_TOK_STYLES_PAGE_MASTER              },
560     { XML_NAMESPACE_STYLE,  XML_PRESENTATION_PAGE_LAYOUT,   XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT },
561     { XML_NAMESPACE_STYLE,  XML_STYLE,                      XML_TOK_STYLES_STYLE    },
562     XML_TOKEN_MAP_END
563 };
564 
565         mpStylesElemTokenMap = new SvXMLTokenMap(aStylesElemTokenMap);
566     } // if(!mpStylesElemTokenMap)
567 
568     return *mpStylesElemTokenMap;
569 }
570 
571 //////////////////////////////////////////////////////////////////////////////
572 
GetMasterPageElemTokenMap()573 const SvXMLTokenMap& SdXMLImport::GetMasterPageElemTokenMap()
574 {
575     if(!mpMasterPageElemTokenMap)
576     {
577         static __FAR_DATA SvXMLTokenMapEntry aMasterPageElemTokenMap[] =
578 {
579     { XML_NAMESPACE_STYLE,          XML_STYLE,      XML_TOK_MASTERPAGE_STYLE    },
580     { XML_NAMESPACE_PRESENTATION,   XML_NOTES,      XML_TOK_MASTERPAGE_NOTES    },
581     XML_TOKEN_MAP_END
582 };
583 
584         mpMasterPageElemTokenMap = new SvXMLTokenMap(aMasterPageElemTokenMap);
585     } // if(!mpMasterPageElemTokenMap)
586 
587     return *mpMasterPageElemTokenMap;
588 }
589 
590 //////////////////////////////////////////////////////////////////////////////
591 
GetMasterPageAttrTokenMap()592 const SvXMLTokenMap& SdXMLImport::GetMasterPageAttrTokenMap()
593 {
594     if(!mpMasterPageAttrTokenMap)
595     {
596         static __FAR_DATA SvXMLTokenMapEntry aMasterPageAttrTokenMap[] =
597 {
598     { XML_NAMESPACE_STYLE,  XML_NAME,                       XML_TOK_MASTERPAGE_NAME },
599     { XML_NAMESPACE_STYLE,  XML_DISPLAY_NAME,               XML_TOK_MASTERPAGE_DISPLAY_NAME },
600     { XML_NAMESPACE_STYLE,  XML_PAGE_LAYOUT_NAME,           XML_TOK_MASTERPAGE_PAGE_MASTER_NAME },
601     { XML_NAMESPACE_DRAW,   XML_STYLE_NAME,                 XML_TOK_MASTERPAGE_STYLE_NAME       },
602     { XML_NAMESPACE_PRESENTATION,   XML_PRESENTATION_PAGE_LAYOUT_NAME,  XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME },
603     { XML_NAMESPACE_PRESENTATION,   XML_USE_HEADER_NAME,                XML_TOK_MASTERPAGE_USE_HEADER_NAME  },
604     { XML_NAMESPACE_PRESENTATION,   XML_USE_FOOTER_NAME,                XML_TOK_MASTERPAGE_USE_FOOTER_NAME  },
605     { XML_NAMESPACE_PRESENTATION,   XML_USE_DATE_TIME_NAME,             XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME   },
606     XML_TOKEN_MAP_END
607 };
608 
609         mpMasterPageAttrTokenMap = new SvXMLTokenMap(aMasterPageAttrTokenMap);
610     } // if(!mpMasterPageAttrTokenMap)
611 
612     return *mpMasterPageAttrTokenMap;
613 }
614 
615 //////////////////////////////////////////////////////////////////////////////
616 
GetPageMasterAttrTokenMap()617 const SvXMLTokenMap& SdXMLImport::GetPageMasterAttrTokenMap()
618 {
619     if(!mpPageMasterAttrTokenMap)
620     {
621         static __FAR_DATA SvXMLTokenMapEntry aPageMasterAttrTokenMap[] =
622 {
623     { XML_NAMESPACE_STYLE,          XML_NAME,               XML_TOK_PAGEMASTER_NAME                 },
624     XML_TOKEN_MAP_END
625 };
626 
627         mpPageMasterAttrTokenMap = new SvXMLTokenMap(aPageMasterAttrTokenMap);
628     } // if(!mpPageMasterAttrTokenMap)
629 
630     return *mpPageMasterAttrTokenMap;
631 }
632 
633 //////////////////////////////////////////////////////////////////////////////
634 
GetPageMasterStyleAttrTokenMap()635 const SvXMLTokenMap& SdXMLImport::GetPageMasterStyleAttrTokenMap()
636 {
637     if(!mpPageMasterStyleAttrTokenMap)
638     {
639         static __FAR_DATA SvXMLTokenMapEntry aPageMasterStyleAttrTokenMap[] =
640 {
641     { XML_NAMESPACE_FO,             XML_MARGIN_TOP,         XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP          },
642     { XML_NAMESPACE_FO,             XML_MARGIN_BOTTOM,      XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM       },
643     { XML_NAMESPACE_FO,             XML_MARGIN_LEFT,        XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT         },
644     { XML_NAMESPACE_FO,             XML_MARGIN_RIGHT,       XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT        },
645     { XML_NAMESPACE_FO,             XML_PAGE_WIDTH,         XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH          },
646     { XML_NAMESPACE_FO,             XML_PAGE_HEIGHT,        XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT         },
647     { XML_NAMESPACE_STYLE,          XML_PRINT_ORIENTATION,  XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION    },
648     XML_TOKEN_MAP_END
649 };
650 
651         mpPageMasterStyleAttrTokenMap = new SvXMLTokenMap(aPageMasterStyleAttrTokenMap);
652     } // if(!mpPageMasterStyleAttrTokenMap)
653 
654     return *mpPageMasterStyleAttrTokenMap;
655 }
656 
657 //////////////////////////////////////////////////////////////////////////////
658 
GetDrawPageAttrTokenMap()659 const SvXMLTokenMap& SdXMLImport::GetDrawPageAttrTokenMap()
660 {
661     if(!mpDrawPageAttrTokenMap)
662     {
663         static __FAR_DATA SvXMLTokenMapEntry aDrawPageAttrTokenMap[] =
664 {
665     { XML_NAMESPACE_DRAW,           XML_NAME,                           XML_TOK_DRAWPAGE_NAME               },
666     { XML_NAMESPACE_DRAW,           XML_STYLE_NAME,                     XML_TOK_DRAWPAGE_STYLE_NAME         },
667     { XML_NAMESPACE_DRAW,           XML_MASTER_PAGE_NAME,               XML_TOK_DRAWPAGE_MASTER_PAGE_NAME   },
668     { XML_NAMESPACE_PRESENTATION,   XML_PRESENTATION_PAGE_LAYOUT_NAME,  XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME   },
669     { XML_NAMESPACE_DRAW,           XML_ID,                             XML_TOK_DRAWPAGE_DRAWID                 },
670     { XML_NAMESPACE_XML,            XML_ID,                             XML_TOK_DRAWPAGE_XMLID                  },
671     { XML_NAMESPACE_XLINK,          XML_HREF,                           XML_TOK_DRAWPAGE_HREF               },
672     { XML_NAMESPACE_PRESENTATION,   XML_USE_HEADER_NAME,                XML_TOK_DRAWPAGE_USE_HEADER_NAME    },
673     { XML_NAMESPACE_PRESENTATION,   XML_USE_FOOTER_NAME,                XML_TOK_DRAWPAGE_USE_FOOTER_NAME    },
674     { XML_NAMESPACE_PRESENTATION,   XML_USE_DATE_TIME_NAME,             XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME },
675 
676     XML_TOKEN_MAP_END
677 };
678 
679         mpDrawPageAttrTokenMap = new SvXMLTokenMap(aDrawPageAttrTokenMap);
680     } // if(!mpDrawPageAttrTokenMap)
681 
682     return *mpDrawPageAttrTokenMap;
683 }
684 
685 //////////////////////////////////////////////////////////////////////////////
686 
GetDrawPageElemTokenMap()687 const SvXMLTokenMap& SdXMLImport::GetDrawPageElemTokenMap()
688 {
689     if(!mpDrawPageElemTokenMap)
690     {
691         static __FAR_DATA SvXMLTokenMapEntry aDrawPageElemTokenMap[] =
692 {
693     { XML_NAMESPACE_PRESENTATION,   XML_NOTES,              XML_TOK_DRAWPAGE_NOTES      },
694     { XML_NAMESPACE_ANIMATION,      XML_PAR,                XML_TOK_DRAWPAGE_PAR        },
695     { XML_NAMESPACE_ANIMATION,      XML_SEQ,                XML_TOK_DRAWPAGE_SEQ        },
696     XML_TOKEN_MAP_END
697 };
698 
699         mpDrawPageElemTokenMap = new SvXMLTokenMap(aDrawPageElemTokenMap);
700     } // if(!mpDrawPageElemTokenMap)
701 
702     return *mpDrawPageElemTokenMap;
703 }
704 
705 //////////////////////////////////////////////////////////////////////////////
706 
GetPresentationPlaceholderAttrTokenMap()707 const SvXMLTokenMap& SdXMLImport::GetPresentationPlaceholderAttrTokenMap()
708 {
709     if(!mpPresentationPlaceholderAttrTokenMap)
710     {
711         static __FAR_DATA SvXMLTokenMapEntry aPresentationPlaceholderAttrTokenMap[] =
712 {
713     { XML_NAMESPACE_PRESENTATION,   XML_OBJECT,     XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME  },
714     { XML_NAMESPACE_SVG,            XML_X,          XML_TOK_PRESENTATIONPLACEHOLDER_X           },
715     { XML_NAMESPACE_SVG,            XML_Y,          XML_TOK_PRESENTATIONPLACEHOLDER_Y           },
716     { XML_NAMESPACE_SVG,            XML_WIDTH,      XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH       },
717     { XML_NAMESPACE_SVG,            XML_HEIGHT,     XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT      },
718     XML_TOKEN_MAP_END
719 };
720 
721         mpPresentationPlaceholderAttrTokenMap = new SvXMLTokenMap(aPresentationPlaceholderAttrTokenMap);
722     } // if(!mpPresentationPlaceholderAttrTokenMap)
723 
724     return *mpPresentationPlaceholderAttrTokenMap;
725 }
726 
727 //////////////////////////////////////////////////////////////////////////////
728 
CreateContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)729 SvXMLImportContext *SdXMLImport::CreateContext(sal_uInt16 nPrefix,
730     const OUString& rLocalName,
731     const uno::Reference<xml::sax::XAttributeList>& xAttrList)
732 {
733     SvXMLImportContext* pContext = 0;
734 
735     if(XML_NAMESPACE_OFFICE == nPrefix &&
736         ( IsXMLToken( rLocalName, XML_DOCUMENT_STYLES ) ||
737           IsXMLToken( rLocalName, XML_DOCUMENT_CONTENT ) ||
738           IsXMLToken( rLocalName, XML_DOCUMENT_SETTINGS )   ))
739     {
740          pContext = new SdXMLDocContext_Impl(*this, nPrefix, rLocalName, xAttrList);
741     } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
742                 ( IsXMLToken(rLocalName, XML_DOCUMENT_META)) ) {
743         pContext = CreateMetaContext(rLocalName, xAttrList);
744     } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
745                 ( IsXMLToken(rLocalName, XML_DOCUMENT)) ) {
746         uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
747             mxServiceFactory->createInstance(::rtl::OUString::createFromAscii(
748                 "com.sun.star.xml.dom.SAXDocumentBuilder")),
749                 uno::UNO_QUERY_THROW);
750         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
751             GetModel(), uno::UNO_QUERY_THROW);
752         // flat OpenDocument file format
753         pContext = new SdXMLFlatDocContext_Impl( *this, nPrefix, rLocalName,
754                         xAttrList, xDPS->getDocumentProperties(), xDocBuilder);
755     } else {
756         pContext = SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList);
757     }
758 
759     return pContext;
760 }
761 
762 //////////////////////////////////////////////////////////////////////////////
763 
CreateMetaContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)764 SvXMLImportContext *SdXMLImport::CreateMetaContext(const OUString& rLocalName,
765     const uno::Reference<xml::sax::XAttributeList>&)
766 {
767     SvXMLImportContext* pContext = 0L;
768 
769     if (getImportFlags() & IMPORT_META)
770     {
771         uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
772             mxServiceFactory->createInstance(::rtl::OUString::createFromAscii(
773                 "com.sun.star.xml.dom.SAXDocumentBuilder")),
774                 uno::UNO_QUERY_THROW);
775         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
776             GetModel(), uno::UNO_QUERY_THROW);
777         uno::Reference<document::XDocumentProperties> const xDocProps(
778             (IsStylesOnlyMode()) ? 0 : xDPS->getDocumentProperties());
779         pContext = new SvXMLMetaDocumentContext(*this,
780                         XML_NAMESPACE_OFFICE, rLocalName,
781                         xDocProps, xDocBuilder);
782     }
783 
784     if(!pContext)
785     {
786         pContext = new SvXMLImportContext(*this, XML_NAMESPACE_OFFICE, rLocalName);
787     }
788 
789     return pContext;
790 }
791 
792 //////////////////////////////////////////////////////////////////////////////
793 
CreateBodyContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)794 SvXMLImportContext *SdXMLImport::CreateBodyContext(const OUString& rLocalName,
795     const uno::Reference<xml::sax::XAttributeList>&)
796 {
797     SvXMLImportContext *pContext = 0;
798     pContext = new SdXMLBodyContext(*this, XML_NAMESPACE_OFFICE, rLocalName);
799     return pContext;
800 }
801 
802 //////////////////////////////////////////////////////////////////////////////
803 
CreateStylesContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)804 SvXMLStylesContext *SdXMLImport::CreateStylesContext(const OUString& rLocalName,
805     const uno::Reference<xml::sax::XAttributeList>& xAttrList)
806 {
807     if(GetShapeImport()->GetStylesContext())
808         return GetShapeImport()->GetStylesContext();
809 
810     GetShapeImport()->SetStylesContext(new SdXMLStylesContext(
811         *this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_False));
812 
813     return GetShapeImport()->GetStylesContext();
814 }
815 
816 //////////////////////////////////////////////////////////////////////////////
817 
CreateAutoStylesContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)818 SvXMLStylesContext *SdXMLImport::CreateAutoStylesContext(const OUString& rLocalName,
819     const uno::Reference<xml::sax::XAttributeList>& xAttrList)
820 {
821     if(GetShapeImport()->GetAutoStylesContext())
822         return GetShapeImport()->GetAutoStylesContext();
823 
824     GetShapeImport()->SetAutoStylesContext(new SdXMLStylesContext(
825         *this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_True));
826 
827     return GetShapeImport()->GetAutoStylesContext();
828 }
829 
830 //////////////////////////////////////////////////////////////////////////////
831 
CreateMasterStylesContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)832 SvXMLImportContext* SdXMLImport::CreateMasterStylesContext(const OUString& rLocalName,
833     const uno::Reference<xml::sax::XAttributeList>&)
834 {
835     if(mpMasterStylesContext)
836         return mpMasterStylesContext;
837 
838     mpMasterStylesContext = new SdXMLMasterStylesContext(
839         *this, XML_NAMESPACE_OFFICE, rLocalName);
840     mpMasterStylesContext->AddRef();
841 
842     return mpMasterStylesContext;
843 }
844 
845 //////////////////////////////////////////////////////////////////////////////
846 
CreateFontDeclsContext(const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)847 SvXMLImportContext *SdXMLImport::CreateFontDeclsContext(const OUString& rLocalName,
848     const uno::Reference< xml::sax::XAttributeList > & xAttrList )
849 {
850     XMLFontStylesContext *pFSContext =
851             new XMLFontStylesContext( *this, XML_NAMESPACE_OFFICE,
852                                       rLocalName, xAttrList,
853                                       gsl_getSystemTextEncoding() );
854     SetFontDecls( pFSContext );
855     return pFSContext;
856 }
857 
858 //////////////////////////////////////////////////////////////////////////////
859 // import pool defaults. Parameter contains pool defaults read
860 // from input data. These data needs to be set at the model.
861 //
ImportPoolDefaults(const XMLPropStyleContext *)862 void SdXMLImport::ImportPoolDefaults(const XMLPropStyleContext*)
863 {
864 }
865 
866 //////////////////////////////////////////////////////////////////////////////
867 
CreateScriptContext(const OUString & rLocalName)868 SvXMLImportContext *SdXMLImport::CreateScriptContext(
869                                        const OUString& rLocalName )
870 {
871     SvXMLImportContext *pContext = 0;
872 
873     pContext = new XMLScriptContext( *this,
874                                     XML_NAMESPACE_OFFICE, rLocalName,
875                                     GetModel() );
876     return pContext;
877 }
878 
879 //////////////////////////////////////////////////////////////////////////////
880 
SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & aViewProps)881 void SdXMLImport::SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps)
882 {
883     uno::Reference< beans::XPropertySet > xPropSet( GetModel(), uno::UNO_QUERY );
884     if( !xPropSet.is() )
885         return;
886 
887     awt::Rectangle aVisArea( 0,0, 28000, 21000 );
888     sal_Int32 nCount = aViewProps.getLength();
889 
890     const beans::PropertyValue* pValues = aViewProps.getConstArray();
891 
892     while( nCount-- )
893     {
894         const OUString& rName = pValues->Name;
895         const uno::Any rValue = pValues->Value;
896 
897         if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaTop") ) )
898         {
899             rValue >>= aVisArea.Y;
900         }
901         else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaLeft") ) )
902         {
903             rValue >>= aVisArea.X;
904         }
905         else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaWidth") ) )
906         {
907             rValue >>= aVisArea.Width;
908         }
909         else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaHeight") ) )
910         {
911             rValue >>= aVisArea.Height;
912         }
913 
914         pValues++;
915     }
916 
917     try
918     {
919         xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ), uno::makeAny( aVisArea )  );
920     }
921     catch( com::sun::star::uno::Exception /*e*/ )
922     {
923 /* #i79978# since old documents may contain invalid view settings, this is nothing to worry the user about.
924         uno::Sequence<OUString> aSeq(0);
925         SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
926 */
927     }
928 }
929 
SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & aConfigProps)930 void SdXMLImport::SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps)
931 {
932     uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY );
933     if( !xFac.is() )
934         return;
935 
936     uno::Reference< beans::XPropertySet > xProps( xFac->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ), uno::UNO_QUERY );
937     if( !xProps.is() )
938         return;
939 
940     uno::Reference< beans::XPropertySetInfo > xInfo( xProps->getPropertySetInfo() );
941     if( !xInfo.is() )
942         return;
943 
944     sal_Int32 nCount = aConfigProps.getLength();
945     const beans::PropertyValue* pValues = aConfigProps.getConstArray();
946 
947     while( nCount-- )
948     {
949         try
950         {
951             const OUString& rProperty = pValues->Name;
952             if( xInfo->hasPropertyByName( rProperty ) )
953                 xProps->setPropertyValue( rProperty, pValues->Value );
954         }
955         catch( uno::Exception& e )
956         {
957             (void)e;
958             OSL_TRACE( "#SdXMLImport::SetConfigurationSettings: Exception!" );
959         }
960 
961         pValues++;
962     }
963 }
964 
965 // #80365# overload this method to read and use the hint value from the
966 // written meta information. If no info is found, guess 10 draw objects
967 //void SdXMLImport::SetStatisticAttributes(const uno::Reference<xml::sax::XAttributeList>& xAttrList)
SetStatistics(const uno::Sequence<beans::NamedValue> & i_rStats)968 void SdXMLImport::SetStatistics(
969         const uno::Sequence<beans::NamedValue> & i_rStats)
970 {
971     static const char* s_stats[] =
972         { "ObjectCount", 0 };
973 
974     SvXMLImport::SetStatistics(i_rStats);
975 
976     sal_uInt32 nCount(10);
977     for (sal_Int32 i = 0; i < i_rStats.getLength(); ++i) {
978         for (const char** pStat = s_stats; *pStat != 0; ++pStat) {
979             if (i_rStats[i].Name.equalsAscii(*pStat)) {
980                 sal_Int32 val = 0;
981                 if (i_rStats[i].Value >>= val) {
982                     nCount = val;
983                 } else {
984                     DBG_ERROR("SdXMLImport::SetStatistics: invalid entry");
985                 }
986             }
987         }
988     }
989 
990     if(nCount)
991     {
992         GetProgressBarHelper()->SetReference(nCount);
993         GetProgressBarHelper()->SetValue(0);
994     }
995 }
996 
997 
998 // XServiceInfo
getImplementationName()999 OUString SAL_CALL SdXMLImport::getImplementationName()
1000 {
1001     if( IsDraw())
1002     {
1003         // Draw
1004 
1005         switch( getImportFlags())
1006         {
1007             case IMPORT_ALL:
1008                 return XMLDrawImportOasis_getImplementationName();
1009             case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES):
1010                 return XMLDrawStylesImportOasis_getImplementationName();
1011             case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
1012                 return XMLDrawContentImportOasis_getImplementationName();
1013             case IMPORT_META:
1014                 return XMLDrawMetaImportOasis_getImplementationName();
1015             case IMPORT_SETTINGS:
1016                 return XMLDrawSettingsImportOasis_getImplementationName();
1017             default:
1018                 return XMLDrawImportOasis_getImplementationName();
1019         }
1020     }
1021     else
1022     {
1023         // Impress
1024 
1025         switch( getImportFlags())
1026         {
1027             case IMPORT_ALL:
1028                 return XMLImpressImportOasis_getImplementationName();
1029             case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES):
1030                 return XMLImpressStylesImportOasis_getImplementationName();
1031             case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
1032                 return XMLImpressContentImportOasis_getImplementationName();
1033             case IMPORT_META:
1034                 return XMLImpressMetaImportOasis_getImplementationName();
1035             case IMPORT_SETTINGS:
1036                 return XMLImpressSettingsImportOasis_getImplementationName();
1037             default:
1038                 return XMLImpressImportOasis_getImplementationName();
1039         }
1040     }
1041 }
1042 
1043     HeaderFooterDeclMap         maHeaderDeclsMap;
1044     HeaderFooterDeclMap         maFooterDeclsMap;
1045     DateTimeDeclMap             maDateTimeDeclsMap;
1046 
AddHeaderDecl(const::rtl::OUString & rName,const::rtl::OUString & rText)1047 void SdXMLImport::AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText )
1048 {
1049     if( rName.getLength() && rText.getLength() )
1050         maHeaderDeclsMap[rName] = rText;
1051 }
1052 
AddFooterDecl(const::rtl::OUString & rName,const::rtl::OUString & rText)1053 void SdXMLImport::AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText )
1054 {
1055     if( rName.getLength() && rText.getLength() )
1056         maFooterDeclsMap[rName] = rText;
1057 }
1058 
AddDateTimeDecl(const::rtl::OUString & rName,const::rtl::OUString & rText,sal_Bool bFixed,const::rtl::OUString & rDateTimeFormat)1059 void SdXMLImport::AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat )
1060 {
1061     if( rName.getLength() && (rText.getLength() || !bFixed) )
1062     {
1063         DateTimeDeclContextImpl aDecl;
1064         aDecl.maStrText = rText;
1065         aDecl.mbFixed = bFixed;
1066         aDecl.maStrDateTimeFormat = rDateTimeFormat;
1067         maDateTimeDeclsMap[rName] = aDecl;
1068     }
1069 }
1070 
GetHeaderDecl(const::rtl::OUString & rName) const1071 ::rtl::OUString SdXMLImport::GetHeaderDecl( const ::rtl::OUString& rName ) const
1072 {
1073     ::rtl::OUString aRet;
1074     HeaderFooterDeclMap::const_iterator aIter( maHeaderDeclsMap.find( rName ) );
1075     if( aIter != maHeaderDeclsMap.end() )
1076         aRet = (*aIter).second;
1077 
1078     return aRet;
1079 }
1080 
GetFooterDecl(const::rtl::OUString & rName) const1081 ::rtl::OUString SdXMLImport::GetFooterDecl( const ::rtl::OUString& rName ) const
1082 {
1083     ::rtl::OUString aRet;
1084     HeaderFooterDeclMap::const_iterator aIter( maFooterDeclsMap.find( rName ) );
1085     if( aIter != maFooterDeclsMap.end() )
1086         aRet = (*aIter).second;
1087 
1088     return aRet;
1089 }
1090 
GetDateTimeDecl(const::rtl::OUString & rName,sal_Bool & rbFixed,::rtl::OUString & rDateTimeFormat)1091 ::rtl::OUString SdXMLImport::GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat )
1092 {
1093     DateTimeDeclContextImpl aDecl;
1094 
1095     DateTimeDeclMap::const_iterator aIter( maDateTimeDeclsMap.find( rName ) );
1096     if( aIter != maDateTimeDeclsMap.end() )
1097         aDecl = (*aIter).second;
1098 
1099     rbFixed = aDecl.mbFixed;
1100     rDateTimeFormat = aDecl.maStrDateTimeFormat;
1101     return aDecl.maStrText;
1102 }
1103 
1104 // eof
1105