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

Generated by: LCOV version 1.10