LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - extrusioncontrols.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 416 0.0 %
Date: 2014-04-14 Functions: 0 64 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10