LCOV - code coverage report
Current view: top level - libreoffice/editeng/source/items - textitem.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 555 1541 36.0 %
Date: 2012-12-27 Functions: 219 436 50.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <com/sun/star/style/CaseMap.hpp>
      21             : #include <com/sun/star/awt/FontDescriptor.hpp>
      22             : #include <com/sun/star/frame/status/FontHeight.hpp>
      23             : #include <vcl/bitmapex.hxx>
      24             : #include <tools/stream.hxx>
      25             : #include <toolkit/unohlp.hxx>
      26             : #include <math.h>
      27             : #include <rtl/math.hxx>
      28             : #include <unotools/fontdefs.hxx>
      29             : #include <vcl/outdev.hxx>
      30             : #include <editeng/eeitem.hxx>
      31             : #include <svtools/unitconv.hxx>
      32             : 
      33             : #include <svl/memberid.hrc>
      34             : #include <editeng/editids.hrc>
      35             : #include <editeng/editrids.hrc>
      36             : #include <vcl/vclenum.hxx>
      37             : #include <tools/tenccvt.hxx>
      38             : 
      39             : #include <rtl/ustring.hxx>
      40             : #include <i18npool/languagetag.hxx>
      41             : #include <svl/itemset.hxx>
      42             : 
      43             : #include <svtools/langtab.hxx>
      44             : #include <svl/itempool.hxx>
      45             : #include <svtools/ctrltool.hxx>
      46             : #include <vcl/settings.hxx>
      47             : #include <vcl/svapp.hxx>
      48             : #include <com/sun/star/awt/SimpleFontMetric.hpp>
      49             : #include <com/sun/star/awt/FontWeight.hpp>
      50             : #include <com/sun/star/awt/FontSlant.hpp>
      51             : #include <com/sun/star/awt/CharSet.hpp>
      52             : #include <com/sun/star/awt/FontWidth.hpp>
      53             : #include <com/sun/star/awt/XFont.hpp>
      54             : #include <com/sun/star/awt/FontType.hpp>
      55             : #include <com/sun/star/awt/FontUnderline.hpp>
      56             : #include <com/sun/star/awt/FontStrikeout.hpp>
      57             : #include <com/sun/star/awt/FontFamily.hpp>
      58             : #include <com/sun/star/awt/FontPitch.hpp>
      59             : #include <com/sun/star/lang/Locale.hpp>
      60             : #include <com/sun/star/text/FontEmphasis.hpp>
      61             : #include <com/sun/star/i18n/ScriptType.hpp>
      62             : #include <editeng/rsiditem.hxx>
      63             : #include <editeng/memberids.hrc>
      64             : #include <editeng/flstitem.hxx>
      65             : #include <editeng/fontitem.hxx>
      66             : #include <editeng/postitem.hxx>
      67             : #include <editeng/wghtitem.hxx>
      68             : #include <editeng/fhgtitem.hxx>
      69             : #include <editeng/fwdtitem.hxx>
      70             : #include <editeng/udlnitem.hxx>
      71             : #include <editeng/crsditem.hxx>
      72             : #include <editeng/shdditem.hxx>
      73             : #include <editeng/akrnitem.hxx>
      74             : #include <editeng/wrlmitem.hxx>
      75             : #include <editeng/cntritem.hxx>
      76             : #include <editeng/prszitem.hxx>
      77             : #include <editeng/colritem.hxx>
      78             : #include <editeng/cscoitem.hxx>
      79             : #include <editeng/kernitem.hxx>
      80             : #include <editeng/cmapitem.hxx>
      81             : #include <editeng/escpitem.hxx>
      82             : #include <editeng/langitem.hxx>
      83             : #include <editeng/nlbkitem.hxx>
      84             : #include <editeng/nhypitem.hxx>
      85             : #include <editeng/lcolitem.hxx>
      86             : #include <editeng/blnkitem.hxx>
      87             : #include <editeng/emphitem.hxx>
      88             : #include <editeng/twolinesitem.hxx>
      89             : #include <editeng/scripttypeitem.hxx>
      90             : #include <editeng/charrotateitem.hxx>
      91             : #include <editeng/charscaleitem.hxx>
      92             : #include <editeng/charreliefitem.hxx>
      93             : #include <editeng/itemtype.hxx>
      94             : #include <editeng/eerdll.hxx>
      95             : 
      96             : #define STORE_UNICODE_MAGIC_MARKER  0xFE331188
      97             : 
      98             : using namespace ::rtl;
      99             : using namespace ::com::sun::star;
     100             : using namespace ::com::sun::star::text;
     101             : 
     102             : // Conversion for UNO
     103             : #define TWIP_TO_MM100(TWIP)     ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
     104             : #define MM100_TO_TWIP(MM100)    ((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L))
     105             : #define TWIP_TO_MM100_UNSIGNED(TWIP)     ((((TWIP)*127L+36L)/72L))
     106             : #define MM100_TO_TWIP_UNSIGNED(MM100)    ((((MM100)*72L+63L)/127L))
     107             : 
     108             : sal_Bool SvxFontItem::bEnableStoreUnicodeNames = sal_False;
     109             : 
     110             : // STATIC DATA -----------------------------------------------------------
     111             : 
     112             : // -----------------------------------------------------------------------
     113             : 
     114           0 : TYPEINIT1(SvxFontListItem, SfxPoolItem);
     115      333687 : TYPEINIT1_FACTORY(SvxFontItem, SfxPoolItem, new SvxFontItem(0));
     116      246087 : TYPEINIT1_FACTORY(SvxPostureItem, SfxEnumItem, new SvxPostureItem(ITALIC_NONE, 0));
     117      248991 : TYPEINIT1_FACTORY(SvxWeightItem, SfxEnumItem, new SvxWeightItem(WEIGHT_NORMAL, 0));
     118      274885 : TYPEINIT1_FACTORY(SvxFontHeightItem, SfxPoolItem, new SvxFontHeightItem(240, 100, 0));
     119           0 : TYPEINIT1_FACTORY(SvxFontWidthItem, SfxPoolItem, new SvxFontWidthItem(0, 100, 0));
     120          39 : TYPEINIT1_FACTORY(SvxTextLineItem, SfxEnumItem, new SvxTextLineItem(UNDERLINE_NONE, 0));
     121       91119 : TYPEINIT1_FACTORY(SvxUnderlineItem, SfxEnumItem, new SvxUnderlineItem(UNDERLINE_NONE, 0));
     122       47089 : TYPEINIT1_FACTORY(SvxOverlineItem, SfxEnumItem, new SvxOverlineItem(UNDERLINE_NONE, 0));
     123       81941 : TYPEINIT1_FACTORY(SvxCrossedOutItem, SfxEnumItem, new SvxCrossedOutItem(STRIKEOUT_NONE, 0));
     124       81624 : TYPEINIT1_FACTORY(SvxShadowedItem, SfxBoolItem, new SvxShadowedItem(sal_False, 0));
     125       19406 : TYPEINIT1_FACTORY(SvxAutoKernItem, SfxBoolItem, new SvxAutoKernItem(sal_False, 0));
     126       31083 : TYPEINIT1_FACTORY(SvxWordLineModeItem, SfxBoolItem, new SvxWordLineModeItem(sal_False, 0));
     127       81407 : TYPEINIT1_FACTORY(SvxContourItem, SfxBoolItem, new SvxContourItem(sal_False, 0));
     128         336 : TYPEINIT1_FACTORY(SvxPropSizeItem, SfxUInt16Item, new SvxPropSizeItem(100, 0));
     129       55425 : TYPEINIT1_FACTORY(SvxColorItem, SfxPoolItem, new SvxColorItem(0));
     130       16257 : TYPEINIT1_FACTORY(SvxCharSetColorItem, SvxColorItem, new SvxCharSetColorItem(0));
     131       26877 : TYPEINIT1_FACTORY(SvxKerningItem, SfxInt16Item, new SvxKerningItem(0, 0));
     132         356 : TYPEINIT1_FACTORY(SvxCaseMapItem, SfxEnumItem, new SvxCaseMapItem(SVX_CASEMAP_NOT_MAPPED, 0));
     133       23305 : TYPEINIT1_FACTORY(SvxEscapementItem, SfxPoolItem, new SvxEscapementItem(0));
     134      112988 : TYPEINIT1_FACTORY(SvxLanguageItem, SfxEnumItem, new SvxLanguageItem(LANGUAGE_GERMAN, 0));
     135         336 : TYPEINIT1_FACTORY(SvxNoLinebreakItem, SfxBoolItem, new SvxNoLinebreakItem(sal_True, 0));
     136         336 : TYPEINIT1_FACTORY(SvxNoHyphenItem, SfxBoolItem, new SvxNoHyphenItem(sal_True, 0));
     137           0 : TYPEINIT1_FACTORY(SvxLineColorItem, SvxColorItem, new SvxLineColorItem(0));
     138         346 : TYPEINIT1_FACTORY(SvxBlinkItem, SfxBoolItem, new SvxBlinkItem(sal_False, 0));
     139       38064 : TYPEINIT1_FACTORY(SvxEmphasisMarkItem, SfxUInt16Item, new SvxEmphasisMarkItem(EMPHASISMARK_NONE, 0));
     140         336 : TYPEINIT1_FACTORY(SvxTwoLinesItem, SfxPoolItem, new SvxTwoLinesItem(sal_True, 0, 0, 0));
     141           0 : TYPEINIT1_FACTORY(SvxScriptTypeItem, SfxUInt16Item, new SvxScriptTypeItem);
     142         346 : TYPEINIT1_FACTORY(SvxCharRotateItem, SfxUInt16Item, new SvxCharRotateItem(0, sal_False, 0));
     143       16815 : TYPEINIT1_FACTORY(SvxCharScaleWidthItem, SfxUInt16Item, new SvxCharScaleWidthItem(100, 0));
     144       38265 : TYPEINIT1_FACTORY(SvxCharReliefItem, SfxEnumItem, new SvxCharReliefItem(RELIEF_NONE, 0));
     145         681 : TYPEINIT1_FACTORY(SvxRsidItem, SfxUInt32Item, new SvxRsidItem(0, 0));
     146             : 
     147           0 : TYPEINIT1(SvxScriptSetItem, SfxSetItem );
     148             : 
     149             : 
     150             : // class SvxFontListItem -------------------------------------------------
     151             : 
     152         476 : SvxFontListItem::SvxFontListItem( const FontList* pFontLst,
     153             :                                   const sal_uInt16 nId ) :
     154             :     SfxPoolItem( nId ),
     155         476 :     pFontList( pFontLst )
     156             : {
     157         476 :     if ( pFontList )
     158             :     {
     159         476 :         sal_Int32 nCount = pFontList->GetFontNameCount();
     160         476 :         aFontNameSeq.realloc( nCount );
     161             : 
     162       24032 :         for ( sal_uInt16 i = 0; i < nCount; i++ )
     163       23556 :             aFontNameSeq[i] = pFontList->GetFontName(i).GetName();
     164             :     }
     165         476 : }
     166             : 
     167             : // -----------------------------------------------------------------------
     168             : 
     169         476 : SvxFontListItem::SvxFontListItem( const SvxFontListItem& rItem ) :
     170             : 
     171             :     SfxPoolItem( rItem ),
     172         476 :     pFontList( rItem.GetFontList() ),
     173         952 :     aFontNameSeq( rItem.aFontNameSeq )
     174             : {
     175         476 : }
     176             : 
     177             : // -----------------------------------------------------------------------
     178             : 
     179         476 : SfxPoolItem* SvxFontListItem::Clone( SfxItemPool* ) const
     180             : {
     181         476 :     return new SvxFontListItem( *this );
     182             : }
     183             : 
     184             : // -----------------------------------------------------------------------
     185             : 
     186           0 : int SvxFontListItem::operator==( const SfxPoolItem& rAttr ) const
     187             : {
     188             :     DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
     189             : 
     190           0 :     return( pFontList == ((SvxFontListItem&)rAttr).pFontList );
     191             : }
     192             : 
     193           0 : bool SvxFontListItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
     194             : {
     195           0 :     rVal <<= aFontNameSeq;
     196           0 :     return true;
     197             : }
     198             : 
     199             : //------------------------------------------------------------------------
     200             : 
     201           0 : SfxItemPresentation SvxFontListItem::GetPresentation
     202             : (
     203             :     SfxItemPresentation /*ePres*/,
     204             :     SfxMapUnit          /*eCoreUnit*/,
     205             :     SfxMapUnit          /*ePresUnit*/,
     206             :     XubString&          rText, const IntlWrapper * /*pIntl*/
     207             : )   const
     208             : {
     209           0 :     rText.Erase();
     210           0 :     return SFX_ITEM_PRESENTATION_NONE;
     211             : }
     212             : 
     213             : // class SvxFontItem -----------------------------------------------------
     214             : 
     215        3102 : SvxFontItem::SvxFontItem( const sal_uInt16 nId ) :
     216        3102 :     SfxPoolItem( nId )
     217             : {
     218        3102 :     eFamily = FAMILY_SWISS;
     219        3102 :     ePitch = PITCH_VARIABLE;
     220        3102 :     eTextEncoding = RTL_TEXTENCODING_DONTKNOW;
     221        3102 : }
     222             : 
     223             : // -----------------------------------------------------------------------
     224             : 
     225       11993 : SvxFontItem::SvxFontItem( const FontFamily eFam, const XubString& aName,
     226             :                   const XubString& aStName, const FontPitch eFontPitch,
     227             :                   const rtl_TextEncoding eFontTextEncoding, const sal_uInt16 nId ) :
     228             : 
     229             :     SfxPoolItem( nId ),
     230             : 
     231             :     aFamilyName(aName),
     232       11993 :     aStyleName(aStName)
     233             : {
     234       11993 :     eFamily = eFam;
     235       11993 :     ePitch = eFontPitch;
     236       11993 :     eTextEncoding = eFontTextEncoding;
     237       11993 : }
     238             : 
     239             : // -----------------------------------------------------------------------
     240        1287 : SvxFontItem& SvxFontItem::operator=(const SvxFontItem& rFont)
     241             : {
     242        1287 :     aFamilyName =  rFont.GetFamilyName();
     243        1287 :     aStyleName =   rFont.GetStyleName();
     244        1287 :     eFamily =      rFont.GetFamily();
     245        1287 :     ePitch =   rFont.GetPitch();
     246        1287 :     eTextEncoding = rFont.GetCharSet();
     247        1287 :     return *this;
     248             : }
     249             : // -----------------------------------------------------------------------
     250             : 
     251         191 : bool SvxFontItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
     252             : {
     253         191 :     nMemberId &= ~CONVERT_TWIPS;
     254         191 :     switch(nMemberId)
     255             :     {
     256             :         case 0:
     257             :         {
     258           0 :             com::sun::star::awt::FontDescriptor aFontDescriptor;
     259           0 :             aFontDescriptor.Name = aFamilyName.GetBuffer();
     260           0 :             aFontDescriptor.StyleName = aStyleName.GetBuffer();
     261           0 :             aFontDescriptor.Family = (sal_Int16)(eFamily);
     262           0 :             aFontDescriptor.CharSet = (sal_Int16)(eTextEncoding);
     263           0 :             aFontDescriptor.Pitch = (sal_Int16)(ePitch);
     264           0 :             rVal <<= aFontDescriptor;
     265             :         }
     266           0 :         break;
     267             :         case MID_FONT_FAMILY_NAME   :
     268          39 :             rVal <<= OUString(aFamilyName.GetBuffer());
     269          39 :         break;
     270             :         case MID_FONT_STYLE_NAME:
     271          38 :             rVal <<= OUString(aStyleName.GetBuffer());
     272          38 :         break;
     273          38 :         case MID_FONT_FAMILY    : rVal <<= (sal_Int16)(eFamily);    break;
     274          38 :         case MID_FONT_CHAR_SET  : rVal <<= (sal_Int16)(eTextEncoding);  break;
     275          38 :         case MID_FONT_PITCH     : rVal <<= (sal_Int16)(ePitch); break;
     276             :     }
     277         191 :     return true;
     278             : }
     279             : // -----------------------------------------------------------------------
     280       18916 : bool SvxFontItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId)
     281             : {
     282       18916 :     nMemberId &= ~CONVERT_TWIPS;
     283       18916 :     switch(nMemberId)
     284             :     {
     285             :         case 0:
     286             :         {
     287           0 :             com::sun::star::awt::FontDescriptor aFontDescriptor;
     288           0 :             if ( !( rVal >>= aFontDescriptor ))
     289           0 :                 return sal_False;
     290             : 
     291           0 :             aFamilyName = aFontDescriptor.Name;
     292           0 :             aStyleName = aFontDescriptor.StyleName;
     293           0 :             eFamily = (FontFamily)aFontDescriptor.Family;
     294           0 :             eTextEncoding = (rtl_TextEncoding)aFontDescriptor.CharSet;
     295           0 :             ePitch = (FontPitch)aFontDescriptor.Pitch;
     296             :         }
     297           0 :         break;
     298             :         case MID_FONT_FAMILY_NAME   :
     299             :         {
     300        4940 :             OUString aStr;
     301        4940 :             if(!(rVal >>= aStr))
     302           0 :                 return sal_False;
     303        4940 :             aFamilyName = aStr.getStr();
     304             :         }
     305        4940 :         break;
     306             :         case MID_FONT_STYLE_NAME:
     307             :         {
     308        3056 :             OUString aStr;
     309        3056 :             if(!(rVal >>= aStr))
     310           0 :                 return sal_False;
     311        3056 :             aStyleName = aStr.getStr();
     312             :         }
     313        3056 :         break;
     314             :         case MID_FONT_FAMILY :
     315             :         {
     316        3228 :             sal_Int16 nFamily = sal_Int16();
     317        3228 :             if(!(rVal >>= nFamily))
     318           0 :                 return sal_False;
     319        3228 :             eFamily = (FontFamily)nFamily;
     320             :         }
     321        3228 :         break;
     322             :         case MID_FONT_CHAR_SET  :
     323             :         {
     324        3843 :             sal_Int16 nSet = sal_Int16();
     325        3843 :             if(!(rVal >>= nSet))
     326           0 :                 return sal_False;
     327        3843 :             eTextEncoding = (rtl_TextEncoding)nSet;
     328             :         }
     329        3843 :         break;
     330             :         case MID_FONT_PITCH     :
     331             :         {
     332        3849 :             sal_Int16 nPitch = sal_Int16();
     333        3849 :             if(!(rVal >>= nPitch))
     334           0 :                 return sal_False;
     335        3849 :             ePitch =  (FontPitch)nPitch;
     336             :         }
     337        3849 :         break;
     338             :     }
     339       18916 :     return true;
     340             : }
     341             : 
     342             : // -----------------------------------------------------------------------
     343             : 
     344      118396 : int SvxFontItem::operator==( const SfxPoolItem& rAttr ) const
     345             : {
     346             :     DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
     347             : 
     348      118396 :     const SvxFontItem& rItem = (const SvxFontItem&)rAttr;
     349             : 
     350             :     int bRet = ( eFamily == rItem.eFamily &&
     351       81745 :                  aFamilyName == rItem.aFamilyName &&
     352      200141 :                  aStyleName == rItem.aStyleName );
     353             : 
     354      118396 :     if ( bRet )
     355             :     {
     356       53791 :         if ( ePitch != rItem.ePitch || eTextEncoding != rItem.eTextEncoding )
     357             :         {
     358         583 :             bRet = sal_False;
     359             :             DBG_WARNING( "FontItem::operator==(): only pitch or rtl_TextEncoding different ");
     360             :         }
     361             :     }
     362      118396 :     return bRet;
     363             : }
     364             : 
     365             : // -----------------------------------------------------------------------
     366             : 
     367       39546 : SfxPoolItem* SvxFontItem::Clone( SfxItemPool * ) const
     368             : {
     369       39546 :     return new SvxFontItem( *this );
     370             : }
     371             : 
     372             : // -----------------------------------------------------------------------
     373             : 
     374         600 : SvStream& SvxFontItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
     375             : {
     376             :     sal_Bool bToBats =
     377         600 :         GetFamilyName().EqualsAscii( "StarSymbol", 0, sizeof("StarSymbol")-1 ) ||
     378         600 :         GetFamilyName().EqualsAscii( "OpenSymbol", 0, sizeof("OpenSymbol")-1 );
     379             : 
     380         600 :     rStrm << (sal_uInt8) GetFamily() << (sal_uInt8) GetPitch()
     381        1200 :           << (sal_uInt8)(bToBats ? RTL_TEXTENCODING_SYMBOL : GetSOStoreTextEncoding(GetCharSet()));
     382             : 
     383         600 :     String aStoreFamilyName( GetFamilyName() );
     384         600 :     if( bToBats )
     385           0 :         aStoreFamilyName = String( "StarBats", sizeof("StarBats")-1, RTL_TEXTENCODING_ASCII_US );
     386         600 :     rStrm.WriteUniOrByteString(aStoreFamilyName, rStrm.GetStreamCharSet());
     387         600 :     rStrm.WriteUniOrByteString(GetStyleName(), rStrm.GetStreamCharSet());
     388             : 
     389             :     // cach for EditEngine, only set while creating clipboard stream.
     390         600 :     if ( bEnableStoreUnicodeNames )
     391             :     {
     392           0 :         sal_uInt32 nMagic = STORE_UNICODE_MAGIC_MARKER;
     393           0 :         rStrm << nMagic;
     394           0 :         rStrm.WriteUniOrByteString( aStoreFamilyName, RTL_TEXTENCODING_UNICODE );
     395           0 :         rStrm.WriteUniOrByteString( GetStyleName(), RTL_TEXTENCODING_UNICODE );
     396             :     }
     397             : 
     398         600 :     return rStrm;
     399             : }
     400             : 
     401             : // -----------------------------------------------------------------------
     402             : 
     403           0 : SfxPoolItem* SvxFontItem::Create(SvStream& rStrm, sal_uInt16) const
     404             : {
     405             :     sal_uInt8 _eFamily, eFontPitch, eFontTextEncoding;
     406           0 :     String aName, aStyle;
     407           0 :     rStrm >> _eFamily;
     408           0 :     rStrm >> eFontPitch;
     409           0 :     rStrm >> eFontTextEncoding;
     410             : 
     411             :     // UNICODE: rStrm >> aName;
     412           0 :     aName = rStrm.ReadUniOrByteString(rStrm.GetStreamCharSet());
     413             : 
     414             :     // UNICODE: rStrm >> aStyle;
     415           0 :     aStyle = rStrm.ReadUniOrByteString(rStrm.GetStreamCharSet());
     416             : 
     417             :     // Set the "correct" textencoding
     418           0 :     eFontTextEncoding = (sal_uInt8)GetSOLoadTextEncoding( eFontTextEncoding );
     419             : 
     420             :     // at some point, the StarBats changes from  ANSI font to SYMBOL font
     421           0 :     if ( RTL_TEXTENCODING_SYMBOL != eFontTextEncoding && aName.EqualsAscii("StarBats") )
     422           0 :         eFontTextEncoding = RTL_TEXTENCODING_SYMBOL;
     423             : 
     424             :     // Check if we have stored unicode
     425           0 :     sal_Size nStreamPos = rStrm.Tell();
     426           0 :     sal_uInt32 nMagic = STORE_UNICODE_MAGIC_MARKER;
     427           0 :     rStrm >> nMagic;
     428           0 :     if ( nMagic == STORE_UNICODE_MAGIC_MARKER )
     429             :     {
     430           0 :         aName = rStrm.ReadUniOrByteString( RTL_TEXTENCODING_UNICODE );
     431           0 :         aStyle = rStrm.ReadUniOrByteString( RTL_TEXTENCODING_UNICODE );
     432             :     }
     433             :     else
     434             :     {
     435           0 :         rStrm.Seek( nStreamPos );
     436             :     }
     437             : 
     438             : 
     439             : 
     440             :     return new SvxFontItem( (FontFamily)_eFamily, aName, aStyle,
     441           0 :                             (FontPitch)eFontPitch, (rtl_TextEncoding)eFontTextEncoding, Which() );
     442             : }
     443             : 
     444             : //------------------------------------------------------------------------
     445             : 
     446           0 : SfxItemPresentation SvxFontItem::GetPresentation
     447             : (
     448             :     SfxItemPresentation ePres,
     449             :     SfxMapUnit          /*eCoreUnit*/,
     450             :     SfxMapUnit          /*ePresUnit*/,
     451             :     XubString&          rText, const IntlWrapper * /*pIntl*/
     452             : )   const
     453             : {
     454           0 :     switch ( ePres )
     455             :     {
     456             :         case SFX_ITEM_PRESENTATION_NONE:
     457           0 :             rText.Erase();
     458           0 :             return ePres;
     459             :         case SFX_ITEM_PRESENTATION_NAMELESS:
     460             :         case SFX_ITEM_PRESENTATION_COMPLETE:
     461           0 :             rText = aFamilyName;
     462           0 :             return ePres;
     463             :         default: ; //prevent warning
     464             :     }
     465           0 :     return SFX_ITEM_PRESENTATION_NONE;
     466             : }
     467             : 
     468             : //------------------------------------------------------------------------
     469             : 
     470           0 : void SvxFontItem::EnableStoreUnicodeNames( sal_Bool bEnable )
     471             : {
     472           0 :     bEnableStoreUnicodeNames = bEnable;
     473           0 : }
     474             : 
     475             : // class SvxPostureItem --------------------------------------------------
     476             : 
     477        4181 : SvxPostureItem::SvxPostureItem( const FontItalic ePosture, const sal_uInt16 nId ) :
     478        4181 :     SfxEnumItem( nId, (sal_uInt16)ePosture )
     479             : {
     480        4181 : }
     481             : 
     482             : // -----------------------------------------------------------------------
     483             : 
     484       10051 : SfxPoolItem* SvxPostureItem::Clone( SfxItemPool * ) const
     485             : {
     486       10051 :     return new SvxPostureItem( *this );
     487             : }
     488             : 
     489             : // -----------------------------------------------------------------------
     490             : 
     491           0 : sal_uInt16 SvxPostureItem::GetValueCount() const
     492             : {
     493           0 :     return ITALIC_NORMAL + 1;   // ITALIC_NONE also belongs here
     494             : }
     495             : 
     496             : // -----------------------------------------------------------------------
     497             : 
     498         450 : SvStream& SvxPostureItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
     499             : {
     500         450 :     rStrm << (sal_uInt8)GetValue();
     501         450 :     return rStrm;
     502             : }
     503             : 
     504             : // -----------------------------------------------------------------------
     505             : 
     506           0 : SfxPoolItem* SvxPostureItem::Create(SvStream& rStrm, sal_uInt16) const
     507             : {
     508             :     sal_uInt8 nPosture;
     509           0 :     rStrm >> nPosture;
     510           0 :     return new SvxPostureItem( (const FontItalic)nPosture, Which() );
     511             : }
     512             : 
     513             : //------------------------------------------------------------------------
     514             : 
     515           0 : SfxItemPresentation SvxPostureItem::GetPresentation
     516             : (
     517             :     SfxItemPresentation ePres,
     518             :     SfxMapUnit          /*eCoreUnit*/,
     519             :     SfxMapUnit          /*ePresUnit*/,
     520             :     XubString&          rText, const IntlWrapper * /*pIntl*/
     521             : )   const
     522             : {
     523           0 :     switch ( ePres )
     524             :     {
     525             :         case SFX_ITEM_PRESENTATION_NONE:
     526           0 :             rText.Erase();
     527           0 :             return ePres;
     528             :         case SFX_ITEM_PRESENTATION_NAMELESS:
     529             :         case SFX_ITEM_PRESENTATION_COMPLETE:
     530           0 :             rText = GetValueTextByPos( GetValue() );
     531           0 :             return ePres;
     532             :         default: ;//prevent warning
     533             :     }
     534           0 :     return SFX_ITEM_PRESENTATION_NONE;
     535             : }
     536             : 
     537             : // -----------------------------------------------------------------------
     538             : 
     539           0 : rtl::OUString SvxPostureItem::GetValueTextByPos( sal_uInt16 nPos ) const
     540             : {
     541             :     DBG_ASSERT( nPos <= (sal_uInt16)ITALIC_NORMAL, "enum overflow!" );
     542             : 
     543           0 :     FontItalic eItalic = (FontItalic)nPos;
     544           0 :     sal_uInt16 nId = 0;
     545             : 
     546           0 :     switch ( eItalic )
     547             :     {
     548           0 :         case ITALIC_NONE:       nId = RID_SVXITEMS_ITALIC_NONE;     break;
     549           0 :         case ITALIC_OBLIQUE:    nId = RID_SVXITEMS_ITALIC_OBLIQUE;  break;
     550           0 :         case ITALIC_NORMAL:     nId = RID_SVXITEMS_ITALIC_NORMAL;   break;
     551             :         default: ;//prevent warning
     552             :     }
     553             : 
     554           0 :     return nId ? EE_RESSTR(nId) : rtl::OUString();
     555             : }
     556             : 
     557          10 : bool SvxPostureItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
     558             : {
     559          10 :     nMemberId &= ~CONVERT_TWIPS;
     560          10 :     switch( nMemberId )
     561             :     {
     562             :         case MID_ITALIC:
     563           0 :             rVal = Bool2Any(GetBoolValue());
     564           0 :             break;
     565             :         case MID_POSTURE:
     566          10 :             rVal <<= (awt::FontSlant)GetValue();    // values from awt::FontSlant and FontItalic are equal
     567          10 :             break;
     568             :     }
     569          10 :     return true;
     570             : }
     571             : 
     572        3708 : bool SvxPostureItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
     573             : {
     574        3708 :     nMemberId &= ~CONVERT_TWIPS;
     575        3708 :     switch( nMemberId )
     576             :     {
     577             :         case MID_ITALIC:
     578           0 :             SetBoolValue(Any2Bool(rVal));
     579           0 :         break;
     580             :         case MID_POSTURE:
     581             :         {
     582             :             awt::FontSlant eSlant;
     583        3708 :             if(!(rVal >>= eSlant))
     584             :             {
     585           0 :                 sal_Int32 nValue = 0;
     586           0 :                 if(!(rVal >>= nValue))
     587           0 :                     return sal_False;
     588             : 
     589           0 :                 eSlant = (awt::FontSlant)nValue;
     590             :             }
     591        3708 :             SetValue((sal_uInt16)eSlant);
     592             :         }
     593             :     }
     594        3708 :     return true;
     595             : }
     596             : // -----------------------------------------------------------------------
     597             : 
     598           0 : int SvxPostureItem::HasBoolValue() const
     599             : {
     600           0 :     return sal_True;
     601             : }
     602             : 
     603             : // -----------------------------------------------------------------------
     604             : 
     605           0 : sal_Bool SvxPostureItem::GetBoolValue() const
     606             : {
     607           0 :     return ( (FontItalic)GetValue() >= ITALIC_OBLIQUE );
     608             : }
     609             : 
     610             : // -----------------------------------------------------------------------
     611             : 
     612           0 : void SvxPostureItem::SetBoolValue( sal_Bool bVal )
     613             : {
     614           0 :     SetValue( (sal_uInt16)(bVal ? ITALIC_NORMAL : ITALIC_NONE) );
     615           0 : }
     616             : 
     617             : // class SvxWeightItem ---------------------------------------------------
     618             : 
     619        6220 : SvxWeightItem::SvxWeightItem( const FontWeight eWght, const sal_uInt16 nId ) :
     620        6220 :     SfxEnumItem( nId, (sal_uInt16)eWght )
     621             : {
     622        6220 : }
     623             : 
     624             : 
     625             : 
     626             : // -----------------------------------------------------------------------
     627             : 
     628           0 : int SvxWeightItem::HasBoolValue() const
     629             : {
     630           0 :     return sal_True;
     631             : }
     632             : 
     633             : // -----------------------------------------------------------------------
     634             : 
     635           0 : sal_Bool SvxWeightItem::GetBoolValue() const
     636             : {
     637           0 :     return  (FontWeight)GetValue() >= WEIGHT_BOLD;
     638             : }
     639             : 
     640             : // -----------------------------------------------------------------------
     641             : 
     642           0 : void SvxWeightItem::SetBoolValue( sal_Bool bVal )
     643             : {
     644           0 :     SetValue( (sal_uInt16)(bVal ? WEIGHT_BOLD : WEIGHT_NORMAL) );
     645           0 : }
     646             : 
     647             : // -----------------------------------------------------------------------
     648             : 
     649           0 : sal_uInt16 SvxWeightItem::GetValueCount() const
     650             : {
     651           0 :     return WEIGHT_BLACK;    // WEIGHT_DONTKNOW does not belong
     652             : }
     653             : 
     654             : // -----------------------------------------------------------------------
     655             : 
     656       10105 : SfxPoolItem* SvxWeightItem::Clone( SfxItemPool * ) const
     657             : {
     658       10105 :     return new SvxWeightItem( *this );
     659             : }
     660             : 
     661             : // -----------------------------------------------------------------------
     662             : 
     663         450 : SvStream& SvxWeightItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
     664             : {
     665         450 :     rStrm << (sal_uInt8)GetValue();
     666         450 :     return rStrm;
     667             : }
     668             : 
     669             : // -----------------------------------------------------------------------
     670             : 
     671           0 : SfxPoolItem* SvxWeightItem::Create(SvStream& rStrm, sal_uInt16) const
     672             : {
     673             :     sal_uInt8 nWeight;
     674           0 :     rStrm >> nWeight;
     675           0 :     return new SvxWeightItem( (FontWeight)nWeight, Which() );
     676             : }
     677             : 
     678             : //------------------------------------------------------------------------
     679             : 
     680           0 : SfxItemPresentation SvxWeightItem::GetPresentation
     681             : (
     682             :     SfxItemPresentation ePres,
     683             :     SfxMapUnit          /*eCoreUnit*/,
     684             :     SfxMapUnit          /*ePresUnit*/,
     685             :     XubString&          rText, const IntlWrapper * /*pIntl*/
     686             : )   const
     687             : {
     688           0 :     switch ( ePres )
     689             :     {
     690             :         case SFX_ITEM_PRESENTATION_NONE:
     691           0 :             rText.Erase();
     692           0 :             return ePres;
     693             :         case SFX_ITEM_PRESENTATION_NAMELESS:
     694             :         case SFX_ITEM_PRESENTATION_COMPLETE:
     695           0 :             rText = GetValueTextByPos( GetValue() );
     696           0 :             return ePres;
     697             :         default: ;//prevent warning
     698             :     }
     699           0 :     return SFX_ITEM_PRESENTATION_NONE;
     700             : }
     701             : 
     702             : // -----------------------------------------------------------------------
     703             : 
     704           0 : rtl::OUString SvxWeightItem::GetValueTextByPos( sal_uInt16 nPos ) const
     705             : {
     706             :     DBG_ASSERT( nPos <= (sal_uInt16)WEIGHT_BLACK, "enum overflow!" );
     707           0 :     return EE_RESSTR(RID_SVXITEMS_WEIGHT_BEGIN + nPos);
     708             : }
     709             : 
     710          10 : bool SvxWeightItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
     711             : {
     712          10 :     nMemberId &= ~CONVERT_TWIPS;
     713          10 :     switch( nMemberId )
     714             :     {
     715             :         case MID_BOLD   :
     716           0 :             rVal = Bool2Any(GetBoolValue());
     717           0 :         break;
     718             :         case MID_WEIGHT:
     719             :         {
     720          10 :             rVal <<= (float)( VCLUnoHelper::ConvertFontWeight( (FontWeight)GetValue() ) );
     721             :         }
     722          10 :         break;
     723             :     }
     724          10 :     return true;
     725             : }
     726             : 
     727        3702 : bool SvxWeightItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
     728             : {
     729        3702 :     nMemberId &= ~CONVERT_TWIPS;
     730        3702 :     switch( nMemberId )
     731             :     {
     732             :         case MID_BOLD   :
     733           0 :             SetBoolValue(Any2Bool(rVal));
     734           0 :         break;
     735             :         case MID_WEIGHT:
     736             :         {
     737        3702 :             double fValue = 0;
     738        3702 :             if(!(rVal >>= fValue))
     739             :             {
     740           0 :                 sal_Int32 nValue = 0;
     741           0 :                 if(!(rVal >>= nValue))
     742           0 :                     return sal_False;
     743           0 :                 fValue = (float)nValue;
     744             :             }
     745        3702 :             SetValue( (sal_uInt16)VCLUnoHelper::ConvertFontWeight((float)fValue) );
     746             :         }
     747        3702 :         break;
     748             :     }
     749        3702 :     return true;
     750             : }
     751             : 
     752             : // class SvxFontHeightItem -----------------------------------------------
     753             : 
     754       11487 : SvxFontHeightItem::SvxFontHeightItem( const sal_uLong nSz,
     755             :                                       const sal_uInt16 nPrp,
     756             :                                       const sal_uInt16 nId ) :
     757       11487 :     SfxPoolItem( nId )
     758             : {
     759       11487 :     SetHeight( nSz,nPrp );  // calculate in percentage
     760       11487 : }
     761             : 
     762             : // -----------------------------------------------------------------------
     763             : 
     764       25654 : SfxPoolItem* SvxFontHeightItem::Clone( SfxItemPool * ) const
     765             : {
     766       25654 :     return new SvxFontHeightItem( *this );
     767             : }
     768             : 
     769             : // -----------------------------------------------------------------------
     770             : 
     771         570 : SvStream& SvxFontHeightItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const
     772             : {
     773         570 :     rStrm << (sal_uInt16)GetHeight();
     774             : 
     775         570 :     if( FONTHEIGHT_UNIT_VERSION <= nItemVersion )
     776         570 :         rStrm << GetProp() << (sal_uInt16)GetPropUnit();
     777             :     else
     778             :     {
     779             :         // When exporting to the old versions the relative information is lost
     780             :         // when there is no percentage
     781           0 :         sal_uInt16 _nProp = GetProp();
     782           0 :         if( SFX_MAPUNIT_RELATIVE != GetPropUnit() )
     783           0 :             _nProp = 100;
     784           0 :         rStrm << _nProp;
     785             :     }
     786         570 :     return rStrm;
     787             : }
     788             : 
     789             : // -----------------------------------------------------------------------
     790             : 
     791           0 : SfxPoolItem* SvxFontHeightItem::Create( SvStream& rStrm,
     792             :                                                  sal_uInt16 nVersion ) const
     793             : {
     794           0 :     sal_uInt16 nsize, nprop = 0, nPropUnit = SFX_MAPUNIT_RELATIVE;
     795             : 
     796           0 :     rStrm >> nsize;
     797             : 
     798           0 :     if( FONTHEIGHT_16_VERSION <= nVersion )
     799           0 :         rStrm >> nprop;
     800             :     else
     801             :     {
     802             :         sal_uInt8 nP;
     803           0 :         rStrm  >> nP;
     804           0 :         nprop = (sal_uInt16)nP;
     805             :     }
     806             : 
     807           0 :     if( FONTHEIGHT_UNIT_VERSION <= nVersion )
     808           0 :         rStrm >> nPropUnit;
     809             : 
     810           0 :     SvxFontHeightItem* pItem = new SvxFontHeightItem( nsize, 100, Which() );
     811           0 :     pItem->SetProp( nprop, (SfxMapUnit)nPropUnit );
     812           0 :     return pItem;
     813             : }
     814             : 
     815             : // -----------------------------------------------------------------------
     816             : 
     817      107324 : int SvxFontHeightItem::operator==( const SfxPoolItem& rItem ) const
     818             : {
     819             :     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
     820      107324 :     return GetHeight() == ((SvxFontHeightItem&)rItem).GetHeight() &&
     821       39256 :             GetProp() == ((SvxFontHeightItem&)rItem).GetProp() &&
     822      146580 :             GetPropUnit() == ((SvxFontHeightItem&)rItem).GetPropUnit();
     823             : }
     824             : 
     825         112 : bool SvxFontHeightItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
     826             : {
     827             :     //  In StarOne is the uno::Any always 1/100mm. Through the MemberId it is
     828             :     //  controlled if the value in the Item should be 1/100mm or Twips.
     829             : 
     830         112 :     sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
     831         112 :     nMemberId &= ~CONVERT_TWIPS;
     832         112 :     switch( nMemberId )
     833             :     {
     834             :         case 0:
     835             :         {
     836           0 :             ::com::sun::star::frame::status::FontHeight aFontHeight;
     837             : 
     838             :             // Point (i.e. Twips) is asked for, thus re-calculate if
     839             :             // CONVERT_TWIPS is not set.
     840           0 :             if( bConvert )
     841             :             {
     842           0 :                 long nTwips = bConvert ? nHeight : MM100_TO_TWIP_UNSIGNED(nHeight);
     843           0 :                 aFontHeight.Height = (float)( nTwips / 20.0 );
     844             :             }
     845             :             else
     846             :             {
     847           0 :                 double fPoints = MM100_TO_TWIP_UNSIGNED(nHeight) / 20.0;
     848             :                 float fRoundPoints =
     849           0 :                     static_cast<float>(::rtl::math::round(fPoints, 1));
     850           0 :                 aFontHeight.Height = fRoundPoints;
     851             :             }
     852             : 
     853           0 :             aFontHeight.Prop = (sal_Int16)(SFX_MAPUNIT_RELATIVE == ePropUnit ? nProp : 100);
     854             : 
     855           0 :             float fRet = (float)(short)nProp;
     856           0 :             switch( ePropUnit )
     857             :             {
     858             :                 case SFX_MAPUNIT_RELATIVE:
     859           0 :                     fRet = 0.;
     860           0 :                 break;
     861             :                 case SFX_MAPUNIT_100TH_MM:
     862           0 :                     fRet = MM100_TO_TWIP(fRet);
     863           0 :                     fRet /= 20.;
     864           0 :                 break;
     865             :                 case SFX_MAPUNIT_POINT:
     866             : 
     867           0 :                 break;
     868             :                 case SFX_MAPUNIT_TWIP:
     869           0 :                     fRet /= 20.;
     870           0 :                 break;
     871             :                 default: ;//prevent warning
     872             :             }
     873           0 :             aFontHeight.Diff = fRet;
     874           0 :             rVal <<= aFontHeight;
     875             :         }
     876           0 :         break;
     877             :         case MID_FONTHEIGHT:
     878             :         {
     879             :             // Point (i.e. Twips) is asked for, thus re-calculate if
     880             :             // CONVERT_TWIPS is not set.
     881          50 :             if( bConvert )
     882             :             {
     883          50 :                 long nTwips = bConvert ? nHeight : MM100_TO_TWIP_UNSIGNED(nHeight);
     884          50 :                 rVal <<= (float)( nTwips / 20.0 );
     885             :             }
     886             :             else
     887             :             {
     888           0 :                 double fPoints = MM100_TO_TWIP_UNSIGNED(nHeight) / 20.0;
     889             :                 float fRoundPoints =
     890           0 :                     static_cast<float>(::rtl::math::round(fPoints, 1));
     891           0 :                 rVal <<= fRoundPoints;
     892             :             }
     893             :         }
     894          50 :         break;
     895             :         case MID_FONTHEIGHT_PROP:
     896          31 :             rVal <<= (sal_Int16)(SFX_MAPUNIT_RELATIVE == ePropUnit ? nProp : 100);
     897          31 :         break;
     898             :         case MID_FONTHEIGHT_DIFF:
     899             :         {
     900          31 :             float fRet = (float)(short)nProp;
     901          31 :             switch( ePropUnit )
     902             :             {
     903             :                 case SFX_MAPUNIT_RELATIVE:
     904          31 :                     fRet = 0.;
     905          31 :                 break;
     906             :                 case SFX_MAPUNIT_100TH_MM:
     907           0 :                     fRet = MM100_TO_TWIP(fRet);
     908           0 :                     fRet /= 20.;
     909           0 :                 break;
     910             :                 case SFX_MAPUNIT_POINT:
     911             : 
     912           0 :                 break;
     913             :                 case SFX_MAPUNIT_TWIP:
     914           0 :                     fRet /= 20.;
     915           0 :                 break;
     916             :                 default: ;//prevent warning
     917             :             }
     918          31 :             rVal <<= fRet;
     919             :         }
     920          31 :         break;
     921             :     }
     922         112 :     return sal_True;
     923             : }
     924             : 
     925             : // Calculate the relative deviation from the expected height.
     926           0 : static sal_uInt32 lcl_GetRealHeight_Impl(sal_uInt32 nHeight, sal_uInt16 nProp, SfxMapUnit eProp, sal_Bool bCoreInTwip)
     927             : {
     928           0 :     sal_uInt32 nRet = nHeight;
     929           0 :     short nDiff = 0;
     930           0 :     switch( eProp )
     931             :     {
     932             :         case SFX_MAPUNIT_RELATIVE:
     933           0 :             nRet *= 100;
     934           0 :             nRet /= nProp;
     935           0 :         break;
     936             :         case SFX_MAPUNIT_POINT:
     937             :         {
     938           0 :             short nTemp = (short)nProp;
     939           0 :             nDiff = nTemp * 20;
     940           0 :             if(!bCoreInTwip)
     941           0 :                 nDiff = (short)TWIP_TO_MM100((long)(nDiff));
     942             :         }
     943           0 :         break;
     944             :         case SFX_MAPUNIT_100TH_MM:
     945             :             //then the core is surely also in 1/100 mm
     946           0 :             nDiff = (short)nProp;
     947           0 :         break;
     948             :         case SFX_MAPUNIT_TWIP:
     949             :             // Here surely TWIP
     950           0 :             nDiff = ((short)nProp);
     951           0 :         break;
     952             :         default: ;//prevent warning
     953             :     }
     954           0 :     nRet -= nDiff;
     955             : 
     956           0 :     return nRet;
     957             : }
     958             : 
     959        5724 : bool SvxFontHeightItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
     960             : {
     961        5724 :     sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
     962        5724 :     nMemberId &= ~CONVERT_TWIPS;
     963        5724 :     switch( nMemberId )
     964             :     {
     965             :         case 0:
     966             :         {
     967           0 :             ::com::sun::star::frame::status::FontHeight aFontHeight;
     968           0 :             if ( rVal >>= aFontHeight )
     969             :             {
     970             :                 // Height
     971           0 :                 ePropUnit = SFX_MAPUNIT_RELATIVE;
     972           0 :                 nProp = 100;
     973           0 :                 double fPoint = aFontHeight.Height;
     974           0 :                 if( fPoint < 0. || fPoint > 10000. )
     975           0 :                     return sal_False;
     976             : 
     977           0 :                 nHeight = (long)( fPoint * 20.0 + 0.5 );        // Twips
     978           0 :                 if (!bConvert)
     979           0 :                     nHeight = TWIP_TO_MM100_UNSIGNED(nHeight);  // Convert, if the item contains 1/100mm
     980             : 
     981           0 :                 nProp = aFontHeight.Prop;
     982             :             }
     983             :             else
     984           0 :                 return sal_False;
     985             :         }
     986           0 :         break;
     987             :         case MID_FONTHEIGHT:
     988             :         {
     989        5724 :             ePropUnit = SFX_MAPUNIT_RELATIVE;
     990        5724 :             nProp = 100;
     991        5724 :             double fPoint = 0;
     992        5724 :             if(!(rVal >>= fPoint))
     993             :             {
     994           0 :                 sal_Int32 nValue = 0;
     995           0 :                 if(!(rVal >>= nValue))
     996           0 :                     return sal_False;
     997           0 :                 fPoint = (float)nValue;
     998             :             }
     999        5724 :             if(fPoint < 0. || fPoint > 10000.)
    1000           0 :                     return sal_False;
    1001             : 
    1002        5724 :             nHeight = (long)( fPoint * 20.0 + 0.5 );        // Twips
    1003        5724 :             if (!bConvert)
    1004        3249 :                 nHeight = TWIP_TO_MM100_UNSIGNED(nHeight);  // Convert, if the item contains 1/100mm
    1005             :         }
    1006        5724 :         break;
    1007             :         case MID_FONTHEIGHT_PROP:
    1008             :         {
    1009           0 :             sal_Int16 nNew = sal_Int16();
    1010           0 :             if(!(rVal >>= nNew))
    1011           0 :                 return sal_True;
    1012             : 
    1013           0 :             nHeight = lcl_GetRealHeight_Impl(nHeight, nProp, ePropUnit, bConvert);
    1014             : 
    1015           0 :             nHeight *= nNew;
    1016           0 :             nHeight /= 100;
    1017           0 :             nProp = nNew;
    1018           0 :             ePropUnit = SFX_MAPUNIT_RELATIVE;
    1019             :         }
    1020           0 :         break;
    1021             :         case MID_FONTHEIGHT_DIFF:
    1022             :         {
    1023           0 :             nHeight = lcl_GetRealHeight_Impl(nHeight, nProp, ePropUnit, bConvert);
    1024           0 :             float fValue = 0;
    1025           0 :             if(!(rVal >>= fValue))
    1026             :             {
    1027           0 :                 sal_Int32 nValue = 0;
    1028           0 :                 if(!(rVal >>= nValue))
    1029           0 :                     return sal_False;
    1030           0 :                 fValue = (float)nValue;
    1031             :             }
    1032           0 :             sal_Int16 nCoreDiffValue = (sal_Int16)(fValue * 20.);
    1033           0 :             nHeight += bConvert ? nCoreDiffValue : TWIP_TO_MM100(nCoreDiffValue);
    1034           0 :             nProp = (sal_uInt16)((sal_Int16)fValue);
    1035           0 :             ePropUnit = SFX_MAPUNIT_POINT;
    1036             :         }
    1037           0 :         break;
    1038             :     }
    1039        5724 :     return sal_True;
    1040             : }
    1041             : 
    1042             : //------------------------------------------------------------------------
    1043             : 
    1044           0 : SfxItemPresentation SvxFontHeightItem::GetPresentation
    1045             : (
    1046             :     SfxItemPresentation ePres,
    1047             :     SfxMapUnit          eCoreUnit,
    1048             :     SfxMapUnit          /*ePresUnit*/,
    1049             :     XubString&          rText, const IntlWrapper *pIntl
    1050             : )   const
    1051             : {
    1052           0 :     switch ( ePres )
    1053             :     {
    1054             :         case SFX_ITEM_PRESENTATION_NONE:
    1055           0 :             rText.Erase();
    1056           0 :             return ePres;
    1057             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1058             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1059             :         {
    1060           0 :             if( SFX_MAPUNIT_RELATIVE != ePropUnit )
    1061             :             {
    1062           0 :                 ( rText = String::CreateFromInt32( (short)nProp ) ) +=
    1063           0 :                         EE_RESSTR( GetMetricId( ePropUnit ) );
    1064           0 :                 if( 0 <= (short)nProp )
    1065           0 :                     rText.Insert( sal_Unicode('+'), 0 );
    1066             :             }
    1067           0 :             else if( 100 == nProp )
    1068             :             {
    1069             :                 rText = GetMetricText( (long)nHeight,
    1070           0 :                                         eCoreUnit, SFX_MAPUNIT_POINT, pIntl );
    1071           0 :                 rText += EE_RESSTR(GetMetricId(SFX_MAPUNIT_POINT));
    1072             :             }
    1073             :             else
    1074           0 :                 ( rText = String::CreateFromInt32( nProp )) += sal_Unicode('%');
    1075           0 :             return ePres;
    1076             :         }
    1077             :         default: ; //prevent warning
    1078             :     }
    1079           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1080             : }
    1081             : 
    1082             : // -----------------------------------------------------------------------
    1083             : 
    1084        5778 : sal_uInt16 SvxFontHeightItem::GetVersion(sal_uInt16 nFileVersion) const
    1085             : {
    1086             :     return (nFileVersion <= SOFFICE_FILEFORMAT_40)
    1087             :                ? FONTHEIGHT_16_VERSION
    1088        5778 :                : FONTHEIGHT_UNIT_VERSION;
    1089             : }
    1090             : 
    1091             : // -----------------------------------------------------------------------
    1092             : 
    1093           0 : bool SvxFontHeightItem::ScaleMetrics( long nMult, long nDiv )
    1094             : {
    1095           0 :     nHeight = (sal_uInt32)Scale( nHeight, nMult, nDiv );
    1096           0 :     return true;
    1097             : }
    1098             : 
    1099             : // -----------------------------------------------------------------------
    1100             : 
    1101           0 : bool SvxFontHeightItem::HasMetrics() const
    1102             : {
    1103           0 :     return true;
    1104             : }
    1105             : 
    1106       12840 : void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, const sal_uInt16 nNewProp,
    1107             :                                     SfxMapUnit eUnit )
    1108             : {
    1109             :     DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" );
    1110             : 
    1111       12840 :     if( SFX_MAPUNIT_RELATIVE != eUnit )
    1112             :         nHeight = nNewHeight + ::ItemToControl( (short)nNewProp, eUnit,
    1113           0 :                                                 SFX_FUNIT_TWIP );
    1114             :     else
    1115       12840 :     if( 100 != nNewProp )
    1116          46 :         nHeight = sal_uInt32(( nNewHeight * nNewProp ) / 100 );
    1117             :     else
    1118       12794 :         nHeight = nNewHeight;
    1119             : 
    1120       12840 :     nProp = nNewProp;
    1121       12840 :     ePropUnit = eUnit;
    1122       12840 : }
    1123             : 
    1124           0 : void SvxFontHeightItem::SetHeight( sal_uInt32 nNewHeight, sal_uInt16 nNewProp,
    1125             :                                  SfxMapUnit eMetric, SfxMapUnit eCoreMetric )
    1126             : {
    1127             :     DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" );
    1128             : 
    1129           0 :     if( SFX_MAPUNIT_RELATIVE != eMetric )
    1130             :         nHeight = nNewHeight +
    1131             :                 ::ControlToItem( ::ItemToControl((short)nNewProp, eMetric,
    1132             :                                         SFX_FUNIT_TWIP ), SFX_FUNIT_TWIP,
    1133           0 :                                         eCoreMetric );
    1134             :     else
    1135           0 :     if( 100 != nNewProp )
    1136           0 :         nHeight = sal_uInt32(( nNewHeight * nNewProp ) / 100 );
    1137             :     else
    1138           0 :         nHeight = nNewHeight;
    1139             : 
    1140           0 :     nProp = nNewProp;
    1141           0 :     ePropUnit = eMetric;
    1142           0 : }
    1143             : 
    1144             : // class SvxFontWidthItem -----------------------------------------------
    1145             : 
    1146           0 : SvxFontWidthItem::SvxFontWidthItem( const sal_uInt16 nSz, const sal_uInt16 nPrp, const sal_uInt16 nId ) :
    1147           0 :     SfxPoolItem( nId )
    1148             : {
    1149           0 :     nWidth = nSz;
    1150           0 :     nProp = nPrp;
    1151           0 : }
    1152             : 
    1153             : // -----------------------------------------------------------------------
    1154             : 
    1155           0 : SfxPoolItem* SvxFontWidthItem::Clone( SfxItemPool * ) const
    1156             : {
    1157           0 :     return new SvxFontWidthItem( *this );
    1158             : }
    1159             : 
    1160             : // -----------------------------------------------------------------------
    1161             : 
    1162           0 : SvStream& SvxFontWidthItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1163             : {
    1164           0 :     rStrm << GetWidth() << GetProp();
    1165           0 :     return rStrm;
    1166             : }
    1167             : 
    1168             : // -----------------------------------------------------------------------
    1169             : 
    1170           0 : bool SvxFontWidthItem::ScaleMetrics( long nMult, long nDiv )
    1171             : {
    1172           0 :     nWidth = (sal_uInt16)Scale( nWidth, nMult, nDiv );
    1173           0 :     return true;
    1174             : }
    1175             : 
    1176             : // -----------------------------------------------------------------------
    1177             : 
    1178           0 : bool SvxFontWidthItem::HasMetrics() const
    1179             : {
    1180           0 :     return true;
    1181             : }
    1182             : 
    1183             : // -----------------------------------------------------------------------
    1184             : 
    1185           0 : SfxPoolItem* SvxFontWidthItem::Create( SvStream& rStrm,
    1186             :                                                  sal_uInt16 /*nVersion*/ ) const
    1187             : {
    1188             :     sal_uInt16 nS;
    1189             :     sal_uInt16 nP;
    1190             : 
    1191           0 :     rStrm >> nS;
    1192           0 :     rStrm >> nP;
    1193           0 :     SvxFontWidthItem* pItem = new SvxFontWidthItem( 0, nP, Which() );
    1194           0 :     pItem->SetWidthValue( nS );
    1195           0 :     return pItem;
    1196             : }
    1197             : 
    1198             : // -----------------------------------------------------------------------
    1199             : 
    1200           0 : int SvxFontWidthItem::operator==( const SfxPoolItem& rItem ) const
    1201             : {
    1202             :     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
    1203           0 :     return GetWidth() == ((SvxFontWidthItem&)rItem).GetWidth() &&
    1204           0 :             GetProp() == ((SvxFontWidthItem&)rItem).GetProp();
    1205             : }
    1206             : 
    1207           0 : bool SvxFontWidthItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1208             : {
    1209             : //    sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
    1210           0 :     nMemberId &= ~CONVERT_TWIPS;
    1211           0 :     switch(nMemberId)
    1212             :     {
    1213             :         case MID_FONTWIDTH:
    1214           0 :             rVal <<= (sal_Int16)(nWidth);
    1215           0 :         break;
    1216             :         case MID_FONTWIDTH_PROP:
    1217           0 :             rVal <<= (sal_Int16)(nProp);
    1218           0 :         break;
    1219             :     }
    1220           0 :     return true;
    1221             : }
    1222             : 
    1223           0 : bool SvxFontWidthItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1224             : {
    1225             : //    sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
    1226           0 :     nMemberId &= ~CONVERT_TWIPS;
    1227           0 :     sal_Int16 nVal = sal_Int16();
    1228           0 :     if(!(rVal >>= nVal))
    1229           0 :         return sal_False;
    1230             : 
    1231           0 :     switch(nMemberId)
    1232             :     {
    1233             :         case MID_FONTWIDTH:
    1234           0 :             nProp = nVal;
    1235           0 :         break;
    1236             :         case MID_FONTWIDTH_PROP:
    1237           0 :             nWidth = nVal;
    1238           0 :         break;
    1239             :     }
    1240           0 :     return true;
    1241             : }
    1242             : 
    1243             : //------------------------------------------------------------------------
    1244             : 
    1245           0 : SfxItemPresentation SvxFontWidthItem::GetPresentation
    1246             : (
    1247             :     SfxItemPresentation ePres,
    1248             :     SfxMapUnit          eCoreUnit,
    1249             :     SfxMapUnit          /*ePresUnit*/,
    1250             :     XubString&          rText, const IntlWrapper *pIntl
    1251             : )   const
    1252             : {
    1253           0 :     switch ( ePres )
    1254             :     {
    1255             :         case SFX_ITEM_PRESENTATION_NONE:
    1256           0 :             rText.Erase();
    1257           0 :             return ePres;
    1258             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1259             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1260             :         {
    1261           0 :             if ( 100 == nProp )
    1262             :             {
    1263             :                 rText = GetMetricText( (long)nWidth,
    1264           0 :                                         eCoreUnit, SFX_MAPUNIT_POINT, pIntl );
    1265           0 :                 rText += EE_RESSTR(GetMetricId(SFX_MAPUNIT_POINT));
    1266             :             }
    1267             :             else
    1268           0 :                 ( rText = String::CreateFromInt32( nProp )) += sal_Unicode('%');
    1269           0 :             return ePres;
    1270             :         }
    1271             :         default: ; //prevent warning
    1272             :     }
    1273           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1274             : }
    1275             : 
    1276             : // class SvxTextLineItem ------------------------------------------------
    1277             : 
    1278        2756 : SvxTextLineItem::SvxTextLineItem( const FontUnderline eSt, const sal_uInt16 nId )
    1279        2756 :     : SfxEnumItem( nId, (sal_uInt16)eSt ), mColor( COL_TRANSPARENT )
    1280             : {
    1281        2756 : }
    1282             : 
    1283             : // -----------------------------------------------------------------------
    1284             : 
    1285           0 : int SvxTextLineItem::HasBoolValue() const
    1286             : {
    1287           0 :     return sal_True;
    1288             : }
    1289             : 
    1290             : // -----------------------------------------------------------------------
    1291             : 
    1292           0 : sal_Bool SvxTextLineItem::GetBoolValue() const
    1293             : {
    1294           0 :     return  (FontUnderline)GetValue() != UNDERLINE_NONE;
    1295             : }
    1296             : 
    1297             : // -----------------------------------------------------------------------
    1298             : 
    1299           0 : void SvxTextLineItem::SetBoolValue( sal_Bool bVal )
    1300             : {
    1301           0 :     SetValue( (sal_uInt16)(bVal ? UNDERLINE_SINGLE : UNDERLINE_NONE) );
    1302           0 : }
    1303             : 
    1304             : // -----------------------------------------------------------------------
    1305             : 
    1306           0 : SfxPoolItem* SvxTextLineItem::Clone( SfxItemPool * ) const
    1307             : {
    1308           0 :     SvxTextLineItem* pNew = new SvxTextLineItem( *this );
    1309           0 :     pNew->SetColor( GetColor() );
    1310           0 :     return pNew;
    1311             : }
    1312             : 
    1313             : // -----------------------------------------------------------------------
    1314             : 
    1315           0 : sal_uInt16 SvxTextLineItem::GetValueCount() const
    1316             : {
    1317           0 :     return UNDERLINE_DOTTED + 1;    // UNDERLINE_NONE also belongs here
    1318             : }
    1319             : 
    1320             : // -----------------------------------------------------------------------
    1321             : 
    1322         300 : SvStream& SvxTextLineItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1323             : {
    1324         300 :     rStrm << (sal_uInt8)GetValue();
    1325         300 :     return rStrm;
    1326             : }
    1327             : 
    1328             : // -----------------------------------------------------------------------
    1329             : 
    1330           0 : SfxPoolItem* SvxTextLineItem::Create(SvStream& rStrm, sal_uInt16) const
    1331             : {
    1332             :     sal_uInt8 nState;
    1333           0 :     rStrm >> nState;
    1334           0 :     return new SvxTextLineItem(  (FontUnderline)nState, Which() );
    1335             : }
    1336             : 
    1337             : //------------------------------------------------------------------------
    1338             : 
    1339           0 : SfxItemPresentation SvxTextLineItem::GetPresentation
    1340             : (
    1341             :     SfxItemPresentation ePres,
    1342             :     SfxMapUnit          /*eCoreUnit*/,
    1343             :     SfxMapUnit          /*ePresUnit*/,
    1344             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1345             : )   const
    1346             : {
    1347           0 :     switch ( ePres )
    1348             :     {
    1349             :         case SFX_ITEM_PRESENTATION_NONE:
    1350           0 :             rText.Erase();
    1351           0 :             return ePres;
    1352             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1353             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1354           0 :             rText = GetValueTextByPos( GetValue() );
    1355           0 :             if( !mColor.GetTransparency() )
    1356           0 :                 ( rText += cpDelim ) += ::GetColorString( mColor );
    1357           0 :             return ePres;
    1358             :         default: ; //prevent warning
    1359             :     }
    1360           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1361             : }
    1362             : 
    1363             : // -----------------------------------------------------------------------
    1364             : 
    1365           0 : rtl::OUString SvxTextLineItem::GetValueTextByPos( sal_uInt16 /*nPos*/ ) const
    1366             : {
    1367             :     OSL_FAIL("SvxTextLineItem::GetValueTextByPos: Pure virtual method");
    1368           0 :     return rtl::OUString();
    1369             : }
    1370             : 
    1371           6 : bool SvxTextLineItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1372             : {
    1373           6 :     nMemberId &= ~CONVERT_TWIPS;
    1374           6 :     switch(nMemberId)
    1375             :     {
    1376             :     case MID_TEXTLINED:
    1377           0 :         rVal = Bool2Any(GetBoolValue());
    1378           0 :         break;
    1379             :     case MID_TL_STYLE:
    1380           2 :         rVal <<= (sal_Int16)(GetValue());
    1381           2 :         break;
    1382             :     case MID_TL_COLOR:
    1383           2 :         rVal <<= (sal_Int32)( mColor.GetColor() );
    1384           2 :         break;
    1385             :     case MID_TL_HASCOLOR:
    1386           2 :         rVal = Bool2Any( !mColor.GetTransparency() );
    1387           2 :         break;
    1388             :     }
    1389           6 :     return true;
    1390             : 
    1391             : }
    1392             : 
    1393        5673 : bool SvxTextLineItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1394             : {
    1395        5673 :     nMemberId &= ~CONVERT_TWIPS;
    1396        5673 :     sal_Bool bRet = sal_True;
    1397        5673 :     switch(nMemberId)
    1398             :     {
    1399             :     case MID_TEXTLINED:
    1400           0 :         SetBoolValue(Any2Bool(rVal));
    1401           0 :     break;
    1402             :     case MID_TL_STYLE:
    1403             :     {
    1404        2031 :         sal_Int32 nValue = 0;
    1405        2031 :         if(!(rVal >>= nValue))
    1406           0 :             bRet = sal_False;
    1407             :         else
    1408        2031 :             SetValue((sal_Int16)nValue);
    1409             :     }
    1410        2031 :     break;
    1411             :     case MID_TL_COLOR:
    1412             :     {
    1413        1804 :         sal_Int32 nCol = 0;
    1414        1804 :         if( !( rVal >>= nCol ) )
    1415           0 :             bRet = sal_False;
    1416             :         else
    1417             :         {
    1418             :             // Keep transparence, because it contains the information
    1419             :             // whether the font color or the stored color should be used
    1420        1804 :             sal_uInt8 nTrans = mColor.GetTransparency();
    1421        1804 :             mColor = Color( nCol );
    1422        1804 :             mColor.SetTransparency( nTrans );
    1423             :         }
    1424             :     }
    1425        1804 :     break;
    1426             :     case MID_TL_HASCOLOR:
    1427        1838 :         mColor.SetTransparency( Any2Bool( rVal ) ? 0 : 0xff );
    1428        1838 :     break;
    1429             :     }
    1430        5673 :     return bRet;
    1431             : }
    1432             : 
    1433       11230 : int SvxTextLineItem::operator==( const SfxPoolItem& rItem ) const
    1434             : {
    1435             :     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
    1436       11230 :     return SfxEnumItem::operator==( rItem ) &&
    1437       11230 :            GetColor() == ((SvxTextLineItem&)rItem).GetColor();
    1438             : }
    1439             : 
    1440             : // class SvxUnderlineItem ------------------------------------------------
    1441             : 
    1442        2043 : SvxUnderlineItem::SvxUnderlineItem( const FontUnderline eSt, const sal_uInt16 nId )
    1443        2043 :     : SvxTextLineItem( eSt, nId )
    1444             : {
    1445        2043 : }
    1446             : 
    1447             : //------------------------------------------------------------------------
    1448             : 
    1449        4731 : SfxPoolItem* SvxUnderlineItem::Clone( SfxItemPool * ) const
    1450             : {
    1451        4731 :     SvxUnderlineItem* pNew = new SvxUnderlineItem( *this );
    1452        4731 :     pNew->SetColor( GetColor() );
    1453        4731 :     return pNew;
    1454             : }
    1455             : 
    1456             : // -----------------------------------------------------------------------
    1457             : 
    1458           0 : SfxPoolItem* SvxUnderlineItem::Create(SvStream& rStrm, sal_uInt16) const
    1459             : {
    1460             :     sal_uInt8 nState;
    1461           0 :     rStrm >> nState;
    1462           0 :     return new SvxUnderlineItem(  (FontUnderline)nState, Which() );
    1463             : }
    1464             : 
    1465             : // -----------------------------------------------------------------------
    1466             : 
    1467           0 : rtl::OUString SvxUnderlineItem::GetValueTextByPos( sal_uInt16 nPos ) const
    1468             : {
    1469             :     DBG_ASSERT( nPos <= (sal_uInt16)UNDERLINE_BOLDWAVE, "enum overflow!" );
    1470           0 :     return EE_RESSTR(RID_SVXITEMS_UL_BEGIN + nPos);
    1471             : }
    1472             : 
    1473             : // class SvxOverlineItem ------------------------------------------------
    1474             : 
    1475         713 : SvxOverlineItem::SvxOverlineItem( const FontUnderline eSt, const sal_uInt16 nId )
    1476         713 :     : SvxTextLineItem( eSt, nId )
    1477             : {
    1478         713 : }
    1479             : 
    1480             : //------------------------------------------------------------------------
    1481             : 
    1482        4304 : SfxPoolItem* SvxOverlineItem::Clone( SfxItemPool * ) const
    1483             : {
    1484        4304 :     SvxOverlineItem* pNew = new SvxOverlineItem( *this );
    1485        4304 :     pNew->SetColor( GetColor() );
    1486        4304 :     return pNew;
    1487             : }
    1488             : 
    1489             : // -----------------------------------------------------------------------
    1490             : 
    1491           0 : SfxPoolItem* SvxOverlineItem::Create(SvStream& rStrm, sal_uInt16) const
    1492             : {
    1493             :     sal_uInt8 nState;
    1494           0 :     rStrm >> nState;
    1495           0 :     return new SvxOverlineItem(  (FontUnderline)nState, Which() );
    1496             : }
    1497             : 
    1498             : // -----------------------------------------------------------------------
    1499             : 
    1500           0 : rtl::OUString SvxOverlineItem::GetValueTextByPos( sal_uInt16 nPos ) const
    1501             : {
    1502             :     DBG_ASSERT( nPos <= (sal_uInt16)UNDERLINE_BOLDWAVE, "enum overflow!" );
    1503           0 :     return EE_RESSTR(RID_SVXITEMS_OL_BEGIN + nPos);
    1504             : }
    1505             : 
    1506             : // class SvxCrossedOutItem -----------------------------------------------
    1507             : 
    1508        1923 : SvxCrossedOutItem::SvxCrossedOutItem( const FontStrikeout eSt, const sal_uInt16 nId )
    1509        1923 :     : SfxEnumItem( nId, (sal_uInt16)eSt )
    1510             : {
    1511        1923 : }
    1512             : 
    1513             : // -----------------------------------------------------------------------
    1514             : 
    1515           0 : int SvxCrossedOutItem::HasBoolValue() const
    1516             : {
    1517           0 :     return sal_True;
    1518             : }
    1519             : 
    1520             : // -----------------------------------------------------------------------
    1521             : 
    1522           0 : sal_Bool SvxCrossedOutItem::GetBoolValue() const
    1523             : {
    1524           0 :     return (FontStrikeout)GetValue() != STRIKEOUT_NONE;
    1525             : }
    1526             : 
    1527             : // -----------------------------------------------------------------------
    1528             : 
    1529           0 : void SvxCrossedOutItem::SetBoolValue( sal_Bool bVal )
    1530             : {
    1531           0 :     SetValue( (sal_uInt16)(bVal ? STRIKEOUT_SINGLE : STRIKEOUT_NONE) );
    1532           0 : }
    1533             : 
    1534             : // -----------------------------------------------------------------------
    1535             : 
    1536           0 : sal_uInt16 SvxCrossedOutItem::GetValueCount() const
    1537             : {
    1538           0 :     return STRIKEOUT_DOUBLE + 1;    // STRIKEOUT_NONE belongs also here
    1539             : }
    1540             : 
    1541             : // -----------------------------------------------------------------------
    1542             : 
    1543        2711 : SfxPoolItem* SvxCrossedOutItem::Clone( SfxItemPool * ) const
    1544             : {
    1545        2711 :     return new SvxCrossedOutItem( *this );
    1546             : }
    1547             : 
    1548             : // -----------------------------------------------------------------------
    1549             : 
    1550         150 : SvStream& SvxCrossedOutItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1551             : {
    1552         150 :     rStrm << (sal_uInt8)GetValue();
    1553         150 :     return rStrm;
    1554             : }
    1555             : 
    1556             : // -----------------------------------------------------------------------
    1557             : 
    1558           0 : SfxPoolItem* SvxCrossedOutItem::Create(SvStream& rStrm, sal_uInt16) const
    1559             : {
    1560             :     sal_uInt8 eCross;
    1561           0 :     rStrm >> eCross;
    1562           0 :     return new SvxCrossedOutItem(  (FontStrikeout)eCross, Which() );
    1563             : }
    1564             : 
    1565             : //------------------------------------------------------------------------
    1566             : 
    1567           0 : SfxItemPresentation SvxCrossedOutItem::GetPresentation
    1568             : (
    1569             :     SfxItemPresentation ePres,
    1570             :     SfxMapUnit          /*eCoreUnit*/,
    1571             :     SfxMapUnit          /*ePresUnit*/,
    1572             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1573             : )   const
    1574             : {
    1575           0 :     switch ( ePres )
    1576             :     {
    1577             :         case SFX_ITEM_PRESENTATION_NONE:
    1578           0 :             rText.Erase();
    1579           0 :             return ePres;
    1580             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1581             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1582           0 :             rText = GetValueTextByPos( GetValue() );
    1583           0 :             return ePres;
    1584             :         default: ;//prevent warning
    1585             :     }
    1586           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1587             : }
    1588             : 
    1589             : // -----------------------------------------------------------------------
    1590             : 
    1591           0 : rtl::OUString SvxCrossedOutItem::GetValueTextByPos( sal_uInt16 nPos ) const
    1592             : {
    1593             :     DBG_ASSERT( nPos <= (sal_uInt16)STRIKEOUT_X, "enum overflow!" );
    1594           0 :     return EE_RESSTR(RID_SVXITEMS_STRIKEOUT_BEGIN + nPos);
    1595             : }
    1596             : 
    1597           0 : bool SvxCrossedOutItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1598             : {
    1599           0 :     nMemberId &= ~CONVERT_TWIPS;
    1600           0 :     switch(nMemberId)
    1601             :     {
    1602             :         case MID_CROSSED_OUT:
    1603           0 :             rVal = Bool2Any(GetBoolValue());
    1604           0 :         break;
    1605             :         case MID_CROSS_OUT:
    1606           0 :             rVal <<= (sal_Int16)(GetValue());
    1607           0 :         break;
    1608             :     }
    1609           0 :     return true;
    1610             : }
    1611             : 
    1612        1077 : bool SvxCrossedOutItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1613             : {
    1614        1077 :     nMemberId &= ~CONVERT_TWIPS;
    1615        1077 :     switch(nMemberId)
    1616             :     {
    1617             :         case MID_CROSSED_OUT:
    1618           0 :             SetBoolValue(Any2Bool(rVal));
    1619           0 :         break;
    1620             :         case MID_CROSS_OUT:
    1621             :         {
    1622        1077 :             sal_Int32 nValue = 0;
    1623        1077 :             if(!(rVal >>= nValue))
    1624           0 :                 return sal_False;
    1625        1077 :             SetValue((sal_Int16)nValue);
    1626             :         }
    1627        1077 :         break;
    1628             :     }
    1629        1077 :     return sal_True;
    1630             : }
    1631             : // class SvxShadowedItem -------------------------------------------------
    1632             : 
    1633        1922 : SvxShadowedItem::SvxShadowedItem( const sal_Bool bShadowed, const sal_uInt16 nId ) :
    1634        1922 :     SfxBoolItem( nId, bShadowed )
    1635             : {
    1636        1922 : }
    1637             : 
    1638             : // -----------------------------------------------------------------------
    1639             : 
    1640        2605 : SfxPoolItem* SvxShadowedItem::Clone( SfxItemPool * ) const
    1641             : {
    1642        2605 :     return new SvxShadowedItem( *this );
    1643             : }
    1644             : 
    1645             : // -----------------------------------------------------------------------
    1646             : 
    1647         150 : SvStream& SvxShadowedItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1648             : {
    1649         150 :     rStrm << (sal_uInt8) GetValue();
    1650         150 :     return rStrm;
    1651             : }
    1652             : 
    1653             : // -----------------------------------------------------------------------
    1654             : 
    1655           0 : SfxPoolItem* SvxShadowedItem::Create(SvStream& rStrm, sal_uInt16) const
    1656             : {
    1657             :     sal_uInt8 nState;
    1658           0 :     rStrm >> nState;
    1659           0 :     return new SvxShadowedItem( nState, Which() );
    1660             : }
    1661             : 
    1662             : //------------------------------------------------------------------------
    1663             : 
    1664           0 : SfxItemPresentation SvxShadowedItem::GetPresentation
    1665             : (
    1666             :     SfxItemPresentation ePres,
    1667             :     SfxMapUnit          /*eCoreUnit*/,
    1668             :     SfxMapUnit          /*ePresUnit*/,
    1669             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1670             : )   const
    1671             : {
    1672           0 :     switch ( ePres )
    1673             :     {
    1674             :         case SFX_ITEM_PRESENTATION_NONE:
    1675           0 :             rText.Erase();
    1676           0 :             return ePres;
    1677             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1678             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1679             :         {
    1680           0 :             sal_uInt16 nId = RID_SVXITEMS_SHADOWED_FALSE;
    1681             : 
    1682           0 :             if ( GetValue() )
    1683           0 :                 nId = RID_SVXITEMS_SHADOWED_TRUE;
    1684           0 :             rText = EE_RESSTR(nId);
    1685           0 :             return ePres;
    1686             :         }
    1687             :         default: ; //prevent warning
    1688             :     }
    1689           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1690             : }
    1691             : 
    1692             : // class SvxAutoKernItem -------------------------------------------------
    1693             : 
    1694         436 : SvxAutoKernItem::SvxAutoKernItem( const sal_Bool bAutoKern, const sal_uInt16 nId ) :
    1695         436 :     SfxBoolItem( nId, bAutoKern )
    1696             : {
    1697         436 : }
    1698             : 
    1699             : // -----------------------------------------------------------------------
    1700             : 
    1701        1501 : SfxPoolItem* SvxAutoKernItem::Clone( SfxItemPool * ) const
    1702             : {
    1703        1501 :     return new SvxAutoKernItem( *this );
    1704             : }
    1705             : 
    1706             : // -----------------------------------------------------------------------
    1707             : 
    1708           0 : SvStream& SvxAutoKernItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1709             : {
    1710           0 :     rStrm << (sal_uInt8) GetValue();
    1711           0 :     return rStrm;
    1712             : }
    1713             : 
    1714             : // -----------------------------------------------------------------------
    1715             : 
    1716           0 : SfxPoolItem* SvxAutoKernItem::Create(SvStream& rStrm, sal_uInt16) const
    1717             : {
    1718             :     sal_uInt8 nState;
    1719           0 :     rStrm >> nState;
    1720           0 :     return new SvxAutoKernItem( nState, Which() );
    1721             : }
    1722             : 
    1723             : //------------------------------------------------------------------------
    1724             : 
    1725           0 : SfxItemPresentation SvxAutoKernItem::GetPresentation
    1726             : (
    1727             :     SfxItemPresentation ePres,
    1728             :     SfxMapUnit          /*eCoreUnit*/,
    1729             :     SfxMapUnit          /*ePresUnit*/,
    1730             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1731             : )   const
    1732             : {
    1733           0 :     switch ( ePres )
    1734             :     {
    1735             :         case SFX_ITEM_PRESENTATION_NONE:
    1736           0 :             rText.Erase();
    1737           0 :             return ePres;
    1738             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1739             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1740             :         {
    1741           0 :             sal_uInt16 nId = RID_SVXITEMS_AUTOKERN_FALSE;
    1742             : 
    1743           0 :             if ( GetValue() )
    1744           0 :                 nId = RID_SVXITEMS_AUTOKERN_TRUE;
    1745           0 :             rText = EE_RESSTR(nId);
    1746           0 :             return ePres;
    1747             :         }
    1748             :         default: ; //prevent warning
    1749             :     }
    1750           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1751             : }
    1752             : 
    1753             : // class SvxWordLineModeItem ---------------------------------------------
    1754             : 
    1755         652 : SvxWordLineModeItem::SvxWordLineModeItem( const sal_Bool bWordLineMode,
    1756             :                                           const sal_uInt16 nId ) :
    1757         652 :     SfxBoolItem( nId, bWordLineMode )
    1758             : {
    1759         652 : }
    1760             : 
    1761             : // -----------------------------------------------------------------------
    1762             : 
    1763        2486 : SfxPoolItem* SvxWordLineModeItem::Clone( SfxItemPool * ) const
    1764             : {
    1765        2486 :     return new SvxWordLineModeItem( *this );
    1766             : }
    1767             : 
    1768             : // -----------------------------------------------------------------------
    1769             : 
    1770         150 : SvStream& SvxWordLineModeItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1771             : {
    1772         150 :     rStrm << (sal_Bool) GetValue();
    1773         150 :     return rStrm;
    1774             : }
    1775             : 
    1776             : // -----------------------------------------------------------------------
    1777             : 
    1778           0 : SfxPoolItem* SvxWordLineModeItem::Create(SvStream& rStrm, sal_uInt16) const
    1779             : {
    1780             :     sal_Bool bValue;
    1781           0 :     rStrm >> bValue;
    1782           0 :     return new SvxWordLineModeItem( bValue, Which() );
    1783             : }
    1784             : 
    1785             : //------------------------------------------------------------------------
    1786             : 
    1787           0 : SfxItemPresentation SvxWordLineModeItem::GetPresentation
    1788             : (
    1789             :     SfxItemPresentation ePres,
    1790             :     SfxMapUnit          /*eCoreUnit*/,
    1791             :     SfxMapUnit          /*ePresUnit*/,
    1792             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1793             : )   const
    1794             : {
    1795           0 :     switch ( ePres )
    1796             :     {
    1797             :         case SFX_ITEM_PRESENTATION_NONE:
    1798           0 :             rText.Erase();
    1799           0 :             return ePres;
    1800             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1801             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1802             :         {
    1803           0 :             sal_uInt16 nId = RID_SVXITEMS_WORDLINE_FALSE;
    1804             : 
    1805           0 :             if ( GetValue() )
    1806           0 :                 nId = RID_SVXITEMS_WORDLINE_TRUE;
    1807           0 :             rText = EE_RESSTR(nId);
    1808           0 :             return ePres;
    1809             :         }
    1810             :         default: ; //prevent warning
    1811             :     }
    1812           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1813             : }
    1814             : 
    1815             : // class SvxContourItem --------------------------------------------------
    1816             : 
    1817        1837 : SvxContourItem::SvxContourItem( const sal_Bool bContoured, const sal_uInt16 nId ) :
    1818        1837 :     SfxBoolItem( nId, bContoured )
    1819             : {
    1820        1837 : }
    1821             : 
    1822             : // -----------------------------------------------------------------------
    1823             : 
    1824        2576 : SfxPoolItem* SvxContourItem::Clone( SfxItemPool * ) const
    1825             : {
    1826        2576 :     return new SvxContourItem( *this );
    1827             : }
    1828             : 
    1829             : // -----------------------------------------------------------------------
    1830             : 
    1831         150 : SvStream& SvxContourItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1832             : {
    1833         150 :     rStrm << (sal_Bool) GetValue();
    1834         150 :     return rStrm;
    1835             : }
    1836             : 
    1837             : // -----------------------------------------------------------------------
    1838             : 
    1839           0 : SfxPoolItem* SvxContourItem::Create(SvStream& rStrm, sal_uInt16) const
    1840             : {
    1841             :     sal_Bool bValue;
    1842           0 :     rStrm >> bValue;
    1843           0 :     return new SvxContourItem( bValue, Which() );
    1844             : }
    1845             : 
    1846             : //------------------------------------------------------------------------
    1847             : 
    1848           0 : SfxItemPresentation SvxContourItem::GetPresentation
    1849             : (
    1850             :     SfxItemPresentation ePres,
    1851             :     SfxMapUnit          /*eCoreUnit*/,
    1852             :     SfxMapUnit          /*ePresUnit*/,
    1853             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1854             : )   const
    1855             : {
    1856           0 :     switch ( ePres )
    1857             :     {
    1858             :         case SFX_ITEM_PRESENTATION_NONE:
    1859           0 :             rText.Erase();
    1860           0 :             return ePres;
    1861             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    1862             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    1863             :         {
    1864           0 :             sal_uInt16 nId = RID_SVXITEMS_CONTOUR_FALSE;
    1865             : 
    1866           0 :             if ( GetValue() )
    1867           0 :                 nId = RID_SVXITEMS_CONTOUR_TRUE;
    1868           0 :             rText = EE_RESSTR(nId);
    1869           0 :             return ePres;
    1870             :         }
    1871             :         default: ; //prevent warning
    1872             :     }
    1873           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1874             : }
    1875             : 
    1876             : // class SvxPropSizeItem -------------------------------------------------
    1877             : 
    1878          10 : SvxPropSizeItem::SvxPropSizeItem( const sal_uInt16 nPercent, const sal_uInt16 nId ) :
    1879          10 :     SfxUInt16Item( nId, nPercent )
    1880             : {
    1881          10 : }
    1882             : 
    1883             : // -----------------------------------------------------------------------
    1884             : 
    1885           0 : SfxPoolItem* SvxPropSizeItem::Clone( SfxItemPool * ) const
    1886             : {
    1887           0 :     return new SvxPropSizeItem( *this );
    1888             : }
    1889             : 
    1890             : // -----------------------------------------------------------------------
    1891             : 
    1892           0 : SvStream& SvxPropSizeItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    1893             : {
    1894           0 :     rStrm << (sal_uInt16) GetValue();
    1895           0 :     return rStrm;
    1896             : }
    1897             : 
    1898             : // -----------------------------------------------------------------------
    1899             : 
    1900           0 : SfxPoolItem* SvxPropSizeItem::Create(SvStream& rStrm, sal_uInt16) const
    1901             : {
    1902             :     sal_uInt16 nSize;
    1903           0 :     rStrm >> nSize;
    1904           0 :     return new SvxPropSizeItem( nSize, Which() );
    1905             : }
    1906             : 
    1907             : //------------------------------------------------------------------------
    1908             : 
    1909           0 : SfxItemPresentation SvxPropSizeItem::GetPresentation
    1910             : (
    1911             :     SfxItemPresentation /*ePres*/,
    1912             :     SfxMapUnit          /*eCoreUnit*/,
    1913             :     SfxMapUnit          /*ePresUnit*/,
    1914             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    1915             : )   const
    1916             : {
    1917           0 :     rText.Erase();
    1918           0 :     return SFX_ITEM_PRESENTATION_NONE;
    1919             : }
    1920             : 
    1921             : // class SvxColorItem ----------------------------------------------------
    1922             : 
    1923         449 : SvxColorItem::SvxColorItem( const sal_uInt16 nId ) :
    1924             :     SfxPoolItem( nId ),
    1925         449 :     mColor( COL_BLACK )
    1926             : {
    1927         449 : }
    1928             : 
    1929             : // -----------------------------------------------------------------------
    1930             : 
    1931        8817 : SvxColorItem::SvxColorItem( const Color& rCol, const sal_uInt16 nId ) :
    1932             :     SfxPoolItem( nId ),
    1933        8817 :     mColor( rCol )
    1934             : {
    1935        8817 : }
    1936             : 
    1937             : // -----------------------------------------------------------------------
    1938             : 
    1939           0 : SvxColorItem::SvxColorItem( SvStream &rStrm, const sal_uInt16 nId ) :
    1940           0 :     SfxPoolItem( nId )
    1941             : {
    1942           0 :     Color aColor;
    1943           0 :     rStrm >> aColor;
    1944           0 :     mColor = aColor;
    1945           0 : }
    1946             : 
    1947             : // -----------------------------------------------------------------------
    1948             : 
    1949        5284 : SvxColorItem::SvxColorItem( const SvxColorItem &rCopy ) :
    1950             :     SfxPoolItem( rCopy ),
    1951        5284 :     mColor( rCopy.mColor )
    1952             : {
    1953        5284 : }
    1954             : 
    1955             : // -----------------------------------------------------------------------
    1956             : 
    1957       16287 : SvxColorItem::~SvxColorItem()
    1958             : {
    1959       16287 : }
    1960             : 
    1961             : // -----------------------------------------------------------------------
    1962        3552 : sal_uInt16 SvxColorItem::GetVersion( sal_uInt16 nFFVer ) const
    1963             : {
    1964             :     DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
    1965             :             SOFFICE_FILEFORMAT_40==nFFVer ||
    1966             :             SOFFICE_FILEFORMAT_50==nFFVer,
    1967             :             "SvxColorItem: Is there a new file format? ");
    1968        3552 :     return  SOFFICE_FILEFORMAT_50 >= nFFVer ? VERSION_USEAUTOCOLOR : 0;
    1969             : }
    1970             : 
    1971             : // -----------------------------------------------------------------------
    1972             : 
    1973       28880 : int SvxColorItem::operator==( const SfxPoolItem& rAttr ) const
    1974             : {
    1975             :     DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
    1976             : 
    1977       28880 :     return  mColor == ( (const SvxColorItem&)rAttr ).mColor;
    1978             : }
    1979             : 
    1980             : // -----------------------------------------------------------------------
    1981             : 
    1982           5 : bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
    1983             : {
    1984           5 :     rVal <<= (sal_Int32)(mColor.GetColor());
    1985           5 :     return true;
    1986             : }
    1987             : 
    1988             : // -----------------------------------------------------------------------
    1989             : 
    1990        1403 : bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ )
    1991             : {
    1992        1403 :     sal_Int32 nColor = 0;
    1993        1403 :     if(!(rVal >>= nColor))
    1994           0 :         return sal_False;
    1995             : 
    1996        1403 :     mColor.SetColor( nColor );
    1997        1403 :     return true;
    1998             : }
    1999             : 
    2000             : // -----------------------------------------------------------------------
    2001             : 
    2002        5284 : SfxPoolItem* SvxColorItem::Clone( SfxItemPool * ) const
    2003             : {
    2004        5284 :     return new SvxColorItem( *this );
    2005             : }
    2006             : 
    2007             : // -----------------------------------------------------------------------
    2008             : 
    2009         150 : SvStream& SvxColorItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const
    2010             : {
    2011         300 :     if( VERSION_USEAUTOCOLOR == nItemVersion &&
    2012         150 :         COL_AUTO == mColor.GetColor() )
    2013         136 :         rStrm << Color( COL_BLACK );
    2014             :     else
    2015          14 :         rStrm << mColor;
    2016         150 :     return rStrm;
    2017             : }
    2018             : 
    2019             : // -----------------------------------------------------------------------
    2020             : 
    2021           0 : SfxPoolItem* SvxColorItem::Create(SvStream& rStrm, sal_uInt16 /*nVer*/ ) const
    2022             : {
    2023           0 :     return new SvxColorItem( rStrm, Which() );
    2024             : }
    2025             : 
    2026             : //------------------------------------------------------------------------
    2027             : 
    2028           0 : SfxItemPresentation SvxColorItem::GetPresentation
    2029             : (
    2030             :     SfxItemPresentation ePres,
    2031             :     SfxMapUnit          /*eCoreUnit*/,
    2032             :     SfxMapUnit          /*ePresUnit*/,
    2033             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2034             : )   const
    2035             : {
    2036           0 :     switch ( ePres )
    2037             :     {
    2038             :         case SFX_ITEM_PRESENTATION_NONE:
    2039           0 :             rText.Erase();
    2040           0 :             return ePres;
    2041             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2042             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2043           0 :             rText = ::GetColorString( mColor );
    2044           0 :             return ePres;
    2045             :         default: ; //prevent warning
    2046             :     }
    2047           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2048             : }
    2049             : 
    2050             : // -----------------------------------------------------------------------
    2051             : 
    2052         429 : void SvxColorItem::SetValue( const Color& rNewCol )
    2053             : {
    2054         429 :     mColor = rNewCol;
    2055         429 : }
    2056             : 
    2057             : // class SvxCharSetColorItem ---------------------------------------------
    2058             : 
    2059          10 : SvxCharSetColorItem::SvxCharSetColorItem( const sal_uInt16 nId ) :
    2060             :     SvxColorItem( nId ),
    2061             : 
    2062          10 :     eFrom( RTL_TEXTENCODING_DONTKNOW )
    2063             : {
    2064          10 : }
    2065             : 
    2066             : // -----------------------------------------------------------------------
    2067             : 
    2068          18 : SvxCharSetColorItem::SvxCharSetColorItem( const Color& rCol,
    2069             :                                           const rtl_TextEncoding _eFrom,
    2070             :                                           const sal_uInt16 nId ) :
    2071             :     SvxColorItem( rCol, nId ),
    2072             : 
    2073          18 :     eFrom( _eFrom )
    2074             : {
    2075          18 : }
    2076             : 
    2077             : 
    2078             : // -----------------------------------------------------------------------
    2079             : 
    2080           0 : SfxPoolItem* SvxCharSetColorItem::Clone( SfxItemPool * ) const
    2081             : {
    2082           0 :     return new SvxCharSetColorItem( *this );
    2083             : }
    2084             : 
    2085             : // -----------------------------------------------------------------------
    2086             : 
    2087           0 : SvStream& SvxCharSetColorItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2088             : {
    2089           0 :     rStrm << (sal_uInt8)GetSOStoreTextEncoding(GetCharSet()) << GetValue();
    2090           0 :     return rStrm;
    2091             : }
    2092             : 
    2093             : // -----------------------------------------------------------------------
    2094             : 
    2095           0 : SfxPoolItem* SvxCharSetColorItem::Create(SvStream& rStrm, sal_uInt16) const
    2096             : {
    2097             :     sal_uInt8 cSet;
    2098           0 :     Color aColor;
    2099           0 :     rStrm >> cSet >> aColor;
    2100           0 :     return new SvxCharSetColorItem( aColor,  (rtl_TextEncoding)cSet, Which() );
    2101             : }
    2102             : 
    2103             : //------------------------------------------------------------------------
    2104             : 
    2105           0 : SfxItemPresentation SvxCharSetColorItem::GetPresentation
    2106             : (
    2107             :     SfxItemPresentation /*ePres*/,
    2108             :     SfxMapUnit          /*eCoreUnit*/,
    2109             :     SfxMapUnit          /*ePresUnit*/,
    2110             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2111             : )   const
    2112             : {
    2113           0 :     rText.Erase();
    2114           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2115             : }
    2116             : 
    2117             : // class SvxKerningItem --------------------------------------------------
    2118             : 
    2119          29 : SvxKerningItem::SvxKerningItem( const short nKern, const sal_uInt16 nId ) :
    2120          29 :     SfxInt16Item( nId, nKern )
    2121             : {
    2122          29 : }
    2123             : 
    2124             : // -----------------------------------------------------------------------
    2125             : 
    2126        1127 : SfxPoolItem* SvxKerningItem::Clone( SfxItemPool * ) const
    2127             : {
    2128        1127 :     return new SvxKerningItem( *this );
    2129             : }
    2130             : 
    2131             : // -----------------------------------------------------------------------
    2132             : 
    2133           0 : SvStream& SvxKerningItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2134             : {
    2135           0 :     rStrm << (short) GetValue();
    2136           0 :     return rStrm;
    2137             : }
    2138             : 
    2139             : // -----------------------------------------------------------------------
    2140             : 
    2141           0 : bool SvxKerningItem::ScaleMetrics( long nMult, long nDiv )
    2142             : {
    2143           0 :     SetValue( (sal_Int16)Scale( GetValue(), nMult, nDiv ) );
    2144           0 :     return true;
    2145             : }
    2146             : 
    2147             : // -----------------------------------------------------------------------
    2148             : 
    2149           0 : bool SvxKerningItem::HasMetrics() const
    2150             : {
    2151           0 :     return true;
    2152             : }
    2153             : 
    2154             : // -----------------------------------------------------------------------
    2155             : 
    2156           0 : SfxPoolItem* SvxKerningItem::Create(SvStream& rStrm, sal_uInt16) const
    2157             : {
    2158             :     short nValue;
    2159           0 :     rStrm >> nValue;
    2160           0 :     return new SvxKerningItem( nValue, Which() );
    2161             : }
    2162             : 
    2163             : //------------------------------------------------------------------------
    2164             : 
    2165           0 : SfxItemPresentation SvxKerningItem::GetPresentation
    2166             : (
    2167             :     SfxItemPresentation ePres,
    2168             :     SfxMapUnit          eCoreUnit,
    2169             :     SfxMapUnit          /*ePresUnit*/,
    2170             :     XubString&          rText, const IntlWrapper *pIntl
    2171             : )   const
    2172             : {
    2173           0 :     switch ( ePres )
    2174             :     {
    2175             :         case SFX_ITEM_PRESENTATION_NONE:
    2176           0 :             rText.Erase();
    2177           0 :             return ePres;
    2178             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2179           0 :             rText = GetMetricText( (long)GetValue(), eCoreUnit, SFX_MAPUNIT_POINT, pIntl );
    2180           0 :             rText += EE_RESSTR(GetMetricId(SFX_MAPUNIT_POINT));
    2181           0 :             return ePres;
    2182             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2183             :         {
    2184           0 :             rText = EE_RESSTR(RID_SVXITEMS_KERNING_COMPLETE);
    2185           0 :             sal_uInt16 nId = 0;
    2186             : 
    2187           0 :             if ( GetValue() > 0 )
    2188           0 :                 nId = RID_SVXITEMS_KERNING_EXPANDED;
    2189           0 :             else if ( GetValue() < 0 )
    2190           0 :                 nId = RID_SVXITEMS_KERNING_CONDENSED;
    2191             : 
    2192           0 :             if ( nId )
    2193           0 :                 rText += EE_RESSTR(nId);
    2194           0 :             rText += GetMetricText( (long)GetValue(), eCoreUnit, SFX_MAPUNIT_POINT, pIntl );
    2195           0 :             rText += EE_RESSTR(GetMetricId(SFX_MAPUNIT_POINT));
    2196           0 :             return ePres;
    2197             :         }
    2198             :         default: ; //prevent warning
    2199             :     }
    2200           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2201             : }
    2202             : 
    2203           0 : bool SvxKerningItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2204             : {
    2205           0 :     sal_Int16 nVal = GetValue();
    2206           0 :     if(nMemberId & CONVERT_TWIPS)
    2207           0 :         nVal = (sal_Int16)TWIP_TO_MM100(nVal);
    2208           0 :     rVal <<= nVal;
    2209           0 :     return true;
    2210             : }
    2211             : // -----------------------------------------------------------------------
    2212        1051 : bool SvxKerningItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId)
    2213             : {
    2214        1051 :     sal_Int16 nVal = sal_Int16();
    2215        1051 :     if(!(rVal >>= nVal))
    2216           0 :         return false;
    2217        1051 :     if(nMemberId & CONVERT_TWIPS)
    2218          41 :         nVal = (sal_Int16)MM100_TO_TWIP(nVal);
    2219        1051 :     SetValue(nVal);
    2220        1051 :     return true;
    2221             : }
    2222             : 
    2223             : // class SvxCaseMapItem --------------------------------------------------
    2224             : 
    2225          10 : SvxCaseMapItem::SvxCaseMapItem( const SvxCaseMap eMap, const sal_uInt16 nId ) :
    2226          10 :     SfxEnumItem( nId, (sal_uInt16)eMap )
    2227             : {
    2228          10 : }
    2229             : 
    2230             : // -----------------------------------------------------------------------
    2231             : 
    2232           0 : sal_uInt16 SvxCaseMapItem::GetValueCount() const
    2233             : {
    2234           0 :     return SVX_CASEMAP_END; // SVX_CASEMAP_KAPITAELCHEN + 1
    2235             : }
    2236             : 
    2237             : // -----------------------------------------------------------------------
    2238             : 
    2239          36 : SfxPoolItem* SvxCaseMapItem::Clone( SfxItemPool * ) const
    2240             : {
    2241          36 :     return new SvxCaseMapItem( *this );
    2242             : }
    2243             : 
    2244             : // -----------------------------------------------------------------------
    2245             : 
    2246           0 : SvStream& SvxCaseMapItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2247             : {
    2248           0 :     rStrm << (sal_uInt8) GetValue();
    2249           0 :     return rStrm;
    2250             : }
    2251             : 
    2252             : // -----------------------------------------------------------------------
    2253             : 
    2254           0 : SfxPoolItem* SvxCaseMapItem::Create(SvStream& rStrm, sal_uInt16) const
    2255             : {
    2256             :     sal_uInt8 cMap;
    2257           0 :     rStrm >> cMap;
    2258           0 :     return new SvxCaseMapItem( (const SvxCaseMap)cMap, Which() );
    2259             : }
    2260             : 
    2261             : //------------------------------------------------------------------------
    2262             : 
    2263           0 : SfxItemPresentation SvxCaseMapItem::GetPresentation
    2264             : (
    2265             :     SfxItemPresentation ePres,
    2266             :     SfxMapUnit          /*eCoreUnit*/,
    2267             :     SfxMapUnit          /*ePresUnit*/,
    2268             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2269             : )   const
    2270             : {
    2271           0 :     switch ( ePres )
    2272             :     {
    2273             :         case SFX_ITEM_PRESENTATION_NONE:
    2274           0 :             rText.Erase();
    2275           0 :             return ePres;
    2276             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2277             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2278           0 :             rText = GetValueTextByPos( GetValue() );
    2279           0 :             return ePres;
    2280             :         default: ; //prevent warning
    2281             :     }
    2282           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2283             : }
    2284             : 
    2285             : // -----------------------------------------------------------------------
    2286             : 
    2287           0 : rtl::OUString SvxCaseMapItem::GetValueTextByPos( sal_uInt16 nPos ) const
    2288             : {
    2289             :     DBG_ASSERT( nPos < (sal_uInt16)SVX_CASEMAP_END, "enum overflow!" );
    2290           0 :     return EE_RESSTR(RID_SVXITEMS_CASEMAP_BEGIN + nPos);
    2291             : }
    2292             : 
    2293           1 : bool SvxCaseMapItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
    2294             : {
    2295           1 :     sal_Int16 nRet = style::CaseMap::NONE;
    2296           1 :     switch( GetValue() )
    2297             :     {
    2298           1 :         case SVX_CASEMAP_VERSALIEN   :      nRet = style::CaseMap::UPPERCASE; break;
    2299           0 :         case SVX_CASEMAP_GEMEINE     :      nRet = style::CaseMap::LOWERCASE; break;
    2300           0 :         case SVX_CASEMAP_TITEL       :      nRet = style::CaseMap::TITLE    ; break;
    2301           0 :         case SVX_CASEMAP_KAPITAELCHEN:      nRet = style::CaseMap::SMALLCAPS; break;
    2302             :     }
    2303           1 :     rVal <<= (sal_Int16)(nRet);
    2304           1 :     return true;
    2305             : }
    2306             : 
    2307          31 : bool SvxCaseMapItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ )
    2308             : {
    2309          31 :     sal_uInt16 nVal = sal_uInt16();
    2310          31 :     if(!(rVal >>= nVal))
    2311           0 :         return sal_False;
    2312             : 
    2313          31 :     switch( nVal )
    2314             :     {
    2315           0 :     case style::CaseMap::NONE    :  nVal = SVX_CASEMAP_NOT_MAPPED  ; break;
    2316           5 :     case style::CaseMap::UPPERCASE:  nVal = SVX_CASEMAP_VERSALIEN   ; break;
    2317           0 :     case style::CaseMap::LOWERCASE:  nVal = SVX_CASEMAP_GEMEINE     ; break;
    2318           0 :     case style::CaseMap::TITLE    :  nVal = SVX_CASEMAP_TITEL       ; break;
    2319          26 :     case style::CaseMap::SMALLCAPS:  nVal = SVX_CASEMAP_KAPITAELCHEN; break;
    2320             :     }
    2321          31 :     SetValue(nVal);
    2322          31 :     return true;
    2323             : }
    2324             : 
    2325             : // class SvxEscapementItem -----------------------------------------------
    2326             : 
    2327          10 : SvxEscapementItem::SvxEscapementItem( const sal_uInt16 nId ) :
    2328             :     SfxEnumItemInterface( nId ),
    2329             : 
    2330             :     nEsc    ( 0 ),
    2331          10 :     nProp   ( 100 )
    2332             : {
    2333          10 : }
    2334             : 
    2335             : // -----------------------------------------------------------------------
    2336             : 
    2337         284 : SvxEscapementItem::SvxEscapementItem( const SvxEscapement eEscape,
    2338             :                                       const sal_uInt16 nId ) :
    2339             :     SfxEnumItemInterface( nId ),
    2340         284 :     nProp( 100 )
    2341             : {
    2342         284 :     SetEscapement( eEscape );
    2343         284 :     if( nEsc )
    2344           0 :         nProp = 58;
    2345         284 : }
    2346             : 
    2347             : // -----------------------------------------------------------------------
    2348             : 
    2349         133 : SvxEscapementItem::SvxEscapementItem( const short _nEsc,
    2350             :                                       const sal_uInt8 _nProp,
    2351             :                                       const sal_uInt16 nId ) :
    2352             :     SfxEnumItemInterface( nId ),
    2353             :     nEsc    ( _nEsc ),
    2354         133 :     nProp   ( _nProp )
    2355             : {
    2356         133 : }
    2357             : 
    2358             : // -----------------------------------------------------------------------
    2359             : 
    2360         814 : int SvxEscapementItem::operator==( const SfxPoolItem& rAttr ) const
    2361             : {
    2362             :     DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
    2363             : 
    2364             :     return( nEsc  == ((SvxEscapementItem&)rAttr).nEsc &&
    2365         814 :             nProp == ((SvxEscapementItem&)rAttr).nProp );
    2366             : }
    2367             : 
    2368             : // -----------------------------------------------------------------------
    2369             : 
    2370         457 : SfxPoolItem* SvxEscapementItem::Clone( SfxItemPool * ) const
    2371             : {
    2372         457 :     return new SvxEscapementItem( *this );
    2373             : }
    2374             : 
    2375             : // -----------------------------------------------------------------------
    2376             : 
    2377         150 : SvStream& SvxEscapementItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2378             : {
    2379         150 :     short _nEsc = GetEsc();
    2380         150 :     if( SOFFICE_FILEFORMAT_31 == rStrm.GetVersion() )
    2381             :     {
    2382           0 :         if( DFLT_ESC_AUTO_SUPER == _nEsc )
    2383           0 :             _nEsc = DFLT_ESC_SUPER;
    2384           0 :         else if( DFLT_ESC_AUTO_SUB == _nEsc )
    2385           0 :             _nEsc = DFLT_ESC_SUB;
    2386             :     }
    2387         150 :     rStrm << (sal_uInt8) GetProp()
    2388         300 :           << (short) _nEsc;
    2389         150 :     return rStrm;
    2390             : }
    2391             : 
    2392             : // -----------------------------------------------------------------------
    2393             : 
    2394           0 : SfxPoolItem* SvxEscapementItem::Create(SvStream& rStrm, sal_uInt16) const
    2395             : {
    2396             :     sal_uInt8 _nProp;
    2397             :     short _nEsc;
    2398           0 :     rStrm >> _nProp >> _nEsc;
    2399           0 :     return new SvxEscapementItem( _nEsc, _nProp, Which() );
    2400             : }
    2401             : 
    2402             : // -----------------------------------------------------------------------
    2403             : 
    2404           0 : sal_uInt16 SvxEscapementItem::GetValueCount() const
    2405             : {
    2406           0 :     return SVX_ESCAPEMENT_END;  // SVX_ESCAPEMENT_SUBSCRIPT + 1
    2407             : }
    2408             : 
    2409             : //------------------------------------------------------------------------
    2410             : 
    2411           0 : SfxItemPresentation SvxEscapementItem::GetPresentation
    2412             : (
    2413             :     SfxItemPresentation ePres,
    2414             :     SfxMapUnit          /*eCoreUnit*/,
    2415             :     SfxMapUnit          /*ePresUnit*/,
    2416             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2417             : )   const
    2418             : {
    2419           0 :     switch ( ePres )
    2420             :     {
    2421             :         case SFX_ITEM_PRESENTATION_NONE:
    2422           0 :             rText.Erase();
    2423           0 :             return ePres;
    2424             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2425             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2426             :         {
    2427           0 :             rText = GetValueTextByPos( GetEnumValue() );
    2428             : 
    2429           0 :             if ( nEsc != 0 )
    2430             :             {
    2431           0 :                 if( DFLT_ESC_AUTO_SUPER == nEsc || DFLT_ESC_AUTO_SUB == nEsc )
    2432           0 :                     rText += String( EE_RESSTR(RID_SVXITEMS_ESCAPEMENT_AUTO) );
    2433             :                 else
    2434           0 :                     ( rText += String::CreateFromInt32( nEsc )) += sal_Unicode('%');
    2435             :             }
    2436           0 :             return ePres;
    2437             :         }
    2438             :         default: ; //prevent warning
    2439             :     }
    2440           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2441             : }
    2442             : 
    2443             : // -----------------------------------------------------------------------
    2444             : 
    2445           0 : rtl::OUString SvxEscapementItem::GetValueTextByPos( sal_uInt16 nPos ) const
    2446             : {
    2447             :     DBG_ASSERT( nPos < (sal_uInt16)SVX_ESCAPEMENT_END, "enum overflow!" );
    2448           0 :     return EE_RESSTR(RID_SVXITEMS_ESCAPEMENT_BEGIN + nPos);
    2449             : }
    2450             : 
    2451             : // -----------------------------------------------------------------------
    2452             : 
    2453           6 : sal_uInt16 SvxEscapementItem::GetEnumValue() const
    2454             : {
    2455           6 :     if ( nEsc < 0 )
    2456           0 :         return SVX_ESCAPEMENT_SUBSCRIPT;
    2457           6 :     else if ( nEsc > 0 )
    2458           0 :         return SVX_ESCAPEMENT_SUPERSCRIPT;
    2459           6 :     return SVX_ESCAPEMENT_OFF;
    2460             : }
    2461             : 
    2462             : // -----------------------------------------------------------------------
    2463             : 
    2464           0 : void SvxEscapementItem::SetEnumValue( sal_uInt16 nVal )
    2465             : {
    2466           0 :     SetEscapement( (const SvxEscapement)nVal );
    2467           0 : }
    2468             : 
    2469          10 : bool SvxEscapementItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2470             : {
    2471          10 :     nMemberId &= ~CONVERT_TWIPS;
    2472          10 :     switch(nMemberId)
    2473             :     {
    2474             :         case MID_ESC:
    2475           6 :             rVal <<= (sal_Int16)(nEsc);
    2476           6 :         break;
    2477             :         case MID_ESC_HEIGHT:
    2478           4 :             rVal <<= (sal_Int8)(nProp);
    2479           4 :         break;
    2480             :         case MID_AUTO_ESC:
    2481           0 :             rVal = Bool2Any(DFLT_ESC_AUTO_SUB == nEsc || DFLT_ESC_AUTO_SUPER == nEsc);
    2482           0 :         break;
    2483             :     }
    2484          10 :     return true;
    2485             : }
    2486             : 
    2487         101 : bool SvxEscapementItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    2488             : {
    2489         101 :     nMemberId &= ~CONVERT_TWIPS;
    2490         101 :     switch(nMemberId)
    2491             :     {
    2492             :         case MID_ESC:
    2493             :         {
    2494          51 :             sal_Int16 nVal = sal_Int16();
    2495          51 :             if( (rVal >>= nVal) && (Abs(nVal) <= 101))
    2496          51 :                 nEsc = nVal;
    2497             :             else
    2498           0 :                 return sal_False;
    2499             :         }
    2500          51 :         break;
    2501             :         case MID_ESC_HEIGHT:
    2502             :         {
    2503          50 :             sal_Int8 nVal = sal_Int8();
    2504          50 :             if( (rVal >>= nVal) && (nVal <= 100))
    2505          50 :                 nProp = nVal;
    2506             :             else
    2507           0 :                 return sal_False;
    2508             :         }
    2509          50 :         break;
    2510             :         case MID_AUTO_ESC:
    2511             :         {
    2512           0 :             sal_Bool bVal = Any2Bool(rVal);
    2513           0 :             if(bVal)
    2514             :             {
    2515           0 :                 if(nEsc < 0)
    2516           0 :                     nEsc = DFLT_ESC_AUTO_SUB;
    2517             :                 else
    2518           0 :                     nEsc = DFLT_ESC_AUTO_SUPER;
    2519             :             }
    2520             :             else
    2521           0 :                 if(DFLT_ESC_AUTO_SUPER == nEsc )
    2522           0 :                     --nEsc;
    2523           0 :                 else if(DFLT_ESC_AUTO_SUB == nEsc)
    2524           0 :                     ++nEsc;
    2525             :         }
    2526           0 :         break;
    2527             :     }
    2528         101 :     return true;
    2529             : }
    2530             : 
    2531             : // class SvxLanguageItem -------------------------------------------------
    2532             : 
    2533        8047 : SvxLanguageItem::SvxLanguageItem( const LanguageType eLang, const sal_uInt16 nId )
    2534        8047 :     : SfxEnumItem( nId , eLang )
    2535             : {
    2536        8047 : }
    2537             : 
    2538             : // -----------------------------------------------------------------------
    2539             : 
    2540           0 : sal_uInt16 SvxLanguageItem::GetValueCount() const
    2541             : {
    2542             :     // #i50205# got rid of class International
    2543             :     SAL_WARN( "editeng.items", "SvxLanguageItem::GetValueCount: supposed to return a count of what?");
    2544             :     // FIXME: previously returned LANGUAGE_COUNT from tools/intn.hxx which was wrong anyway.
    2545             :     // Could be SvtLanguageTable::GetEntryCount() (all locales with resource string)?
    2546             :     // Could be LocaleDataWrapper::getInstalledLanguageTypes() (all locales with locale data)?
    2547           0 :     return 0;
    2548             : }
    2549             : 
    2550             : // -----------------------------------------------------------------------
    2551             : 
    2552       17898 : SfxPoolItem* SvxLanguageItem::Clone( SfxItemPool * ) const
    2553             : {
    2554       17898 :     return new SvxLanguageItem( *this );
    2555             : }
    2556             : 
    2557             : // -----------------------------------------------------------------------
    2558             : 
    2559         450 : SvStream& SvxLanguageItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2560             : {
    2561         450 :     rStrm << (sal_uInt16) GetValue();
    2562         450 :     return rStrm;
    2563             : }
    2564             : 
    2565             : // -----------------------------------------------------------------------
    2566             : 
    2567           0 : SfxPoolItem* SvxLanguageItem::Create(SvStream& rStrm, sal_uInt16) const
    2568             : {
    2569             :     sal_uInt16 nValue;
    2570           0 :     rStrm >> nValue;
    2571           0 :     return new SvxLanguageItem( (LanguageType)nValue, Which() );
    2572             : }
    2573             : 
    2574             : //------------------------------------------------------------------------
    2575             : 
    2576           0 : SfxItemPresentation SvxLanguageItem::GetPresentation
    2577             : (
    2578             :     SfxItemPresentation ePres,
    2579             :     SfxMapUnit          /*eCoreUnit*/,
    2580             :     SfxMapUnit          /*ePresUnit*/,
    2581             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2582             : )   const
    2583             : {
    2584           0 :     switch ( ePres )
    2585             :     {
    2586             :         case SFX_ITEM_PRESENTATION_NONE:
    2587           0 :             rText.Erase();
    2588           0 :             return ePres;
    2589             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2590             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2591             :         {
    2592           0 :             SvtLanguageTable aLangTable;
    2593           0 :             rText = aLangTable.GetString( (LanguageType)GetValue() );
    2594           0 :             return ePres;
    2595             :         }
    2596             :         default: ; //prevent warning
    2597             :     }
    2598           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2599             : }
    2600             : 
    2601          18 : bool SvxLanguageItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2602             : {
    2603          18 :     nMemberId &= ~CONVERT_TWIPS;
    2604          18 :     switch(nMemberId)
    2605             :     {
    2606             :         case MID_LANG_INT:  // for basic conversions!
    2607           0 :             rVal <<= (sal_Int16)(GetValue());
    2608             :         break;
    2609             :         case MID_LANG_LOCALE:
    2610          18 :             lang::Locale aRet( LanguageTag( GetValue()).getLocale( false));
    2611          18 :             rVal <<= aRet;
    2612          18 :         break;
    2613             :     }
    2614          18 :     return true;
    2615             : }
    2616             : 
    2617        3952 : bool SvxLanguageItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    2618             : {
    2619        3952 :     nMemberId &= ~CONVERT_TWIPS;
    2620        3952 :     switch(nMemberId)
    2621             :     {
    2622             :         case MID_LANG_INT:  // for basic conversions!
    2623             :         {
    2624           0 :             sal_Int32 nValue = 0;
    2625           0 :             if(!(rVal >>= nValue))
    2626           0 :                 return false;
    2627             : 
    2628           0 :             SetValue((sal_Int16)nValue);
    2629             :         }
    2630           0 :         break;
    2631             :         case MID_LANG_LOCALE:
    2632             :         {
    2633        3952 :             lang::Locale aLocale;
    2634        3952 :             if(!(rVal >>= aLocale))
    2635           0 :                 return sal_False;
    2636             : 
    2637        3952 :             SetValue( LanguageTag( aLocale ).getLanguageType( false));
    2638             :         }
    2639        3952 :         break;
    2640             :     }
    2641        3952 :     return true;
    2642             : }
    2643             : 
    2644             : // class SvxNoLinebreakItem ----------------------------------------------
    2645          10 : SvxNoLinebreakItem::SvxNoLinebreakItem( const sal_Bool bBreak, const sal_uInt16 nId ) :
    2646          10 :       SfxBoolItem( nId, bBreak )
    2647             : {
    2648          10 : }
    2649             : 
    2650             : // -----------------------------------------------------------------------
    2651             : 
    2652           0 : SfxPoolItem* SvxNoLinebreakItem::Clone( SfxItemPool* ) const
    2653             : {
    2654           0 :     return new SvxNoLinebreakItem( *this );
    2655             : }
    2656             : 
    2657             : // -----------------------------------------------------------------------
    2658             : 
    2659           0 : SvStream& SvxNoLinebreakItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2660             : {
    2661           0 :     rStrm << (sal_Bool)GetValue();
    2662           0 :     return rStrm;
    2663             : }
    2664             : 
    2665             : // -----------------------------------------------------------------------
    2666             : 
    2667           0 : SfxPoolItem* SvxNoLinebreakItem::Create(SvStream& rStrm, sal_uInt16) const
    2668             : {
    2669             :     sal_Bool bValue;
    2670           0 :     rStrm >> bValue;
    2671           0 :     return new SvxNoLinebreakItem( bValue, Which() );
    2672             : }
    2673             : 
    2674             : //------------------------------------------------------------------------
    2675             : 
    2676           0 : SfxItemPresentation SvxNoLinebreakItem::GetPresentation
    2677             : (
    2678             :     SfxItemPresentation /*ePres*/,
    2679             :     SfxMapUnit          /*eCoreUnit*/,
    2680             :     SfxMapUnit          /*ePresUnit*/,
    2681             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2682             : )   const
    2683             : {
    2684           0 :     rText.Erase();
    2685           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2686             : }
    2687             : 
    2688             : // class SvxNoHyphenItem -------------------------------------------------
    2689             : 
    2690          10 : SvxNoHyphenItem::SvxNoHyphenItem( const sal_Bool bHyphen, const sal_uInt16 nId ) :
    2691          10 :     SfxBoolItem( nId , bHyphen )
    2692             : {
    2693          10 : }
    2694             : 
    2695             : // -----------------------------------------------------------------------
    2696             : 
    2697           0 : SfxPoolItem* SvxNoHyphenItem::Clone( SfxItemPool* ) const
    2698             : {
    2699           0 :     return new SvxNoHyphenItem( *this );
    2700             : }
    2701             : 
    2702             : // -----------------------------------------------------------------------
    2703             : 
    2704           0 : SvStream& SvxNoHyphenItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2705             : {
    2706           0 :     rStrm << (sal_Bool) GetValue();
    2707           0 :     return rStrm;
    2708             : }
    2709             : 
    2710             : // -----------------------------------------------------------------------
    2711             : 
    2712           0 : SfxPoolItem* SvxNoHyphenItem::Create( SvStream& rStrm, sal_uInt16 ) const
    2713             : {
    2714             :     sal_Bool bValue;
    2715           0 :     rStrm >> bValue;
    2716           0 :     return new SvxNoHyphenItem( bValue, Which() );
    2717             : }
    2718             : 
    2719             : //------------------------------------------------------------------------
    2720             : 
    2721           0 : SfxItemPresentation SvxNoHyphenItem::GetPresentation
    2722             : (
    2723             :     SfxItemPresentation /*ePres*/,
    2724             :     SfxMapUnit          /*eCoreUnit*/,
    2725             :     SfxMapUnit          /*ePresUnit*/,
    2726             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2727             : )   const
    2728             : {
    2729           0 :     rText.Erase();
    2730           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2731             : }
    2732             : 
    2733             : /*
    2734             :  * Dummy item for ToolBox controls:
    2735             :  *
    2736             :  */
    2737             : 
    2738             : // -----------------------------------------------------------------------
    2739             : // class SvxLineColorItem (== SvxColorItem)
    2740             : // -----------------------------------------------------------------------
    2741             : 
    2742           0 : SvxLineColorItem::SvxLineColorItem( const sal_uInt16 nId ) :
    2743           0 :     SvxColorItem( nId )
    2744             : {
    2745           0 : }
    2746             : 
    2747             : // -----------------------------------------------------------------------
    2748             : 
    2749           0 : SvxLineColorItem::SvxLineColorItem( const SvxLineColorItem &rCopy ) :
    2750           0 :     SvxColorItem( rCopy )
    2751             : {
    2752           0 : }
    2753             : 
    2754             : // -----------------------------------------------------------------------
    2755             : 
    2756           0 : SvxLineColorItem::~SvxLineColorItem()
    2757             : {
    2758           0 : }
    2759             : 
    2760             : //------------------------------------------------------------------------
    2761             : 
    2762           0 : SfxItemPresentation SvxLineColorItem::GetPresentation
    2763             : (
    2764             :     SfxItemPresentation ePres,
    2765             :     SfxMapUnit          eCoreUnit,
    2766             :     SfxMapUnit          ePresUnit,
    2767             :     XubString&          rText,
    2768             :     const IntlWrapper * pIntlWrapper
    2769             : )   const
    2770             : {
    2771             :     return SvxColorItem::GetPresentation( ePres, eCoreUnit, ePresUnit,
    2772           0 :                                           rText, pIntlWrapper );
    2773             : }
    2774             : 
    2775             : // class SvxBlinkItem -------------------------------------------------
    2776             : 
    2777             : 
    2778          10 : SvxBlinkItem::SvxBlinkItem( const sal_Bool bBlink, const sal_uInt16 nId ) :
    2779          10 :     SfxBoolItem( nId, bBlink )
    2780             : {
    2781          10 : }
    2782             : 
    2783             : // -----------------------------------------------------------------------
    2784             : 
    2785           0 : SfxPoolItem* SvxBlinkItem::Clone( SfxItemPool * ) const
    2786             : {
    2787           0 :     return new SvxBlinkItem( *this );
    2788             : }
    2789             : 
    2790             : // -----------------------------------------------------------------------
    2791             : 
    2792           0 : SvStream& SvxBlinkItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
    2793             : {
    2794           0 :     rStrm << (sal_uInt8) GetValue();
    2795           0 :     return rStrm;
    2796             : }
    2797             : 
    2798             : // -----------------------------------------------------------------------
    2799             : 
    2800           0 : SfxPoolItem* SvxBlinkItem::Create(SvStream& rStrm, sal_uInt16) const
    2801             : {
    2802             :     sal_uInt8 nState;
    2803           0 :     rStrm >> nState;
    2804           0 :     return new SvxBlinkItem( nState, Which() );
    2805             : }
    2806             : 
    2807             : // -----------------------------------------------------------------------
    2808             : 
    2809           0 : SfxItemPresentation SvxBlinkItem::GetPresentation
    2810             : (
    2811             :     SfxItemPresentation ePres,
    2812             :     SfxMapUnit          /*eCoreUnit*/,
    2813             :     SfxMapUnit          /*ePresUnit*/,
    2814             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    2815             : )   const
    2816             : {
    2817           0 :     switch ( ePres )
    2818             :     {
    2819             :         case SFX_ITEM_PRESENTATION_NONE:
    2820           0 :             rText.Erase();
    2821           0 :             return ePres;
    2822             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2823             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2824             :         {
    2825           0 :             sal_uInt16 nId = RID_SVXITEMS_BLINK_FALSE;
    2826             : 
    2827           0 :             if ( GetValue() )
    2828           0 :                 nId = RID_SVXITEMS_BLINK_TRUE;
    2829           0 :             rText = EE_RESSTR(nId);
    2830           0 :             return ePres;
    2831             :         }
    2832             :         default: ; //prevent warning
    2833             :     }
    2834           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2835             : }
    2836             : 
    2837             : // class SvxEmphaisMarkItem ---------------------------------------------------
    2838             : 
    2839         713 : SvxEmphasisMarkItem::SvxEmphasisMarkItem( const FontEmphasisMark nValue,
    2840             :                                         const sal_uInt16 nId )
    2841         713 :     : SfxUInt16Item( nId, nValue )
    2842             : {
    2843         713 : }
    2844             : 
    2845             : // -----------------------------------------------------------------------
    2846             : 
    2847        2493 : SfxPoolItem* SvxEmphasisMarkItem::Clone( SfxItemPool * ) const
    2848             : {
    2849        2493 :     return new SvxEmphasisMarkItem( *this );
    2850             : }
    2851             : 
    2852             : // -----------------------------------------------------------------------
    2853             : 
    2854         150 : SvStream& SvxEmphasisMarkItem::Store( SvStream& rStrm,
    2855             :                                      sal_uInt16 /*nItemVersion*/ ) const
    2856             : {
    2857         150 :     rStrm << (sal_uInt16)GetValue();
    2858         150 :     return rStrm;
    2859             : }
    2860             : 
    2861             : // -----------------------------------------------------------------------
    2862             : 
    2863           0 : SfxPoolItem* SvxEmphasisMarkItem::Create( SvStream& rStrm, sal_uInt16 ) const
    2864             : {
    2865             :     sal_uInt16 nValue;
    2866           0 :     rStrm >> nValue;
    2867           0 :     return new SvxEmphasisMarkItem( (FontEmphasisMark)nValue, Which() );
    2868             : }
    2869             : 
    2870             : //------------------------------------------------------------------------
    2871             : 
    2872           0 : SfxItemPresentation SvxEmphasisMarkItem::GetPresentation
    2873             : (
    2874             :     SfxItemPresentation ePres,
    2875             :     SfxMapUnit          /*eCoreUnit*/,
    2876             :     SfxMapUnit          /*ePresUnit*/,
    2877             :     XubString&          rText,
    2878             :     const IntlWrapper * /*pIntl*/
    2879             : )   const
    2880             : {
    2881           0 :     switch ( ePres )
    2882             :     {
    2883             :         case SFX_ITEM_PRESENTATION_NONE:
    2884           0 :             rText.Erase();
    2885           0 :             return ePres;
    2886             :         case SFX_ITEM_PRESENTATION_NAMELESS:
    2887             :         case SFX_ITEM_PRESENTATION_COMPLETE:
    2888             :             {
    2889           0 :                 sal_uInt16 nVal = GetValue();
    2890           0 :                 rText = EE_RESSTR( RID_SVXITEMS_EMPHASIS_BEGIN_STYLE +
    2891           0 :                                         ( EMPHASISMARK_STYLE & nVal ));
    2892             :                 sal_uInt16 nId = ( EMPHASISMARK_POS_ABOVE & nVal )
    2893             :                                 ? RID_SVXITEMS_EMPHASIS_ABOVE_POS
    2894             :                                 : ( EMPHASISMARK_POS_BELOW & nVal )
    2895             :                                     ? RID_SVXITEMS_EMPHASIS_BELOW_POS
    2896           0 :                                     : 0;
    2897           0 :                 if( nId )
    2898           0 :                     rText += EE_RESSTR( nId );
    2899           0 :                 return ePres;
    2900             :             }
    2901             :         default: ; //prevent warning
    2902             :     }
    2903           0 :     return SFX_ITEM_PRESENTATION_NONE;
    2904             : }
    2905             : 
    2906             : // -----------------------------------------------------------------------
    2907             : 
    2908           0 : bool SvxEmphasisMarkItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2909             : {
    2910           0 :     nMemberId &= ~CONVERT_TWIPS;
    2911           0 :     switch( nMemberId )
    2912             :     {
    2913             :     case MID_EMPHASIS:
    2914             :     {
    2915           0 :         sal_Int16 nValue = GetValue();
    2916           0 :         sal_Int16 nRet = 0;
    2917           0 :         switch(nValue & EMPHASISMARK_STYLE)
    2918             :         {
    2919           0 :             case EMPHASISMARK_NONE   : nRet = FontEmphasis::NONE;           break;
    2920           0 :             case EMPHASISMARK_DOT    : nRet = FontEmphasis::DOT_ABOVE;      break;
    2921           0 :             case EMPHASISMARK_CIRCLE : nRet = FontEmphasis::CIRCLE_ABOVE;   break;
    2922           0 :             case EMPHASISMARK_DISC   : nRet = FontEmphasis::DISK_ABOVE;     break;
    2923           0 :             case EMPHASISMARK_ACCENT : nRet = FontEmphasis::ACCENT_ABOVE;   break;
    2924             :         }
    2925           0 :         if(nRet && nValue & EMPHASISMARK_POS_BELOW)
    2926           0 :             nRet += 10;
    2927           0 :         rVal <<= nRet;
    2928             :     }
    2929           0 :     break;
    2930             :     }
    2931           0 :     return true;
    2932             : }
    2933             : 
    2934         909 : bool SvxEmphasisMarkItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    2935             : {
    2936         909 :     nMemberId &= ~CONVERT_TWIPS;
    2937         909 :     sal_Bool bRet = true;
    2938         909 :     switch( nMemberId )
    2939             :     {
    2940             :     case MID_EMPHASIS:
    2941             :     {
    2942         909 :         sal_Int32 nValue = -1;
    2943         909 :         rVal >>= nValue;
    2944         909 :         switch(nValue)
    2945             :         {
    2946         909 :             case FontEmphasis::NONE        : nValue = EMPHASISMARK_NONE;   break;
    2947           0 :             case FontEmphasis::DOT_ABOVE   : nValue = EMPHASISMARK_DOT|EMPHASISMARK_POS_ABOVE;    break;
    2948           0 :             case FontEmphasis::CIRCLE_ABOVE: nValue = EMPHASISMARK_CIRCLE|EMPHASISMARK_POS_ABOVE; break;
    2949           0 :             case FontEmphasis::DISK_ABOVE  : nValue = EMPHASISMARK_DISC|EMPHASISMARK_POS_ABOVE;   break;
    2950           0 :             case FontEmphasis::ACCENT_ABOVE: nValue = EMPHASISMARK_ACCENT|EMPHASISMARK_POS_ABOVE; break;
    2951           0 :             case FontEmphasis::DOT_BELOW   : nValue = EMPHASISMARK_DOT|EMPHASISMARK_POS_BELOW;    break;
    2952           0 :             case FontEmphasis::CIRCLE_BELOW: nValue = EMPHASISMARK_CIRCLE|EMPHASISMARK_POS_BELOW; break;
    2953           0 :             case FontEmphasis::DISK_BELOW  : nValue = EMPHASISMARK_DISC|EMPHASISMARK_POS_BELOW;   break;
    2954           0 :             case FontEmphasis::ACCENT_BELOW: nValue = EMPHASISMARK_ACCENT|EMPHASISMARK_POS_BELOW; break;
    2955           0 :             default: return false;
    2956             :         }
    2957         909 :         SetValue( (sal_Int16)nValue );
    2958             :     }
    2959         909 :     break;
    2960             :     }
    2961         909 :     return bRet;
    2962             : }
    2963             : 
    2964        1926 : sal_uInt16 SvxEmphasisMarkItem::GetVersion( sal_uInt16 nFFVer ) const
    2965             : {
    2966             :     DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
    2967             :             SOFFICE_FILEFORMAT_40==nFFVer ||
    2968             :             SOFFICE_FILEFORMAT_50==nFFVer,
    2969             :             "SvxEmphasisMarkItem: Is there a new file format? ");
    2970             : 
    2971        1926 :     return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
    2972             : }
    2973             : 
    2974             : 
    2975             : /*************************************************************************
    2976             : |*    class SvxTwoLinesItem
    2977             : *************************************************************************/
    2978             : 
    2979          10 : SvxTwoLinesItem::SvxTwoLinesItem( sal_Bool bFlag, sal_Unicode nStartBracket,
    2980             :                                     sal_Unicode nEndBracket, sal_uInt16 nW )
    2981             :     : SfxPoolItem( nW ),
    2982          10 :     cStartBracket( nStartBracket ), cEndBracket( nEndBracket ), bOn( bFlag )
    2983             : {
    2984          10 : }
    2985             : 
    2986           0 : SvxTwoLinesItem::SvxTwoLinesItem( const SvxTwoLinesItem& rAttr )
    2987           0 :     : SfxPoolItem( rAttr.Which() ),
    2988             :     cStartBracket( rAttr.cStartBracket ),
    2989             :     cEndBracket( rAttr.cEndBracket ),
    2990           0 :     bOn( rAttr.bOn )
    2991             : {
    2992           0 : }
    2993             : 
    2994          20 : SvxTwoLinesItem::~SvxTwoLinesItem()
    2995             : {
    2996          20 : }
    2997             : 
    2998           0 : int SvxTwoLinesItem::operator==( const SfxPoolItem& rAttr ) const
    2999             : {
    3000             :     DBG_ASSERT( SfxPoolItem::operator==( rAttr ), "not equal attribute types" );
    3001             :     return bOn == ((SvxTwoLinesItem&)rAttr).bOn &&
    3002             :            cStartBracket == ((SvxTwoLinesItem&)rAttr).cStartBracket &&
    3003           0 :            cEndBracket == ((SvxTwoLinesItem&)rAttr).cEndBracket;
    3004             : }
    3005             : 
    3006           0 : SfxPoolItem* SvxTwoLinesItem::Clone( SfxItemPool* ) const
    3007             : {
    3008           0 :     return new SvxTwoLinesItem( *this );
    3009             : }
    3010             : 
    3011           0 : bool SvxTwoLinesItem::QueryValue( com::sun::star::uno::Any& rVal,
    3012             :                                 sal_uInt8 nMemberId ) const
    3013             : {
    3014           0 :     nMemberId &= ~CONVERT_TWIPS;
    3015           0 :     sal_Bool bRet = true;
    3016           0 :     switch( nMemberId )
    3017             :     {
    3018             :     case MID_TWOLINES:
    3019           0 :         rVal = Bool2Any( bOn );
    3020           0 :         break;
    3021             :     case MID_START_BRACKET:
    3022             :         {
    3023           0 :             OUString s;
    3024           0 :             if( cStartBracket )
    3025           0 :                 s = OUString( cStartBracket );
    3026           0 :             rVal <<= s;
    3027             :         }
    3028           0 :         break;
    3029             :     case MID_END_BRACKET:
    3030             :         {
    3031           0 :             OUString s;
    3032           0 :             if( cEndBracket )
    3033           0 :                 s = OUString( cEndBracket );
    3034           0 :             rVal <<= s;
    3035             :         }
    3036           0 :         break;
    3037             :     default:
    3038           0 :         bRet = false;
    3039           0 :         break;
    3040             :     }
    3041           0 :     return bRet;
    3042             : }
    3043             : 
    3044           0 : bool SvxTwoLinesItem::PutValue( const com::sun::star::uno::Any& rVal,
    3045             :                                     sal_uInt8 nMemberId )
    3046             : {
    3047           0 :     nMemberId &= ~CONVERT_TWIPS;
    3048           0 :     sal_Bool bRet = sal_False;
    3049           0 :     OUString s;
    3050           0 :     switch( nMemberId )
    3051             :     {
    3052             :     case MID_TWOLINES:
    3053           0 :         bOn = Any2Bool( rVal );
    3054           0 :         bRet = sal_True;
    3055           0 :         break;
    3056             :     case MID_START_BRACKET:
    3057           0 :         if( rVal >>= s )
    3058             :         {
    3059           0 :             cStartBracket = s.isEmpty() ? 0 : s[ 0 ];
    3060           0 :             bRet = sal_True;
    3061             :         }
    3062           0 :         break;
    3063             :     case MID_END_BRACKET:
    3064           0 :         if( rVal >>= s )
    3065             :         {
    3066           0 :             cEndBracket = s.isEmpty() ? 0 : s[ 0 ];
    3067           0 :             bRet = sal_True;
    3068             :         }
    3069           0 :         break;
    3070             :     }
    3071           0 :     return bRet;
    3072             : }
    3073             : 
    3074           0 : SfxItemPresentation SvxTwoLinesItem::GetPresentation( SfxItemPresentation ePres,
    3075             :                             SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
    3076             :                             String &rText, const IntlWrapper* /*pIntl*/ ) const
    3077             : {
    3078           0 :     switch( ePres )
    3079             :     {
    3080             :     case SFX_ITEM_PRESENTATION_NONE:
    3081           0 :         rText.Erase();
    3082           0 :         break;
    3083             :     case SFX_ITEM_PRESENTATION_NAMELESS:
    3084             :     case SFX_ITEM_PRESENTATION_COMPLETE:
    3085             :         {
    3086           0 :             if( !GetValue() )
    3087           0 :                 rText = EE_RESSTR( RID_SVXITEMS_TWOLINES_OFF );
    3088             :             else
    3089             :             {
    3090           0 :                 rText = EE_RESSTR( RID_SVXITEMS_TWOLINES );
    3091           0 :                 if( GetStartBracket() )
    3092           0 :                     rText.Insert( GetStartBracket(), 0 );
    3093           0 :                 if( GetEndBracket() )
    3094           0 :                     rText += GetEndBracket();
    3095             :             }
    3096           0 :             return ePres;
    3097             :         }
    3098             :         default: ; //prevent warning
    3099             :     }
    3100           0 :     return SFX_ITEM_PRESENTATION_NONE;
    3101             : }
    3102             : 
    3103             : 
    3104           0 : SfxPoolItem* SvxTwoLinesItem::Create( SvStream & rStrm, sal_uInt16 /*nVer*/) const
    3105             : {
    3106             :     sal_Bool _bOn;
    3107             :     sal_Unicode cStart, cEnd;
    3108           0 :     rStrm >> _bOn >> cStart >> cEnd;
    3109           0 :     return new SvxTwoLinesItem( _bOn, cStart, cEnd, Which() );
    3110             : }
    3111             : 
    3112           0 : SvStream& SvxTwoLinesItem::Store(SvStream & rStrm, sal_uInt16 /*nIVer*/) const
    3113             : {
    3114           0 :     rStrm << GetValue() << GetStartBracket() << GetEndBracket();
    3115           0 :     return rStrm;
    3116             : }
    3117             : 
    3118           0 : sal_uInt16 SvxTwoLinesItem::GetVersion( sal_uInt16 nFFVer ) const
    3119             : {
    3120             :     DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
    3121             :             SOFFICE_FILEFORMAT_40==nFFVer ||
    3122             :             SOFFICE_FILEFORMAT_50==nFFVer,
    3123             :             "SvxTwoLinesItem: Gibt es ein neues Fileformat?" );
    3124             : 
    3125           0 :     return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
    3126             : }
    3127             : 
    3128             : 
    3129             : /*************************************************************************
    3130             : |*    class SvxCharRotateItem
    3131             : *************************************************************************/
    3132             : 
    3133          14 : SvxCharRotateItem::SvxCharRotateItem( sal_uInt16 nValue,
    3134             :                                        sal_Bool bFitIntoLine,
    3135             :                                        const sal_uInt16 nW )
    3136          14 :     : SfxUInt16Item( nW, nValue ), bFitToLine( bFitIntoLine )
    3137             : {
    3138          14 : }
    3139             : 
    3140           3 : SfxPoolItem* SvxCharRotateItem::Clone( SfxItemPool* ) const
    3141             : {
    3142           3 :     return new SvxCharRotateItem( GetValue(), IsFitToLine(), Which() );
    3143             : }
    3144             : 
    3145           0 : SfxPoolItem* SvxCharRotateItem::Create( SvStream& rStrm, sal_uInt16 ) const
    3146             : {
    3147             :     sal_uInt16 nVal;
    3148             :     sal_Bool b;
    3149           0 :     rStrm >> nVal >> b;
    3150           0 :     return new SvxCharRotateItem( nVal, b, Which() );
    3151             : }
    3152             : 
    3153           0 : SvStream& SvxCharRotateItem::Store( SvStream & rStrm, sal_uInt16 ) const
    3154             : {
    3155           0 :     sal_Bool bFlag = IsFitToLine();
    3156           0 :     rStrm << GetValue() << bFlag;
    3157           0 :     return rStrm;
    3158             : }
    3159             : 
    3160           0 : sal_uInt16 SvxCharRotateItem::GetVersion( sal_uInt16 nFFVer ) const
    3161             : {
    3162           0 :     return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
    3163             : }
    3164             : 
    3165           0 : SfxItemPresentation SvxCharRotateItem::GetPresentation(
    3166             :         SfxItemPresentation ePres,
    3167             :         SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
    3168             :         String &rText, const IntlWrapper*  ) const
    3169             : {
    3170           0 :     switch( ePres )
    3171             :     {
    3172             :     case SFX_ITEM_PRESENTATION_NONE:
    3173           0 :         rText.Erase();
    3174           0 :         break;
    3175             :     case SFX_ITEM_PRESENTATION_NAMELESS:
    3176             :     case SFX_ITEM_PRESENTATION_COMPLETE:
    3177             :         {
    3178           0 :             if( !GetValue() )
    3179           0 :                 rText = EE_RESSTR( RID_SVXITEMS_CHARROTATE_OFF );
    3180             :             else
    3181             :             {
    3182           0 :                 rText = EE_RESSTR( RID_SVXITEMS_CHARROTATE );
    3183             :                 rText.SearchAndReplaceAscii( "$(ARG1)",
    3184           0 :                             String::CreateFromInt32( GetValue() / 10 ));
    3185           0 :                 if( IsFitToLine() )
    3186           0 :                     rText += EE_RESSTR( RID_SVXITEMS_CHARROTATE_FITLINE );
    3187             :             }
    3188           0 :             return ePres;
    3189             :         }
    3190             :         default: ; //prevent warning
    3191             :     }
    3192           0 :     return SFX_ITEM_PRESENTATION_NONE;
    3193             : }
    3194             : 
    3195           0 : bool SvxCharRotateItem::QueryValue( com::sun::star::uno::Any& rVal,
    3196             :                                 sal_uInt8 nMemberId ) const
    3197             : {
    3198           0 :     nMemberId &= ~CONVERT_TWIPS;
    3199           0 :     bool bRet = true;
    3200           0 :     switch( nMemberId )
    3201             :     {
    3202             :     case MID_ROTATE:
    3203           0 :         rVal <<= (sal_Int16)GetValue();
    3204           0 :         break;
    3205             :     case MID_FITTOLINE:
    3206           0 :         rVal = Bool2Any( IsFitToLine() );
    3207           0 :         break;
    3208             :     default:
    3209           0 :         bRet = false;
    3210           0 :         break;
    3211             :     }
    3212           0 :     return bRet;
    3213             : }
    3214             : 
    3215           0 : bool SvxCharRotateItem::PutValue( const com::sun::star::uno::Any& rVal,
    3216             :                                     sal_uInt8 nMemberId )
    3217             : {
    3218           0 :     nMemberId &= ~CONVERT_TWIPS;
    3219           0 :     bool bRet = true;
    3220           0 :     switch( nMemberId )
    3221             :     {
    3222             :     case MID_ROTATE:
    3223             :         {
    3224           0 :             sal_Int16 nVal = 0;
    3225           0 :             if((rVal >>= nVal) && (0 == nVal || 900 == nVal || 2700 == nVal))
    3226           0 :                 SetValue( (sal_uInt16)nVal );
    3227             :             else
    3228           0 :                 bRet = sal_False;
    3229             :             break;
    3230             :         }
    3231             : 
    3232             :     case MID_FITTOLINE:
    3233           0 :         SetFitToLine( Any2Bool( rVal ) );
    3234           0 :         break;
    3235             :     default:
    3236           0 :         bRet = false;
    3237             :     }
    3238           0 :     return bRet;
    3239             : }
    3240             : 
    3241           0 : int SvxCharRotateItem::operator==( const SfxPoolItem& rItem ) const
    3242             : {
    3243             :     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
    3244           0 :     return SfxUInt16Item::operator==( rItem ) &&
    3245           0 :            IsFitToLine() == ((const SvxCharRotateItem&)rItem).IsFitToLine();
    3246             : }
    3247             : 
    3248             : 
    3249             : /*************************************************************************
    3250             : |*    class SvxCharScaleItem
    3251             : *************************************************************************/
    3252             : 
    3253          53 : SvxCharScaleWidthItem::SvxCharScaleWidthItem( sal_uInt16 nValue,
    3254             :                                                const sal_uInt16 nW )
    3255          53 :     : SfxUInt16Item( nW, nValue )
    3256             : {
    3257          53 : }
    3258             : 
    3259          25 : SfxPoolItem* SvxCharScaleWidthItem::Clone( SfxItemPool* ) const
    3260             : {
    3261          25 :     return new SvxCharScaleWidthItem( GetValue(), Which() );
    3262             : }
    3263             : 
    3264           0 : SfxPoolItem* SvxCharScaleWidthItem::Create( SvStream& rStrm, sal_uInt16 ) const
    3265             : {
    3266             :     sal_uInt16 nVal;
    3267           0 :     rStrm >> nVal;
    3268           0 :     SvxCharScaleWidthItem* pItem = new SvxCharScaleWidthItem( nVal, Which() );
    3269             : 
    3270           0 :     if ( Which() == EE_CHAR_FONTWIDTH )
    3271             :     {
    3272             :         // Was a SvxFontWidthItem in 5.2
    3273             :         // sal_uInt16 nFixWidth, sal_uInt16 nPropWidth.
    3274             :         // nFixWidth has never been used...
    3275           0 :         rStrm >> nVal;
    3276             :         sal_uInt16 nTest;
    3277           0 :         rStrm >> nTest;
    3278           0 :         if ( nTest == 0x1234 )
    3279           0 :             pItem->SetValue( nVal );
    3280             :         else
    3281           0 :             rStrm.SeekRel( -2*(long)sizeof(sal_uInt16) );
    3282             :     }
    3283             : 
    3284           0 :     return pItem;
    3285             : }
    3286             : 
    3287           0 : SvStream& SvxCharScaleWidthItem::Store( SvStream& rStream, sal_uInt16 nVer ) const
    3288             : {
    3289           0 :     SvStream& rRet = SfxUInt16Item::Store( rStream, nVer );
    3290           0 :     if ( Which() == EE_CHAR_FONTWIDTH )
    3291             :     {
    3292             :         // see comment in Create()....
    3293           0 :         rRet.SeekRel( -1*(long)sizeof(sal_uInt16) );
    3294           0 :         rRet << (sal_uInt16)0;
    3295           0 :         rRet << GetValue();
    3296             :         // Really ugly, but not a problem for reading the doc in 5.2
    3297           0 :         rRet << (sal_uInt16)0x1234;
    3298             :     }
    3299           0 :     return rRet;
    3300             : }
    3301             : 
    3302             : 
    3303        1776 : sal_uInt16 SvxCharScaleWidthItem::GetVersion( sal_uInt16 nFFVer ) const
    3304             : {
    3305        1776 :     return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
    3306             : }
    3307             : 
    3308           0 : SfxItemPresentation SvxCharScaleWidthItem::GetPresentation(
    3309             :         SfxItemPresentation ePres,
    3310             :         SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
    3311             :         String &rText, const IntlWrapper*  ) const
    3312             : {
    3313           0 :     switch( ePres )
    3314             :     {
    3315             :     case SFX_ITEM_PRESENTATION_NONE:
    3316           0 :         rText.Erase();
    3317           0 :         break;
    3318             :     case SFX_ITEM_PRESENTATION_NAMELESS:
    3319             :     case SFX_ITEM_PRESENTATION_COMPLETE:
    3320             :         {
    3321           0 :             if( !GetValue() )
    3322           0 :                 rText = EE_RESSTR( RID_SVXITEMS_CHARSCALE_OFF );
    3323             :             else
    3324             :             {
    3325           0 :                 rText = EE_RESSTR( RID_SVXITEMS_CHARSCALE );
    3326             :                 rText.SearchAndReplaceAscii( "$(ARG1)",
    3327           0 :                             String::CreateFromInt32( GetValue() ));
    3328             :             }
    3329           0 :             return ePres;
    3330             :         }
    3331             :         default: ; //prevent warning
    3332             :     }
    3333           0 :     return SFX_ITEM_PRESENTATION_NONE;
    3334             : }
    3335             : 
    3336           4 : bool SvxCharScaleWidthItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ )
    3337             : {
    3338             :     // SfxUInt16Item::QueryValue returns sal_Int32 in Any now... (srx642w)
    3339             :     // where we still want this to be a sal_Int16
    3340           4 :     sal_Int16 nValue = sal_Int16();
    3341           4 :     if (rVal >>= nValue)
    3342             :     {
    3343           4 :         SetValue( (sal_uInt16) nValue );
    3344           4 :         return true;
    3345             :     }
    3346             : 
    3347             :     OSL_TRACE( "SvxCharScaleWidthItem::PutValue - Wrong type!" );
    3348           0 :     return false;
    3349             : }
    3350             : 
    3351           0 : bool SvxCharScaleWidthItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
    3352             : {
    3353             :     // SfxUInt16Item::QueryValue returns sal_Int32 in Any now... (srx642w)
    3354             :     // where we still want this to be a sal_Int16
    3355           0 :     rVal <<= (sal_Int16)GetValue();
    3356           0 :     return true;
    3357             : }
    3358             : 
    3359             : /*************************************************************************
    3360             : |*    class SvxCharReliefItem
    3361             : *************************************************************************/
    3362             : 
    3363         794 : SvxCharReliefItem::SvxCharReliefItem( FontRelief eValue,
    3364             :                                          const sal_uInt16 nId )
    3365         794 :     : SfxEnumItem( nId, (sal_uInt16)eValue )
    3366             : {
    3367         794 : }
    3368             : 
    3369        2493 : SfxPoolItem* SvxCharReliefItem::Clone( SfxItemPool * ) const
    3370             : {
    3371        2493 :     return new SvxCharReliefItem( *this );
    3372             : }
    3373             : 
    3374           0 : SfxPoolItem* SvxCharReliefItem::Create(SvStream & rStrm, sal_uInt16) const
    3375             : {
    3376             :     sal_uInt16 nVal;
    3377           0 :     rStrm >> nVal;
    3378           0 :     return new SvxCharReliefItem( (FontRelief)nVal, Which() );
    3379             : }
    3380             : 
    3381         150 : SvStream& SvxCharReliefItem::Store(SvStream & rStrm, sal_uInt16 /*nIVer*/) const
    3382             : {
    3383         150 :     sal_uInt16 nVal = GetValue();
    3384         150 :     rStrm << nVal;
    3385         150 :     return rStrm;
    3386             : }
    3387             : 
    3388        1926 : sal_uInt16 SvxCharReliefItem::GetVersion( sal_uInt16 nFFVer ) const
    3389             : {
    3390        1926 :     return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
    3391             : }
    3392             : 
    3393           0 : rtl::OUString SvxCharReliefItem::GetValueTextByPos( sal_uInt16 nPos ) const
    3394             : {
    3395             :     DBG_ASSERT( RID_SVXITEMS_RELIEF_ENGRAVED - RID_SVXITEMS_RELIEF_NONE,
    3396             :                     "enum overflow" );
    3397           0 :     return EE_RESSTR(RID_SVXITEMS_RELIEF_BEGIN + nPos);
    3398             : }
    3399             : 
    3400           0 : sal_uInt16 SvxCharReliefItem::GetValueCount() const
    3401             : {
    3402           0 :     return RID_SVXITEMS_RELIEF_ENGRAVED - RID_SVXITEMS_RELIEF_NONE;
    3403             : }
    3404             : 
    3405           0 : SfxItemPresentation SvxCharReliefItem::GetPresentation
    3406             : (
    3407             :     SfxItemPresentation ePres,
    3408             :     SfxMapUnit          /*eCoreUnit*/,
    3409             :     SfxMapUnit          /*ePresUnit*/,
    3410             :     XubString&          rText, const IntlWrapper * /*pIntl*/
    3411             : )   const
    3412             : {
    3413           0 :     SfxItemPresentation eRet = ePres;
    3414           0 :     switch( ePres )
    3415             :     {
    3416             :     case SFX_ITEM_PRESENTATION_NONE:
    3417           0 :         rText.Erase();
    3418           0 :         break;
    3419             : 
    3420             :     case SFX_ITEM_PRESENTATION_NAMELESS:
    3421             :     case SFX_ITEM_PRESENTATION_COMPLETE:
    3422           0 :         rText = GetValueTextByPos( GetValue() );
    3423           0 :         break;
    3424             : 
    3425             :     default:
    3426           0 :         eRet = SFX_ITEM_PRESENTATION_NONE;
    3427             :     }
    3428           0 :     return eRet;
    3429             : }
    3430             : 
    3431         909 : bool SvxCharReliefItem::PutValue( const com::sun::star::uno::Any& rVal,
    3432             :                                         sal_uInt8 nMemberId )
    3433             : {
    3434         909 :     nMemberId &= ~CONVERT_TWIPS;
    3435         909 :     bool bRet = true;
    3436         909 :     switch( nMemberId )
    3437             :     {
    3438             :     case MID_RELIEF:
    3439             :         {
    3440         909 :             sal_Int16 nVal = -1;
    3441         909 :             rVal >>= nVal;
    3442         909 :             if(nVal >= 0 && nVal <= RELIEF_ENGRAVED)
    3443         909 :                 SetValue( (sal_uInt16)nVal );
    3444             :             else
    3445           0 :                 bRet = false;
    3446             :         }
    3447         909 :         break;
    3448             :     default:
    3449           0 :         bRet = false;
    3450           0 :         break;
    3451             :     }
    3452         909 :     return bRet;
    3453             : }
    3454             : 
    3455           0 : bool SvxCharReliefItem::QueryValue( com::sun::star::uno::Any& rVal,
    3456             :                                         sal_uInt8 nMemberId ) const
    3457             : {
    3458           0 :     nMemberId &= ~CONVERT_TWIPS;
    3459           0 :     bool bRet = true;
    3460           0 :     switch( nMemberId )
    3461             :     {
    3462             :     case MID_RELIEF:
    3463           0 :         rVal <<= (sal_Int16)GetValue();
    3464           0 :         break;
    3465             :     default:
    3466           0 :         bRet = false;
    3467           0 :         break;
    3468             :     }
    3469           0 :     return bRet;
    3470             : }
    3471             : 
    3472             : /*************************************************************************
    3473             : |*    class SvxScriptTypeItemItem
    3474             : *************************************************************************/
    3475             : 
    3476           0 : SvxScriptTypeItem::SvxScriptTypeItem( sal_uInt16 nType )
    3477           0 :     : SfxUInt16Item( SID_ATTR_CHAR_SCRIPTTYPE, nType )
    3478             : {
    3479           0 : }
    3480           0 : SfxPoolItem* SvxScriptTypeItem::Clone( SfxItemPool * ) const
    3481             : {
    3482           0 :     return new SvxScriptTypeItem( GetValue() );
    3483             : }
    3484             : 
    3485             : /*************************************************************************
    3486             : |*    class SvxScriptSetItem
    3487             : *************************************************************************/
    3488             : 
    3489           0 : SvxScriptSetItem::SvxScriptSetItem( sal_uInt16 nSlotId, SfxItemPool& rPool )
    3490             :     : SfxSetItem( nSlotId, new SfxItemSet( rPool,
    3491           0 :                         SID_ATTR_CHAR_FONT, SID_ATTR_CHAR_FONT ))
    3492             : {
    3493             :     sal_uInt16 nLatin, nAsian, nComplex;
    3494           0 :     GetWhichIds( nLatin, nAsian, nComplex );
    3495           0 :     GetItemSet().MergeRange( nLatin, nLatin );
    3496           0 :     GetItemSet().MergeRange( nAsian, nAsian );
    3497           0 :     GetItemSet().MergeRange( nComplex, nComplex );
    3498           0 :     GetItemSet().MergeRange( SID_ATTR_CHAR_SCRIPTTYPE, SID_ATTR_CHAR_SCRIPTTYPE );
    3499           0 : }
    3500             : 
    3501           0 : SfxPoolItem* SvxScriptSetItem::Clone( SfxItemPool * ) const
    3502             : {
    3503           0 :     SvxScriptSetItem* p = new SvxScriptSetItem( Which(), *GetItemSet().GetPool() );
    3504           0 :     p->GetItemSet().Put( GetItemSet(), sal_False );
    3505           0 :     return p;
    3506             : }
    3507             : 
    3508           0 : SfxPoolItem* SvxScriptSetItem::Create( SvStream &, sal_uInt16 ) const
    3509             : {
    3510           0 :     return 0;
    3511             : }
    3512             : 
    3513           0 : const SfxPoolItem* SvxScriptSetItem::GetItemOfScriptSet(
    3514             :                             const SfxItemSet& rSet, sal_uInt16 nId )
    3515             : {
    3516             :     const SfxPoolItem* pI;
    3517           0 :     SfxItemState eSt = rSet.GetItemState( nId, sal_False, &pI );
    3518           0 :     if( SFX_ITEM_SET != eSt )
    3519           0 :         pI = SFX_ITEM_DEFAULT == eSt ? &rSet.Get( nId ) : 0;
    3520           0 :     return pI;
    3521             : }
    3522             : 
    3523           0 : const SfxPoolItem* SvxScriptSetItem::GetItemOfScript( sal_uInt16 nSlotId, const SfxItemSet& rSet, sal_uInt16 nScript )
    3524             : {
    3525             :     sal_uInt16 nLatin, nAsian, nComplex;
    3526           0 :     GetWhichIds( nSlotId, rSet, nLatin, nAsian, nComplex );
    3527             : 
    3528             :     const SfxPoolItem *pRet, *pAsn, *pCmplx;
    3529           0 :     switch( nScript )
    3530             :     {
    3531             :     default:                //no one valid -> match to latin
    3532             :     //  case SCRIPTTYPE_LATIN:
    3533           0 :         pRet = GetItemOfScriptSet( rSet, nLatin );
    3534           0 :         break;
    3535             :     case SCRIPTTYPE_ASIAN:
    3536           0 :         pRet = GetItemOfScriptSet( rSet, nAsian );
    3537           0 :         break;
    3538             :     case SCRIPTTYPE_COMPLEX:
    3539           0 :         pRet = GetItemOfScriptSet( rSet, nComplex );
    3540           0 :         break;
    3541             : 
    3542             :     case SCRIPTTYPE_LATIN|SCRIPTTYPE_ASIAN:
    3543           0 :         if( 0 == (pRet = GetItemOfScriptSet( rSet, nLatin )) ||
    3544           0 :             0 == (pAsn = GetItemOfScriptSet( rSet, nAsian )) ||
    3545           0 :             *pRet != *pAsn )
    3546           0 :             pRet = 0;
    3547           0 :         break;
    3548             : 
    3549             :     case SCRIPTTYPE_LATIN|SCRIPTTYPE_COMPLEX:
    3550           0 :         if( 0 == (pRet = GetItemOfScriptSet( rSet, nLatin )) ||
    3551           0 :             0 == (pCmplx = GetItemOfScriptSet( rSet, nComplex )) ||
    3552           0 :             *pRet != *pCmplx )
    3553           0 :             pRet = 0;
    3554           0 :         break;
    3555             : 
    3556             :     case SCRIPTTYPE_ASIAN|SCRIPTTYPE_COMPLEX:
    3557           0 :         if( 0 == (pRet = GetItemOfScriptSet( rSet, nAsian )) ||
    3558           0 :             0 == (pCmplx = GetItemOfScriptSet( rSet, nComplex )) ||
    3559           0 :             *pRet != *pCmplx )
    3560           0 :             pRet = 0;
    3561           0 :         break;
    3562             : 
    3563             :     case SCRIPTTYPE_LATIN|SCRIPTTYPE_ASIAN|SCRIPTTYPE_COMPLEX:
    3564           0 :         if( 0 == (pRet = GetItemOfScriptSet( rSet, nLatin )) ||
    3565           0 :             0 == (pAsn = GetItemOfScriptSet( rSet, nAsian )) ||
    3566           0 :             0 == (pCmplx = GetItemOfScriptSet( rSet, nComplex )) ||
    3567           0 :             *pRet != *pAsn || *pRet != *pCmplx )
    3568           0 :             pRet = 0;
    3569           0 :         break;
    3570             :     }
    3571           0 :     return pRet;
    3572             : }
    3573             : 
    3574           0 : const SfxPoolItem* SvxScriptSetItem::GetItemOfScript( sal_uInt16 nScript ) const
    3575             : {
    3576           0 :     return GetItemOfScript( Which(), GetItemSet(), nScript );
    3577             : }
    3578             : 
    3579           0 : void SvxScriptSetItem::PutItemForScriptType( sal_uInt16 nScriptType,
    3580             :                                              const SfxPoolItem& rItem )
    3581             : {
    3582             :     sal_uInt16 nLatin, nAsian, nComplex;
    3583           0 :     GetWhichIds( nLatin, nAsian, nComplex );
    3584             : 
    3585           0 :     SfxPoolItem* pCpy = rItem.Clone();
    3586           0 :     if( SCRIPTTYPE_LATIN & nScriptType )
    3587             :     {
    3588           0 :         pCpy->SetWhich( nLatin );
    3589           0 :         GetItemSet().Put( *pCpy );
    3590             :     }
    3591           0 :     if( SCRIPTTYPE_ASIAN & nScriptType )
    3592             :     {
    3593           0 :         pCpy->SetWhich( nAsian );
    3594           0 :         GetItemSet().Put( *pCpy );
    3595             :     }
    3596           0 :     if( SCRIPTTYPE_COMPLEX & nScriptType )
    3597             :     {
    3598           0 :         pCpy->SetWhich( nComplex );
    3599           0 :         GetItemSet().Put( *pCpy );
    3600             :     }
    3601           0 :     delete pCpy;
    3602           0 : }
    3603             : 
    3604           0 : void SvxScriptSetItem::GetWhichIds( sal_uInt16 nSlotId, const SfxItemSet& rSet, sal_uInt16& rLatin, sal_uInt16& rAsian, sal_uInt16& rComplex )
    3605             : {
    3606           0 :     const SfxItemPool& rPool = *rSet.GetPool();
    3607           0 :     GetSlotIds( nSlotId, rLatin, rAsian, rComplex );
    3608           0 :     rLatin = rPool.GetWhich( rLatin );
    3609           0 :     rAsian = rPool.GetWhich( rAsian );
    3610           0 :     rComplex = rPool.GetWhich( rComplex );
    3611           0 : }
    3612             : 
    3613           0 : void SvxScriptSetItem::GetWhichIds( sal_uInt16& rLatin, sal_uInt16& rAsian,
    3614             :                                     sal_uInt16& rComplex ) const
    3615             : {
    3616           0 :     GetWhichIds( Which(), GetItemSet(), rLatin, rAsian, rComplex );
    3617           0 : }
    3618             : 
    3619           0 : void SvxScriptSetItem::GetSlotIds( sal_uInt16 nSlotId, sal_uInt16& rLatin,
    3620             :                                     sal_uInt16& rAsian, sal_uInt16& rComplex )
    3621             : {
    3622           0 :     switch( nSlotId )
    3623             :     {
    3624             :     default:
    3625             :         DBG_ASSERT( sal_False, "wrong SlotId for class SvxScriptSetItem" );
    3626             :         // no break - default to font - Id Range !!
    3627             : 
    3628             :     case SID_ATTR_CHAR_FONT:
    3629           0 :         rLatin = SID_ATTR_CHAR_FONT;
    3630           0 :         rAsian = SID_ATTR_CHAR_CJK_FONT;
    3631           0 :         rComplex = SID_ATTR_CHAR_CTL_FONT;
    3632           0 :         break;
    3633             :     case SID_ATTR_CHAR_FONTHEIGHT:
    3634           0 :         rLatin = SID_ATTR_CHAR_FONTHEIGHT;
    3635           0 :         rAsian = SID_ATTR_CHAR_CJK_FONTHEIGHT;
    3636           0 :         rComplex = SID_ATTR_CHAR_CTL_FONTHEIGHT;
    3637           0 :         break;
    3638             :     case SID_ATTR_CHAR_WEIGHT:
    3639           0 :         rLatin = SID_ATTR_CHAR_WEIGHT;
    3640           0 :         rAsian = SID_ATTR_CHAR_CJK_WEIGHT;
    3641           0 :         rComplex = SID_ATTR_CHAR_CTL_WEIGHT;
    3642           0 :         break;
    3643             :     case SID_ATTR_CHAR_POSTURE:
    3644           0 :         rLatin = SID_ATTR_CHAR_POSTURE;
    3645           0 :         rAsian = SID_ATTR_CHAR_CJK_POSTURE;
    3646           0 :         rComplex = SID_ATTR_CHAR_CTL_POSTURE;
    3647           0 :         break;
    3648             :     case SID_ATTR_CHAR_LANGUAGE:
    3649           0 :         rLatin = SID_ATTR_CHAR_LANGUAGE;
    3650           0 :         rAsian = SID_ATTR_CHAR_CJK_LANGUAGE;
    3651           0 :         rComplex = SID_ATTR_CHAR_CTL_LANGUAGE;
    3652           0 :         break;
    3653             :     }
    3654           0 : }
    3655             : 
    3656         224 : void GetDefaultFonts( SvxFontItem& rLatin, SvxFontItem& rAsian, SvxFontItem& rComplex )
    3657             : {
    3658         224 :     const sal_uInt16 nItemCnt = 3;
    3659             : 
    3660             :     static struct
    3661             :     {
    3662             :         sal_uInt16 nFontType;
    3663             :         sal_uInt16 nLanguage;
    3664             :     }
    3665             :     aOutTypeArr[ nItemCnt ] =
    3666             :     {
    3667             :         {  DEFAULTFONT_LATIN_TEXT, LANGUAGE_ENGLISH_US },
    3668             :         {  DEFAULTFONT_CJK_TEXT, LANGUAGE_ENGLISH_US },
    3669             :         {  DEFAULTFONT_CTL_TEXT, LANGUAGE_ARABIC_SAUDI_ARABIA }
    3670             :     };
    3671             : 
    3672         224 :     SvxFontItem* aItemArr[ nItemCnt ] = { &rLatin, &rAsian, &rComplex };
    3673             : 
    3674         896 :     for ( sal_uInt16 n = 0; n < nItemCnt; ++n )
    3675             :     {
    3676             :         Font aFont( OutputDevice::GetDefaultFont( aOutTypeArr[ n ].nFontType,
    3677             :                                                   aOutTypeArr[ n ].nLanguage,
    3678         672 :                                                   DEFAULTFONT_FLAGS_ONLYONE, 0 ) );
    3679         672 :         SvxFontItem* pItem = aItemArr[ n ];
    3680         672 :         pItem->SetFamily( aFont.GetFamily() );
    3681         672 :         pItem->SetFamilyName( aFont.GetName() );
    3682         672 :         pItem->SetStyleName( String() );
    3683         672 :         pItem->SetPitch( aFont.GetPitch());
    3684         672 :         pItem->SetCharSet(aFont.GetCharSet());
    3685         672 :     }
    3686         224 : }
    3687             : 
    3688             : 
    3689       29963 : sal_uInt16 GetI18NScriptTypeOfLanguage( sal_uInt16 nLang )
    3690             : {
    3691       29963 :     return GetI18NScriptType( SvtLanguageOptions::GetScriptTypeOfLanguage( nLang ) );
    3692             : }
    3693             : 
    3694        6454 : sal_uInt16 GetItemScriptType( short nI18NType )
    3695             : {
    3696        6454 :     switch ( nI18NType )
    3697             :     {
    3698        6423 :         case i18n::ScriptType::LATIN:   return SCRIPTTYPE_LATIN;
    3699          31 :         case i18n::ScriptType::ASIAN:   return SCRIPTTYPE_ASIAN;
    3700           0 :         case i18n::ScriptType::COMPLEX: return SCRIPTTYPE_COMPLEX;
    3701             :     }
    3702           0 :     return 0;
    3703             : }
    3704             : 
    3705       29963 : short GetI18NScriptType( sal_uInt16 nItemType )
    3706             : {
    3707       29963 :     switch ( nItemType )
    3708             :     {
    3709       29256 :         case SCRIPTTYPE_LATIN:      return i18n::ScriptType::LATIN;
    3710         707 :         case SCRIPTTYPE_ASIAN:      return i18n::ScriptType::ASIAN;
    3711           0 :         case SCRIPTTYPE_COMPLEX:    return i18n::ScriptType::COMPLEX;
    3712             :     }
    3713           0 :     return 0;
    3714             : }
    3715             : 
    3716           0 : bool SvxRsidItem::QueryValue( uno::Any& rVal, sal_uInt8 ) const
    3717             : {
    3718           0 :     rVal <<= ( (sal_uInt32)GetValue() );
    3719           0 :     return true;
    3720             : }
    3721             : 
    3722           8 : bool SvxRsidItem::PutValue( const uno::Any& rVal, sal_uInt8 )
    3723             : {
    3724           8 :     sal_uInt32 nRsid = 0;
    3725           8 :     if( !( rVal >>= nRsid ) )
    3726           0 :         return false;
    3727             : 
    3728           8 :     SetValue( nRsid );
    3729           8 :     return true;
    3730             : }
    3731             : 
    3732          43 : SfxPoolItem* SvxRsidItem::Clone( SfxItemPool * ) const
    3733             : {
    3734          43 :     return new SvxRsidItem( *this );
    3735             : }
    3736             : 
    3737           0 : SfxPoolItem* SvxRsidItem::Create(SvStream& rIn, sal_uInt16 ) const
    3738             : {
    3739           0 :     return new SvxRsidItem( rIn, Which() );
    3740             : }
    3741             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10