LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/cui/source/tabpages - tpshadow.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 283 0.0 %
Date: 2013-07-09 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <tools/shl.hxx>
      21             : #include <sfx2/app.hxx>
      22             : #include <sfx2/module.hxx>
      23             : #include <svx/dialogs.hrc>
      24             : 
      25             : #include "svx/xattr.hxx"
      26             : #include <svx/xpool.hxx>
      27             : #include <cuires.hrc>
      28             : #include "tabarea.hrc"
      29             : #include <svx/svdattr.hxx>
      30             : #include "svx/drawitem.hxx"
      31             : #include "cuitabarea.hxx"
      32             : #include <dialmgr.hxx>
      33             : #include "svx/dlgutil.hxx"
      34             : #include <cuitabline.hxx>
      35             : #include "paragrph.hrc"
      36             : #include <svx/xlineit0.hxx>
      37             : #include <sfx2/request.hxx>
      38             : 
      39             : static sal_uInt16 pShadowRanges[] =
      40             : {
      41             :     SDRATTR_SHADOWCOLOR,
      42             :     SDRATTR_SHADOWTRANSPARENCE,
      43             :     SID_ATTR_FILL_SHADOW,
      44             :     SID_ATTR_FILL_SHADOW,
      45             :     0
      46             : };
      47             : 
      48           0 : SvxShadowTabPage::SvxShadowTabPage( Window* pParent, const SfxItemSet& rInAttrs ) :
      49             : 
      50           0 :     SvxTabPage          ( pParent, CUI_RES( RID_SVXPAGE_SHADOW ), rInAttrs ),
      51             : 
      52           0 :     aFlProp             ( this, CUI_RES( FL_PROP ) ),
      53           0 :     aTsbShowShadow      ( this, CUI_RES( TSB_SHOW_SHADOW ) ),
      54           0 :     aFtPosition         ( this, CUI_RES( FT_POSITION ) ),
      55           0 :     aCtlPosition        ( this, CUI_RES( CTL_POSITION ) ),
      56           0 :     aFtDistance         ( this, CUI_RES( FT_DISTANCE ) ),
      57           0 :     aMtrDistance        ( this, CUI_RES( MTR_FLD_DISTANCE ) ),
      58           0 :     aFtShadowColor      ( this, CUI_RES( FT_SHADOW_COLOR ) ),
      59           0 :     aLbShadowColor      ( this, CUI_RES( LB_SHADOW_COLOR ) ),
      60           0 :     aFtTransparent      ( this, CUI_RES( FT_TRANSPARENT ) ),
      61           0 :     aMtrTransparent      ( this, CUI_RES( MTR_SHADOW_TRANSPARENT ) ),
      62           0 :     aCtlXRectPreview    ( this, CUI_RES( CTL_COLOR_PREVIEW ) ),
      63             :     rOutAttrs           ( rInAttrs ),
      64             :     eRP                 ( RP_LT ),
      65             :     nPageType           ( 0 ),
      66             :     nDlgType            ( 0 ),
      67             :     pbAreaTP            ( 0 ),
      68             :     bDisable            ( sal_False ),
      69           0 :     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
      70             :     aXFillAttr          ( pXPool ),
      71           0 :     rXFSet              ( aXFillAttr.GetItemSet() )
      72             : {
      73           0 :     FreeResource();
      74             : 
      75             :     // this page needs ExchangeSupport
      76           0 :     SetExchangeSupport();
      77             : 
      78             :     // adjust metric
      79           0 :     FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
      80             : 
      81           0 :     switch ( eFUnit )
      82             :     {
      83             :         case FUNIT_M:
      84             :         case FUNIT_KM:
      85           0 :             eFUnit = FUNIT_MM;
      86           0 :             break;
      87             :         default: ;//prevent warning
      88             :     }
      89           0 :     SetFieldUnit( aMtrDistance, eFUnit );
      90             : 
      91             :     // determine PoolUnit
      92           0 :     SfxItemPool* pPool = rOutAttrs.GetPool();
      93             :     DBG_ASSERT( pPool, "Wo ist der Pool?" );
      94           0 :     ePoolUnit = pPool->GetMetric( SDRATTR_SHADOWXDIST );
      95             : 
      96             :     // setting the output device
      97           0 :     XFillStyle eXFS = XFILL_SOLID;
      98           0 :     if( rOutAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE )
      99             :     {
     100             :         eXFS = (XFillStyle) ( ( ( const XFillStyleItem& ) rOutAttrs.
     101           0 :                                 Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
     102           0 :         switch( eXFS )
     103             :         {
     104             :             //case XFILL_NONE: --> NOTHING
     105             : 
     106             :             case XFILL_SOLID:
     107           0 :                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLCOLOR ) )
     108             :                 {
     109             :                     XFillColorItem aColorItem( ( const XFillColorItem& )
     110           0 :                                         rOutAttrs.Get( XATTR_FILLCOLOR ) );
     111           0 :                     rXFSet.Put( aColorItem );
     112             :                 }
     113           0 :             break;
     114             : 
     115             :             case XFILL_GRADIENT:
     116           0 :                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLGRADIENT ) )
     117             :                 {
     118             :                     XFillGradientItem aGradientItem( ( ( const XFillGradientItem& )
     119           0 :                                             rOutAttrs.Get( XATTR_FILLGRADIENT ) ) );
     120           0 :                     rXFSet.Put( aGradientItem );
     121             :                 }
     122           0 :             break;
     123             : 
     124             :             case XFILL_HATCH:
     125           0 :                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLHATCH ) )
     126             :                 {
     127             :                     XFillHatchItem aHatchItem( ( ( const XFillHatchItem& )
     128           0 :                                     rOutAttrs.Get( XATTR_FILLHATCH ) ) );
     129           0 :                     rXFSet.Put( aHatchItem );
     130             :                 }
     131           0 :             break;
     132             : 
     133             :             case XFILL_BITMAP:
     134             :             {
     135           0 :                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLBITMAP ) )
     136             :                 {
     137             :                     XFillBitmapItem aBitmapItem( ( const XFillBitmapItem& )
     138           0 :                                         rOutAttrs.Get( XATTR_FILLBITMAP ) );
     139           0 :                     rXFSet.Put( aBitmapItem );
     140             :                 }
     141             :             }
     142           0 :             break;
     143           0 :             case XFILL_NONE : break;
     144             :         }
     145             :     }
     146             :     else
     147             :     {
     148           0 :         rXFSet.Put( XFillColorItem( String(), COL_LIGHTRED ) );
     149             :     }
     150             : 
     151           0 :     if(XFILL_NONE == eXFS)
     152             :     {
     153             :         // #i96350#
     154             :         // fallback to solid fillmode when no fill mode is provided to have
     155             :         // a reasonable shadow preview. The used color will be a set one or
     156             :         // the default (currently blue8)
     157           0 :         eXFS = XFILL_SOLID;
     158             :     }
     159             : 
     160           0 :     rXFSet.Put( XFillStyleItem( eXFS ) );
     161           0 :     aCtlXRectPreview.SetRectangleAttributes(aXFillAttr.GetItemSet());
     162             :     //aCtlXRectPreview.SetFillAttr( aXFillAttr );
     163             : 
     164           0 :     aTsbShowShadow.SetClickHdl( LINK( this, SvxShadowTabPage, ClickShadowHdl_Impl ) );
     165           0 :     Link aLink = LINK( this, SvxShadowTabPage, ModifyShadowHdl_Impl );
     166           0 :     aLbShadowColor.SetSelectHdl( aLink );
     167           0 :     aMtrTransparent.SetModifyHdl( aLink );
     168           0 :     aMtrDistance.SetModifyHdl( aLink );
     169             : 
     170           0 :     aCtlXRectPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
     171           0 :     aCtlPosition.SetAccessibleRelationMemberOf( &aFlProp );
     172           0 : }
     173             : 
     174             : // -----------------------------------------------------------------------
     175             : 
     176           0 : void SvxShadowTabPage::Construct()
     177             : {
     178           0 :     aLbShadowColor.Fill( pColorList );
     179             : 
     180           0 :     if( bDisable )
     181             :     {
     182           0 :         aTsbShowShadow.Disable();
     183           0 :         aFtPosition.Disable();
     184           0 :         aCtlPosition.Disable();
     185           0 :         aFtDistance.Disable();
     186           0 :         aMtrDistance.Disable();
     187           0 :         aFtShadowColor.Disable();
     188           0 :         aLbShadowColor.Disable();
     189           0 :         aFtTransparent.Disable();
     190           0 :         aMtrTransparent.Disable();
     191             :     }
     192           0 : }
     193             : 
     194             : // -----------------------------------------------------------------------
     195             : 
     196           0 : void SvxShadowTabPage::ActivatePage( const SfxItemSet& rSet )
     197             : {
     198             :     sal_uInt16 nPos;
     199             :     sal_uInt16 nCount;
     200             : 
     201           0 :     SFX_ITEMSET_ARG (&rSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
     202           0 :     if (pPageTypeItem)
     203           0 :         SetPageType(pPageTypeItem->GetValue());
     204             : 
     205           0 :     if( nDlgType == 0 )
     206             :     {
     207           0 :         if( pColorList.is() )
     208             :         {
     209             :             // ColorList
     210           0 :             if( *pnColorListState & CT_CHANGED ||
     211           0 :                 *pnColorListState & CT_MODIFIED )
     212             :             {
     213           0 :                 if( *pnColorListState & CT_CHANGED )
     214             :                 {
     215           0 :                     SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( GetParentDialog() );
     216           0 :                     if( pArea )
     217             :                     {
     218           0 :                         pColorList = pArea->GetNewColorList();
     219             :                     }
     220             :                     else
     221             :                     {
     222           0 :                         SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( GetParentDialog() );
     223           0 :                         if( pLine )
     224           0 :                             pColorList = pLine->GetNewColorList();
     225             :                     }
     226             :                 }
     227             : 
     228           0 :                 aCtlXRectPreview.SetRectangleAttributes(rSet);
     229             :                 // aLbShadowColor
     230           0 :                 nPos = aLbShadowColor.GetSelectEntryPos();
     231           0 :                 aLbShadowColor.Clear();
     232           0 :                 aLbShadowColor.Fill( pColorList );
     233           0 :                 nCount = aLbShadowColor.GetEntryCount();
     234           0 :                 if( nCount == 0 )
     235             :                     ; // this case should not occur
     236           0 :                 else if( nCount <= nPos )
     237           0 :                     aLbShadowColor.SelectEntryPos( 0 );
     238             :                 else
     239           0 :                     aLbShadowColor.SelectEntryPos( nPos );
     240             : 
     241           0 :                 ModifyShadowHdl_Impl( this );
     242             :             }
     243           0 :             nPageType = PT_SHADOW;
     244             :         }
     245             :     }
     246           0 : }
     247             : 
     248             : // -----------------------------------------------------------------------
     249             : 
     250           0 : int SvxShadowTabPage::DeactivatePage( SfxItemSet* _pSet )
     251             : {
     252           0 :     if( _pSet )
     253           0 :         FillItemSet( *_pSet );
     254             : 
     255           0 :     return( LEAVE_PAGE );
     256             : }
     257             : 
     258             : // -----------------------------------------------------------------------
     259             : 
     260           0 : sal_Bool SvxShadowTabPage::FillItemSet( SfxItemSet& rAttrs )
     261             : {
     262           0 :     const SfxPoolItem*  pOld = NULL;
     263           0 :     sal_Bool                bModified = sal_False;
     264             : 
     265           0 :     if( !bDisable )
     266             :     {
     267           0 :         TriState eState = aTsbShowShadow.GetState();
     268           0 :         if( eState != aTsbShowShadow.GetSavedValue() )
     269             :         {
     270           0 :             SdrShadowItem aItem( sal::static_int_cast< sal_Bool >( eState ) );
     271           0 :             pOld = GetOldItem( rAttrs, SDRATTR_SHADOW );
     272           0 :             if ( !pOld || !( *(const SdrShadowItem*)pOld == aItem ) )
     273             :             {
     274           0 :                 rAttrs.Put( aItem );
     275           0 :                 bModified = sal_True;
     276           0 :             }
     277             :         }
     278             : 
     279             :         // shadow removal
     280             :         // a bit intricate inquiry whether there was something changed,
     281             :         // as the items can't be displayed directly on controls
     282           0 :         sal_Int32 nX = 0L, nY = 0L;
     283           0 :         sal_Int32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
     284             : 
     285           0 :         switch( aCtlPosition.GetActualRP() )
     286             :         {
     287           0 :             case RP_LT: nX = nY = -nXY;      break;
     288           0 :             case RP_MT: nY = -nXY;           break;
     289           0 :             case RP_RT: nX = nXY; nY = -nXY; break;
     290           0 :             case RP_LM: nX = -nXY;           break;
     291           0 :             case RP_RM: nX = nXY;            break;
     292           0 :             case RP_LB: nX = -nXY; nY = nXY; break;
     293           0 :             case RP_MB: nY = nXY;            break;
     294           0 :             case RP_RB: nX = nY = nXY;       break;
     295           0 :             case RP_MM: break;
     296             :         }
     297             : 
     298             :         // If the values of the shadow distances==SFX_ITEM_DONTCARE and the displayed
     299             :         // string in the respective MetricField=="", then the comparison of the old
     300             :         // and the new distance values would return a wrong result because in such a
     301             :         // case the new distance values would matche the default values of the MetricField !!!!
     302           0 :         if ( !aMtrDistance.IsEmptyFieldValue()                                  ||
     303           0 :              rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE ||
     304           0 :              rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE    )
     305             :         {
     306           0 :             sal_Int32 nOldX = 9876543; // impossible value, so DontCare
     307           0 :             sal_Int32 nOldY = 9876543;
     308           0 :             if( rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
     309           0 :                 rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
     310             :             {
     311             :                 nOldX = ( ( const SdrShadowXDistItem& ) rOutAttrs.
     312           0 :                                     Get( SDRATTR_SHADOWXDIST ) ).GetValue();
     313             :                 nOldY = ( ( const SdrShadowYDistItem& ) rOutAttrs.
     314           0 :                                     Get( SDRATTR_SHADOWYDIST ) ).GetValue();
     315             :             }
     316           0 :             SdrShadowXDistItem aXItem( nX );
     317           0 :             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWXDIST );
     318           0 :             if ( nX != nOldX &&
     319           0 :                 ( !pOld || !( *(const SdrShadowXDistItem*)pOld == aXItem ) ) )
     320             :             {
     321           0 :                 rAttrs.Put( aXItem );
     322           0 :                 bModified = sal_True;
     323             :             }
     324           0 :             SdrShadowYDistItem aYItem( nY );
     325           0 :             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWYDIST );
     326           0 :             if ( nY != nOldY &&
     327           0 :                 ( !pOld || !( *(const SdrShadowYDistItem*)pOld == aYItem ) ) )
     328             :             {
     329           0 :                 rAttrs.Put( aYItem );
     330           0 :                 bModified = sal_True;
     331           0 :             }
     332             :         }
     333             : 
     334             :         // ShadowColor
     335           0 :         sal_uInt16 nPos = aLbShadowColor.GetSelectEntryPos();
     336           0 :         if( nPos != LISTBOX_ENTRY_NOTFOUND &&
     337           0 :             nPos != aLbShadowColor.GetSavedValue() )
     338             :         {
     339           0 :             SdrShadowColorItem aItem(aLbShadowColor.GetSelectEntryColor());
     340           0 :             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWCOLOR );
     341           0 :             if ( !pOld || !( *(const SdrShadowColorItem*)pOld == aItem ) )
     342             :             {
     343           0 :                 rAttrs.Put( aItem );
     344           0 :                 bModified = sal_True;
     345           0 :             }
     346             :         }
     347             : 
     348             :         // transparency
     349           0 :         sal_uInt16 nVal = (sal_uInt16)aMtrTransparent.GetValue();
     350           0 :         if( nVal != (sal_uInt16)aMtrTransparent.GetSavedValue().toInt32() )
     351             :         {
     352           0 :             SdrShadowTransparenceItem aItem( nVal );
     353           0 :             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWTRANSPARENCE );
     354           0 :             if ( !pOld || !( *(const SdrShadowTransparenceItem*)pOld == aItem ) )
     355             :             {
     356           0 :                 rAttrs.Put( aItem );
     357           0 :                 bModified = sal_True;
     358           0 :             }
     359             :         }
     360             :     }
     361             : 
     362           0 :     rAttrs.Put (CntUInt16Item(SID_PAGE_TYPE,nPageType));
     363             : 
     364           0 :     return( bModified );
     365             : }
     366             : 
     367             : // -----------------------------------------------------------------------
     368             : 
     369           0 : void SvxShadowTabPage::Reset( const SfxItemSet& rAttrs )
     370             : {
     371           0 :     if( !bDisable )
     372             :     {
     373             :         // all objects can have a shadow
     374             :         // at the moment there are only 8 possible positions where a shadow can be set
     375             : 
     376             :         // has a shadow been set?
     377           0 :         if( rAttrs.GetItemState( SDRATTR_SHADOW ) != SFX_ITEM_DONTCARE )
     378             :         {
     379           0 :             aTsbShowShadow.EnableTriState( sal_False );
     380             : 
     381           0 :             if( ( ( const SdrShadowItem& ) rAttrs.Get( SDRATTR_SHADOW ) ).GetValue() )
     382           0 :                 aTsbShowShadow.SetState( STATE_CHECK );
     383             :             else
     384             :             {
     385           0 :                 aTsbShowShadow.SetState( STATE_NOCHECK );
     386             :             }
     387             :         }
     388             :         else
     389           0 :             aTsbShowShadow.SetState( STATE_DONTKNOW );
     390             : 
     391             :         // distance (only 8 possible positions),
     392             :         // so there is only one item evaluated
     393             : 
     394           0 :         if( rAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
     395           0 :             rAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
     396             :         {
     397           0 :             sal_Int32 nX = ( ( const SdrShadowXDistItem& ) rAttrs.Get( SDRATTR_SHADOWXDIST ) ).GetValue();
     398           0 :             sal_Int32 nY = ( ( const SdrShadowYDistItem& ) rAttrs.Get( SDRATTR_SHADOWYDIST ) ).GetValue();
     399             : 
     400           0 :             if( nX != 0 )
     401           0 :                 SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
     402             :             else
     403           0 :                 SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
     404             : 
     405             :             // setting the shadow control
     406           0 :             if     ( nX <  0L && nY <  0L ) aCtlPosition.SetActualRP( RP_LT );
     407           0 :             else if( nX == 0L && nY <  0L ) aCtlPosition.SetActualRP( RP_MT );
     408           0 :             else if( nX >  0L && nY <  0L ) aCtlPosition.SetActualRP( RP_RT );
     409           0 :             else if( nX <  0L && nY == 0L ) aCtlPosition.SetActualRP( RP_LM );
     410             :             // there's no center point anymore
     411           0 :             else if( nX == 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RB );
     412           0 :             else if( nX >  0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RM );
     413           0 :             else if( nX <  0L && nY >  0L ) aCtlPosition.SetActualRP( RP_LB );
     414           0 :             else if( nX == 0L && nY >  0L ) aCtlPosition.SetActualRP( RP_MB );
     415           0 :             else if( nX >  0L && nY >  0L ) aCtlPosition.SetActualRP( RP_RB );
     416             :         }
     417             :         else
     418             :         {
     419             :             // determine default-distance
     420           0 :             SfxItemPool* pPool = rOutAttrs.GetPool();
     421           0 :             SdrShadowXDistItem* pXDistItem = (SdrShadowXDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWXDIST);
     422           0 :             SdrShadowYDistItem* pYDistItem = (SdrShadowYDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWYDIST);
     423           0 :             if (pXDistItem && pYDistItem)
     424             :             {
     425           0 :                 sal_Int32 nX = pXDistItem->GetValue();
     426           0 :                 sal_Int32 nY = pYDistItem->GetValue();
     427           0 :                 if( nX != 0 )
     428           0 :                     SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
     429             :                 else
     430           0 :                     SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
     431             :             }
     432             : 
     433             :             // Tristate, e. g. multiple objects have been marked of which some have a shadow and some don't.
     434             :             // The text (which shall be displayed) of the MetricFields is set to "" and serves as an
     435             :             // identification in the method FillItemSet for the fact that the distance value was NOT changed !!!!
     436           0 :             aMtrDistance.SetText( String() );
     437           0 :             aCtlPosition.SetActualRP( RP_MM );
     438             :         }
     439             : 
     440           0 :         if( rAttrs.GetItemState( SDRATTR_SHADOWCOLOR ) != SFX_ITEM_DONTCARE )
     441             :         {
     442           0 :             aLbShadowColor.SelectEntry( ( ( const SdrShadowColorItem& ) rAttrs.Get( SDRATTR_SHADOWCOLOR ) ).GetColorValue() );
     443             :         }
     444             :         else
     445           0 :             aLbShadowColor.SetNoSelection();
     446             : 
     447           0 :         if( rAttrs.GetItemState( SDRATTR_SHADOWTRANSPARENCE ) != SFX_ITEM_DONTCARE )
     448             :         {
     449           0 :             sal_uInt16 nTransp = ( ( const SdrShadowTransparenceItem& ) rAttrs.Get( SDRATTR_SHADOWTRANSPARENCE ) ).GetValue();
     450           0 :             aMtrTransparent.SetValue( nTransp );
     451             :         }
     452             :         else
     453           0 :             aMtrTransparent.SetText( String() );
     454             : 
     455             :         //aCtlPosition
     456           0 :         aMtrDistance.SaveValue();
     457           0 :         aLbShadowColor.SaveValue();
     458           0 :         aTsbShowShadow.SaveValue();
     459             : 
     460             :         // #66832# This field was not saved, but used to determine changes.
     461             :         // Why? Seems to be the error.
     462             :         // It IS the error.
     463           0 :         aMtrTransparent.SaveValue();
     464             : 
     465           0 :         ClickShadowHdl_Impl( NULL );
     466           0 :         ModifyShadowHdl_Impl( NULL );
     467             :     }
     468           0 : }
     469             : 
     470             : // -----------------------------------------------------------------------
     471             : 
     472           0 : SfxTabPage* SvxShadowTabPage::Create( Window* pWindow,
     473             :                 const SfxItemSet& rAttrs )
     474             : {
     475           0 :     return( new SvxShadowTabPage( pWindow, rAttrs ) );
     476             : }
     477             : 
     478             : //------------------------------------------------------------------------
     479             : 
     480           0 : sal_uInt16* SvxShadowTabPage::GetRanges()
     481             : {
     482           0 :     return( pShadowRanges );
     483             : }
     484             : 
     485             : //------------------------------------------------------------------------
     486             : 
     487           0 : IMPL_LINK_NOARG(SvxShadowTabPage, ClickShadowHdl_Impl)
     488             : {
     489           0 :     if( aTsbShowShadow.GetState() == STATE_NOCHECK )
     490             :     {
     491           0 :         aFtPosition.Disable();
     492           0 :         aCtlPosition.Disable();
     493           0 :         aFtDistance.Disable();
     494           0 :         aMtrDistance.Disable();
     495           0 :         aFtShadowColor.Disable();
     496           0 :         aLbShadowColor.Disable();
     497           0 :         aFtTransparent.Disable();
     498           0 :         aMtrTransparent.Disable();
     499             :     }
     500             :     else
     501             :     {
     502           0 :         aFtPosition.Enable();
     503           0 :         aCtlPosition.Enable();
     504           0 :         aFtDistance.Enable();
     505           0 :         aMtrDistance.Enable();
     506           0 :         aFtShadowColor.Enable();
     507           0 :         aLbShadowColor.Enable();
     508           0 :         aFtTransparent.Enable();
     509           0 :         aMtrTransparent.Enable();
     510             :     }
     511           0 :     aCtlPosition.Invalidate();
     512             : 
     513           0 :     ModifyShadowHdl_Impl( NULL );
     514             : 
     515           0 :     return( 0L );
     516             : }
     517             : 
     518             : //------------------------------------------------------------------------
     519             : 
     520           0 : IMPL_LINK_NOARG(SvxShadowTabPage, ModifyShadowHdl_Impl)
     521             : {
     522           0 :     if( aTsbShowShadow.GetState() == STATE_CHECK )
     523           0 :         rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
     524             :     else
     525           0 :         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
     526             : 
     527           0 :     sal_uInt16 nPos = aLbShadowColor.GetSelectEntryPos();
     528           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     529             :     {
     530             :         rXFSet.Put( XFillColorItem( String(),
     531           0 :                         aLbShadowColor.GetSelectEntryColor() ) );
     532             :     }
     533           0 :     sal_uInt16 nVal = (sal_uInt16)aMtrTransparent.GetValue();
     534           0 :     XFillTransparenceItem aItem( nVal );
     535           0 :     rXFSet.Put( XFillTransparenceItem( aItem ) );
     536             : 
     537             :     // shadow removal
     538           0 :     sal_Int32 nX = 0L, nY = 0L;
     539           0 :     sal_Int32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
     540           0 :     switch( aCtlPosition.GetActualRP() )
     541             :     {
     542           0 :         case RP_LT: nX = nY = -nXY;      break;
     543           0 :         case RP_MT: nY = -nXY;           break;
     544           0 :         case RP_RT: nX = nXY; nY = -nXY; break;
     545           0 :         case RP_LM: nX = -nXY;           break;
     546           0 :         case RP_RM: nX = nXY;            break;
     547           0 :         case RP_LB: nX = -nXY; nY = nXY; break;
     548           0 :         case RP_MB: nY = nXY;            break;
     549           0 :         case RP_RB: nX = nY = nXY;       break;
     550           0 :         case RP_MM: break;
     551             :     }
     552             : 
     553           0 :     aCtlXRectPreview.SetShadowPosition(Point(nX, nY));
     554             : 
     555           0 :     aCtlXRectPreview.SetShadowAttributes(aXFillAttr.GetItemSet());
     556             :     //aCtlXRectPreview.SetFillAttr( aXFillAttr );
     557           0 :     aCtlXRectPreview.Invalidate();
     558             : 
     559           0 :     return( 0L );
     560             : }
     561             : 
     562             : //------------------------------------------------------------------------
     563             : 
     564           0 : void SvxShadowTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
     565             : {
     566           0 :     eRP = eRcPt;
     567             : 
     568             :     // repaint shadow
     569           0 :     ModifyShadowHdl_Impl( pWindow );
     570           0 : }
     571             : 
     572           0 : void SvxShadowTabPage::PageCreated (SfxAllItemSet aSet)
     573             : {
     574           0 :     SFX_ITEMSET_ARG (&aSet,pColorListItem,SvxColorListItem,SID_COLOR_TABLE,sal_False);
     575           0 :     SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
     576           0 :     SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False);
     577             : 
     578           0 :     if (pColorListItem)
     579           0 :         SetColorList(pColorListItem->GetColorList());
     580           0 :     if (pPageTypeItem)
     581           0 :         SetPageType(pPageTypeItem->GetValue());
     582           0 :     if (pDlgTypeItem)
     583           0 :         SetDlgType(pDlgTypeItem->GetValue());
     584           0 :     Construct();
     585           0 : }
     586             : 
     587             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10