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 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_xmloff.hxx" 24 25 #include <tools/debug.hxx> 26 #ifndef __SGI_STL_SET 27 #include <set> 28 #endif 29 #include "xmloff/xmlnmspe.hxx" 30 #include <xmloff/xmltoken.hxx> 31 #include <xmloff/xmlprcon.hxx> 32 #include <com/sun/star/style/XStyle.hpp> 33 #include <com/sun/star/style/XAutoStyleFamily.hpp> 34 #include <com/sun/star/container/XNameContainer.hpp> 35 #include <com/sun/star/beans/XPropertySet.hpp> 36 #include <com/sun/star/beans/XPropertyState.hpp> 37 #include <com/sun/star/beans/XMultiPropertyStates.hpp> 38 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 39 #include <xmloff/xmlimp.hxx> 40 #include <xmloff/prstylei.hxx> 41 #include <xmloff/attrlist.hxx> 42 #include "xmloff/xmlerror.hxx" 43 44 //UUUU 45 #include <com/sun/star/drawing/FillStyle.hpp> 46 47 using ::rtl::OUString; 48 using ::rtl::OUStringBuffer; 49 50 using namespace ::com::sun::star; 51 using namespace ::com::sun::star::uno; 52 using namespace ::com::sun::star::xml::sax; 53 using namespace ::com::sun::star::style; 54 using namespace ::com::sun::star::container; 55 using namespace ::com::sun::star::beans; 56 using namespace ::com::sun::star::lang; 57 using namespace ::xmloff::token; 58 59 //UUUU 60 using namespace com::sun::star::drawing; 61 62 void XMLPropStyleContext::SetAttribute( sal_uInt16 nPrefixKey, 63 const OUString& rLocalName, 64 const OUString& rValue ) 65 { 66 if( XML_NAMESPACE_STYLE == nPrefixKey && IsXMLToken( rLocalName, XML_FAMILY ) ) 67 { 68 DBG_ASSERT( GetFamily() == ((SvXMLStylesContext *)&mxStyles)->GetFamily( rValue ), "unexpected style family" ); 69 } 70 else 71 { 72 SvXMLStyleContext::SetAttribute( nPrefixKey, rLocalName, rValue ); 73 } 74 } 75 76 TYPEINIT1( XMLPropStyleContext, SvXMLStyleContext ); 77 78 79 //UUUU 80 OldFillStyleDefinitionSet XMLPropStyleContext::maStandardSet; 81 OldFillStyleDefinitionSet XMLPropStyleContext::maHeaderSet; 82 OldFillStyleDefinitionSet XMLPropStyleContext::maFooterSet; 83 OldFillStyleDefinitionSet XMLPropStyleContext::maParaSet; 84 85 XMLPropStyleContext::XMLPropStyleContext( 86 SvXMLImport& rImport, 87 sal_uInt16 nPrfx, 88 const OUString& rLName, 89 const Reference< XAttributeList > & xAttrList, 90 SvXMLStylesContext& rStyles, 91 sal_uInt16 nFamily, 92 sal_Bool bDefault) 93 : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, nFamily, bDefault), 94 msIsPhysical(RTL_CONSTASCII_USTRINGPARAM("IsPhysical")), 95 msFollowStyle(RTL_CONSTASCII_USTRINGPARAM("FollowStyle")), 96 mxStyles(&rStyles) 97 { 98 } 99 100 XMLPropStyleContext::~XMLPropStyleContext() 101 { 102 } 103 104 const OldFillStyleDefinitionSet& XMLPropStyleContext::getStandardSet() 105 { 106 if(maStandardSet.empty()) 107 { 108 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackColorRGB"))); 109 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackTransparent"))); 110 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackColorTransparency"))); 111 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackGraphicURL"))); 112 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackGraphicFilter"))); 113 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackGraphicLocation"))); 114 maStandardSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackGraphicTransparency"))); 115 } 116 117 return maStandardSet; 118 } 119 120 const OldFillStyleDefinitionSet& XMLPropStyleContext::getHeaderSet() 121 { 122 if(maHeaderSet.empty()) 123 { 124 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackColorRGB"))); 125 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackTransparent"))); 126 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackColorTransparency"))); 127 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackGraphicURL"))); 128 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackGraphicFilter"))); 129 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackGraphicLocation"))); 130 maHeaderSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBackGraphicTransparency"))); 131 } 132 133 return maHeaderSet; 134 } 135 136 const OldFillStyleDefinitionSet& XMLPropStyleContext::getFooterSet() 137 { 138 if(maFooterSet.empty()) 139 { 140 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackColorRGB"))); 141 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackTransparent"))); 142 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackColorTransparency"))); 143 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackGraphicURL"))); 144 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackGraphicFilter"))); 145 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackGraphicLocation"))); 146 maFooterSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBackGraphicTransparency"))); 147 } 148 149 return maFooterSet; 150 } 151 152 const OldFillStyleDefinitionSet& XMLPropStyleContext::getParaSet() 153 { 154 if(maParaSet.empty()) 155 { 156 // Caution: here it is *not* 'ParaBackColorRGB' as it should be, but indeed 157 // 'ParaBackColor' is used, see aXMLParaPropMap definition (line 313) 158 maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackColor"))); 159 maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackTransparent"))); 160 maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackGraphicLocation"))); 161 maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackGraphicFilter"))); 162 maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackGraphicURL"))); 163 164 // These are not used in aXMLParaPropMap definition, thus not needed here 165 // maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackColorTransparency"))); 166 // maParaSet.insert(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackGraphicTransparency"))); 167 } 168 169 return maParaSet; 170 } 171 172 SvXMLImportContext *XMLPropStyleContext::CreateChildContext( 173 sal_uInt16 nPrefix, 174 const OUString& rLocalName, 175 const Reference< XAttributeList > & xAttrList ) 176 { 177 SvXMLImportContext *pContext = 0; 178 179 sal_uInt32 nFamily = 0; 180 if( XML_NAMESPACE_STYLE == nPrefix ) 181 { 182 if( IsXMLToken( rLocalName, XML_GRAPHIC_PROPERTIES ) ) 183 nFamily = XML_TYPE_PROP_GRAPHIC; 184 else if( IsXMLToken( rLocalName, XML_DRAWING_PAGE_PROPERTIES ) ) 185 nFamily = XML_TYPE_PROP_DRAWING_PAGE; 186 else if( IsXMLToken( rLocalName, XML_TEXT_PROPERTIES ) ) 187 nFamily = XML_TYPE_PROP_TEXT; 188 else if( IsXMLToken( rLocalName, XML_PARAGRAPH_PROPERTIES ) ) 189 nFamily = XML_TYPE_PROP_PARAGRAPH; 190 else if( IsXMLToken( rLocalName, XML_RUBY_PROPERTIES ) ) 191 nFamily = XML_TYPE_PROP_RUBY; 192 else if( IsXMLToken( rLocalName, XML_SECTION_PROPERTIES ) ) 193 nFamily = XML_TYPE_PROP_SECTION; 194 else if( IsXMLToken( rLocalName, XML_TABLE_PROPERTIES ) ) 195 nFamily = XML_TYPE_PROP_TABLE; 196 else if( IsXMLToken( rLocalName, XML_TABLE_COLUMN_PROPERTIES ) ) 197 nFamily = XML_TYPE_PROP_TABLE_COLUMN; 198 else if( IsXMLToken( rLocalName, XML_TABLE_ROW_PROPERTIES ) ) 199 nFamily = XML_TYPE_PROP_TABLE_ROW; 200 else if( IsXMLToken( rLocalName, XML_TABLE_CELL_PROPERTIES ) ) 201 nFamily = XML_TYPE_PROP_TABLE_CELL; 202 else if( IsXMLToken( rLocalName, XML_CHART_PROPERTIES ) ) 203 nFamily = XML_TYPE_PROP_CHART; 204 } 205 if( nFamily ) 206 { 207 UniReference < SvXMLImportPropertyMapper > xImpPrMap = 208 ((SvXMLStylesContext *)&mxStyles)->GetImportPropertyMapper( 209 GetFamily() ); 210 if( xImpPrMap.is() ) 211 pContext = new SvXMLPropertySetContext( GetImport(), nPrefix, 212 rLocalName, xAttrList, 213 nFamily, 214 maProperties, 215 xImpPrMap ); 216 } 217 218 if( !pContext ) 219 pContext = SvXMLStyleContext::CreateChildContext( nPrefix, rLocalName, 220 xAttrList ); 221 222 return pContext; 223 } 224 225 void XMLPropStyleContext::FillPropertySet( 226 const Reference< XPropertySet > & rPropSet ) 227 { 228 UniReference < SvXMLImportPropertyMapper > xImpPrMap = 229 ((SvXMLStylesContext *)&mxStyles)->GetImportPropertyMapper( 230 GetFamily() ); 231 DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" ); 232 if( xImpPrMap.is() ) 233 xImpPrMap->FillPropertySet( maProperties, rPropSet ); 234 } 235 236 void XMLPropStyleContext::SetDefaults() 237 { 238 } 239 240 Reference < XStyle > XMLPropStyleContext::Create() 241 { 242 Reference < XStyle > xNewStyle; 243 244 OUString sServiceName( 245 ((SvXMLStylesContext *)&mxStyles)->GetServiceName( GetFamily() ) ); 246 if( sServiceName.getLength() ) 247 { 248 Reference< XMultiServiceFactory > xFactory( GetImport().GetModel(), 249 UNO_QUERY ); 250 if( xFactory.is() ) 251 { 252 Reference < XInterface > xIfc = 253 xFactory->createInstance( sServiceName ); 254 if( xIfc.is() ) 255 xNewStyle = Reference < XStyle >( xIfc, UNO_QUERY ); 256 } 257 } 258 259 return xNewStyle; 260 } 261 262 typedef ::std::set < OUString, ::comphelper::UStringLess > PropertyNameSet; 263 264 void XMLPropStyleContext::CreateAndInsert( sal_Bool bOverwrite ) 265 { 266 SvXMLStylesContext* pSvXMLStylesContext = static_cast< SvXMLStylesContext* >(&mxStyles); 267 UniReference < SvXMLImportPropertyMapper > xImpPrMap = pSvXMLStylesContext->GetImportPropertyMapper(GetFamily()); 268 OSL_ENSURE(xImpPrMap.is(), "There is no import prop mapper"); 269 270 //UUUU need to filter out old fill definitions when the new ones are used. The new 271 // ones are used when a FillStyle is defined 272 const bool bTakeCareOfDrawingLayerFillStyle(xImpPrMap.is() && GetFamily() == XML_STYLE_FAMILY_TEXT_PARAGRAPH); 273 bool bDrawingLayerFillStylesUsed(false); 274 275 if(bTakeCareOfDrawingLayerFillStyle) 276 { 277 // check if new FillStyles are used and if so mark old ones with -1 278 static ::rtl::OUString s_FillStyle(RTL_CONSTASCII_USTRINGPARAM("FillStyle")); 279 280 if(doNewDrawingLayerFillStyleDefinitionsExist(s_FillStyle)) 281 { 282 deactivateOldFillStyleDefinitions(getParaSet()); 283 bDrawingLayerFillStylesUsed = true; 284 } 285 } 286 287 if( pSvXMLStylesContext->IsAutomaticStyle() 288 && ( GetFamily() == XML_STYLE_FAMILY_TEXT_TEXT || GetFamily() == XML_STYLE_FAMILY_TEXT_PARAGRAPH ) ) 289 { 290 //UUUU Need to translate StyleName from temp MapNames to names 291 // used in already imported items (already exist in the pool). This 292 // is required for AutomaticStyles since these do *not* use FillPropertySet 293 // and thus just trigger CheckSpecialContext in XMLTextStyleContext::FillPropertySet 294 // (which may be double action anyways). The mechanism there to use _ContextID_Index_Pair 295 // is not working for AutomaticStyles and is already too late, too (this 296 // method is already called before XMLTextStyleContext::FillPropertySet gets called) 297 if(bDrawingLayerFillStylesUsed) 298 { 299 translateNameBasedDrawingLayerFillStyleDefinitionsToStyleDisplayNames(); 300 } 301 302 Reference < XAutoStyleFamily > xAutoFamily = pSvXMLStylesContext->GetAutoStyles( GetFamily() ); 303 if( !xAutoFamily.is() ) 304 return; 305 if( xImpPrMap.is() ) 306 { 307 Sequence< PropertyValue > aValues; 308 xImpPrMap->FillPropertySequence( maProperties, aValues ); 309 310 sal_Int32 nLen = aValues.getLength(); 311 if( nLen ) 312 { 313 if( GetFamily() == XML_STYLE_FAMILY_TEXT_PARAGRAPH ) 314 { 315 aValues.realloc( nLen + 2 ); 316 PropertyValue *pProps = aValues.getArray() + nLen; 317 pProps->Name = rtl::OUString::createFromAscii("ParaStyleName"); 318 OUString sParent( GetParentName() ); 319 if( sParent.getLength() ) 320 sParent = GetImport().GetStyleDisplayName( GetFamily(), sParent ); 321 else 322 sParent = rtl::OUString::createFromAscii("Standard"); 323 pProps->Value <<= sParent; 324 ++pProps; 325 pProps->Name = rtl::OUString::createFromAscii("ParaConditionalStyleName"); 326 pProps->Value <<= sParent; 327 } 328 329 Reference < XAutoStyle > xAutoStyle = xAutoFamily->insertStyle( aValues ); 330 if( xAutoStyle.is() ) 331 { 332 Sequence< OUString > aPropNames(1); 333 aPropNames[0] = GetFamily() == XML_STYLE_FAMILY_TEXT_PARAGRAPH ? 334 rtl::OUString::createFromAscii("ParaAutoStyleName") : 335 rtl::OUString::createFromAscii("CharAutoStyleName"); 336 Sequence< Any > aAny = xAutoStyle->getPropertyValues( aPropNames ); 337 if( aAny.hasElements() ) 338 { 339 OUString aName; 340 aAny[0] >>= aName; 341 SetAutoName( aName ); 342 } 343 } 344 } 345 } 346 } 347 else 348 { 349 const OUString& rName = GetDisplayName(); 350 if( 0 == rName.getLength() || IsDefaultStyle() ) 351 return; 352 353 Reference < XNameContainer > xFamilies = pSvXMLStylesContext->GetStylesContainer( GetFamily() ); 354 if( !xFamilies.is() ) 355 return; 356 357 sal_Bool bNew = sal_False; 358 if( xFamilies->hasByName( rName ) ) 359 { 360 Any aAny = xFamilies->getByName( rName ); 361 aAny >>= mxStyle; 362 } 363 else 364 { 365 mxStyle = Create(); 366 if( !mxStyle.is() ) 367 return; 368 369 Any aAny; 370 aAny <<= mxStyle; 371 xFamilies->insertByName( rName, aAny ); 372 bNew = sal_True; 373 } 374 375 Reference < XPropertySet > xPropSet( mxStyle, UNO_QUERY ); 376 Reference< XPropertySetInfo > xPropSetInfo = 377 xPropSet->getPropertySetInfo(); 378 if( !bNew && xPropSetInfo->hasPropertyByName( msIsPhysical ) ) 379 { 380 Any aAny = xPropSet->getPropertyValue( msIsPhysical ); 381 bNew = !*(sal_Bool *)aAny.getValue(); 382 } 383 SetNew( bNew ); 384 if( rName != GetName() ) 385 GetImport().AddStyleDisplayName( GetFamily(), GetName(), rName ); 386 387 if( bOverwrite || bNew ) 388 { 389 Reference< XPropertyState > xPropState( xPropSet, uno::UNO_QUERY ); 390 391 UniReference < XMLPropertySetMapper > xPrMap; 392 if( xImpPrMap.is() ) 393 xPrMap = xImpPrMap->getPropertySetMapper(); 394 if( xPrMap.is() ) 395 { 396 Reference < XMultiPropertyStates > xMultiStates( xPropSet, 397 UNO_QUERY ); 398 if( xMultiStates.is() ) 399 { 400 xMultiStates->setAllPropertiesToDefault(); 401 } 402 else 403 { 404 PropertyNameSet aNameSet; 405 sal_Int32 nCount = xPrMap->GetEntryCount(); 406 sal_Int32 i; 407 for( i = 0; i < nCount; i++ ) 408 { 409 const OUString& rPrName = xPrMap->GetEntryAPIName( i ); 410 if( xPropSetInfo->hasPropertyByName( rPrName ) ) 411 aNameSet.insert( rPrName ); 412 } 413 414 nCount = aNameSet.size(); 415 Sequence < OUString > aNames( nCount ); 416 OUString *pNames = aNames.getArray(); 417 PropertyNameSet::iterator aIter = aNameSet.begin(); 418 while( aIter != aNameSet.end() ) 419 *pNames++ = *aIter++; 420 421 Sequence < PropertyState > aStates( 422 xPropState->getPropertyStates( aNames ) ); 423 const PropertyState *pStates = aStates.getConstArray(); 424 pNames = aNames.getArray(); 425 426 for( i = 0; i < nCount; i++ ) 427 { 428 if( PropertyState_DIRECT_VALUE == *pStates++ ) 429 xPropState->setPropertyToDefault( pNames[i] ); 430 } 431 } 432 } 433 434 if (mxStyle.is()) 435 mxStyle->setParentStyle(OUString()); 436 437 FillPropertySet( xPropSet ); 438 } 439 else 440 { 441 SetValid( sal_False ); 442 } 443 } 444 } 445 446 void XMLPropStyleContext::Finish( sal_Bool bOverwrite ) 447 { 448 if( mxStyle.is() && (IsNew() || bOverwrite) ) 449 { 450 // The families container must exist 451 Reference < XNameContainer > xFamilies = 452 ((SvXMLStylesContext *)&mxStyles)->GetStylesContainer( GetFamily() ); 453 DBG_ASSERT( xFamilies.is(), "Families lost" ); 454 if( !xFamilies.is() ) 455 return; 456 457 // connect parent 458 OUString sParent( GetParentName() ); 459 if( sParent.getLength() ) 460 sParent = GetImport().GetStyleDisplayName( GetFamily(), sParent ); 461 if( sParent.getLength() && !xFamilies->hasByName( sParent ) ) 462 sParent = OUString(); 463 464 if( sParent != mxStyle->getParentStyle() ) 465 { 466 // this may except if setting the parent style forms a 467 // circle in the style depencies; especially if the parent 468 // style is the same as the current style 469 try 470 { 471 mxStyle->setParentStyle( sParent ); 472 } 473 catch( uno::Exception e ) 474 { 475 // according to the API definition, I would expect a 476 // container::NoSuchElementException. But it throws an 477 // uno::RuntimeException instead. I catch 478 // uno::Exception in order to process both of them. 479 480 // We can't set the parent style. For a proper 481 // Error-Message, we should pass in the name of the 482 // style, as well as the desired parent style. 483 Sequence<OUString> aSequence(2); 484 485 // getName() throws no non-Runtime exception: 486 aSequence[0] = mxStyle->getName(); 487 aSequence[1] = sParent; 488 489 GetImport().SetError( 490 XMLERROR_FLAG_ERROR | XMLERROR_PARENT_STYLE_NOT_ALLOWED, 491 aSequence, e.Message, NULL ); 492 } 493 } 494 495 // connect follow 496 OUString sFollow( GetFollow() ); 497 if( sFollow.getLength() ) 498 sFollow = GetImport().GetStyleDisplayName( GetFamily(), sFollow ); 499 if( !sFollow.getLength() || !xFamilies->hasByName( sFollow ) ) 500 sFollow = mxStyle->getName(); 501 502 Reference < XPropertySet > xPropSet( mxStyle, UNO_QUERY ); 503 Reference< XPropertySetInfo > xPropSetInfo = 504 xPropSet->getPropertySetInfo(); 505 if( xPropSetInfo->hasPropertyByName( msFollowStyle ) ) 506 { 507 Any aAny = xPropSet->getPropertyValue( msFollowStyle ); 508 OUString sCurrFollow; 509 aAny >>= sCurrFollow; 510 if( sCurrFollow != sFollow ) 511 { 512 aAny <<= sFollow; 513 xPropSet->setPropertyValue( msFollowStyle, aAny ); 514 } 515 } 516 } 517 } 518 519 520 //UUUU 521 bool XMLPropStyleContext::doNewDrawingLayerFillStyleDefinitionsExist( 522 const OUString& rFillStyleTag) const 523 { 524 if(maProperties.size() && rFillStyleTag.getLength()) 525 { 526 const UniReference< XMLPropertySetMapper >& rMapper = GetStyles()->GetImportPropertyMapper(GetFamily())->getPropertySetMapper(); 527 528 if(rMapper.is()) 529 { 530 for(::std::vector< XMLPropertyState >::const_iterator a = maProperties.begin(); a != maProperties.end(); a++) 531 { 532 if(a->mnIndex != -1) 533 { 534 const OUString& rPropName = rMapper->GetEntryAPIName(a->mnIndex); 535 536 if(rPropName == rFillStyleTag) 537 { 538 FillStyle eFillStyle(FillStyle_NONE); 539 540 if(a->maValue >>= eFillStyle) 541 { 542 // okay, type was good, FillStyle is set 543 } 544 else 545 { 546 // also try an int (see XFillStyleItem::PutValue) 547 sal_Int32 nFillStyle(0); 548 549 if(a->maValue >>= nFillStyle) 550 { 551 eFillStyle = static_cast< FillStyle >(nFillStyle); 552 } 553 } 554 555 // we found the entry, check it 556 return FillStyle_NONE != eFillStyle; 557 } 558 } 559 } 560 } 561 } 562 563 return false; 564 } 565 566 //UUUU 567 bool XMLPropStyleContext::deactivateOldFillStyleDefinitions( 568 const OldFillStyleDefinitionSet& rHashSetOfTags) 569 { 570 bool bRetval(false); 571 572 if(!rHashSetOfTags.empty() && maProperties.size()) 573 { 574 const UniReference< XMLPropertySetMapper >& rMapper = GetStyles()->GetImportPropertyMapper(GetFamily())->getPropertySetMapper(); 575 576 if(rMapper.is()) 577 { 578 for(::std::vector< XMLPropertyState >::iterator a = maProperties.begin(); a != maProperties.end(); a++) 579 { 580 if(a->mnIndex != -1) 581 { 582 const OUString& rPropName = rMapper->GetEntryAPIName(a->mnIndex); 583 584 if(rHashSetOfTags.find(rPropName) != rHashSetOfTags.end()) 585 { 586 // mark entry as inactive 587 a->mnIndex = -1; 588 bRetval = true; 589 } 590 } 591 } 592 } 593 } 594 595 return bRetval; 596 } 597 598 //UUUU 599 bool XMLPropStyleContext::translateNameBasedDrawingLayerFillStyleDefinitionsToStyleDisplayNames() 600 { 601 bool bRetval(false); 602 603 if(maProperties.size()) 604 { 605 const UniReference< XMLPropertySetMapper >& rMapper = GetStyles()->GetImportPropertyMapper(GetFamily())->getPropertySetMapper(); 606 607 if(rMapper.is()) 608 { 609 static OUString s_FillGradientName(RTL_CONSTASCII_USTRINGPARAM("FillGradientName")); 610 static OUString s_FillHatchName(RTL_CONSTASCII_USTRINGPARAM("FillHatchName")); 611 static OUString s_FillBitmapName(RTL_CONSTASCII_USTRINGPARAM("FillBitmapName")); 612 static OUString s_FillTransparenceGradientName(RTL_CONSTASCII_USTRINGPARAM("FillTransparenceGradientName")); 613 614 for(::std::vector< XMLPropertyState >::iterator a = maProperties.begin(); a != maProperties.end(); a++) 615 { 616 if(a->mnIndex != -1) 617 { 618 const OUString& rPropName = rMapper->GetEntryAPIName(a->mnIndex); 619 sal_uInt16 aStyleFamily(0); 620 621 if(rPropName == s_FillGradientName || rPropName == s_FillTransparenceGradientName) 622 { 623 aStyleFamily = XML_STYLE_FAMILY_SD_GRADIENT_ID; 624 } 625 else if(rPropName == s_FillHatchName) 626 { 627 aStyleFamily = XML_STYLE_FAMILY_SD_HATCH_ID; 628 } 629 else if(rPropName == s_FillBitmapName) 630 { 631 aStyleFamily = XML_STYLE_FAMILY_SD_FILL_IMAGE_ID; 632 } 633 634 if(aStyleFamily) 635 { 636 OUString sStyleName; 637 638 a->maValue >>= sStyleName; 639 sStyleName = GetImport().GetStyleDisplayName( aStyleFamily, sStyleName ); 640 a->maValue <<= sStyleName; 641 bRetval = true; 642 } 643 } 644 } 645 } 646 } 647 648 return bRetval; 649 } 650 651 //eof 652