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 "DiagramWrapper.hxx" 27 #include "macros.hxx" 28 #include "servicenames_charttypes.hxx" 29 #include "DataSeriesPointWrapper.hxx" 30 #include "AxisWrapper.hxx" 31 #include "AxisHelper.hxx" 32 #include "Chart2ModelContact.hxx" 33 #include "PositionAndSizeHelper.hxx" 34 #include "WallFloorWrapper.hxx" 35 #include "MinMaxLineWrapper.hxx" 36 #include "UpDownBarWrapper.hxx" 37 #include "DiagramHelper.hxx" 38 #include "DataSourceHelper.hxx" 39 #include "ChartModelHelper.hxx" 40 #include "WrappedIgnoreProperty.hxx" 41 #include "WrappedAxisAndGridExistenceProperties.hxx" 42 #include "WrappedStatisticProperties.hxx" 43 #include "WrappedSymbolProperties.hxx" 44 #include "WrappedDataCaptionProperties.hxx" 45 #include "WrappedSplineProperties.hxx" 46 #include "WrappedStockProperties.hxx" 47 #include "WrappedSceneProperty.hxx" 48 #include "RelativePositionHelper.hxx" 49 #include "ContainerHelper.hxx" 50 #include "ControllerLockGuard.hxx" 51 #include "ModifyListenerHelper.hxx" 52 #include "DisposeHelper.hxx" 53 #include <comphelper/InlineContainer.hxx> 54 #include "WrappedAutomaticPositionProperties.hxx" 55 #include "CommonConverters.hxx" 56 57 #include <com/sun/star/beans/PropertyAttribute.hpp> 58 #include <com/sun/star/chart2/XTitled.hpp> 59 #include <com/sun/star/chart/ChartDataRowSource.hpp> 60 #include <com/sun/star/chart2/RelativeSize.hpp> 61 #include <com/sun/star/chart2/RelativePosition.hpp> 62 #include <com/sun/star/chart/ChartSolidType.hpp> 63 64 #include "LineProperties.hxx" 65 #include "FillProperties.hxx" 66 #include "UserDefinedProperties.hxx" 67 #include "SceneProperties.hxx" 68 69 #include <map> 70 #include <algorithm> 71 #include <rtl/ustrbuf.hxx> 72 // header for define DBG_ERROR 73 #include <tools/debug.hxx> 74 #include <com/sun/star/lang/XServiceName.hpp> 75 #include <com/sun/star/util/XRefreshable.hpp> 76 77 using namespace ::com::sun::star; 78 using namespace ::chart::wrapper; 79 80 using ::com::sun::star::uno::Reference; 81 using ::com::sun::star::uno::Any; 82 using ::com::sun::star::uno::Sequence; 83 using ::com::sun::star::beans::Property; 84 using ::com::sun::star::chart::XAxis; 85 using ::osl::MutexGuard; 86 using ::rtl::OUString; 87 88 namespace 89 { 90 static const OUString lcl_aServiceName( 91 RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart.Diagram" )); 92 93 enum 94 { 95 PROP_DIAGRAM_ATTRIBUTED_DATA_POINTS, 96 PROP_DIAGRAM_PERCENT_STACKED, 97 PROP_DIAGRAM_STACKED, 98 PROP_DIAGRAM_THREE_D, 99 PROP_DIAGRAM_SOLIDTYPE, 100 PROP_DIAGRAM_DEEP, 101 PROP_DIAGRAM_VERTICAL, 102 PROP_DIAGRAM_NUMBER_OF_LINES, 103 PROP_DIAGRAM_STACKED_BARS_CONNECTED, 104 PROP_DIAGRAM_DATAROW_SOURCE, 105 106 PROP_DIAGRAM_GROUP_BARS_PER_AXIS, 107 PROP_DIAGRAM_INCLUDE_HIDDEN_CELLS, 108 109 PROP_DIAGRAM_SORT_BY_X_VALUES, 110 111 PROP_DIAGRAM_STARTING_ANGLE, 112 113 PROP_DIAGRAM_RIGHT_ANGLED_AXES, 114 PROP_DIAGRAM_PERSPECTIVE, 115 PROP_DIAGRAM_ROTATION_HORIZONTAL, 116 PROP_DIAGRAM_ROTATION_VERTICAL, 117 118 PROP_DIAGRAM_MISSING_VALUE_TREATMENT, 119 120 PROP_DIAGRAM_HAS_X_AXIS, 121 PROP_DIAGRAM_HAS_X_AXIS_DESCR, 122 PROP_DIAGRAM_HAS_X_AXIS_TITLE, 123 PROP_DIAGRAM_HAS_X_AXIS_GRID, 124 PROP_DIAGRAM_HAS_X_AXIS_HELP_GRID, 125 126 PROP_DIAGRAM_HAS_Y_AXIS, 127 PROP_DIAGRAM_HAS_Y_AXIS_DESCR, 128 PROP_DIAGRAM_HAS_Y_AXIS_TITLE, 129 PROP_DIAGRAM_HAS_Y_AXIS_GRID, 130 PROP_DIAGRAM_HAS_Y_AXIS_HELP_GRID, 131 132 PROP_DIAGRAM_HAS_Z_AXIS, 133 PROP_DIAGRAM_HAS_Z_AXIS_DESCR, 134 PROP_DIAGRAM_HAS_Z_AXIS_TITLE, 135 PROP_DIAGRAM_HAS_Z_AXIS_GRID, 136 PROP_DIAGRAM_HAS_Z_AXIS_HELP_GRID, 137 138 PROP_DIAGRAM_HAS_SECOND_X_AXIS, 139 PROP_DIAGRAM_HAS_SECOND_X_AXIS_DESCR, 140 141 PROP_DIAGRAM_HAS_SECOND_Y_AXIS, 142 PROP_DIAGRAM_HAS_SECOND_Y_AXIS_DESCR, 143 144 PROP_DIAGRAM_HAS_SECOND_X_AXIS_TITLE, 145 PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE, 146 147 PROP_DIAGRAM_AUTOMATIC_SIZE 148 }; 149 150 void lcl_AddPropertiesToVector( 151 ::std::vector< Property > & rOutProperties ) 152 { 153 rOutProperties.push_back( 154 Property( C2U( "AttributedDataPoints" ), 155 PROP_DIAGRAM_ATTRIBUTED_DATA_POINTS, 156 ::getCppuType( reinterpret_cast< const uno::Sequence< uno::Sequence< sal_Int32 > > * >(0)), 157 beans::PropertyAttribute::BOUND 158 | beans::PropertyAttribute::MAYBEVOID )); 159 160 // see com.sun.star.chart.StackableDiagram 161 rOutProperties.push_back( 162 Property( C2U( "Percent" ), 163 PROP_DIAGRAM_PERCENT_STACKED, 164 ::getBooleanCppuType(), 165 beans::PropertyAttribute::BOUND 166 | beans::PropertyAttribute::MAYBEDEFAULT )); 167 rOutProperties.push_back( 168 Property( C2U( "Stacked" ), 169 PROP_DIAGRAM_STACKED, 170 ::getBooleanCppuType(), 171 beans::PropertyAttribute::BOUND 172 | beans::PropertyAttribute::MAYBEDEFAULT )); 173 174 rOutProperties.push_back( 175 Property( C2U( "Dim3D" ), 176 PROP_DIAGRAM_THREE_D, 177 ::getBooleanCppuType(), 178 beans::PropertyAttribute::BOUND 179 | beans::PropertyAttribute::MAYBEDEFAULT )); 180 181 // see com.sun.star.chart.Chart3DBarProperties 182 rOutProperties.push_back( 183 Property( C2U( "SolidType" ), 184 PROP_DIAGRAM_SOLIDTYPE, 185 ::getCppuType( reinterpret_cast< sal_Int32 * >(0)), 186 beans::PropertyAttribute::BOUND 187 | beans::PropertyAttribute::MAYBEDEFAULT )); 188 189 // see com.sun.star.chart.BarDiagram 190 rOutProperties.push_back( 191 Property( C2U( "Deep" ), 192 PROP_DIAGRAM_DEEP, 193 ::getBooleanCppuType(), 194 beans::PropertyAttribute::BOUND 195 | beans::PropertyAttribute::MAYBEDEFAULT )); 196 rOutProperties.push_back( 197 Property( C2U( "Vertical" ), 198 PROP_DIAGRAM_VERTICAL, 199 ::getBooleanCppuType(), 200 beans::PropertyAttribute::BOUND 201 | beans::PropertyAttribute::MAYBEDEFAULT )); 202 rOutProperties.push_back( 203 Property( C2U( "NumberOfLines" ), 204 PROP_DIAGRAM_NUMBER_OF_LINES, 205 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 206 beans::PropertyAttribute::BOUND 207 | beans::PropertyAttribute::MAYBEDEFAULT )); 208 rOutProperties.push_back( 209 Property( C2U( "StackedBarsConnected" ), 210 PROP_DIAGRAM_STACKED_BARS_CONNECTED, 211 ::getBooleanCppuType(), 212 beans::PropertyAttribute::BOUND 213 | beans::PropertyAttribute::MAYBEDEFAULT )); 214 215 rOutProperties.push_back( 216 Property( C2U( "DataRowSource" ), 217 PROP_DIAGRAM_DATAROW_SOURCE, 218 ::getCppuType( reinterpret_cast< const ::com::sun::star::chart::ChartDataRowSource * >(0)), 219 beans::PropertyAttribute::BOUND 220 | beans::PropertyAttribute::MAYBEDEFAULT )); 221 222 rOutProperties.push_back( 223 Property( C2U( "GroupBarsPerAxis" ), 224 PROP_DIAGRAM_GROUP_BARS_PER_AXIS, 225 ::getBooleanCppuType(), 226 beans::PropertyAttribute::BOUND 227 | beans::PropertyAttribute::MAYBEDEFAULT )); 228 229 rOutProperties.push_back( 230 Property( C2U( "IncludeHiddenCells" ), 231 PROP_DIAGRAM_INCLUDE_HIDDEN_CELLS, 232 ::getBooleanCppuType(), 233 beans::PropertyAttribute::BOUND 234 | beans::PropertyAttribute::MAYBEDEFAULT )); 235 236 //new for XY charts 237 rOutProperties.push_back( 238 Property( C2U( "SortByXValues" ), 239 PROP_DIAGRAM_SORT_BY_X_VALUES, 240 ::getBooleanCppuType(), 241 beans::PropertyAttribute::BOUND 242 | beans::PropertyAttribute::MAYBEDEFAULT )); 243 244 //for pie and donut charts 245 rOutProperties.push_back( 246 Property( C2U( "StartingAngle" ), 247 PROP_DIAGRAM_STARTING_ANGLE, 248 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0) ), 249 beans::PropertyAttribute::BOUND 250 | beans::PropertyAttribute::MAYBEDEFAULT )); 251 252 //new for 3D charts 253 rOutProperties.push_back( 254 Property( C2U("RightAngledAxes"), 255 PROP_DIAGRAM_RIGHT_ANGLED_AXES, 256 ::getBooleanCppuType(), 257 beans::PropertyAttribute::BOUND 258 | beans::PropertyAttribute::MAYBEDEFAULT )); 259 260 rOutProperties.push_back( 261 Property( C2U("Perspective"), 262 PROP_DIAGRAM_PERSPECTIVE, 263 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 264 beans::PropertyAttribute::MAYBEVOID )); 265 266 rOutProperties.push_back( 267 Property( C2U("RotationHorizontal"), 268 PROP_DIAGRAM_ROTATION_HORIZONTAL, 269 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 270 beans::PropertyAttribute::MAYBEVOID )); 271 272 rOutProperties.push_back( 273 Property( C2U("RotationVertical"), 274 PROP_DIAGRAM_ROTATION_VERTICAL, 275 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 276 beans::PropertyAttribute::MAYBEVOID )); 277 278 // XAxisXSupplier 279 rOutProperties.push_back( 280 Property( C2U( "HasXAxis" ), 281 PROP_DIAGRAM_HAS_X_AXIS, 282 ::getBooleanCppuType(), 283 beans::PropertyAttribute::BOUND 284 | beans::PropertyAttribute::MAYBEDEFAULT )); 285 rOutProperties.push_back( 286 Property( C2U( "HasXAxisDescription" ), 287 PROP_DIAGRAM_HAS_X_AXIS_DESCR, 288 ::getBooleanCppuType(), 289 beans::PropertyAttribute::BOUND 290 | beans::PropertyAttribute::MAYBEDEFAULT )); 291 rOutProperties.push_back( 292 Property( C2U( "HasXAxisTitle" ), 293 PROP_DIAGRAM_HAS_X_AXIS_TITLE, 294 ::getBooleanCppuType(), 295 beans::PropertyAttribute::BOUND 296 | beans::PropertyAttribute::MAYBEDEFAULT )); 297 rOutProperties.push_back( 298 Property( C2U( "HasXAxisGrid" ), 299 PROP_DIAGRAM_HAS_X_AXIS_GRID, 300 ::getBooleanCppuType(), 301 beans::PropertyAttribute::BOUND 302 | beans::PropertyAttribute::MAYBEDEFAULT )); 303 rOutProperties.push_back( 304 Property( C2U( "HasXAxisHelpGrid" ), 305 PROP_DIAGRAM_HAS_X_AXIS_HELP_GRID, 306 ::getBooleanCppuType(), 307 beans::PropertyAttribute::BOUND 308 | beans::PropertyAttribute::MAYBEDEFAULT )); 309 310 // XAxisYSupplier 311 rOutProperties.push_back( 312 Property( C2U( "HasYAxis" ), 313 PROP_DIAGRAM_HAS_Y_AXIS, 314 ::getBooleanCppuType(), 315 beans::PropertyAttribute::BOUND 316 | beans::PropertyAttribute::MAYBEDEFAULT )); 317 rOutProperties.push_back( 318 Property( C2U( "HasYAxisDescription" ), 319 PROP_DIAGRAM_HAS_Y_AXIS_DESCR, 320 ::getBooleanCppuType(), 321 beans::PropertyAttribute::BOUND 322 | beans::PropertyAttribute::MAYBEDEFAULT )); 323 rOutProperties.push_back( 324 Property( C2U( "HasYAxisTitle" ), 325 PROP_DIAGRAM_HAS_Y_AXIS_TITLE, 326 ::getBooleanCppuType(), 327 beans::PropertyAttribute::BOUND 328 | beans::PropertyAttribute::MAYBEDEFAULT )); 329 rOutProperties.push_back( 330 Property( C2U( "HasYAxisGrid" ), 331 PROP_DIAGRAM_HAS_Y_AXIS_GRID, 332 ::getBooleanCppuType(), 333 beans::PropertyAttribute::BOUND 334 | beans::PropertyAttribute::MAYBEDEFAULT )); 335 rOutProperties.push_back( 336 Property( C2U( "HasYAxisHelpGrid" ), 337 PROP_DIAGRAM_HAS_Y_AXIS_HELP_GRID, 338 ::getBooleanCppuType(), 339 beans::PropertyAttribute::BOUND 340 | beans::PropertyAttribute::MAYBEDEFAULT )); 341 342 // XAxisZSupplier 343 rOutProperties.push_back( 344 Property( C2U( "HasZAxis" ), 345 PROP_DIAGRAM_HAS_Z_AXIS, 346 ::getBooleanCppuType(), 347 beans::PropertyAttribute::BOUND 348 | beans::PropertyAttribute::MAYBEDEFAULT )); 349 rOutProperties.push_back( 350 Property( C2U( "HasZAxisDescription" ), 351 PROP_DIAGRAM_HAS_Z_AXIS_DESCR, 352 ::getBooleanCppuType(), 353 beans::PropertyAttribute::BOUND 354 | beans::PropertyAttribute::MAYBEDEFAULT )); 355 rOutProperties.push_back( 356 Property( C2U( "HasZAxisTitle" ), 357 PROP_DIAGRAM_HAS_Z_AXIS_TITLE, 358 ::getBooleanCppuType(), 359 beans::PropertyAttribute::BOUND 360 | beans::PropertyAttribute::MAYBEDEFAULT )); 361 rOutProperties.push_back( 362 Property( C2U( "HasZAxisGrid" ), 363 PROP_DIAGRAM_HAS_Z_AXIS_GRID, 364 ::getBooleanCppuType(), 365 beans::PropertyAttribute::BOUND 366 | beans::PropertyAttribute::MAYBEDEFAULT )); 367 rOutProperties.push_back( 368 Property( C2U( "HasZAxisHelpGrid" ), 369 PROP_DIAGRAM_HAS_Z_AXIS_HELP_GRID, 370 ::getBooleanCppuType(), 371 beans::PropertyAttribute::BOUND 372 | beans::PropertyAttribute::MAYBEDEFAULT )); 373 374 // XTwoAxisXSupplier 375 rOutProperties.push_back( 376 Property( C2U( "HasSecondaryXAxis" ), 377 PROP_DIAGRAM_HAS_SECOND_X_AXIS, 378 ::getBooleanCppuType(), 379 beans::PropertyAttribute::BOUND 380 | beans::PropertyAttribute::MAYBEDEFAULT )); 381 rOutProperties.push_back( 382 Property( C2U( "HasSecondaryXAxisDescription" ), 383 PROP_DIAGRAM_HAS_SECOND_X_AXIS_DESCR, 384 ::getBooleanCppuType(), 385 beans::PropertyAttribute::BOUND 386 | beans::PropertyAttribute::MAYBEDEFAULT )); 387 388 // XTwoAxisYSupplier 389 rOutProperties.push_back( 390 Property( C2U( "HasSecondaryYAxis" ), 391 PROP_DIAGRAM_HAS_SECOND_Y_AXIS, 392 ::getBooleanCppuType(), 393 beans::PropertyAttribute::BOUND 394 | beans::PropertyAttribute::MAYBEDEFAULT )); 395 rOutProperties.push_back( 396 Property( C2U( "HasSecondaryYAxisDescription" ), 397 PROP_DIAGRAM_HAS_SECOND_Y_AXIS_DESCR, 398 ::getBooleanCppuType(), 399 beans::PropertyAttribute::BOUND 400 | beans::PropertyAttribute::MAYBEDEFAULT )); 401 402 // XSecondAxisTitleSupplier 403 rOutProperties.push_back( 404 Property( C2U( "HasSecondaryXAxisTitle" ), 405 PROP_DIAGRAM_HAS_SECOND_X_AXIS_TITLE, 406 ::getBooleanCppuType(), 407 beans::PropertyAttribute::BOUND 408 | beans::PropertyAttribute::MAYBEDEFAULT )); 409 rOutProperties.push_back( 410 Property( C2U( "HasSecondaryYAxisTitle" ), 411 PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE, 412 ::getBooleanCppuType(), 413 beans::PropertyAttribute::BOUND 414 | beans::PropertyAttribute::MAYBEDEFAULT )); 415 416 rOutProperties.push_back( 417 Property( C2U( "MissingValueTreatment" ), 418 PROP_DIAGRAM_MISSING_VALUE_TREATMENT, 419 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 420 beans::PropertyAttribute::BOUND 421 | beans::PropertyAttribute::MAYBEVOID )); 422 423 rOutProperties.push_back( 424 Property( C2U( "AutomaticSize" ), 425 PROP_DIAGRAM_AUTOMATIC_SIZE, 426 ::getBooleanCppuType(), 427 beans::PropertyAttribute::BOUND 428 | beans::PropertyAttribute::MAYBEDEFAULT )); 429 } 430 431 struct StaticDiagramWrapperPropertyArray_Initializer 432 { 433 Sequence< Property >* operator()() 434 { 435 static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); 436 return &aPropSeq; 437 } 438 439 private: 440 uno::Sequence< Property > lcl_GetPropertySequence() 441 { 442 ::std::vector< ::com::sun::star::beans::Property > aProperties; 443 lcl_AddPropertiesToVector( aProperties ); 444 ::chart::LineProperties::AddPropertiesToVector( aProperties ); 445 ::chart::FillProperties::AddPropertiesToVector( aProperties ); 446 ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); 447 ::chart::SceneProperties::AddPropertiesToVector( aProperties ); 448 WrappedStatisticProperties::addProperties( aProperties ); 449 WrappedSymbolProperties::addProperties( aProperties ); 450 WrappedDataCaptionProperties::addProperties( aProperties ); 451 WrappedSplineProperties::addProperties( aProperties ); 452 WrappedStockProperties::addProperties( aProperties ); 453 WrappedAutomaticPositionProperties::addProperties( aProperties ); 454 455 ::std::sort( aProperties.begin(), aProperties.end(), 456 ::chart::PropertyNameLess() ); 457 458 return ::chart::ContainerHelper::ContainerToSequence( aProperties ); 459 } 460 }; 461 462 struct StaticDiagramWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticDiagramWrapperPropertyArray_Initializer > 463 { 464 }; 465 466 bool lcl_isXYChart( const Reference< chart2::XDiagram > xDiagram ) 467 { 468 bool bRet = false; 469 Reference< chart2::XChartType > xChartType( ::chart::DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); 470 if( xChartType.is() ) 471 { 472 rtl::OUString aChartType( xChartType->getChartType() ); 473 if( aChartType.equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_SCATTER) ) 474 bRet = true; 475 } 476 return bRet; 477 } 478 479 sal_Int32 lcl_getNewAPIIndexForOldAPIIndex( 480 sal_Int32 nOldAPIIndex 481 , Reference< chart2::XDiagram > xDiagram ) 482 { 483 sal_Int32 nNewAPIIndex = nOldAPIIndex; 484 485 if( lcl_isXYChart( xDiagram ) ) 486 { 487 if( nNewAPIIndex >= 1 ) 488 nNewAPIIndex -= 1; 489 } 490 491 ::std::vector< uno::Reference< chart2::XDataSeries > > aSeriesList( 492 ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); 493 if( nNewAPIIndex >= static_cast<sal_Int32>(aSeriesList.size()) ) 494 nNewAPIIndex = -1; 495 496 return nNewAPIIndex; 497 } 498 499 typedef ::std::map< OUString, OUString > tChartTypeMap; 500 501 OUString lcl_getDiagramType( const OUString & rTemplateServiceName ) 502 { 503 const OUString aPrefix( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.chart2.template.")); 504 505 if( rTemplateServiceName.match( aPrefix )) 506 { 507 const OUString aName( rTemplateServiceName.copy( aPrefix.getLength())); 508 509 // "Area" "StackedArea" "PercentStackedArea" "ThreeDArea" 510 // "StackedThreeDArea" "PercentStackedThreeDArea" 511 if( aName.indexOf( C2U("Area") ) != -1 ) 512 return C2U( "com.sun.star.chart.AreaDiagram" ); 513 514 // "Pie" "PieAllExploded" "ThreeDPie" "ThreeDPieAllExploded" 515 if( aName.indexOf( C2U("Pie") ) != -1 ) 516 return C2U( "com.sun.star.chart.PieDiagram" ); 517 518 // "Column" "StackedColumn" "PercentStackedColumn" "ThreeDColumnDeep" 519 // "ThreeDColumnFlat" "StackedThreeDColumnFlat" 520 // "PercentStackedThreeDColumnFlat" "Bar" "StackedBar" 521 // "PercentStackedBar" "ThreeDBarDeep" "ThreeDBarFlat" 522 // "StackedThreeDBarFlat" "PercentStackedThreeDBarFlat" "ColumnWithLine" 523 // "StackedColumnWithLine" 524 if( aName.indexOf( C2U("Column") ) != -1 || aName.indexOf( C2U("Bar") ) != -1 ) 525 return C2U( "com.sun.star.chart.BarDiagram" ); 526 527 // "Donut" "DonutAllExploded" "ThreeDDonut" "ThreeDDonutAllExploded" 528 if( aName.indexOf( C2U("Donut") ) != -1 ) 529 return C2U( "com.sun.star.chart.DonutDiagram" ); 530 531 // "ScatterLineSymbol" "ScatterLine" "ScatterSymbol" "ThreeDScatter" 532 if( aName.indexOf( C2U("Scatter") ) != -1 ) 533 return C2U( "com.sun.star.chart.XYDiagram" ); 534 535 // "FilledNet" "StackedFilledNet" "PercentStackedFilledNet" 536 if( aName.indexOf( C2U("FilledNet") ) != -1 ) 537 return C2U( "com.sun.star.chart.FilledNetDiagram" ); 538 539 // "Net" "NetSymbol" "NetLine" "StackedNet" "StackedNetSymbol" 540 // "StackedNetLine" "PercentStackedNet" "PercentStackedNetSymbol" 541 // "PercentStackedNetLine" 542 if( aName.indexOf( C2U("Net") ) != -1 ) 543 return C2U( "com.sun.star.chart.NetDiagram" ); 544 545 // "StockLowHighClose" "StockOpenLowHighClose" "StockVolumeLowHighClose" 546 // "StockVolumeOpenLowHighClose" 547 if( aName.indexOf( C2U("Stock") ) != -1 ) 548 return C2U( "com.sun.star.chart.StockDiagram" ); 549 550 if( aName.indexOf( C2U("Bubble") ) != -1 ) 551 return C2U( "com.sun.star.chart.BubbleDiagram" ); 552 553 // Note: this must be checked after Bar, Net and Scatter 554 555 // "Symbol" "StackedSymbol" "PercentStackedSymbol" "Line" "StackedLine" 556 // "PercentStackedLine" "LineSymbol" "StackedLineSymbol" 557 // "PercentStackedLineSymbol" "ThreeDLine" "StackedThreeDLine" 558 // "PercentStackedThreeDLine" "ThreeDLineDeep" 559 if( aName.indexOf( C2U("Line") ) != -1 || aName.indexOf( C2U("Symbol") ) != -1 ) 560 return C2U( "com.sun.star.chart.LineDiagram" ); 561 562 OSL_ENSURE( false, "unknown template" ); 563 } 564 565 return OUString(); 566 } 567 568 typedef ::comphelper::MakeMap< ::rtl::OUString, ::rtl::OUString > tMakeStringStringMap; 569 const tMakeStringStringMap& lcl_getChartTypeNameMap() 570 { 571 static tMakeStringStringMap g_aChartTypeNameMap = 572 tMakeStringStringMap 573 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.LineChartType" ) 574 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.LineDiagram" ) ) 575 576 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.AreaChartType" ) 577 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.AreaDiagram" ) ) 578 579 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.ColumnChartType" ) 580 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.BarDiagram" ) ) 581 582 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.PieChartType" ) 583 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.PieDiagram" ) ) 584 585 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.DonutChartType" ) 586 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.DonutDiagram" ) ) 587 588 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.ScatterChartType" ) 589 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.XYDiagram" ) ) 590 591 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.FilledNetChartType" ) 592 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.FilledNetDiagram" ) ) 593 594 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.NetChartType" ) 595 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.NetDiagram" ) ) 596 597 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.CandleStickChartType" ) 598 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.StockDiagram" ) ) 599 600 ( ::rtl::OUString::createFromAscii( "com.sun.star.chart2.BubbleChartType" ) 601 , ::rtl::OUString::createFromAscii( "com.sun.star.chart.BubbleDiagram" ) ) 602 603 ; 604 return g_aChartTypeNameMap; 605 } 606 607 608 OUString lcl_getOldChartTypeName( const OUString & rNewChartTypeName ) 609 { 610 OUString aOld(rNewChartTypeName); 611 612 const tMakeStringStringMap& rMap = lcl_getChartTypeNameMap(); 613 tMakeStringStringMap::const_iterator aIt( rMap.find( rNewChartTypeName )); 614 if( aIt != rMap.end()) 615 { 616 aOld = aIt->second; 617 } 618 return aOld; 619 } 620 621 } // anonymous namespace 622 623 // -------------------------------------------------------------------------------- 624 625 namespace chart 626 { 627 namespace wrapper 628 { 629 630 DiagramWrapper::DiagramWrapper( 631 ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : 632 m_spChart2ModelContact( spChart2ModelContact ), 633 m_aEventListenerContainer( m_aMutex ) 634 { 635 } 636 637 DiagramWrapper::~DiagramWrapper() 638 {} 639 640 // ____ XDiagram ____ 641 OUString SAL_CALL DiagramWrapper::getDiagramType() 642 throw (uno::RuntimeException) 643 { 644 OUString aRet; 645 646 Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); 647 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 648 if( xChartDoc.is() && xDiagram.is() ) 649 { 650 Reference< beans::XPropertySet > xChartDocProp( xChartDoc, uno::UNO_QUERY ); 651 if( xChartDocProp.is() ) 652 { 653 uno::Reference< util::XRefreshable > xAddIn; 654 if( xChartDocProp->getPropertyValue( C2U( "AddIn" ) ) >>= xAddIn ) 655 { 656 uno::Reference< lang::XServiceName > xServiceName( xAddIn, uno::UNO_QUERY ); 657 if( xServiceName.is()) 658 return xServiceName->getServiceName(); 659 } 660 } 661 662 Reference< lang::XMultiServiceFactory > xChartTypeManager( xChartDoc->getChartTypeManager(), uno::UNO_QUERY ); 663 DiagramHelper::tTemplateWithServiceName aTemplateAndService = 664 DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager ); 665 666 aRet = lcl_getDiagramType( aTemplateAndService.second ); 667 } 668 669 if( !aRet.getLength()) 670 { 671 // none of the standard templates matched 672 // use first chart type 673 Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); 674 if( xChartType.is() ) 675 { 676 aRet = xChartType->getChartType(); 677 if( aRet.getLength() ) 678 aRet = lcl_getOldChartTypeName( aRet ); 679 } 680 if( !aRet.getLength()) 681 aRet = C2U( "com.sun.star.chart.BarDiagram" ); 682 } 683 684 return aRet; 685 } 686 687 Reference< 688 beans::XPropertySet > SAL_CALL DiagramWrapper::getDataRowProperties( sal_Int32 nRow ) 689 throw (lang::IndexOutOfBoundsException, 690 uno::RuntimeException) 691 { 692 if( nRow < 0 ) 693 throw lang::IndexOutOfBoundsException( 694 C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); 695 696 Reference< chart2::XDataSeries > xSeries; 697 698 sal_Int32 nNewAPIIndex = lcl_getNewAPIIndexForOldAPIIndex( nRow, m_spChart2ModelContact->getChart2Diagram() ); 699 if( nNewAPIIndex < 0 ) 700 throw lang::IndexOutOfBoundsException( 701 C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); 702 703 Reference< beans::XPropertySet > xRet( new DataSeriesPointWrapper( 704 DataSeriesPointWrapper::DATA_SERIES, nNewAPIIndex, 0, m_spChart2ModelContact ) ); 705 return xRet; 706 } 707 708 Reference< 709 beans::XPropertySet > SAL_CALL DiagramWrapper::getDataPointProperties( sal_Int32 nCol, sal_Int32 nRow ) 710 throw (lang::IndexOutOfBoundsException, 711 uno::RuntimeException) 712 { 713 if( nCol < 0 || nRow < 0 ) 714 throw lang::IndexOutOfBoundsException( 715 C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); 716 717 Reference< chart2::XDataSeries > xSeries; 718 719 sal_Int32 nNewAPIIndex = lcl_getNewAPIIndexForOldAPIIndex( nRow, m_spChart2ModelContact->getChart2Diagram() ); 720 if( nNewAPIIndex < 0 ) 721 throw lang::IndexOutOfBoundsException( 722 C2U( "DataSeries index invalid" ), static_cast< ::cppu::OWeakObject * >( this )); 723 724 //todo: check borders of point index 725 726 Reference< beans::XPropertySet > xRet( new DataSeriesPointWrapper( 727 DataSeriesPointWrapper::DATA_POINT, nNewAPIIndex, nCol, m_spChart2ModelContact ) ); 728 729 return xRet; 730 } 731 732 // ____ XShape (base of XDiagram) ____ 733 awt::Point SAL_CALL DiagramWrapper::getPosition() 734 throw (uno::RuntimeException) 735 { 736 awt::Point aPosition = ToPoint( m_spChart2ModelContact->GetDiagramRectangleIncludingAxes() ); 737 return aPosition; 738 } 739 740 void SAL_CALL DiagramWrapper::setPosition( const awt::Point& aPosition ) 741 throw (uno::RuntimeException) 742 { 743 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 744 Reference< beans::XPropertySet > xProp( this->getInnerPropertySet() ); 745 if( xProp.is() ) 746 { 747 awt::Size aPageSize( m_spChart2ModelContact->GetPageSize() ); 748 749 chart2::RelativePosition aRelativePosition; 750 aRelativePosition.Anchor = drawing::Alignment_TOP_LEFT; 751 aRelativePosition.Primary = double(aPosition.X)/double(aPageSize.Width); 752 aRelativePosition.Secondary = double(aPosition.Y)/double(aPageSize.Height); 753 if( aRelativePosition.Primary < 0 || aRelativePosition.Secondary < 0 || aRelativePosition.Primary > 1 || aRelativePosition.Secondary > 1 ) 754 { 755 DBG_ERROR("DiagramWrapper::setPosition called with a position out of range -> automatic values are taken instead" ); 756 uno::Any aEmpty; 757 xProp->setPropertyValue( C2U( "RelativePosition" ), aEmpty ); 758 return; 759 } 760 xProp->setPropertyValue( C2U( "RelativePosition" ), uno::makeAny(aRelativePosition) ); 761 xProp->setPropertyValue( C2U( "PosSizeExcludeAxes" ), uno::makeAny(false) ); 762 } 763 } 764 765 awt::Size SAL_CALL DiagramWrapper::getSize() 766 throw (uno::RuntimeException) 767 { 768 awt::Size aSize = ToSize( m_spChart2ModelContact->GetDiagramRectangleIncludingAxes() ); 769 return aSize; 770 } 771 772 void SAL_CALL DiagramWrapper::setSize( const awt::Size& aSize ) 773 throw (beans::PropertyVetoException, 774 uno::RuntimeException) 775 { 776 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 777 Reference< beans::XPropertySet > xProp( this->getInnerPropertySet() ); 778 if( xProp.is() ) 779 { 780 awt::Size aPageSize( m_spChart2ModelContact->GetPageSize() ); 781 782 chart2::RelativeSize aRelativeSize; 783 aRelativeSize.Primary = double(aSize.Width)/double(aPageSize.Width); 784 aRelativeSize.Secondary = double(aSize.Height)/double(aPageSize.Height); 785 786 if( aRelativeSize.Primary > 1 || aRelativeSize.Secondary > 1 ) 787 { 788 DBG_ERROR("DiagramWrapper::setSize called with sizes bigger than page -> automatic values are taken instead" ); 789 uno::Any aEmpty; 790 xProp->setPropertyValue( C2U( "RelativeSize" ), aEmpty ); 791 return; 792 } 793 794 xProp->setPropertyValue( C2U( "RelativeSize" ), uno::makeAny(aRelativeSize) ); 795 xProp->setPropertyValue( C2U( "PosSizeExcludeAxes" ), uno::makeAny(false) ); 796 } 797 } 798 799 // ____ XShapeDescriptor (base of XShape) ____ 800 OUString SAL_CALL DiagramWrapper::getShapeType() 801 throw (uno::RuntimeException) 802 { 803 return C2U( "com.sun.star.chart.Diagram" ); 804 } 805 806 // ____ XDiagramPositioning ____ 807 808 void SAL_CALL DiagramWrapper::setAutomaticDiagramPositioning() throw (uno::RuntimeException) 809 { 810 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 811 uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); 812 if( xDiaProps.is() ) 813 { 814 xDiaProps->setPropertyValue( C2U( "RelativeSize" ), Any() ); 815 xDiaProps->setPropertyValue( C2U( "RelativePosition" ), Any() ); 816 } 817 } 818 ::sal_Bool SAL_CALL DiagramWrapper::isAutomaticDiagramPositioning( ) throw (uno::RuntimeException) 819 { 820 uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); 821 if( xDiaProps.is() ) 822 { 823 Any aRelativeSize( xDiaProps->getPropertyValue( C2U( "RelativeSize" ) ) ); 824 Any aRelativePosition( xDiaProps->getPropertyValue( C2U( "RelativePosition" ) ) ); 825 if( aRelativeSize.hasValue() && aRelativePosition.hasValue() ) 826 return false; 827 } 828 return true; 829 } 830 void SAL_CALL DiagramWrapper::setDiagramPositionExcludingAxes( const awt::Rectangle& rPositionRect ) throw (uno::RuntimeException) 831 { 832 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 833 DiagramHelper::setDiagramPositioning( m_spChart2ModelContact->getChartModel(), rPositionRect ); 834 uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); 835 if( xDiaProps.is() ) 836 xDiaProps->setPropertyValue(C2U("PosSizeExcludeAxes"), uno::makeAny(true) ); 837 } 838 ::sal_Bool SAL_CALL DiagramWrapper::isExcludingDiagramPositioning() throw (uno::RuntimeException) 839 { 840 uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); 841 if( xDiaProps.is() ) 842 { 843 Any aRelativeSize( xDiaProps->getPropertyValue( C2U( "RelativeSize" ) ) ); 844 Any aRelativePosition( xDiaProps->getPropertyValue( C2U( "RelativePosition" ) ) ); 845 if( aRelativeSize.hasValue() && aRelativePosition.hasValue() ) 846 { 847 sal_Bool bPosSizeExcludeAxes = false; 848 xDiaProps->getPropertyValue( C2U( "PosSizeExcludeAxes" ) ) >>= bPosSizeExcludeAxes; 849 return bPosSizeExcludeAxes; 850 } 851 } 852 return false; 853 } 854 awt::Rectangle SAL_CALL DiagramWrapper::calculateDiagramPositionExcludingAxes( ) throw (uno::RuntimeException) 855 { 856 return m_spChart2ModelContact->GetDiagramRectangleExcludingAxes(); 857 } 858 void SAL_CALL DiagramWrapper::setDiagramPositionIncludingAxes( const awt::Rectangle& rPositionRect ) throw (uno::RuntimeException) 859 { 860 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 861 DiagramHelper::setDiagramPositioning( m_spChart2ModelContact->getChartModel(), rPositionRect ); 862 uno::Reference< beans::XPropertySet > xDiaProps( this->getDiagram(), uno::UNO_QUERY ); 863 if( xDiaProps.is() ) 864 xDiaProps->setPropertyValue(C2U("PosSizeExcludeAxes"), uno::makeAny(false) ); 865 } 866 awt::Rectangle SAL_CALL DiagramWrapper::calculateDiagramPositionIncludingAxes( ) throw (uno::RuntimeException) 867 { 868 return m_spChart2ModelContact->GetDiagramRectangleIncludingAxes(); 869 } 870 void SAL_CALL DiagramWrapper::setDiagramPositionIncludingAxesAndAxisTitles( const awt::Rectangle& rPositionRect ) throw (uno::RuntimeException) 871 { 872 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 873 awt::Rectangle aRect( m_spChart2ModelContact->SubstractAxisTitleSizes(rPositionRect) ); 874 DiagramWrapper::setDiagramPositionIncludingAxes( aRect ); 875 } 876 ::com::sun::star::awt::Rectangle SAL_CALL DiagramWrapper::calculateDiagramPositionIncludingAxesAndAxisTitles( ) throw (::com::sun::star::uno::RuntimeException) 877 { 878 return m_spChart2ModelContact->GetDiagramRectangleIncludingTitle(); 879 } 880 881 // ____ XAxisSupplier ____ 882 Reference< XAxis > SAL_CALL DiagramWrapper::getAxis( sal_Int32 nDimensionIndex ) 883 throw (uno::RuntimeException) 884 { 885 Reference< XAxis > xAxis; 886 if(!nDimensionIndex) 887 { 888 if( !m_xXAxis.is() ) 889 m_xXAxis = new AxisWrapper( AxisWrapper::X_AXIS, m_spChart2ModelContact ); 890 xAxis = m_xXAxis; 891 } 892 else if(1==nDimensionIndex) 893 { 894 if( !m_xYAxis.is() ) 895 m_xYAxis = new AxisWrapper( AxisWrapper::Y_AXIS, m_spChart2ModelContact ); 896 xAxis = m_xYAxis; 897 } 898 else if(2==nDimensionIndex) 899 { 900 if( !m_xZAxis.is() ) 901 m_xZAxis = new AxisWrapper( AxisWrapper::Z_AXIS, m_spChart2ModelContact ); 902 xAxis = m_xZAxis; 903 } 904 return xAxis; 905 } 906 907 Reference< XAxis > SAL_CALL DiagramWrapper::getSecondaryAxis( sal_Int32 nDimensionIndex ) 908 throw (uno::RuntimeException) 909 { 910 Reference< XAxis > xAxis; 911 if(!nDimensionIndex) 912 { 913 if( !m_xSecondXAxis.is() ) 914 m_xSecondXAxis = new AxisWrapper( AxisWrapper::SECOND_X_AXIS, m_spChart2ModelContact ); 915 xAxis = m_xSecondXAxis; 916 } 917 else if(1==nDimensionIndex) 918 { 919 if( !m_xSecondYAxis.is() ) 920 m_xSecondYAxis = new AxisWrapper( AxisWrapper::SECOND_Y_AXIS, m_spChart2ModelContact ); 921 xAxis = m_xSecondYAxis; 922 } 923 return xAxis; 924 } 925 926 // ____ XAxisZSupplier ____ 927 Reference< drawing::XShape > SAL_CALL DiagramWrapper::getZAxisTitle() 928 throw (uno::RuntimeException) 929 { 930 Reference< drawing::XShape > xRet; 931 Reference< XAxis > xAxis( getAxis(2) ); 932 if( xAxis.is() ) 933 xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); 934 return xRet; 935 } 936 937 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getZMainGrid() 938 throw (uno::RuntimeException) 939 { 940 Reference< beans::XPropertySet > xRet; 941 Reference< XAxis > xAxis( getAxis(2) ); 942 if( xAxis.is() ) 943 xRet = xAxis->getMajorGrid(); 944 return xRet; 945 } 946 947 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getZHelpGrid() 948 throw (uno::RuntimeException) 949 { 950 Reference< beans::XPropertySet > xRet; 951 Reference< XAxis > xAxis( getAxis(2) ); 952 if( xAxis.is() ) 953 xRet = xAxis->getMinorGrid(); 954 return xRet; 955 } 956 957 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getZAxis() 958 throw (uno::RuntimeException) 959 { 960 if( ! m_xZAxis.is()) 961 m_xZAxis = new AxisWrapper( AxisWrapper::Z_AXIS, m_spChart2ModelContact ); 962 return Reference< beans::XPropertySet >( m_xZAxis, uno::UNO_QUERY ); 963 } 964 965 966 // ____ XTwoAxisXSupplier ____ 967 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getSecondaryXAxis() 968 throw (uno::RuntimeException) 969 { 970 if( ! m_xSecondXAxis.is()) 971 m_xSecondXAxis = new AxisWrapper( AxisWrapper::SECOND_X_AXIS, m_spChart2ModelContact ); 972 return Reference< beans::XPropertySet >( m_xSecondXAxis, uno::UNO_QUERY ); 973 } 974 975 976 // ____ XAxisXSupplier (base of XTwoAxisXSupplier) ____ 977 Reference< drawing::XShape > SAL_CALL DiagramWrapper::getXAxisTitle() 978 throw (uno::RuntimeException) 979 { 980 Reference< drawing::XShape > xRet; 981 Reference< XAxis > xAxis( getAxis(0) ); 982 if( xAxis.is() ) 983 xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); 984 return xRet; 985 } 986 987 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getXAxis() 988 throw (uno::RuntimeException) 989 { 990 if( ! m_xXAxis.is()) 991 m_xXAxis = new AxisWrapper( AxisWrapper::X_AXIS, m_spChart2ModelContact ); 992 return Reference< beans::XPropertySet >( m_xXAxis, uno::UNO_QUERY ); 993 } 994 995 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getXMainGrid() 996 throw (uno::RuntimeException) 997 { 998 Reference< beans::XPropertySet > xRet; 999 Reference< XAxis > xAxis( getAxis(0) ); 1000 if( xAxis.is() ) 1001 xRet = xAxis->getMajorGrid(); 1002 return xRet; 1003 } 1004 1005 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getXHelpGrid() 1006 throw (uno::RuntimeException) 1007 { 1008 Reference< beans::XPropertySet > xRet; 1009 Reference< XAxis > xAxis( getAxis(0) ); 1010 if( xAxis.is() ) 1011 xRet = xAxis->getMinorGrid(); 1012 return xRet; 1013 } 1014 1015 1016 // ____ XTwoAxisYSupplier ____ 1017 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getSecondaryYAxis() 1018 throw (uno::RuntimeException) 1019 { 1020 if( ! m_xSecondYAxis.is()) 1021 m_xSecondYAxis = new AxisWrapper( AxisWrapper::SECOND_Y_AXIS, m_spChart2ModelContact ); 1022 return Reference< beans::XPropertySet >( m_xSecondYAxis, uno::UNO_QUERY ); 1023 } 1024 1025 1026 // ____ XAxisYSupplier (base of XTwoAxisYSupplier) ____ 1027 Reference< drawing::XShape > SAL_CALL DiagramWrapper::getYAxisTitle() 1028 throw (uno::RuntimeException) 1029 { 1030 Reference< drawing::XShape > xRet; 1031 Reference< XAxis > xAxis( getAxis(1) ); 1032 if( xAxis.is() ) 1033 xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); 1034 return xRet; 1035 } 1036 1037 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getYAxis() 1038 throw (uno::RuntimeException) 1039 { 1040 if( ! m_xYAxis.is()) 1041 m_xYAxis = new AxisWrapper( AxisWrapper::Y_AXIS, m_spChart2ModelContact ); 1042 return Reference< beans::XPropertySet >( m_xYAxis, uno::UNO_QUERY ); 1043 } 1044 1045 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getYMainGrid() 1046 throw (uno::RuntimeException) 1047 { 1048 Reference< beans::XPropertySet > xRet; 1049 Reference< XAxis > xAxis( getAxis(1) ); 1050 if( xAxis.is() ) 1051 xRet = xAxis->getMajorGrid(); 1052 return xRet; 1053 } 1054 1055 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getYHelpGrid() 1056 throw (uno::RuntimeException) 1057 { 1058 Reference< beans::XPropertySet > xRet; 1059 Reference< XAxis > xAxis( getAxis(1) ); 1060 if( xAxis.is() ) 1061 xRet = xAxis->getMinorGrid(); 1062 return xRet; 1063 } 1064 1065 // ____ XSecondAxisTitleSupplier ____ 1066 Reference< drawing::XShape > SAL_CALL DiagramWrapper::getSecondXAxisTitle() 1067 throw (uno::RuntimeException) 1068 { 1069 Reference< drawing::XShape > xRet; 1070 Reference< XAxis > xAxis( getSecondaryAxis(0) ); 1071 if( xAxis.is() ) 1072 xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); 1073 return xRet; 1074 } 1075 1076 Reference< drawing::XShape > SAL_CALL DiagramWrapper::getSecondYAxisTitle() 1077 throw (uno::RuntimeException) 1078 { 1079 Reference< drawing::XShape > xRet; 1080 Reference< XAxis > xAxis( getSecondaryAxis(1) ); 1081 if( xAxis.is() ) 1082 xRet = Reference< drawing::XShape >( xAxis->getAxisTitle(), uno::UNO_QUERY ); 1083 return xRet; 1084 } 1085 1086 // ____ XStatisticDisplay ____ 1087 Reference< 1088 beans::XPropertySet > SAL_CALL DiagramWrapper::getUpBar() 1089 throw (uno::RuntimeException) 1090 { 1091 if( !m_xUpBarWrapper.is() ) 1092 { 1093 m_xUpBarWrapper = new UpDownBarWrapper( true, m_spChart2ModelContact ); 1094 } 1095 return m_xUpBarWrapper; 1096 } 1097 1098 Reference< 1099 beans::XPropertySet > SAL_CALL DiagramWrapper::getDownBar() 1100 throw (uno::RuntimeException) 1101 { 1102 if( !m_xDownBarWrapper.is() ) 1103 { 1104 m_xDownBarWrapper = new UpDownBarWrapper( false, m_spChart2ModelContact ); 1105 } 1106 return m_xDownBarWrapper; 1107 } 1108 1109 Reference< 1110 beans::XPropertySet > SAL_CALL DiagramWrapper::getMinMaxLine() 1111 throw (uno::RuntimeException) 1112 { 1113 if( !m_xMinMaxLineWrapper.is() ) 1114 { 1115 m_xMinMaxLineWrapper = new MinMaxLineWrapper( m_spChart2ModelContact ); 1116 } 1117 return m_xMinMaxLineWrapper; 1118 } 1119 1120 // ____ X3DDisplay ____ 1121 Reference< beans::XPropertySet > SAL_CALL DiagramWrapper::getWall() 1122 throw (uno::RuntimeException) 1123 { 1124 if( !m_xWall.is() ) 1125 { 1126 m_xWall = new WallFloorWrapper( true, m_spChart2ModelContact ); 1127 } 1128 return m_xWall; 1129 } 1130 1131 Reference< 1132 beans::XPropertySet > SAL_CALL DiagramWrapper::getFloor() 1133 throw (uno::RuntimeException) 1134 { 1135 if( !m_xFloor.is() ) 1136 { 1137 m_xFloor = new WallFloorWrapper( false, m_spChart2ModelContact ); 1138 } 1139 return m_xFloor; 1140 } 1141 1142 // ____ X3DDefaultSetter ____ 1143 void SAL_CALL DiagramWrapper::set3DSettingsToDefault() 1144 throw (uno::RuntimeException) 1145 { 1146 Reference< X3DDefaultSetter > x3DDefaultSetter( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); 1147 if( x3DDefaultSetter.is() ) 1148 x3DDefaultSetter->set3DSettingsToDefault(); 1149 } 1150 1151 void SAL_CALL DiagramWrapper::setDefaultRotation() 1152 throw (uno::RuntimeException) 1153 { 1154 Reference< X3DDefaultSetter > x3DDefaultSetter( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); 1155 if( x3DDefaultSetter.is() ) 1156 x3DDefaultSetter->setDefaultRotation(); 1157 } 1158 1159 void SAL_CALL DiagramWrapper::setDefaultIllumination() 1160 throw (uno::RuntimeException) 1161 { 1162 Reference< X3DDefaultSetter > x3DDefaultSetter( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); 1163 if( x3DDefaultSetter.is() ) 1164 x3DDefaultSetter->setDefaultIllumination(); 1165 } 1166 1167 // ____ XComponent ____ 1168 void SAL_CALL DiagramWrapper::dispose() 1169 throw (uno::RuntimeException) 1170 { 1171 m_aEventListenerContainer.disposeAndClear( lang::EventObject( static_cast< ::cppu::OWeakObject* >( this ))); 1172 1173 // /-- 1174 MutexGuard aGuard( GetMutex()); 1175 1176 DisposeHelper::DisposeAndClear( m_xXAxis ); 1177 DisposeHelper::DisposeAndClear( m_xYAxis ); 1178 DisposeHelper::DisposeAndClear( m_xZAxis ); 1179 DisposeHelper::DisposeAndClear( m_xSecondXAxis ); 1180 DisposeHelper::DisposeAndClear( m_xSecondYAxis ); 1181 DisposeHelper::DisposeAndClear( m_xWall ); 1182 DisposeHelper::DisposeAndClear( m_xFloor ); 1183 DisposeHelper::DisposeAndClear( m_xMinMaxLineWrapper ); 1184 DisposeHelper::DisposeAndClear( m_xUpBarWrapper ); 1185 DisposeHelper::DisposeAndClear( m_xDownBarWrapper ); 1186 1187 clearWrappedPropertySet(); 1188 // \-- 1189 } 1190 1191 void SAL_CALL DiagramWrapper::addEventListener( 1192 const Reference< lang::XEventListener >& xListener ) 1193 throw (uno::RuntimeException) 1194 { 1195 m_aEventListenerContainer.addInterface( xListener ); 1196 } 1197 1198 void SAL_CALL DiagramWrapper::removeEventListener( 1199 const Reference< lang::XEventListener >& aListener ) 1200 throw (uno::RuntimeException) 1201 { 1202 m_aEventListenerContainer.removeInterface( aListener ); 1203 } 1204 1205 // ____ XEventListener ____ 1206 // void SAL_CALL DiagramWrapper::disposing( const lang::EventObject& Source ) 1207 // throw (uno::RuntimeException) 1208 // { 1209 // } 1210 1211 //----------------------------------------------------------------------------------------------------------------- 1212 //----------------------------------------------------------------------------------------------------------------- 1213 //----------------------------------------------------------------------------------------------------------------- 1214 1215 //PROP_DIAGRAM_DATAROW_SOURCE 1216 class WrappedDataRowSourceProperty : public WrappedProperty 1217 { 1218 public: 1219 WrappedDataRowSourceProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1220 virtual ~WrappedDataRowSourceProperty(); 1221 1222 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1223 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1224 1225 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1226 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1227 1228 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1229 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1230 1231 private: //member 1232 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1233 mutable Any m_aOuterValue; 1234 }; 1235 1236 WrappedDataRowSourceProperty::WrappedDataRowSourceProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1237 : WrappedProperty(C2U("DataRowSource"),OUString()) 1238 , m_spChart2ModelContact( spChart2ModelContact ) 1239 , m_aOuterValue() 1240 { 1241 m_aOuterValue = WrappedDataRowSourceProperty::getPropertyDefault( 0 ); 1242 } 1243 1244 WrappedDataRowSourceProperty::~WrappedDataRowSourceProperty() 1245 { 1246 } 1247 1248 void WrappedDataRowSourceProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1249 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1250 { 1251 ::com::sun::star::chart::ChartDataRowSource eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource_ROWS; 1252 if( ! (rOuterValue >>= eChartDataRowSource) ) 1253 { 1254 sal_Int32 nNew = ::com::sun::star::chart::ChartDataRowSource_ROWS; 1255 if( !(rOuterValue >>= nNew) ) 1256 throw lang::IllegalArgumentException( C2U("Property DataRowSource requires ::com::sun::star::chart::ChartDataRowSource value"), 0, 0 ); 1257 else 1258 eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource(nNew); 1259 } 1260 1261 m_aOuterValue = rOuterValue; 1262 1263 bool bNewUseColumns = eChartDataRowSource == ::com::sun::star::chart::ChartDataRowSource_COLUMNS; 1264 1265 ::rtl::OUString aRangeString; 1266 bool bUseColumns = true; 1267 bool bFirstCellAsLabel = true; 1268 bool bHasCategories = true; 1269 uno::Sequence< sal_Int32 > aSequenceMapping; 1270 1271 if( DataSourceHelper::detectRangeSegmentation( 1272 m_spChart2ModelContact->getChartModel(), aRangeString, aSequenceMapping, bUseColumns 1273 , bFirstCellAsLabel, bHasCategories ) ) 1274 { 1275 if( bUseColumns != bNewUseColumns ) 1276 { 1277 aSequenceMapping.realloc(0); 1278 DataSourceHelper::setRangeSegmentation( 1279 m_spChart2ModelContact->getChartModel(), aSequenceMapping, bNewUseColumns , bHasCategories, bFirstCellAsLabel ); 1280 } 1281 } 1282 } 1283 1284 Any WrappedDataRowSourceProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1285 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1286 { 1287 ::rtl::OUString aRangeString; 1288 bool bUseColumns = true; 1289 bool bFirstCellAsLabel = true; 1290 bool bHasCategories = true; 1291 uno::Sequence< sal_Int32 > aSequenceMapping; 1292 1293 if( DataSourceHelper::detectRangeSegmentation( 1294 m_spChart2ModelContact->getChartModel(), aRangeString, aSequenceMapping, bUseColumns 1295 , bFirstCellAsLabel, bHasCategories ) ) 1296 { 1297 ::com::sun::star::chart::ChartDataRowSource eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource_ROWS; 1298 if(bUseColumns) 1299 eChartDataRowSource = ::com::sun::star::chart::ChartDataRowSource_COLUMNS; 1300 1301 m_aOuterValue <<= eChartDataRowSource; 1302 } 1303 1304 return m_aOuterValue; 1305 } 1306 1307 Any WrappedDataRowSourceProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1308 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1309 { 1310 Any aRet; 1311 aRet <<= ::com::sun::star::chart::ChartDataRowSource_COLUMNS; 1312 return aRet; 1313 } 1314 1315 //----------------------------------------------------------------------------------------------------------------- 1316 //----------------------------------------------------------------------------------------------------------------- 1317 //----------------------------------------------------------------------------------------------------------------- 1318 1319 1320 //PROP_DIAGRAM_STACKED 1321 //PROP_DIAGRAM_DEEP 1322 //PROP_DIAGRAM_PERCENT_STACKED 1323 class WrappedStackingProperty : public WrappedProperty 1324 { 1325 public: 1326 WrappedStackingProperty( StackMode eStackMode, ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1327 virtual ~WrappedStackingProperty(); 1328 1329 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1330 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1331 1332 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1333 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1334 1335 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1336 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1337 1338 protected: //methods 1339 bool detectInnerValue( StackMode& eInnerStackMode ) const; 1340 1341 private: //member 1342 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1343 const StackMode m_eStackMode; 1344 mutable Any m_aOuterValue; 1345 }; 1346 1347 WrappedStackingProperty::WrappedStackingProperty( StackMode eStackMode, ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1348 : WrappedProperty(OUString(),OUString()) 1349 , m_spChart2ModelContact( spChart2ModelContact ) 1350 , m_eStackMode( eStackMode ) 1351 , m_aOuterValue() 1352 { 1353 switch( m_eStackMode ) 1354 { 1355 case StackMode_Y_STACKED: 1356 m_aOuterName = C2U( "Stacked" ); 1357 break; 1358 case StackMode_Y_STACKED_PERCENT: 1359 m_aOuterName = C2U( "Percent" ); 1360 break; 1361 case StackMode_Z_STACKED: 1362 m_aOuterName = C2U( "Deep" ); 1363 break; 1364 default: 1365 OSL_ENSURE( false, "unexpected stack mode" ); 1366 break; 1367 } 1368 } 1369 1370 WrappedStackingProperty::~WrappedStackingProperty() 1371 { 1372 } 1373 1374 bool WrappedStackingProperty::detectInnerValue( StackMode& eStackMode ) const 1375 { 1376 bool bHasDetectableInnerValue = false; 1377 bool bIsAmbiguous = false; 1378 eStackMode = DiagramHelper::getStackMode( m_spChart2ModelContact->getChart2Diagram() 1379 , bHasDetectableInnerValue, bIsAmbiguous ); 1380 return bHasDetectableInnerValue; 1381 } 1382 1383 void WrappedStackingProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1384 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1385 { 1386 sal_Bool bNewValue = false; 1387 if( ! (rOuterValue >>= bNewValue) ) 1388 throw lang::IllegalArgumentException( C2U("Stacking Properties require boolean values"), 0, 0 ); 1389 1390 StackMode eInnerStackMode; 1391 bool bHasDetectableInnerValue = detectInnerValue( eInnerStackMode ); 1392 1393 if( !bHasDetectableInnerValue ) 1394 { 1395 m_aOuterValue = rOuterValue; 1396 return; 1397 } 1398 1399 if( bNewValue && eInnerStackMode == m_eStackMode ) 1400 return; 1401 if( !bNewValue && eInnerStackMode != m_eStackMode ) 1402 return; 1403 1404 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1405 if( xDiagram.is() ) 1406 { 1407 StackMode eNewStackMode = bNewValue ? m_eStackMode : StackMode_NONE; 1408 DiagramHelper::setStackMode( xDiagram, eNewStackMode ); 1409 } 1410 } 1411 1412 Any WrappedStackingProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1413 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1414 { 1415 StackMode eInnerStackMode; 1416 if( detectInnerValue( eInnerStackMode ) ) 1417 { 1418 sal_Bool bValue = (eInnerStackMode == m_eStackMode); 1419 Any aAny; 1420 aAny <<= bValue; 1421 return aAny; 1422 } 1423 return m_aOuterValue; 1424 } 1425 1426 Any WrappedStackingProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1427 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1428 { 1429 Any aRet; 1430 aRet <<= sal_Bool( sal_False ); 1431 return aRet; 1432 } 1433 1434 //----------------------------------------------------------------------------------------------------------------- 1435 //----------------------------------------------------------------------------------------------------------------- 1436 //----------------------------------------------------------------------------------------------------------------- 1437 1438 //PROP_DIAGRAM_THREE_D 1439 class WrappedDim3DProperty : public WrappedProperty 1440 { 1441 public: 1442 WrappedDim3DProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1443 virtual ~WrappedDim3DProperty(); 1444 1445 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1446 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1447 1448 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1449 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1450 1451 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1452 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1453 1454 private: //member 1455 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1456 mutable Any m_aOuterValue; 1457 }; 1458 1459 WrappedDim3DProperty::WrappedDim3DProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1460 : WrappedProperty(C2U("Dim3D"),OUString()) 1461 , m_spChart2ModelContact( spChart2ModelContact ) 1462 , m_aOuterValue() 1463 { 1464 m_aOuterValue = WrappedDim3DProperty::getPropertyDefault( 0 ); 1465 } 1466 1467 WrappedDim3DProperty::~WrappedDim3DProperty() 1468 { 1469 } 1470 1471 void WrappedDim3DProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1472 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1473 { 1474 sal_Bool bNew3D = false; 1475 if( ! (rOuterValue >>= bNew3D) ) 1476 throw lang::IllegalArgumentException( C2U("Property Dim3D requires boolean value"), 0, 0 ); 1477 1478 m_aOuterValue = rOuterValue; 1479 1480 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1481 if( !xDiagram.is() ) 1482 return; 1483 1484 sal_Bool bOld3D = DiagramHelper::getDimension( xDiagram ) == 3; 1485 if( bOld3D != bNew3D ) 1486 DiagramHelper::setDimension( xDiagram, bNew3D ? 3 : 2 ); 1487 } 1488 1489 Any WrappedDim3DProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1490 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1491 { 1492 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1493 if( xDiagram.is() ) 1494 { 1495 sal_Bool b3D = DiagramHelper::getDimension( xDiagram ) == 3; 1496 m_aOuterValue <<= b3D; 1497 } 1498 return m_aOuterValue; 1499 } 1500 1501 Any WrappedDim3DProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1502 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1503 { 1504 Any aRet; 1505 aRet <<= sal_Bool( sal_False ); 1506 return aRet; 1507 } 1508 1509 //----------------------------------------------------------------------------------------------------------------- 1510 //----------------------------------------------------------------------------------------------------------------- 1511 //----------------------------------------------------------------------------------------------------------------- 1512 1513 //PROP_DIAGRAM_VERTICAL 1514 class WrappedVerticalProperty : public WrappedProperty 1515 { 1516 public: 1517 WrappedVerticalProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1518 virtual ~WrappedVerticalProperty(); 1519 1520 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1521 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1522 1523 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1524 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1525 1526 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1527 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1528 1529 private: //member 1530 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1531 mutable Any m_aOuterValue; 1532 }; 1533 1534 WrappedVerticalProperty::WrappedVerticalProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1535 : WrappedProperty(C2U("Vertical"),OUString()) 1536 , m_spChart2ModelContact( spChart2ModelContact ) 1537 , m_aOuterValue() 1538 { 1539 m_aOuterValue = WrappedVerticalProperty::getPropertyDefault( 0 ); 1540 } 1541 1542 WrappedVerticalProperty::~WrappedVerticalProperty() 1543 { 1544 } 1545 1546 void WrappedVerticalProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1547 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1548 { 1549 sal_Bool bNewVertical = false; 1550 if( ! (rOuterValue >>= bNewVertical) ) 1551 throw lang::IllegalArgumentException( C2U("Property Vertical requires boolean value"), 0, 0 ); 1552 1553 m_aOuterValue = rOuterValue; 1554 1555 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1556 if( !xDiagram.is() ) 1557 return; 1558 1559 bool bFound = false; 1560 bool bAmbiguous = false; 1561 sal_Bool bOldVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); 1562 if( bFound && ( bOldVertical != bNewVertical || bAmbiguous ) ) 1563 DiagramHelper::setVertical( xDiagram, bNewVertical ); 1564 } 1565 1566 Any WrappedVerticalProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1567 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1568 { 1569 bool bFound = false; 1570 bool bAmbiguous = false; 1571 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1572 if( xDiagram.is() ) 1573 { 1574 sal_Bool bVertical = DiagramHelper::getVertical( xDiagram, bFound, bAmbiguous ); 1575 if( bFound ) 1576 m_aOuterValue <<= bVertical; 1577 } 1578 return m_aOuterValue; 1579 } 1580 1581 Any WrappedVerticalProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1582 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1583 { 1584 Any aRet; 1585 aRet <<= sal_Bool( sal_False ); 1586 return aRet; 1587 } 1588 1589 //----------------------------------------------------------------------------------------------------------------- 1590 //----------------------------------------------------------------------------------------------------------------- 1591 //----------------------------------------------------------------------------------------------------------------- 1592 1593 //PROP_DIAGRAM_NUMBER_OF_LINES 1594 class WrappedNumberOfLinesProperty : public WrappedProperty 1595 { 1596 public: 1597 WrappedNumberOfLinesProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1598 virtual ~WrappedNumberOfLinesProperty(); 1599 1600 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1601 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1602 1603 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1604 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1605 1606 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1607 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1608 1609 protected: //methods 1610 bool detectInnerValue( uno::Any& rInnerValue ) const; 1611 1612 private: //member 1613 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1614 mutable Any m_aOuterValue; 1615 }; 1616 1617 WrappedNumberOfLinesProperty::WrappedNumberOfLinesProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1618 : WrappedProperty(C2U("NumberOfLines"),OUString()) 1619 , m_spChart2ModelContact( spChart2ModelContact ) 1620 , m_aOuterValue( this->getPropertyDefault(0) ) 1621 { 1622 } 1623 1624 WrappedNumberOfLinesProperty::~WrappedNumberOfLinesProperty() 1625 { 1626 } 1627 1628 bool WrappedNumberOfLinesProperty::detectInnerValue( uno::Any& rInnerValue ) const 1629 { 1630 sal_Int32 nNumberOfLines = 0; 1631 bool bHasDetectableInnerValue = false; 1632 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1633 uno::Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); 1634 if( xDiagram.is() && xChartDoc.is() ) 1635 { 1636 ::std::vector< uno::Reference< chart2::XDataSeries > > aSeriesVector( 1637 DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); 1638 if( aSeriesVector.size() > 0 ) 1639 { 1640 Reference< lang::XMultiServiceFactory > xFact( xChartDoc->getChartTypeManager(), uno::UNO_QUERY ); 1641 DiagramHelper::tTemplateWithServiceName aTemplateAndService = 1642 DiagramHelper::getTemplateForDiagram( xDiagram, xFact ); 1643 if( aTemplateAndService.second.equals( C2U( "com.sun.star.chart2.template.ColumnWithLine" ) ) ) 1644 { 1645 try 1646 { 1647 uno::Reference< beans::XPropertySet > xProp( aTemplateAndService.first, uno::UNO_QUERY ); 1648 xProp->getPropertyValue( m_aOuterName ) >>= nNumberOfLines; 1649 bHasDetectableInnerValue = true; 1650 } 1651 catch( uno::Exception & ex ) 1652 { 1653 ASSERT_EXCEPTION( ex ); 1654 } 1655 } 1656 } 1657 } 1658 if(bHasDetectableInnerValue) 1659 rInnerValue = uno::makeAny(nNumberOfLines); 1660 return bHasDetectableInnerValue; 1661 } 1662 1663 void WrappedNumberOfLinesProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1664 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1665 { 1666 sal_Int32 nNewValue; 1667 if( ! (rOuterValue >>= nNewValue) ) 1668 throw lang::IllegalArgumentException( C2U("property NumberOfLines requires sal_Int32 value"), 0, 0 ); 1669 1670 m_aOuterValue = rOuterValue; 1671 1672 uno::Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); 1673 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1674 sal_Int32 nDimension = ::chart::DiagramHelper::getDimension( xDiagram ); 1675 if( xChartDoc.is() && xDiagram.is() && nDimension == 2 ) 1676 { 1677 Reference< lang::XMultiServiceFactory > xFact( xChartDoc->getChartTypeManager(), uno::UNO_QUERY ); 1678 DiagramHelper::tTemplateWithServiceName aTemplateAndService = 1679 DiagramHelper::getTemplateForDiagram( xDiagram, xFact ); 1680 1681 uno::Reference< chart2::XChartTypeTemplate > xTemplate(0); 1682 if( aTemplateAndService.second.equals( C2U( "com.sun.star.chart2.template.ColumnWithLine" ) ) ) 1683 { 1684 if( nNewValue != 0 ) 1685 { 1686 xTemplate.set( aTemplateAndService.first ); 1687 try 1688 { 1689 sal_Int32 nOldValue = 0; 1690 uno::Reference< beans::XPropertySet > xProp( xTemplate, uno::UNO_QUERY ); 1691 xProp->getPropertyValue( m_aOuterName ) >>= nOldValue; 1692 if( nOldValue == nNewValue ) 1693 return; 1694 } 1695 catch( uno::Exception & ex ) 1696 { 1697 ASSERT_EXCEPTION( ex ); 1698 } 1699 } 1700 else 1701 { 1702 xTemplate.set( xFact->createInstance( C2U( "com.sun.star.chart2.template.Column" ) ), uno::UNO_QUERY ); 1703 } 1704 } 1705 else if( aTemplateAndService.second.equals( C2U( "com.sun.star.chart2.template.Column" ) ) ) 1706 { 1707 if( nNewValue == 0 ) 1708 return; 1709 xTemplate.set( xFact->createInstance( C2U( "com.sun.star.chart2.template.ColumnWithLine" ) ), uno::UNO_QUERY ); 1710 } 1711 1712 if(xTemplate.is()) 1713 { 1714 try 1715 { 1716 // /-- locked controllers 1717 ControllerLockGuard aCtrlLockGuard( m_spChart2ModelContact->getChartModel() ); 1718 uno::Reference< beans::XPropertySet > xProp( xTemplate, uno::UNO_QUERY ); 1719 xProp->setPropertyValue( C2U( "NumberOfLines" ), uno::makeAny(nNewValue) ); 1720 xTemplate->changeDiagram( xDiagram ); 1721 // \-- locked controllers 1722 } 1723 catch( uno::Exception & ex ) 1724 { 1725 ASSERT_EXCEPTION( ex ); 1726 } 1727 } 1728 } 1729 } 1730 1731 Any WrappedNumberOfLinesProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1732 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1733 { 1734 Any aRet; 1735 if( !detectInnerValue( aRet ) ) 1736 aRet = m_aOuterValue; 1737 return aRet; 1738 } 1739 1740 Any WrappedNumberOfLinesProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1741 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1742 { 1743 Any aRet; 1744 aRet <<= sal_Int32( 0 ); 1745 return aRet; 1746 } 1747 1748 //----------------------------------------------------------------------------------------------------------------- 1749 //----------------------------------------------------------------------------------------------------------------- 1750 //----------------------------------------------------------------------------------------------------------------- 1751 1752 //PROP_DIAGRAM_ATTRIBUTED_DATA_POINTS 1753 class WrappedAttributedDataPointsProperty : public WrappedProperty 1754 { 1755 public: 1756 WrappedAttributedDataPointsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1757 virtual ~WrappedAttributedDataPointsProperty(); 1758 1759 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1760 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1761 1762 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1763 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1764 1765 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1766 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1767 1768 private: //member 1769 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1770 mutable Any m_aOuterValue; 1771 }; 1772 1773 WrappedAttributedDataPointsProperty::WrappedAttributedDataPointsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1774 : WrappedProperty(C2U("AttributedDataPoints"),OUString()) 1775 , m_spChart2ModelContact( spChart2ModelContact ) 1776 , m_aOuterValue() 1777 { 1778 m_aOuterValue = WrappedAttributedDataPointsProperty::getPropertyDefault( 0 ); 1779 } 1780 1781 WrappedAttributedDataPointsProperty::~WrappedAttributedDataPointsProperty() 1782 { 1783 } 1784 1785 void WrappedAttributedDataPointsProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1786 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1787 { 1788 uno::Sequence< uno::Sequence< sal_Int32 > > aNewValue; 1789 if( ! (rOuterValue >>= aNewValue) ) 1790 throw lang::IllegalArgumentException( C2U("Property AttributedDataPoints requires value of type uno::Sequence< uno::Sequence< sal_Int32 > >"), 0, 0 ); 1791 1792 m_aOuterValue = rOuterValue; 1793 1794 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1795 Reference< beans::XPropertySet > xDiaProp( xDiagram, uno::UNO_QUERY ); 1796 1797 if( xDiagram.is() && xDiaProp.is()) 1798 { 1799 ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector( 1800 ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); 1801 1802 uno::Sequence< uno::Sequence< sal_Int32 > > aResult( aSeriesVector.size() ); 1803 1804 ::std::vector< Reference< chart2::XDataSeries > >::const_iterator aIt = 1805 aSeriesVector.begin(); 1806 sal_Int32 i = 0; 1807 for( ; aIt != aSeriesVector.end(); ++aIt, ++i ) 1808 { 1809 Reference< beans::XPropertySet > xProp( *aIt, uno::UNO_QUERY ); 1810 if( xProp.is()) 1811 { 1812 uno::Any aVal; 1813 if( i < aNewValue.getLength() ) 1814 aVal <<= aNewValue[i]; 1815 else 1816 { 1817 //set empty sequence 1818 uno::Sequence< sal_Int32 > aSeq; 1819 aVal <<= aSeq; 1820 } 1821 xProp->setPropertyValue( C2U( "AttributedDataPoints" ), aVal ); 1822 } 1823 } 1824 } 1825 } 1826 1827 Any WrappedAttributedDataPointsProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1828 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1829 { 1830 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1831 Reference< beans::XPropertySet > xDiaProp( xDiagram, uno::UNO_QUERY ); 1832 1833 if( xDiagram.is() && xDiaProp.is()) 1834 { 1835 ::std::vector< Reference< chart2::XDataSeries > > aSeriesVector( 1836 ::chart::DiagramHelper::getDataSeriesFromDiagram( xDiagram ) ); 1837 1838 uno::Sequence< uno::Sequence< sal_Int32 > > aResult( aSeriesVector.size() ); 1839 1840 ::std::vector< Reference< chart2::XDataSeries > >::const_iterator aIt = 1841 aSeriesVector.begin(); 1842 sal_Int32 i = 0; 1843 for( ; aIt != aSeriesVector.end(); ++aIt, ++i ) 1844 { 1845 Reference< beans::XPropertySet > xProp( *aIt, uno::UNO_QUERY ); 1846 if( xProp.is()) 1847 { 1848 uno::Any aVal( 1849 xProp->getPropertyValue( C2U( "AttributedDataPoints" ))); 1850 uno::Sequence< sal_Int32 > aSeq; 1851 if( aVal >>= aSeq ) 1852 aResult[ i ] = aSeq; 1853 } 1854 } 1855 m_aOuterValue <<= aResult; 1856 } 1857 return m_aOuterValue; 1858 } 1859 1860 Any WrappedAttributedDataPointsProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1861 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1862 { 1863 Any aRet; 1864 uno::Sequence< uno::Sequence< sal_Int32 > > aSeq; 1865 aRet <<= aSeq; 1866 return aRet; 1867 } 1868 1869 //----------------------------------------------------------------------------------------------------------------- 1870 //----------------------------------------------------------------------------------------------------------------- 1871 //----------------------------------------------------------------------------------------------------------------- 1872 1873 //PROP_DIAGRAM_SOLIDTYPE 1874 class WrappedSolidTypeProperty : public WrappedProperty 1875 { 1876 public: 1877 WrappedSolidTypeProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 1878 virtual ~WrappedSolidTypeProperty(); 1879 1880 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1881 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1882 1883 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1884 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1885 1886 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1887 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1888 1889 private: //member 1890 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 1891 mutable Any m_aOuterValue; 1892 }; 1893 1894 WrappedSolidTypeProperty::WrappedSolidTypeProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 1895 : WrappedProperty( C2U( "SolidType" ), OUString() ) 1896 , m_spChart2ModelContact( spChart2ModelContact ) 1897 , m_aOuterValue() 1898 { 1899 m_aOuterValue = WrappedSolidTypeProperty::getPropertyDefault( 0 ); 1900 } 1901 1902 WrappedSolidTypeProperty::~WrappedSolidTypeProperty() 1903 { 1904 } 1905 1906 void WrappedSolidTypeProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1907 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1908 { 1909 sal_Int32 nNewSolidType = ::com::sun::star::chart::ChartSolidType::RECTANGULAR_SOLID; 1910 if( ! (rOuterValue >>= nNewSolidType) ) 1911 throw lang::IllegalArgumentException( C2U("Property SolidType requires integer value"), 0, 0 ); 1912 1913 m_aOuterValue = rOuterValue; 1914 1915 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1916 if( !xDiagram.is() ) 1917 return; 1918 1919 bool bFound = false; 1920 bool bAmbiguous = false; 1921 sal_Int32 nOldSolidType = DiagramHelper::getGeometry3D( xDiagram, bFound, bAmbiguous ); 1922 if( bFound && ( nOldSolidType != nNewSolidType || bAmbiguous ) ) 1923 DiagramHelper::setGeometry3D( xDiagram, nNewSolidType ); 1924 } 1925 1926 Any WrappedSolidTypeProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 1927 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1928 { 1929 bool bFound = false; 1930 bool bAmbiguous = false; 1931 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 1932 if( xDiagram.is() ) 1933 { 1934 sal_Int32 nGeometry = DiagramHelper::getGeometry3D( xDiagram, bFound, bAmbiguous ); 1935 if( bFound ) 1936 m_aOuterValue <<= nGeometry; 1937 } 1938 return m_aOuterValue; 1939 } 1940 1941 Any WrappedSolidTypeProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 1942 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 1943 { 1944 return uno::makeAny( ::com::sun::star::chart::ChartSolidType::RECTANGULAR_SOLID ); 1945 } 1946 1947 //----------------------------------------------------------------------------------------------------------------- 1948 //----------------------------------------------------------------------------------------------------------------- 1949 //----------------------------------------------------------------------------------------------------------------- 1950 1951 class WrappedAutomaticSizeProperty : public WrappedProperty 1952 { 1953 public: 1954 WrappedAutomaticSizeProperty(); 1955 virtual ~WrappedAutomaticSizeProperty(); 1956 1957 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1958 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1959 1960 virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 1961 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1962 1963 virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const 1964 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 1965 }; 1966 1967 WrappedAutomaticSizeProperty::WrappedAutomaticSizeProperty() 1968 : WrappedProperty( C2U( "AutomaticSize" ), OUString() ) 1969 { 1970 } 1971 1972 WrappedAutomaticSizeProperty::~WrappedAutomaticSizeProperty() 1973 { 1974 } 1975 1976 void WrappedAutomaticSizeProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const 1977 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 1978 { 1979 if( xInnerPropertySet.is() ) 1980 { 1981 bool bNewValue = true; 1982 if( ! (rOuterValue >>= bNewValue) ) 1983 throw lang::IllegalArgumentException( C2U("Property AutomaticSize requires value of type boolean"), 0, 0 ); 1984 1985 try 1986 { 1987 if( bNewValue ) 1988 { 1989 Any aRelativeSize( xInnerPropertySet->getPropertyValue( C2U( "RelativeSize" ) ) ); 1990 if( aRelativeSize.hasValue() ) 1991 xInnerPropertySet->setPropertyValue( C2U( "RelativeSize" ), Any() ); 1992 } 1993 } 1994 catch( uno::Exception & ex ) 1995 { 1996 ASSERT_EXCEPTION( ex ); 1997 } 1998 } 1999 } 2000 2001 Any WrappedAutomaticSizeProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const 2002 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 2003 { 2004 Any aRet( getPropertyDefault( Reference< beans::XPropertyState >( xInnerPropertySet, uno::UNO_QUERY ) ) ); 2005 if( xInnerPropertySet.is() ) 2006 { 2007 Any aRelativeSize( xInnerPropertySet->getPropertyValue( C2U( "RelativeSize" ) ) ); 2008 if( !aRelativeSize.hasValue() ) 2009 aRet <<= true; 2010 } 2011 return aRet; 2012 } 2013 2014 Any WrappedAutomaticSizeProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const 2015 throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) 2016 { 2017 Any aRet; 2018 aRet <<= false; 2019 return aRet; 2020 } 2021 2022 //----------------------------------------------------------------------------------------------------------------- 2023 //----------------------------------------------------------------------------------------------------------------- 2024 //----------------------------------------------------------------------------------------------------------------- 2025 2026 //PROP_DIAGRAM_INCLUDE_HIDDEN_CELLS 2027 class WrappedIncludeHiddenCellsProperty : public WrappedProperty 2028 { 2029 public: 2030 WrappedIncludeHiddenCellsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ); 2031 virtual ~WrappedIncludeHiddenCellsProperty(); 2032 2033 virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const 2034 throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 2035 2036 private: //member 2037 ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; 2038 }; 2039 2040 WrappedIncludeHiddenCellsProperty::WrappedIncludeHiddenCellsProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) 2041 : WrappedProperty(C2U("IncludeHiddenCells"),C2U("IncludeHiddenCells")) 2042 , m_spChart2ModelContact( spChart2ModelContact ) 2043 { 2044 } 2045 2046 WrappedIncludeHiddenCellsProperty::~WrappedIncludeHiddenCellsProperty() 2047 { 2048 } 2049 2050 void WrappedIncludeHiddenCellsProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const 2051 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) 2052 { 2053 sal_Bool bNewValue = false; 2054 if( ! (rOuterValue >>= bNewValue) ) 2055 throw lang::IllegalArgumentException( C2U("Property Dim3D requires boolean value"), 0, 0 ); 2056 2057 ChartModelHelper::setIncludeHiddenCells( bNewValue, m_spChart2ModelContact->getChartModel() ); 2058 } 2059 2060 //----------------------------------------------------------------------------------------------------------------- 2061 //----------------------------------------------------------------------------------------------------------------- 2062 //----------------------------------------------------------------------------------------------------------------- 2063 2064 // ____ XDiagramProvider ____ 2065 Reference< chart2::XDiagram > SAL_CALL DiagramWrapper::getDiagram() 2066 throw (uno::RuntimeException) 2067 { 2068 return m_spChart2ModelContact->getChart2Diagram(); 2069 } 2070 2071 void SAL_CALL DiagramWrapper::setDiagram( 2072 const Reference< chart2::XDiagram >& /*xDiagram*/ ) 2073 throw (uno::RuntimeException) 2074 { 2075 //@todo: remove this method from interface 2076 DBG_ERROR("DiagramWrapper::setDiagram is not implemented, should be removed and not be called" ); 2077 } 2078 2079 // ================================================================================ 2080 2081 Reference< beans::XPropertySet > DiagramWrapper::getInnerPropertySet() 2082 { 2083 return Reference< beans::XPropertySet >( m_spChart2ModelContact->getChart2Diagram(), uno::UNO_QUERY ); 2084 } 2085 2086 const Sequence< beans::Property >& DiagramWrapper::getPropertySequence() 2087 { 2088 return *StaticDiagramWrapperPropertyArray::get(); 2089 } 2090 2091 const std::vector< WrappedProperty* > DiagramWrapper::createWrappedProperties() 2092 { 2093 ::std::vector< ::chart::WrappedProperty* > aWrappedProperties; 2094 2095 WrappedAxisAndGridExistenceProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 2096 WrappedAxisTitleExistenceProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 2097 WrappedAxisLabelExistenceProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 2098 WrappedSceneProperty::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 2099 WrappedIgnoreProperties::addIgnoreFillProperties( aWrappedProperties ); 2100 WrappedIgnoreProperties::addIgnoreLineProperties( aWrappedProperties ); 2101 WrappedStatisticProperties::addWrappedPropertiesForDiagram( aWrappedProperties, m_spChart2ModelContact ); 2102 WrappedSymbolProperties::addWrappedPropertiesForDiagram( aWrappedProperties, m_spChart2ModelContact ); 2103 WrappedDataCaptionProperties::addWrappedPropertiesForDiagram( aWrappedProperties, m_spChart2ModelContact ); 2104 WrappedSplineProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 2105 WrappedStockProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact ); 2106 WrappedAutomaticPositionProperties::addWrappedProperties( aWrappedProperties ); 2107 2108 aWrappedProperties.push_back( new WrappedDataRowSourceProperty( m_spChart2ModelContact ) ); 2109 aWrappedProperties.push_back( new WrappedStackingProperty( StackMode_Y_STACKED,m_spChart2ModelContact ) ); 2110 aWrappedProperties.push_back( new WrappedStackingProperty( StackMode_Y_STACKED_PERCENT, m_spChart2ModelContact ) ); 2111 aWrappedProperties.push_back( new WrappedStackingProperty( StackMode_Z_STACKED, m_spChart2ModelContact ) ); 2112 aWrappedProperties.push_back( new WrappedDim3DProperty( m_spChart2ModelContact ) ); 2113 aWrappedProperties.push_back( new WrappedVerticalProperty( m_spChart2ModelContact ) ); 2114 aWrappedProperties.push_back( new WrappedNumberOfLinesProperty( m_spChart2ModelContact ) ); 2115 aWrappedProperties.push_back( new WrappedAttributedDataPointsProperty( m_spChart2ModelContact ) ); 2116 aWrappedProperties.push_back( new WrappedProperty( C2U( "StackedBarsConnected" ), C2U( "ConnectBars" ) ) ); 2117 aWrappedProperties.push_back( new WrappedSolidTypeProperty( m_spChart2ModelContact ) ); 2118 aWrappedProperties.push_back( new WrappedAutomaticSizeProperty() ); 2119 aWrappedProperties.push_back( new WrappedIncludeHiddenCellsProperty( m_spChart2ModelContact ) ); 2120 2121 return aWrappedProperties; 2122 } 2123 2124 // ================================================================================ 2125 2126 uno::Sequence< OUString > DiagramWrapper::getSupportedServiceNames_Static() 2127 { 2128 uno::Sequence< OUString > aServices( 8 ); 2129 aServices[ 0 ] = C2U( "com.sun.star.chart.Diagram" ); 2130 aServices[ 1 ] = C2U( "com.sun.star.xml.UserDefinedAttributeSupplier" ); 2131 aServices[ 2 ] = C2U( "com.sun.star.chart.StackableDiagram" ); 2132 aServices[ 3 ] = C2U( "com.sun.star.chart.ChartAxisXSupplier" ); 2133 aServices[ 4 ] = C2U( "com.sun.star.chart.ChartAxisYSupplier" ); 2134 aServices[ 5 ] = C2U( "com.sun.star.chart.ChartAxisZSupplier" ); 2135 aServices[ 6 ] = C2U( "com.sun.star.chart.ChartTwoAxisXSupplier" ); 2136 aServices[ 7 ] = C2U( "com.sun.star.chart.ChartTwoAxisYSupplier" ); 2137 // aServices[ x ] = C2U( "com.sun.star.beans.PropertySet" ); 2138 // aServices[ x ] = C2U( "com.sun.star.drawing.FillProperties" ); 2139 // aServices[ x ] = C2U( "com.sun.star.drawing.LineProperties" ); 2140 2141 return aServices; 2142 } 2143 2144 // implement XServiceInfo methods basing upon getSupportedServiceNames_Static 2145 APPHELPER_XSERVICEINFO_IMPL( DiagramWrapper, lcl_aServiceName ); 2146 2147 } // namespace wrapper 2148 } // namespace chart 2149 2150