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