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