LCOV - code coverage report
Current view: top level - libreoffice/svx/source/tbxctrls - grafctrl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 11 445 2.5 %
Date: 2012-12-27 Functions: 12 75 16.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             : #include <string>
      21             : 
      22             : #include <vcl/toolbox.hxx>
      23             : #include <vcl/field.hxx>
      24             : #include <vcl/fixed.hxx>
      25             : #include <vcl/msgbox.hxx>
      26             : #include <svl/intitem.hxx>
      27             : #include <svl/eitem.hxx>
      28             : #include <svl/whiter.hxx>
      29             : #include <sfx2/app.hxx>
      30             : #include <sfx2/dispatch.hxx>
      31             : #include <sfx2/objsh.hxx>
      32             : #include <sfx2/viewsh.hxx>
      33             : #include <sfx2/request.hxx>
      34             : #include <sfx2/basedlgs.hxx>
      35             : #include <tools/urlobj.hxx>
      36             : #include <comphelper/processfactory.hxx>
      37             : 
      38             : #include <svx/svxids.hrc>
      39             : #include "grafctrl.hrc"
      40             : #include <svx/dialogs.hrc>
      41             : #include <editeng/brshitem.hxx>
      42             : #include <editeng/sizeitem.hxx>
      43             : #include <svx/sdgcpitm.hxx>
      44             : 
      45             : #include <svx/itemwin.hxx>
      46             : #include <svx/dialmgr.hxx>
      47             : #include <svx/svdview.hxx>
      48             : #include <svx/svdmodel.hxx>
      49             : #include <svx/svdograf.hxx>
      50             : #include <svx/svdundo.hxx>
      51             : #include <svx/svdtrans.hxx>
      52             : #include "svx/grafctrl.hxx"
      53             : #include "svx/tbxcolor.hxx"
      54             : 
      55             : // namespaces
      56             : using ::rtl::OUString;
      57             : using namespace ::com::sun::star::uno;
      58             : using namespace ::com::sun::star::frame;
      59             : using namespace ::com::sun::star::util;
      60             : using namespace ::com::sun::star::beans;
      61             : using namespace ::com::sun::star::lang;
      62             : 
      63             : #include <svx/svxdlg.hxx>
      64             : // -----------
      65             : // - Defines -
      66             : // -----------
      67             : 
      68             : #define SYMBOL_TO_FIELD_OFFSET      4
      69             : #define ITEMVALUE(ItemSet,Id,Cast)  ((const Cast&)(ItemSet).Get(Id)).GetValue()
      70             : #define TOOLBOX_NAME                ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "colorbar" ) )
      71             : 
      72             : // ----------------
      73             : // - TbxImageItem -
      74             : // ----------------
      75             : 
      76          72 : TYPEINIT1_AUTOFACTORY( TbxImageItem, SfxUInt16Item );
      77             : 
      78             : //---------------------------------------------------------
      79             : 
      80           0 : TbxImageItem::TbxImageItem( sal_uInt16 _nWhich, sal_uInt16 nImage ) :
      81           0 :     SfxUInt16Item( _nWhich, nImage )
      82             : {
      83           0 : }
      84             : 
      85             : //---------------------------------------------------------
      86             : 
      87           0 : SfxPoolItem* TbxImageItem::Clone( SfxItemPool* ) const
      88             : {
      89           0 :     return new TbxImageItem( *this );
      90             : }
      91             : 
      92             : //---------------------------------------------------------
      93             : 
      94           0 : int TbxImageItem::operator==( const SfxPoolItem& rItem ) const
      95             : {
      96           0 :     return( ( (TbxImageItem&) rItem ).GetValue() == GetValue() );
      97             : }
      98             : 
      99             : // -----------------------
     100             : // - ImplGrafMetricField -
     101             : // -----------------------
     102             : 
     103             : class ImplGrafMetricField : public MetricField
     104             : {
     105             :     using Window::Update;
     106             : 
     107             : private:
     108             :     Timer               maTimer;
     109             :     OUString            maCommand;
     110             :     Reference< XFrame > mxFrame;
     111             : 
     112             :                     DECL_LINK(ImplModifyHdl, void *);
     113             : 
     114             : protected:
     115             : 
     116             :     virtual void    Modify();
     117             : 
     118             : public:
     119             : 
     120             :                     ImplGrafMetricField( Window* pParent, const rtl::OUString& aCmd, const Reference< XFrame >& rFrame );
     121             :                     ~ImplGrafMetricField();
     122             : 
     123             :     void            Update( const SfxPoolItem* pItem );
     124             :     const OUString& GetCommand() const { return maCommand; }
     125             : };
     126             : 
     127             : // -----------------------------------------------------------------------------
     128             : 
     129           0 : ImplGrafMetricField::ImplGrafMetricField( Window* pParent, const rtl::OUString& rCmd, const Reference< XFrame >& rFrame ) :
     130             :     MetricField( pParent, WB_BORDER | WB_SPIN | WB_REPEAT | WB_3DLOOK ),
     131             :     maCommand( rCmd ),
     132           0 :     mxFrame( rFrame )
     133             : {
     134           0 :     Size aSize( GetTextWidth( rtl::OUString("-100 %") ), GetTextHeight() );
     135             : 
     136           0 :     aSize.Width() += 20, aSize.Height() += 6;
     137           0 :     SetSizePixel( aSize );
     138             : 
     139           0 :     if ( maCommand == ".uno:GrafGamma" )
     140             :     {
     141           0 :         SetDecimalDigits( 2 );
     142             : 
     143           0 :         SetMin( 10 );
     144           0 :         SetFirst( 10 );
     145           0 :         SetMax( 1000 );
     146           0 :         SetLast( 1000 );
     147           0 :         SetSpinSize( 10 );
     148             :     }
     149             :     else
     150             :     {
     151           0 :         const long nMinVal = ( maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafTransparence" ) )) ? 0 : -100;
     152             : 
     153           0 :         SetUnit( FUNIT_CUSTOM );
     154           0 :         SetCustomUnitText( rtl::OUString(" %") );
     155           0 :         SetDecimalDigits( 0 );
     156             : 
     157           0 :         SetMin( nMinVal );
     158           0 :         SetFirst( nMinVal );
     159           0 :         SetMax( 100 );
     160           0 :         SetLast( 100 );
     161           0 :         SetSpinSize( 1 );
     162             :     }
     163             : 
     164           0 :     maTimer.SetTimeout( 100 );
     165           0 :     maTimer.SetTimeoutHdl( LINK( this, ImplGrafMetricField, ImplModifyHdl ) );
     166           0 : }
     167             : 
     168             : // -----------------------------------------------------------------------------
     169             : 
     170           0 : ImplGrafMetricField::~ImplGrafMetricField()
     171             : {
     172           0 : }
     173             : 
     174             : // -----------------------------------------------------------------------------
     175             : 
     176           0 : void ImplGrafMetricField::Modify()
     177             : {
     178           0 :     maTimer.Start();
     179           0 : }
     180             : 
     181             : // -----------------------------------------------------------------------------
     182             : 
     183           0 : IMPL_LINK_NOARG(ImplGrafMetricField, ImplModifyHdl)
     184             : {
     185           0 :     const sal_Int64 nVal = GetValue();
     186             : 
     187             :     // Convert value to an any to be usable with dispatch API
     188           0 :     Any a;
     189           0 :     if ( maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafRed" ) ) ||
     190           0 :          maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafGreen" ) ) ||
     191           0 :          maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafBlue" ) ) ||
     192           0 :          maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafLuminance" ) ) ||
     193           0 :          maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafContrast" ) ))
     194           0 :         a = makeAny( sal_Int16( nVal ));
     195           0 :     else if ( maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafGamma" ) ) ||
     196           0 :               maCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ".uno:GrafTransparence" ) ))
     197           0 :         a = makeAny( sal_Int32( nVal ));
     198             : 
     199           0 :     if ( a.hasValue() )
     200             :     {
     201           0 :         INetURLObject aObj( maCommand );
     202             : 
     203           0 :         Sequence< PropertyValue > aArgs( 1 );
     204           0 :         aArgs[0].Name = aObj.GetURLPath();
     205           0 :         aArgs[0].Value = a;
     206             : 
     207             :         SfxToolBoxControl::Dispatch(
     208           0 :             Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     209             :             maCommand,
     210           0 :             aArgs );
     211             :     }
     212           0 :     return 0L;
     213             : }
     214             : 
     215             : // -----------------------------------------------------------------------------
     216             : 
     217           0 : void ImplGrafMetricField::Update( const SfxPoolItem* pItem )
     218             : {
     219           0 :     if( pItem )
     220             :     {
     221             :         long nValue;
     222             : 
     223           0 :         if ( maCommand == ".uno:GrafTransparence" )
     224           0 :             nValue = ( (SfxUInt16Item*) pItem )->GetValue();
     225           0 :         else if ( maCommand == ".uno:GrafGamma" )
     226           0 :             nValue = ( (SfxUInt32Item*) pItem )->GetValue();
     227             :         else
     228           0 :             nValue = ( (SfxInt16Item*) pItem )->GetValue();
     229             : 
     230           0 :         SetValue( nValue );
     231             :     }
     232             :     else
     233           0 :         SetText( String() );
     234           0 : }
     235             : 
     236             : // --------------------
     237             : // - ImplGrafControl  -
     238             : // --------------------
     239             : 
     240             : struct CommandToRID
     241             : {
     242             :     const char* pCommand;
     243             :     sal_uInt16      nResId;
     244             : };
     245             : 
     246           0 : static sal_uInt16 ImplGetRID( const OUString& aCommand )
     247             : {
     248             :     static const CommandToRID aImplCommandToResMap[] =
     249             :     {
     250             :         { ".uno:GrafRed",           RID_SVXIMG_GRAF_RED             },
     251             :         { ".uno:GrafGreen",         RID_SVXIMG_GRAF_GREEN           },
     252             :         { ".uno:GrafBlue",          RID_SVXIMG_GRAF_BLUE            },
     253             :         { ".uno:GrafLuminance",     RID_SVXIMG_GRAF_LUMINANCE       },
     254             :         { ".uno:GrafContrast",      RID_SVXIMG_GRAF_CONTRAST        },
     255             :         { ".uno:GrafGamma",         RID_SVXIMG_GRAF_GAMMA           },
     256             :         { ".uno:GrafTransparence",  RID_SVXIMG_GRAF_TRANSPARENCE    },
     257             :         { 0, 0 }
     258             :     };
     259             : 
     260           0 :     sal_uInt16 nRID = 0;
     261             : 
     262           0 :     sal_Int32 i( 0 );
     263           0 :     while ( aImplCommandToResMap[ i ].pCommand )
     264             :     {
     265           0 :         if ( aCommand.equalsAscii( aImplCommandToResMap[ i ].pCommand ))
     266             :         {
     267           0 :             nRID = aImplCommandToResMap[ i ].nResId;
     268           0 :             break;
     269             :         }
     270           0 :         ++i;
     271             :     }
     272             : 
     273           0 :     return nRID;
     274             : }
     275             : 
     276             : // -----------------------------------------------------------------------------
     277             : 
     278             : class ImplGrafControl : public Control
     279             : {
     280             :     using Window::Update;
     281             : private:
     282             :     FixedImage              maImage;
     283             :     ImplGrafMetricField     maField;
     284             : 
     285             : protected:
     286             : 
     287             :     virtual void            GetFocus();
     288             : 
     289             : public:
     290             : 
     291             :                             ImplGrafControl( Window* pParent, const rtl::OUString& rCmd, const Reference< XFrame >& rFrame );
     292             :                             ~ImplGrafControl();
     293             : 
     294           0 :     void                    Update( const SfxPoolItem* pItem ) { maField.Update( pItem ); }
     295           0 :     void                    SetText( const String& rStr ) { maField.SetText( rStr ); }
     296             : };
     297             : 
     298             : // -----------------------------------------------------------------------------
     299             : 
     300           0 : ImplGrafControl::ImplGrafControl(
     301             :     Window* pParent,
     302             :     const rtl::OUString& rCmd,
     303             :     const Reference< XFrame >& rFrame
     304             : )   : Control( pParent, WB_TABSTOP )
     305             :     , maImage( this )
     306           0 :     , maField( this, rCmd, rFrame )
     307             : {
     308           0 :     ResId   aResId( ImplGetRID( rCmd ), DIALOG_MGR() ) ;
     309           0 :     Image   aImage( aResId );
     310             : 
     311           0 :     Size    aImgSize( aImage.GetSizePixel() );
     312           0 :     Size    aFldSize( maField.GetSizePixel() );
     313             :     long    nFldY, nImgY;
     314             : 
     315           0 :     maImage.SetImage( aImage );
     316           0 :     maImage.SetSizePixel( aImgSize );
     317             :     // we want to see the backbround of the toolbox, not of the FixedImage or Control
     318           0 :     maImage.SetBackground( Wallpaper( COL_TRANSPARENT ) );
     319           0 :     SetBackground( Wallpaper( COL_TRANSPARENT ) );
     320             : 
     321           0 :     if( aImgSize.Height() > aFldSize.Height() )
     322           0 :         nImgY = 0, nFldY = ( aImgSize.Height() - aFldSize.Height() ) >> 1;
     323             :     else
     324           0 :         nFldY = 0, nImgY = ( aFldSize.Height() - aImgSize.Height() ) >> 1;
     325             : 
     326           0 :     long nOffset = SYMBOL_TO_FIELD_OFFSET / 2;
     327           0 :     maImage.SetPosPixel( Point( nOffset, nImgY ) );
     328           0 :     maField.SetPosPixel( Point( aImgSize.Width() + SYMBOL_TO_FIELD_OFFSET, nFldY ) );
     329           0 :     SetSizePixel( Size( aImgSize.Width() + aFldSize.Width() + SYMBOL_TO_FIELD_OFFSET + nOffset,
     330           0 :                   Max( aImgSize.Height(), aFldSize.Height() ) ) );
     331             : 
     332           0 :     SetBackground( Wallpaper() ); // transparent background
     333             : 
     334           0 :     maImage.Show();
     335             : 
     336           0 :     maField.SetHelpId( rtl::OUStringToOString( rCmd, RTL_TEXTENCODING_UTF8 ) );
     337           0 :     maField.Show();
     338           0 : }
     339             : 
     340             : // -----------------------------------------------------------------------------
     341             : 
     342           0 : ImplGrafControl::~ImplGrafControl()
     343             : {
     344           0 : }
     345             : 
     346             : // -----------------------------------------------------------------------------
     347             : 
     348           0 : void ImplGrafControl::GetFocus()
     349             : {
     350           0 :     maField.GrabFocus();
     351           0 : }
     352             : 
     353             : // -----------------------
     354             : // - ImplGrafModeControl -
     355             : // -----------------------
     356             : 
     357             : class ImplGrafModeControl : public ListBox
     358             : {
     359             :     using Window::Update;
     360             : private:
     361             :     sal_uInt16              mnCurPos;
     362             :     Reference< XFrame > mxFrame;
     363             : 
     364             :     virtual void    Select();
     365             :     virtual long    PreNotify( NotifyEvent& rNEvt );
     366             :     virtual long    Notify( NotifyEvent& rNEvt );
     367             :     void            ImplReleaseFocus();
     368             : 
     369             : public:
     370             : 
     371             :                     ImplGrafModeControl( Window* pParent, const Reference< XFrame >& rFrame );
     372             :                     ~ImplGrafModeControl();
     373             : 
     374             :     void            Update( const SfxPoolItem* pItem );
     375             : };
     376             : 
     377             : // -----------------------------------------------------------------------------
     378             : 
     379           0 : ImplGrafModeControl::ImplGrafModeControl( Window* pParent, const Reference< XFrame >& rFrame ) :
     380             :     ListBox( pParent, WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ),
     381             :     mnCurPos( 0 ),
     382           0 :     mxFrame( rFrame )
     383             : {
     384           0 :     SetSizePixel( Size( 100, 260 ) );
     385             : 
     386           0 :     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_STANDARD  ) );
     387           0 :     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_GREYS     ) );
     388           0 :     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_MONO      ) );
     389           0 :     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_WATERMARK ) );
     390             : 
     391           0 :     Show();
     392           0 : }
     393             : 
     394             : // -----------------------------------------------------------------------
     395             : 
     396           0 : ImplGrafModeControl::~ImplGrafModeControl()
     397             : {
     398           0 : }
     399             : 
     400             : // -----------------------------------------------------------------------
     401             : 
     402           0 : void ImplGrafModeControl::Select()
     403             : {
     404           0 :     if ( !IsTravelSelect() )
     405             :     {
     406           0 :         Sequence< PropertyValue > aArgs( 1 );
     407           0 :         aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "GrafMode" ));
     408           0 :         aArgs[0].Value = makeAny( sal_Int16( GetSelectEntryPos() ));
     409             : 
     410             :         /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
     411             :             This instance may be deleted in the meantime (i.e. when a dialog is opened
     412             :             while in Dispatch()), accessing members will crash in this case. */
     413           0 :         ImplReleaseFocus();
     414             : 
     415             :         SfxToolBoxControl::Dispatch(
     416           0 :             Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     417             :             OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GrafMode" )),
     418           0 :             aArgs );
     419             :     }
     420           0 : }
     421             : 
     422             : // -----------------------------------------------------------------------
     423             : 
     424           0 : long ImplGrafModeControl::PreNotify( NotifyEvent& rNEvt )
     425             : {
     426           0 :     sal_uInt16 nType = rNEvt.GetType();
     427             : 
     428           0 :     if( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
     429           0 :         mnCurPos = GetSelectEntryPos();
     430             : 
     431           0 :     return ListBox::PreNotify( rNEvt );
     432             : }
     433             : 
     434             : // -----------------------------------------------------------------------
     435             : 
     436           0 : long ImplGrafModeControl::Notify( NotifyEvent& rNEvt )
     437             : {
     438           0 :     long nHandled = ListBox::Notify( rNEvt );
     439             : 
     440           0 :     if( rNEvt.GetType() == EVENT_KEYINPUT )
     441             :     {
     442           0 :         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
     443             : 
     444           0 :         switch( pKEvt->GetKeyCode().GetCode() )
     445             :         {
     446             :             case KEY_RETURN:
     447             :             {
     448           0 :                 Select();
     449           0 :                 nHandled = 1;
     450             :             }
     451           0 :             break;
     452             : 
     453             :             case KEY_ESCAPE:
     454             :             {
     455           0 :                 SelectEntryPos( mnCurPos );
     456           0 :                 ImplReleaseFocus();
     457           0 :                 nHandled = 1;
     458             :             }
     459           0 :             break;
     460             :         }
     461             :     }
     462             : 
     463           0 :     return nHandled;
     464             : }
     465             : 
     466             : // -----------------------------------------------------------------------
     467             : 
     468           0 : void ImplGrafModeControl::ImplReleaseFocus()
     469             : {
     470           0 :     if( SfxViewShell::Current() )
     471             :     {
     472           0 :         Window* pShellWnd = SfxViewShell::Current()->GetWindow();
     473             : 
     474           0 :         if( pShellWnd )
     475           0 :             pShellWnd->GrabFocus();
     476             :     }
     477           0 : }
     478             : 
     479             : // -----------------------------------------------------------------------
     480             : 
     481           0 : void ImplGrafModeControl::Update( const SfxPoolItem* pItem )
     482             : {
     483           0 :     if( pItem )
     484           0 :         SelectEntryPos( ((SfxUInt16Item*)pItem)->GetValue() );
     485             :     else
     486           0 :         SetNoSelection();
     487           0 : }
     488             : 
     489             : // -------------------------------
     490             : // - SvxGrafFilterToolBoxControl -
     491             : // -------------------------------
     492             : 
     493          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafFilterToolBoxControl, TbxImageItem );
     494             : 
     495             : // -----------------------------------------------------------------------------
     496             : 
     497           0 : SvxGrafFilterToolBoxControl::SvxGrafFilterToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     498           0 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     499             : {
     500           0 :     rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
     501           0 :     rTbx.Invalidate();
     502           0 : }
     503             : 
     504             : // -----------------------------------------------------------------------------
     505             : 
     506           0 : SvxGrafFilterToolBoxControl::~SvxGrafFilterToolBoxControl()
     507             : {
     508           0 : }
     509             : 
     510             : // -----------------------------------------------------------------------------
     511             : 
     512           0 : void SvxGrafFilterToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* )
     513             : {
     514           0 :     GetToolBox().EnableItem( GetId(), ( eState != SFX_ITEM_DISABLED ) );
     515           0 : }
     516             : 
     517             : // -----------------------------------------------------------------------------
     518             : 
     519           0 : SfxPopupWindowType SvxGrafFilterToolBoxControl::GetPopupWindowType() const
     520             : {
     521           0 :     return SFX_POPUPWINDOW_ONCLICK;
     522             : }
     523             : 
     524             : // -----------------------------------------------------------------------------
     525             : 
     526           0 : SfxPopupWindow* SvxGrafFilterToolBoxControl::CreatePopupWindow()
     527             : {
     528             :     rtl::OUString aSubTbxResName(
     529           0 :         RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/graffilterbar" ) );
     530           0 :     createAndPositionSubToolBar( aSubTbxResName );
     531             : 
     532           0 :     return NULL;
     533             : }
     534             : 
     535             : // -------------------------
     536             : // - SvxGrafToolBoxControl -
     537             : // -------------------------
     538             : 
     539             : // -----------------------------------------------------------------------------
     540             : 
     541           0 : SvxGrafToolBoxControl::SvxGrafToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx) :
     542           0 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     543             : {
     544           0 :     rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
     545           0 :     rTbx.Invalidate();
     546           0 : }
     547             : 
     548             : // -----------------------------------------------------------------------------
     549             : 
     550           0 : SvxGrafToolBoxControl::~SvxGrafToolBoxControl()
     551             : {
     552           0 : }
     553             : 
     554             : // -----------------------------------------------------------------------------
     555             : 
     556           0 : void SvxGrafToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
     557             : 
     558             : {
     559           0 :     ImplGrafControl* pCtrl = (ImplGrafControl*) GetToolBox().GetItemWindow( GetId() );
     560             :     DBG_ASSERT( pCtrl, "Control not found" );
     561             : 
     562           0 :     if( eState == SFX_ITEM_DISABLED )
     563             :     {
     564           0 :         pCtrl->Disable();
     565           0 :         pCtrl->SetText( String() );
     566             :     }
     567             :     else
     568             :     {
     569           0 :         pCtrl->Enable();
     570             : 
     571           0 :         if( eState == SFX_ITEM_AVAILABLE )
     572           0 :             pCtrl->Update( pState );
     573             :         else
     574           0 :             pCtrl->Update( NULL );
     575             :     }
     576           0 : }
     577             : 
     578             : // -----------------------------------------------------------------------------
     579             : 
     580           0 : Window* SvxGrafToolBoxControl::CreateItemWindow( Window *pParent )
     581             : {
     582           0 :     return( new ImplGrafControl( pParent, m_aCommandURL, m_xFrame ) );
     583             : }
     584             : 
     585             : // ----------------------------
     586             : // - SvxGrafRedToolBoxControl -
     587             : // ----------------------------
     588             : 
     589          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafRedToolBoxControl, SfxInt16Item );
     590             : 
     591             : // -----------------------------------------------------------------------------
     592             : 
     593           0 : SvxGrafRedToolBoxControl::SvxGrafRedToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     594           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     595             : {
     596           0 : }
     597             : 
     598             : // ------------------------------
     599             : // - SvxGrafGreenToolBoxControl -
     600             : // ------------------------------
     601             : 
     602          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafGreenToolBoxControl, SfxInt16Item );
     603             : 
     604             : // -----------------------------------------------------------------------------
     605             : 
     606           0 : SvxGrafGreenToolBoxControl::SvxGrafGreenToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     607           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     608             : {
     609           0 : }
     610             : 
     611             : // -----------------------------
     612             : // - SvxGrafBlueToolBoxControl -
     613             : // -----------------------------
     614             : 
     615          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafBlueToolBoxControl, SfxInt16Item );
     616             : 
     617             : // -----------------------------------------------------------------------------
     618             : 
     619           0 : SvxGrafBlueToolBoxControl::SvxGrafBlueToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     620           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     621             : {
     622           0 : }
     623             : 
     624             : // ----------------------------------
     625             : // - SvxGrafLuminanceToolBoxControl -
     626             : // ----------------------------------
     627             : 
     628          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafLuminanceToolBoxControl, SfxInt16Item );
     629             : 
     630             : // -----------------------------------------------------------------------------
     631             : 
     632           0 : SvxGrafLuminanceToolBoxControl::SvxGrafLuminanceToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     633           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     634             : {
     635           0 : }
     636             : 
     637             : // ----------------------------------
     638             : // - SvxGrafContrastToolBoxControl -
     639             : // ----------------------------------
     640             : 
     641          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafContrastToolBoxControl, SfxInt16Item );
     642             : 
     643             : // -----------------------------------------------------------------------------
     644             : 
     645           0 : SvxGrafContrastToolBoxControl::SvxGrafContrastToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     646           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     647             : {
     648           0 : }
     649             : 
     650             : // ------------------------------
     651             : // - SvxGrafGammaToolBoxControl -
     652             : // ------------------------------
     653             : 
     654          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafGammaToolBoxControl, SfxUInt32Item );
     655             : 
     656             : // -----------------------------------------------------------------------------
     657             : 
     658           0 : SvxGrafGammaToolBoxControl::SvxGrafGammaToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     659           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     660             : {
     661           0 : }
     662             : 
     663             : // -------------------------------------
     664             : // - SvxGrafTransparenceToolBoxControl -
     665             : // -------------------------------------
     666             : 
     667          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafTransparenceToolBoxControl, SfxUInt16Item );
     668             : 
     669             : // -----------------------------------------------------------------------------
     670             : 
     671           0 : SvxGrafTransparenceToolBoxControl::SvxGrafTransparenceToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     672           0 :     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
     673             : {
     674           0 : }
     675             : 
     676             : // -----------------------------
     677             : // - SvxGrafModeToolBoxControl -
     678             : // -----------------------------
     679             : 
     680          18 : SFX_IMPL_TOOLBOX_CONTROL( SvxGrafModeToolBoxControl, SfxUInt16Item );
     681             : 
     682             : // -----------------------------------------------------------------------------
     683             : 
     684           0 : SvxGrafModeToolBoxControl::SvxGrafModeToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     685           0 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     686             : {
     687           0 : }
     688             : 
     689             : // -----------------------------------------------------------------------------
     690             : 
     691           0 : SvxGrafModeToolBoxControl::~SvxGrafModeToolBoxControl()
     692             : {
     693           0 : }
     694             : 
     695             : // -----------------------------------------------------------------------------
     696             : 
     697           0 : void SvxGrafModeToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
     698             : 
     699             : {
     700           0 :     ImplGrafModeControl* pCtrl = (ImplGrafModeControl*) GetToolBox().GetItemWindow( GetId() );
     701             :     DBG_ASSERT( pCtrl, "Control not found" );
     702             : 
     703           0 :     if( eState == SFX_ITEM_DISABLED )
     704             :     {
     705           0 :         pCtrl->Disable();
     706           0 :         pCtrl->SetText( String() );
     707             :     }
     708             :     else
     709             :     {
     710           0 :         pCtrl->Enable();
     711             : 
     712           0 :         if( eState == SFX_ITEM_AVAILABLE )
     713           0 :             pCtrl->Update( pState );
     714             :         else
     715           0 :             pCtrl->Update( NULL );
     716             :     }
     717           0 : }
     718             : 
     719             : // -----------------------------------------------------------------------------
     720             : 
     721           0 : Window* SvxGrafModeToolBoxControl::CreateItemWindow( Window *pParent )
     722             : {
     723           0 :     return( new ImplGrafModeControl( pParent, m_xFrame ) );
     724             : }
     725             : 
     726             : // ---------------------
     727             : // - SvxGrafAttrHelper -
     728             : // ---------------------
     729             : 
     730           0 : void SvxGrafAttrHelper::ExecuteGrafAttr( SfxRequest& rReq, SdrView& rView )
     731             : {
     732           0 :     SfxItemPool&    rPool = rView.GetModel()->GetItemPool();
     733           0 :     SfxItemSet      aSet( rPool, SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST );
     734           0 :     String          aUndoStr;
     735           0 :     const bool      bUndo = rView.IsUndoEnabled();
     736             : 
     737           0 :     if( bUndo )
     738             :     {
     739           0 :         aUndoStr = rView.GetDescriptionOfMarkedObjects();
     740           0 :         aUndoStr.Append( sal_Unicode(' ') );
     741             :     }
     742             : 
     743           0 :     const SfxItemSet*   pArgs = rReq.GetArgs();
     744             :     const SfxPoolItem*  pItem;
     745           0 :     sal_uInt16              nSlot = rReq.GetSlot();
     746             : 
     747           0 :     if( !pArgs || SFX_ITEM_SET != pArgs->GetItemState( nSlot, sal_False, &pItem ))
     748           0 :         pItem = 0;
     749             : 
     750           0 :     switch( nSlot )
     751             :     {
     752             :         case SID_ATTR_GRAF_RED:
     753             :         {
     754           0 :             if( pItem )
     755             :             {
     756           0 :                 aSet.Put( SdrGrafRedItem( ((SfxInt16Item*)pItem)->GetValue() ));
     757           0 :                 if( bUndo )
     758           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFRED ) ) );
     759             :             }
     760             :         }
     761           0 :         break;
     762             : 
     763             :         case SID_ATTR_GRAF_GREEN:
     764             :         {
     765           0 :             if( pItem )
     766             :             {
     767           0 :                 aSet.Put( SdrGrafGreenItem( ((SfxInt16Item*)pItem)->GetValue() ));
     768           0 :                 if( bUndo )
     769           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFGREEN ) ) );
     770             :             }
     771             :         }
     772           0 :         break;
     773             : 
     774             :         case SID_ATTR_GRAF_BLUE:
     775             :         {
     776           0 :             if( pItem )
     777             :             {
     778           0 :                 aSet.Put( SdrGrafBlueItem( ((SfxInt16Item*)pItem)->GetValue() ));
     779           0 :                 if( bUndo )
     780           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFBLUE ) ) );
     781             :             }
     782             :         }
     783           0 :         break;
     784             : 
     785             :         case SID_ATTR_GRAF_LUMINANCE:
     786             :         {
     787           0 :             if( pItem )
     788             :             {
     789           0 :                 aSet.Put( SdrGrafLuminanceItem( ((SfxInt16Item*)pItem)->GetValue() ));
     790           0 :                 if( bUndo )
     791           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFLUMINANCE ) ) );
     792             :             }
     793             :         }
     794           0 :         break;
     795             : 
     796             :         case SID_ATTR_GRAF_CONTRAST:
     797             :         {
     798           0 :             if( pItem )
     799             :             {
     800           0 :                 aSet.Put( SdrGrafContrastItem( ((SfxInt16Item*)pItem)->GetValue() ));
     801           0 :                 if( bUndo )
     802           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFCONTRAST ) ) );
     803             :             }
     804             :         }
     805           0 :         break;
     806             : 
     807             :         case SID_ATTR_GRAF_GAMMA:
     808             :         {
     809           0 :             if( pItem )
     810             :             {
     811           0 :                 aSet.Put( SdrGrafGamma100Item( ((SfxUInt32Item*)pItem)->GetValue() ));
     812           0 :                 if( bUndo )
     813           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFGAMMA ) ) );
     814             :             }
     815             :         }
     816           0 :         break;
     817             : 
     818             :         case SID_ATTR_GRAF_TRANSPARENCE:
     819             :         {
     820           0 :             if( pItem )
     821             :             {
     822           0 :                 aSet.Put( SdrGrafTransparenceItem( ((SfxUInt16Item*)pItem)->GetValue() ));
     823           0 :                 if( bUndo )
     824           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFTRANSPARENCY ) ) );
     825             :             }
     826             :         }
     827           0 :         break;
     828             : 
     829             :         case SID_ATTR_GRAF_MODE:
     830             :         {
     831           0 :             if( pItem )
     832             :             {
     833           0 :                 aSet.Put( SdrGrafModeItem( (GraphicDrawMode) ((SfxUInt16Item*)pItem)->GetValue() ));
     834           0 :                 if( bUndo )
     835           0 :                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFMODE ) ) );
     836             :             }
     837             :         }
     838           0 :         break;
     839             : 
     840             :         case( SID_ATTR_GRAF_CROP ):
     841             :         {
     842           0 :             const SdrMarkList& rMarkList = rView.GetMarkedObjectList();
     843             : 
     844           0 :             if( 0 < rMarkList.GetMarkCount() )
     845             :             {
     846           0 :                 SdrGrafObj* pObj = (SdrGrafObj*) rMarkList.GetMark( 0 )->GetMarkedSdrObj();
     847             : 
     848           0 :                 if( pObj && pObj->ISA( SdrGrafObj ) &&
     849           0 :                     ( pObj->GetGraphicType() != GRAPHIC_NONE ) &&
     850           0 :                     ( pObj->GetGraphicType() != GRAPHIC_DEFAULT ) )
     851             :                 {
     852           0 :                     SfxItemSet          aGrfAttr( rPool, SDRATTR_GRAFCROP, SDRATTR_GRAFCROP, 0 );
     853           0 :                     const SfxMapUnit    eOldMetric = rPool.GetMetric( 0 );
     854           0 :                     const MapMode       aMap100( MAP_100TH_MM );
     855           0 :                     const MapMode       aMapTwip( MAP_TWIP );
     856             : 
     857           0 :                     aGrfAttr.Put(pObj->GetMergedItemSet());
     858           0 :                     rPool.SetDefaultMetric( SFX_MAPUNIT_TWIP );
     859             : 
     860             :                     SfxItemSet  aCropDlgAttr( rPool,
     861             :                                             SDRATTR_GRAFCROP, SDRATTR_GRAFCROP,
     862             :                                             SID_ATTR_GRAF_GRAPHIC, SID_ATTR_GRAF_GRAPHIC,
     863             :                                             SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
     864             :                                             SID_ATTR_GRAF_FRMSIZE, SID_ATTR_GRAF_FRMSIZE,
     865           0 :                                             SID_ATTR_GRAF_CROP, SID_ATTR_GRAF_CROP, 0 );
     866             : 
     867           0 :                     aCropDlgAttr.Put( SvxBrushItem( pObj->GetGraphic(), GPOS_MM, SID_ATTR_GRAF_GRAPHIC ) );
     868             :                     aCropDlgAttr.Put( SvxSizeItem( SID_ATTR_PAGE_SIZE,
     869             :                                                 Size( OutputDevice::LogicToLogic(
     870           0 :                                                         Size( 200000, 200000 ), aMap100, aMapTwip ) ) ) );
     871             :                     aCropDlgAttr.Put( SvxSizeItem( SID_ATTR_GRAF_FRMSIZE, OutputDevice::LogicToLogic(
     872           0 :                                                 pObj->GetLogicRect().GetSize(), aMap100, aMapTwip ) ) );
     873             : 
     874           0 :                     const SdrGrafCropItem&  rCrop = (const SdrGrafCropItem&) aGrfAttr.Get( SDRATTR_GRAFCROP );
     875             :                     Size                    aLTSize( OutputDevice::LogicToLogic(
     876           0 :                                                     Size( rCrop.GetLeft(), rCrop.GetTop() ), aMap100, aMapTwip ) );
     877             :                     Size                    aRBSize( OutputDevice::LogicToLogic(
     878           0 :                                                     Size( rCrop.GetRight(), rCrop.GetBottom() ), aMap100, aMapTwip ) );
     879             : 
     880           0 :                     aCropDlgAttr.Put( SdrGrafCropItem( aLTSize.Width(), aLTSize.Height(),
     881           0 :                                                     aRBSize.Width(), aRBSize.Height() ) );
     882             : 
     883           0 :                     SfxSingleTabDialog  aCropDialog( SfxViewShell::Current() ? SfxViewShell::Current()->GetWindow() : NULL,
     884           0 :                                                     aCropDlgAttr, 950 );
     885           0 :                     const String        aCropStr = SVX_RESSTR( RID_SVXSTR_GRAFCROP );
     886             : 
     887           0 :                     SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
     888             :                     DBG_ASSERT(pFact, "Dialogdiet error!");
     889           0 :                     ::CreateTabPage fnCreatePage = pFact->GetTabPageCreatorFunc( RID_SVXPAGE_GRFCROP );
     890             :                     DBG_ASSERT(fnCreatePage, "Dialogdiet error!");
     891           0 :                     SfxTabPage* pTabPage = (*fnCreatePage)( &aCropDialog, aCropDlgAttr );
     892             : 
     893           0 :                     pTabPage->SetText( aCropStr );
     894           0 :                     aCropDialog.SetTabPage( pTabPage );
     895             : 
     896           0 :                     if( aCropDialog.Execute() == RET_OK )
     897             :                     {
     898           0 :                         const SfxItemSet* pOutAttr = aCropDialog.GetOutputItemSet();
     899             : 
     900           0 :                         if( pOutAttr )
     901             :                         {
     902           0 :                             aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFCROP ) ) );
     903             : 
     904             :                             // set crop attributes
     905           0 :                             if( SFX_ITEM_SET <= pOutAttr->GetItemState( SDRATTR_GRAFCROP ) )
     906             :                             {
     907           0 :                                 const SdrGrafCropItem& rNewCrop = (const SdrGrafCropItem&) pOutAttr->Get( SDRATTR_GRAFCROP );
     908             : 
     909           0 :                                 aLTSize = OutputDevice::LogicToLogic( Size( rNewCrop.GetLeft(), rNewCrop.GetTop() ), aMapTwip, aMap100 );
     910           0 :                                 aRBSize = OutputDevice::LogicToLogic( Size( rNewCrop.GetRight(), rNewCrop.GetBottom() ), aMapTwip, aMap100 );
     911           0 :                                 aSet.Put( SdrGrafCropItem( aLTSize.Width(), aLTSize.Height(), aRBSize.Width(), aRBSize.Height() ) );
     912             :                             }
     913             : 
     914             :                             // set new logic rect
     915           0 :                             if( SFX_ITEM_SET <= pOutAttr->GetItemState( SID_ATTR_GRAF_FRMSIZE ) )
     916             :                             {
     917           0 :                                 Point       aNewOrigin( pObj->GetLogicRect().TopLeft() );
     918           0 :                                 const Size& rGrfSize = ( (const SvxSizeItem&) pOutAttr->Get( SID_ATTR_GRAF_FRMSIZE ) ).GetSize();
     919           0 :                                 Size        aNewGrfSize( OutputDevice::LogicToLogic( rGrfSize, aMapTwip, aMap100 ) );
     920           0 :                                 Size        aOldGrfSize( pObj->GetLogicRect().GetSize() );
     921             : 
     922           0 :                                 Rectangle aNewRect( aNewOrigin, aNewGrfSize );
     923           0 :                                 Point aOffset( (aNewGrfSize.Width() - aOldGrfSize.Width()) >> 1,
     924           0 :                                             (aNewGrfSize.Height() - aOldGrfSize.Height()) >> 1 );
     925             : 
     926             :                                 // #106181# rotate snap rect before setting it
     927           0 :                                 const GeoStat& aGeo = pObj->GetGeoStat();
     928             : 
     929           0 :                                 if (aGeo.nDrehWink!=0 || aGeo.nShearWink!=0)
     930             :                                 {
     931           0 :                                     Polygon aPol(aNewRect);
     932             : 
     933             :                                     // also transform origin offset
     934           0 :                                     if (aGeo.nShearWink!=0)
     935             :                                     {
     936             :                                         ShearPoly(aPol,
     937             :                                                 aNewRect.TopLeft(),
     938           0 :                                                 aGeo.nTan);
     939           0 :                                         ShearPoint(aOffset, Point(0,0), aGeo.nTan);
     940             :                                     }
     941           0 :                                     if (aGeo.nDrehWink!=0)
     942             :                                     {
     943             :                                         RotatePoly(aPol,
     944             :                                                 aNewRect.TopLeft(),
     945           0 :                                                 aGeo.nSin,aGeo.nCos);
     946           0 :                                         RotatePoint(aOffset, Point(0,0), aGeo.nSin,aGeo.nCos);
     947             :                                     }
     948             : 
     949             :                                     // apply offset
     950           0 :                                     aPol.Move( -aOffset.X(), -aOffset.Y() );
     951           0 :                                     aNewRect=aPol.GetBoundRect();
     952             :                                 }
     953             :                                 else
     954             :                                 {
     955           0 :                                     aNewRect.Move( -aOffset.X(), -aOffset.Y() );
     956             :                                 }
     957             : 
     958           0 :                                 if( !aSet.Count() )
     959           0 :                                     rView.SetMarkedObjRect( aNewRect );
     960             :                                 else
     961             :                                 {
     962           0 :                                     if( bUndo )
     963             :                                     {
     964           0 :                                         rView.BegUndo( aUndoStr );
     965           0 :                                         rView.AddUndo( rView.GetModel()->GetSdrUndoFactory().CreateUndoGeoObject( *pObj ) );
     966             :                                     }
     967           0 :                                     pObj->SetSnapRect( aNewRect );
     968           0 :                                     rView.SetAttributes( aSet );
     969             : 
     970           0 :                                     if( bUndo )
     971           0 :                                         rView.EndUndo();
     972           0 :                                     aSet.ClearItem();
     973             :                                 }
     974             :                             }
     975             :                         }
     976             :                     }
     977             : 
     978           0 :                     rPool.SetDefaultMetric( eOldMetric );
     979             :                 }
     980             :             }
     981             :         }
     982           0 :         break;
     983             : 
     984             :         case SID_COLOR_SETTINGS:
     985             :         {
     986           0 :             svx::ToolboxAccess aToolboxAccess( TOOLBOX_NAME );
     987           0 :             aToolboxAccess.toggleToolbox();
     988           0 :             rReq.Done();
     989           0 :             break;
     990             :         }
     991             : 
     992             :         default:
     993           0 :             break;
     994             :     }
     995             : 
     996           0 :     if( aSet.Count() )
     997             :     {
     998           0 :         if( bUndo )
     999           0 :             rView.BegUndo( aUndoStr );
    1000             : 
    1001           0 :         rView.SetAttributes( aSet );
    1002             : 
    1003           0 :         if( bUndo )
    1004           0 :             rView.EndUndo();
    1005           0 :     }
    1006           0 : }
    1007             : 
    1008             : // -----------------------------------------------------------------------------
    1009             : 
    1010           0 : void SvxGrafAttrHelper::GetGrafAttrState( SfxItemSet& rSet, SdrView& rView )
    1011             : {
    1012           0 :     SfxItemPool&    rPool = rView.GetModel()->GetItemPool();
    1013           0 :     SfxItemSet      aAttrSet( rPool );
    1014           0 :     SfxWhichIter    aIter( rSet );
    1015           0 :     sal_uInt16      nWhich = aIter.FirstWhich();
    1016           0 :     const           SdrMarkList& rMarkList = rView.GetMarkedObjectList();
    1017           0 :     bool            bEnableColors = true;
    1018           0 :     bool            bEnableTransparency = true;
    1019           0 :     bool            bEnableCrop = ( 1 == rMarkList.GetMarkCount() );
    1020             : 
    1021           0 :     for( int i = 0, nCount = rMarkList.GetMarkCount(); i < nCount; ++i )
    1022             :     {
    1023           0 :         SdrGrafObj* pGrafObj = dynamic_cast< SdrGrafObj* >( rMarkList.GetMark( i )->GetMarkedSdrObj() );
    1024             : 
    1025           0 :         if( !pGrafObj ||
    1026           0 :             ( pGrafObj->GetGraphicType() == GRAPHIC_NONE ) ||
    1027           0 :             ( pGrafObj->GetGraphicType() == GRAPHIC_DEFAULT  ))
    1028             :         {
    1029           0 :             bEnableColors = bEnableTransparency = bEnableCrop = false;
    1030           0 :             break;
    1031             :         }
    1032           0 :         else if( bEnableTransparency && ( pGrafObj->HasGDIMetaFile() || pGrafObj->IsAnimated() ) )
    1033             :         {
    1034           0 :             bEnableTransparency = false;
    1035             :         }
    1036             :     }
    1037             : 
    1038           0 :     rView.GetAttributes( aAttrSet );
    1039             : 
    1040           0 :     while( nWhich )
    1041             :     {
    1042           0 :         sal_uInt16 nSlotId = SfxItemPool::IsWhich( nWhich ) ? rPool.GetSlotId( nWhich ) : nWhich;
    1043             : 
    1044           0 :         switch( nSlotId )
    1045             :         {
    1046             :             case( SID_ATTR_GRAF_MODE ):
    1047             :             {
    1048           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFMODE ) )
    1049             :                 {
    1050           0 :                     if( bEnableColors )
    1051             :                     {
    1052             :                         rSet.Put( SfxUInt16Item( nSlotId,
    1053           0 :                             sal::static_int_cast< sal_uInt16 >( ITEMVALUE( aAttrSet, SDRATTR_GRAFMODE, SdrGrafModeItem ) ) ) );
    1054             :                     }
    1055             :                     else
    1056             :                     {
    1057           0 :                         rSet.DisableItem( SID_ATTR_GRAF_MODE );
    1058             :                     }
    1059             :                 }
    1060             :             }
    1061           0 :             break;
    1062             : 
    1063             :             case( SID_ATTR_GRAF_RED ):
    1064             :             {
    1065           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFRED ) )
    1066             :                 {
    1067           0 :                     if( bEnableColors )
    1068             :                     {
    1069             :                         rSet.Put( SfxInt16Item( nSlotId,
    1070           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFRED, SdrGrafRedItem ) ) );
    1071             :                     }
    1072             :                     else
    1073             :                     {
    1074           0 :                         rSet.DisableItem( SID_ATTR_GRAF_RED );
    1075             :                     }
    1076             :                 }
    1077             :             }
    1078           0 :             break;
    1079             : 
    1080             :             case( SID_ATTR_GRAF_GREEN ):
    1081             :             {
    1082           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFGREEN ) )
    1083             :                 {
    1084           0 :                     if( bEnableColors )
    1085             :                     {
    1086             :                         rSet.Put( SfxInt16Item( nSlotId,
    1087           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFGREEN, SdrGrafGreenItem ) ) );
    1088             :                     }
    1089             :                     else
    1090             :                     {
    1091           0 :                         rSet.DisableItem( SID_ATTR_GRAF_GREEN );
    1092             :                     }
    1093             :                 }
    1094             :             }
    1095           0 :             break;
    1096             : 
    1097             :             case( SID_ATTR_GRAF_BLUE ):
    1098             :             {
    1099           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFBLUE ) )
    1100             :                 {
    1101           0 :                     if( bEnableColors )
    1102             :                     {
    1103             :                         rSet.Put( SfxInt16Item( nSlotId,
    1104           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFBLUE, SdrGrafBlueItem ) ) );
    1105             :                     }
    1106             :                     else
    1107             :                     {
    1108           0 :                         rSet.DisableItem( SID_ATTR_GRAF_BLUE );
    1109             :                     }
    1110             :                 }
    1111             :             }
    1112           0 :             break;
    1113             : 
    1114             :             case( SID_ATTR_GRAF_LUMINANCE ):
    1115             :             {
    1116           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFLUMINANCE ) )
    1117             :                 {
    1118           0 :                     if( bEnableColors )
    1119             :                     {
    1120             :                         rSet.Put( SfxInt16Item( nSlotId,
    1121           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFLUMINANCE, SdrGrafLuminanceItem ) ) );
    1122             :                     }
    1123             :                     else
    1124             :                     {
    1125           0 :                         rSet.DisableItem( SID_ATTR_GRAF_LUMINANCE );
    1126             :                     }
    1127             :                 }
    1128             :             }
    1129           0 :             break;
    1130             : 
    1131             :             case( SID_ATTR_GRAF_CONTRAST ):
    1132             :             {
    1133           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFCONTRAST ) )
    1134             :                 {
    1135           0 :                     if( bEnableColors )
    1136             :                     {
    1137             :                         rSet.Put( SfxInt16Item( nSlotId,
    1138           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFCONTRAST, SdrGrafContrastItem ) ) );
    1139             :                     }
    1140             :                     else
    1141             :                     {
    1142           0 :                         rSet.DisableItem( SID_ATTR_GRAF_CONTRAST );
    1143             :                     }
    1144             :                 }
    1145             :             }
    1146           0 :             break;
    1147             : 
    1148             :             case( SID_ATTR_GRAF_GAMMA ):
    1149             :             {
    1150           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFGAMMA ) )
    1151             :                 {
    1152           0 :                     if( bEnableColors )
    1153             :                     {
    1154             :                         rSet.Put( SfxUInt32Item( nSlotId,
    1155           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFGAMMA, SdrGrafGamma100Item ) ) );
    1156             :                     }
    1157             :                     else
    1158             :                     {
    1159           0 :                         rSet.DisableItem( SID_ATTR_GRAF_GAMMA );
    1160             :                     }
    1161             :                 }
    1162             :             }
    1163           0 :             break;
    1164             : 
    1165             :             case( SID_ATTR_GRAF_TRANSPARENCE ):
    1166             :             {
    1167           0 :                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFTRANSPARENCE ) )
    1168             :                 {
    1169           0 :                     if( bEnableTransparency )
    1170             :                     {
    1171             :                         rSet.Put( SfxUInt16Item( nSlotId,
    1172           0 :                             ITEMVALUE( aAttrSet, SDRATTR_GRAFTRANSPARENCE, SdrGrafTransparenceItem ) ) );
    1173             :                     }
    1174             :                     else
    1175             :                     {
    1176           0 :                         rSet.DisableItem( SID_ATTR_GRAF_TRANSPARENCE );
    1177             :                     }
    1178             :                 }
    1179             :             }
    1180           0 :             break;
    1181             : 
    1182             :             case( SID_ATTR_GRAF_CROP ):
    1183             :             {
    1184           0 :                 if( !bEnableCrop )
    1185           0 :                     rSet.DisableItem( nSlotId );
    1186             :             }
    1187           0 :             break;
    1188             : 
    1189             :             case SID_COLOR_SETTINGS :
    1190             :             {
    1191           0 :                 svx::ToolboxAccess aToolboxAccess( TOOLBOX_NAME );
    1192           0 :                 rSet.Put( SfxBoolItem( nWhich, aToolboxAccess.isToolboxVisible() ) );
    1193           0 :                 break;
    1194             :             }
    1195             : 
    1196             :             default:
    1197           0 :             break;
    1198             :         }
    1199             : 
    1200           0 :         nWhich = aIter.NextWhich();
    1201           0 :     }
    1202          57 : }
    1203             : 
    1204             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10