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 27 #include "ShapeController.hxx" 28 #include "ShapeController.hrc" 29 #include "ChartController.hxx" 30 #include "ChartWindow.hxx" 31 #include "ViewElementListProvider.hxx" 32 #include "dlg_ShapeFont.hxx" 33 #include "dlg_ShapeParagraph.hxx" 34 #include "chartview/DrawModelWrapper.hxx" 35 #include "macros.hxx" 36 37 #include <com/sun/star/frame/XStorable.hpp> 38 39 #include <vos/mutex.hxx> 40 #include <vcl/msgbox.hxx> 41 #include <vcl/svapp.hxx> 42 #include <editeng/brkitem.hxx> 43 #include <svx/dialogs.hrc> 44 #include <svx/drawitem.hxx> 45 #include <editeng/eeitem.hxx> 46 #include <editeng/hyznitem.hxx> 47 #include <editeng/orphitem.hxx> 48 #include <editeng/spltitem.hxx> 49 #include <svx/svxdlg.hxx> 50 #include <editeng/widwitem.hxx> 51 52 #include <boost/scoped_ptr.hpp> 53 54 using namespace ::com::sun::star; 55 using namespace ::com::sun::star::frame; 56 57 using ::com::sun::star::uno::Reference; 58 using ::com::sun::star::uno::Sequence; 59 60 //............................................................................. 61 namespace chart 62 { 63 //............................................................................. 64 65 ShapeController::ShapeController( const Reference< uno::XComponentContext >& rxContext, 66 ChartController* pController ) 67 :FeatureCommandDispatchBase( rxContext ) 68 ,m_pChartController( pController ) 69 { 70 } 71 72 ShapeController::~ShapeController() 73 { 74 } 75 76 void ShapeController::initialize() 77 { 78 FeatureCommandDispatchBase::initialize(); 79 } 80 81 // WeakComponentImplHelperBase 82 void ShapeController::disposing() 83 { 84 } 85 86 // XEventListener 87 void ShapeController::disposing( const lang::EventObject& /* Source */ ) 88 throw (uno::RuntimeException) 89 { 90 } 91 92 FeatureState ShapeController::getState( const ::rtl::OUString& rCommand ) 93 { 94 FeatureState aReturn; 95 aReturn.bEnabled = false; 96 aReturn.aState <<= false; 97 98 bool bWritable = false; 99 if ( m_pChartController ) 100 { 101 Reference< frame::XStorable > xStorable( m_pChartController->getModel(), uno::UNO_QUERY ); 102 if ( xStorable.is() ) 103 { 104 bWritable = !xStorable->isReadonly(); 105 } 106 } 107 108 SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand ); 109 if ( aIter != m_aSupportedFeatures.end() ) 110 { 111 sal_uInt16 nFeatureId = aIter->second.nFeatureId; 112 switch ( nFeatureId ) 113 { 114 case COMMAND_ID_FORMAT_LINE: 115 case COMMAND_ID_FORMAT_AREA: 116 case COMMAND_ID_TEXT_ATTRIBUTES: 117 case COMMAND_ID_TRANSFORM_DIALOG: 118 case COMMAND_ID_OBJECT_TITLE_DESCRIPTION: 119 case COMMAND_ID_RENAME_OBJECT: 120 { 121 aReturn.bEnabled = bWritable; 122 aReturn.aState <<= false; 123 } 124 break; 125 case COMMAND_ID_BRING_TO_FRONT: 126 case COMMAND_ID_FORWARD: 127 { 128 aReturn.bEnabled = ( bWritable && isForwardPossible() ); 129 aReturn.aState <<= false; 130 } 131 break; 132 case COMMAND_ID_BACKWARD: 133 case COMMAND_ID_SEND_TO_BACK: 134 { 135 136 aReturn.bEnabled = ( bWritable && isBackwardPossible() ); 137 aReturn.aState <<= false; 138 } 139 break; 140 case COMMAND_ID_FONT_DIALOG: 141 case COMMAND_ID_PARAGRAPH_DIALOG: 142 { 143 aReturn.bEnabled = bWritable; 144 aReturn.aState <<= false; 145 } 146 break; 147 default: 148 { 149 aReturn.bEnabled = false; 150 aReturn.aState <<= false; 151 } 152 break; 153 } 154 } 155 156 return aReturn; 157 } 158 159 void ShapeController::execute( const ::rtl::OUString& rCommand, const Sequence< beans::PropertyValue>& rArgs ) 160 { 161 (void)rArgs; 162 163 SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand ); 164 if ( aIter != m_aSupportedFeatures.end() ) 165 { 166 sal_uInt16 nFeatureId = aIter->second.nFeatureId; 167 switch ( nFeatureId ) 168 { 169 case COMMAND_ID_FORMAT_LINE: 170 { 171 executeDispatch_FormatLine(); 172 } 173 break; 174 case COMMAND_ID_FORMAT_AREA: 175 { 176 executeDispatch_FormatArea(); 177 } 178 break; 179 case COMMAND_ID_TEXT_ATTRIBUTES: 180 { 181 executeDispatch_TextAttributes(); 182 } 183 break; 184 case COMMAND_ID_TRANSFORM_DIALOG: 185 { 186 executeDispatch_TransformDialog(); 187 } 188 break; 189 case COMMAND_ID_OBJECT_TITLE_DESCRIPTION: 190 { 191 executeDispatch_ObjectTitleDescription(); 192 } 193 break; 194 case COMMAND_ID_RENAME_OBJECT: 195 { 196 executeDispatch_RenameObject(); 197 } 198 break; 199 case COMMAND_ID_BRING_TO_FRONT: 200 case COMMAND_ID_FORWARD: 201 case COMMAND_ID_BACKWARD: 202 case COMMAND_ID_SEND_TO_BACK: 203 { 204 executeDispatch_ChangeZOrder( nFeatureId ); 205 } 206 break; 207 case COMMAND_ID_FONT_DIALOG: 208 { 209 executeDispatch_FontDialog(); 210 } 211 break; 212 case COMMAND_ID_PARAGRAPH_DIALOG: 213 { 214 executeDispatch_ParagraphDialog(); 215 } 216 break; 217 default: 218 { 219 } 220 break; 221 } 222 } 223 } 224 225 void ShapeController::describeSupportedFeatures() 226 { 227 implDescribeSupportedFeature( ".uno:FormatLine", COMMAND_ID_FORMAT_LINE, CommandGroup::FORMAT ); 228 implDescribeSupportedFeature( ".uno:FormatArea", COMMAND_ID_FORMAT_AREA, CommandGroup::FORMAT ); 229 implDescribeSupportedFeature( ".uno:TextAttributes", COMMAND_ID_TEXT_ATTRIBUTES, CommandGroup::FORMAT ); 230 implDescribeSupportedFeature( ".uno:TransformDialog", COMMAND_ID_TRANSFORM_DIALOG, CommandGroup::FORMAT ); 231 implDescribeSupportedFeature( ".uno:ObjectTitleDescription", COMMAND_ID_OBJECT_TITLE_DESCRIPTION, CommandGroup::FORMAT ); 232 implDescribeSupportedFeature( ".uno:RenameObject", COMMAND_ID_RENAME_OBJECT, CommandGroup::FORMAT ); 233 implDescribeSupportedFeature( ".uno:BringToFront", COMMAND_ID_BRING_TO_FRONT, CommandGroup::FORMAT ); 234 implDescribeSupportedFeature( ".uno:Forward", COMMAND_ID_FORWARD, CommandGroup::FORMAT ); 235 implDescribeSupportedFeature( ".uno:Backward", COMMAND_ID_BACKWARD, CommandGroup::FORMAT ); 236 implDescribeSupportedFeature( ".uno:SendToBack", COMMAND_ID_SEND_TO_BACK, CommandGroup::FORMAT ); 237 implDescribeSupportedFeature( ".uno:FontDialog", COMMAND_ID_FONT_DIALOG, CommandGroup::EDIT ); 238 implDescribeSupportedFeature( ".uno:ParagraphDialog", COMMAND_ID_PARAGRAPH_DIALOG, CommandGroup::EDIT ); 239 } 240 241 IMPL_LINK( ShapeController, CheckNameHdl, AbstractSvxNameDialog*, pDialog ) 242 { 243 String aName; 244 if ( pDialog ) 245 { 246 pDialog->GetName( aName ); 247 } 248 if ( aName.Len() ) 249 { 250 DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL ); 251 if ( pDrawViewWrapper && pDrawViewWrapper->getNamedSdrObject( aName ) ) 252 { 253 return 0; 254 } 255 } 256 return 1; 257 } 258 259 void ShapeController::executeDispatch_FormatLine() 260 { 261 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 262 if ( m_pChartController ) 263 { 264 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow ); 265 DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper(); 266 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 267 if ( pParent && pDrawModelWrapper && pDrawViewWrapper ) 268 { 269 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject(); 270 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() ); 271 sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked(); 272 if ( bHasMarked ) 273 { 274 pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False ); 275 } 276 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 277 if ( pFact ) 278 { 279 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg( 280 pFact->CreateSvxLineTabDialog( pParent, &aAttr, &pDrawModelWrapper->getSdrModel(), 281 pSelectedObj, bHasMarked ) ); 282 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 283 { 284 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 285 if ( bHasMarked ) 286 { 287 pDrawViewWrapper->SetAttrToMarked( *pOutAttr, sal_False ); 288 } 289 else 290 { 291 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False ); 292 } 293 } 294 } 295 } 296 } 297 } 298 299 void ShapeController::executeDispatch_FormatArea() 300 { 301 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 302 if ( m_pChartController ) 303 { 304 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow ); 305 DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper(); 306 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 307 if ( pParent && pDrawModelWrapper && pDrawViewWrapper ) 308 { 309 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() ); 310 sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked(); 311 if ( bHasMarked ) 312 { 313 pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False ); 314 } 315 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 316 if ( pFact ) 317 { 318 ::boost::scoped_ptr< AbstractSvxAreaTabDialog > pDlg( 319 pFact->CreateSvxAreaTabDialog( pParent, &aAttr, &pDrawModelWrapper->getSdrModel(), 320 pDrawViewWrapper ) ); 321 if ( pDlg.get() ) 322 { 323 SfxItemPool& rItemPool = pDrawViewWrapper->GetModel()->GetItemPool(); 324 SfxItemSet aSet( rItemPool, rItemPool.GetFirstWhich(), rItemPool.GetLastWhich() ); 325 const SvxColorTableItem* pColorItem = static_cast< const SvxColorTableItem* >( aSet.GetItem( SID_COLOR_TABLE ) ); 326 if ( pColorItem && pColorItem->GetColorTable() == XColorList::GetStdColorList() ) 327 { 328 pDlg->DontDeleteColorTable(); 329 } 330 if ( pDlg->Execute() == RET_OK ) 331 { 332 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 333 if ( bHasMarked ) 334 { 335 pDrawViewWrapper->SetAttrToMarked( *pOutAttr, sal_False ); 336 } 337 else 338 { 339 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False ); 340 } 341 } 342 } 343 } 344 } 345 } 346 } 347 348 void ShapeController::executeDispatch_TextAttributes() 349 { 350 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 351 if ( m_pChartController ) 352 { 353 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow ); 354 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 355 if ( pParent && pDrawViewWrapper ) 356 { 357 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() ); 358 sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked(); 359 if ( bHasMarked ) 360 { 361 pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False ); 362 } 363 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 364 if ( pFact ) 365 { 366 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg( 367 pFact->CreateTextTabDialog( pParent, &aAttr, pDrawViewWrapper ) ); 368 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 369 { 370 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 371 if ( bHasMarked ) 372 { 373 pDrawViewWrapper->SetAttributes( *pOutAttr ); 374 } 375 else 376 { 377 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False ); 378 } 379 } 380 } 381 } 382 } 383 } 384 385 void ShapeController::executeDispatch_TransformDialog() 386 { 387 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 388 if ( m_pChartController ) 389 { 390 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow ); 391 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 392 if ( pParent && pDrawViewWrapper ) 393 { 394 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject(); 395 if ( pSelectedObj && pSelectedObj->GetObjIdentifier() == OBJ_CAPTION ) 396 { 397 // item set for caption 398 SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() ); 399 pDrawViewWrapper->GetAttributes( aAttr ); 400 // item set for position and size 401 SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() ); 402 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 403 if ( pFact ) 404 { 405 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg( 406 pFact->CreateCaptionDialog( pParent, pDrawViewWrapper ) ); 407 if ( pDlg.get() ) 408 { 409 const sal_uInt16* pRange = pDlg->GetInputRanges( *aAttr.GetPool() ); 410 SfxItemSet aCombAttr( *aAttr.GetPool(), pRange ); 411 aCombAttr.Put( aAttr ); 412 aCombAttr.Put( aGeoAttr ); 413 pDlg->SetInputSet( &aCombAttr ); 414 if ( pDlg->Execute() == RET_OK ) 415 { 416 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 417 pDrawViewWrapper->SetAttributes( *pOutAttr ); 418 pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr ); 419 } 420 } 421 } 422 } 423 else 424 { 425 SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() ); 426 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 427 if ( pFact ) 428 { 429 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg( 430 pFact->CreateSvxTransformTabDialog( pParent, &aGeoAttr, pDrawViewWrapper ) ); 431 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 432 { 433 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 434 pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr ); 435 } 436 } 437 } 438 } 439 } 440 } 441 442 void ShapeController::executeDispatch_ObjectTitleDescription() 443 { 444 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 445 if ( m_pChartController ) 446 { 447 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 448 if ( pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1 ) 449 { 450 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject(); 451 if ( pSelectedObj ) 452 { 453 String aTitle( pSelectedObj->GetTitle() ); 454 String aDescription( pSelectedObj->GetDescription() ); 455 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 456 if ( pFact ) 457 { 458 ::boost::scoped_ptr< AbstractSvxObjectTitleDescDialog > pDlg( 459 pFact->CreateSvxObjectTitleDescDialog( NULL, aTitle, aDescription ) ); 460 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 461 { 462 pDlg->GetTitle( aTitle ); 463 pDlg->GetDescription( aDescription ); 464 pSelectedObj->SetTitle( aTitle ); 465 pSelectedObj->SetDescription( aDescription ); 466 } 467 } 468 } 469 } 470 } 471 } 472 473 void ShapeController::executeDispatch_RenameObject() 474 { 475 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 476 if ( m_pChartController ) 477 { 478 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 479 if ( pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1 ) 480 { 481 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject(); 482 if ( pSelectedObj ) 483 { 484 String aName( pSelectedObj->GetName() ); 485 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 486 if ( pFact ) 487 { 488 ::boost::scoped_ptr< AbstractSvxObjectNameDialog > pDlg( 489 pFact->CreateSvxObjectNameDialog( NULL, aName ) ); 490 pDlg->SetCheckNameHdl( LINK( this, ShapeController, CheckNameHdl ) ); 491 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 492 { 493 pDlg->GetName( aName ); 494 if ( aName != pSelectedObj->GetName() ) 495 { 496 pSelectedObj->SetName( aName ); 497 } 498 } 499 } 500 } 501 } 502 } 503 } 504 505 void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId ) 506 { 507 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 508 DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL ); 509 if ( pDrawViewWrapper ) 510 { 511 switch ( nId ) 512 { 513 case COMMAND_ID_BRING_TO_FRONT: 514 { 515 if ( isForwardPossible() ) 516 { 517 pDrawViewWrapper->PutMarkedToTop(); 518 } 519 } 520 break; 521 case COMMAND_ID_FORWARD: 522 { 523 if ( isForwardPossible() ) 524 { 525 pDrawViewWrapper->MovMarkedToTop(); 526 } 527 } 528 break; 529 case COMMAND_ID_BACKWARD: 530 { 531 if ( isBackwardPossible() ) 532 { 533 pDrawViewWrapper->MovMarkedToBtm(); 534 } 535 } 536 break; 537 case COMMAND_ID_SEND_TO_BACK: 538 { 539 if ( isBackwardPossible() ) 540 { 541 SdrObject* pFirstObj = getFirstAdditionalShape(); 542 pDrawViewWrapper->PutMarkedBehindObj( pFirstObj ); 543 } 544 } 545 break; 546 default: 547 { 548 } 549 break; 550 } 551 } 552 } 553 554 void ShapeController::executeDispatch_FontDialog() 555 { 556 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 557 if ( m_pChartController ) 558 { 559 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow ); 560 DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper(); 561 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 562 if ( pParent && pDrawModelWrapper && pDrawViewWrapper ) 563 { 564 SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() ); 565 pDrawViewWrapper->GetAttributes( aAttr ); 566 ViewElementListProvider aViewElementListProvider( pDrawModelWrapper ); 567 ::boost::scoped_ptr< ShapeFontDialog > pDlg( new ShapeFontDialog( pParent, &aAttr, &aViewElementListProvider ) ); 568 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 569 { 570 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 571 pDrawViewWrapper->SetAttributes( *pOutAttr ); 572 } 573 } 574 } 575 } 576 577 void ShapeController::executeDispatch_ParagraphDialog() 578 { 579 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 580 if ( m_pChartController ) 581 { 582 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow ); 583 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 584 if ( pParent && pDrawViewWrapper ) 585 { 586 SfxItemPool& rPool = pDrawViewWrapper->GetModel()->GetItemPool(); 587 SfxItemSet aAttr( rPool ); 588 pDrawViewWrapper->GetAttributes( aAttr ); 589 590 SfxItemSet aNewAttr( rPool, 591 EE_ITEMS_START, EE_ITEMS_END, 592 SID_ATTR_PARA_HYPHENZONE, SID_ATTR_PARA_HYPHENZONE, 593 SID_ATTR_PARA_PAGEBREAK, SID_ATTR_PARA_PAGEBREAK, 594 SID_ATTR_PARA_SPLIT, SID_ATTR_PARA_SPLIT, 595 SID_ATTR_PARA_WIDOWS, SID_ATTR_PARA_WIDOWS, 596 SID_ATTR_PARA_ORPHANS, SID_ATTR_PARA_ORPHANS, 597 0 ); 598 aNewAttr.Put( aAttr ); 599 aNewAttr.Put( SvxHyphenZoneItem( sal_False, SID_ATTR_PARA_HYPHENZONE ) ); 600 aNewAttr.Put( SvxFmtBreakItem( SVX_BREAK_NONE, SID_ATTR_PARA_PAGEBREAK ) ); 601 aNewAttr.Put( SvxFmtSplitItem( sal_True, SID_ATTR_PARA_SPLIT) ); 602 aNewAttr.Put( SvxWidowsItem( 0, SID_ATTR_PARA_WIDOWS) ); 603 aNewAttr.Put( SvxOrphansItem( 0, SID_ATTR_PARA_ORPHANS) ); 604 605 ::boost::scoped_ptr< ShapeParagraphDialog > pDlg( new ShapeParagraphDialog( pParent, &aNewAttr ) ); 606 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) ) 607 { 608 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet(); 609 pDrawViewWrapper->SetAttributes( *pOutAttr ); 610 } 611 } 612 } 613 } 614 615 SdrObject* ShapeController::getFirstAdditionalShape() 616 { 617 SdrObject* pFirstObj = NULL; 618 619 try 620 { 621 DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL ); 622 if ( pDrawModelWrapper ) 623 { 624 Reference< drawing::XShape > xFirstShape; 625 Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() ); 626 Reference< drawing::XShapes > xDrawPageShapes( xDrawPage, uno::UNO_QUERY_THROW ); 627 Reference< drawing::XShapes > xChartRoot( DrawModelWrapper::getChartRootShape( xDrawPage ) ); 628 sal_Int32 nCount = xDrawPageShapes->getCount(); 629 for ( sal_Int32 i = 0; i < nCount; ++i ) 630 { 631 Reference< drawing::XShape > xShape; 632 if ( xDrawPageShapes->getByIndex( i ) >>= xShape ) 633 { 634 if ( xShape.is() && xShape != xChartRoot ) 635 { 636 xFirstShape = xShape; 637 break; 638 } 639 } 640 } 641 if ( xFirstShape.is() ) 642 { 643 pFirstObj = DrawViewWrapper::getSdrObject( xFirstShape ); 644 } 645 } 646 } 647 catch ( uno::Exception& ex ) 648 { 649 ASSERT_EXCEPTION( ex ); 650 } 651 652 return pFirstObj; 653 } 654 655 SdrObject* ShapeController::getLastAdditionalShape() 656 { 657 SdrObject* pLastObj = NULL; 658 659 try 660 { 661 DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL ); 662 if ( pDrawModelWrapper ) 663 { 664 Reference< drawing::XShape > xLastShape; 665 Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() ); 666 Reference< drawing::XShapes > xDrawPageShapes( xDrawPage, uno::UNO_QUERY_THROW ); 667 Reference< drawing::XShapes > xChartRoot( DrawModelWrapper::getChartRootShape( xDrawPage ) ); 668 sal_Int32 nCount = xDrawPageShapes->getCount(); 669 for ( sal_Int32 i = nCount - 1; i >= 0; --i ) 670 { 671 Reference< drawing::XShape > xShape; 672 if ( xDrawPageShapes->getByIndex( i ) >>= xShape ) 673 { 674 if ( xShape.is() && xShape != xChartRoot ) 675 { 676 xLastShape = xShape; 677 break; 678 } 679 } 680 } 681 if ( xLastShape.is() ) 682 { 683 pLastObj = DrawViewWrapper::getSdrObject( xLastShape ); 684 } 685 } 686 } 687 catch ( uno::Exception& ex ) 688 { 689 ASSERT_EXCEPTION( ex ); 690 } 691 692 return pLastObj; 693 } 694 695 bool ShapeController::isBackwardPossible() 696 { 697 if ( m_pChartController && m_pChartController->m_aSelection.isAdditionalShapeSelected() ) 698 { 699 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 700 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 701 if ( pDrawViewWrapper ) 702 { 703 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject(); 704 SdrObject* pFirstObj = getFirstAdditionalShape(); 705 if ( pSelectedObj && pFirstObj && pSelectedObj != pFirstObj ) 706 { 707 return true; 708 } 709 } 710 } 711 return false; 712 } 713 714 bool ShapeController::isForwardPossible() 715 { 716 if ( m_pChartController && m_pChartController->m_aSelection.isAdditionalShapeSelected() ) 717 { 718 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 719 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper(); 720 if ( pDrawViewWrapper ) 721 { 722 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject(); 723 SdrObject* pLastObj = getLastAdditionalShape(); 724 if ( pSelectedObj && pLastObj && pSelectedObj != pLastObj ) 725 { 726 return true; 727 } 728 } 729 } 730 return false; 731 } 732 733 //............................................................................. 734 } // namespace chart 735 //............................................................................. 736