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_chart2.hxx" 26 #include "DataPointItemConverter.hxx" 27 #include "SchWhichPairs.hxx" 28 #include "macros.hxx" 29 #include "ItemPropertyMap.hxx" 30 31 #include "GraphicPropertyItemConverter.hxx" 32 #include "CharacterPropertyItemConverter.hxx" 33 #include "StatisticsItemConverter.hxx" 34 #include "SeriesOptionsItemConverter.hxx" 35 #include "DataSeriesHelper.hxx" 36 #include "DiagramHelper.hxx" 37 #include "ChartModelHelper.hxx" 38 #include "ChartTypeHelper.hxx" 39 #include <svx/chrtitem.hxx> 40 #include <com/sun/star/chart2/DataPointLabel.hpp> 41 #include <com/sun/star/chart2/Symbol.hpp> 42 43 // header for class XFillColorItem 44 #include <svx/xflclit.hxx> 45 #include <svl/intitem.hxx> 46 #include <editeng/sizeitem.hxx> 47 // header for class SfxStringItem 48 #include <svl/stritem.hxx> 49 #include <editeng/brshitem.hxx> 50 //SfxIntegerListItem 51 #include <svl/ilstitem.hxx> 52 #define _SVSTDARR_ULONGS 53 #include <svl/svstdarr.hxx> 54 #include <vcl/graph.hxx> 55 #include <com/sun/star/graphic/XGraphic.hpp> 56 57 // for SVX_SYMBOLTYPE_... 58 #include <svx/tabline.hxx> 59 60 #include <functional> 61 #include <algorithm> 62 63 using namespace ::com::sun::star; 64 using namespace ::com::sun::star::chart2; 65 using ::com::sun::star::uno::Reference; 66 67 namespace 68 { 69 ::comphelper::ItemPropertyMapType & lcl_GetDataPointPropertyMap() 70 { 71 static ::comphelper::ItemPropertyMapType aDataPointPropertyMap( 72 ::comphelper::MakeItemPropertyMap 73 // IPM_MAP_ENTRY( CHATTR_PIE_SEGMENT_OFFSET, "Offset", 0 ) 74 IPM_MAP_ENTRY( SCHATTR_STYLE_SHAPE, "Geometry3D", 0 ) 75 ); 76 77 return aDataPointPropertyMap; 78 }; 79 80 sal_Int32 lcl_getSymbolStyleForSymbol( const chart2::Symbol & rSymbol ) 81 { 82 sal_Int32 nStyle = SVX_SYMBOLTYPE_UNKNOWN; 83 switch( rSymbol.Style ) 84 { 85 case chart2::SymbolStyle_NONE: 86 nStyle = SVX_SYMBOLTYPE_NONE; 87 break; 88 case chart2::SymbolStyle_AUTO: 89 nStyle = SVX_SYMBOLTYPE_AUTO; 90 break; 91 case chart2::SymbolStyle_GRAPHIC: 92 nStyle = SVX_SYMBOLTYPE_BRUSHITEM; 93 break; 94 case chart2::SymbolStyle_STANDARD: 95 nStyle = rSymbol.StandardSymbol; 96 break; 97 98 case chart2::SymbolStyle_POLYGON: 99 // to avoid warning 100 case chart2::SymbolStyle_MAKE_FIXED_SIZE: 101 // nothing 102 break; 103 } 104 return nStyle; 105 } 106 107 bool lcl_NumberFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxItemSet & rItemSet, const uno::Reference< beans::XPropertySet > & xPropertySet, bool bOverwriteAttributedDataPointsAlso ) 108 { 109 bool bChanged = false; 110 if( !xPropertySet.is() ) 111 return bChanged; 112 rtl::OUString aPropertyName = (SID_ATTR_NUMBERFORMAT_VALUE==nWhichId) ? C2U( "NumberFormat" ) : C2U( "PercentageNumberFormat" ); 113 sal_uInt16 nSourceWhich = (SID_ATTR_NUMBERFORMAT_VALUE==nWhichId) ? SID_ATTR_NUMBERFORMAT_SOURCE : SCHATTR_PERCENT_NUMBERFORMAT_SOURCE; 114 115 if( SFX_ITEM_SET != rItemSet.GetItemState( nSourceWhich ) ) 116 return bChanged; 117 118 uno::Any aValue; 119 bool bUseSourceFormat = (static_cast< const SfxBoolItem & >( 120 rItemSet.Get( nSourceWhich )).GetValue() ); 121 if( !bUseSourceFormat ) 122 { 123 SfxItemState aState = rItemSet.GetItemState( nWhichId ); 124 if( aState == SFX_ITEM_SET ) 125 { 126 sal_Int32 nFmt = static_cast< sal_Int32 >( 127 static_cast< const SfxUInt32Item & >( 128 rItemSet.Get( nWhichId )).GetValue()); 129 aValue = uno::makeAny(nFmt); 130 } 131 else 132 return bChanged; 133 } 134 135 uno::Any aOldValue( xPropertySet->getPropertyValue(aPropertyName) ); 136 if( bOverwriteAttributedDataPointsAlso ) 137 { 138 Reference< chart2::XDataSeries > xSeries( xPropertySet, uno::UNO_QUERY); 139 if( aValue != aOldValue || 140 ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, aPropertyName, aOldValue ) ) 141 { 142 ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, aPropertyName, aValue ); 143 bChanged = true; 144 } 145 } 146 else if( aOldValue != aValue ) 147 { 148 xPropertySet->setPropertyValue(aPropertyName, aValue ); 149 bChanged = true; 150 } 151 return bChanged; 152 } 153 154 bool lcl_UseSourceFormatFromItemToPropertySet( sal_uInt16 nWhichId, const SfxItemSet & rItemSet, const uno::Reference< beans::XPropertySet > & xPropertySet, bool bOverwriteAttributedDataPointsAlso ) 155 { 156 bool bChanged = false; 157 if( !xPropertySet.is() ) 158 return bChanged; 159 rtl::OUString aPropertyName = (SID_ATTR_NUMBERFORMAT_SOURCE==nWhichId) ? C2U( "NumberFormat" ) : C2U( "PercentageNumberFormat" ); 160 sal_uInt16 nFormatWhich = (SID_ATTR_NUMBERFORMAT_SOURCE==nWhichId) ? SID_ATTR_NUMBERFORMAT_VALUE : SCHATTR_PERCENT_NUMBERFORMAT_VALUE; 161 162 if( SFX_ITEM_SET != rItemSet.GetItemState( nWhichId ) ) 163 return bChanged; 164 165 uno::Any aNewValue; 166 bool bUseSourceFormat = (static_cast< const SfxBoolItem & >( 167 rItemSet.Get( nWhichId )).GetValue() ); 168 if( !bUseSourceFormat ) 169 { 170 SfxItemState aState = rItemSet.GetItemState( nFormatWhich ); 171 if( aState == SFX_ITEM_SET ) 172 { 173 sal_Int32 nFormatKey = static_cast< sal_Int32 >( 174 static_cast< const SfxUInt32Item & >( 175 rItemSet.Get( nFormatWhich )).GetValue()); 176 aNewValue <<= nFormatKey; 177 } 178 else 179 return bChanged; 180 } 181 182 uno::Any aOldValue( xPropertySet->getPropertyValue(aPropertyName) ); 183 if( bOverwriteAttributedDataPointsAlso ) 184 { 185 Reference< chart2::XDataSeries > xSeries( xPropertySet, uno::UNO_QUERY); 186 if( aNewValue != aOldValue || 187 ::chart::DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, aPropertyName, aOldValue ) ) 188 { 189 ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, aPropertyName, aNewValue ); 190 bChanged = true; 191 } 192 } 193 else if( aOldValue != aNewValue ) 194 { 195 xPropertySet->setPropertyValue( aPropertyName, aNewValue ); 196 bChanged = true; 197 } 198 199 return bChanged; 200 } 201 202 } // anonymous namespace 203 204 namespace chart 205 { 206 namespace wrapper 207 { 208 209 DataPointItemConverter::DataPointItemConverter( 210 const uno::Reference< frame::XModel > & xChartModel, 211 const uno::Reference< uno::XComponentContext > & xContext, 212 const uno::Reference< beans::XPropertySet > & rPropertySet, 213 const uno::Reference< XDataSeries > & xSeries, 214 SfxItemPool& rItemPool, 215 SdrModel& rDrawModel, 216 NumberFormatterWrapper * pNumFormatter, 217 const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory, 218 GraphicPropertyItemConverter::eGraphicObjectType eMapTo /* = FILL_PROPERTIES */, 219 ::std::auto_ptr< awt::Size > pRefSize /* = NULL */, 220 bool bDataSeries /* = false */, 221 bool bUseSpecialFillColor /* = false */, 222 sal_Int32 nSpecialFillColor /* =0 */, 223 bool bOverwriteLabelsForAttributedDataPointsAlso /*false*/, 224 sal_Int32 nNumberFormat, 225 sal_Int32 nPercentNumberFormat 226 ) : 227 ItemConverter( rPropertySet, rItemPool ), 228 m_pNumberFormatterWrapper( pNumFormatter ), 229 m_bDataSeries( bDataSeries ), 230 m_bOverwriteLabelsForAttributedDataPointsAlso(m_bDataSeries && bOverwriteLabelsForAttributedDataPointsAlso), 231 m_bUseSpecialFillColor(bUseSpecialFillColor), 232 m_nSpecialFillColor(nSpecialFillColor), 233 m_nNumberFormat(nNumberFormat), 234 m_nPercentNumberFormat(nPercentNumberFormat), 235 m_aAvailableLabelPlacements(), 236 m_bForbidPercentValue(true) 237 { 238 m_aConverters.push_back( new GraphicPropertyItemConverter( 239 rPropertySet, rItemPool, rDrawModel, xNamedPropertyContainerFactory, eMapTo )); 240 m_aConverters.push_back( new CharacterPropertyItemConverter( rPropertySet, rItemPool, pRefSize, 241 C2U( "ReferencePageSize" ))); 242 if( bDataSeries ) 243 { 244 m_aConverters.push_back( new StatisticsItemConverter( xChartModel, rPropertySet, rItemPool )); 245 m_aConverters.push_back( new SeriesOptionsItemConverter( xChartModel, xContext, rPropertySet, rItemPool )); 246 } 247 248 uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram(xChartModel) ); 249 uno::Reference< XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram , xSeries ) ); 250 bool bFound = false; 251 bool bAmbiguous = false; 252 sal_Bool bSwapXAndY = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); 253 m_aAvailableLabelPlacements = ChartTypeHelper::getSupportedLabelPlacements( xChartType, DiagramHelper::getDimension( xDiagram ), bSwapXAndY, xSeries ); 254 255 m_bForbidPercentValue = AxisType::CATEGORY != ChartTypeHelper::getAxisType( xChartType, 0 ); 256 } 257 258 DataPointItemConverter::~DataPointItemConverter() 259 { 260 ::std::for_each( m_aConverters.begin(), m_aConverters.end(), 261 ::comphelper::DeleteItemConverterPtr() ); 262 } 263 264 void DataPointItemConverter::FillItemSet( SfxItemSet & rOutItemSet ) const 265 { 266 ::std::for_each( m_aConverters.begin(), m_aConverters.end(), 267 ::comphelper::FillItemSetFunc( rOutItemSet )); 268 269 // own items 270 ItemConverter::FillItemSet( rOutItemSet ); 271 272 if( m_bUseSpecialFillColor ) 273 { 274 Color aColor(m_nSpecialFillColor); 275 rOutItemSet.Put( XFillColorItem( String(), aColor ) ); 276 } 277 } 278 279 bool DataPointItemConverter::ApplyItemSet( const SfxItemSet & rItemSet ) 280 { 281 bool bResult = false; 282 283 ::std::for_each( m_aConverters.begin(), m_aConverters.end(), 284 ::comphelper::ApplyItemSetFunc( rItemSet, bResult )); 285 286 // own items 287 return ItemConverter::ApplyItemSet( rItemSet ) || bResult; 288 } 289 290 const sal_uInt16 * DataPointItemConverter::GetWhichPairs() const 291 { 292 // must span all used items! 293 if( m_bDataSeries ) 294 return nRowWhichPairs; 295 return nDataPointWhichPairs; 296 } 297 298 bool DataPointItemConverter::GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const 299 { 300 ::comphelper::ItemPropertyMapType & rMap( lcl_GetDataPointPropertyMap()); 301 ::comphelper::ItemPropertyMapType::const_iterator aIt( rMap.find( nWhichId )); 302 303 if( aIt == rMap.end()) 304 return false; 305 306 rOutProperty =(*aIt).second; 307 return true; 308 } 309 310 311 bool DataPointItemConverter::ApplySpecialItem( 312 sal_uInt16 nWhichId, const SfxItemSet & rItemSet ) 313 throw( uno::Exception ) 314 { 315 bool bChanged = false; 316 uno::Any aValue; 317 318 switch( nWhichId ) 319 { 320 case SCHATTR_DATADESCR_SHOW_NUMBER: 321 case SCHATTR_DATADESCR_SHOW_PERCENTAGE: 322 case SCHATTR_DATADESCR_SHOW_CATEGORY: 323 case SCHATTR_DATADESCR_SHOW_SYMBOL: 324 { 325 const SfxBoolItem & rItem = static_cast< const SfxBoolItem & >( rItemSet.Get( nWhichId )); 326 327 uno::Any aOldValue( GetPropertySet()->getPropertyValue( C2U( "Label" ) )); 328 chart2::DataPointLabel aLabel; 329 if( aOldValue >>= aLabel ) 330 { 331 sal_Bool& rValue = (SCHATTR_DATADESCR_SHOW_NUMBER==nWhichId) ? aLabel.ShowNumber : ( 332 (SCHATTR_DATADESCR_SHOW_PERCENTAGE==nWhichId) ? aLabel.ShowNumberInPercent : ( 333 (SCHATTR_DATADESCR_SHOW_CATEGORY==nWhichId) ? aLabel.ShowCategoryName : aLabel.ShowLegendSymbol )); 334 sal_Bool bOldValue = rValue; 335 rValue = static_cast< sal_Bool >( rItem.GetValue() ); 336 if( m_bOverwriteLabelsForAttributedDataPointsAlso ) 337 { 338 Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); 339 if( bOldValue != rValue || 340 DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, C2U( "Label" ), aOldValue ) ) 341 { 342 DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "Label" ), uno::makeAny( aLabel ) ); 343 bChanged = true; 344 } 345 } 346 else if( bOldValue != rValue ) 347 { 348 GetPropertySet()->setPropertyValue( C2U( "Label" ), uno::makeAny( aLabel )); 349 bChanged = true; 350 } 351 } 352 } 353 break; 354 355 case SID_ATTR_NUMBERFORMAT_VALUE: 356 case SCHATTR_PERCENT_NUMBERFORMAT_VALUE: //fall through intended 357 { 358 bChanged = lcl_NumberFormatFromItemToPropertySet( nWhichId, rItemSet, GetPropertySet(), m_bOverwriteLabelsForAttributedDataPointsAlso ); 359 } 360 break; 361 362 case SID_ATTR_NUMBERFORMAT_SOURCE: 363 case SCHATTR_PERCENT_NUMBERFORMAT_SOURCE: //fall through intended 364 { 365 bChanged = lcl_UseSourceFormatFromItemToPropertySet( nWhichId, rItemSet, GetPropertySet(), m_bOverwriteLabelsForAttributedDataPointsAlso ); 366 } 367 break; 368 369 case SCHATTR_DATADESCR_SEPARATOR: 370 { 371 rtl::OUString aNewValue = static_cast< const SfxStringItem & >( rItemSet.Get( nWhichId )).GetValue(); 372 rtl::OUString aOldValue; 373 try 374 { 375 GetPropertySet()->getPropertyValue( C2U( "LabelSeparator" ) ) >>= aOldValue; 376 if( m_bOverwriteLabelsForAttributedDataPointsAlso ) 377 { 378 Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); 379 if( !aOldValue.equals(aNewValue) || 380 DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, C2U( "LabelSeparator" ), uno::makeAny( aOldValue ) ) ) 381 { 382 DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "LabelSeparator" ), uno::makeAny( aNewValue ) ); 383 bChanged = true; 384 } 385 } 386 else if( !aOldValue.equals(aNewValue) ) 387 { 388 GetPropertySet()->setPropertyValue( C2U( "LabelSeparator" ), uno::makeAny( aNewValue )); 389 bChanged = true; 390 } 391 } 392 catch( uno::Exception& e ) 393 { 394 ASSERT_EXCEPTION( e ); 395 } 396 } 397 break; 398 399 case SCHATTR_DATADESCR_PLACEMENT: 400 { 401 402 try 403 { 404 sal_Int32 nNew = static_cast< const SfxInt32Item & >( rItemSet.Get( nWhichId )).GetValue(); 405 sal_Int32 nOld =0; 406 if( !(GetPropertySet()->getPropertyValue( C2U( "LabelPlacement" ) ) >>= nOld) ) 407 { 408 if( m_aAvailableLabelPlacements.getLength() ) 409 nOld = m_aAvailableLabelPlacements[0]; 410 } 411 if( m_bOverwriteLabelsForAttributedDataPointsAlso ) 412 { 413 Reference< chart2::XDataSeries > xSeries( GetPropertySet(), uno::UNO_QUERY); 414 if( nOld!=nNew || 415 DataSeriesHelper::hasAttributedDataPointDifferentValue( xSeries, C2U( "LabelPlacement" ), uno::makeAny( nOld ) ) ) 416 { 417 DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "LabelPlacement" ), uno::makeAny( nNew ) ); 418 bChanged = true; 419 } 420 } 421 else if( nOld!=nNew ) 422 { 423 GetPropertySet()->setPropertyValue( C2U( "LabelPlacement" ), uno::makeAny( nNew )); 424 bChanged = true; 425 } 426 } 427 catch( uno::Exception& e ) 428 { 429 ASSERT_EXCEPTION( e ); 430 } 431 } 432 break; 433 434 case SCHATTR_STYLE_SYMBOL: 435 { 436 sal_Int32 nStyle = 437 static_cast< const SfxInt32Item & >( 438 rItemSet.Get( nWhichId )).GetValue(); 439 chart2::Symbol aSymbol; 440 441 GetPropertySet()->getPropertyValue( C2U( "Symbol" )) >>= aSymbol; 442 sal_Int32 nOldStyle = lcl_getSymbolStyleForSymbol( aSymbol ); 443 444 if( nStyle != nOldStyle ) 445 { 446 bool bDeleteSymbol = false; 447 switch( nStyle ) 448 { 449 case SVX_SYMBOLTYPE_NONE: 450 aSymbol.Style = chart2::SymbolStyle_NONE; 451 break; 452 case SVX_SYMBOLTYPE_AUTO: 453 aSymbol.Style = chart2::SymbolStyle_AUTO; 454 break; 455 case SVX_SYMBOLTYPE_BRUSHITEM: 456 aSymbol.Style = chart2::SymbolStyle_GRAPHIC; 457 break; 458 case SVX_SYMBOLTYPE_UNKNOWN: 459 bDeleteSymbol = true; 460 break; 461 462 default: 463 aSymbol.Style = chart2::SymbolStyle_STANDARD; 464 aSymbol.StandardSymbol = nStyle; 465 } 466 467 if( bDeleteSymbol ) 468 GetPropertySet()->setPropertyValue( C2U( "Symbol" ), uno::Any()); 469 else 470 GetPropertySet()->setPropertyValue( C2U( "Symbol" ), 471 uno::makeAny( aSymbol )); 472 bChanged = true; 473 } 474 } 475 break; 476 477 case SCHATTR_SYMBOL_SIZE: 478 { 479 Size aSize = static_cast< const SvxSizeItem & >( 480 rItemSet.Get( nWhichId )).GetSize(); 481 chart2::Symbol aSymbol; 482 483 GetPropertySet()->getPropertyValue( C2U( "Symbol" )) >>= aSymbol; 484 if( aSize.getWidth() != aSymbol.Size.Width || 485 aSize.getHeight() != aSymbol.Size.Height ) 486 { 487 aSymbol.Size.Width = aSize.getWidth(); 488 aSymbol.Size.Height = aSize.getHeight(); 489 490 GetPropertySet()->setPropertyValue( C2U( "Symbol" ), uno::makeAny( aSymbol )); 491 bChanged = true; 492 } 493 } 494 break; 495 496 case SCHATTR_SYMBOL_BRUSH: 497 { 498 const SvxBrushItem & rBrshItem( static_cast< const SvxBrushItem & >( 499 rItemSet.Get( nWhichId ))); 500 uno::Any aXGraphicAny; 501 const Graphic *pGraphic( rBrshItem.GetGraphic()); 502 if( pGraphic ) 503 { 504 uno::Reference< graphic::XGraphic > xGraphic( pGraphic->GetXGraphic()); 505 if( xGraphic.is()) 506 { 507 aXGraphicAny <<= xGraphic; 508 chart2::Symbol aSymbol; 509 GetPropertySet()->getPropertyValue( C2U( "Symbol" )) >>= aSymbol; 510 if( aSymbol.Graphic != xGraphic ) 511 { 512 aSymbol.Graphic = xGraphic; 513 GetPropertySet()->setPropertyValue( C2U( "Symbol" ), uno::makeAny( aSymbol )); 514 bChanged = true; 515 } 516 } 517 } 518 } 519 break; 520 521 case SCHATTR_TEXT_DEGREES: 522 { 523 double fValue = static_cast< double >( 524 static_cast< const SfxInt32Item & >( 525 rItemSet.Get( nWhichId )).GetValue()) / 100.0; 526 double fOldValue = 0.0; 527 bool bPropExisted = 528 ( GetPropertySet()->getPropertyValue( C2U( "TextRotation" )) >>= fOldValue ); 529 530 if( ! bPropExisted || 531 ( bPropExisted && fOldValue != fValue )) 532 { 533 GetPropertySet()->setPropertyValue( C2U( "TextRotation" ), uno::makeAny( fValue )); 534 bChanged = true; 535 } 536 } 537 break; 538 } 539 540 return bChanged; 541 } 542 543 void DataPointItemConverter::FillSpecialItem( 544 sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const 545 throw( uno::Exception ) 546 { 547 switch( nWhichId ) 548 { 549 case SCHATTR_DATADESCR_SHOW_NUMBER: 550 case SCHATTR_DATADESCR_SHOW_PERCENTAGE: 551 case SCHATTR_DATADESCR_SHOW_CATEGORY: 552 case SCHATTR_DATADESCR_SHOW_SYMBOL: 553 { 554 chart2::DataPointLabel aLabel; 555 if( GetPropertySet()->getPropertyValue( C2U( "Label" )) >>= aLabel ) 556 { 557 sal_Bool bValue = (SCHATTR_DATADESCR_SHOW_NUMBER==nWhichId) ? aLabel.ShowNumber : ( 558 (SCHATTR_DATADESCR_SHOW_PERCENTAGE==nWhichId) ? aLabel.ShowNumberInPercent : ( 559 (SCHATTR_DATADESCR_SHOW_CATEGORY==nWhichId) ? aLabel.ShowCategoryName : aLabel.ShowLegendSymbol )); 560 561 rOutItemSet.Put( SfxBoolItem( nWhichId, bValue )); 562 563 if( m_bOverwriteLabelsForAttributedDataPointsAlso ) 564 { 565 if( DataSeriesHelper::hasAttributedDataPointDifferentValue( 566 Reference< chart2::XDataSeries >( GetPropertySet(), uno::UNO_QUERY), C2U( "Label" ), uno::makeAny(aLabel) ) ) 567 { 568 rOutItemSet.InvalidateItem(nWhichId); 569 } 570 } 571 } 572 } 573 break; 574 575 case SID_ATTR_NUMBERFORMAT_VALUE: 576 { 577 sal_Int32 nKey = 0; 578 if( !(GetPropertySet()->getPropertyValue( C2U( "NumberFormat" )) >>= nKey) ) 579 nKey = m_nNumberFormat; 580 rOutItemSet.Put( SfxUInt32Item( nWhichId, nKey )); 581 } 582 break; 583 584 case SCHATTR_PERCENT_NUMBERFORMAT_VALUE: 585 { 586 sal_Int32 nKey = 0; 587 if( !(GetPropertySet()->getPropertyValue( C2U( "PercentageNumberFormat" )) >>= nKey) ) 588 nKey = m_nPercentNumberFormat; 589 rOutItemSet.Put( SfxUInt32Item( nWhichId, nKey )); 590 } 591 break; 592 593 case SID_ATTR_NUMBERFORMAT_SOURCE: 594 { 595 bool bNumberFormatIsSet = ( GetPropertySet()->getPropertyValue( C2U( "NumberFormat" )).hasValue()); 596 rOutItemSet.Put( SfxBoolItem( nWhichId, ! bNumberFormatIsSet )); 597 } 598 break; 599 case SCHATTR_PERCENT_NUMBERFORMAT_SOURCE: 600 { 601 bool bNumberFormatIsSet = ( GetPropertySet()->getPropertyValue( C2U( "PercentageNumberFormat" )).hasValue()); 602 rOutItemSet.Put( SfxBoolItem( nWhichId, ! bNumberFormatIsSet )); 603 } 604 break; 605 606 case SCHATTR_DATADESCR_SEPARATOR: 607 { 608 rtl::OUString aValue; 609 try 610 { 611 GetPropertySet()->getPropertyValue( C2U( "LabelSeparator" ) ) >>= aValue; 612 rOutItemSet.Put( SfxStringItem( nWhichId, aValue )); 613 } 614 catch( uno::Exception& e ) 615 { 616 ASSERT_EXCEPTION( e ); 617 } 618 } 619 break; 620 621 case SCHATTR_DATADESCR_PLACEMENT: 622 { 623 try 624 { 625 sal_Int32 nPlacement=0; 626 if( GetPropertySet()->getPropertyValue( C2U( "LabelPlacement" ) ) >>= nPlacement ) 627 rOutItemSet.Put( SfxInt32Item( nWhichId, nPlacement )); 628 else if( m_aAvailableLabelPlacements.getLength() ) 629 rOutItemSet.Put( SfxInt32Item( nWhichId, m_aAvailableLabelPlacements[0] )); 630 } 631 catch( uno::Exception& e ) 632 { 633 ASSERT_EXCEPTION( e ); 634 } 635 } 636 break; 637 638 case SCHATTR_DATADESCR_AVAILABLE_PLACEMENTS: 639 { 640 SvULongs aList; 641 for ( sal_Int32 nN=0; nN<m_aAvailableLabelPlacements.getLength(); nN++ ) 642 aList.Insert( m_aAvailableLabelPlacements[nN], sal::static_int_cast< sal_uInt16 >(nN) ); 643 rOutItemSet.Put( SfxIntegerListItem( nWhichId, aList ) ); 644 } 645 break; 646 647 case SCHATTR_DATADESCR_NO_PERCENTVALUE: 648 { 649 rOutItemSet.Put( SfxBoolItem( nWhichId, m_bForbidPercentValue )); 650 } 651 break; 652 653 case SCHATTR_STYLE_SYMBOL: 654 { 655 chart2::Symbol aSymbol; 656 if( GetPropertySet()->getPropertyValue( C2U( "Symbol" )) >>= aSymbol ) 657 rOutItemSet.Put( SfxInt32Item( nWhichId, lcl_getSymbolStyleForSymbol( aSymbol ) )); 658 } 659 break; 660 661 case SCHATTR_SYMBOL_SIZE: 662 { 663 chart2::Symbol aSymbol; 664 if( GetPropertySet()->getPropertyValue( C2U( "Symbol" )) >>= aSymbol ) 665 rOutItemSet.Put( 666 SvxSizeItem( nWhichId, Size( aSymbol.Size.Width, aSymbol.Size.Height ) )); 667 } 668 break; 669 670 case SCHATTR_SYMBOL_BRUSH: 671 { 672 chart2::Symbol aSymbol; 673 if(( GetPropertySet()->getPropertyValue( C2U( "Symbol" )) >>= aSymbol ) 674 && aSymbol.Graphic.is() ) 675 { 676 rOutItemSet.Put( SvxBrushItem( Graphic( aSymbol.Graphic ), GPOS_MM, SCHATTR_SYMBOL_BRUSH )); 677 } 678 } 679 break; 680 681 case SCHATTR_TEXT_DEGREES: 682 { 683 double fValue = 0; 684 685 if( GetPropertySet()->getPropertyValue( C2U( "TextRotation" )) >>= fValue ) 686 { 687 rOutItemSet.Put( SfxInt32Item( nWhichId, static_cast< sal_Int32 >( 688 ::rtl::math::round( fValue * 100.0 ) ) )); 689 } 690 } 691 break; 692 } 693 } 694 695 } // namespace wrapper 696 } // namespace chart 697