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_svx.hxx" 30 31 // include --------------------------------------------------------------- 32 33 #include <string> // HACK: prevent conflict between STLPORT and Workshop headers 34 35 #include <com/sun/star/util/XURLTransformer.hpp> 36 #include <com/sun/star/awt/MenuItemStyle.hpp> 37 #include <com/sun/star/awt/XPopupMenuExtended.hpp> 38 #include <com/sun/star/graphic/XGraphic.hpp> 39 40 #include <vos/mutex.hxx> 41 42 #include <svtools/toolbarmenu.hxx> 43 #include <vcl/toolbox.hxx> 44 #include <sfx2/app.hxx> 45 #include <sfx2/dispatch.hxx> 46 #include <sfx2/objsh.hxx> 47 #include <svl/eitem.hxx> 48 #include <vcl/settings.hxx> 49 #include <svl/intitem.hxx> 50 #include <editeng/colritem.hxx> 51 #include <tools/urlobj.hxx> 52 53 #include <svx/dialogs.hrc> 54 #include <svx/svdtrans.hxx> 55 #include <svx/sdasitm.hxx> 56 #include <svx/dialmgr.hxx> 57 #include "svx/extrusioncolorcontrol.hxx" 58 59 //#include "chrtitem.hxx" 60 #include "helpid.hrc" 61 #include "extrusioncontrols.hxx" 62 #include "extrusioncontrols.hrc" 63 #include "colorwindow.hxx" 64 #include "extrusiondepthdialog.hxx" 65 66 //////////// 67 68 using ::rtl::OUString; 69 //using ::svtools::ToolbarMenu; 70 71 using namespace ::com::sun::star; 72 using namespace ::com::sun::star::uno; 73 using namespace ::com::sun::star::lang; 74 using namespace ::com::sun::star::beans; 75 using namespace ::com::sun::star::util; 76 using namespace ::com::sun::star::graphic; 77 78 namespace svx 79 { 80 81 /************************************************************************* 82 |* 83 |* ExtrusionDirectionWindow 84 |* 85 \************************************************************************/ 86 87 static sal_Int32 gSkewList[] = { 135, 90, 45, 180, 0, -360, -135, -90, -45 }; 88 89 ExtrusionDirectionWindow::ExtrusionDirectionWindow( svt::ToolboxController& rController, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, Window* pParentWindow ) 90 : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_DIRECTION )) 91 , mrController( rController ) 92 , maImgPerspective( SVX_RES( IMG_PERSPECTIVE ) ) 93 , maImgPerspectiveH( SVX_RES( IMG_PERSPECTIVE_H ) ) 94 , maImgParallel( SVX_RES( IMG_PARALLEL ) ) 95 , maImgParallelH( SVX_RES( IMG_PARALLEL_H ) ) 96 , msExtrusionDirection( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionDirection" ) ) 97 , msExtrusionProjection( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionProjection" ) ) 98 { 99 SetHelpId( HID_MENU_EXTRUSION_DIRECTION ); 100 101 sal_uInt16 i; 102 for( i = DIRECTION_NW; i <= DIRECTION_SE; i++ ) 103 { 104 maImgDirection[i] = Image( SVX_RES( IMG_DIRECTION + i ) ); 105 maImgDirectionH[i] = Image( SVX_RES( IMG_DIRECTION_H + i ) ); 106 } 107 108 SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectHdl ) ); 109 mpDirectionSet = createEmptyValueSetControl(); 110 mpDirectionSet->SetHelpId( HID_VALUESET_EXTRUSION_DIRECTION ); 111 112 mpDirectionSet->SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectHdl ) ); 113 mpDirectionSet->SetColCount( 3 ); 114 mpDirectionSet->EnableFullItemMode( sal_False ); 115 116 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 117 118 for( i = DIRECTION_NW; i <= DIRECTION_SE; i++ ) 119 { 120 String aText( SVX_RES( STR_DIRECTION + i ) ); 121 mpDirectionSet->InsertItem( i+1, bHighContrast ? maImgDirectionH[ i ] : maImgDirection[ i ], aText ); 122 } 123 124 mpDirectionSet->SetOutputSizePixel( Size( 72, 72 ) ); 125 126 appendEntry( 2, mpDirectionSet ); 127 appendSeparator(); 128 appendEntry( 0, String( SVX_RES( STR_PERSPECTIVE ) ), bHighContrast ? maImgPerspectiveH : maImgPerspective ); 129 appendEntry( 1, String( SVX_RES( STR_PARALLEL ) ), bHighContrast ? maImgParallelH : maImgParallel ); 130 131 SetOutputSizePixel( getMenuSize() ); 132 133 FreeResource(); 134 135 AddStatusListener( msExtrusionDirection ); 136 AddStatusListener( msExtrusionProjection ); 137 } 138 139 void ExtrusionDirectionWindow::DataChanged( const DataChangedEvent& rDCEvt ) 140 { 141 ToolbarMenu::DataChanged( rDCEvt ); 142 143 if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) ) 144 { 145 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 146 147 for( sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; i++ ) 148 { 149 mpDirectionSet->SetItemImage( i+1, bHighContrast ? maImgDirectionH[ i ] : maImgDirection[ i ] ); 150 } 151 152 setEntryImage( 0, bHighContrast ? maImgPerspectiveH : maImgPerspective ); 153 setEntryImage( 1, bHighContrast ? maImgParallelH : maImgParallel ); 154 } 155 } 156 157 // ----------------------------------------------------------------------- 158 159 void ExtrusionDirectionWindow::implSetDirection( sal_Int32 nSkew, bool bEnabled ) 160 { 161 if( mpDirectionSet ) 162 { 163 sal_uInt16 nItemId; 164 for( nItemId = DIRECTION_NW; nItemId <= DIRECTION_SE; nItemId++ ) 165 { 166 if( gSkewList[nItemId] == nSkew ) 167 break; 168 } 169 170 if( nItemId <= DIRECTION_SE ) 171 { 172 mpDirectionSet->SelectItem( nItemId+1 ); 173 } 174 else 175 { 176 mpDirectionSet->SetNoSelection(); 177 } 178 } 179 enableEntry( 2, bEnabled ); 180 } 181 182 // ----------------------------------------------------------------------- 183 184 void ExtrusionDirectionWindow::implSetProjection( sal_Int32 nProjection, bool bEnabled ) 185 { 186 checkEntry( 0, (nProjection == 0) && bEnabled ); 187 checkEntry( 1, (nProjection == 1 ) && bEnabled ); 188 enableEntry( 0, bEnabled ); 189 enableEntry( 1, bEnabled ); 190 } 191 192 // ----------------------------------------------------------------------- 193 194 void SAL_CALL ExtrusionDirectionWindow::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException ) 195 { 196 if( Event.FeatureURL.Main.equals( msExtrusionDirection ) ) 197 { 198 if( !Event.IsEnabled ) 199 { 200 implSetDirection( -1, false ); 201 } 202 else 203 { 204 sal_Int32 nValue = 0; 205 if( Event.State >>= nValue ) 206 implSetDirection( nValue, true ); 207 } 208 } 209 else if( Event.FeatureURL.Main.equals( msExtrusionProjection ) ) 210 { 211 if( !Event.IsEnabled ) 212 { 213 implSetProjection( -1, false ); 214 } 215 else 216 { 217 sal_Int32 nValue = 0; 218 if( Event.State >>= nValue ) 219 implSetProjection( nValue, true ); 220 } 221 } 222 } 223 224 // ----------------------------------------------------------------------- 225 226 IMPL_LINK( ExtrusionDirectionWindow, SelectHdl, void *, pControl ) 227 { 228 if ( IsInPopupMode() ) 229 EndPopupMode(); 230 231 if( pControl == mpDirectionSet ) 232 { 233 Sequence< PropertyValue > aArgs( 1 ); 234 aArgs[0].Name = msExtrusionDirection.copy(5); 235 aArgs[0].Value <<= (sal_Int32)gSkewList[mpDirectionSet->GetSelectItemId()-1]; 236 237 mrController.dispatchCommand( msExtrusionDirection, aArgs ); 238 } 239 else 240 { 241 int nProjection = getSelectedEntryId(); 242 if( (nProjection >= 0) && (nProjection < 2 ) ) 243 { 244 Sequence< PropertyValue > aArgs( 1 ); 245 aArgs[0].Name = msExtrusionProjection.copy(5); 246 aArgs[0].Value <<= (sal_Int32)nProjection; 247 248 mrController.dispatchCommand( msExtrusionProjection, aArgs ); 249 implSetProjection( nProjection, true ); 250 } 251 } 252 253 return 0; 254 } 255 256 // ======================================================================= 257 // ExtrusionDirectionControl 258 // ======================================================================= 259 260 ExtrusionDirectionControl::ExtrusionDirectionControl( const Reference< lang::XMultiServiceFactory >& rServiceManager ) 261 : svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionDirectionFloater" ) ) ) 262 { 263 } 264 265 // ----------------------------------------------------------------------- 266 267 ::Window* ExtrusionDirectionControl::createPopupWindow( ::Window* pParent ) 268 { 269 return new ExtrusionDirectionWindow( *this, m_xFrame, pParent ); 270 } 271 272 // ----------------------------------------------------------------------- 273 // XServiceInfo 274 // ----------------------------------------------------------------------- 275 276 OUString SAL_CALL ExtrusionDirectionControl_getImplementationName() 277 { 278 return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.ExtrusionDirectionController" )); 279 } 280 281 // -------------------------------------------------------------------- 282 283 Sequence< OUString > SAL_CALL ExtrusionDirectionControl_getSupportedServiceNames() throw( RuntimeException ) 284 { 285 Sequence< OUString > aSNS( 1 ); 286 aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" )); 287 return aSNS; 288 } 289 290 // -------------------------------------------------------------------- 291 292 Reference< XInterface > SAL_CALL SAL_CALL ExtrusionDirectionControl_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException ) 293 { 294 return *new ExtrusionDirectionControl( rSMgr ); 295 } 296 297 // -------------------------------------------------------------------- 298 299 OUString SAL_CALL ExtrusionDirectionControl::getImplementationName( ) throw (RuntimeException) 300 { 301 return ExtrusionDirectionControl_getImplementationName(); 302 } 303 304 // -------------------------------------------------------------------- 305 306 Sequence< OUString > SAL_CALL ExtrusionDirectionControl::getSupportedServiceNames( ) throw (RuntimeException) 307 { 308 return ExtrusionDirectionControl_getSupportedServiceNames(); 309 } 310 311 // #################################################################### 312 313 ExtrusionDepthDialog::ExtrusionDepthDialog( Window* pParent, double fDepth, FieldUnit eDefaultUnit ) 314 : ModalDialog( pParent, SVX_RES( RID_SVX_MDLG_EXTRUSION_DEPTH ) ), 315 maFLDepth( this, SVX_RES( FL_DEPTH ) ), 316 maMtrDepth( this, SVX_RES( MTR_DEPTH ) ), 317 maOKButton( this, SVX_RES( BTN_OK ) ), 318 maCancelButton( this, SVX_RES( BTN_CANCEL ) ), 319 maHelpButton( this, SVX_RES( BTN_HELP ) ) 320 { 321 bool bMetric = IsMetric( eDefaultUnit ); 322 maMtrDepth.SetUnit( bMetric ? FUNIT_CM : FUNIT_INCH ); 323 maMtrDepth.SetValue( (int) fDepth * 100, FUNIT_100TH_MM ); 324 325 FreeResource(); 326 } 327 328 ExtrusionDepthDialog::~ExtrusionDepthDialog() 329 { 330 } 331 332 double ExtrusionDepthDialog::getDepth() const 333 { 334 // bool bMetric = IsMetric( meDefaultUnit ); 335 return (double)( maMtrDepth.GetValue( FUNIT_100TH_MM ) ) / 100.0; 336 } 337 338 // #################################################################### 339 340 double aDepthListInch[] = { 0, 1270,2540,5080,10160 }; 341 double aDepthListMM[] = { 0, 1000, 2500, 5000, 10000 }; 342 343 ExtrusionDepthWindow::ExtrusionDepthWindow( svt::ToolboxController& rController, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, Window* pParentWindow ) 344 : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_DEPTH )) 345 , mrController( rController ) 346 , maImgDepth0( SVX_RES( IMG_DEPTH_0 ) ) 347 , maImgDepth1( SVX_RES( IMG_DEPTH_1 ) ) 348 , maImgDepth2( SVX_RES( IMG_DEPTH_2 ) ) 349 , maImgDepth3( SVX_RES( IMG_DEPTH_3 ) ) 350 , maImgDepth4( SVX_RES( IMG_DEPTH_4 ) ) 351 , maImgDepthInfinity( SVX_RES( IMG_DEPTH_INFINITY ) ) 352 , maImgDepth0h( SVX_RES( IMG_DEPTH_0_H ) ) 353 , maImgDepth1h( SVX_RES( IMG_DEPTH_1_H ) ) 354 , maImgDepth2h( SVX_RES( IMG_DEPTH_2_H ) ) 355 , maImgDepth3h( SVX_RES( IMG_DEPTH_3_H ) ) 356 , maImgDepth4h( SVX_RES( IMG_DEPTH_4_H ) ) 357 , maImgDepthInfinityh( SVX_RES( IMG_DEPTH_INFINITY_H ) ) 358 , mfDepth( -1.0 ) 359 , msExtrusionDepth( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionDepth" ) ) 360 , msMetricUnit( RTL_CONSTASCII_USTRINGPARAM( ".uno:MetricUnit" ) ) 361 { 362 SetHelpId( HID_MENU_EXTRUSION_DEPTH ); 363 364 SetSelectHdl( LINK( this, ExtrusionDepthWindow, SelectHdl ) ); 365 366 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 367 368 String aEmpty; 369 appendEntry( 0, aEmpty, bHighContrast ? maImgDepth0h : maImgDepth0 ); 370 appendEntry( 1, aEmpty, bHighContrast ? maImgDepth1h : maImgDepth1 ); 371 appendEntry( 2, aEmpty, bHighContrast ? maImgDepth2h : maImgDepth2 ); 372 appendEntry( 3, aEmpty, bHighContrast ? maImgDepth3h : maImgDepth3 ); 373 appendEntry( 4, aEmpty, bHighContrast ? maImgDepth4h : maImgDepth4 ); 374 appendEntry( 5, String( SVX_RES( STR_INFINITY ) ), bHighContrast ? maImgDepthInfinityh : maImgDepthInfinity ); 375 appendEntry( 6, String( SVX_RES( STR_CUSTOM ) ) ); 376 377 SetOutputSizePixel( getMenuSize() ); 378 379 FreeResource(); 380 381 AddStatusListener( msExtrusionDepth ); 382 AddStatusListener( msMetricUnit ); 383 } 384 385 // ----------------------------------------------------------------------- 386 387 void ExtrusionDepthWindow::implSetDepth( double fDepth ) 388 { 389 mfDepth = fDepth; 390 int i; 391 for( i = 0; i < 7; i++ ) 392 { 393 if( i == 5 ) 394 { 395 checkEntry( i, fDepth >= 338666 ); 396 } 397 else if( i != 6 ) 398 { 399 checkEntry( i, (fDepth == (IsMetric( meUnit ) ? aDepthListMM[i] : aDepthListInch[i]) ) ); 400 } 401 } 402 } 403 404 // ----------------------------------------------------------------------- 405 406 void ExtrusionDepthWindow::implFillStrings( FieldUnit eUnit ) 407 { 408 meUnit = eUnit; 409 sal_uInt16 nResource = IsMetric( eUnit ) ? RID_SVXSTR_DEPTH_0 : RID_SVXSTR_DEPTH_0_INCH; 410 411 for( int i = 0; i < 5; i++ ) 412 { 413 String aStr( SVX_RES( nResource + i ) ); 414 setEntryText( i, aStr ); 415 }; 416 } 417 418 // ----------------------------------------------------------------------- 419 420 void SAL_CALL ExtrusionDepthWindow::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException ) 421 { 422 if( Event.FeatureURL.Main.equals( msExtrusionDepth ) ) 423 { 424 if( !Event.IsEnabled ) 425 { 426 implSetDepth( 0 ); 427 } 428 else 429 { 430 double fValue = 0.0; 431 if( Event.State >>= fValue ) 432 implSetDepth( fValue ); 433 } 434 } 435 else if( Event.FeatureURL.Main.equals( msMetricUnit ) ) 436 { 437 if( Event.IsEnabled ) 438 { 439 sal_Int32 nValue = 0; 440 if( Event.State >>= nValue ) 441 { 442 implFillStrings( static_cast<FieldUnit>(nValue) ); 443 if( mfDepth >= 0.0 ) 444 implSetDepth( mfDepth ); 445 } 446 } 447 } 448 } 449 450 // ----------------------------------------------------------------------- 451 452 void ExtrusionDepthWindow::DataChanged( const DataChangedEvent& rDCEvt ) 453 { 454 ToolbarMenu::DataChanged( rDCEvt ); 455 456 if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) ) 457 { 458 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 459 460 setEntryImage( 0, bHighContrast ? maImgDepth0h : maImgDepth0 ); 461 setEntryImage( 1, bHighContrast ? maImgDepth1h : maImgDepth1 ); 462 setEntryImage( 2, bHighContrast ? maImgDepth2h : maImgDepth2 ); 463 setEntryImage( 3, bHighContrast ? maImgDepth3h : maImgDepth3 ); 464 setEntryImage( 4, bHighContrast ? maImgDepth4h : maImgDepth4 ); 465 setEntryImage( 5, bHighContrast ? maImgDepthInfinityh : maImgDepthInfinity ); 466 } 467 } 468 469 470 // ----------------------------------------------------------------------- 471 472 IMPL_LINK( ExtrusionDepthWindow, SelectHdl, void *, EMPTYARG ) 473 { 474 int nSelected = getSelectedEntryId(); 475 if( nSelected != -1 ) 476 { 477 if( nSelected == 6 ) 478 { 479 if ( IsInPopupMode() ) 480 EndPopupMode(); 481 482 const rtl::OUString aCommand( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionDepthDialog" )); 483 484 Any a; 485 Sequence< PropertyValue > aArgs( 2 ); 486 aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Depth" )); 487 aArgs[0].Value <<= mfDepth; 488 aArgs[1].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Metric" )); 489 aArgs[1].Value <<= static_cast<sal_Int32>( meUnit ); 490 491 mrController.dispatchCommand( aCommand, aArgs ); 492 } 493 else 494 { 495 double fDepth; 496 497 if( nSelected == 5 ) 498 { 499 fDepth = 338666.6; 500 } 501 else 502 { 503 fDepth = IsMetric( meUnit ) ? aDepthListMM[nSelected] : aDepthListInch[nSelected]; 504 } 505 506 Sequence< PropertyValue > aArgs( 1 ); 507 aArgs[0].Name = msExtrusionDepth.copy(5); 508 aArgs[0].Value <<= fDepth; 509 510 mrController.dispatchCommand( msExtrusionDepth, aArgs ); 511 implSetDepth( fDepth ); 512 513 if ( IsInPopupMode() ) 514 EndPopupMode(); 515 } 516 } 517 return 0; 518 } 519 520 // ======================================================================= 521 // ExtrusionDirectionControl 522 // ======================================================================= 523 524 ExtrusionDepthController::ExtrusionDepthController( const Reference< lang::XMultiServiceFactory >& rServiceManager ) 525 : svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionDepthFloater" ) ) ) 526 { 527 } 528 529 // ----------------------------------------------------------------------- 530 531 ::Window* ExtrusionDepthController::createPopupWindow( ::Window* pParent ) 532 { 533 return new ExtrusionDepthWindow( *this, m_xFrame, pParent ); 534 } 535 536 537 // ----------------------------------------------------------------------- 538 // XServiceInfo 539 // ----------------------------------------------------------------------- 540 541 OUString SAL_CALL ExtrusionDepthController_getImplementationName() 542 { 543 return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.ExtrusionDepthController" )); 544 } 545 546 // -------------------------------------------------------------------- 547 548 Sequence< OUString > SAL_CALL ExtrusionDepthController_getSupportedServiceNames() throw( RuntimeException ) 549 { 550 Sequence< OUString > aSNS( 1 ); 551 aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.PopupMenuController" )); 552 return aSNS; 553 } 554 555 // -------------------------------------------------------------------- 556 557 Reference< XInterface > SAL_CALL SAL_CALL ExtrusionDepthController_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException ) 558 { 559 return *new ExtrusionDepthController( rSMgr ); 560 } 561 562 // -------------------------------------------------------------------- 563 564 OUString SAL_CALL ExtrusionDepthController::getImplementationName( ) throw (RuntimeException) 565 { 566 return ExtrusionDepthController_getImplementationName(); 567 } 568 569 // -------------------------------------------------------------------- 570 571 Sequence< OUString > SAL_CALL ExtrusionDepthController::getSupportedServiceNames( ) throw (RuntimeException) 572 { 573 return ExtrusionDepthController_getSupportedServiceNames(); 574 } 575 576 577 // #################################################################### 578 579 // ------------------------------------------------------------------------- 580 581 ExtrusionLightingWindow::ExtrusionLightingWindow( svt::ToolboxController& rController, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, Window* pParentWindow ) 582 : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_LIGHTING )) 583 , mrController( rController ) 584 , maImgBright( SVX_RES( IMG_LIGHTING_BRIGHT ) ) 585 , maImgNormal( SVX_RES( IMG_LIGHTING_NORMAL ) ) 586 , maImgDim( SVX_RES( IMG_LIGHTING_DIM ) ) 587 , maImgBrighth( SVX_RES( IMG_LIGHTING_BRIGHT_H ) ) 588 , maImgNormalh( SVX_RES( IMG_LIGHTING_NORMAL_H ) ) 589 , maImgDimh( SVX_RES( IMG_LIGHTING_DIM_H ) ) 590 , mnLevel( 0 ) 591 , mbLevelEnabled( false ) 592 , mnDirection( FROM_FRONT ) 593 , mbDirectionEnabled( false ) 594 , msExtrusionLightingDirection( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionLightingDirection" )) 595 , msExtrusionLightingIntensity( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionLightingIntensity" )) 596 { 597 sal_uInt16 i; 598 for( i = FROM_TOP_LEFT; i <= FROM_BOTTOM_RIGHT; i++ ) 599 { 600 if( i != FROM_FRONT ) 601 { 602 maImgLightingOff[i] = Image( SVX_RES( IMG_LIGHT_OFF + i ) ); 603 maImgLightingOn[i] = Image( SVX_RES( IMG_LIGHT_ON + i ) ); 604 maImgLightingOffh[i] = Image( SVX_RES( IMG_LIGHT_OFF_H + i ) ); 605 maImgLightingOnh[i] = Image( SVX_RES( IMG_LIGHT_ON_H + i ) ); 606 } 607 maImgLightingPreview[i] = Image( SVX_RES( IMG_LIGHT_PREVIEW + i ) ); 608 maImgLightingPreviewh[i] = Image( SVX_RES( IMG_LIGHT_PREVIEW_H + i ) ); 609 } 610 611 SetHelpId( HID_MENU_EXTRUSION_LIGHTING ); 612 SetSelectHdl( LINK( this, ExtrusionLightingWindow, SelectHdl ) ); 613 614 mpLightingSet = createEmptyValueSetControl(); 615 mpLightingSet->SetHelpId( HID_VALUESET_EXTRUSION_LIGHTING ); 616 617 mpLightingSet->SetSelectHdl( LINK( this, ExtrusionLightingWindow, SelectHdl ) ); 618 mpLightingSet->SetColCount( 3 ); 619 mpLightingSet->EnableFullItemMode( sal_False ); 620 621 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 622 623 for( i = FROM_TOP_LEFT; i <= FROM_BOTTOM_RIGHT; i++ ) 624 { 625 if( i != FROM_FRONT ) 626 { 627 mpLightingSet->InsertItem( i+1, bHighContrast ? maImgLightingOffh[i] : maImgLightingOff[i] ); 628 } 629 else 630 { 631 mpLightingSet->InsertItem( 5, bHighContrast ? maImgLightingPreviewh[FROM_FRONT] : maImgLightingPreview[FROM_FRONT] ); 632 } 633 } 634 mpLightingSet->SetOutputSizePixel( Size( 72, 72 ) ); 635 636 appendEntry( 3, mpLightingSet ); 637 appendSeparator(); 638 appendEntry( 0, String( SVX_RES( STR_BRIGHT ) ), bHighContrast ? maImgBrighth : maImgBright ); 639 appendEntry( 1, String( SVX_RES( STR_NORMAL ) ), bHighContrast ? maImgNormalh : maImgNormal ); 640 appendEntry( 2, String( SVX_RES( STR_DIM ) ), bHighContrast ? maImgDimh : maImgDim ); 641 642 SetOutputSizePixel( getMenuSize() ); 643 644 FreeResource(); 645 646 AddStatusListener( msExtrusionLightingDirection ); 647 AddStatusListener( msExtrusionLightingIntensity ); 648 } 649 650 // ----------------------------------------------------------------------- 651 652 void ExtrusionLightingWindow::implSetIntensity( int nLevel, bool bEnabled ) 653 { 654 mnLevel = nLevel; 655 mbLevelEnabled = bEnabled; 656 int i = 0; 657 for( i = 0; i < 3; i++ ) 658 { 659 checkEntry( i, (i == nLevel) && bEnabled ); 660 enableEntry( i, bEnabled ); 661 } 662 } 663 664 // ----------------------------------------------------------------------- 665 666 void ExtrusionLightingWindow::implSetDirection( int nDirection, bool bEnabled ) 667 { 668 mnDirection = nDirection; 669 mbDirectionEnabled = bEnabled; 670 671 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 672 673 if( !bEnabled ) 674 nDirection = FROM_FRONT; 675 676 sal_uInt16 nItemId; 677 for( nItemId = FROM_TOP_LEFT; nItemId <= FROM_BOTTOM_RIGHT; nItemId++ ) 678 { 679 if( nItemId == FROM_FRONT ) 680 { 681 mpLightingSet->SetItemImage( nItemId + 1, bHighContrast ? maImgLightingPreviewh[ nDirection ] : maImgLightingPreview[ nDirection ] ); 682 } 683 else 684 { 685 if( bHighContrast ) 686 { 687 mpLightingSet->SetItemImage( nItemId + 1, (sal_uInt16)nDirection == nItemId ? maImgLightingOnh[nItemId] : maImgLightingOffh[nItemId] ); 688 } 689 else 690 { 691 mpLightingSet->SetItemImage( nItemId + 1, (sal_uInt16)nDirection == nItemId ? maImgLightingOn[nItemId] : maImgLightingOff[nItemId] ); 692 } 693 } 694 } 695 696 enableEntry( 3, bEnabled ); 697 } 698 699 // ----------------------------------------------------------------------- 700 701 void SAL_CALL ExtrusionLightingWindow::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException ) 702 { 703 if( Event.FeatureURL.Main.equals( msExtrusionLightingIntensity ) ) 704 { 705 if( !Event.IsEnabled ) 706 { 707 implSetIntensity( 0, false ); 708 } 709 else 710 { 711 sal_Int32 nValue = 0; 712 if( Event.State >>= nValue ) 713 implSetIntensity( nValue, true ); 714 } 715 } 716 else if( Event.FeatureURL.Main.equals( msExtrusionLightingDirection ) ) 717 { 718 if( !Event.IsEnabled ) 719 { 720 implSetDirection( 0, false ); 721 } 722 else 723 { 724 sal_Int32 nValue = 0; 725 if( Event.State >>= nValue ) 726 implSetDirection( nValue, true ); 727 } 728 } 729 } 730 731 // ----------------------------------------------------------------------- 732 733 void ExtrusionLightingWindow::DataChanged( const DataChangedEvent& rDCEvt ) 734 { 735 ToolbarMenu::DataChanged( rDCEvt ); 736 737 if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) ) 738 { 739 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 740 741 implSetDirection( mnDirection, mbDirectionEnabled ); 742 setEntryImage( 0, bHighContrast ? maImgBrighth : maImgBright ); 743 setEntryImage( 1, bHighContrast ? maImgNormalh : maImgNormal ); 744 setEntryImage( 2, bHighContrast ? maImgDimh : maImgDim ); 745 } 746 } 747 748 // ----------------------------------------------------------------------- 749 750 IMPL_LINK( ExtrusionLightingWindow, SelectHdl, void *, pControl ) 751 { 752 if ( IsInPopupMode() ) 753 EndPopupMode(); 754 755 if( pControl == this ) 756 { 757 int nLevel = getSelectedEntryId(); 758 if( nLevel >= 0 ) 759 { 760 if( nLevel != 3 ) 761 { 762 Sequence< PropertyValue > aArgs( 1 ); 763 aArgs[0].Name = msExtrusionLightingIntensity.copy(5); 764 aArgs[0].Value <<= (sal_Int32)nLevel; 765 766 mrController.dispatchCommand( msExtrusionLightingIntensity, aArgs ); 767 768 implSetIntensity( nLevel, true ); 769 } 770 } 771 } 772 else 773 { 774 sal_Int32 nDirection = mpLightingSet->GetSelectItemId(); 775 776 if( (nDirection > 0) && (nDirection < 10) ) 777 { 778 nDirection--; 779 780 Sequence< PropertyValue > aArgs( 1 ); 781 aArgs[0].Name = msExtrusionLightingDirection.copy(5); 782 aArgs[0].Value <<= (sal_Int32)nDirection; 783 784 mrController.dispatchCommand( msExtrusionLightingDirection, aArgs ); 785 786 implSetDirection( nDirection, true ); 787 } 788 789 } 790 791 return 0; 792 } 793 794 // ======================================================================== 795 796 ExtrusionLightingControl::ExtrusionLightingControl( const Reference< lang::XMultiServiceFactory >& rServiceManager ) 797 : svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionDirectionFloater" ) ) ) 798 { 799 } 800 801 // ----------------------------------------------------------------------- 802 803 ::Window* ExtrusionLightingControl::createPopupWindow( ::Window* pParent ) 804 { 805 return new ExtrusionLightingWindow( *this, m_xFrame, pParent ); 806 } 807 808 // ----------------------------------------------------------------------- 809 // XServiceInfo 810 // ----------------------------------------------------------------------- 811 812 OUString SAL_CALL ExtrusionLightingControl_getImplementationName() 813 { 814 return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.ExtrusionLightingController" )); 815 } 816 817 // -------------------------------------------------------------------- 818 819 Sequence< OUString > SAL_CALL ExtrusionLightingControl_getSupportedServiceNames() throw( RuntimeException ) 820 { 821 Sequence< OUString > aSNS( 1 ); 822 aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" )); 823 return aSNS; 824 } 825 826 // -------------------------------------------------------------------- 827 828 Reference< XInterface > SAL_CALL SAL_CALL ExtrusionLightingControl_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException ) 829 { 830 return *new ExtrusionLightingControl( rSMgr ); 831 } 832 833 // -------------------------------------------------------------------- 834 835 OUString SAL_CALL ExtrusionLightingControl::getImplementationName( ) throw (RuntimeException) 836 { 837 return ExtrusionLightingControl_getImplementationName(); 838 } 839 840 // -------------------------------------------------------------------- 841 842 Sequence< OUString > SAL_CALL ExtrusionLightingControl::getSupportedServiceNames( ) throw (RuntimeException) 843 { 844 return ExtrusionLightingControl_getSupportedServiceNames(); 845 } 846 847 // #################################################################### 848 849 ExtrusionSurfaceWindow::ExtrusionSurfaceWindow( svt::ToolboxController& rController, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, Window* pParentWindow ) 850 : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_SURFACE )) 851 , mrController( rController ) 852 , maImgSurface1( SVX_RES( IMG_WIRE_FRAME ) ) 853 , maImgSurface2( SVX_RES( IMG_MATTE ) ) 854 , maImgSurface3( SVX_RES( IMG_PLASTIC ) ) 855 , maImgSurface4( SVX_RES( IMG_METAL ) ) 856 , maImgSurface1h( SVX_RES( IMG_WIRE_FRAME_H ) ) 857 , maImgSurface2h( SVX_RES( IMG_MATTE_H ) ) 858 , maImgSurface3h( SVX_RES( IMG_PLASTIC_H ) ) 859 , maImgSurface4h( SVX_RES( IMG_METAL_H ) ) 860 , msExtrusionSurface( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionSurface" )) 861 { 862 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 863 864 SetHelpId( HID_MENU_EXTRUSION_SURFACE ); 865 SetSelectHdl( LINK( this, ExtrusionSurfaceWindow, SelectHdl ) ); 866 867 appendEntry( 0, String( SVX_RES( STR_WIREFRAME ) ), bHighContrast ? maImgSurface1h : maImgSurface1 ); 868 appendEntry( 1, String( SVX_RES( STR_MATTE ) ), bHighContrast ? maImgSurface2h : maImgSurface2 ); 869 appendEntry( 2, String( SVX_RES( STR_PLASTIC ) ), bHighContrast ? maImgSurface3h : maImgSurface3 ); 870 appendEntry( 3, String( SVX_RES( STR_METAL ) ), bHighContrast ? maImgSurface4h : maImgSurface4 ); 871 872 SetOutputSizePixel( getMenuSize() ); 873 874 FreeResource(); 875 876 AddStatusListener( msExtrusionSurface ); 877 } 878 879 // ----------------------------------------------------------------------- 880 881 void ExtrusionSurfaceWindow::implSetSurface( int nSurface, bool bEnabled ) 882 { 883 // if( mpMenu ) 884 { 885 int i; 886 for( i = 0; i < 4; i++ ) 887 { 888 checkEntry( i, (i == nSurface) && bEnabled ); 889 enableEntry( i, bEnabled ); 890 } 891 } 892 } 893 894 // ----------------------------------------------------------------------- 895 896 void SAL_CALL ExtrusionSurfaceWindow::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw ( ::com::sun::star::uno::RuntimeException ) 897 { 898 if( Event.FeatureURL.Main.equals( msExtrusionSurface ) ) 899 { 900 if( !Event.IsEnabled ) 901 { 902 implSetSurface( 0, false ); 903 } 904 else 905 { 906 sal_Int32 nValue = 0; 907 if( Event.State >>= nValue ) 908 implSetSurface( nValue, true ); 909 } 910 } 911 } 912 913 // ----------------------------------------------------------------------- 914 915 IMPL_LINK( ExtrusionSurfaceWindow, SelectHdl, void *, EMPTYARG ) 916 { 917 if ( IsInPopupMode() ) 918 EndPopupMode(); 919 920 sal_Int32 nSurface = getSelectedEntryId(); 921 if( nSurface >= 0 ) 922 { 923 Sequence< PropertyValue > aArgs( 1 ); 924 aArgs[0].Name = msExtrusionSurface.copy(5); 925 aArgs[0].Value <<= (sal_Int32)nSurface; 926 927 mrController.dispatchCommand( msExtrusionSurface, aArgs ); 928 929 implSetSurface( nSurface, true ); 930 } 931 932 return 0; 933 } 934 935 // ======================================================================== 936 937 ExtrusionSurfaceControl::ExtrusionSurfaceControl( const Reference< lang::XMultiServiceFactory >& rServiceManager ) 938 : svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ExtrusionSurfaceFloater" ) ) ) 939 { 940 } 941 942 // ----------------------------------------------------------------------- 943 944 ::Window* ExtrusionSurfaceControl::createPopupWindow( ::Window* pParent ) 945 { 946 return new ExtrusionSurfaceWindow( *this, m_xFrame, pParent ); 947 } 948 949 // ----------------------------------------------------------------------- 950 // XServiceInfo 951 // ----------------------------------------------------------------------- 952 953 OUString SAL_CALL ExtrusionSurfaceControl_getImplementationName() 954 { 955 return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svx.ExtrusionSurfaceController" )); 956 } 957 958 // -------------------------------------------------------------------- 959 960 Sequence< OUString > SAL_CALL ExtrusionSurfaceControl_getSupportedServiceNames() throw( RuntimeException ) 961 { 962 Sequence< OUString > aSNS( 1 ); 963 aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" )); 964 return aSNS; 965 } 966 967 // -------------------------------------------------------------------- 968 969 Reference< XInterface > SAL_CALL SAL_CALL ExtrusionSurfaceControl_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException ) 970 { 971 return *new ExtrusionSurfaceControl( rSMgr ); 972 } 973 974 // -------------------------------------------------------------------- 975 976 OUString SAL_CALL ExtrusionSurfaceControl::getImplementationName( ) throw (RuntimeException) 977 { 978 return ExtrusionSurfaceControl_getImplementationName(); 979 } 980 981 // -------------------------------------------------------------------- 982 983 Sequence< OUString > SAL_CALL ExtrusionSurfaceControl::getSupportedServiceNames( ) throw (RuntimeException) 984 { 985 return ExtrusionSurfaceControl_getSupportedServiceNames(); 986 } 987 988 //======================================================================== 989 990 SFX_IMPL_TOOLBOX_CONTROL( ExtrusionColorControl, SvxColorItem ); 991 992 ExtrusionColorControl::ExtrusionColorControl( 993 sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) 994 : SfxToolBoxControl ( nSlotId, nId, rTbx ) 995 { 996 rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) ); 997 mpBtnUpdater = new ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox(), TBX_UPDATER_MODE_CHAR_COLOR_NEW ); 998 } 999 1000 // ----------------------------------------------------------------------- 1001 1002 ExtrusionColorControl::~ExtrusionColorControl() 1003 { 1004 delete mpBtnUpdater; 1005 } 1006 1007 // ----------------------------------------------------------------------- 1008 1009 SfxPopupWindowType ExtrusionColorControl::GetPopupWindowType() const 1010 { 1011 return SFX_POPUPWINDOW_ONCLICK; 1012 } 1013 1014 // ----------------------------------------------------------------------- 1015 1016 SfxPopupWindow* ExtrusionColorControl::CreatePopupWindow() 1017 { 1018 SvxColorWindow_Impl* pColorWin = new SvxColorWindow_Impl( 1019 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Extrusion3DColor" )), 1020 SID_EXTRUSION_3D_COLOR, 1021 m_xFrame, 1022 SVX_RESSTR( RID_SVXSTR_EXTRUSION_COLOR ), 1023 &GetToolBox() ); 1024 pColorWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF ); 1025 pColorWin->StartSelection(); 1026 SetPopupWindow( pColorWin ); 1027 return pColorWin; 1028 } 1029 1030 // ----------------------------------------------------------------------- 1031 1032 void ExtrusionColorControl::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) 1033 { 1034 sal_uInt16 nId = GetId(); 1035 ToolBox& rTbx = GetToolBox(); 1036 1037 if( nSID == SID_EXTRUSION_3D_COLOR ) 1038 { 1039 const SvxColorItem* pItem = 0; 1040 1041 if( SFX_ITEM_DONTCARE != eState ) 1042 pItem = PTR_CAST( SvxColorItem, pState ); 1043 1044 if ( pItem ) 1045 mpBtnUpdater->Update( pItem->GetValue()); 1046 } 1047 1048 rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState ); 1049 rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? STATE_DONTKNOW : STATE_NOCHECK ); 1050 } 1051 1052 } 1053