1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_forms.hxx" 30*cdf0e10cSrcweir #include "rtattributehandler.hxx" 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #ifndef _SVX_SVXIDS_HRC 33*cdf0e10cSrcweir #include <svx/svxids.hrc> 34*cdf0e10cSrcweir #endif 35*cdf0e10cSrcweir #include <editeng/eeitem.hxx> 36*cdf0e10cSrcweir #include <svl/itemset.hxx> 37*cdf0e10cSrcweir #include <svl/itempool.hxx> 38*cdf0e10cSrcweir #include <tools/mapunit.hxx> 39*cdf0e10cSrcweir #include <vcl/mapmod.hxx> 40*cdf0e10cSrcweir #include <vcl/outdev.hxx> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #define ITEMID_ADJUST EE_PARA_JUST 43*cdf0e10cSrcweir #include <editeng/adjitem.hxx> 44*cdf0e10cSrcweir #define ITEMID_WEIGHT EE_CHAR_WEIGHT 45*cdf0e10cSrcweir #include <editeng/wghtitem.hxx> 46*cdf0e10cSrcweir #define ITEMID_ESCAPEMENT EE_CHAR_ESCAPEMENT 47*cdf0e10cSrcweir #include <editeng/escpitem.hxx> 48*cdf0e10cSrcweir #define ITEMID_LINESPACING EE_PARA_SBL 49*cdf0e10cSrcweir #include <editeng/lspcitem.hxx> 50*cdf0e10cSrcweir #define ITEMID_FONTHEIGHT EE_CHAR_FONTHEIGHT 51*cdf0e10cSrcweir #include <editeng/fhgtitem.hxx> 52*cdf0e10cSrcweir #define ITEMID_FRAMEDIR EE_PARA_WRITINGDIR 53*cdf0e10cSrcweir #include <editeng/frmdiritem.hxx> 54*cdf0e10cSrcweir #include <editeng/scripttypeitem.hxx> 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir //........................................................................ 57*cdf0e10cSrcweir namespace frm 58*cdf0e10cSrcweir { 59*cdf0e10cSrcweir //........................................................................ 60*cdf0e10cSrcweir //==================================================================== 61*cdf0e10cSrcweir //= ReferenceBase 62*cdf0e10cSrcweir //==================================================================== 63*cdf0e10cSrcweir //-------------------------------------------------------------------- 64*cdf0e10cSrcweir oslInterlockedCount SAL_CALL ReferenceBase::acquire() 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir return osl_incrementInterlockedCount( &m_refCount ); 67*cdf0e10cSrcweir } 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir //-------------------------------------------------------------------- 70*cdf0e10cSrcweir oslInterlockedCount SAL_CALL ReferenceBase::release() 71*cdf0e10cSrcweir { 72*cdf0e10cSrcweir return osl_decrementInterlockedCount( &m_refCount ); 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir //-------------------------------------------------------------------- 76*cdf0e10cSrcweir ReferenceBase::~ReferenceBase() 77*cdf0e10cSrcweir { 78*cdf0e10cSrcweir } 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir //==================================================================== 81*cdf0e10cSrcweir //= AttributeHandler 82*cdf0e10cSrcweir //==================================================================== 83*cdf0e10cSrcweir //-------------------------------------------------------------------- 84*cdf0e10cSrcweir AttributeHandler::AttributeHandler( AttributeId _nAttributeId, WhichId _nWhichId ) 85*cdf0e10cSrcweir :m_nAttribute( _nAttributeId ) 86*cdf0e10cSrcweir ,m_nWhich ( _nWhichId ) 87*cdf0e10cSrcweir { 88*cdf0e10cSrcweir } 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir //-------------------------------------------------------------------- 91*cdf0e10cSrcweir AttributeHandler::~AttributeHandler() 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir } 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir //-------------------------------------------------------------------- 96*cdf0e10cSrcweir oslInterlockedCount SAL_CALL AttributeHandler::acquire() 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir return ReferenceBase::acquire(); 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir //-------------------------------------------------------------------- 102*cdf0e10cSrcweir oslInterlockedCount SAL_CALL AttributeHandler::release() 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir return ReferenceBase::release(); 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir //-------------------------------------------------------------------- 108*cdf0e10cSrcweir AttributeId AttributeHandler::getAttributeId( ) const 109*cdf0e10cSrcweir { 110*cdf0e10cSrcweir return getAttribute(); 111*cdf0e10cSrcweir } 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir //-------------------------------------------------------------------- 114*cdf0e10cSrcweir AttributeCheckState AttributeHandler::implGetCheckState( const SfxPoolItem& /*_rItem*/ ) const 115*cdf0e10cSrcweir { 116*cdf0e10cSrcweir OSL_ENSURE( sal_False, "AttributeHandler::implGetCheckState: not to be called!" ); 117*cdf0e10cSrcweir return eIndetermined; 118*cdf0e10cSrcweir } 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir //-------------------------------------------------------------------- 121*cdf0e10cSrcweir void AttributeHandler::putItemForScript( SfxItemSet& _rAttribs, const SfxPoolItem& _rItem, ScriptType _nForScriptType ) const 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir SvxScriptSetItem aSetItem( (WhichId)getAttributeId(), *_rAttribs.GetPool() ); 124*cdf0e10cSrcweir aSetItem.PutItemForScriptType( _nForScriptType, _rItem ); 125*cdf0e10cSrcweir _rAttribs.Put( aSetItem.GetItemSet(), sal_False ); 126*cdf0e10cSrcweir } 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir //-------------------------------------------------------------------- 129*cdf0e10cSrcweir AttributeCheckState AttributeHandler::getCheckState( const SfxItemSet& _rAttribs ) const 130*cdf0e10cSrcweir { 131*cdf0e10cSrcweir AttributeCheckState eSimpleState( eIndetermined ); 132*cdf0e10cSrcweir const SfxPoolItem* pItem = _rAttribs.GetItem( getWhich() ); 133*cdf0e10cSrcweir if ( pItem ) 134*cdf0e10cSrcweir eSimpleState = implGetCheckState( *pItem ); 135*cdf0e10cSrcweir return eSimpleState; 136*cdf0e10cSrcweir } 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir //-------------------------------------------------------------------- 139*cdf0e10cSrcweir AttributeState AttributeHandler::getState( const SfxItemSet& _rAttribs ) const 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir AttributeState aState( eIndetermined ); 142*cdf0e10cSrcweir aState.eSimpleState = getCheckState( _rAttribs ); 143*cdf0e10cSrcweir return aState; 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir //==================================================================== 147*cdf0e10cSrcweir //= AttributeHandlerFactory 148*cdf0e10cSrcweir //==================================================================== 149*cdf0e10cSrcweir //-------------------------------------------------------------------- 150*cdf0e10cSrcweir namespace 151*cdf0e10cSrcweir { 152*cdf0e10cSrcweir static WhichId lcl_implGetWhich( const SfxItemPool& _rPool, AttributeId _nAttributeId ) 153*cdf0e10cSrcweir { 154*cdf0e10cSrcweir WhichId nWhich = 0; 155*cdf0e10cSrcweir switch ( _nAttributeId ) 156*cdf0e10cSrcweir { 157*cdf0e10cSrcweir case SID_ATTR_CHAR_LATIN_FONTHEIGHT:nWhich = EE_CHAR_FONTHEIGHT;break; 158*cdf0e10cSrcweir case SID_ATTR_CHAR_LATIN_FONT: nWhich = EE_CHAR_FONTINFO; break; 159*cdf0e10cSrcweir case SID_ATTR_CHAR_LATIN_LANGUAGE: nWhich = EE_CHAR_LANGUAGE; break; 160*cdf0e10cSrcweir case SID_ATTR_CHAR_LATIN_POSTURE: nWhich = EE_CHAR_ITALIC; break; 161*cdf0e10cSrcweir case SID_ATTR_CHAR_LATIN_WEIGHT: nWhich = EE_CHAR_WEIGHT; break; 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir default: 164*cdf0e10cSrcweir nWhich = _rPool.GetWhich( (SfxSlotId)_nAttributeId ); 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir return nWhich; 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir //-------------------------------------------------------------------- 170*cdf0e10cSrcweir ::rtl::Reference< IAttributeHandler > AttributeHandlerFactory::getHandlerFor( AttributeId _nAttributeId, const SfxItemPool& _rEditEnginePool ) 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir ::rtl::Reference< IAttributeHandler > pReturn; 173*cdf0e10cSrcweir switch ( _nAttributeId ) 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_LEFT : 176*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_CENTER: 177*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_RIGHT : 178*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_BLOCK : 179*cdf0e10cSrcweir pReturn = new ParaAlignmentHandler( _nAttributeId ); 180*cdf0e10cSrcweir break; 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_10: 183*cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_15: 184*cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_20: 185*cdf0e10cSrcweir pReturn = new LineSpacingHandler( _nAttributeId ); 186*cdf0e10cSrcweir break; 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir case SID_SET_SUPER_SCRIPT: 189*cdf0e10cSrcweir case SID_SET_SUB_SCRIPT: 190*cdf0e10cSrcweir pReturn = new EscapementHandler( _nAttributeId ); 191*cdf0e10cSrcweir break; 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir case SID_ATTR_CHAR_FONTHEIGHT: 194*cdf0e10cSrcweir case SID_ATTR_CHAR_CTL_FONTHEIGHT: 195*cdf0e10cSrcweir case SID_ATTR_CHAR_CJK_FONTHEIGHT: 196*cdf0e10cSrcweir case SID_ATTR_CHAR_LATIN_FONTHEIGHT: 197*cdf0e10cSrcweir pReturn = new FontSizeHandler( _nAttributeId, lcl_implGetWhich( _rEditEnginePool, _nAttributeId ) ); 198*cdf0e10cSrcweir break; 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir case SID_ATTR_PARA_LEFT_TO_RIGHT: 201*cdf0e10cSrcweir case SID_ATTR_PARA_RIGHT_TO_LEFT: 202*cdf0e10cSrcweir pReturn = new ParagraphDirectionHandler( _nAttributeId ); 203*cdf0e10cSrcweir break; 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir case SID_ATTR_PARA_HANGPUNCTUATION: 206*cdf0e10cSrcweir case SID_ATTR_PARA_FORBIDDEN_RULES: 207*cdf0e10cSrcweir case SID_ATTR_PARA_SCRIPTSPACE: 208*cdf0e10cSrcweir pReturn = new BooleanHandler( _nAttributeId, lcl_implGetWhich( _rEditEnginePool, _nAttributeId ) ); 209*cdf0e10cSrcweir break; 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir default: 212*cdf0e10cSrcweir pReturn = new SlotHandler( (SfxSlotId)_nAttributeId, lcl_implGetWhich( _rEditEnginePool, _nAttributeId ) ); 213*cdf0e10cSrcweir break; 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir return pReturn; 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir //==================================================================== 221*cdf0e10cSrcweir //= ParaAlignmentHandler 222*cdf0e10cSrcweir //==================================================================== 223*cdf0e10cSrcweir //-------------------------------------------------------------------- 224*cdf0e10cSrcweir ParaAlignmentHandler::ParaAlignmentHandler( AttributeId _nAttributeId ) 225*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, EE_PARA_JUST ) 226*cdf0e10cSrcweir ,m_eAdjust( SVX_ADJUST_CENTER ) 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir switch ( getAttribute() ) 229*cdf0e10cSrcweir { 230*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_LEFT : m_eAdjust = SVX_ADJUST_LEFT; break; 231*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_CENTER: m_eAdjust = SVX_ADJUST_CENTER; break; 232*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_RIGHT : m_eAdjust = SVX_ADJUST_RIGHT; break; 233*cdf0e10cSrcweir case SID_ATTR_PARA_ADJUST_BLOCK : m_eAdjust = SVX_ADJUST_BLOCK; break; 234*cdf0e10cSrcweir default: 235*cdf0e10cSrcweir OSL_ENSURE( sal_False, "ParaAlignmentHandler::ParaAlignmentHandler: invalid slot!" ); 236*cdf0e10cSrcweir break; 237*cdf0e10cSrcweir } 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir //-------------------------------------------------------------------- 241*cdf0e10cSrcweir AttributeCheckState ParaAlignmentHandler::implGetCheckState( const SfxPoolItem& _rItem ) const 242*cdf0e10cSrcweir { 243*cdf0e10cSrcweir OSL_ENSURE( _rItem.ISA( SvxAdjustItem ), "ParaAlignmentHandler::implGetCheckState: invalid pool item!" ); 244*cdf0e10cSrcweir SvxAdjust eAdjust = static_cast< const SvxAdjustItem& >( _rItem ).GetAdjust(); 245*cdf0e10cSrcweir return ( eAdjust == m_eAdjust ) ? eChecked : eUnchecked; 246*cdf0e10cSrcweir } 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir //-------------------------------------------------------------------- 249*cdf0e10cSrcweir void ParaAlignmentHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir OSL_ENSURE( !_pAdditionalArg, "ParaAlignmentHandler::executeAttribute: this is a simple toggle attribute - no args possible!" ); 252*cdf0e10cSrcweir (void)_pAdditionalArg; 253*cdf0e10cSrcweir _rNewAttribs.Put( SvxAdjustItem( m_eAdjust, getWhich() ) ); 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir //==================================================================== 257*cdf0e10cSrcweir //= LineSpacingHandler 258*cdf0e10cSrcweir //==================================================================== 259*cdf0e10cSrcweir //-------------------------------------------------------------------- 260*cdf0e10cSrcweir LineSpacingHandler::LineSpacingHandler( AttributeId _nAttributeId ) 261*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, EE_PARA_SBL ) 262*cdf0e10cSrcweir ,m_nLineSpace( 100 ) 263*cdf0e10cSrcweir { 264*cdf0e10cSrcweir switch ( getAttribute() ) 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_10: m_nLineSpace = 100; break; 267*cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_15: m_nLineSpace = 150; break; 268*cdf0e10cSrcweir case SID_ATTR_PARA_LINESPACE_20: m_nLineSpace = 200; break; 269*cdf0e10cSrcweir default: 270*cdf0e10cSrcweir OSL_ENSURE( sal_False, "LineSpacingHandler::LineSpacingHandler: invalid slot!" ); 271*cdf0e10cSrcweir break; 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir } 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir //-------------------------------------------------------------------- 276*cdf0e10cSrcweir AttributeCheckState LineSpacingHandler::implGetCheckState( const SfxPoolItem& _rItem ) const 277*cdf0e10cSrcweir { 278*cdf0e10cSrcweir OSL_ENSURE( _rItem.ISA( SvxLineSpacingItem ), "LineSpacingHandler::implGetCheckState: invalid pool item!" ); 279*cdf0e10cSrcweir sal_uInt16 nLineSpace = static_cast< const SvxLineSpacingItem& >( _rItem ).GetPropLineSpace(); 280*cdf0e10cSrcweir return ( nLineSpace == m_nLineSpace ) ? eChecked : eUnchecked; 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir //-------------------------------------------------------------------- 284*cdf0e10cSrcweir void LineSpacingHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir OSL_ENSURE( !_pAdditionalArg, "LineSpacingHandler::executeAttribute: this is a simple toggle attribute - no args possible!" ); 287*cdf0e10cSrcweir (void)_pAdditionalArg; 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir SvxLineSpacingItem aLineSpacing( m_nLineSpace, getWhich() ); 290*cdf0e10cSrcweir aLineSpacing.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO; 291*cdf0e10cSrcweir if ( 100 == m_nLineSpace ) 292*cdf0e10cSrcweir aLineSpacing.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF; 293*cdf0e10cSrcweir else 294*cdf0e10cSrcweir aLineSpacing.SetPropLineSpace( (sal_uInt8)m_nLineSpace ); 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir _rNewAttribs.Put( aLineSpacing ); 297*cdf0e10cSrcweir } 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir //==================================================================== 300*cdf0e10cSrcweir //= EscapementHandler 301*cdf0e10cSrcweir //==================================================================== 302*cdf0e10cSrcweir //-------------------------------------------------------------------- 303*cdf0e10cSrcweir EscapementHandler::EscapementHandler( AttributeId _nAttributeId ) 304*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, EE_CHAR_ESCAPEMENT ) 305*cdf0e10cSrcweir ,m_eEscapement( SVX_ESCAPEMENT_OFF ) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir switch ( getAttribute() ) 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir case SID_SET_SUPER_SCRIPT : m_eEscapement = SVX_ESCAPEMENT_SUPERSCRIPT; break; 310*cdf0e10cSrcweir case SID_SET_SUB_SCRIPT : m_eEscapement = SVX_ESCAPEMENT_SUBSCRIPT; break; 311*cdf0e10cSrcweir default: 312*cdf0e10cSrcweir OSL_ENSURE( sal_False, "EscapementHandler::EscapementHandler: invalid slot!" ); 313*cdf0e10cSrcweir break; 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir } 316*cdf0e10cSrcweir 317*cdf0e10cSrcweir //-------------------------------------------------------------------- 318*cdf0e10cSrcweir AttributeCheckState EscapementHandler::implGetCheckState( const SfxPoolItem& _rItem ) const 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir OSL_ENSURE( _rItem.ISA( SvxEscapementItem ), "EscapementHandler::getState: invalid pool item!" ); 321*cdf0e10cSrcweir SvxEscapement eEscapement = static_cast< const SvxEscapementItem& >( _rItem ).GetEscapement(); 322*cdf0e10cSrcweir return ( eEscapement == m_eEscapement ) ? eChecked : eUnchecked; 323*cdf0e10cSrcweir } 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir //-------------------------------------------------------------------- 326*cdf0e10cSrcweir void EscapementHandler::executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir OSL_ENSURE( !_pAdditionalArg, "EscapementHandler::executeAttribute: this is a simple toggle attribute - no args possible!" ); 329*cdf0e10cSrcweir // well, in theory we could allow an SvxEscapementItem here, but this is not needed 330*cdf0e10cSrcweir (void)_pAdditionalArg; 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir bool bIsChecked = getCheckState( _rCurrentAttribs ) == eChecked; 333*cdf0e10cSrcweir _rNewAttribs.Put( SvxEscapementItem( bIsChecked ? SVX_ESCAPEMENT_OFF : m_eEscapement, getWhich() ) ); 334*cdf0e10cSrcweir } 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir //==================================================================== 337*cdf0e10cSrcweir //= SlotHandler 338*cdf0e10cSrcweir //==================================================================== 339*cdf0e10cSrcweir //-------------------------------------------------------------------- 340*cdf0e10cSrcweir SlotHandler::SlotHandler( AttributeId _nAttributeId, WhichId _nWhichId ) 341*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, _nWhichId ) 342*cdf0e10cSrcweir ,m_bScriptDependent( false ) 343*cdf0e10cSrcweir { 344*cdf0e10cSrcweir m_bScriptDependent = ( SID_ATTR_CHAR_WEIGHT == _nAttributeId ) 345*cdf0e10cSrcweir || ( SID_ATTR_CHAR_POSTURE == _nAttributeId ) 346*cdf0e10cSrcweir || ( SID_ATTR_CHAR_FONT == _nAttributeId ); 347*cdf0e10cSrcweir } 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir //-------------------------------------------------------------------- 350*cdf0e10cSrcweir AttributeState SlotHandler::getState( const SfxItemSet& _rAttribs ) const 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir AttributeState aState( eIndetermined ); 353*cdf0e10cSrcweir 354*cdf0e10cSrcweir const SfxPoolItem* pItem = _rAttribs.GetItem( getWhich() ); 355*cdf0e10cSrcweir if ( pItem ) 356*cdf0e10cSrcweir aState.setItem( pItem->Clone() ); 357*cdf0e10cSrcweir 358*cdf0e10cSrcweir return aState; 359*cdf0e10cSrcweir } 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir //-------------------------------------------------------------------- 362*cdf0e10cSrcweir void SlotHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const 363*cdf0e10cSrcweir { 364*cdf0e10cSrcweir if ( _pAdditionalArg ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir SfxPoolItem* pCorrectWich = _pAdditionalArg->Clone(); 367*cdf0e10cSrcweir pCorrectWich->SetWhich( getWhich() ); 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir if ( m_bScriptDependent ) 370*cdf0e10cSrcweir putItemForScript( _rNewAttribs, *pCorrectWich, _nForScriptType ); 371*cdf0e10cSrcweir else 372*cdf0e10cSrcweir _rNewAttribs.Put( *pCorrectWich ); 373*cdf0e10cSrcweir DELETEZ( pCorrectWich ); 374*cdf0e10cSrcweir } 375*cdf0e10cSrcweir else 376*cdf0e10cSrcweir OSL_ENSURE( sal_False, "SlotHandler::executeAttribute: need attributes to do something!" ); 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir //==================================================================== 380*cdf0e10cSrcweir //= FontSizeHandler 381*cdf0e10cSrcweir //==================================================================== 382*cdf0e10cSrcweir //-------------------------------------------------------------------- 383*cdf0e10cSrcweir FontSizeHandler::FontSizeHandler( AttributeId _nAttributeId, WhichId _nWhichId ) 384*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, _nWhichId ) 385*cdf0e10cSrcweir { 386*cdf0e10cSrcweir OSL_ENSURE( ( _nAttributeId == SID_ATTR_CHAR_FONTHEIGHT ) || ( _nAttributeId == SID_ATTR_CHAR_CTL_FONTHEIGHT ) 387*cdf0e10cSrcweir || ( _nAttributeId == SID_ATTR_CHAR_CJK_FONTHEIGHT ) || ( _nAttributeId == SID_ATTR_CHAR_LATIN_FONTHEIGHT ), 388*cdf0e10cSrcweir "FontSizeHandler::FontSizeHandler: invalid attribute id!" ); 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir //-------------------------------------------------------------------- 392*cdf0e10cSrcweir AttributeState FontSizeHandler::getState( const SfxItemSet& _rAttribs ) const 393*cdf0e10cSrcweir { 394*cdf0e10cSrcweir AttributeState aState( eIndetermined ); 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir const SfxPoolItem* pItem = _rAttribs.GetItem( getWhich() ); 397*cdf0e10cSrcweir const SvxFontHeightItem* pFontHeightItem = PTR_CAST( SvxFontHeightItem, pItem ); 398*cdf0e10cSrcweir OSL_ENSURE( pFontHeightItem || !pItem, "FontSizeHandler::getState: invalid item!" ); 399*cdf0e10cSrcweir if ( pFontHeightItem ) 400*cdf0e10cSrcweir { 401*cdf0e10cSrcweir // by definition, the item should have the unit twip 402*cdf0e10cSrcweir sal_uLong nHeight = pFontHeightItem->GetHeight(); 403*cdf0e10cSrcweir if ( _rAttribs.GetPool()->GetMetric( getWhich() ) != SFX_MAPUNIT_TWIP ) 404*cdf0e10cSrcweir { 405*cdf0e10cSrcweir nHeight = OutputDevice::LogicToLogic( 406*cdf0e10cSrcweir Size( 0, nHeight ), 407*cdf0e10cSrcweir MapMode( (MapUnit)( _rAttribs.GetPool()->GetMetric( getWhich() ) ) ), 408*cdf0e10cSrcweir MapMode( MAP_TWIP ) 409*cdf0e10cSrcweir ).Height(); 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir SvxFontHeightItem* pNewItem = new SvxFontHeightItem( nHeight, 100, getWhich() ); 413*cdf0e10cSrcweir pNewItem->SetProp( pFontHeightItem->GetProp(), pFontHeightItem->GetPropUnit() ); 414*cdf0e10cSrcweir aState.setItem( pNewItem ); 415*cdf0e10cSrcweir } 416*cdf0e10cSrcweir 417*cdf0e10cSrcweir return aState; 418*cdf0e10cSrcweir } 419*cdf0e10cSrcweir 420*cdf0e10cSrcweir //-------------------------------------------------------------------- 421*cdf0e10cSrcweir void FontSizeHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType _nForScriptType ) const 422*cdf0e10cSrcweir { 423*cdf0e10cSrcweir const SvxFontHeightItem* pFontHeightItem = PTR_CAST( SvxFontHeightItem, _pAdditionalArg ); 424*cdf0e10cSrcweir OSL_ENSURE( pFontHeightItem, "FontSizeHandler::executeAttribute: need a FontHeightItem!" ); 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir if ( pFontHeightItem ) 427*cdf0e10cSrcweir { 428*cdf0e10cSrcweir // corect measurement units 429*cdf0e10cSrcweir SfxMapUnit eItemMapUnit = pFontHeightItem->GetPropUnit(); (void)eItemMapUnit; 430*cdf0e10cSrcweir sal_uLong nHeight = pFontHeightItem->GetHeight(); 431*cdf0e10cSrcweir if ( _rNewAttribs.GetPool()->GetMetric( getWhich() ) != SFX_MAPUNIT_TWIP ) 432*cdf0e10cSrcweir { 433*cdf0e10cSrcweir nHeight = OutputDevice::LogicToLogic( 434*cdf0e10cSrcweir Size( 0, nHeight ), 435*cdf0e10cSrcweir MapMode( (MapUnit)( SFX_MAPUNIT_TWIP ) ), 436*cdf0e10cSrcweir MapMode( (MapUnit)( _rNewAttribs.GetPool()->GetMetric( getWhich() ) ) ) 437*cdf0e10cSrcweir ).Height(); 438*cdf0e10cSrcweir } 439*cdf0e10cSrcweir 440*cdf0e10cSrcweir SvxFontHeightItem aNewItem( nHeight, 100, getWhich() ); 441*cdf0e10cSrcweir aNewItem.SetProp( pFontHeightItem->GetProp(), pFontHeightItem->GetPropUnit() ); 442*cdf0e10cSrcweir 443*cdf0e10cSrcweir if ( ( getAttributeId() == SID_ATTR_CHAR_FONTHEIGHT ) && _nForScriptType ) 444*cdf0e10cSrcweir putItemForScript( _rNewAttribs, aNewItem, _nForScriptType ); 445*cdf0e10cSrcweir else 446*cdf0e10cSrcweir _rNewAttribs.Put( aNewItem ); 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir } 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir //==================================================================== 451*cdf0e10cSrcweir //= ParagraphDirectionHandler 452*cdf0e10cSrcweir //==================================================================== 453*cdf0e10cSrcweir //-------------------------------------------------------------------- 454*cdf0e10cSrcweir ParagraphDirectionHandler::ParagraphDirectionHandler( AttributeId _nAttributeId ) 455*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, EE_PARA_WRITINGDIR ) 456*cdf0e10cSrcweir ,m_eParagraphDirection( FRMDIR_HORI_LEFT_TOP ) 457*cdf0e10cSrcweir ,m_eDefaultAdjustment( SVX_ADJUST_RIGHT ) 458*cdf0e10cSrcweir ,m_eOppositeDefaultAdjustment( SVX_ADJUST_LEFT ) 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir switch ( getAttributeId() ) 461*cdf0e10cSrcweir { 462*cdf0e10cSrcweir case SID_ATTR_PARA_LEFT_TO_RIGHT: m_eParagraphDirection = FRMDIR_HORI_LEFT_TOP; m_eDefaultAdjustment = SVX_ADJUST_LEFT; break; 463*cdf0e10cSrcweir case SID_ATTR_PARA_RIGHT_TO_LEFT: m_eParagraphDirection = FRMDIR_HORI_RIGHT_TOP; m_eDefaultAdjustment = SVX_ADJUST_RIGHT; break; 464*cdf0e10cSrcweir default: 465*cdf0e10cSrcweir OSL_ENSURE( sal_False, "ParagraphDirectionHandler::ParagraphDirectionHandler: invalid attribute id!" ); 466*cdf0e10cSrcweir } 467*cdf0e10cSrcweir 468*cdf0e10cSrcweir if ( SVX_ADJUST_RIGHT == m_eDefaultAdjustment ) 469*cdf0e10cSrcweir m_eOppositeDefaultAdjustment = SVX_ADJUST_LEFT; 470*cdf0e10cSrcweir else 471*cdf0e10cSrcweir m_eOppositeDefaultAdjustment = SVX_ADJUST_RIGHT; 472*cdf0e10cSrcweir } 473*cdf0e10cSrcweir 474*cdf0e10cSrcweir //-------------------------------------------------------------------- 475*cdf0e10cSrcweir AttributeCheckState ParagraphDirectionHandler::implGetCheckState( const SfxPoolItem& _rItem ) const 476*cdf0e10cSrcweir { 477*cdf0e10cSrcweir OSL_ENSURE( _rItem.ISA( SvxFrameDirectionItem ), "ParagraphDirectionHandler::implGetCheckState: invalid pool item!" ); 478*cdf0e10cSrcweir SvxFrameDirection eDirection = static_cast< SvxFrameDirection >( static_cast< const SvxFrameDirectionItem& >( _rItem ).GetValue() ); 479*cdf0e10cSrcweir return ( eDirection == m_eParagraphDirection ) ? eChecked : eUnchecked; 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir //-------------------------------------------------------------------- 483*cdf0e10cSrcweir void ParagraphDirectionHandler::executeAttribute( const SfxItemSet& _rCurrentAttribs, SfxItemSet& _rNewAttribs, const SfxPoolItem* /*_pAdditionalArg*/, ScriptType /*_nForScriptType*/ ) const 484*cdf0e10cSrcweir { 485*cdf0e10cSrcweir _rNewAttribs.Put( SvxFrameDirectionItem( m_eParagraphDirection, getWhich() ) ); 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir // if the current adjustment of the was the default adjustment for the *previous* text direction, 488*cdf0e10cSrcweir // then we toggle the adjustment, too 489*cdf0e10cSrcweir SvxAdjust eCurrentAdjustment = SVX_ADJUST_LEFT; 490*cdf0e10cSrcweir const SfxPoolItem* pCurrentAdjustment = NULL; 491*cdf0e10cSrcweir if ( SFX_ITEM_ON == _rCurrentAttribs.GetItemState( EE_PARA_JUST, sal_True, &pCurrentAdjustment ) ) 492*cdf0e10cSrcweir eCurrentAdjustment = static_cast< const SvxAdjustItem* >( pCurrentAdjustment )->GetAdjust(); 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir if ( eCurrentAdjustment == m_eOppositeDefaultAdjustment ) 495*cdf0e10cSrcweir _rNewAttribs.Put( SvxAdjustItem( m_eDefaultAdjustment, EE_PARA_JUST ) ); 496*cdf0e10cSrcweir } 497*cdf0e10cSrcweir 498*cdf0e10cSrcweir //==================================================================== 499*cdf0e10cSrcweir //= BooleanHandler 500*cdf0e10cSrcweir //==================================================================== 501*cdf0e10cSrcweir //-------------------------------------------------------------------- 502*cdf0e10cSrcweir BooleanHandler::BooleanHandler( AttributeId _nAttributeId, WhichId _nWhichId ) 503*cdf0e10cSrcweir :AttributeHandler( _nAttributeId, _nWhichId ) 504*cdf0e10cSrcweir { 505*cdf0e10cSrcweir } 506*cdf0e10cSrcweir 507*cdf0e10cSrcweir //-------------------------------------------------------------------- 508*cdf0e10cSrcweir AttributeCheckState BooleanHandler::implGetCheckState( const SfxPoolItem& _rItem ) const 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir OSL_ENSURE( _rItem.ISA( SfxBoolItem ), "BooleanHandler::implGetCheckState: invalid item!" ); 511*cdf0e10cSrcweir if ( _rItem.ISA( SfxBoolItem ) ) 512*cdf0e10cSrcweir return static_cast< const SfxBoolItem& >( _rItem ).GetValue() ? eChecked : eUnchecked; 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir return eIndetermined; 515*cdf0e10cSrcweir } 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir //-------------------------------------------------------------------- 518*cdf0e10cSrcweir void BooleanHandler::executeAttribute( const SfxItemSet& /*_rCurrentAttribs*/, SfxItemSet& _rNewAttribs, const SfxPoolItem* _pAdditionalArg, ScriptType /*_nForScriptType*/ ) const 519*cdf0e10cSrcweir { 520*cdf0e10cSrcweir OSL_ENSURE( _pAdditionalArg && _pAdditionalArg->ISA( SfxBoolItem ), "BooleanHandler::executeAttribute: invalid argument!" ); 521*cdf0e10cSrcweir if ( _pAdditionalArg ) 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir SfxPoolItem* pCorrectWich = _pAdditionalArg->Clone(); 524*cdf0e10cSrcweir pCorrectWich->SetWhich( getWhich() ); 525*cdf0e10cSrcweir _rNewAttribs.Put( *pCorrectWich ); 526*cdf0e10cSrcweir DELETEZ( pCorrectWich ); 527*cdf0e10cSrcweir } 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir //........................................................................ 531*cdf0e10cSrcweir } // namespace frm 532*cdf0e10cSrcweir //........................................................................ 533