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 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 102 SdXMLDrawingPagePropertySetContext::~SdXMLDrawingPagePropertySetContext() 103 { 104 } 105 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 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 186 SdXMLDrawingPageStyleContext::~SdXMLDrawingPageStyleContext() 187 { 188 } 189 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 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# 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 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 392 SdXMLPageMasterStyleContext::~SdXMLPageMasterStyleContext() 393 { 394 } 395 396 ////////////////////////////////////////////////////////////////////////////// 397 ////////////////////////////////////////////////////////////////////////////// 398 399 TYPEINIT1( SdXMLPageMasterContext, SvXMLStyleContext ); 400 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 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 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 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 503 SdXMLPresentationPageLayoutContext::~SdXMLPresentationPageLayoutContext() 504 { 505 } 506 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 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 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 817 SdXMLPresentationPlaceholderContext::~SdXMLPresentationPlaceholderContext() 818 { 819 } 820 821 ////////////////////////////////////////////////////////////////////////////// 822 ////////////////////////////////////////////////////////////////////////////// 823 824 TYPEINIT1( SdXMLMasterPageContext, SdXMLGenericPageContext ); 825 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 920 SdXMLMasterPageContext::~SdXMLMasterPageContext() 921 { 922 } 923 924 ////////////////////////////////////////////////////////////////////////////// 925 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 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 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 1029 SdXMLStylesContext::~SdXMLStylesContext() 1030 { 1031 delete mpNumFmtHelper; 1032 delete mpNumFormatter; 1033 } 1034 1035 ////////////////////////////////////////////////////////////////////////////// 1036 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 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 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 1161 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 1184 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 // 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 // 1307 void SdXMLStylesContext::SetMasterPageStyles(SdXMLMasterPageContext& rMaster) const 1308 { 1309 UniString sPrefix(rMaster.GetDisplayName(), (sal_uInt16)rMaster.GetDisplayName().getLength()); 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 // 1327 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 1343 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 // 1362 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 1518 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 1540 SdXMLMasterStylesContext::SdXMLMasterStylesContext( 1541 SdXMLImport& rImport, 1542 sal_uInt16 nPrfx, 1543 const rtl::OUString& rLName) 1544 : SvXMLImportContext( rImport, nPrfx, rLName) 1545 { 1546 } 1547 1548 SdXMLMasterStylesContext::~SdXMLMasterStylesContext() 1549 { 1550 while(maMasterPageList.Count()) 1551 maMasterPageList.Remove(maMasterPageList.Count() - 1)->ReleaseRef(); 1552 } 1553 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 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 1662 sal_Bool SdXMLHeaderFooterDeclContext::IsTransient() const 1663 { 1664 return sal_True; 1665 } 1666 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 1684 void SdXMLHeaderFooterDeclContext::Characters( const ::rtl::OUString& rChars ) 1685 { 1686 maStrText += rChars; 1687 } 1688 1689