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