1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_chart2.hxx" 30 #include "TitleWrapper.hxx" 31 #include "macros.hxx" 32 #include "ContainerHelper.hxx" 33 #include "ControllerLockGuard.hxx" 34 35 #include <comphelper/InlineContainer.hxx> 36 #include <com/sun/star/beans/PropertyAttribute.hpp> 37 #include <com/sun/star/chart2/RelativePosition.hpp> 38 39 #include "CharacterProperties.hxx" 40 #include "LineProperties.hxx" 41 #include "FillProperties.hxx" 42 #include "UserDefinedProperties.hxx" 43 #include "WrappedCharacterHeightProperty.hxx" 44 #include "WrappedTextRotationProperty.hxx" 45 #include "WrappedAutomaticPositionProperties.hxx" 46 #include "WrappedScaleTextProperties.hxx" 47 48 #include <algorithm> 49 #include <rtl/ustrbuf.hxx> 50 51 using namespace ::com::sun::star; 52 using ::com::sun::star::beans::Property; 53 using ::osl::MutexGuard; 54 using ::rtl::OUString; 55 using ::com::sun::star::uno::Any; 56 using ::com::sun::star::uno::Reference; 57 using ::com::sun::star::uno::Sequence; 58 59 60 namespace chart 61 { 62 class WrappedTitleStringProperty : public WrappedProperty 63 { 64 public: 65 WrappedTitleStringProperty( const Reference< uno::XComponentContext >& xContext ); 66 virtual ~WrappedTitleStringProperty(); 67 68 virtual void setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const 69 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException); 70 virtual Any getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const 71 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException); 72 virtual Any getPropertyDefault( const Reference< beans::XPropertyState >& xInnerPropertyState ) const 73 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException); 74 75 protected: 76 Reference< uno::XComponentContext > m_xContext; 77 }; 78 79 WrappedTitleStringProperty::WrappedTitleStringProperty( const Reference< uno::XComponentContext >& xContext ) 80 : ::chart::WrappedProperty( C2U( "String" ), OUString() ) 81 , m_xContext( xContext ) 82 { 83 } 84 WrappedTitleStringProperty::~WrappedTitleStringProperty() 85 { 86 } 87 88 void WrappedTitleStringProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const 89 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 90 { 91 Reference< chart2::XTitle > xTitle(xInnerPropertySet,uno::UNO_QUERY); 92 if(xTitle.is()) 93 { 94 OUString aString; 95 rOuterValue >>= aString; 96 TitleHelper::setCompleteString( aString, xTitle, m_xContext ); 97 } 98 } 99 Any WrappedTitleStringProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const 100 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 101 { 102 Any aRet( getPropertyDefault( Reference< beans::XPropertyState >( xInnerPropertySet, uno::UNO_QUERY ) ) ); 103 Reference< chart2::XTitle > xTitle(xInnerPropertySet,uno::UNO_QUERY); 104 if(xTitle.is()) 105 { 106 Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText()); 107 108 ::rtl::OUStringBuffer aBuf; 109 for( sal_Int32 i = 0; i < aStrings.getLength(); ++i ) 110 { 111 aBuf.append( aStrings[ i ]->getString()); 112 } 113 aRet <<= aBuf.makeStringAndClear(); 114 } 115 return aRet; 116 } 117 Any WrappedTitleStringProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 118 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 119 { 120 return uno::makeAny( rtl::OUString() );//default title is a empty String 121 } 122 123 //----------------------------------------------------------------------------- 124 //----------------------------------------------------------------------------- 125 126 class WrappedStackedTextProperty : public WrappedProperty 127 { 128 public: 129 WrappedStackedTextProperty(); 130 virtual ~WrappedStackedTextProperty(); 131 }; 132 133 WrappedStackedTextProperty::WrappedStackedTextProperty() 134 : ::chart::WrappedProperty( C2U( "StackedText" ), C2U( "StackCharacters" ) ) 135 { 136 } 137 WrappedStackedTextProperty::~WrappedStackedTextProperty() 138 { 139 } 140 141 }// end namespace chart 142 143 144 //----------------------------------------------------------------------------- 145 //----------------------------------------------------------------------------- 146 //----------------------------------------------------------------------------- 147 //----------------------------------------------------------------------------- 148 149 namespace 150 { 151 static const OUString lcl_aServiceName( 152 RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart.Title" )); 153 154 enum 155 { 156 PROP_TITLE_STRING, 157 PROP_TITLE_TEXT_ROTATION, 158 PROP_TITLE_TEXT_STACKED 159 }; 160 161 void lcl_AddPropertiesToVector( 162 ::std::vector< Property > & rOutProperties ) 163 { 164 rOutProperties.push_back( 165 Property( C2U( "String" ), 166 PROP_TITLE_STRING, 167 ::getCppuType( reinterpret_cast< const ::rtl::OUString * >(0)), 168 beans::PropertyAttribute::BOUND 169 | beans::PropertyAttribute::MAYBEVOID )); 170 171 rOutProperties.push_back( 172 Property( C2U( "TextRotation" ), 173 PROP_TITLE_TEXT_ROTATION, 174 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 175 beans::PropertyAttribute::BOUND 176 | beans::PropertyAttribute::MAYBEDEFAULT )); 177 rOutProperties.push_back( 178 Property( C2U( "StackedText" ), 179 PROP_TITLE_TEXT_STACKED, 180 ::getBooleanCppuType(), 181 beans::PropertyAttribute::BOUND 182 | beans::PropertyAttribute::MAYBEDEFAULT )); 183 } 184 185 struct StaticTitleWrapperPropertyArray_Initializer 186 { 187 Sequence< Property >* operator()() 188 { 189 static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); 190 return &aPropSeq; 191 } 192 193 private: 194 Sequence< Property > lcl_GetPropertySequence() 195 { 196 ::std::vector< beans::Property > aProperties; 197 lcl_AddPropertiesToVector( aProperties ); 198 ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); 199 ::chart::LineProperties::AddPropertiesToVector( aProperties ); 200 ::chart::FillProperties::AddPropertiesToVector( aProperties ); 201 //::chart::NamedProperties::AddPropertiesToVector( aProperties ); 202 ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); 203 ::chart::wrapper::WrappedAutomaticPositionProperties::addProperties( aProperties ); 204 ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties ); 205 206 ::std::sort( aProperties.begin(), aProperties.end(), 207 ::chart::PropertyNameLess() ); 208 209 return ::chart::ContainerHelper::ContainerToSequence( aProperties ); 210 } 211 }; 212 213 struct StaticTitleWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticTitleWrapperPropertyArray_Initializer > 214 { 215 }; 216 217 } // anonymous namespace 218 219 // -------------------------------------------------------------------------------- 220 221 namespace chart 222 { 223 namespace wrapper 224 { 225 226 TitleWrapper::TitleWrapper( ::chart::TitleHelper::eTitleType eTitleType, 227 ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : 228 m_spChart2ModelContact( spChart2ModelContact ), 229 m_aEventListenerContainer( m_aMutex ), 230 m_eTitleType(eTitleType) 231 { 232 ControllerLockGuard aCtrlLockGuard( Reference< frame::XModel >( m_spChart2ModelContact->getChart2Document(), uno::UNO_QUERY )); 233 if( !getTitleObject().is() ) //#i83831# create an empty title at the model, thus references to properties can be mapped mapped correctly 234 TitleHelper::createTitle( m_eTitleType, OUString(), m_spChart2ModelContact->getChartModel(), m_spChart2ModelContact->m_xContext ); 235 } 236 237 TitleWrapper::~TitleWrapper() 238 { 239 } 240 241 // ____ XShape ____ 242 awt::Point SAL_CALL TitleWrapper::getPosition() 243 throw (uno::RuntimeException) 244 { 245 return m_spChart2ModelContact->GetTitlePosition( this->getTitleObject() ); 246 } 247 248 void SAL_CALL TitleWrapper::setPosition( const awt::Point& aPosition ) 249 throw (uno::RuntimeException) 250 { 251 Reference< beans::XPropertySet > xPropertySet( this->getInnerPropertySet() ); 252 if(xPropertySet.is()) 253 { 254 awt::Size aPageSize( m_spChart2ModelContact->GetPageSize() ); 255 256 chart2::RelativePosition aRelativePosition; 257 aRelativePosition.Anchor = drawing::Alignment_TOP_LEFT; 258 aRelativePosition.Primary = double(aPosition.X)/double(aPageSize.Width); 259 aRelativePosition.Secondary = double(aPosition.Y)/double(aPageSize.Height); 260 xPropertySet->setPropertyValue( C2U( "RelativePosition" ), uno::makeAny(aRelativePosition) ); 261 } 262 } 263 264 awt::Size SAL_CALL TitleWrapper::getSize() 265 throw (uno::RuntimeException) 266 { 267 return m_spChart2ModelContact->GetTitleSize( this->getTitleObject() ); 268 } 269 270 void SAL_CALL TitleWrapper::setSize( const awt::Size& /*aSize*/ ) 271 throw (beans::PropertyVetoException, 272 uno::RuntimeException) 273 { 274 OSL_ENSURE( false, "trying to set size of title" ); 275 } 276 277 // ____ XShapeDescriptor (base of XShape) ____ 278 OUString SAL_CALL TitleWrapper::getShapeType() 279 throw (uno::RuntimeException) 280 { 281 return C2U( "com.sun.star.chart.ChartTitle" ); 282 } 283 284 // ____ XComponent ____ 285 void SAL_CALL TitleWrapper::dispose() 286 throw (uno::RuntimeException) 287 { 288 Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); 289 m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); 290 291 // /-- 292 MutexGuard aGuard( GetMutex()); 293 clearWrappedPropertySet(); 294 // \-- 295 } 296 297 void SAL_CALL TitleWrapper::addEventListener( 298 const Reference< lang::XEventListener >& xListener ) 299 throw (uno::RuntimeException) 300 { 301 m_aEventListenerContainer.addInterface( xListener ); 302 } 303 304 void SAL_CALL TitleWrapper::removeEventListener( 305 const Reference< lang::XEventListener >& aListener ) 306 throw (uno::RuntimeException) 307 { 308 m_aEventListenerContainer.removeInterface( aListener ); 309 } 310 311 // ================================================================================ 312 313 Reference< beans::XPropertySet > TitleWrapper::getFirstCharacterPropertySet() 314 { 315 Reference< beans::XPropertySet > xProp; 316 317 Reference< chart2::XTitle > xTitle( this->getTitleObject() ); 318 if( xTitle.is()) 319 { 320 Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText()); 321 if( aStrings.getLength() > 0 ) 322 xProp.set( aStrings[0], uno::UNO_QUERY ); 323 } 324 325 return xProp; 326 } 327 328 void TitleWrapper::getFastCharacterPropertyValue( sal_Int32 nHandle, Any& rValue ) 329 { 330 OSL_ASSERT( FAST_PROPERTY_ID_START_CHAR_PROP <= nHandle && 331 nHandle < CharacterProperties::FAST_PROPERTY_ID_END_CHAR_PROP ); 332 333 Reference< beans::XPropertySet > xProp( getFirstCharacterPropertySet(), uno::UNO_QUERY ); 334 Reference< beans::XFastPropertySet > xFastProp( xProp, uno::UNO_QUERY ); 335 if(xProp.is()) 336 { 337 const WrappedProperty* pWrappedProperty = getWrappedProperty( nHandle ); 338 if( pWrappedProperty ) 339 { 340 rValue = pWrappedProperty->getPropertyValue( xProp ); 341 } 342 else if( xFastProp.is() ) 343 { 344 rValue = xFastProp->getFastPropertyValue( nHandle ); 345 } 346 } 347 348 } 349 350 void TitleWrapper::setFastCharacterPropertyValue( 351 sal_Int32 nHandle, const Any& rValue ) throw (uno::Exception) 352 { 353 OSL_ASSERT( FAST_PROPERTY_ID_START_CHAR_PROP <= nHandle && 354 nHandle < CharacterProperties::FAST_PROPERTY_ID_END_CHAR_PROP ); 355 356 Reference< chart2::XTitle > xTitle( this->getTitleObject() ); 357 if( xTitle.is()) 358 { 359 Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText()); 360 const WrappedProperty* pWrappedProperty = getWrappedProperty( nHandle ); 361 362 for( sal_Int32 i = 0; i < aStrings.getLength(); ++i ) 363 { 364 Reference< beans::XFastPropertySet > xFastPropertySet( aStrings[ i ], uno::UNO_QUERY ); 365 Reference< beans::XPropertySet > xPropSet( xFastPropertySet, uno::UNO_QUERY ); 366 367 if( pWrappedProperty ) 368 pWrappedProperty->setPropertyValue( rValue, xPropSet ); 369 else if( xFastPropertySet.is() ) 370 xFastPropertySet->setFastPropertyValue( nHandle, rValue ); 371 } 372 } 373 } 374 375 // ================================================================================ 376 // WrappedPropertySet 377 378 void SAL_CALL TitleWrapper::setPropertyValue( const OUString& rPropertyName, const Any& rValue ) 379 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 380 { 381 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 382 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 383 { 384 setFastCharacterPropertyValue( nHandle, rValue ); 385 } 386 else 387 WrappedPropertySet::setPropertyValue( rPropertyName, rValue ); 388 } 389 390 Any SAL_CALL TitleWrapper::getPropertyValue( const OUString& rPropertyName ) 391 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 392 { 393 Any aRet; 394 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 395 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 396 getFastCharacterPropertyValue( nHandle, aRet ); 397 else 398 aRet = WrappedPropertySet::getPropertyValue( rPropertyName ); 399 return aRet; 400 } 401 402 beans::PropertyState SAL_CALL TitleWrapper::getPropertyState( const OUString& rPropertyName ) 403 throw (beans::UnknownPropertyException, uno::RuntimeException) 404 { 405 beans::PropertyState aState( beans::PropertyState_DIRECT_VALUE ); 406 407 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 408 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 409 { 410 Reference< beans::XPropertyState > xPropState( getFirstCharacterPropertySet(), uno::UNO_QUERY ); 411 if( xPropState.is() ) 412 { 413 const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName ); 414 if( pWrappedProperty ) 415 aState = pWrappedProperty->getPropertyState( xPropState ); 416 else 417 aState = xPropState->getPropertyState( rPropertyName ); 418 } 419 } 420 else 421 aState = WrappedPropertySet::getPropertyState( rPropertyName ); 422 423 return aState; 424 } 425 void SAL_CALL TitleWrapper::setPropertyToDefault( const OUString& rPropertyName ) 426 throw (beans::UnknownPropertyException, uno::RuntimeException) 427 { 428 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 429 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 430 { 431 Any aDefault = getPropertyDefault( rPropertyName ); 432 setFastCharacterPropertyValue( nHandle, aDefault ); 433 } 434 else 435 WrappedPropertySet::setPropertyToDefault( rPropertyName ); 436 } 437 Any SAL_CALL TitleWrapper::getPropertyDefault( const OUString& rPropertyName ) 438 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 439 { 440 Any aRet; 441 442 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 443 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 444 { 445 Reference< beans::XPropertyState > xPropState( getFirstCharacterPropertySet(), uno::UNO_QUERY ); 446 if( xPropState.is() ) 447 { 448 const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName ); 449 if( pWrappedProperty ) 450 aRet = pWrappedProperty->getPropertyDefault(xPropState); 451 else 452 aRet = xPropState->getPropertyDefault( rPropertyName ); 453 } 454 } 455 else 456 aRet = WrappedPropertySet::getPropertyDefault( rPropertyName ); 457 458 return aRet; 459 } 460 461 void SAL_CALL TitleWrapper::addPropertyChangeListener( const OUString& rPropertyName, const Reference< beans::XPropertyChangeListener >& xListener ) 462 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 463 { 464 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 465 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 466 { 467 Reference< beans::XPropertySet > xPropSet( getFirstCharacterPropertySet(), uno::UNO_QUERY ); 468 if( xPropSet.is() ) 469 xPropSet->addPropertyChangeListener( rPropertyName, xListener ); 470 } 471 else 472 WrappedPropertySet::addPropertyChangeListener( rPropertyName, xListener ); 473 } 474 void SAL_CALL TitleWrapper::removePropertyChangeListener( const OUString& rPropertyName, const Reference< beans::XPropertyChangeListener >& xListener ) 475 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 476 { 477 sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName ); 478 if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) ) 479 { 480 Reference< beans::XPropertySet > xPropSet( getFirstCharacterPropertySet(), uno::UNO_QUERY ); 481 if( xPropSet.is() ) 482 xPropSet->removePropertyChangeListener( rPropertyName, xListener ); 483 } 484 else 485 WrappedPropertySet::removePropertyChangeListener( rPropertyName, xListener ); 486 } 487 488 // ================================================================================ 489 490 //ReferenceSizePropertyProvider 491 void TitleWrapper::updateReferenceSize() 492 { 493 Reference< beans::XPropertySet > xProp( this->getTitleObject(), uno::UNO_QUERY ); 494 if( xProp.is() ) 495 { 496 if( xProp->getPropertyValue( C2U("ReferencePageSize") ).hasValue() ) 497 xProp->setPropertyValue( C2U("ReferencePageSize"), uno::makeAny( 498 m_spChart2ModelContact->GetPageSize() )); 499 } 500 } 501 Any TitleWrapper::getReferenceSize() 502 { 503 Any aRet; 504 Reference< beans::XPropertySet > xProp( this->getTitleObject(), uno::UNO_QUERY ); 505 if( xProp.is() ) 506 aRet = xProp->getPropertyValue( C2U("ReferencePageSize") ); 507 508 return aRet; 509 } 510 awt::Size TitleWrapper::getCurrentSizeForReference() 511 { 512 return m_spChart2ModelContact->GetPageSize(); 513 } 514 515 // ================================================================================ 516 517 Reference< chart2::XTitle > TitleWrapper::getTitleObject() 518 { 519 return TitleHelper::getTitle( m_eTitleType, m_spChart2ModelContact->getChartModel() ); 520 } 521 522 // WrappedPropertySet 523 524 Reference< beans::XPropertySet > TitleWrapper::getInnerPropertySet() 525 { 526 return Reference< beans::XPropertySet >( this->getTitleObject(), uno::UNO_QUERY ); 527 } 528 529 const Sequence< beans::Property >& TitleWrapper::getPropertySequence() 530 { 531 return *StaticTitleWrapperPropertyArray::get(); 532 } 533 534 const std::vector< WrappedProperty* > TitleWrapper::createWrappedProperties() 535 { 536 ::std::vector< ::chart::WrappedProperty* > aWrappedProperties; 537 538 aWrappedProperties.push_back( new WrappedTitleStringProperty( m_spChart2ModelContact->m_xContext ) ); 539 aWrappedProperties.push_back( new WrappedTextRotationProperty( m_eTitleType==TitleHelper::Y_AXIS_TITLE || m_eTitleType==TitleHelper::X_AXIS_TITLE ) ); 540 aWrappedProperties.push_back( new WrappedStackedTextProperty() ); 541 WrappedCharacterHeightProperty::addWrappedProperties( aWrappedProperties, this ); 542 WrappedAutomaticPositionProperties::addWrappedProperties( aWrappedProperties ); 543 WrappedScaleTextProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 544 545 return aWrappedProperties; 546 } 547 548 // ================================================================================ 549 550 Sequence< OUString > TitleWrapper::getSupportedServiceNames_Static() 551 { 552 Sequence< OUString > aServices( 4 ); 553 aServices[ 0 ] = C2U( "com.sun.star.chart.ChartTitle" ); 554 aServices[ 1 ] = C2U( "com.sun.star.drawing.Shape" ); 555 aServices[ 2 ] = C2U( "com.sun.star.xml.UserDefinedAttributeSupplier" ); 556 aServices[ 3 ] = C2U( "com.sun.star.style.CharacterProperties" ); 557 // aServices[ 4 ] = C2U( "com.sun.star.beans.PropertySet" ); 558 // aServices[ 5 ] = C2U( "com.sun.star.drawing.FillProperties" ); 559 // aServices[ 6 ] = C2U( "com.sun.star.drawing.LineProperties" ); 560 561 return aServices; 562 } 563 564 // implement XServiceInfo methods basing upon getSupportedServiceNames_Static 565 APPHELPER_XSERVICEINFO_IMPL( TitleWrapper, lcl_aServiceName ); 566 567 } // namespace wrapper 568 } // namespace chart 569