2000-09-18 16:07:07 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* $RCSfile: tpshadow.cxx,v $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* $Revision: 1.11 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* last change: $Author: rt $ $Date: 2005-09-08 22:19:05 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
|
* =============================================
|
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
* Lesser General Public License for more details.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-08 21:19:05 +00:00
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
|
* MA 02111-1307 USA
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
2005-01-21 15:54:20 +00:00
|
|
|
|
#ifdef SVX_DLLIMPLEMENTATION
|
|
|
|
|
#undef SVX_DLLIMPLEMENTATION
|
|
|
|
|
#endif
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
// include ---------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
#ifndef _SHL_HXX //autogen
|
|
|
|
|
#include <tools/shl.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXAPP_HXX
|
|
|
|
|
#include <sfx2/app.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXMODULE_HXX
|
|
|
|
|
#include <sfx2/module.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define _SVX_TPSHADOW_CXX
|
|
|
|
|
|
2001-05-15 10:46:06 +00:00
|
|
|
|
#include "xattr.hxx"
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include "xpool.hxx"
|
|
|
|
|
#include "dialogs.hrc"
|
|
|
|
|
#include "tabarea.hrc"
|
|
|
|
|
|
|
|
|
|
#define ITEMID_COLOR_TABLE SID_COLOR_TABLE
|
|
|
|
|
|
|
|
|
|
#include "svdattr.hxx"
|
|
|
|
|
#include "xoutx.hxx"
|
|
|
|
|
|
|
|
|
|
#include "drawitem.hxx"
|
2004-02-03 17:58:44 +00:00
|
|
|
|
#include "cuitabarea.hxx"
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include "dialmgr.hxx"
|
|
|
|
|
#include "dlgutil.hxx"
|
|
|
|
|
|
|
|
|
|
#ifndef _SVX_XLINEIT0_HXX //autogen
|
|
|
|
|
#include "xlineit0.hxx"
|
|
|
|
|
#endif
|
2004-02-03 17:58:44 +00:00
|
|
|
|
#include <sfx2/request.hxx> //add CHINA001
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
#define DLGWIN this->GetParent()->GetParent()
|
|
|
|
|
|
|
|
|
|
// static ----------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
static USHORT pShadowRanges[] =
|
|
|
|
|
{
|
|
|
|
|
SDRATTR_SHADOWCOLOR,
|
|
|
|
|
SDRATTR_SHADOWTRANSPARENCE,
|
|
|
|
|
SID_ATTR_FILL_SHADOW,
|
|
|
|
|
SID_ATTR_FILL_SHADOW,
|
|
|
|
|
0
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* Dialog zum Aendern des Schattens
|
|
|
|
|
|*
|
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
|
|
SvxShadowTabPage::SvxShadowTabPage( Window* pParent, const SfxItemSet& rInAttrs ) :
|
|
|
|
|
|
|
|
|
|
SvxTabPage ( pParent, SVX_RES( RID_SVXPAGE_SHADOW ), rInAttrs ),
|
|
|
|
|
|
|
|
|
|
pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ),
|
|
|
|
|
XOut ( &aCtlXRectPreview ),
|
|
|
|
|
aXFillAttr ( pXPool ),
|
|
|
|
|
rXFSet ( aXFillAttr.GetItemSet() ),
|
|
|
|
|
|
2001-05-15 10:46:06 +00:00
|
|
|
|
aFlProp ( this, ResId( FL_PROP ) ),
|
2000-09-18 16:07:07 +00:00
|
|
|
|
aFtPosition ( this, ResId( FT_POSITION ) ),
|
|
|
|
|
aCtlPosition ( this, ResId( CTL_POSITION ),
|
|
|
|
|
RP_RM, 200, 80, CS_SHADOW ),
|
|
|
|
|
aFtDistance ( this, ResId( FT_DISTANCE ) ),
|
|
|
|
|
aMtrDistance ( this, ResId( MTR_FLD_DISTANCE ) ),
|
|
|
|
|
aFtShadowColor ( this, ResId( FT_SHADOW_COLOR ) ),
|
|
|
|
|
aLbShadowColor ( this, ResId( LB_SHADOW_COLOR ) ),
|
|
|
|
|
aFtTransparent ( this, ResId( FT_TRANSPARENT ) ),
|
|
|
|
|
aMtrTransparent ( this, ResId( MTR_SHADOW_TRANSPARENT ) ),
|
|
|
|
|
aTsbShowShadow ( this, ResId( TSB_SHOW_SHADOW ) ),
|
|
|
|
|
aCtlXRectPreview ( this, ResId( CTL_COLOR_PREVIEW ), &XOut,
|
|
|
|
|
(XOutdevItemPool*) rInAttrs.GetPool() ),
|
|
|
|
|
rOutAttrs ( rInAttrs ),
|
|
|
|
|
bDisable ( FALSE )
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
FreeResource();
|
|
|
|
|
|
|
|
|
|
// diese Page braucht ExchangeSupport
|
|
|
|
|
SetExchangeSupport();
|
|
|
|
|
|
|
|
|
|
// Metrik einstellen
|
2000-10-23 08:32:44 +00:00
|
|
|
|
FieldUnit eFUnit = GetModuleFieldUnit( &rInAttrs );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
switch ( eFUnit )
|
|
|
|
|
{
|
|
|
|
|
case FUNIT_M:
|
|
|
|
|
case FUNIT_KM:
|
|
|
|
|
eFUnit = FUNIT_MM;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
SetFieldUnit( aMtrDistance, eFUnit );
|
|
|
|
|
|
|
|
|
|
// PoolUnit ermitteln
|
|
|
|
|
SfxItemPool* pPool = rOutAttrs.GetPool();
|
|
|
|
|
DBG_ASSERT( pPool, "Wo ist der Pool?" );
|
|
|
|
|
ePoolUnit = pPool->GetMetric( SDRATTR_SHADOWXDIST );
|
|
|
|
|
|
|
|
|
|
// Setzen des Output-Devices
|
|
|
|
|
XFillStyle eXFS = XFILL_SOLID;
|
|
|
|
|
if( rOutAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
eXFS = (XFillStyle) ( ( ( const XFillStyleItem& ) rOutAttrs.
|
|
|
|
|
Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
|
|
|
|
|
switch( eXFS )
|
|
|
|
|
{
|
|
|
|
|
//case XFILL_NONE: --> NICHTS
|
|
|
|
|
|
|
|
|
|
case XFILL_SOLID:
|
|
|
|
|
if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLCOLOR ) )
|
|
|
|
|
{
|
|
|
|
|
XFillColorItem aColorItem( ( const XFillColorItem& )
|
|
|
|
|
rOutAttrs.Get( XATTR_FILLCOLOR ) );
|
|
|
|
|
rXFSet.Put( aColorItem );
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case XFILL_GRADIENT:
|
|
|
|
|
if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLGRADIENT ) )
|
|
|
|
|
{
|
|
|
|
|
XFillGradientItem aGradientItem( ( ( const XFillGradientItem& )
|
|
|
|
|
rOutAttrs.Get( XATTR_FILLGRADIENT ) ) );
|
|
|
|
|
rXFSet.Put( aGradientItem );
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case XFILL_HATCH:
|
|
|
|
|
if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLHATCH ) )
|
|
|
|
|
{
|
|
|
|
|
XFillHatchItem aHatchItem( ( ( const XFillHatchItem& )
|
|
|
|
|
rOutAttrs.Get( XATTR_FILLHATCH ) ) );
|
|
|
|
|
rXFSet.Put( aHatchItem );
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case XFILL_BITMAP:
|
|
|
|
|
{
|
|
|
|
|
if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLBITMAP ) )
|
|
|
|
|
{
|
|
|
|
|
XFillBitmapItem aBitmapItem( ( const XFillBitmapItem& )
|
|
|
|
|
rOutAttrs.Get( XATTR_FILLBITMAP ) );
|
|
|
|
|
rXFSet.Put( aBitmapItem );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
rXFSet.Put( XFillColorItem( String(), COL_LIGHTRED ) );
|
|
|
|
|
}
|
|
|
|
|
rXFSet.Put( XFillStyleItem( eXFS ) );
|
|
|
|
|
aCtlXRectPreview.SetRectAttr( &aXFillAttr );
|
|
|
|
|
//XOut.SetFillAttr( aXFillAttr );
|
|
|
|
|
|
2001-05-15 10:46:06 +00:00
|
|
|
|
// Set line at the OutputDevice
|
2000-09-18 16:07:07 +00:00
|
|
|
|
XLineAttrSetItem aXLineAttr( pXPool );
|
2001-05-16 08:10:33 +00:00
|
|
|
|
aXLineAttr.GetItemSet().Put( XLineStyleItem( XLINE_NONE ) );
|
2000-10-30 09:48:03 +00:00
|
|
|
|
XOut.SetLineAttr( aXLineAttr.GetItemSet() );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
aTsbShowShadow.SetClickHdl( LINK( this, SvxShadowTabPage, ClickShadowHdl_Impl ) );
|
|
|
|
|
Link aLink = LINK( this, SvxShadowTabPage, ModifyShadowHdl_Impl );
|
|
|
|
|
aLbShadowColor.SetSelectHdl( aLink );
|
|
|
|
|
aMtrTransparent.SetModifyHdl( aLink );
|
|
|
|
|
aMtrDistance.SetModifyHdl( aLink );
|
|
|
|
|
|
|
|
|
|
pColorTab = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
void SvxShadowTabPage::Construct()
|
|
|
|
|
{
|
|
|
|
|
// Farbtabelle fuellen
|
|
|
|
|
aLbShadowColor.Fill( pColorTab );
|
|
|
|
|
|
|
|
|
|
if( bDisable )
|
|
|
|
|
{
|
|
|
|
|
aTsbShowShadow.Disable();
|
|
|
|
|
aFtPosition.Disable();
|
|
|
|
|
aCtlPosition.Disable();
|
|
|
|
|
aFtDistance.Disable();
|
|
|
|
|
aMtrDistance.Disable();
|
|
|
|
|
aFtShadowColor.Disable();
|
|
|
|
|
aLbShadowColor.Disable();
|
|
|
|
|
aFtTransparent.Disable();
|
|
|
|
|
aMtrTransparent.Disable();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
void SvxShadowTabPage::ActivatePage( const SfxItemSet& rSet )
|
|
|
|
|
{
|
|
|
|
|
int nPos;
|
|
|
|
|
int nCount;
|
2004-02-03 17:58:44 +00:00
|
|
|
|
//add CHINA001 Begin
|
|
|
|
|
SFX_ITEMSET_ARG (&rSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
|
|
|
|
|
if (pPageTypeItem)
|
|
|
|
|
SetPageType(pPageTypeItem->GetValue());
|
|
|
|
|
//add CHINA001 end
|
|
|
|
|
if( nDlgType == 0 ) //CHINA001 // Flaechen-Dialogif( *pDlgType == 0 ) // Flaechen-Dialog
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
if( pColorTab )
|
|
|
|
|
{
|
|
|
|
|
// ColorTable
|
|
|
|
|
if( *pnColorTableState & CT_CHANGED ||
|
|
|
|
|
*pnColorTableState & CT_MODIFIED )
|
|
|
|
|
{
|
|
|
|
|
if( *pnColorTableState & CT_CHANGED )
|
|
|
|
|
pColorTab = ( (SvxAreaTabDialog*) DLGWIN )->GetNewColorTable();
|
|
|
|
|
|
|
|
|
|
// aLbShadowColor
|
|
|
|
|
nPos = aLbShadowColor.GetSelectEntryPos();
|
|
|
|
|
aLbShadowColor.Clear();
|
|
|
|
|
aLbShadowColor.Fill( pColorTab );
|
|
|
|
|
nCount = aLbShadowColor.GetEntryCount();
|
|
|
|
|
if( nCount == 0 )
|
|
|
|
|
; // Dieser Fall sollte nicht auftreten
|
|
|
|
|
else if( nCount <= nPos )
|
|
|
|
|
aLbShadowColor.SelectEntryPos( 0 );
|
|
|
|
|
else
|
|
|
|
|
aLbShadowColor.SelectEntryPos( nPos );
|
|
|
|
|
|
|
|
|
|
ModifyShadowHdl_Impl( this );
|
|
|
|
|
}
|
2004-02-03 17:58:44 +00:00
|
|
|
|
nPageType = PT_SHADOW;//CHINA001 *pPageType = PT_SHADOW;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
int SvxShadowTabPage::DeactivatePage( SfxItemSet* pSet )
|
|
|
|
|
{
|
2002-07-23 06:24:38 +00:00
|
|
|
|
if( pSet )
|
|
|
|
|
FillItemSet( *pSet );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
return( LEAVE_PAGE );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
BOOL SvxShadowTabPage::FillItemSet( SfxItemSet& rAttrs )
|
|
|
|
|
{
|
|
|
|
|
const SfxPoolItem* pOld = NULL;
|
|
|
|
|
BOOL bModified = FALSE;
|
|
|
|
|
|
|
|
|
|
if( !bDisable )
|
|
|
|
|
{
|
|
|
|
|
// Schatten
|
|
|
|
|
TriState eState = aTsbShowShadow.GetState();
|
|
|
|
|
if( eState != aTsbShowShadow.GetSavedValue() )
|
|
|
|
|
{
|
|
|
|
|
SdrShadowItem aItem( eState );
|
|
|
|
|
pOld = GetOldItem( rAttrs, SDRATTR_SHADOW );
|
|
|
|
|
if ( !pOld || !( *(const SdrShadowItem*)pOld == aItem ) )
|
|
|
|
|
{
|
|
|
|
|
rAttrs.Put( aItem );
|
|
|
|
|
bModified = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Schatten-Entfernung
|
|
|
|
|
// Etwas umstaendliche Abfrage, ob etwas geaendert wurde,
|
|
|
|
|
// da Items nicht direkt auf Controls abbildbar sind
|
|
|
|
|
INT32 nX = 0L, nY = 0L;
|
|
|
|
|
INT32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
|
|
|
|
|
|
|
|
|
|
switch( aCtlPosition.GetActualRP() )
|
|
|
|
|
{
|
|
|
|
|
case RP_LT: nX = nY = -nXY; break;
|
|
|
|
|
case RP_MT: nY = -nXY; break;
|
|
|
|
|
case RP_RT: nX = nXY; nY = -nXY; break;
|
|
|
|
|
case RP_LM: nX = -nXY; break;
|
|
|
|
|
case RP_RM: nX = nXY; break;
|
|
|
|
|
case RP_LB: nX = -nXY; nY = nXY; break;
|
|
|
|
|
case RP_MB: nY = nXY; break;
|
|
|
|
|
case RP_RB: nX = nY = nXY; break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Wenn die Werte des Schattenabstanden==SFX_ITEM_DONTCARE und der angezeigte
|
|
|
|
|
// String im entspr. MetricField=="", dann w<>rde der Vergleich zw. alten und
|
|
|
|
|
// neuen Distance-Werte ein falsches Ergebnis liefern, da in so einem Fall die
|
|
|
|
|
// neuen Distance-Werte den Default-Werten des MetricField entspr<70>chen !!!!
|
|
|
|
|
if ( !aMtrDistance.IsEmptyFieldValue() ||
|
|
|
|
|
rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE ||
|
|
|
|
|
rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
INT32 nOldX = 9876543; // Unmoeglicher Wert, entspr. DontCare
|
|
|
|
|
INT32 nOldY = 9876543;
|
|
|
|
|
if( rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
|
|
|
|
|
rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
nOldX = ( ( const SdrShadowXDistItem& ) rOutAttrs.
|
|
|
|
|
Get( SDRATTR_SHADOWXDIST ) ).GetValue();
|
|
|
|
|
nOldY = ( ( const SdrShadowYDistItem& ) rOutAttrs.
|
|
|
|
|
Get( SDRATTR_SHADOWYDIST ) ).GetValue();
|
|
|
|
|
}
|
|
|
|
|
SdrShadowXDistItem aXItem( nX );
|
|
|
|
|
pOld = GetOldItem( rAttrs, SDRATTR_SHADOWXDIST );
|
|
|
|
|
if ( nX != nOldX &&
|
|
|
|
|
( !pOld || !( *(const SdrShadowXDistItem*)pOld == aXItem ) ) )
|
|
|
|
|
{
|
|
|
|
|
rAttrs.Put( aXItem );
|
|
|
|
|
bModified = TRUE;
|
|
|
|
|
}
|
|
|
|
|
SdrShadowYDistItem aYItem( nY );
|
|
|
|
|
pOld = GetOldItem( rAttrs, SDRATTR_SHADOWYDIST );
|
|
|
|
|
if ( nY != nOldY &&
|
|
|
|
|
( !pOld || !( *(const SdrShadowYDistItem*)pOld == aYItem ) ) )
|
|
|
|
|
{
|
|
|
|
|
rAttrs.Put( aYItem );
|
|
|
|
|
bModified = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ShadowColor
|
|
|
|
|
USHORT nPos = aLbShadowColor.GetSelectEntryPos();
|
|
|
|
|
if( nPos != LISTBOX_ENTRY_NOTFOUND &&
|
|
|
|
|
nPos != aLbShadowColor.GetSavedValue() )
|
|
|
|
|
{
|
|
|
|
|
SdrShadowColorItem aItem( aLbShadowColor.GetSelectEntry(),
|
|
|
|
|
aLbShadowColor.GetSelectEntryColor() );
|
|
|
|
|
pOld = GetOldItem( rAttrs, SDRATTR_SHADOWCOLOR );
|
|
|
|
|
if ( !pOld || !( *(const SdrShadowColorItem*)pOld == aItem ) )
|
|
|
|
|
{
|
|
|
|
|
rAttrs.Put( aItem );
|
|
|
|
|
bModified = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Transparenz
|
|
|
|
|
UINT16 nVal = (UINT16)aMtrTransparent.GetValue();
|
|
|
|
|
if( nVal != (UINT16)aMtrTransparent.GetSavedValue().ToInt32() )
|
|
|
|
|
{
|
|
|
|
|
SdrShadowTransparenceItem aItem( nVal );
|
|
|
|
|
pOld = GetOldItem( rAttrs, SDRATTR_SHADOWTRANSPARENCE );
|
|
|
|
|
if ( !pOld || !( *(const SdrShadowTransparenceItem*)pOld == aItem ) )
|
|
|
|
|
{
|
|
|
|
|
rAttrs.Put( aItem );
|
|
|
|
|
bModified = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2004-02-03 17:58:44 +00:00
|
|
|
|
//add CHINA001 begin
|
|
|
|
|
rAttrs.Put (CntUInt16Item(SID_PAGE_TYPE,nPageType));
|
|
|
|
|
//add CHINA001 end
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return( bModified );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
void SvxShadowTabPage::Reset( const SfxItemSet& rAttrs )
|
|
|
|
|
{
|
|
|
|
|
if( !bDisable )
|
|
|
|
|
{
|
|
|
|
|
// Alle Objekte koennen einen Schatten besitzen
|
|
|
|
|
// z.Z. gibt es nur 8 m<>gliche Positionen den Schatten zu setzen
|
|
|
|
|
|
|
|
|
|
// Ist Schatten gesetzt?
|
|
|
|
|
if( rAttrs.GetItemState( SDRATTR_SHADOW ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
aTsbShowShadow.EnableTriState( FALSE );
|
|
|
|
|
|
|
|
|
|
if( ( ( const SdrShadowItem& ) rAttrs.Get( SDRATTR_SHADOW ) ).GetValue() )
|
|
|
|
|
aTsbShowShadow.SetState( STATE_CHECK );
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
aTsbShowShadow.SetState( STATE_NOCHECK );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
aTsbShowShadow.SetState( STATE_DONTKNOW );
|
|
|
|
|
|
|
|
|
|
// Entfernung (nur 8 moegliche Positionen), deshalb
|
|
|
|
|
// wird nur ein Item ausgewertet
|
|
|
|
|
|
|
|
|
|
if( rAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
|
|
|
|
|
rAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
INT32 nX = ( ( const SdrShadowXDistItem& ) rAttrs.Get( SDRATTR_SHADOWXDIST ) ).GetValue();
|
|
|
|
|
INT32 nY = ( ( const SdrShadowYDistItem& ) rAttrs.Get( SDRATTR_SHADOWYDIST ) ).GetValue();
|
|
|
|
|
|
|
|
|
|
if( nX != 0 )
|
|
|
|
|
SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
|
|
|
|
|
else
|
|
|
|
|
SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
|
|
|
|
|
|
|
|
|
|
// Setzen des Schatten-Controls
|
|
|
|
|
if ( nX < 0L && nY < 0L ) aCtlPosition.SetActualRP( RP_LT );
|
|
|
|
|
else if( nX == 0L && nY < 0L ) aCtlPosition.SetActualRP( RP_MT );
|
|
|
|
|
else if( nX > 0L && nY < 0L ) aCtlPosition.SetActualRP( RP_RT );
|
|
|
|
|
else if( nX < 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_LM );
|
|
|
|
|
// Mittelpunkt gibt es nicht mehr
|
|
|
|
|
else if( nX == 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RB );
|
|
|
|
|
else if( nX > 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RM );
|
|
|
|
|
else if( nX < 0L && nY > 0L ) aCtlPosition.SetActualRP( RP_LB );
|
|
|
|
|
else if( nX == 0L && nY > 0L ) aCtlPosition.SetActualRP( RP_MB );
|
|
|
|
|
else if( nX > 0L && nY > 0L ) aCtlPosition.SetActualRP( RP_RB );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// determine default-distance
|
|
|
|
|
SfxItemPool* pPool = rOutAttrs.GetPool();
|
|
|
|
|
SdrShadowXDistItem* pXDistItem = (SdrShadowXDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWXDIST);
|
|
|
|
|
SdrShadowYDistItem* pYDistItem = (SdrShadowYDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWYDIST);
|
|
|
|
|
if (pXDistItem && pYDistItem)
|
|
|
|
|
{
|
|
|
|
|
INT32 nX = pXDistItem->GetValue();
|
|
|
|
|
INT32 nY = pYDistItem->GetValue();
|
|
|
|
|
if( nX != 0 )
|
|
|
|
|
SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
|
|
|
|
|
else
|
|
|
|
|
SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Tristate, z.B. mehrer Objekte wurden markiert, wovon einige einen Schatten besitzen, einige nicht.
|
|
|
|
|
// Der anzuzeigende Text des MetricFields wird auf "" gesetzt und dient in der Methode FillItemSet
|
|
|
|
|
// als Erkennungszeichen daf<61>r, das der Distance-Wert NICHT ver<65>ndert wurde !!!!
|
|
|
|
|
aMtrDistance.SetText( String() );
|
|
|
|
|
aCtlPosition.SetActualRP( RP_MM );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SchattenFarbe:
|
|
|
|
|
if( rAttrs.GetItemState( SDRATTR_SHADOWCOLOR ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
aLbShadowColor.SelectEntry( ( ( const SdrShadowColorItem& ) rAttrs.Get( SDRATTR_SHADOWCOLOR ) ).GetValue() );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
aLbShadowColor.SetNoSelection();
|
|
|
|
|
|
|
|
|
|
// Transparenz
|
|
|
|
|
if( rAttrs.GetItemState( SDRATTR_SHADOWTRANSPARENCE ) != SFX_ITEM_DONTCARE )
|
|
|
|
|
{
|
|
|
|
|
USHORT nTransp = ( ( const SdrShadowTransparenceItem& ) rAttrs.Get( SDRATTR_SHADOWTRANSPARENCE ) ).GetValue();
|
|
|
|
|
aMtrTransparent.SetValue( nTransp );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
aMtrTransparent.SetText( String() );
|
|
|
|
|
|
|
|
|
|
// Werte sichern
|
|
|
|
|
//aCtlPosition
|
|
|
|
|
aMtrDistance.SaveValue();
|
|
|
|
|
aLbShadowColor.SaveValue();
|
|
|
|
|
aTsbShowShadow.SaveValue();
|
|
|
|
|
|
|
|
|
|
// #66832# This field was not saved, but used to determine changes.
|
|
|
|
|
// Why? Seems to be the error.
|
|
|
|
|
// It IS the error.
|
|
|
|
|
aMtrTransparent.SaveValue();
|
|
|
|
|
|
|
|
|
|
ClickShadowHdl_Impl( NULL );
|
|
|
|
|
ModifyShadowHdl_Impl( NULL );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
SfxTabPage* SvxShadowTabPage::Create( Window* pWindow,
|
|
|
|
|
const SfxItemSet& rAttrs )
|
|
|
|
|
{
|
|
|
|
|
return( new SvxShadowTabPage( pWindow, rAttrs ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
USHORT* SvxShadowTabPage::GetRanges()
|
|
|
|
|
{
|
|
|
|
|
return( pShadowRanges );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
IMPL_LINK( SvxShadowTabPage, ClickShadowHdl_Impl, void *, EMPTYARG )
|
|
|
|
|
{
|
|
|
|
|
if( aTsbShowShadow.GetState() == STATE_NOCHECK )
|
|
|
|
|
{
|
|
|
|
|
aFtPosition.Disable();
|
|
|
|
|
aCtlPosition.Disable();
|
|
|
|
|
aFtDistance.Disable();
|
|
|
|
|
aMtrDistance.Disable();
|
|
|
|
|
aFtShadowColor.Disable();
|
|
|
|
|
aLbShadowColor.Disable();
|
|
|
|
|
aFtTransparent.Disable();
|
|
|
|
|
aMtrTransparent.Disable();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
aFtPosition.Enable();
|
|
|
|
|
aCtlPosition.Enable();
|
|
|
|
|
aFtDistance.Enable();
|
|
|
|
|
aMtrDistance.Enable();
|
|
|
|
|
aFtShadowColor.Enable();
|
|
|
|
|
aLbShadowColor.Enable();
|
|
|
|
|
aFtTransparent.Enable();
|
|
|
|
|
aMtrTransparent.Enable();
|
|
|
|
|
}
|
|
|
|
|
aCtlPosition.Invalidate();
|
|
|
|
|
|
|
|
|
|
ModifyShadowHdl_Impl( NULL );
|
|
|
|
|
|
|
|
|
|
return( 0L );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
IMPL_LINK( SvxShadowTabPage, ModifyShadowHdl_Impl, void *, EMPTYARG )
|
|
|
|
|
{
|
|
|
|
|
if( aTsbShowShadow.GetState() == STATE_CHECK )
|
|
|
|
|
rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
|
|
|
|
|
else
|
|
|
|
|
rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
|
|
|
|
|
|
|
|
|
|
USHORT nPos = aLbShadowColor.GetSelectEntryPos();
|
|
|
|
|
if( nPos != LISTBOX_ENTRY_NOTFOUND )
|
|
|
|
|
{
|
|
|
|
|
rXFSet.Put( XFillColorItem( String(),
|
|
|
|
|
aLbShadowColor.GetSelectEntryColor() ) );
|
|
|
|
|
}
|
|
|
|
|
UINT16 nVal = (UINT16)aMtrTransparent.GetValue();
|
|
|
|
|
XFillTransparenceItem aItem( nVal );
|
|
|
|
|
rXFSet.Put( XFillTransparenceItem( aItem ) );
|
|
|
|
|
|
|
|
|
|
// Schatten-Entfernung
|
|
|
|
|
INT32 nX = 0L, nY = 0L;
|
|
|
|
|
INT32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
|
|
|
|
|
switch( aCtlPosition.GetActualRP() )
|
|
|
|
|
{
|
|
|
|
|
case RP_LT: nX = nY = -nXY; break;
|
|
|
|
|
case RP_MT: nY = -nXY; break;
|
|
|
|
|
case RP_RT: nX = nXY; nY = -nXY; break;
|
|
|
|
|
case RP_LM: nX = -nXY; break;
|
|
|
|
|
case RP_RM: nX = nXY; break;
|
|
|
|
|
case RP_LB: nX = -nXY; nY = nXY; break;
|
|
|
|
|
case RP_MB: nY = nXY; break;
|
|
|
|
|
case RP_RB: nX = nY = nXY; break;
|
|
|
|
|
}
|
|
|
|
|
aCtlXRectPreview.SetShadowPos( Point( nX, nY ) );
|
|
|
|
|
|
|
|
|
|
aCtlXRectPreview.SetShadowAttr( &aXFillAttr );
|
|
|
|
|
//XOut.SetFillAttr( aXFillAttr );
|
|
|
|
|
aCtlXRectPreview.Invalidate();
|
|
|
|
|
|
|
|
|
|
return( 0L );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
void SvxShadowTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
|
|
|
|
|
{
|
|
|
|
|
eRP = eRcPt;
|
|
|
|
|
|
|
|
|
|
// Schatten neu zeichnen
|
|
|
|
|
ModifyShadowHdl_Impl( pWindow );
|
|
|
|
|
}
|
|
|
|
|
|
2004-02-03 17:58:44 +00:00
|
|
|
|
void SvxShadowTabPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
|
|
|
|
|
{
|
|
|
|
|
SFX_ITEMSET_ARG (&aSet,pColorTabItem,SvxColorTableItem,SID_COLOR_TABLE,sal_False);
|
|
|
|
|
SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
|
|
|
|
|
SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pColorTabItem)
|
|
|
|
|
SetColorTable(pColorTabItem->GetColorTable());
|
|
|
|
|
if (pPageTypeItem)
|
|
|
|
|
SetPageType(pPageTypeItem->GetValue());
|
|
|
|
|
if (pDlgTypeItem)
|
|
|
|
|
SetDlgType(pDlgTypeItem->GetValue());
|
|
|
|
|
Construct();
|
|
|
|
|
}
|