blob: f07b1a0b549145296e19176d627d473c900774f5 [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_sw.hxx"
#include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/text/VertOrientation.hpp>
#include <com/sun/star/text/HorizontalAdjust.hpp>
#include <com/sun/star/text/DocumentStatistic.hpp>
#include <com/sun/star/text/HoriOrientation.hpp>
#include <com/sun/star/text/HoriOrientationFormat.hpp>
#include <com/sun/star/text/NotePrintMode.hpp>
#include <com/sun/star/text/SizeType.hpp>
#include <com/sun/star/text/VertOrientationFormat.hpp>
#include <com/sun/star/text/WrapTextMode.hpp>
#include <com/sun/star/text/GraphicCrop.hpp>
#include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp>
#include <com/sun/star/drawing/ColorMode.hpp>
#include <svtools/grfmgr.hxx>
#include <swtypes.hxx>
#include <grfatr.hxx>
#include <swunohelper.hxx>
#ifndef _CMDID_H
#include <cmdid.h>
#endif
#ifndef _UNOMID_H
#include <unomid.h>
#endif
using namespace ::com::sun::star;
TYPEINIT1_AUTOFACTORY(SwCropGrf, SfxPoolItem)
TYPEINIT1_AUTOFACTORY(SwGammaGrf, SfxPoolItem)
/******************************************************************************
* Implementierung class SwMirrorGrf
******************************************************************************/
SfxPoolItem* SwMirrorGrf::Clone( SfxItemPool* ) const
{
return new SwMirrorGrf( *this );
}
sal_uInt16 SwMirrorGrf::GetValueCount() const
{
return RES_MIRROR_GRAPH_END - RES_MIRROR_GRAPH_BEGIN;
}
int SwMirrorGrf::operator==( const SfxPoolItem& rItem) const
{
return SfxEnumItem::operator==(rItem) &&
((SwMirrorGrf&)rItem).IsGrfToggle() == IsGrfToggle();
}
sal_Bool lcl_IsHoriOnEvenPages(int nEnum, sal_Bool bToggle)
{
sal_Bool bEnum = nEnum == RES_MIRROR_GRAPH_VERT ||
nEnum == RES_MIRROR_GRAPH_BOTH;
return bEnum != bToggle;
}
sal_Bool lcl_IsHoriOnOddPages(int nEnum)
{
sal_Bool bEnum = nEnum == RES_MIRROR_GRAPH_VERT ||
nEnum == RES_MIRROR_GRAPH_BOTH;
return bEnum;
}
sal_Bool SwMirrorGrf::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
{
sal_Bool bRet = sal_True,
bVal;
// Vertikal und Horizontal sind mal getauscht worden!
nMemberId &= ~CONVERT_TWIPS;
switch ( nMemberId )
{
case MID_MIRROR_HORZ_EVEN_PAGES:
bVal = lcl_IsHoriOnEvenPages(GetValue(), IsGrfToggle());
break;
case MID_MIRROR_HORZ_ODD_PAGES:
bVal = lcl_IsHoriOnOddPages(GetValue());
break;
case MID_MIRROR_VERT:
bVal = GetValue() == RES_MIRROR_GRAPH_HOR ||
GetValue() == RES_MIRROR_GRAPH_BOTH;
break;
default:
ASSERT( !this, "unknown MemberId" );
bRet = sal_False;
}
rVal.setValue( &bVal, ::getBooleanCppuType() );
return bRet;
}
sal_Bool SwMirrorGrf::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
{
sal_Bool bRet = sal_True;
sal_Bool bVal = *(sal_Bool*)rVal.getValue();
// Vertikal und Horizontal sind mal getauscht worden!
nMemberId &= ~CONVERT_TWIPS;
switch ( nMemberId )
{
case MID_MIRROR_HORZ_EVEN_PAGES:
case MID_MIRROR_HORZ_ODD_PAGES:
{
sal_Bool bIsVert = GetValue() == RES_MIRROR_GRAPH_HOR ||
GetValue() == RES_MIRROR_GRAPH_BOTH;
sal_Bool bOnOddPages = nMemberId == MID_MIRROR_HORZ_EVEN_PAGES ?
lcl_IsHoriOnOddPages(GetValue()) : bVal;
sal_Bool bOnEvenPages = nMemberId == MID_MIRROR_HORZ_ODD_PAGES ?
lcl_IsHoriOnEvenPages(GetValue(), IsGrfToggle()) : bVal;
MirrorGraph nEnum = bOnOddPages ?
bIsVert ? RES_MIRROR_GRAPH_BOTH : RES_MIRROR_GRAPH_VERT :
bIsVert ? RES_MIRROR_GRAPH_HOR : RES_MIRROR_GRAPH_DONT;
sal_Bool bToggle = bOnOddPages != bOnEvenPages;
SetValue(static_cast<sal_uInt16>(nEnum));
SetGrfToggle( bToggle );
}
break;
case MID_MIRROR_VERT:
if ( bVal )
{
if ( GetValue() == RES_MIRROR_GRAPH_VERT )
SetValue( RES_MIRROR_GRAPH_BOTH );
else if ( GetValue() != RES_MIRROR_GRAPH_BOTH )
SetValue( RES_MIRROR_GRAPH_HOR );
}
else
{
if ( GetValue() == RES_MIRROR_GRAPH_BOTH )
SetValue( RES_MIRROR_GRAPH_VERT );
else if ( GetValue() == RES_MIRROR_GRAPH_HOR )
SetValue( RES_MIRROR_GRAPH_DONT );
}
break;
default:
ASSERT( !this, "unknown MemberId" );
bRet = sal_False;
}
return bRet;
}
/******************************************************************************
* Implementierung class SwCropGrf
******************************************************************************/
SwCropGrf::SwCropGrf()
: SvxGrfCrop( RES_GRFATR_CROPGRF )
{}
SwCropGrf::SwCropGrf(sal_Int32 nL, sal_Int32 nR, sal_Int32 nT, sal_Int32 nB )
: SvxGrfCrop( nL, nR, nT, nB, RES_GRFATR_CROPGRF )
{}
SfxPoolItem* SwCropGrf::Clone( SfxItemPool* ) const
{
return new SwCropGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwRotationGrf::Clone( SfxItemPool * ) const
{
return new SwRotationGrf( GetValue(), aUnrotatedSize );
}
int SwRotationGrf::operator==( const SfxPoolItem& rCmp ) const
{
return SfxUInt16Item::operator==( rCmp ) &&
GetUnrotatedSize() == ((SwRotationGrf&)rCmp).GetUnrotatedSize();
}
sal_Bool SwRotationGrf::QueryValue( uno::Any& rVal, sal_uInt8 ) const
{
// SfxUInt16Item::QueryValue returns sal_Int32 in Any now... (srx642w)
// where we still want this to be a sal_Int16
rVal <<= (sal_Int16)GetValue();
return sal_True;
}
sal_Bool SwRotationGrf::PutValue( const uno::Any& rVal, sal_uInt8 )
{
// SfxUInt16Item::QueryValue returns sal_Int32 in Any now... (srx642w)
// where we still want this to be a sal_Int16
sal_Int16 nValue = 0;
if (rVal >>= nValue)
{
// sal_uInt16 argument needed
SetValue( (sal_uInt16) nValue );
return sal_True;
}
DBG_ERROR( "SwRotationGrf::PutValue - Wrong type!" );
return sal_False;
}
// ------------------------------------------------------------------
SfxPoolItem* SwLuminanceGrf::Clone( SfxItemPool * ) const
{
return new SwLuminanceGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwContrastGrf::Clone( SfxItemPool * ) const
{
return new SwContrastGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwChannelRGrf::Clone( SfxItemPool * ) const
{
return new SwChannelRGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwChannelGGrf::Clone( SfxItemPool * ) const
{
return new SwChannelGGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwChannelBGrf::Clone( SfxItemPool * ) const
{
return new SwChannelBGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwGammaGrf::Clone( SfxItemPool * ) const
{
return new SwGammaGrf( *this );
}
int SwGammaGrf::operator==( const SfxPoolItem& rCmp ) const
{
return SfxPoolItem::operator==( rCmp ) &&
nValue == ((SwGammaGrf&)rCmp).GetValue();
}
sal_Bool SwGammaGrf::QueryValue( uno::Any& rVal, sal_uInt8 ) const
{
rVal <<= nValue;
return sal_True;
}
sal_Bool SwGammaGrf::PutValue( const uno::Any& rVal, sal_uInt8 )
{
return rVal >>= nValue;
}
// ------------------------------------------------------------------
SfxPoolItem* SwInvertGrf::Clone( SfxItemPool * ) const
{
return new SwInvertGrf( *this );
}
// ------------------------------------------------------------------
SfxPoolItem* SwTransparencyGrf::Clone( SfxItemPool * ) const
{
return new SwTransparencyGrf( *this );
}
// ------------------------------------------------------------------
sal_Bool SwTransparencyGrf::QueryValue( uno::Any& rVal,
sal_uInt8 ) const
{
DBG_ASSERT(ISA(SfxByteItem),"Put/QueryValue should be removed!");
sal_Int16 nRet = GetValue();
DBG_ASSERT( 0 <= nRet && nRet <= 100, "value out of range" );
rVal <<= nRet;
return sal_True;
}
// ------------------------------------------------------------------
sal_Bool SwTransparencyGrf::PutValue( const uno::Any& rVal,
sal_uInt8 )
{
//temporary conversion until this is a SfxInt16Item!
DBG_ASSERT(ISA(SfxByteItem),"Put/QueryValue should be removed!");
sal_Int16 nVal = 0;
if(!(rVal >>= nVal) || nVal < -100 || nVal > 100)
return sal_False;
if(nVal < 0)
{
// for compatibility with old documents
// OD 05.11.2002 #104308# - introduce rounding as for SO 6.0 PP2
// introduced by fix of #104293#.
nVal = ( ( nVal * 128 ) - (99/2) ) / 100;
nVal += 128;
}
DBG_ASSERT( 0 <= nVal && nVal <= 100, "value out of range" );
SetValue(static_cast<sal_uInt8>(nVal));
return sal_True;
}
// ------------------------------------------------------------------
SfxPoolItem* SwDrawModeGrf::Clone( SfxItemPool * ) const
{
return new SwDrawModeGrf( *this );
}
sal_uInt16 SwDrawModeGrf::GetValueCount() const
{
// GRAPHICDRAWMODE_STANDARD = 0,
// GRAPHICDRAWMODE_GREYS = 1,
// GRAPHICDRAWMODE_MONO = 2,
// GRAPHICDRAWMODE_WATERMARK = 3
return GRAPHICDRAWMODE_WATERMARK + 1;
}
sal_Bool SwDrawModeGrf::QueryValue( uno::Any& rVal,
sal_uInt8 ) const
{
drawing::ColorMode eRet = (drawing::ColorMode)GetEnumValue();
rVal <<= eRet;
return sal_True;
}
sal_Bool SwDrawModeGrf::PutValue( const uno::Any& rVal,
sal_uInt8 )
{
sal_Int32 eVal = SWUnoHelper::GetEnumAsInt32( rVal );
if(eVal >= 0 && eVal <= GRAPHICDRAWMODE_WATERMARK)
{
SetEnumValue((sal_uInt16)eVal);
return sal_True;
}
return sal_False;
}