blob: e9631f6d1b0279cb42e9faa2a1f41132ce5ce893 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#ifndef _COM_SUN_STAR_DRAWING_ENHANCEDCUSTOMSHAPEPARAMETERPARIR_HPP_
#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
#endif
#include <com/sun/star/drawing/EnhancedCustomShapeParameterType.hpp>
#include <com/sun/star/drawing/ShadeMode.hpp>
#include <com/sun/star/drawing/Position3D.hpp>
#include <com/sun/star/drawing/Direction3D.hpp>
#include <com/sun/star/drawing/ProjectionMode.hpp>
#include <svx/svdundo.hxx>
#include <sfx2/app.hxx>
#include <sfx2/request.hxx>
#include <sfx2/objface.hxx>
#include <sfx2/viewsh.hxx>
#include <sfx2/bindings.hxx>
#include <svx/xsflclit.hxx>
#include <svx/dialmgr.hxx>
#include <svx/svdoashp.hxx>
#ifndef _SVX_DIALOGS_HRC
#include <svx/dialogs.hrc>
#endif
#include <svx/svdview.hxx>
#include <editeng/colritem.hxx>
#include "svx/chrtitem.hxx"
#include <svx/extrusionbar.hxx>
#include "extrusiondepthdialog.hxx"
using namespace ::svx;
using namespace ::rtl;
using namespace ::cppu;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::drawing;
using namespace ::com::sun::star::uno;
/*************************************************************************
|*
|* Standardinterface deklarieren (Die Slotmap darf nicht leer sein, also
|* tragen wir etwas ein, was hier (hoffentlich) nie vorkommt).
|*
\************************************************************************/
#define ShellClass ExtrusionBar
SFX_SLOTMAP(ExtrusionBar)
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
SFX_IMPL_INTERFACE(ExtrusionBar, SfxShell, SVX_RES(RID_SVX_EXTRUSION_BAR))
{
SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_OBJECT, SVX_RES(RID_SVX_EXTRUSION_BAR) );
}
TYPEINIT1( ExtrusionBar, SfxShell );
/*************************************************************************
|*
|* Standard-Konstruktor
|*
\************************************************************************/
ExtrusionBar::ExtrusionBar(SfxViewShell* pViewShell )
: SfxShell(pViewShell)
{
DBG_ASSERT( pViewShell, "svx::ExtrusionBar::ExtrusionBar(), I need a viewshell!" );
if( pViewShell )
SetPool(&pViewShell->GetPool());
SetHelpId( SVX_INTERFACE_EXTRUSION_BAR );
SetName( String( SVX_RES( RID_SVX_EXTRUSION_BAR )));
}
/*************************************************************************
|*
|* Destruktor
|*
\************************************************************************/
ExtrusionBar::~ExtrusionBar()
{
SetRepeatTarget(NULL);
}
void getLightingDirectionDefaults( const Direction3D **pLighting1Defaults, const Direction3D **pLighting2Defaults )
{
static const Direction3D aLighting1Defaults[9] =
{
Direction3D( -50000, -50000, 10000 ),
Direction3D( 0, -50000, 10000 ),
Direction3D( 50000, -50000, 10000 ),
Direction3D( -50000, 0, 10000 ),
Direction3D( 0, 0, 10000 ),
Direction3D( 50000, 0, 10000 ),
Direction3D( -50000, 50000, 10000 ),
Direction3D( 0, 50000, 10000 ),
Direction3D( 50000, 50000, 10000 )
};
static const Direction3D aLighting2Defaults[9] =
{
Direction3D( 50000,0, 10000 ),
Direction3D( 0, 50000, 10000 ),
Direction3D( -50000, 0, 10000 ),
Direction3D( 50000, 0, 10000 ),
Direction3D( 0, 0, 10000 ),
Direction3D( -50000, 0, 10000 ),
Direction3D( 50000, 0, 10000 ),
Direction3D( 0, -50000, 10000 ),
Direction3D( -50000, 0, 10000 )
};
*pLighting1Defaults = (const Direction3D *)aLighting1Defaults;
*pLighting2Defaults = (const Direction3D *)aLighting2Defaults;
};
static void impl_execute( SdrView*, SfxRequest& rReq, SdrCustomShapeGeometryItem& rGeometryItem, SdrObject* pObj )
{
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sProjectionMode( RTL_CONSTASCII_USTRINGPARAM ( "ProjectionMode" ) );
static const rtl::OUString sRotateAngle( RTL_CONSTASCII_USTRINGPARAM ( "RotateAngle" ) );
static const rtl::OUString sViewPoint( RTL_CONSTASCII_USTRINGPARAM ( "ViewPoint" ) );
static const rtl::OUString sOrigin( RTL_CONSTASCII_USTRINGPARAM ( "Origin" ) );
static const rtl::OUString sSkew( RTL_CONSTASCII_USTRINGPARAM ( "Skew" ) );
static const rtl::OUString sDepth( RTL_CONSTASCII_USTRINGPARAM ( "Depth" ) );
sal_uInt16 nSID = rReq.GetSlot();
switch( nSID )
{
case SID_EXTRUSION_TOOGLE:
{
com::sun::star::uno::Any* pAny = rGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny )
{
sal_Bool bOn;
(*pAny) >>= bOn;
bOn = !bOn;
(*pAny) <<= bOn;
}
else
{
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sExtrusion;
aPropValue.Value <<= sal_True;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
break;
case SID_EXTRUSION_TILT_DOWN:
case SID_EXTRUSION_TILT_UP:
case SID_EXTRUSION_TILT_LEFT:
case SID_EXTRUSION_TILT_RIGHT:
{
sal_Bool bHorizontal = ( nSID == SID_EXTRUSION_TILT_DOWN ) || ( nSID == SID_EXTRUSION_TILT_UP );
sal_Int32 nDiff = ( nSID == SID_EXTRUSION_TILT_LEFT ) || ( nSID == SID_EXTRUSION_TILT_UP ) ? 5 : -5;
EnhancedCustomShapeParameterPair aRotateAnglePropPair;
double fX = 0.0;
double fY = 0.0;
aRotateAnglePropPair.First.Value <<= fX;
aRotateAnglePropPair.First.Type = EnhancedCustomShapeParameterType::NORMAL;
aRotateAnglePropPair.Second.Value <<= fY;
aRotateAnglePropPair.Second.Type = EnhancedCustomShapeParameterType::NORMAL;
com::sun::star::uno::Any* pAny = rGeometryItem.GetPropertyValueByName( sExtrusion, sRotateAngle );
if( pAny && ( *pAny >>= aRotateAnglePropPair ) )
{
aRotateAnglePropPair.First.Value >>= fX;
aRotateAnglePropPair.Second.Value >>= fY;
}
if ( bHorizontal )
fX += nDiff;
else
fY += nDiff;
aRotateAnglePropPair.First.Value <<= fX;
aRotateAnglePropPair.Second.Value <<= fY;
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sRotateAngle;
aPropValue.Value <<= aRotateAnglePropPair;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
break;
case SID_EXTRUSION_DIRECTION:
{
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_DIRECTION ) == SFX_ITEM_SET )
{
sal_Int32 nSkew = ((const SfxInt32Item*)rReq.GetArgs()->GetItem(SID_EXTRUSION_DIRECTION))->GetValue();
Position3D aViewPoint( 3472, -3472, 25000 );
double fOriginX = 0.50;
double fOriginY = -0.50;
double fSkewAngle = nSkew;
double fSkew = 50.0;
switch( nSkew )
{
case 135:
aViewPoint.PositionY = 3472;
fOriginY = 0.50;
break;
case 90:
aViewPoint.PositionX = 0;
aViewPoint.PositionY = 3472;
fOriginX = 0;
fOriginY = -0.50;
break;
case 45:
aViewPoint.PositionX = -3472;
aViewPoint.PositionY = 3472;
fOriginX = -0.50;
fOriginY = 0.50;
break;
case 180:
aViewPoint.PositionY = 0;
fOriginY = 0;
break;
case 0:
aViewPoint.PositionX = 0;
aViewPoint.PositionY = 0;
fOriginX = 0;
fOriginY = 0;
fSkew = 0.0;
break;
case -360:
aViewPoint.PositionX = -3472;
aViewPoint.PositionY = 0;
fOriginX = -0.50;
fOriginY = 0;
break;
case -90:
aViewPoint.PositionX = 0;
fOriginX = 0;
break;
case -45:
aViewPoint.PositionX = -3472;
fOriginX = -0.50;
break;
}
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sViewPoint;
aPropValue.Value <<= aViewPoint;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
EnhancedCustomShapeParameterPair aOriginPropPair;
aOriginPropPair.First.Value <<= fOriginX;
aOriginPropPair.First.Type = EnhancedCustomShapeParameterType::NORMAL;
aOriginPropPair.Second.Value <<= fOriginY;
aOriginPropPair.Second.Type = EnhancedCustomShapeParameterType::NORMAL;
aPropValue.Name = sOrigin;
aPropValue.Value <<= aOriginPropPair;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
EnhancedCustomShapeParameterPair aSkewPropPair;
aSkewPropPair.First.Value <<= fSkew;
aSkewPropPair.First.Type = EnhancedCustomShapeParameterType::NORMAL;
aSkewPropPair.Second.Value <<= fSkewAngle;
aSkewPropPair.Second.Type = EnhancedCustomShapeParameterType::NORMAL;
aPropValue.Name = sSkew;
aPropValue.Value <<= aSkewPropPair;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
break;
case SID_EXTRUSION_PROJECTION:
{
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_PROJECTION ) == SFX_ITEM_SET )
{
sal_Int32 nProjection = ((const SfxInt32Item*)rReq.GetArgs()->GetItem(SID_EXTRUSION_PROJECTION))->GetValue();
ProjectionMode eProjectionMode = nProjection == 1 ? ProjectionMode_PARALLEL : ProjectionMode_PERSPECTIVE;
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sProjectionMode;
aPropValue.Value <<= eProjectionMode;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
break;
case SID_EXTRUSION_DEPTH:
{
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_DEPTH ) == SFX_ITEM_SET)
{
double fDepth = ((const SvxDoubleItem*)rReq.GetArgs()->GetItem(SID_EXTRUSION_DEPTH))->GetValue();
double fFraction = 0.0;
EnhancedCustomShapeParameterPair aDepthPropPair;
aDepthPropPair.First.Value <<= fDepth;
aDepthPropPair.First.Type = EnhancedCustomShapeParameterType::NORMAL;
aDepthPropPair.Second.Value <<= fFraction;
aDepthPropPair.Second.Type = EnhancedCustomShapeParameterType::NORMAL;
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sDepth;
aPropValue.Value <<= aDepthPropPair;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
break;
case SID_EXTRUSION_3D_COLOR:
{
static const rtl::OUString sExtrusionColor( RTL_CONSTASCII_USTRINGPARAM ( "Color" ) );
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_3D_COLOR ) == SFX_ITEM_SET)
{
Color aColor( ((const SvxColorItem&)rReq.GetArgs()->Get(SID_EXTRUSION_3D_COLOR)).GetValue() );
const bool bAuto = aColor == COL_AUTO;
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sExtrusionColor;
aPropValue.Value <<= bAuto ? sal_False : sal_True;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
if( bAuto )
{
pObj->ClearMergedItem( XATTR_SECONDARYFILLCOLOR );
}
else
{
pObj->SetMergedItem( XSecondaryFillColorItem( String(), aColor ) );
}
pObj->BroadcastObjectChange();
}
}
break;
case SID_EXTRUSION_SURFACE:
{
static const rtl::OUString sShadeMode( RTL_CONSTASCII_USTRINGPARAM ( "ShadeMode" ) );
static const rtl::OUString sSpecularity( RTL_CONSTASCII_USTRINGPARAM ( "Specularity" ) );
static const rtl::OUString sDiffusion( RTL_CONSTASCII_USTRINGPARAM ( "Diffusion" ) );
static const rtl::OUString sMetal( RTL_CONSTASCII_USTRINGPARAM ( "Metal" ) );
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_SURFACE ) == SFX_ITEM_SET)
{
sal_Int32 nSurface = ((const SfxInt32Item*)rReq.GetArgs()->GetItem(SID_EXTRUSION_SURFACE))->GetValue();
ShadeMode eShadeMode( ShadeMode_FLAT );
sal_Bool bMetal = sal_False;
double fSpecularity = 0;
double fDiffusion = 0;
switch( nSurface )
{
case 0: // wireframe
eShadeMode = ShadeMode_DRAFT;
break;
case 1: // matte
break;
case 2: // plastic
fSpecularity = 122.0;
break;
case 3: // metal
bMetal = true;
fSpecularity = 122.0;
fDiffusion = 122.0;
break;
}
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sShadeMode;
aPropValue.Value <<= eShadeMode;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sMetal;
aPropValue.Value <<= bMetal;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sSpecularity;
aPropValue.Value <<= fSpecularity;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sDiffusion;
aPropValue.Value <<= fDiffusion;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
break;
case SID_EXTRUSION_LIGHTING_INTENSITY:
{
static const rtl::OUString sBrightness( RTL_CONSTASCII_USTRINGPARAM ( "Brightness" ) );
static const rtl::OUString sLightFace( RTL_CONSTASCII_USTRINGPARAM ( "LightFace" ) );
static const rtl::OUString sFirstLightHarsh( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightHarsh" ) );
static const rtl::OUString sSecondLightHarsh( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightHarsh" ) );
static const rtl::OUString sFirstLightLevel( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightLevel" ) );
static const rtl::OUString sSecondLightLevel( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightLevel" ) );
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_LIGHTING_INTENSITY ) == SFX_ITEM_SET)
{
sal_Int32 nLevel = ((const SfxInt32Item*)rReq.GetArgs()->GetItem(SID_EXTRUSION_LIGHTING_INTENSITY))->GetValue();
double fBrightness;
sal_Bool bHarsh2;
double fLevel1;
double fLevel2;
switch( nLevel )
{
case 0: // bright
fBrightness = 34.0;
bHarsh2 = sal_False;
fLevel1 = 66.0;
fLevel2 = 66.0;
break;
case 1: // normal
fBrightness = 15.0;
bHarsh2 = sal_False;
fLevel1 = 67.0;
fLevel2 = 37.0;
break;
case 2: // dim
fBrightness = 6.0;
bHarsh2 = sal_True;
fLevel1 = 79.0;
fLevel2 = 21.0;
break;
}
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sBrightness;
aPropValue.Value <<= fBrightness;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sLightFace;
aPropValue.Value <<= sal_True;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sFirstLightHarsh;
aPropValue.Value <<= sal_True;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sSecondLightHarsh;
aPropValue.Value <<= bHarsh2;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sFirstLightLevel;
aPropValue.Value <<= fLevel1;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sSecondLightLevel;
aPropValue.Value <<= fLevel2;
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
break;
case SID_EXTRUSION_LIGHTING_DIRECTION:
{
if( rReq.GetArgs() && rReq.GetArgs()->GetItemState( SID_EXTRUSION_LIGHTING_DIRECTION ) == SFX_ITEM_SET)
{
sal_Int32 nDirection = ((const SfxInt32Item*)rReq.GetArgs()->GetItem(SID_EXTRUSION_LIGHTING_DIRECTION))->GetValue();
if((nDirection >= 0) && (nDirection < 9))
{
const rtl::OUString sFirstLightDirection( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightDirection" ) );
const rtl::OUString sSecondLightDirection( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightDirection" ) );
const Direction3D * pLighting1Defaults;
const Direction3D * pLighting2Defaults;
getLightingDirectionDefaults( &pLighting1Defaults, &pLighting2Defaults );
com::sun::star::beans::PropertyValue aPropValue;
aPropValue.Name = sFirstLightDirection;
aPropValue.Value <<= pLighting1Defaults[nDirection];
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
aPropValue.Name = sSecondLightDirection;
aPropValue.Value <<= pLighting2Defaults[nDirection];
rGeometryItem.SetPropertyValue( sExtrusion, aPropValue );
}
}
}
break;
}
}
void ExtrusionBar::execute( SdrView* pSdrView, SfxRequest& rReq, SfxBindings& rBindings )
{
sal_uInt16 nSID = rReq.GetSlot();
sal_uInt16 nStrResId = 0;
const bool bUndo = pSdrView && pSdrView->IsUndoEnabled();
switch( nSID )
{
case SID_EXTRUSION_TOOGLE:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_ON_OFF;
} // PASSTROUGH
case SID_EXTRUSION_TILT_DOWN:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_DOWN;
} // PASSTROUGH
case SID_EXTRUSION_TILT_UP:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_UP;
} // PASSTROUGH
case SID_EXTRUSION_TILT_LEFT:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_LEFT;
} // PASSTROUGH
case SID_EXTRUSION_TILT_RIGHT:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_RIGHT;
} // PASSTROUGH
case SID_EXTRUSION_DIRECTION:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_ORIENTATION;
} // PASSTROUGH
case SID_EXTRUSION_PROJECTION:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_PROJECTION;
} // PASSTROUGH
case SID_EXTRUSION_DEPTH:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_DEPTH;
} // PASSTROUGH
case SID_EXTRUSION_3D_COLOR:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_COLOR;
} // PASSTROUGH
case SID_EXTRUSION_SURFACE:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_SURFACE;
} // PASSTROUGH
case SID_EXTRUSION_LIGHTING_INTENSITY:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_BRIGHTNESS;
} // PASSTROUGH
case SID_EXTRUSION_LIGHTING_DIRECTION:
{
if ( !nStrResId )
nStrResId = RID_SVXSTR_UNDO_APPLY_EXTRUSION_LIGHTING;
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
for(i=0; i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
if( bUndo )
{
String aStr( SVX_RES( nStrResId ) );
pSdrView->BegUndo( aStr );
pSdrView->AddUndo( pSdrView->GetModel()->GetSdrUndoFactory().CreateUndoAttrObject( *pObj ) );
}
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
impl_execute( pSdrView, rReq, aGeometryItem, pObj );
pObj->SetMergedItem( aGeometryItem );
pObj->BroadcastObjectChange();
if( bUndo )
pSdrView->EndUndo();
// simulate a context change:
// force SelectionHasChanged() being called
// so that extrusion bar will be visible/hidden
pSdrView->MarkListHasChanged();
}
}
}
break;
case SID_EXTRUSION_DEPTH_DIALOG:
if( rReq.GetArgs() &&
(rReq.GetArgs()->GetItemState( SID_EXTRUSION_DEPTH ) == SFX_ITEM_SET) &&
(rReq.GetArgs()->GetItemState( SID_ATTR_METRIC ) == SFX_ITEM_SET))
{
double fDepth = ((const SvxDoubleItem*)rReq.GetArgs()->GetItem(SID_EXTRUSION_DEPTH))->GetValue();
FieldUnit eUnit = (FieldUnit)((const SfxUInt16Item*)rReq.GetArgs()->GetItem(SID_ATTR_METRIC))->GetValue();
ExtrusionDepthDialog aDlg( 0L, fDepth, eUnit );
sal_uInt16 nRet = aDlg.Execute();
if( nRet != 0 )
{
fDepth = aDlg.getDepth();
SvxDoubleItem aItem( fDepth, SID_EXTRUSION_DEPTH );
SfxPoolItem* aItems[] = { &aItem, 0 };
rBindings.Execute( SID_EXTRUSION_DEPTH, (const SfxPoolItem**)aItems );
}
}
break;
}
if( nSID == SID_EXTRUSION_TOOGLE )
{
static sal_uInt16 SidArray[] = {
SID_EXTRUSION_TILT_DOWN,
SID_EXTRUSION_TILT_UP,
SID_EXTRUSION_TILT_LEFT,
SID_EXTRUSION_TILT_RIGHT,
SID_EXTRUSION_DEPTH_FLOATER,
SID_EXTRUSION_DIRECTION_FLOATER,
SID_EXTRUSION_LIGHTING_FLOATER,
SID_EXTRUSION_SURFACE_FLOATER,
SID_EXTRUSION_3D_COLOR,
SID_EXTRUSION_DEPTH,
SID_EXTRUSION_DIRECTION,
SID_EXTRUSION_PROJECTION,
SID_EXTRUSION_LIGHTING_DIRECTION,
SID_EXTRUSION_LIGHTING_INTENSITY,
SID_EXTRUSION_SURFACE,
0 };
rBindings.Invalidate( SidArray );
}
}
void getExtrusionDirectionState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sViewPoint( RTL_CONSTASCII_USTRINGPARAM ( "ViewPoint" ) );
static const rtl::OUString sOrigin( RTL_CONSTASCII_USTRINGPARAM ( "Origin" ) );
static const rtl::OUString sSkew( RTL_CONSTASCII_USTRINGPARAM ( "Skew" ) );
static const rtl::OUString sProjectionMode( RTL_CONSTASCII_USTRINGPARAM ( "ProjectionMode" ) );
com::sun::star::uno::Any* pAny;
double fFinalSkewAngle = -1;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
// see if this is an extruded customshape
if( !bHasCustomShape )
{
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
sal_Bool bParallel = sal_True;
Position3D aViewPoint( 3472, -3472, 25000 );
double fOriginX = 0.50;
double fOriginY = -0.50;
double fSkewAngle = -135;
double fSkew = 50.0;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sProjectionMode );
sal_Int16 nProjectionMode = sal_Int16();
if( pAny && ( *pAny >>= nProjectionMode ) )
bParallel = nProjectionMode == ProjectionMode_PARALLEL;
if( bParallel )
{
EnhancedCustomShapeParameterPair aSkewPropPair;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sSkew );
if( pAny && ( *pAny >>= aSkewPropPair ) )
{
aSkewPropPair.First.Value >>= fSkew;
aSkewPropPair.Second.Value >>= fSkewAngle;
}
if ( fSkew == 0.0 )
fSkewAngle = 0.0;
else if ( fSkewAngle == 0.0 )
fSkewAngle = -360.0;
}
else
{
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sViewPoint );
if( pAny )
*pAny >>= aViewPoint;
EnhancedCustomShapeParameterPair aOriginPropPair;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sOrigin );
if( pAny && ( *pAny >>= aOriginPropPair ) )
{
aOriginPropPair.First.Value >>= fOriginX;
aOriginPropPair.Second.Value >>= fOriginY;
}
fSkewAngle = -1;
const double e = 0.0001;
if( aViewPoint.PositionX > e )
{
if( aViewPoint.PositionY > e )
{
if( (fOriginX > e ) && ( fOriginY > e ) )
fSkewAngle = 135.0;
}
else if( aViewPoint.PositionY < -e )
{
if( ( fOriginX > e ) && ( fOriginY < -e ) )
fSkewAngle = -135.0;
}
else
{
if( ( fOriginX > e ) && ( fOriginY > -e ) && ( fOriginY < e ) )
fSkewAngle = 180.0;
}
}
else if( aViewPoint.PositionX < -e )
{
if( aViewPoint.PositionY < -e )
{
if( ( fOriginX < -e ) && ( fOriginY < -e ) )
fSkewAngle = -45.0;
}
else if( aViewPoint.PositionY > e )
{
if( ( fOriginX < -e ) && ( fOriginY > e ) )
fSkewAngle = 45.0;
}
else
{
if( ( fOriginX < e ) && ( fOriginY > -e ) && ( fOriginY < e ) )
fSkewAngle = -360.0;
}
}
else
{
if( aViewPoint.PositionY < -e )
{
if( ( fOriginX > -e ) && ( fOriginX < e ) && ( fOriginY < -e ) )
fSkewAngle = -90.0;
}
else if( aViewPoint.PositionY > e )
{
if( ( fOriginX > -e ) && ( fOriginX < e ) && ( fOriginY > e ) )
fSkewAngle = 90.0;
}
else
{
if( ( fOriginX > -e ) && ( fOriginX < e ) && ( fOriginY > -e ) && ( fOriginY < e ) )
fSkewAngle = 0.0;
}
}
}
if( fFinalSkewAngle == -1.0 )
{
fFinalSkewAngle = fSkewAngle;
}
else if( fSkewAngle != fFinalSkewAngle )
{
fFinalSkewAngle = -1.0;
}
if( fFinalSkewAngle == -1.0 )
break;
}
}
if( bHasCustomShape )
rSet.Put( SfxInt32Item( SID_EXTRUSION_DIRECTION, (sal_Int32)fFinalSkewAngle ) );
else
rSet.DisableItem( SID_EXTRUSION_DIRECTION );
}
void getExtrusionProjectionState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sProjectionMode( RTL_CONSTASCII_USTRINGPARAM ( "ProjectionMode" ) );
com::sun::star::uno::Any* pAny;
sal_Int32 nFinalProjection = -1;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
// see if this is an extruded customshape
if( !bHasCustomShape )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
sal_Bool bParallel = sal_True;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sProjectionMode );
ProjectionMode eProjectionMode;
if( pAny && ( *pAny >>= eProjectionMode ) )
bParallel = eProjectionMode == ProjectionMode_PARALLEL;
if( nFinalProjection == -1 )
{
nFinalProjection = bParallel;
}
else if( nFinalProjection != bParallel )
{
nFinalProjection = -1;
break;
}
}
}
if( bHasCustomShape )
rSet.Put( SfxInt32Item( SID_EXTRUSION_PROJECTION, nFinalProjection ) );
else
rSet.DisableItem( SID_EXTRUSION_PROJECTION );
}
void getExtrusionSurfaceState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sShadeMode( RTL_CONSTASCII_USTRINGPARAM ( "ShadeMode" ) );
static const rtl::OUString sSpecularity( RTL_CONSTASCII_USTRINGPARAM ( "Specularity" ) );
static const rtl::OUString sDiffusion( RTL_CONSTASCII_USTRINGPARAM ( "Diffusion" ) );
static const rtl::OUString sMetal( RTL_CONSTASCII_USTRINGPARAM ( "Metal" ) );
com::sun::star::uno::Any* pAny;
sal_Int32 nFinalSurface = -1;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
// see if this is an extruded customshape
if( !bHasCustomShape )
{
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
sal_Int32 nSurface = 0; // wire frame
ShadeMode eShadeMode( ShadeMode_FLAT );
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sShadeMode );
if( pAny )
*pAny >>= eShadeMode;
if( eShadeMode == ShadeMode_FLAT )
{
sal_Bool bMetal = sal_False;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sMetal );
if( pAny )
*pAny >>= bMetal;
if( bMetal )
{
nSurface = 3; // metal
}
else
{
double fSpecularity = 0;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sSpecularity );
if( pAny )
*pAny >>= fSpecularity;
const double e = 0.0001;
if( (fSpecularity > -e) && (fSpecularity < e) )
{
nSurface = 1; // matte
}
else
{
nSurface = 2; // plastic
}
}
}
if( nFinalSurface == -1 )
{
nFinalSurface = nSurface;
}
else if( nFinalSurface != nSurface )
{
nFinalSurface = -1;
break;
}
}
}
if( bHasCustomShape )
rSet.Put( SfxInt32Item( SID_EXTRUSION_SURFACE, nFinalSurface ) );
else
rSet.DisableItem( SID_EXTRUSION_SURFACE );
}
void getExtrusionDepthState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sDepth( RTL_CONSTASCII_USTRINGPARAM ( "Depth" ) );
com::sun::star::uno::Any* pAny;
double fFinalDepth = -1;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
// see if this is an extruded customshape
if( !bHasCustomShape )
{
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
double fDepth = 1270.0;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sDepth );
if( pAny )
{
EnhancedCustomShapeParameterPair aDepthPropPair;
if ( *pAny >>= aDepthPropPair )
aDepthPropPair.First.Value >>= fDepth;
}
if( fFinalDepth == -1 )
{
fFinalDepth = fDepth;
}
else if( fFinalDepth != fDepth )
{
fFinalDepth = -1;
break;
}
}
}
if( pSdrView->GetModel() )
{
FieldUnit eUnit = pSdrView->GetModel()->GetUIUnit();
rSet.Put( SfxUInt16Item( SID_ATTR_METRIC, (sal_uInt16)eUnit ) );
}
if( bHasCustomShape )
rSet.Put( SvxDoubleItem( fFinalDepth, SID_EXTRUSION_DEPTH ) );
else
rSet.DisableItem( SID_EXTRUSION_DEPTH );
}
static bool compare_direction( const Direction3D& d1, const Direction3D& d2 )
{
if( ((d1.DirectionX < 0) && (d2.DirectionX < 0)) || ((d1.DirectionX == 0) && (d2.DirectionX == 0)) || ((d1.DirectionX > 0) && (d2.DirectionX > 0)) )
{
if( ((d1.DirectionY < 0) && (d2.DirectionY < 0)) || ((d1.DirectionY == 0) && (d2.DirectionY == 0)) || ((d1.DirectionY > 0) && (d2.DirectionY > 0)) )
{
if( ((d1.DirectionZ < 0) && (d2.DirectionZ < 0)) || ((d1.DirectionZ == 0) && (d2.DirectionZ == 0)) || ((d1.DirectionZ > 0) && (d2.DirectionZ > 0)) )
{
return true;
}
}
}
return false;
}
void getExtrusionLightingDirectionState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sFirstLightDirection( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightDirection" ) );
static const rtl::OUString sSecondLightDirection( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightDirection" ) );
const Direction3D * pLighting1Defaults;
const Direction3D * pLighting2Defaults;
getLightingDirectionDefaults( &pLighting1Defaults, &pLighting2Defaults );
com::sun::star::uno::Any* pAny;
int nFinalDirection = -1;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
// see if this is an extruded customshape
if( !bHasCustomShape )
{
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
Direction3D aFirstLightDirection( 50000, 0, 10000 );
Direction3D aSecondLightDirection( -50000, 0, 10000 );
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sFirstLightDirection );
if( pAny )
*pAny >>= aFirstLightDirection;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sSecondLightDirection );
if( pAny )
*pAny >>= aSecondLightDirection;
int nDirection = -1;
int j;
for( j = 0; j < 9; j++ )
{
if( compare_direction( aFirstLightDirection, pLighting1Defaults[j] ) &&
compare_direction( aSecondLightDirection, pLighting2Defaults[j] ))
{
nDirection = j;
break;
}
}
if( nFinalDirection == -1 )
{
nFinalDirection = nDirection;
}
else if( nDirection != nFinalDirection )
{
nFinalDirection = -1;
}
if( nFinalDirection == -1 )
break;
}
}
if( bHasCustomShape )
rSet.Put( SfxInt32Item( SID_EXTRUSION_LIGHTING_DIRECTION, (sal_Int32)nFinalDirection ) );
else
rSet.DisableItem( SID_EXTRUSION_LIGHTING_DIRECTION );
}
void getExtrusionLightingIntensityState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sBrightness( RTL_CONSTASCII_USTRINGPARAM ( "Brightness" ) );
com::sun::star::uno::Any* pAny;
int nFinalLevel = -1;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
// see if this is an extruded customshape
if( !bHasCustomShape )
{
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
double fBrightness = 22178.0 / 655.36;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sBrightness );
if( pAny )
*pAny >>= fBrightness;
int nLevel;
if( fBrightness >= 30.0 )
{
nLevel = 0; // Bright
}
else if( fBrightness >= 10.0 )
{
nLevel = 1; // Noraml;
}
else
{
nLevel = 2; // Dim
}
if( nFinalLevel == -1 )
{
nFinalLevel = nLevel;
}
else if( nFinalLevel != nLevel )
{
nFinalLevel = -1;
break;
}
}
}
if( bHasCustomShape )
rSet.Put( SfxInt32Item( SID_EXTRUSION_LIGHTING_INTENSITY, nFinalLevel ) );
else
rSet.DisableItem( SID_EXTRUSION_LIGHTING_INTENSITY );
}
void getExtrusionColorState( SdrView* pSdrView, SfxItemSet& rSet )
{
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
static const rtl::OUString sExtrusionColor( RTL_CONSTASCII_USTRINGPARAM ( "Color" ) );
com::sun::star::uno::Any* pAny;
bool bInit = false;
bool bAmbigius = false;
Color aFinalColor;
bool bHasCustomShape = false;
for(i=0;i<nCount; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
// see if this is an extruded customshape
if( !bHasCustomShape )
{
Any* pAny_ = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny_ )
*pAny_ >>= bHasCustomShape;
if( !bHasCustomShape )
continue;
}
Color aColor;
bool bUseColor = false;
pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusionColor );
if( pAny )
*pAny >>= bUseColor;
if( bUseColor )
{
const XSecondaryFillColorItem& rItem = *(XSecondaryFillColorItem*)&(pObj->GetMergedItem( XATTR_SECONDARYFILLCOLOR ));
aColor = rItem.GetColorValue();
}
else
{
aColor = COL_AUTO;
}
if( !bInit )
{
aFinalColor = aColor;
bInit = true;
}
else if( aFinalColor != aColor )
{
bAmbigius = true;
break;
}
}
}
if( bAmbigius )
aFinalColor = COL_AUTO;
if( bHasCustomShape )
rSet.Put( SvxColorItem( aFinalColor, SID_EXTRUSION_3D_COLOR ) );
else
rSet.DisableItem( SID_EXTRUSION_3D_COLOR );
}
namespace svx {
bool checkForSelectedCustomShapes( SdrView* pSdrView, bool bOnlyExtruded )
{
static const rtl::OUString sExtrusion( RTL_CONSTASCII_USTRINGPARAM ( "Extrusion" ) );
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
sal_uIntPtr nCount = rMarkList.GetMarkCount(), i;
bool bFound = false;
for(i=0;(i<nCount) && !bFound ; i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if( pObj->ISA(SdrObjCustomShape) )
{
if( bOnlyExtruded )
{
SdrCustomShapeGeometryItem aGeometryItem( (SdrCustomShapeGeometryItem&)pObj->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY ) );
Any* pAny = aGeometryItem.GetPropertyValueByName( sExtrusion, sExtrusion );
if( pAny )
*pAny >>= bFound;
}
else
{
bFound = true;
}
}
}
return bFound;
}
}
void ExtrusionBar::getState( SdrView* pSdrView, SfxItemSet& rSet )
{
if (rSet.GetItemState(SID_EXTRUSION_DIRECTION) != SFX_ITEM_UNKNOWN)
{
getExtrusionDirectionState( pSdrView, rSet );
}
if (rSet.GetItemState(SID_EXTRUSION_PROJECTION) != SFX_ITEM_UNKNOWN)
{
getExtrusionProjectionState( pSdrView, rSet );
}
const bool bOnlyExtrudedCustomShapes =
checkForSelectedCustomShapes( pSdrView, true );
if (rSet.GetItemState(SID_EXTRUSION_TILT_DOWN) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_TILT_DOWN );
}
if (rSet.GetItemState(SID_EXTRUSION_TILT_DOWN) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_TILT_DOWN );
}
if (rSet.GetItemState(SID_EXTRUSION_TILT_UP) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_TILT_UP );
}
if (rSet.GetItemState(SID_EXTRUSION_TILT_LEFT) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_TILT_LEFT );
}
if (rSet.GetItemState(SID_EXTRUSION_TILT_RIGHT) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_TILT_RIGHT );
}
if (rSet.GetItemState(SID_EXTRUSION_3D_COLOR) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_3D_COLOR );
}
if (rSet.GetItemState(SID_EXTRUSION_DEPTH_FLOATER) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_DEPTH_FLOATER );
}
if (rSet.GetItemState(SID_EXTRUSION_DIRECTION_FLOATER) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_DIRECTION_FLOATER );
}
if (rSet.GetItemState(SID_EXTRUSION_LIGHTING_FLOATER) != SFX_ITEM_UNKNOWN)
{
if (! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_LIGHTING_FLOATER );
}
if (rSet.GetItemState(SID_EXTRUSION_SURFACE_FLOATER) != SFX_ITEM_UNKNOWN)
{
if(! bOnlyExtrudedCustomShapes)
rSet.DisableItem( SID_EXTRUSION_SURFACE_FLOATER );
}
if (rSet.GetItemState(SID_EXTRUSION_TOOGLE) != SFX_ITEM_UNKNOWN)
{
if( !checkForSelectedCustomShapes( pSdrView, false ) )
rSet.DisableItem( SID_EXTRUSION_TOOGLE );
}
if (rSet.GetItemState(SID_EXTRUSION_DEPTH) != SFX_ITEM_UNKNOWN)
{
getExtrusionDepthState( pSdrView, rSet );
}
if (rSet.GetItemState(SID_EXTRUSION_SURFACE) != SFX_ITEM_UNKNOWN)
{
getExtrusionSurfaceState( pSdrView, rSet );
}
if (rSet.GetItemState(SID_EXTRUSION_LIGHTING_INTENSITY) != SFX_ITEM_UNKNOWN)
{
getExtrusionLightingIntensityState( pSdrView, rSet );
}
if (rSet.GetItemState(SID_EXTRUSION_LIGHTING_DIRECTION) != SFX_ITEM_UNKNOWN)
{
getExtrusionLightingDirectionState( pSdrView, rSet );
}
if (rSet.GetItemState(SID_EXTRUSION_3D_COLOR) != SFX_ITEM_UNKNOWN)
{
getExtrusionColorState( pSdrView, rSet );
}
}