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
28 #include "ximpstyl.hxx"
29 #include <xmloff/XMLShapeStyleContext.hxx>
30 #include "xmloff/xmlnmspe.hxx"
31 #include <xmloff/xmltoken.hxx>
32 #include <xmloff/xmluconv.hxx>
33 #include "ximpnote.hxx"
34 #include <tools/debug.hxx>
35
36 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
37 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
38 #include <com/sun/star/presentation/XPresentationPage.hpp>
39 #include <com/sun/star/drawing/XDrawPages.hpp>
40 #include <com/sun/star/container/XNamed.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/beans/XPropertyState.hpp>
43 #include <com/sun/star/presentation/XHandoutMasterSupplier.hpp>
44 #include <comphelper/namecontainer.hxx>
45 #include <xmloff/xmlprcon.hxx>
46 #include <xmloff/families.hxx>
47 #include <com/sun/star/container/XNameContainer.hpp>
48 #include <svl/zforlist.hxx>
49 #include "PropertySetMerger.hxx"
50 #include "sdpropls.hxx"
51 #include "layerimp.hxx"
52 #include <xmloff/XMLGraphicsDefaultStyle.hxx>
53 #include "XMLNumberStylesImport.hxx"
54 #include "xmloff/xmlerror.hxx"
55
56 using ::rtl::OUString;
57 using ::rtl::OUStringBuffer;
58
59 using namespace ::com::sun::star;
60 using namespace ::com::sun::star::uno;
61 using namespace ::com::sun::star::xml::sax;
62 using namespace ::xmloff::token;
63
64 //////////////////////////////////////////////////////////////////////////////
65
66 class SdXMLDrawingPagePropertySetContext : public SvXMLPropertySetContext
67 {
68 public:
69
70 TYPEINFO();
71
72 SdXMLDrawingPagePropertySetContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
73 const ::rtl::OUString& rLName,
74 const ::com::sun::star::uno::Reference<
75 ::com::sun::star::xml::sax::XAttributeList >& xAttrList,
76 ::std::vector< XMLPropertyState > &rProps,
77 const UniReference < SvXMLImportPropertyMapper > &rMap );
78
79 virtual ~SdXMLDrawingPagePropertySetContext();
80
81 using SvXMLPropertySetContext::CreateChildContext;
82 virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
83 const ::rtl::OUString& rLocalName,
84 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList,
85 ::std::vector< XMLPropertyState > &rProperties,
86 const XMLPropertyState& rProp);
87 };
88
89 TYPEINIT1( SdXMLDrawingPagePropertySetContext, SvXMLPropertySetContext );
90
SdXMLDrawingPagePropertySetContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,::std::vector<XMLPropertyState> & rProps,const UniReference<SvXMLImportPropertyMapper> & rMap)91 SdXMLDrawingPagePropertySetContext::SdXMLDrawingPagePropertySetContext(
92 SvXMLImport& rImport, sal_uInt16 nPrfx,
93 const OUString& rLName,
94 const uno::Reference< xml::sax::XAttributeList > & xAttrList,
95 ::std::vector< XMLPropertyState > &rProps,
96 const UniReference < SvXMLImportPropertyMapper > &rMap ) :
97 SvXMLPropertySetContext( rImport, nPrfx, rLName, xAttrList,
98 XML_TYPE_PROP_DRAWING_PAGE, rProps, rMap )
99 {
100 }
101
~SdXMLDrawingPagePropertySetContext()102 SdXMLDrawingPagePropertySetContext::~SdXMLDrawingPagePropertySetContext()
103 {
104 }
105
CreateChildContext(sal_uInt16 p_nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,::std::vector<XMLPropertyState> & rProperties,const XMLPropertyState & rProp)106 SvXMLImportContext *SdXMLDrawingPagePropertySetContext::CreateChildContext(
107 sal_uInt16 p_nPrefix,
108 const OUString& rLocalName,
109 const uno::Reference< xml::sax::XAttributeList > & xAttrList,
110 ::std::vector< XMLPropertyState > &rProperties,
111 const XMLPropertyState& rProp )
112 {
113 SvXMLImportContext *pContext = 0;
114
115 switch( mxMapper->getPropertySetMapper()->GetEntryContextId( rProp.mnIndex ) )
116 {
117 case CTF_PAGE_SOUND_URL:
118 {
119 const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
120 for(sal_Int16 i=0; i < nAttrCount; i++)
121 {
122 OUString aLocalName;
123 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName);
124
125 if( (nPrefix == XML_NAMESPACE_XLINK) && IsXMLToken( aLocalName, XML_HREF ) )
126 {
127 uno::Any aAny( GetImport().GetAbsoluteReference( xAttrList->getValueByIndex(i) ) );
128 XMLPropertyState aPropState( rProp.mnIndex, aAny );
129 rProperties.push_back( aPropState );
130 }
131 }
132 break;
133 }
134 }
135
136 if( !pContext )
137 pContext = SvXMLPropertySetContext::CreateChildContext( p_nPrefix, rLocalName,
138 xAttrList,
139 rProperties, rProp );
140
141 return pContext;
142 }
143
144 //////////////////////////////////////////////////////////////////////////////
145
146 class SdXMLDrawingPageStyleContext : public XMLPropStyleContext
147 {
148 public:
149 TYPEINFO();
150
151 SdXMLDrawingPageStyleContext(
152 SvXMLImport& rImport,
153 sal_uInt16 nPrfx,
154 const rtl::OUString& rLName,
155 const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList,
156 SvXMLStylesContext& rStyles,
157 sal_uInt16 nFamily = XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID);
158 virtual ~SdXMLDrawingPageStyleContext();
159
160 SvXMLImportContext * CreateChildContext(
161 sal_uInt16 nPrefix,
162 const ::rtl::OUString& rLocalName,
163 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
164
165 virtual void Finish( sal_Bool bOverwrite );
166
167 // #i35918#
168 virtual void FillPropertySet(
169 const ::com::sun::star::uno::Reference<
170 ::com::sun::star::beans::XPropertySet > & rPropSet );
171 };
172
173 TYPEINIT1( SdXMLDrawingPageStyleContext, XMLPropStyleContext );
174
SdXMLDrawingPageStyleContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,SvXMLStylesContext & rStyles,sal_uInt16 nFamily)175 SdXMLDrawingPageStyleContext::SdXMLDrawingPageStyleContext(
176 SvXMLImport& rImport,
177 sal_uInt16 nPrfx,
178 const OUString& rLName,
179 const uno::Reference< xml::sax::XAttributeList >& xAttrList,
180 SvXMLStylesContext& rStyles,
181 sal_uInt16 nFamily)
182 : XMLPropStyleContext(rImport, nPrfx, rLName, xAttrList, rStyles, nFamily )
183 {
184 }
185
~SdXMLDrawingPageStyleContext()186 SdXMLDrawingPageStyleContext::~SdXMLDrawingPageStyleContext()
187 {
188 }
189
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)190 SvXMLImportContext *SdXMLDrawingPageStyleContext::CreateChildContext(
191 sal_uInt16 nPrefix,
192 const OUString& rLocalName,
193 const uno::Reference< xml::sax::XAttributeList > & xAttrList )
194 {
195 SvXMLImportContext *pContext = 0;
196
197 if( XML_NAMESPACE_STYLE == nPrefix &&
198 IsXMLToken( rLocalName, XML_DRAWING_PAGE_PROPERTIES ) )
199 {
200 UniReference < SvXMLImportPropertyMapper > xImpPrMap =
201 GetStyles()->GetImportPropertyMapper( GetFamily() );
202 if( xImpPrMap.is() )
203 pContext = new SdXMLDrawingPagePropertySetContext( GetImport(), nPrefix,
204 rLocalName, xAttrList,
205 GetProperties(),
206 xImpPrMap );
207 }
208
209 if( !pContext )
210 pContext = XMLPropStyleContext::CreateChildContext( nPrefix, rLocalName,
211 xAttrList );
212
213 return pContext;
214 }
215
Finish(sal_Bool bOverwrite)216 void SdXMLDrawingPageStyleContext::Finish( sal_Bool bOverwrite )
217 {
218 XMLPropStyleContext::Finish( bOverwrite );
219
220 ::std::vector< XMLPropertyState > &rProperties = GetProperties();
221
222 const UniReference< XMLPropertySetMapper >& rImpPrMap = GetStyles()->GetImportPropertyMapper( GetFamily() )->getPropertySetMapper();
223
224 ::std::vector< XMLPropertyState >::iterator property = rProperties.begin();
225 for(; property != rProperties.end(); property++)
226 {
227 if( property->mnIndex == -1 )
228 continue;
229
230 sal_Int16 nContextID = rImpPrMap->GetEntryContextId(property->mnIndex);
231 switch( nContextID )
232 {
233 case CTF_DATE_TIME_FORMAT:
234 {
235 OUString sStyleName;
236 (*property).maValue >>= sStyleName;
237
238 sal_Int32 nStyle = 0;
239
240 SdXMLNumberFormatImportContext* pSdNumStyle =
241 PTR_CAST( SdXMLNumberFormatImportContext,
242 GetStyles()->FindStyleChildContext( XML_STYLE_FAMILY_DATA_STYLE, sStyleName, sal_True ) );
243
244 if( pSdNumStyle )
245 nStyle = pSdNumStyle->GetDrawKey();
246
247 (*property).maValue <<= nStyle;
248 }
249 break;
250 }
251 }
252
253 }
254
255 // #i35918#
FillPropertySet(const Reference<beans::XPropertySet> & rPropSet)256 void SdXMLDrawingPageStyleContext::FillPropertySet(
257 const Reference< beans::XPropertySet > & rPropSet )
258 {
259 const sal_uInt16 MAX_SPECIAL_DRAW_STYLES = 7;
260 struct _ContextID_Index_Pair aContextIDs[MAX_SPECIAL_DRAW_STYLES+1] =
261 {
262 { CTF_DASHNAME , -1 },
263 { CTF_LINESTARTNAME , -1 },
264 { CTF_LINEENDNAME , -1 },
265 { CTF_FILLGRADIENTNAME, -1 },
266 { CTF_FILLTRANSNAME , -1 },
267 { CTF_FILLHATCHNAME , -1 },
268 { CTF_FILLBITMAPNAME , -1 },
269 { -1, -1 }
270 };
271 static sal_uInt16 aFamilies[MAX_SPECIAL_DRAW_STYLES] =
272 {
273 XML_STYLE_FAMILY_SD_STROKE_DASH_ID,
274 XML_STYLE_FAMILY_SD_MARKER_ID,
275 XML_STYLE_FAMILY_SD_MARKER_ID,
276 XML_STYLE_FAMILY_SD_GRADIENT_ID,
277 XML_STYLE_FAMILY_SD_GRADIENT_ID,
278 XML_STYLE_FAMILY_SD_HATCH_ID,
279 XML_STYLE_FAMILY_SD_FILL_IMAGE_ID
280 };
281
282 UniReference < SvXMLImportPropertyMapper > xImpPrMap =
283 GetStyles()->GetImportPropertyMapper( GetFamily() );
284 DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" );
285 if( xImpPrMap.is() )
286 xImpPrMap->FillPropertySet( GetProperties(), rPropSet, aContextIDs );
287
288 Reference< beans::XPropertySetInfo > xInfo;
289 for( sal_uInt16 i=0; i<MAX_SPECIAL_DRAW_STYLES; i++ )
290 {
291 sal_Int32 nIndex = aContextIDs[i].nIndex;
292 if( nIndex != -1 )
293 {
294 struct XMLPropertyState& rState = GetProperties()[nIndex];
295 OUString sStyleName;
296 rState.maValue >>= sStyleName;
297 sStyleName = GetImport().GetStyleDisplayName( aFamilies[i],
298 sStyleName );
299 // get property set mapper
300 UniReference<XMLPropertySetMapper> rPropMapper =
301 xImpPrMap->getPropertySetMapper();
302
303 // set property
304 const OUString& rPropertyName =
305 rPropMapper->GetEntryAPIName(rState.mnIndex);
306 if( !xInfo.is() )
307 xInfo = rPropSet->getPropertySetInfo();
308 if ( xInfo->hasPropertyByName( rPropertyName ) )
309 {
310 rPropSet->setPropertyValue( rPropertyName, Any( sStyleName ) );
311 }
312 }
313 }
314 }
315
316 //////////////////////////////////////////////////////////////////////////////
317
318 TYPEINIT1( SdXMLPageMasterStyleContext, SvXMLStyleContext );
319
SdXMLPageMasterStyleContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)320 SdXMLPageMasterStyleContext::SdXMLPageMasterStyleContext(
321 SdXMLImport& rImport,
322 sal_uInt16 nPrfx,
323 const OUString& rLName,
324 const uno::Reference< xml::sax::XAttributeList>& xAttrList)
325 : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PAGEMASTERSTYLECONEXT_ID),
326 mnBorderBottom( 0L ),
327 mnBorderLeft( 0L ),
328 mnBorderRight( 0L ),
329 mnBorderTop( 0L ),
330 mnWidth( 0L ),
331 mnHeight( 0L ),
332 meOrientation(GetSdImport().IsDraw() ? view::PaperOrientation_PORTRAIT : view::PaperOrientation_LANDSCAPE)
333 {
334 // set family to something special at SvXMLStyleContext
335 // for differences in search-methods
336
337 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
338 for(sal_Int16 i=0; i < nAttrCount; i++)
339 {
340 OUString sAttrName = xAttrList->getNameByIndex(i);
341 OUString aLocalName;
342 sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName);
343 OUString sValue = xAttrList->getValueByIndex(i);
344 const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPageMasterStyleAttrTokenMap();
345
346 switch(rAttrTokenMap.Get(nPrefix, aLocalName))
347 {
348 case XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP:
349 {
350 GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderTop, sValue);
351 break;
352 }
353 case XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM:
354 {
355 GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderBottom, sValue);
356 break;
357 }
358 case XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT:
359 {
360 GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderLeft, sValue);
361 break;
362 }
363 case XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT:
364 {
365 GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderRight, sValue);
366 break;
367 }
368 case XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH:
369 {
370 GetSdImport().GetMM100UnitConverter().convertMeasure(mnWidth, sValue);
371 break;
372 }
373 case XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT:
374 {
375 GetSdImport().GetMM100UnitConverter().convertMeasure(mnHeight, sValue);
376 break;
377 }
378 case XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION:
379 {
380 if( IsXMLToken( sValue, XML_PORTRAIT ) )
381 meOrientation = view::PaperOrientation_PORTRAIT;
382 else
383 meOrientation = view::PaperOrientation_LANDSCAPE;
384 break;
385 }
386 }
387 }
388 }
389
390 //////////////////////////////////////////////////////////////////////////////
391
~SdXMLPageMasterStyleContext()392 SdXMLPageMasterStyleContext::~SdXMLPageMasterStyleContext()
393 {
394 }
395
396 //////////////////////////////////////////////////////////////////////////////
397 //////////////////////////////////////////////////////////////////////////////
398
399 TYPEINIT1( SdXMLPageMasterContext, SvXMLStyleContext );
400
SdXMLPageMasterContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)401 SdXMLPageMasterContext::SdXMLPageMasterContext(
402 SdXMLImport& rImport,
403 sal_uInt16 nPrfx,
404 const OUString& rLName,
405 const uno::Reference< xml::sax::XAttributeList>& xAttrList)
406 : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PAGEMASTERCONEXT_ID),
407 mpPageMasterStyle( 0L )
408 {
409 // set family to something special at SvXMLStyleContext
410 // for differences in search-methods
411
412 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
413 for(sal_Int16 i=0; i < nAttrCount; i++)
414 {
415 OUString sAttrName = xAttrList->getNameByIndex(i);
416 OUString aLocalName;
417 sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName);
418 OUString sValue = xAttrList->getValueByIndex(i);
419 const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPageMasterAttrTokenMap();
420
421 switch(rAttrTokenMap.Get(nPrefix, aLocalName))
422 {
423 case XML_TOK_PAGEMASTER_NAME:
424 {
425 msName = sValue;
426 break;
427 }
428 }
429 }
430 }
431
432 //////////////////////////////////////////////////////////////////////////////
433
~SdXMLPageMasterContext()434 SdXMLPageMasterContext::~SdXMLPageMasterContext()
435 {
436 // release remembered contexts, they are no longer needed
437 if(mpPageMasterStyle)
438 {
439 mpPageMasterStyle->ReleaseRef();
440 mpPageMasterStyle = 0L;
441 }
442 }
443
444 //////////////////////////////////////////////////////////////////////////////
445
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)446 SvXMLImportContext *SdXMLPageMasterContext::CreateChildContext(
447 sal_uInt16 nPrefix,
448 const OUString& rLocalName,
449 const uno::Reference< xml::sax::XAttributeList >& xAttrList )
450 {
451 SvXMLImportContext* pContext = 0;
452
453 if(nPrefix == XML_NAMESPACE_STYLE && IsXMLToken( rLocalName, XML_PAGE_LAYOUT_PROPERTIES) )
454 {
455 pContext = new SdXMLPageMasterStyleContext(GetSdImport(), nPrefix, rLocalName, xAttrList);
456
457 // remember SdXMLPresentationPlaceholderContext for later evaluation
458 if(pContext)
459 {
460 pContext->AddRef();
461 DBG_ASSERT(!mpPageMasterStyle, "PageMasterStyle is set, there seem to be two of them (!)");
462 mpPageMasterStyle = (SdXMLPageMasterStyleContext*)pContext;
463 }
464 }
465
466 // call base class
467 if(!pContext)
468 pContext = SvXMLStyleContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
469
470 return pContext;
471 }
472
473 //////////////////////////////////////////////////////////////////////////////
474 //////////////////////////////////////////////////////////////////////////////
475
476 TYPEINIT1( SdXMLPresentationPageLayoutContext, SvXMLStyleContext );
477
SdXMLPresentationPageLayoutContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)478 SdXMLPresentationPageLayoutContext::SdXMLPresentationPageLayoutContext(
479 SdXMLImport& rImport,
480 sal_uInt16 nPrfx,
481 const OUString& rLName,
482 const uno::Reference< xml::sax::XAttributeList >& xAttrList)
483 : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PRESENTATIONPAGELAYOUT_ID),
484 mnTypeId( 20 ) // AUTOLAYOUT_NONE
485 {
486 // set family to somethiong special at SvXMLStyleContext
487 // for differences in search-methods
488
489 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
490 for( sal_Int16 i=0; i < nAttrCount; i++ )
491 {
492 const OUString& rAttrName = xAttrList->getNameByIndex( i );
493 OUString aLocalName;
494 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName );
495
496 if(nPrefix == XML_NAMESPACE_STYLE && IsXMLToken( aLocalName, XML_NAME ) )
497 {
498 msName = xAttrList->getValueByIndex( i );
499 }
500 }
501 }
502
~SdXMLPresentationPageLayoutContext()503 SdXMLPresentationPageLayoutContext::~SdXMLPresentationPageLayoutContext()
504 {
505 }
506
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)507 SvXMLImportContext *SdXMLPresentationPageLayoutContext::CreateChildContext(
508 sal_uInt16 nPrefix,
509 const OUString& rLocalName,
510 const uno::Reference< xml::sax::XAttributeList >& xAttrList )
511 {
512 SvXMLImportContext* pContext = 0;
513
514 if(nPrefix == XML_NAMESPACE_PRESENTATION && IsXMLToken( rLocalName, XML_PLACEHOLDER ) )
515 {
516 // presentation:placeholder inside style:presentation-page-layout context
517 pContext = new SdXMLPresentationPlaceholderContext(
518 GetSdImport(), nPrefix, rLocalName, xAttrList);
519
520 // remember SdXMLPresentationPlaceholderContext for later evaluation
521 if(pContext)
522 {
523 pContext->AddRef();
524 maList.Insert((SdXMLPresentationPlaceholderContext*)pContext, LIST_APPEND);
525 }
526 }
527
528 // call base class
529 if(!pContext)
530 pContext = SvXMLStyleContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
531
532 return pContext;
533 }
534
EndElement()535 void SdXMLPresentationPageLayoutContext::EndElement()
536 {
537 // build presentation page layout type here
538 // calc mnTpeId due to content of maList
539 // at the moment only use number of types used there
540 if(maList.Count())
541 {
542 SdXMLPresentationPlaceholderContext* pObj0 = maList.GetObject(0);
543 if(pObj0->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("handout"))))
544 {
545 switch( maList.Count() )
546 {
547 case 1:
548 mnTypeId = 22; // AUTOLAYOUT_HANDOUT1
549 break;
550 case 2:
551 mnTypeId = 23; // AUTOLAYOUT_HANDOUT2
552 break;
553 case 3:
554 mnTypeId = 24; // AUTOLAYOUT_HANDOUT3
555 break;
556 case 4:
557 mnTypeId = 25; // AUTOLAYOUT_HANDOUT4
558 break;
559 case 9:
560 mnTypeId = 31; // AUTOLAYOUT_HANDOUT9
561 break;
562 default:
563 mnTypeId = 26; // AUTOLAYOUT_HANDOUT6
564 }
565 }
566 else
567 {
568 switch(maList.Count())
569 {
570 case 1:
571 {
572 if(pObj0->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("title"))))
573 {
574 mnTypeId = 19; // AUTOLAYOUT_ONLY_TITLE
575 }
576 else
577 {
578 mnTypeId = 32; // AUTOLAYOUT_ONLY_TEXT
579 }
580 break;
581 }
582 case 2:
583 {
584 SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1);
585
586 if(pObj1->GetName().equals(
587 OUString(RTL_CONSTASCII_USTRINGPARAM("subtitle"))))
588 {
589 mnTypeId = 0; // AUTOLAYOUT_TITLE
590 }
591 else if(pObj1->GetName().equals(
592 OUString(RTL_CONSTASCII_USTRINGPARAM("outline"))))
593 {
594 mnTypeId = 1; // AUTOLAYOUT_ENUM
595 }
596 else if(pObj1->GetName().equals(
597 OUString(RTL_CONSTASCII_USTRINGPARAM("chart"))))
598 {
599 mnTypeId = 2; // AUTOLAYOUT_CHART
600 }
601 else if(pObj1->GetName().equals(
602 OUString(RTL_CONSTASCII_USTRINGPARAM("table"))))
603 {
604 mnTypeId = 8; // AUTOLAYOUT_TAB
605 }
606 else if(pObj1->GetName().equals(
607 OUString(RTL_CONSTASCII_USTRINGPARAM("object"))))
608 {
609 mnTypeId = 11; // AUTOLAYOUT_OBJ
610 }
611 else if(pObj1->GetName().equals(
612 OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline"))))
613 {
614 if(pObj0->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_title"))))
615 {
616 // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE
617 mnTypeId = 28;
618 }
619 else
620 {
621 // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE
622 mnTypeId = 29;
623 }
624 }
625 else
626 {
627 mnTypeId = 21; // AUTOLAYOUT_NOTES
628 }
629 break;
630 }
631 case 3:
632 {
633 SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1);
634 SdXMLPresentationPlaceholderContext* pObj2 = maList.GetObject(2);
635
636 if(pObj1->GetName().equals(
637 OUString(RTL_CONSTASCII_USTRINGPARAM("outline"))))
638 {
639 if(pObj2->GetName().equals(
640 OUString(RTL_CONSTASCII_USTRINGPARAM("outline"))))
641 {
642 mnTypeId = 3; // AUTOLAYOUT_2TEXT
643 }
644 else if(pObj2->GetName().equals(
645 OUString(RTL_CONSTASCII_USTRINGPARAM("chart"))))
646 {
647 mnTypeId = 4; // AUTOLAYOUT_TEXTCHART
648 }
649 else if(pObj2->GetName().equals(
650 OUString(RTL_CONSTASCII_USTRINGPARAM("graphic"))))
651 {
652 mnTypeId = 6; // AUTOLAYOUT_TEXTCLIP
653 }
654 else
655 {
656 if(pObj1->GetX() < pObj2->GetX())
657 {
658 mnTypeId = 10; // AUTOLAYOUT_TEXTOBJ -> outline left, object right
659 }
660 else
661 {
662 mnTypeId = 17; // AUTOLAYOUT_TEXTOVEROBJ -> outline top, object right
663 }
664 }
665 }
666 else if(pObj1->GetName().equals(
667 OUString(RTL_CONSTASCII_USTRINGPARAM("chart"))))
668 {
669 mnTypeId = 7; // AUTOLAYOUT_CHARTTEXT
670 }
671 else if(pObj1->GetName().equals(
672 OUString(RTL_CONSTASCII_USTRINGPARAM("graphic"))))
673 {
674 if(pObj2->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline"))))
675 {
676 // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART
677 mnTypeId = 30;
678 }
679 else
680 {
681 mnTypeId = 9; // AUTOLAYOUT_CLIPTEXT
682 }
683 }
684 else if(pObj1->GetName().equals(
685 OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline"))))
686 {
687 // AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART
688 mnTypeId = 27;
689 }
690 else
691 {
692 if(pObj1->GetX() < pObj2->GetX())
693 {
694 mnTypeId = 13; // AUTOLAYOUT_OBJTEXT -> left, right
695 }
696 else
697 {
698 mnTypeId = 14; // AUTOLAYOUT_OBJOVERTEXT -> top, bottom
699 }
700 }
701 break;
702 }
703 case 4:
704 {
705 SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1);
706 SdXMLPresentationPlaceholderContext* pObj2 = maList.GetObject(2);
707
708 if(pObj1->GetName().equals(
709 OUString(RTL_CONSTASCII_USTRINGPARAM("object"))))
710 {
711 if(pObj1->GetX() < pObj2->GetX())
712 {
713 mnTypeId = 16; // AUTOLAYOUT_2OBJOVERTEXT
714 }
715 else
716 {
717 mnTypeId = 15; // AUTOLAYOUT_2OBJTEXT
718 }
719 }
720 else
721 {
722 mnTypeId = 12; // AUTOLAYOUT_TEXT2OBJ
723 }
724 break;
725 }
726 case 5:
727 {
728 SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1);
729
730 if(pObj1->GetName().equals(
731 OUString(RTL_CONSTASCII_USTRINGPARAM("object"))))
732 {
733 mnTypeId = 18; // AUTOLAYOUT_4OBJ
734 }
735 else
736 {
737 mnTypeId = 33; // AUTOLAYOUT_4CLIPART
738 }
739 break;
740
741 }
742 case 7:
743 {
744 mnTypeId = 33; // AUTOLAYOUT_6CLIPART
745 break;
746 }
747 default:
748 {
749 mnTypeId = 20; // AUTOLAYOUT_NONE
750 break;
751 }
752 }
753 }
754
755 // release remembered contexts, they are no longer needed
756 while(maList.Count())
757 maList.Remove(maList.Count() - 1)->ReleaseRef();
758 }
759 }
760
761 //////////////////////////////////////////////////////////////////////////////
762 //////////////////////////////////////////////////////////////////////////////
763
SdXMLPresentationPlaceholderContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)764 SdXMLPresentationPlaceholderContext::SdXMLPresentationPlaceholderContext(
765 SdXMLImport& rImport,
766 sal_uInt16 nPrfx, const
767 OUString& rLName,
768 const uno::Reference< xml::sax::XAttributeList>& xAttrList)
769 : SvXMLImportContext( rImport, nPrfx, rLName),
770 mnX(0L),
771 mnY(0L),
772 mnWidth(1L),
773 mnHeight(1L)
774 {
775 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
776 for(sal_Int16 i=0; i < nAttrCount; i++)
777 {
778 OUString sAttrName = xAttrList->getNameByIndex(i);
779 OUString aLocalName;
780 sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName);
781 OUString sValue = xAttrList->getValueByIndex(i);
782 const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPresentationPlaceholderAttrTokenMap();
783
784 switch(rAttrTokenMap.Get(nPrefix, aLocalName))
785 {
786 case XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME:
787 {
788 msName = sValue;
789 break;
790 }
791 case XML_TOK_PRESENTATIONPLACEHOLDER_X:
792 {
793 GetSdImport().GetMM100UnitConverter().convertMeasure(mnX, sValue);
794 break;
795 }
796 case XML_TOK_PRESENTATIONPLACEHOLDER_Y:
797 {
798 GetSdImport().GetMM100UnitConverter().convertMeasure(mnY, sValue);
799 break;
800 }
801 case XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH:
802 {
803 GetSdImport().GetMM100UnitConverter().convertMeasure(mnWidth, sValue);
804 break;
805 }
806 case XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT:
807 {
808 GetSdImport().GetMM100UnitConverter().convertMeasure(mnHeight, sValue);
809 break;
810 }
811 }
812 }
813 }
814
815 //////////////////////////////////////////////////////////////////////////////
816
~SdXMLPresentationPlaceholderContext()817 SdXMLPresentationPlaceholderContext::~SdXMLPresentationPlaceholderContext()
818 {
819 }
820
821 //////////////////////////////////////////////////////////////////////////////
822 //////////////////////////////////////////////////////////////////////////////
823
824 TYPEINIT1( SdXMLMasterPageContext, SdXMLGenericPageContext );
825
SdXMLMasterPageContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,uno::Reference<drawing::XShapes> & rShapes)826 SdXMLMasterPageContext::SdXMLMasterPageContext(
827 SdXMLImport& rImport,
828 sal_uInt16 nPrfx,
829 const OUString& rLName,
830 const uno::Reference< xml::sax::XAttributeList>& xAttrList,
831 uno::Reference< drawing::XShapes >& rShapes)
832 : SdXMLGenericPageContext( rImport, nPrfx, rLName, xAttrList, rShapes )
833 {
834 const sal_Bool bHandoutMaster = IsXMLToken( rLName, XML_HANDOUT_MASTER );
835
836 const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
837 for(sal_Int16 i=0; i < nAttrCount; i++)
838 {
839 OUString sAttrName = xAttrList->getNameByIndex( i );
840 OUString aLocalName;
841 sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
842 OUString sValue = xAttrList->getValueByIndex( i );
843 const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetMasterPageAttrTokenMap();
844
845 switch(rAttrTokenMap.Get(nPrefix, aLocalName))
846 {
847 case XML_TOK_MASTERPAGE_NAME:
848 {
849 msName = sValue;
850 break;
851 }
852 case XML_TOK_MASTERPAGE_DISPLAY_NAME:
853 {
854 msDisplayName = sValue;
855 break;
856 }
857 case XML_TOK_MASTERPAGE_PAGE_MASTER_NAME:
858 {
859 msPageMasterName = sValue;
860 break;
861 }
862 case XML_TOK_MASTERPAGE_STYLE_NAME:
863 {
864 msStyleName = sValue;
865 break;
866 }
867 case XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME:
868 {
869 maPageLayoutName = sValue;
870 break;
871 }
872 case XML_TOK_MASTERPAGE_USE_HEADER_NAME:
873 {
874 maUseHeaderDeclName = sValue;
875 break;
876 }
877 case XML_TOK_MASTERPAGE_USE_FOOTER_NAME:
878 {
879 maUseFooterDeclName = sValue;
880 break;
881 }
882 case XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME:
883 {
884 maUseDateTimeDeclName = sValue;
885 break;
886 }
887 }
888 }
889
890 if( !msDisplayName.getLength() )
891 msDisplayName = msName;
892 else if( msDisplayName != msName )
893 GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_MASTER_PAGE, msName, msDisplayName );
894
895 GetImport().GetShapeImport()->startPage( GetLocalShapesContext() );
896
897 // set page name?
898 if(!bHandoutMaster && msDisplayName.getLength() && GetLocalShapesContext().is())
899 {
900 uno::Reference < container::XNamed > xNamed(GetLocalShapesContext(), uno::UNO_QUERY);
901 if(xNamed.is())
902 xNamed->setName(msDisplayName);
903 }
904
905 // set page-master?
906 if(msPageMasterName.getLength())
907 {
908 SetPageMaster( msPageMasterName );
909 }
910
911 SetStyle( msStyleName );
912
913 SetLayout();
914
915 DeleteAllShapes();
916 }
917
918 //////////////////////////////////////////////////////////////////////////////
919
~SdXMLMasterPageContext()920 SdXMLMasterPageContext::~SdXMLMasterPageContext()
921 {
922 }
923
924 //////////////////////////////////////////////////////////////////////////////
925
EndElement()926 void SdXMLMasterPageContext::EndElement()
927 {
928 // set styles on master-page
929 if(msName.getLength() && GetSdImport().GetShapeImport()->GetStylesContext())
930 {
931 SvXMLImportContext* pContext = GetSdImport().GetShapeImport()->GetStylesContext();
932 if( pContext && pContext->ISA( SvXMLStyleContext ) )
933 ((SdXMLStylesContext*)pContext)->SetMasterPageStyles(*this);
934 }
935
936 SdXMLGenericPageContext::EndElement();
937 GetImport().GetShapeImport()->endPage(GetLocalShapesContext());
938 }
939
940 //////////////////////////////////////////////////////////////////////////////
941
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)942 SvXMLImportContext* SdXMLMasterPageContext::CreateChildContext(
943 sal_uInt16 nPrefix,
944 const OUString& rLocalName,
945 const uno::Reference< xml::sax::XAttributeList>& xAttrList )
946 {
947 SvXMLImportContext* pContext = 0;
948 const SvXMLTokenMap& rTokenMap = GetSdImport().GetMasterPageElemTokenMap();
949
950 // some special objects inside style:masterpage context
951 switch(rTokenMap.Get(nPrefix, rLocalName))
952 {
953 case XML_TOK_MASTERPAGE_STYLE:
954 {
955 if(GetSdImport().GetShapeImport()->GetStylesContext())
956 {
957 // style:style inside master-page context -> presentation style
958 XMLShapeStyleContext* pNew = new XMLShapeStyleContext(
959 GetSdImport(), nPrefix, rLocalName, xAttrList,
960 *GetSdImport().GetShapeImport()->GetStylesContext(),
961 XML_STYLE_FAMILY_SD_PRESENTATION_ID);
962
963 // add this style to the outer StylesContext class for later processing
964 if(pNew)
965 {
966 pContext = pNew;
967 GetSdImport().GetShapeImport()->GetStylesContext()->AddStyle(*pNew);
968 }
969 }
970 break;
971 }
972 case XML_TOK_MASTERPAGE_NOTES:
973 {
974 if( GetSdImport().IsImpress() )
975 {
976 // get notes page
977 uno::Reference< presentation::XPresentationPage > xPresPage(GetLocalShapesContext(), uno::UNO_QUERY);
978 if(xPresPage.is())
979 {
980 uno::Reference< drawing::XDrawPage > xNotesDrawPage(xPresPage->getNotesPage(), uno::UNO_QUERY);
981 if(xNotesDrawPage.is())
982 {
983 uno::Reference< drawing::XShapes > xNewShapes(xNotesDrawPage, uno::UNO_QUERY);
984 if(xNewShapes.is())
985 {
986 // presentation:notes inside master-page context
987 pContext = new SdXMLNotesContext( GetSdImport(), nPrefix, rLocalName, xAttrList, xNewShapes);
988 }
989 }
990 }
991 }
992 }
993 }
994
995 // call base class
996 if(!pContext)
997 pContext = SdXMLGenericPageContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
998
999 return pContext;
1000 }
1001
1002 //////////////////////////////////////////////////////////////////////////////
1003 //////////////////////////////////////////////////////////////////////////////
1004
1005 TYPEINIT1( SdXMLStylesContext, SvXMLStyleContext );
1006
SdXMLStylesContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,sal_Bool bIsAutoStyle)1007 SdXMLStylesContext::SdXMLStylesContext(
1008 SdXMLImport& rImport,
1009 sal_uInt16 nPrfx,
1010 const OUString& rLName,
1011 const uno::Reference< xml::sax::XAttributeList >& xAttrList,
1012 sal_Bool bIsAutoStyle)
1013 : SvXMLStylesContext(rImport, nPrfx, rLName, xAttrList),
1014 mbIsAutoStyle(bIsAutoStyle)
1015 {
1016 // #110680#
1017 // Reference< lang::XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory();
1018 Reference< lang::XMultiServiceFactory > xMSF = rImport.getServiceFactory();
1019
1020 mpNumFormatter = new SvNumberFormatter( xMSF, LANGUAGE_SYSTEM );
1021
1022 // #110680#
1023 // mpNumFmtHelper = new SvXMLNumFmtHelper( mpNumFormatter );
1024 mpNumFmtHelper = new SvXMLNumFmtHelper( mpNumFormatter, xMSF );
1025 }
1026
1027 //////////////////////////////////////////////////////////////////////////////
1028
~SdXMLStylesContext()1029 SdXMLStylesContext::~SdXMLStylesContext()
1030 {
1031 delete mpNumFmtHelper;
1032 delete mpNumFormatter;
1033 }
1034
1035 //////////////////////////////////////////////////////////////////////////////
1036
CreateStyleChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)1037 SvXMLStyleContext* SdXMLStylesContext::CreateStyleChildContext(
1038 sal_uInt16 nPrefix,
1039 const OUString& rLocalName,
1040 const uno::Reference< xml::sax::XAttributeList >& xAttrList)
1041 {
1042 SvXMLStyleContext* pContext = 0;
1043 const SvXMLTokenMap& rStyleTokenMap = GetSdImport().GetStylesElemTokenMap();
1044
1045 switch(rStyleTokenMap.Get(nPrefix, rLocalName))
1046 {
1047 case XML_TOK_STYLES_PAGE_MASTER:
1048 {
1049 // style:page-master inside office:styles context
1050 pContext = new SdXMLPageMasterContext(GetSdImport(), nPrefix, rLocalName, xAttrList);
1051 break;
1052 }
1053 case XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT:
1054 {
1055 // style:presentation-page-layout inside office:styles context
1056 pContext = new SdXMLPresentationPageLayoutContext(GetSdImport(), nPrefix, rLocalName, xAttrList);
1057 break;
1058 }
1059 }
1060
1061 if(!pContext)
1062 {
1063 const SvXMLTokenMap& rTokenMap = mpNumFmtHelper->GetStylesElemTokenMap();
1064 sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName );
1065 switch (nToken)
1066 {
1067 case XML_TOK_STYLES_DATE_STYLE:
1068 case XML_TOK_STYLES_TIME_STYLE:
1069 // number:date-style or number:time-style
1070 pContext = new SdXMLNumberFormatImportContext( GetSdImport(), nPrefix, rLocalName, mpNumFmtHelper->getData(), nToken, xAttrList, *this );
1071 break;
1072
1073 case XML_TOK_STYLES_NUMBER_STYLE:
1074 case XML_TOK_STYLES_CURRENCY_STYLE:
1075 case XML_TOK_STYLES_PERCENTAGE_STYLE:
1076 case XML_TOK_STYLES_BOOLEAN_STYLE:
1077 case XML_TOK_STYLES_TEXT_STYLE:
1078 pContext = new SvXMLNumFormatContext( GetSdImport(), nPrefix, rLocalName,
1079 mpNumFmtHelper->getData(), nToken, xAttrList, *this );
1080 break;
1081 }
1082 }
1083
1084 if(!pContext && nPrefix == XML_NAMESPACE_PRESENTATION )
1085 {
1086 if( IsXMLToken( rLocalName, XML_HEADER_DECL ) ||
1087 IsXMLToken( rLocalName, XML_FOOTER_DECL ) ||
1088 IsXMLToken( rLocalName, XML_DATE_TIME_DECL ) )
1089 {
1090 pContext = new SdXMLHeaderFooterDeclContext( GetImport(), nPrefix, rLocalName, xAttrList );
1091 }
1092 }
1093
1094 if(!pContext && (nPrefix == XML_NAMESPACE_TABLE) && IsXMLToken( rLocalName, XML_TABLE_TEMPLATE ) )
1095 {
1096 pContext = GetImport().GetShapeImport()->GetShapeTableImport()->CreateTableTemplateContext(nPrefix, rLocalName, xAttrList );
1097 }
1098
1099 // call base class
1100 if(!pContext)
1101 pContext = SvXMLStylesContext::CreateStyleChildContext(nPrefix, rLocalName, xAttrList);
1102
1103 return pContext;
1104 }
1105
1106 //////////////////////////////////////////////////////////////////////////////
1107
CreateStyleStyleChildContext(sal_uInt16 nFamily,sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<com::sun::star::xml::sax::XAttributeList> & xAttrList)1108 SvXMLStyleContext* SdXMLStylesContext::CreateStyleStyleChildContext(
1109 sal_uInt16 nFamily,
1110 sal_uInt16 nPrefix,
1111 const OUString& rLocalName,
1112 const uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList)
1113 {
1114 SvXMLStyleContext* pContext = 0;
1115
1116 switch( nFamily )
1117 {
1118 case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID:
1119 pContext = new SdXMLDrawingPageStyleContext(GetSdImport(), nPrefix, rLocalName, xAttrList, *this );
1120 break;
1121 case XML_STYLE_FAMILY_TABLE_CELL:
1122 case XML_STYLE_FAMILY_TABLE_COLUMN:
1123 case XML_STYLE_FAMILY_TABLE_ROW:
1124 pContext = new XMLShapeStyleContext( GetSdImport(), nPrefix, rLocalName, xAttrList, *this, nFamily );
1125 break;
1126 }
1127
1128 // call base class
1129 if(!pContext)
1130 pContext = SvXMLStylesContext::CreateStyleStyleChildContext(nFamily, nPrefix, rLocalName, xAttrList);
1131
1132 return pContext;
1133 }
1134
1135 //////////////////////////////////////////////////////////////////////////////
1136
CreateDefaultStyleStyleChildContext(sal_uInt16 nFamily,sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> & xAttrList)1137 SvXMLStyleContext* SdXMLStylesContext::CreateDefaultStyleStyleChildContext(
1138 sal_uInt16 nFamily,
1139 sal_uInt16 nPrefix,
1140 const OUString& rLocalName,
1141 const Reference< XAttributeList > & xAttrList )
1142 {
1143 SvXMLStyleContext* pContext = 0;
1144
1145 switch( nFamily )
1146 {
1147 case XML_STYLE_FAMILY_SD_GRAPHICS_ID:
1148 pContext = new XMLGraphicsDefaultStyle(GetSdImport(), nPrefix, rLocalName, xAttrList, *this );
1149 break;
1150 }
1151
1152 // call base class
1153 if(!pContext)
1154 pContext = SvXMLStylesContext::CreateDefaultStyleStyleChildContext(nFamily, nPrefix, rLocalName, xAttrList);
1155
1156 return pContext;
1157 }
1158
1159 //////////////////////////////////////////////////////////////////////////////
1160
GetFamily(const OUString & rFamily) const1161 sal_uInt16 SdXMLStylesContext::GetFamily( const OUString& rFamily ) const
1162 {
1163 // if(rFamily.getLength())
1164 // {
1165 // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME))))
1166 // return XML_STYLE_FAMILY_SD_GRAPHICS_ID;
1167 //
1168 // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_NAME))))
1169 // return XML_STYLE_FAMILY_SD_PRESENTATION_ID;
1170 //
1171 // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_POOL_NAME))))
1172 // return XML_STYLE_FAMILY_SD_POOL_ID;
1173 //
1174 // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_DRAWINGPAGE_NAME))))
1175 // return XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID;
1176 // }
1177
1178 // call base class
1179 return SvXMLStylesContext::GetFamily(rFamily);
1180 }
1181
1182 //////////////////////////////////////////////////////////////////////////////
1183
GetImportPropertyMapper(sal_uInt16 nFamily) const1184 UniReference< SvXMLImportPropertyMapper > SdXMLStylesContext::GetImportPropertyMapper(
1185 sal_uInt16 nFamily) const
1186 {
1187 UniReference < SvXMLImportPropertyMapper > xMapper;
1188
1189 // if(XML_STYLE_FAMILY_SD_GRAPHICS_ID == nFamily
1190 // || XML_STYLE_FAMILY_SD_PRESENTATION_ID == nFamily
1191 // || XML_STYLE_FAMILY_SD_POOL_ID == nFamily)
1192 // {
1193 // if(!xPropImpPropMapper.is())
1194 // {
1195 // UniReference< XMLShapeImportHelper > aImpHelper = ((SvXMLImport&)GetImport()).GetShapeImport();
1196 // ((SdXMLStylesContext*)this)->xPropImpPropMapper =
1197 // new SvXMLImportPropertyMapper(aImpHelper->GetPropertySetMapper());
1198 // }
1199 // xMapper = xPropImpPropMapper;
1200 // return xMapper;
1201 // }
1202
1203 switch( nFamily )
1204 {
1205 case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID:
1206 {
1207 if(!xPresImpPropMapper.is())
1208 {
1209 UniReference< XMLShapeImportHelper > aImpHelper = ((SvXMLImport&)GetImport()).GetShapeImport();
1210 ((SdXMLStylesContext*)this)->xPresImpPropMapper =
1211 aImpHelper->GetPresPagePropsMapper();
1212 }
1213 xMapper = xPresImpPropMapper;
1214 break;
1215 }
1216
1217 case XML_STYLE_FAMILY_TABLE_COLUMN:
1218 case XML_STYLE_FAMILY_TABLE_ROW:
1219 case XML_STYLE_FAMILY_TABLE_CELL:
1220 {
1221 const rtl::Reference< XMLTableImport >& xTableImport( const_cast< SvXMLImport& >( GetImport() ).GetShapeImport()->GetShapeTableImport() );
1222
1223 switch( nFamily )
1224 {
1225 case XML_STYLE_FAMILY_TABLE_COLUMN: xMapper = xTableImport->GetColumnImportPropertySetMapper().get(); break;
1226 case XML_STYLE_FAMILY_TABLE_ROW: xMapper = xTableImport->GetRowImportPropertySetMapper().get(); break;
1227 case XML_STYLE_FAMILY_TABLE_CELL: xMapper = xTableImport->GetCellImportPropertySetMapper().get(); break;
1228 }
1229 break;
1230 }
1231 }
1232
1233 // call base class
1234 if( !xMapper.is() )
1235 xMapper = SvXMLStylesContext::GetImportPropertyMapper(nFamily);
1236 return xMapper;
1237 }
1238
1239 //////////////////////////////////////////////////////////////////////////////
1240 // Process all style and object info
1241 //
EndElement()1242 void SdXMLStylesContext::EndElement()
1243 {
1244 if(mbIsAutoStyle)
1245 {
1246 // AutoStyles for text import
1247 GetImport().GetTextImport()->SetAutoStyles( this );
1248
1249 // AutoStyles for chart
1250 GetImport().GetChartImport()->SetAutoStylesContext( this );
1251
1252 // AutoStyles for forms
1253 GetImport().GetFormImport()->setAutoStyleContext( this );
1254
1255 // associate AutoStyles with styles in preparation to setting Styles on shapes
1256 for(sal_uInt32 a(0L); a < GetStyleCount(); a++)
1257 {
1258 const SvXMLStyleContext* pStyle = GetStyle(a);
1259 if(pStyle && pStyle->ISA(XMLShapeStyleContext))
1260 {
1261 XMLShapeStyleContext* pDocStyle = (XMLShapeStyleContext*)pStyle;
1262 // pDocStyle->Filter();
1263
1264 SvXMLStylesContext* pStylesContext = GetSdImport().GetShapeImport()->GetStylesContext();
1265 if( pStylesContext )
1266 {
1267 pStyle = pStylesContext->FindStyleChildContext(pStyle->GetFamily(), pStyle->GetParentName());
1268
1269 if(pStyle && pStyle->ISA(XMLShapeStyleContext))
1270 {
1271 XMLShapeStyleContext* pParentStyle = (XMLShapeStyleContext*)pStyle;
1272 if(pParentStyle->GetStyle().is())
1273 {
1274 pDocStyle->SetStyle(pParentStyle->GetStyle());
1275 }
1276 }
1277 }
1278 }
1279 }
1280
1281 FinishStyles( false );
1282 }
1283 else
1284 {
1285 // Process styles list
1286 ImpSetGraphicStyles();
1287 ImpSetCellStyles();
1288 GetImport().GetShapeImport()->GetShapeTableImport()->finishStyles();
1289
1290 // put style infos in the info set for other components ( content import f.e. )
1291 uno::Reference< beans::XPropertySet > xInfoSet( GetImport().getImportInfo() );
1292 if( xInfoSet.is() )
1293 {
1294 uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
1295
1296 if( xInfoSetInfo->hasPropertyByName( OUString( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ) ) )
1297 xInfoSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ), uno::makeAny( getPageLayouts() ) );
1298 }
1299
1300 }
1301 }
1302
1303 //////////////////////////////////////////////////////////////////////////////
1304 // set master-page styles (all with family="presentation" and a special
1305 // prefix) on given master-page.
1306 //
SetMasterPageStyles(SdXMLMasterPageContext & rMaster) const1307 void SdXMLStylesContext::SetMasterPageStyles(SdXMLMasterPageContext& rMaster) const
1308 {
1309 UniString sPrefix( rMaster.GetDisplayName());
1310 sPrefix += sal_Unicode('-');
1311
1312 if(GetSdImport().GetLocalDocStyleFamilies().is() && GetSdImport().GetLocalDocStyleFamilies()->hasByName(rMaster.GetDisplayName())) try
1313 {
1314 uno::Reference< container::XNameAccess > xMasterPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(rMaster.GetDisplayName()), UNO_QUERY_THROW );
1315 ImpSetGraphicStyles(xMasterPageStyles, XML_STYLE_FAMILY_SD_PRESENTATION_ID, sPrefix);
1316 }
1317 catch( uno::Exception& )
1318 {
1319 DBG_ERROR( "xmloff::SdXMLStylesContext::SetMasterPageStyles(), exception caught!" );
1320 }
1321 }
1322
1323 //////////////////////////////////////////////////////////////////////////////
1324 // Process styles list:
1325 // set graphic styles (all with family="graphics"). Remember xStyle at list element.
1326 //
ImpSetGraphicStyles() const1327 void SdXMLStylesContext::ImpSetGraphicStyles() const
1328 {
1329 if(GetSdImport().GetLocalDocStyleFamilies().is()) try
1330 {
1331 const OUString sGraphicStyleName(OUString(RTL_CONSTASCII_USTRINGPARAM("graphics")));
1332 uno::Reference< container::XNameAccess > xGraphicPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(sGraphicStyleName), uno::UNO_QUERY_THROW );
1333
1334 UniString aPrefix;
1335 ImpSetGraphicStyles(xGraphicPageStyles, XML_STYLE_FAMILY_SD_GRAPHICS_ID, aPrefix);
1336 }
1337 catch( uno::Exception& )
1338 {
1339 DBG_ERROR( "xmloff::SdXMLStylesContext::ImpSetGraphicStyles(), exception caught!" );
1340 }
1341 }
1342
ImpSetCellStyles() const1343 void SdXMLStylesContext::ImpSetCellStyles() const
1344 {
1345 if(GetSdImport().GetLocalDocStyleFamilies().is()) try
1346 {
1347 const OUString sCellStyleName(OUString(RTL_CONSTASCII_USTRINGPARAM("cell")));
1348 uno::Reference< container::XNameAccess > xGraphicPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(sCellStyleName), uno::UNO_QUERY_THROW );
1349
1350 UniString aPrefix;
1351 ImpSetGraphicStyles(xGraphicPageStyles, XML_STYLE_FAMILY_TABLE_CELL, aPrefix);
1352 }
1353 catch( uno::Exception& )
1354 {
1355 DBG_ERROR( "xmloff::SdXMLStylesContext::ImpSetCellStyles(), exception caught!" );
1356 }
1357 }
1358
1359 //////////////////////////////////////////////////////////////////////////////
1360 // help function used by ImpSetGraphicStyles() and ImpSetMasterPageStyles()
1361 //
ImpSetGraphicStyles(uno::Reference<container::XNameAccess> & xPageStyles,sal_uInt16 nFamily,const UniString & rPrefix) const1362 void SdXMLStylesContext::ImpSetGraphicStyles( uno::Reference< container::XNameAccess >& xPageStyles, sal_uInt16 nFamily, const UniString& rPrefix) const
1363 {
1364 xub_StrLen nPrefLen(rPrefix.Len());
1365
1366 sal_uInt32 a;
1367
1368 // set defaults
1369 for( a = 0; a < GetStyleCount(); a++)
1370 {
1371 const SvXMLStyleContext* pStyle = GetStyle(a);
1372
1373 if(nFamily == pStyle->GetFamily() && pStyle->IsDefaultStyle())
1374 {
1375 ((SvXMLStyleContext*)pStyle)->SetDefaults();
1376 }
1377 }
1378
1379 // create all styles and set properties
1380 for( a = 0; a < GetStyleCount(); a++)
1381 {
1382 try
1383 {
1384 const SvXMLStyleContext* pStyle = GetStyle(a);
1385 if(nFamily == pStyle->GetFamily() && !pStyle->IsDefaultStyle())
1386 {
1387 OUString aStyleName(pStyle->GetDisplayName());
1388 if( nPrefLen )
1389 {
1390 sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( sal_Unicode('-') ) + 1;
1391 if( (nPrefLen != nStylePrefLen) || (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) )
1392 continue;
1393
1394 aStyleName = aStyleName.copy( nPrefLen );
1395 }
1396
1397 uno::Reference< style::XStyle > xStyle;
1398 if(xPageStyles->hasByName(aStyleName))
1399 {
1400 xPageStyles->getByName(aStyleName) >>= xStyle;
1401
1402 // set properties of existing styles to default
1403 uno::Reference< beans::XPropertySet > xPropSet( xStyle, uno::UNO_QUERY );
1404 uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
1405 if( xPropSet.is() )
1406 xPropSetInfo = xPropSet->getPropertySetInfo();
1407
1408 uno::Reference< beans::XPropertyState > xPropState( xStyle, uno::UNO_QUERY );
1409
1410 if( xPropState.is() )
1411 {
1412 UniReference < XMLPropertySetMapper > xPrMap;
1413 UniReference < SvXMLImportPropertyMapper > xImpPrMap = GetImportPropertyMapper( nFamily );
1414 DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" );
1415 if( xImpPrMap.is() )
1416 xPrMap = xImpPrMap->getPropertySetMapper();
1417 if( xPrMap.is() )
1418 {
1419 const sal_Int32 nCount = xPrMap->GetEntryCount();
1420 for( sal_Int32 i = 0; i < nCount; i++ )
1421 {
1422 const OUString& rName = xPrMap->GetEntryAPIName( i );
1423 if( xPropSetInfo->hasPropertyByName( rName ) && beans::PropertyState_DIRECT_VALUE == xPropState->getPropertyState( rName ) )
1424 {
1425 xPropState->setPropertyToDefault( rName );
1426 }
1427 }
1428 }
1429 }
1430 }
1431 else
1432 {
1433 // graphics style does not exist, create and add it
1434 uno::Reference< lang::XSingleServiceFactory > xServiceFact(xPageStyles, uno::UNO_QUERY);
1435 if(xServiceFact.is())
1436 {
1437 uno::Reference< style::XStyle > xNewStyle( xServiceFact->createInstance(), uno::UNO_QUERY);
1438
1439 if(xNewStyle.is())
1440 {
1441 // remember style
1442 xStyle = xNewStyle;
1443
1444 // add new style to graphics style pool
1445 uno::Reference< container::XNameContainer > xInsertContainer(xPageStyles, uno::UNO_QUERY);
1446 if(xInsertContainer.is())
1447 xInsertContainer->insertByName(aStyleName, uno::Any( xStyle ) );
1448 }
1449 }
1450 }
1451
1452 if(xStyle.is())
1453 {
1454 // set properties at style
1455 XMLPropStyleContext* pPropStyle = dynamic_cast< XMLPropStyleContext* >( const_cast< SvXMLStyleContext* >( pStyle ) );
1456 uno::Reference< beans::XPropertySet > xPropSet(xStyle, uno::UNO_QUERY);
1457
1458 if(xPropSet.is() && pPropStyle)
1459 {
1460 pPropStyle->FillPropertySet(xPropSet);
1461 pPropStyle->SetStyle(xStyle);
1462 }
1463 }
1464 }
1465 }
1466 catch( Exception& e)
1467 {
1468 uno::Sequence<OUString> aSeq(0);
1469 const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
1470 }
1471 }
1472
1473 // now set parents for all styles (when necessary)
1474 for(a = 0L; a < GetStyleCount(); a++)
1475 {
1476 const SvXMLStyleContext* pStyle = GetStyle(a);
1477
1478 if(pStyle && pStyle->GetName().getLength() && (nFamily == pStyle->GetFamily())) try
1479 {
1480 OUString aStyleName(pStyle->GetDisplayName());
1481 if( nPrefLen )
1482 {
1483 sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( sal_Unicode('-') ) + 1;
1484 if( (nPrefLen != nStylePrefLen) || (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) )
1485 continue;
1486
1487 aStyleName = aStyleName.copy( nPrefLen );
1488 }
1489
1490 uno::Reference< style::XStyle > xStyle( xPageStyles->getByName(aStyleName), UNO_QUERY );
1491 if(xStyle.is())
1492 {
1493 // set parent style name
1494 ::rtl::OUString sParentStyleDisplayName( const_cast< SvXMLImport& >( GetImport() ).GetStyleDisplayName( pStyle->GetFamily(), pStyle->GetParentName() ) );
1495 if( nPrefLen )
1496 {
1497 sal_Int32 nStylePrefLen = sParentStyleDisplayName.lastIndexOf( sal_Unicode('-') ) + 1;
1498 if( (nPrefLen != nStylePrefLen) || (sParentStyleDisplayName.compareTo( rPrefix, nPrefLen ) != 0) )
1499 continue;
1500
1501 sParentStyleDisplayName = sParentStyleDisplayName.copy( nPrefLen );
1502 }
1503 xStyle->setParentStyle( sParentStyleDisplayName );
1504 }
1505 }
1506 catch( Exception& e )
1507 {
1508 uno::Sequence<OUString> aSeq(0);
1509 const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
1510 }
1511 }
1512 }
1513
1514 ////////////////////////////////////////////////////////////////////////////////
1515 // helper function to create the uno component that hold the mappings from
1516 // xml auto layout name to internal autolayout id
1517
getPageLayouts() const1518 uno::Reference< container::XNameAccess > SdXMLStylesContext::getPageLayouts() const
1519 {
1520 uno::Reference< container::XNameContainer > xLayouts( comphelper::NameContainer_createInstance( ::getCppuType((const sal_Int32*)0)) );
1521
1522 for(sal_uInt32 a(0L); a < GetStyleCount(); a++)
1523 {
1524 const SvXMLStyleContext* pStyle = GetStyle(a);
1525 if(pStyle && pStyle->ISA(SdXMLPresentationPageLayoutContext))
1526 {
1527 xLayouts->insertByName( pStyle->GetName(), uno::makeAny(
1528 (sal_Int32)((SdXMLPresentationPageLayoutContext*)pStyle)->GetTypeId() ) );
1529 }
1530 }
1531
1532 return uno::Reference< container::XNameAccess >::query( xLayouts );
1533 }
1534
1535 ////////////////////////////////////////////////////////////////////////////////
1536 ////////////////////////////////////////////////////////////////////////////////
1537 //
1538 TYPEINIT1( SdXMLMasterStylesContext, SvXMLImportContext );
1539
SdXMLMasterStylesContext(SdXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName)1540 SdXMLMasterStylesContext::SdXMLMasterStylesContext(
1541 SdXMLImport& rImport,
1542 sal_uInt16 nPrfx,
1543 const rtl::OUString& rLName)
1544 : SvXMLImportContext( rImport, nPrfx, rLName)
1545 {
1546 }
1547
~SdXMLMasterStylesContext()1548 SdXMLMasterStylesContext::~SdXMLMasterStylesContext()
1549 {
1550 while(maMasterPageList.Count())
1551 maMasterPageList.Remove(maMasterPageList.Count() - 1)->ReleaseRef();
1552 }
1553
CreateChildContext(sal_uInt16 nPrefix,const rtl::OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)1554 SvXMLImportContext* SdXMLMasterStylesContext::CreateChildContext(
1555 sal_uInt16 nPrefix,
1556 const rtl::OUString& rLocalName,
1557 const uno::Reference< xml::sax::XAttributeList >& xAttrList)
1558 {
1559 SvXMLImportContext* pContext = 0;
1560
1561 if(nPrefix == XML_NAMESPACE_STYLE
1562 && IsXMLToken( rLocalName, XML_MASTER_PAGE ) )
1563 {
1564 // style:masterpage inside office:styles context
1565 uno::Reference< drawing::XDrawPage > xNewMasterPage;
1566 uno::Reference< drawing::XDrawPages > xMasterPages(GetSdImport().GetLocalMasterPages(), uno::UNO_QUERY);
1567
1568 if( xMasterPages.is() )
1569 {
1570 if(GetSdImport().GetNewMasterPageCount() + 1 > xMasterPages->getCount())
1571 {
1572 // new page, create and insert
1573 xNewMasterPage = xMasterPages->insertNewByIndex(xMasterPages->getCount());
1574 }
1575 else
1576 {
1577 // existing page, use it
1578 xMasterPages->getByIndex(GetSdImport().GetNewMasterPageCount()) >>= xNewMasterPage;
1579 }
1580
1581 // increment global import page counter
1582 GetSdImport().IncrementNewMasterPageCount();
1583
1584 if(xNewMasterPage.is())
1585 {
1586 uno::Reference< drawing::XShapes > xNewShapes(xNewMasterPage, uno::UNO_QUERY);
1587 if(xNewShapes.is() && GetSdImport().GetShapeImport()->GetStylesContext())
1588 {
1589 pContext = new SdXMLMasterPageContext(GetSdImport(),
1590 nPrefix, rLocalName, xAttrList, xNewShapes);
1591
1592 if(pContext)
1593 {
1594 pContext->AddRef();
1595 maMasterPageList.Insert((SdXMLMasterPageContext*)pContext, LIST_APPEND);
1596 }
1597 }
1598 }
1599 }
1600 }
1601 else if(nPrefix == XML_NAMESPACE_STYLE
1602 && IsXMLToken( rLocalName, XML_HANDOUT_MASTER ) )
1603 {
1604 uno::Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetSdImport().GetModel(), uno::UNO_QUERY );
1605 if( xHandoutSupp.is() )
1606 {
1607 uno::Reference< drawing::XShapes > xHandoutPage( xHandoutSupp->getHandoutMasterPage(), uno::UNO_QUERY );
1608 if(xHandoutPage.is() && GetSdImport().GetShapeImport()->GetStylesContext())
1609 {
1610 pContext = new SdXMLMasterPageContext(GetSdImport(),
1611 nPrefix, rLocalName, xAttrList, xHandoutPage);
1612 }
1613 }
1614 }
1615 else if( (nPrefix == XML_NAMESPACE_DRAW )&& IsXMLToken( rLocalName, XML_LAYER_SET ) )
1616 {
1617 pContext = new SdXMLLayerSetContext( GetImport(), nPrefix, rLocalName, xAttrList );
1618 }
1619
1620 // call base class
1621 if(!pContext)
1622 pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
1623
1624 return pContext;
1625 }
1626
1627 ///////////////////////////////////////////////////////////////////////
1628
SdXMLHeaderFooterDeclContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const::rtl::OUString & rLName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList)1629 SdXMLHeaderFooterDeclContext::SdXMLHeaderFooterDeclContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
1630 const ::rtl::OUString& rLName,
1631 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
1632 : SvXMLStyleContext( rImport, nPrfx, rLName, xAttrList )
1633 {
1634 const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
1635 for(sal_Int16 i=0; i < nAttrCount; i++)
1636 {
1637 OUString aLocalName;
1638 const OUString aValue( xAttrList->getValueByIndex(i) );
1639 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName);
1640
1641 if( nPrefix == XML_NAMESPACE_PRESENTATION )
1642 {
1643 if( IsXMLToken( aLocalName, XML_NAME ) )
1644 {
1645 maStrName = aValue;
1646 }
1647 else if( IsXMLToken( aLocalName, XML_SOURCE ) )
1648 {
1649 mbFixed = IsXMLToken( aValue, XML_FIXED );
1650 }
1651 }
1652 else if( nPrefix == XML_NAMESPACE_STYLE )
1653 {
1654 if( IsXMLToken( aLocalName, XML_DATA_STYLE_NAME ) )
1655 {
1656 maStrDateTimeFormat = aValue;
1657 }
1658 }
1659 }
1660 }
1661
IsTransient() const1662 sal_Bool SdXMLHeaderFooterDeclContext::IsTransient() const
1663 {
1664 return sal_True;
1665 }
1666
EndElement()1667 void SdXMLHeaderFooterDeclContext::EndElement()
1668 {
1669 SdXMLImport& rImport = *dynamic_cast< SdXMLImport* >( &GetImport() );
1670 if( IsXMLToken( GetLocalName(), XML_HEADER_DECL ) )
1671 {
1672 rImport.AddHeaderDecl( maStrName, maStrText );
1673 }
1674 else if( IsXMLToken( GetLocalName(), XML_FOOTER_DECL ) )
1675 {
1676 rImport.AddFooterDecl( maStrName, maStrText );
1677 }
1678 else if( IsXMLToken( GetLocalName(), XML_DATE_TIME_DECL ) )
1679 {
1680 rImport.AddDateTimeDecl( maStrName, maStrText, mbFixed, maStrDateTimeFormat );
1681 }
1682 }
1683
Characters(const::rtl::OUString & rChars)1684 void SdXMLHeaderFooterDeclContext::Characters( const ::rtl::OUString& rChars )
1685 {
1686 maStrText += rChars;
1687 }
1688
1689