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