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/TabStop.hpp>
21 : #include <com/sun/star/style/LineSpacing.hpp>
22 : #include <com/sun/star/style/LineSpacingMode.hpp>
23 : #include <com/sun/star/uno/Sequence.hxx>
24 : #include <comphelper/processfactory.hxx>
25 : #include <unotools/syslocale.hxx>
26 : #include <comphelper/types.hxx>
27 : #include <tools/rtti.hxx>
28 : #include <tools/mapunit.hxx>
29 : #include <svl/itempool.hxx>
30 : #include <svl/memberid.hrc>
31 : #include <editeng/editrids.hrc>
32 : #include <editeng/lspcitem.hxx>
33 : #include <editeng/adjustitem.hxx>
34 : #include <editeng/orphitem.hxx>
35 : #include <editeng/widwitem.hxx>
36 : #include <editeng/tstpitem.hxx>
37 : #include <editeng/pmdlitem.hxx>
38 : #include <editeng/spltitem.hxx>
39 : #include <editeng/hyphenzoneitem.hxx>
40 : #include <editeng/scriptspaceitem.hxx>
41 : #include <editeng/hngpnctitem.hxx>
42 : #include <editeng/forbiddenruleitem.hxx>
43 : #include <editeng/paravertalignitem.hxx>
44 : #include <editeng/pgrditem.hxx>
45 : #include <rtl/ustring.hxx>
46 : #include <editeng/memberids.hrc>
47 : #include <editeng/editids.hrc>
48 : #include <editeng/itemtype.hxx>
49 : #include <editeng/eerdll.hxx>
50 : #include <editeng/paperinf.hxx>
51 : #include <vcl/svapp.hxx>
52 : #include <algorithm>
53 :
54 : using namespace ::com::sun::star;
55 :
56 291038 : TYPEINIT1_FACTORY(SvxLineSpacingItem, SfxPoolItem , new SvxLineSpacingItem(LINE_SPACE_DEFAULT_HEIGHT, 0));
57 410569 : TYPEINIT1_FACTORY(SvxAdjustItem, SfxPoolItem, new SvxAdjustItem(SVX_ADJUST_LEFT, 0));
58 16922 : TYPEINIT1_FACTORY(SvxWidowsItem, SfxByteItem, new SvxWidowsItem(0, 0));
59 16153 : TYPEINIT1_FACTORY(SvxOrphansItem, SfxByteItem, new SvxOrphansItem(0, 0));
60 10837 : TYPEINIT1_FACTORY(SvxHyphenZoneItem, SfxPoolItem, new SvxHyphenZoneItem(false, 0));
61 183099 : TYPEINIT1_FACTORY(SvxTabStopItem, SfxPoolItem, new SvxTabStopItem(0));
62 9195 : TYPEINIT1_FACTORY(SvxFormatSplitItem, SfxBoolItem, new SvxFormatSplitItem(false, 0));
63 59 : TYPEINIT1_FACTORY(SvxPageModelItem, SfxStringItem, new SvxPageModelItem(0));
64 616417 : TYPEINIT1_FACTORY(SvxScriptSpaceItem, SfxBoolItem, new SvxScriptSpaceItem(false, 0));
65 14161 : TYPEINIT1_FACTORY(SvxHangingPunctuationItem, SfxBoolItem, new SvxHangingPunctuationItem(false, 0));
66 14042 : TYPEINIT1_FACTORY(SvxForbiddenRuleItem, SfxBoolItem, new SvxForbiddenRuleItem(false, 0));
67 12750 : TYPEINIT1_FACTORY(SvxParaVertAlignItem, SfxUInt16Item, new SvxParaVertAlignItem(0, 0));
68 9026 : TYPEINIT1_FACTORY(SvxParaGridItem, SfxBoolItem, new SvxParaGridItem(true, 0));
69 :
70 :
71 :
72 6018 : SvxLineSpacingItem::SvxLineSpacingItem( sal_uInt16 nHeight, const sal_uInt16 nId )
73 6018 : : SfxEnumItemInterface( nId )
74 : {
75 6018 : nPropLineSpace = 100;
76 6018 : nInterLineSpace = 0;
77 6018 : nLineHeight = nHeight;
78 6018 : eLineSpace = SVX_LINE_SPACE_AUTO;
79 6018 : eInterLineSpace = SVX_INTER_LINE_SPACE_OFF;
80 6018 : }
81 :
82 :
83 :
84 81071 : bool SvxLineSpacingItem::operator==( const SfxPoolItem& rAttr ) const
85 : {
86 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
87 :
88 81071 : const SvxLineSpacingItem& rLineSpace = static_cast<const SvxLineSpacingItem&>(rAttr);
89 : return
90 : // Same Linespacing Rule?
91 81071 : (eLineSpace == rLineSpace.eLineSpace)
92 : // For maximum and minimum Linespacing be the size must coincide.
93 81417 : && (eLineSpace == SVX_LINE_SPACE_AUTO ||
94 6897 : nLineHeight == rLineSpace.nLineHeight)
95 : // Same Linespacing Rule?
96 70968 : && ( eInterLineSpace == rLineSpace.eInterLineSpace )
97 : // Either set proportional or additive.
98 164673 : && (( eInterLineSpace == SVX_INTER_LINE_SPACE_OFF)
99 17399 : || (eInterLineSpace == SVX_INTER_LINE_SPACE_PROP
100 17219 : && nPropLineSpace == rLineSpace.nPropLineSpace)
101 8746 : || (eInterLineSpace == SVX_INTER_LINE_SPACE_FIX
102 81251 : && (nInterLineSpace == rLineSpace.nInterLineSpace)));
103 : }
104 :
105 : /* Who does still know why the LineSpacingItem is so complicated?
106 : We can not use it for UNO since there are only two values:
107 : - ein sal_uInt16 for the mode
108 : - ein sal_uInt32 for all values (distance, height, rel. detail)
109 : */
110 23350 : bool SvxLineSpacingItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
111 : {
112 23350 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
113 23350 : nMemberId &= ~CONVERT_TWIPS;
114 :
115 23350 : style::LineSpacing aLSp;
116 23350 : switch( eLineSpace )
117 : {
118 : case SVX_LINE_SPACE_AUTO:
119 22005 : if(eInterLineSpace == SVX_INTER_LINE_SPACE_FIX)
120 : {
121 25 : aLSp.Mode = style::LineSpacingMode::LEADING;
122 25 : aLSp.Height = ( bConvert ? (short)convertTwipToMm100(nInterLineSpace) : nInterLineSpace);
123 : }
124 21980 : else if(eInterLineSpace == SVX_INTER_LINE_SPACE_OFF)
125 : {
126 12573 : aLSp.Mode = style::LineSpacingMode::PROP;
127 12573 : aLSp.Height = 100;
128 : }
129 : else
130 : {
131 9407 : aLSp.Mode = style::LineSpacingMode::PROP;
132 9407 : aLSp.Height = nPropLineSpace;
133 : }
134 22005 : break;
135 : case SVX_LINE_SPACE_FIX :
136 : case SVX_LINE_SPACE_MIN :
137 1345 : aLSp.Mode = eLineSpace == SVX_LINE_SPACE_FIX ? style::LineSpacingMode::FIX : style::LineSpacingMode::MINIMUM;
138 1345 : aLSp.Height = ( bConvert ? (short)convertTwipToMm100(nLineHeight) : nLineHeight );
139 1345 : break;
140 : default:
141 : ;//prevent warning about SVX_LINE_SPACE_END
142 : }
143 :
144 23350 : switch ( nMemberId )
145 : {
146 23350 : case 0 : rVal <<= aLSp; break;
147 0 : case MID_LINESPACE : rVal <<= aLSp.Mode; break;
148 0 : case MID_HEIGHT : rVal <<= aLSp.Height; break;
149 0 : default: OSL_FAIL("Wrong MemberId!"); break;
150 : }
151 :
152 23350 : return true;
153 : }
154 :
155 20204 : bool SvxLineSpacingItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
156 : {
157 20204 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
158 20204 : nMemberId &= ~CONVERT_TWIPS;
159 :
160 : // fill with current data
161 20204 : style::LineSpacing aLSp;
162 20204 : uno::Any aAny;
163 20204 : bool bRet = QueryValue( aAny, bConvert ? CONVERT_TWIPS : 0 ) && ( aAny >>= aLSp );
164 :
165 : // get new data
166 20204 : switch ( nMemberId )
167 : {
168 20204 : case 0 : bRet = (rVal >>= aLSp); break;
169 0 : case MID_LINESPACE : bRet = (rVal >>= aLSp.Mode); break;
170 0 : case MID_HEIGHT : bRet = (rVal >>= aLSp.Height); break;
171 0 : default: OSL_FAIL("Wrong MemberId!"); break;
172 : }
173 :
174 20204 : if( bRet )
175 : {
176 20204 : nLineHeight = aLSp.Height;
177 20204 : switch( aLSp.Mode )
178 : {
179 : case style::LineSpacingMode::LEADING:
180 : {
181 9 : eInterLineSpace = SVX_INTER_LINE_SPACE_FIX;
182 9 : eLineSpace = SVX_LINE_SPACE_AUTO;
183 9 : nInterLineSpace = aLSp.Height;
184 9 : if(bConvert)
185 3 : nInterLineSpace = (short)convertMm100ToTwip(nInterLineSpace);
186 :
187 : }
188 9 : break;
189 : case style::LineSpacingMode::PROP:
190 : {
191 18258 : eLineSpace = SVX_LINE_SPACE_AUTO;
192 18258 : nPropLineSpace = (sal_Int16)aLSp.Height;
193 18258 : if(100 == aLSp.Height)
194 14098 : eInterLineSpace = SVX_INTER_LINE_SPACE_OFF;
195 : else
196 4160 : eInterLineSpace = SVX_INTER_LINE_SPACE_PROP;
197 : }
198 18258 : break;
199 : case style::LineSpacingMode::FIX:
200 : case style::LineSpacingMode::MINIMUM:
201 : {
202 1937 : eInterLineSpace = SVX_INTER_LINE_SPACE_OFF;
203 1937 : eLineSpace = aLSp.Mode == style::LineSpacingMode::FIX ? SVX_LINE_SPACE_FIX : SVX_LINE_SPACE_MIN;
204 1937 : nLineHeight = aLSp.Height;
205 1937 : if(bConvert)
206 1931 : nLineHeight = (sal_uInt16)convertMm100ToTwip(nLineHeight);
207 : }
208 1937 : break;
209 : }
210 : }
211 :
212 20204 : return bRet;
213 : }
214 :
215 :
216 :
217 38388 : SfxPoolItem* SvxLineSpacingItem::Clone( SfxItemPool * ) const
218 : {
219 38388 : return new SvxLineSpacingItem( *this );
220 : }
221 :
222 :
223 :
224 0 : bool SvxLineSpacingItem::GetPresentation
225 : (
226 : SfxItemPresentation /*ePres*/,
227 : SfxMapUnit /*eCoreUnit*/,
228 : SfxMapUnit /*ePresUnit*/,
229 : OUString& rText, const IntlWrapper *
230 : ) const
231 : {
232 : #ifdef DBG_UTIL
233 : rText = "SvxLineSpacingItem";
234 : #else
235 0 : rText.clear();
236 : #endif
237 0 : return false;
238 : }
239 :
240 :
241 :
242 0 : SfxPoolItem* SvxLineSpacingItem::Create(SvStream& rStrm, sal_uInt16) const
243 : {
244 : sal_Int8 nPropSpace;
245 : short nInterSpace;
246 : sal_uInt16 nHeight;
247 : sal_Int8 nRule, nInterRule;
248 :
249 0 : rStrm.ReadSChar( nPropSpace )
250 0 : .ReadInt16( nInterSpace )
251 0 : .ReadUInt16( nHeight )
252 0 : .ReadSChar( nRule )
253 0 : .ReadSChar( nInterRule );
254 :
255 0 : SvxLineSpacingItem* pAttr = new SvxLineSpacingItem( nHeight, Which() );
256 0 : pAttr->SetInterLineSpace( nInterSpace );
257 0 : pAttr->SetPropLineSpace( nPropSpace );
258 0 : pAttr->GetLineSpaceRule() = (SvxLineSpace)nRule;
259 0 : pAttr->GetInterLineSpaceRule() = (SvxInterLineSpace)nInterRule;
260 0 : return pAttr;
261 : }
262 :
263 :
264 :
265 4 : SvStream& SvxLineSpacingItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
266 : {
267 4 : rStrm.WriteSChar( GetPropLineSpace() )
268 8 : .WriteInt16( GetInterLineSpace() )
269 8 : .WriteUInt16( GetLineHeight() )
270 8 : .WriteSChar( GetLineSpaceRule() )
271 8 : .WriteSChar( GetInterLineSpaceRule() );
272 4 : return rStrm;
273 : }
274 :
275 :
276 :
277 0 : sal_uInt16 SvxLineSpacingItem::GetValueCount() const
278 : {
279 0 : return SVX_LINESPACE_END; // SVX_LINESPACE_TWO_LINES + 1
280 : }
281 :
282 :
283 :
284 0 : OUString SvxLineSpacingItem::GetValueTextByPos( sal_uInt16 nPos ) const
285 : {
286 : //! load strings from resource
287 0 : OUString aText;
288 0 : switch ( nPos )
289 : {
290 : case SVX_LINESPACE_USER:
291 0 : aText = "User";
292 0 : break;
293 : case SVX_LINESPACE_ONE_LINE:
294 0 : aText = "One line";
295 0 : break;
296 : case SVX_LINESPACE_ONE_POINT_FIVE_LINES:
297 0 : aText = "1.5 line";
298 0 : break;
299 : case SVX_LINESPACE_TWO_LINES:
300 0 : aText = "Two lines";
301 0 : break;
302 : }
303 0 : return aText;
304 : }
305 :
306 :
307 :
308 0 : sal_uInt16 SvxLineSpacingItem::GetEnumValue() const
309 : {
310 : sal_uInt16 nVal;
311 0 : switch ( nPropLineSpace )
312 : {
313 0 : case 100: nVal = SVX_LINESPACE_ONE_LINE; break;
314 0 : case 150: nVal = SVX_LINESPACE_ONE_POINT_FIVE_LINES; break;
315 0 : case 200: nVal = SVX_LINESPACE_TWO_LINES; break;
316 0 : default: nVal = SVX_LINESPACE_USER; break;
317 : }
318 0 : return nVal;
319 : }
320 :
321 :
322 :
323 0 : void SvxLineSpacingItem::SetEnumValue( sal_uInt16 nVal )
324 : {
325 0 : switch ( nVal )
326 : {
327 0 : case SVX_LINESPACE_ONE_LINE: nPropLineSpace = 100; break;
328 0 : case SVX_LINESPACE_ONE_POINT_FIVE_LINES: nPropLineSpace = 150; break;
329 0 : case SVX_LINESPACE_TWO_LINES: nPropLineSpace = 200; break;
330 : }
331 0 : }
332 :
333 : // class SvxAdjustItem ---------------------------------------------------
334 :
335 43063 : SvxAdjustItem::SvxAdjustItem(const SvxAdjust eAdjst, const sal_uInt16 nId )
336 : : SfxEnumItemInterface( nId ),
337 43063 : bOneBlock( false ), bLastCenter( false ), bLastBlock( false )
338 : {
339 43063 : SetAdjust( eAdjst );
340 43063 : }
341 :
342 :
343 :
344 178892 : bool SvxAdjustItem::operator==( const SfxPoolItem& rAttr ) const
345 : {
346 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
347 :
348 178892 : const SvxAdjustItem& rItem = static_cast<const SvxAdjustItem&>(rAttr);
349 286378 : return GetAdjust() == rItem.GetAdjust() &&
350 214972 : bOneBlock == rItem.bOneBlock &&
351 393864 : bLastCenter == rItem.bLastCenter &&
352 286378 : bLastBlock == rItem.bLastBlock;
353 : }
354 :
355 3452 : bool SvxAdjustItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
356 : {
357 3452 : nMemberId &= ~CONVERT_TWIPS;
358 3452 : switch( nMemberId )
359 : {
360 2571 : case MID_PARA_ADJUST : rVal <<= (sal_Int16)GetAdjust(); break;
361 608 : case MID_LAST_LINE_ADJUST : rVal <<= (sal_Int16)GetLastBlock(); break;
362 : case MID_EXPAND_SINGLE :
363 : {
364 273 : sal_Bool bValue = bOneBlock;
365 273 : rVal.setValue( &bValue, cppu::UnoType<bool>::get() );
366 273 : break;
367 : }
368 : default: ;//prevent warning
369 : }
370 3452 : return true;
371 : }
372 :
373 32476 : bool SvxAdjustItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
374 : {
375 32476 : nMemberId &= ~CONVERT_TWIPS;
376 32476 : switch( nMemberId )
377 : {
378 : case MID_PARA_ADJUST :
379 : case MID_LAST_LINE_ADJUST :
380 : {
381 31674 : sal_Int32 eVal = - 1;
382 : try
383 : {
384 31674 : eVal = ::comphelper::getEnumAsINT32(rVal);
385 : }
386 0 : catch(...) {}
387 31674 : if(eVal >= 0 && eVal <= 4)
388 : {
389 31674 : if(MID_LAST_LINE_ADJUST == nMemberId &&
390 12 : eVal != SVX_ADJUST_LEFT &&
391 10 : eVal != SVX_ADJUST_BLOCK &&
392 : eVal != SVX_ADJUST_CENTER)
393 10 : return false;
394 31664 : if(eVal < (sal_uInt16)SVX_ADJUST_END)
395 : nMemberId == MID_PARA_ADJUST ?
396 21905 : SetAdjust((SvxAdjust)eVal) :
397 41423 : SetLastBlock((SvxAdjust)eVal);
398 : }
399 : }
400 31664 : break;
401 : case MID_EXPAND_SINGLE :
402 802 : bOneBlock = Any2Bool(rVal);
403 802 : break;
404 : }
405 32466 : return true;
406 : }
407 :
408 :
409 :
410 45382 : SfxPoolItem* SvxAdjustItem::Clone( SfxItemPool * ) const
411 : {
412 45382 : return new SvxAdjustItem( *this );
413 : }
414 :
415 :
416 :
417 0 : bool SvxAdjustItem::GetPresentation
418 : (
419 : SfxItemPresentation ePres,
420 : SfxMapUnit /*eCoreUnit*/,
421 : SfxMapUnit /*ePresUnit*/,
422 : OUString& rText, const IntlWrapper *
423 : ) const
424 : {
425 0 : switch ( ePres )
426 : {
427 : case SFX_ITEM_PRESENTATION_NAMELESS:
428 : case SFX_ITEM_PRESENTATION_COMPLETE:
429 0 : rText = GetValueTextByPos( (sal_uInt16)GetAdjust() );
430 0 : return true;
431 : default: ;//prevent warning
432 : }
433 0 : return false;
434 : }
435 :
436 :
437 :
438 0 : sal_uInt16 SvxAdjustItem::GetValueCount() const
439 : {
440 0 : return SVX_ADJUST_END; // SVX_ADJUST_BLOCKLINE + 1
441 : }
442 :
443 :
444 :
445 0 : OUString SvxAdjustItem::GetValueTextByPos( sal_uInt16 nPos ) const
446 : {
447 : DBG_ASSERT( nPos <= (sal_uInt16)SVX_ADJUST_BLOCKLINE, "enum overflow!" );
448 0 : return EE_RESSTR(RID_SVXITEMS_ADJUST_BEGIN + nPos);
449 : }
450 :
451 :
452 :
453 0 : sal_uInt16 SvxAdjustItem::GetEnumValue() const
454 : {
455 0 : return (sal_uInt16)GetAdjust();
456 : }
457 :
458 :
459 :
460 0 : void SvxAdjustItem::SetEnumValue( sal_uInt16 nVal )
461 : {
462 0 : SetAdjust( (const SvxAdjust)nVal );
463 0 : }
464 :
465 :
466 :
467 13266 : sal_uInt16 SvxAdjustItem::GetVersion( sal_uInt16 nFileVersion ) const
468 : {
469 : return (nFileVersion == SOFFICE_FILEFORMAT_31)
470 13266 : ? 0 : ADJUST_LASTBLOCK_VERSION;
471 : }
472 :
473 :
474 :
475 512 : SfxPoolItem* SvxAdjustItem::Create(SvStream& rStrm, sal_uInt16 nVersion) const
476 : {
477 : char eAdjustment;
478 512 : rStrm.ReadChar( eAdjustment );
479 512 : SvxAdjustItem *pRet = new SvxAdjustItem( (SvxAdjust)eAdjustment, Which() );
480 512 : if( nVersion >= ADJUST_LASTBLOCK_VERSION )
481 : {
482 : sal_Int8 nFlags;
483 512 : rStrm.ReadSChar( nFlags );
484 512 : pRet->bOneBlock = 0 != (nFlags & 0x0001);
485 512 : pRet->bLastCenter = 0 != (nFlags & 0x0002);
486 512 : pRet->bLastBlock = 0 != (nFlags & 0x0004);
487 : }
488 512 : return pRet;
489 : }
490 :
491 :
492 :
493 532 : SvStream& SvxAdjustItem::Store( SvStream& rStrm, sal_uInt16 nItemVersion ) const
494 : {
495 532 : rStrm.WriteChar( (char)GetAdjust() );
496 532 : if ( nItemVersion >= ADJUST_LASTBLOCK_VERSION )
497 : {
498 532 : sal_Int8 nFlags = 0;
499 532 : if ( bOneBlock )
500 0 : nFlags |= 0x0001;
501 532 : if ( bLastCenter )
502 0 : nFlags |= 0x0002;
503 532 : if ( bLastBlock )
504 0 : nFlags |= 0x0004;
505 532 : rStrm.WriteSChar( nFlags );
506 : }
507 532 : return rStrm;
508 : }
509 :
510 : // class SvxWidowsItem ---------------------------------------------------
511 :
512 238 : SvxWidowsItem::SvxWidowsItem(const sal_uInt8 nL, const sal_uInt16 nId ) :
513 238 : SfxByteItem( nId, nL )
514 : {
515 238 : }
516 :
517 :
518 :
519 7454 : SfxPoolItem* SvxWidowsItem::Clone( SfxItemPool * ) const
520 : {
521 7454 : return new SvxWidowsItem( *this );
522 : }
523 :
524 :
525 :
526 0 : SfxPoolItem* SvxWidowsItem::Create(SvStream& rStrm, sal_uInt16) const
527 : {
528 : sal_Int8 nLines;
529 0 : rStrm.ReadSChar( nLines );
530 0 : return new SvxWidowsItem( nLines, Which() );
531 : }
532 :
533 :
534 :
535 0 : SvStream& SvxWidowsItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
536 : {
537 0 : rStrm.WriteSChar( GetValue() );
538 0 : return rStrm;
539 : }
540 :
541 :
542 :
543 0 : bool SvxWidowsItem::GetPresentation
544 : (
545 : SfxItemPresentation ePres,
546 : SfxMapUnit /*eCoreUnit*/,
547 : SfxMapUnit /*ePresUnit*/,
548 : OUString& rText, const IntlWrapper *
549 : ) const
550 : {
551 0 : switch ( ePres )
552 : {
553 : case SFX_ITEM_PRESENTATION_NAMELESS:
554 : {
555 0 : rText = EE_RESSTR(RID_SVXITEMS_LINES);
556 0 : break;
557 : }
558 :
559 : case SFX_ITEM_PRESENTATION_COMPLETE:
560 : {
561 0 : rText = EE_RESSTR(RID_SVXITEMS_WIDOWS_COMPLETE) + " " + EE_RESSTR(RID_SVXITEMS_LINES);
562 0 : break;
563 : }
564 :
565 : default:
566 : {
567 : SAL_WARN( "editeng.items", "SvxWidowsItem::GetPresentation(): unknown SfxItemPresentation" );
568 : }
569 : }
570 :
571 0 : rText = rText.replaceFirst( "%1", OUString::number( GetValue() ) );
572 0 : return true;
573 : }
574 :
575 : // class SvxOrphansItem --------------------------------------------------
576 :
577 238 : SvxOrphansItem::SvxOrphansItem(const sal_uInt8 nL, const sal_uInt16 nId ) :
578 238 : SfxByteItem( nId, nL )
579 : {
580 238 : }
581 :
582 :
583 :
584 7435 : SfxPoolItem* SvxOrphansItem::Clone( SfxItemPool * ) const
585 : {
586 7435 : return new SvxOrphansItem( *this );
587 : }
588 :
589 :
590 :
591 0 : SfxPoolItem* SvxOrphansItem::Create(SvStream& rStrm, sal_uInt16) const
592 : {
593 : sal_Int8 nLines;
594 0 : rStrm.ReadSChar( nLines );
595 0 : return new SvxOrphansItem( nLines, Which() );
596 : }
597 :
598 :
599 :
600 0 : SvStream& SvxOrphansItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
601 : {
602 0 : rStrm.WriteSChar( GetValue() );
603 0 : return rStrm;
604 : }
605 :
606 :
607 :
608 0 : bool SvxOrphansItem::GetPresentation
609 : (
610 : SfxItemPresentation ePres,
611 : SfxMapUnit /*eCoreUnit*/,
612 : SfxMapUnit /*ePresUnit*/,
613 : OUString& rText, const IntlWrapper *
614 : ) const
615 : {
616 0 : switch ( ePres )
617 : {
618 : case SFX_ITEM_PRESENTATION_NAMELESS:
619 : {
620 0 : rText = EE_RESSTR(RID_SVXITEMS_LINES);
621 0 : break;
622 : }
623 :
624 : case SFX_ITEM_PRESENTATION_COMPLETE:
625 : {
626 0 : rText = EE_RESSTR(RID_SVXITEMS_ORPHANS_COMPLETE) + " " + EE_RESSTR(RID_SVXITEMS_LINES);
627 0 : break;
628 : }
629 :
630 : default:
631 : {
632 : SAL_WARN( "editeng.items", "SvxOrphansItem::GetPresentation(): unknown SfxItemPresentation" );
633 : }
634 : }
635 :
636 0 : rText = rText.replaceFirst( "%1", OUString::number( GetValue() ) );
637 0 : return true;
638 : }
639 :
640 : // class SvxHyphenZoneItem -----------------------------------------------
641 :
642 59 : SvxHyphenZoneItem::SvxHyphenZoneItem( const bool bHyph, const sal_uInt16 nId ) :
643 59 : SfxPoolItem( nId )
644 : {
645 59 : bHyphen = bHyph;
646 59 : bPageEnd = true;
647 59 : nMinLead = nMinTrail = 0;
648 59 : nMaxHyphens = 255;
649 59 : }
650 :
651 :
652 344 : bool SvxHyphenZoneItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
653 : {
654 344 : nMemberId &= ~CONVERT_TWIPS;
655 344 : switch(nMemberId)
656 : {
657 : case MID_IS_HYPHEN:
658 89 : rVal = css::uno::makeAny<bool>(bHyphen);
659 89 : break;
660 : case MID_HYPHEN_MIN_LEAD:
661 85 : rVal <<= (sal_Int16)nMinLead;
662 85 : break;
663 : case MID_HYPHEN_MIN_TRAIL:
664 85 : rVal <<= (sal_Int16)nMinTrail;
665 85 : break;
666 : case MID_HYPHEN_MAX_HYPHENS:
667 85 : rVal <<= (sal_Int16)nMaxHyphens;
668 85 : break;
669 : }
670 344 : return true;
671 : }
672 :
673 1962 : bool SvxHyphenZoneItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
674 : {
675 1962 : nMemberId &= ~CONVERT_TWIPS;
676 1962 : sal_Int16 nNewVal = 0;
677 :
678 1962 : if( nMemberId != MID_IS_HYPHEN )
679 907 : if(!(rVal >>= nNewVal))
680 0 : return false;
681 :
682 1962 : switch(nMemberId)
683 : {
684 : case MID_IS_HYPHEN:
685 1055 : bHyphen = Any2Bool(rVal);
686 1055 : break;
687 : case MID_HYPHEN_MIN_LEAD:
688 287 : nMinLead = (sal_uInt8)nNewVal;
689 287 : break;
690 : case MID_HYPHEN_MIN_TRAIL:
691 310 : nMinTrail = (sal_uInt8)nNewVal;
692 310 : break;
693 : case MID_HYPHEN_MAX_HYPHENS:
694 310 : nMaxHyphens = (sal_uInt8)nNewVal;
695 310 : break;
696 : }
697 1962 : return true;
698 : }
699 :
700 :
701 :
702 8671 : bool SvxHyphenZoneItem::operator==( const SfxPoolItem& rAttr ) const
703 : {
704 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
705 :
706 8671 : const SvxHyphenZoneItem& rItem = static_cast<const SvxHyphenZoneItem&>(rAttr);
707 8671 : return ( rItem.bHyphen == bHyphen
708 8607 : && rItem.bPageEnd == bPageEnd
709 8607 : && rItem.nMinLead == nMinLead
710 5657 : && rItem.nMinTrail == nMinTrail
711 14032 : && rItem.nMaxHyphens == nMaxHyphens );
712 : }
713 :
714 :
715 :
716 13528 : SfxPoolItem* SvxHyphenZoneItem::Clone( SfxItemPool * ) const
717 : {
718 13528 : return new SvxHyphenZoneItem( *this );
719 : }
720 :
721 :
722 :
723 0 : bool SvxHyphenZoneItem::GetPresentation
724 : (
725 : SfxItemPresentation ePres,
726 : SfxMapUnit /*eCoreUnit*/,
727 : SfxMapUnit /*ePresUnit*/,
728 : OUString& rText, const IntlWrapper *
729 : ) const
730 : {
731 0 : OUString cpDelimTmp(cpDelim);
732 0 : switch ( ePres )
733 : {
734 : case SFX_ITEM_PRESENTATION_NAMELESS:
735 : {
736 0 : sal_uInt16 nId = RID_SVXITEMS_HYPHEN_FALSE;
737 :
738 0 : if ( bHyphen )
739 0 : nId = RID_SVXITEMS_HYPHEN_TRUE;
740 0 : rText = EE_RESSTR(nId) + cpDelimTmp;
741 0 : nId = RID_SVXITEMS_PAGE_END_FALSE;
742 :
743 0 : if ( bPageEnd )
744 0 : nId = RID_SVXITEMS_PAGE_END_TRUE;
745 0 : rText = rText + EE_RESSTR(nId) + cpDelimTmp +
746 0 : OUString::number( nMinLead ) + cpDelimTmp +
747 0 : OUString::number( nMinTrail ) + cpDelimTmp +
748 0 : OUString::number( nMaxHyphens );
749 0 : return true;
750 : }
751 : case SFX_ITEM_PRESENTATION_COMPLETE:
752 : {
753 0 : sal_uInt16 nId = RID_SVXITEMS_HYPHEN_FALSE;
754 :
755 0 : if ( bHyphen )
756 0 : nId = RID_SVXITEMS_HYPHEN_TRUE;
757 0 : rText = EE_RESSTR(nId) + cpDelimTmp;
758 0 : nId = RID_SVXITEMS_PAGE_END_FALSE;
759 :
760 0 : if ( bPageEnd )
761 0 : nId = RID_SVXITEMS_PAGE_END_TRUE;
762 0 : rText = rText +
763 0 : EE_RESSTR(nId) +
764 0 : cpDelimTmp +
765 0 : EE_RESSTR(RID_SVXITEMS_HYPHEN_MINLEAD).replaceAll("%1", OUString::number(nMinLead)) +
766 0 : cpDelimTmp +
767 0 : EE_RESSTR(RID_SVXITEMS_HYPHEN_MINTRAIL).replaceAll("%1", OUString::number(nMinTrail)) +
768 0 : cpDelimTmp +
769 0 : EE_RESSTR(RID_SVXITEMS_HYPHEN_MAX).replaceAll("%1", OUString::number(nMaxHyphens));
770 0 : return true;
771 : }
772 : default: ;//prevent warning
773 : }
774 0 : return false;
775 : }
776 :
777 :
778 :
779 0 : SfxPoolItem* SvxHyphenZoneItem::Create(SvStream& rStrm, sal_uInt16) const
780 : {
781 : sal_Int8 _bHyphen, _bHyphenPageEnd;
782 : sal_Int8 _nMinLead, _nMinTrail, _nMaxHyphens;
783 0 : rStrm.ReadSChar( _bHyphen ).ReadSChar( _bHyphenPageEnd ).ReadSChar( _nMinLead ).ReadSChar( _nMinTrail ).ReadSChar( _nMaxHyphens );
784 0 : SvxHyphenZoneItem* pAttr = new SvxHyphenZoneItem( false, Which() );
785 0 : pAttr->SetHyphen( _bHyphen != 0 );
786 0 : pAttr->SetPageEnd( _bHyphenPageEnd != 0 );
787 0 : pAttr->GetMinLead() = _nMinLead;
788 0 : pAttr->GetMinTrail() = _nMinTrail;
789 0 : pAttr->GetMaxHyphens() = _nMaxHyphens;
790 0 : return pAttr;
791 : }
792 :
793 :
794 :
795 0 : SvStream& SvxHyphenZoneItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
796 : {
797 0 : rStrm.WriteSChar( (sal_Int8) IsHyphen() )
798 0 : .WriteSChar( (sal_Int8) IsPageEnd() )
799 0 : .WriteSChar( GetMinLead() )
800 0 : .WriteSChar( GetMinTrail() )
801 0 : .WriteSChar( GetMaxHyphens() );
802 0 : return rStrm;
803 : }
804 :
805 : // class SvxTabStop ------------------------------------------------------
806 :
807 144389 : SvxTabStop::SvxTabStop()
808 : {
809 144389 : nTabPos = 0;
810 144389 : eAdjustment = SVX_TAB_ADJUST_LEFT;
811 144389 : m_cDecimal = cDfltDecimalChar;
812 144389 : cFill = cDfltFillChar;
813 144389 : }
814 :
815 :
816 :
817 31891 : SvxTabStop::SvxTabStop( const sal_Int32 nPos, const SvxTabAdjust eAdjst,
818 : const sal_Unicode cDec, const sal_Unicode cFil )
819 : {
820 31891 : nTabPos = nPos;
821 31891 : eAdjustment = eAdjst;
822 31891 : m_cDecimal = cDec;
823 31891 : cFill = cFil;
824 31891 : }
825 :
826 24472 : void SvxTabStop::fillDecimal() const
827 : {
828 24472 : if ( cDfltDecimalChar == m_cDecimal )
829 5362 : m_cDecimal = SvtSysLocale().GetLocaleData().getNumDecimalSep()[0];
830 24472 : }
831 :
832 :
833 0 : OUString SvxTabStop::GetValueString() const
834 : {
835 : OUString aStr = "("
836 0 : + OUString::number(nTabPos)
837 0 : + ", "
838 0 : + EE_RESSTR(RID_SVXITEMS_TAB_ADJUST_BEGIN + (sal_uInt16)eAdjustment)
839 0 : + ", ["
840 0 : + EE_RESSTR(RID_SVXITEMS_TAB_DECIMAL_CHAR)
841 0 : + OUString(GetDecimal())
842 0 : + "], , ["
843 0 : + EE_RESSTR(RID_SVXITEMS_TAB_FILL_CHAR)
844 0 : + OUString(cFill)
845 0 : + "])";
846 :
847 0 : return aStr;
848 : }
849 :
850 : // class SvxTabStopItem --------------------------------------------------
851 :
852 12 : SvxTabStopItem::SvxTabStopItem( sal_uInt16 _nWhich ) :
853 : SfxPoolItem( _nWhich ),
854 12 : maTabStops()
855 : {
856 12 : const sal_uInt16 nTabs = SVX_TAB_DEFCOUNT, nDist = SVX_TAB_DEFDIST;
857 12 : const SvxTabAdjust eAdjst= SVX_TAB_ADJUST_DEFAULT;
858 :
859 132 : for (sal_uInt16 i = 0; i < nTabs; ++i)
860 : {
861 120 : SvxTabStop aTab( (i + 1) * nDist, eAdjst );
862 120 : maTabStops.insert( aTab );
863 : }
864 12 : }
865 :
866 :
867 :
868 3988 : SvxTabStopItem::SvxTabStopItem( const sal_uInt16 nTabs,
869 : const sal_uInt16 nDist,
870 : const SvxTabAdjust eAdjst,
871 : sal_uInt16 _nWhich ) :
872 : SfxPoolItem( _nWhich ),
873 3988 : maTabStops()
874 : {
875 6837 : for ( sal_uInt16 i = 0; i < nTabs; ++i )
876 : {
877 2849 : SvxTabStop aTab( (i + 1) * nDist, eAdjst );
878 2849 : maTabStops.insert( aTab );
879 : }
880 3988 : }
881 :
882 :
883 :
884 229760 : SvxTabStopItem::SvxTabStopItem( const SvxTabStopItem& rTSI ) :
885 229760 : SfxPoolItem( rTSI.Which() ),
886 229760 : maTabStops( rTSI.maTabStops )
887 : {
888 229760 : }
889 :
890 :
891 :
892 28778 : sal_uInt16 SvxTabStopItem::GetPos( const SvxTabStop& rTab ) const
893 : {
894 28778 : SvxTabStopArr::const_iterator it = maTabStops.find( rTab );
895 28778 : return it != maTabStops.end() ? it - maTabStops.begin() : SVX_TAB_NOTFOUND;
896 : }
897 :
898 :
899 :
900 853 : sal_uInt16 SvxTabStopItem::GetPos( const sal_Int32 nPos ) const
901 : {
902 853 : SvxTabStopArr::const_iterator it = maTabStops.find( SvxTabStop( nPos ) );
903 853 : return it != maTabStops.end() ? it - maTabStops.begin() : SVX_TAB_NOTFOUND;
904 : }
905 :
906 :
907 :
908 37 : SvxTabStopItem& SvxTabStopItem::operator=( const SvxTabStopItem& rTSI )
909 : {
910 37 : maTabStops = rTSI.maTabStops;
911 37 : return *this;
912 : }
913 :
914 1441 : bool SvxTabStopItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
915 : {
916 1441 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
917 1441 : nMemberId &= ~CONVERT_TWIPS;
918 1441 : switch ( nMemberId )
919 : {
920 : case MID_TABSTOPS:
921 : {
922 1368 : sal_uInt16 nCount = Count();
923 1368 : uno::Sequence< style::TabStop> aSeq(nCount);
924 1368 : style::TabStop* pArr = aSeq.getArray();
925 2135 : for(sal_uInt16 i = 0; i < nCount; i++)
926 : {
927 767 : const SvxTabStop& rTab = (*this)[i];
928 767 : pArr[i].Position = bConvert ? convertTwipToMm100(rTab.GetTabPos()) : rTab.GetTabPos();
929 767 : switch(rTab.GetAdjustment())
930 : {
931 598 : case SVX_TAB_ADJUST_LEFT : pArr[i].Alignment = style::TabAlign_LEFT; break;
932 58 : case SVX_TAB_ADJUST_RIGHT : pArr[i].Alignment = style::TabAlign_RIGHT; break;
933 0 : case SVX_TAB_ADJUST_DECIMAL: pArr[i].Alignment = style::TabAlign_DECIMAL; break;
934 31 : case SVX_TAB_ADJUST_CENTER : pArr[i].Alignment = style::TabAlign_CENTER; break;
935 : default: //SVX_TAB_ADJUST_DEFAULT
936 80 : pArr[i].Alignment = style::TabAlign_DEFAULT;
937 :
938 : }
939 767 : pArr[i].DecimalChar = rTab.GetDecimal();
940 767 : pArr[i].FillChar = rTab.GetFill();
941 : }
942 1368 : rVal <<= aSeq;
943 1368 : break;
944 : }
945 : case MID_STD_TAB:
946 : {
947 73 : const SvxTabStop &rTab = maTabStops.front();
948 73 : rVal <<= (static_cast<sal_Int32>(bConvert ? convertTwipToMm100(rTab.GetTabPos()) : rTab.GetTabPos()));
949 73 : break;
950 : }
951 : }
952 1441 : return true;
953 : }
954 :
955 8697 : bool SvxTabStopItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
956 : {
957 8697 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
958 8697 : nMemberId &= ~CONVERT_TWIPS;
959 8697 : switch ( nMemberId )
960 : {
961 : case MID_TABSTOPS:
962 : {
963 6393 : uno::Sequence< style::TabStop> aSeq;
964 6393 : if(!(rVal >>= aSeq))
965 : {
966 0 : uno::Sequence < uno::Sequence < uno::Any > > aAnySeq;
967 0 : if (!(rVal >>= aAnySeq))
968 0 : return false;
969 0 : sal_Int32 nLength = aAnySeq.getLength();
970 0 : aSeq.realloc( nLength );
971 0 : for ( sal_Int32 n=0; n<nLength; n++ )
972 : {
973 0 : uno::Sequence < uno::Any >& rAnySeq = aAnySeq[n];
974 0 : if ( rAnySeq.getLength() == 4 )
975 : {
976 0 : if (!(rAnySeq[0] >>= aSeq[n].Position)) return false;
977 0 : if (!(rAnySeq[1] >>= aSeq[n].Alignment))
978 : {
979 0 : sal_Int32 nVal = 0;
980 0 : if (rAnySeq[1] >>= nVal)
981 0 : aSeq[n].Alignment = (com::sun::star::style::TabAlign) nVal;
982 : else
983 0 : return false;
984 : }
985 0 : if (!(rAnySeq[2] >>= aSeq[n].DecimalChar))
986 : {
987 0 : OUString aVal;
988 0 : if ( (rAnySeq[2] >>= aVal) && aVal.getLength() == 1 )
989 0 : aSeq[n].DecimalChar = aVal.toChar();
990 : else
991 0 : return false;
992 : }
993 0 : if (!(rAnySeq[3] >>= aSeq[n].FillChar))
994 : {
995 0 : OUString aVal;
996 0 : if ( (rAnySeq[3] >>= aVal) && aVal.getLength() == 1 )
997 0 : aSeq[n].FillChar = aVal.toChar();
998 : else
999 0 : return false;
1000 : }
1001 : }
1002 : else
1003 0 : return false;
1004 0 : }
1005 : }
1006 :
1007 6393 : maTabStops.clear();
1008 6393 : const style::TabStop* pArr = aSeq.getConstArray();
1009 6393 : const sal_uInt16 nCount = (sal_uInt16)aSeq.getLength();
1010 16024 : for(sal_uInt16 i = 0; i < nCount ; i++)
1011 : {
1012 9631 : SvxTabAdjust eAdjust = SVX_TAB_ADJUST_DEFAULT;
1013 9631 : switch(pArr[i].Alignment)
1014 : {
1015 5306 : case style::TabAlign_LEFT : eAdjust = SVX_TAB_ADJUST_LEFT; break;
1016 1302 : case style::TabAlign_CENTER : eAdjust = SVX_TAB_ADJUST_CENTER; break;
1017 2975 : case style::TabAlign_RIGHT : eAdjust = SVX_TAB_ADJUST_RIGHT; break;
1018 48 : case style::TabAlign_DECIMAL: eAdjust = SVX_TAB_ADJUST_DECIMAL; break;
1019 : default: ;//prevent warning
1020 : }
1021 9631 : sal_Unicode cFill = pArr[i].FillChar;
1022 9631 : sal_Unicode cDecimal = pArr[i].DecimalChar;
1023 9631 : SvxTabStop aTab( bConvert ? convertMm100ToTwip(pArr[i].Position) : pArr[i].Position,
1024 : eAdjust,
1025 : cDecimal,
1026 19262 : cFill );
1027 9631 : Insert(aTab);
1028 : }
1029 6393 : break;
1030 : }
1031 : case MID_STD_TAB:
1032 : {
1033 2304 : sal_Int32 nNewPos = 0;
1034 2304 : if (!(rVal >>= nNewPos) )
1035 0 : return false;
1036 2304 : if (bConvert)
1037 2304 : nNewPos = convertMm100ToTwip ( nNewPos );
1038 2304 : if (nNewPos <= 0)
1039 0 : return false;
1040 2304 : const SvxTabStop& rTab = maTabStops.front();
1041 2304 : SvxTabStop aNewTab ( nNewPos, rTab.GetAdjustment(), rTab.GetDecimal(), rTab.GetFill() );
1042 2304 : Remove( 0 );
1043 2304 : Insert( aNewTab );
1044 2304 : break;
1045 : }
1046 : }
1047 8697 : return true;
1048 : }
1049 :
1050 :
1051 69676 : bool SvxTabStopItem::operator==( const SfxPoolItem& rAttr ) const
1052 : {
1053 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
1054 :
1055 69676 : const SvxTabStopItem& rTSI = static_cast<const SvxTabStopItem&>(rAttr);
1056 :
1057 69676 : if ( Count() != rTSI.Count() )
1058 21091 : return false;
1059 :
1060 67864 : for ( sal_uInt16 i = 0; i < Count(); ++i )
1061 49726 : if( !(*this)[i].IsEqual( rTSI[i] ) )
1062 30447 : return false;
1063 18138 : return true;
1064 : }
1065 :
1066 :
1067 :
1068 43847 : SfxPoolItem* SvxTabStopItem::Clone( SfxItemPool * ) const
1069 : {
1070 43847 : return new SvxTabStopItem( *this );
1071 : }
1072 :
1073 :
1074 :
1075 0 : bool SvxTabStopItem::GetPresentation
1076 : (
1077 : SfxItemPresentation ePres,
1078 : SfxMapUnit eCoreUnit,
1079 : SfxMapUnit ePresUnit,
1080 : OUString& rText, const IntlWrapper *pIntl
1081 : ) const
1082 : {
1083 0 : rText.clear();
1084 :
1085 0 : bool bComma = false;
1086 :
1087 0 : for ( sal_uInt16 i = 0; i < Count(); ++i )
1088 : {
1089 0 : if ( SVX_TAB_ADJUST_DEFAULT != ((*this)[i]).GetAdjustment() )
1090 : {
1091 0 : if ( bComma )
1092 0 : rText += ",";
1093 0 : rText += GetMetricText(
1094 0 : ((*this)[i]).GetTabPos(), eCoreUnit, ePresUnit, pIntl );
1095 0 : if ( SFX_ITEM_PRESENTATION_COMPLETE == ePres )
1096 : {
1097 0 : rText += " " + EE_RESSTR(GetMetricId(ePresUnit));
1098 : }
1099 0 : bComma = true;
1100 : }
1101 : }
1102 0 : return true;
1103 : }
1104 :
1105 :
1106 :
1107 0 : SfxPoolItem* SvxTabStopItem::Create( SvStream& rStrm, sal_uInt16 ) const
1108 : {
1109 : sal_Int8 nTabs;
1110 0 : rStrm.ReadSChar( nTabs );
1111 : SvxTabStopItem* pAttr =
1112 0 : new SvxTabStopItem( 0, 0, SVX_TAB_ADJUST_DEFAULT, Which() );
1113 :
1114 0 : for ( sal_Int8 i = 0; i < nTabs; i++ )
1115 : {
1116 0 : sal_Int32 nPos(0);
1117 : sal_Int8 eAdjust;
1118 : unsigned char cDecimal, cFill;
1119 0 : rStrm.ReadInt32( nPos ).ReadSChar( eAdjust ).ReadUChar( cDecimal ).ReadUChar( cFill );
1120 0 : if( !i || SVX_TAB_ADJUST_DEFAULT != eAdjust )
1121 : pAttr->Insert( SvxTabStop
1122 0 : ( nPos, (SvxTabAdjust)eAdjust, sal_Unicode(cDecimal), sal_Unicode(cFill) ) );
1123 : }
1124 0 : return pAttr;
1125 : }
1126 :
1127 :
1128 :
1129 0 : SvStream& SvxTabStopItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
1130 : {
1131 : // Default-Tabs are only expanded for the default Attribute. For complete
1132 : // backward compabillity (<=304) all tabs have to be expanded, this makes
1133 : // the files grow large in size. All only SWG!
1134 :
1135 0 : const SfxItemPool *pPool = SfxItemPool::GetStoringPool();
1136 : const bool bStoreDefTabs = pPool
1137 0 : && pPool->GetName() == "SWG"
1138 0 : && ::IsDefaultItem( this );
1139 :
1140 0 : const short nTabs = Count();
1141 0 : sal_uInt16 nCount = 0, nDefDist = 0;
1142 0 : sal_Int32 nNew = 0;
1143 :
1144 0 : if( bStoreDefTabs )
1145 : {
1146 : const SvxTabStopItem& rDefTab = static_cast<const SvxTabStopItem &>(
1147 0 : pPool->GetDefaultItem( pPool->GetWhich( SID_ATTR_TABSTOP, false ) ) );
1148 0 : nDefDist = sal_uInt16( rDefTab.maTabStops.front().GetTabPos() );
1149 0 : const sal_Int32 nPos = nTabs > 0 ? (*this)[nTabs-1].GetTabPos() : 0;
1150 0 : nCount = (sal_uInt16)(nPos / nDefDist);
1151 0 : nNew = (nCount + 1) * nDefDist;
1152 :
1153 0 : if( nNew <= nPos + 50 )
1154 0 : nNew += nDefDist;
1155 :
1156 0 : sal_Int32 lA3Width = SvxPaperInfo::GetPaperSize(PAPER_A3).Width();
1157 0 : nCount = (sal_uInt16)(nNew < lA3Width ? ( lA3Width - nNew ) / nDefDist + 1 : 0);
1158 : }
1159 :
1160 0 : rStrm.WriteSChar( nTabs + nCount );
1161 0 : for ( short i = 0; i < nTabs; i++ )
1162 : {
1163 0 : const SvxTabStop& rTab = (*this)[ i ];
1164 0 : rStrm.WriteInt32( rTab.GetTabPos() )
1165 0 : .WriteSChar( rTab.GetAdjustment() )
1166 0 : .WriteUChar( rTab.GetDecimal() )
1167 0 : .WriteUChar( rTab.GetFill() );
1168 : }
1169 :
1170 0 : if ( bStoreDefTabs )
1171 0 : for( ; nCount; --nCount )
1172 : {
1173 0 : SvxTabStop aSwTabStop(nNew, SVX_TAB_ADJUST_DEFAULT);
1174 0 : rStrm.WriteInt32( aSwTabStop.GetTabPos() )
1175 0 : .WriteSChar( aSwTabStop.GetAdjustment() )
1176 0 : .WriteUChar( aSwTabStop.GetDecimal() )
1177 0 : .WriteUChar( aSwTabStop.GetFill() );
1178 0 : nNew += nDefDist;
1179 : }
1180 :
1181 0 : return rStrm;
1182 : }
1183 :
1184 :
1185 28754 : bool SvxTabStopItem::Insert( const SvxTabStop& rTab )
1186 : {
1187 28754 : sal_uInt16 nTabPos = GetPos(rTab);
1188 28754 : if(SVX_TAB_NOTFOUND != nTabPos )
1189 164 : Remove(nTabPos);
1190 28754 : return maTabStops.insert( rTab ).second;
1191 : }
1192 :
1193 24 : void SvxTabStopItem::Insert( const SvxTabStopItem* pTabs, sal_uInt16 nStart,
1194 : sal_uInt16 nEnd )
1195 : {
1196 48 : for( sal_uInt16 i = nStart; i < nEnd && i < pTabs->Count(); i++ )
1197 : {
1198 24 : const SvxTabStop& rTab = (*pTabs)[i];
1199 24 : sal_uInt16 nTabPos = GetPos(rTab);
1200 24 : if(SVX_TAB_NOTFOUND != nTabPos)
1201 0 : Remove(nTabPos);
1202 : }
1203 48 : for( sal_uInt16 i = nStart; i < nEnd && i < pTabs->Count(); i++ )
1204 : {
1205 24 : maTabStops.insert( (*pTabs)[i] );
1206 : }
1207 24 : }
1208 :
1209 :
1210 :
1211 : // class SvxFormatSplitItem -------------------------------------------------
1212 2304 : SvxFormatSplitItem::~SvxFormatSplitItem()
1213 : {
1214 2304 : }
1215 :
1216 1081 : SfxPoolItem* SvxFormatSplitItem::Clone( SfxItemPool * ) const
1217 : {
1218 1081 : return new SvxFormatSplitItem( *this );
1219 : }
1220 :
1221 :
1222 :
1223 0 : SvStream& SvxFormatSplitItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
1224 : {
1225 0 : rStrm.WriteSChar( (sal_Int8)GetValue() );
1226 0 : return rStrm;
1227 : }
1228 :
1229 :
1230 :
1231 0 : SfxPoolItem* SvxFormatSplitItem::Create( SvStream& rStrm, sal_uInt16 ) const
1232 : {
1233 : sal_Int8 bIsSplit;
1234 0 : rStrm.ReadSChar( bIsSplit );
1235 0 : return new SvxFormatSplitItem( bIsSplit != 0, Which() );
1236 : }
1237 :
1238 :
1239 :
1240 0 : bool SvxFormatSplitItem::GetPresentation
1241 : (
1242 : SfxItemPresentation /*ePres*/,
1243 : SfxMapUnit /*eCoreUnit*/,
1244 : SfxMapUnit /*ePresUnit*/,
1245 : OUString& rText, const IntlWrapper *
1246 : ) const
1247 : {
1248 0 : sal_uInt16 nId = RID_SVXITEMS_FMTSPLIT_FALSE;
1249 :
1250 0 : if ( GetValue() )
1251 0 : nId = RID_SVXITEMS_FMTSPLIT_TRUE;
1252 0 : rText = EE_RESSTR(nId);
1253 0 : return true;
1254 : }
1255 :
1256 :
1257 :
1258 0 : SfxPoolItem* SvxPageModelItem::Clone( SfxItemPool* ) const
1259 : {
1260 0 : return new SvxPageModelItem( *this );
1261 : }
1262 :
1263 :
1264 :
1265 0 : bool SvxPageModelItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
1266 : {
1267 0 : nMemberId &= ~CONVERT_TWIPS;
1268 :
1269 0 : switch ( nMemberId )
1270 : {
1271 0 : case MID_AUTO: rVal <<= bAuto; break;
1272 0 : case MID_NAME: rVal <<= OUString( GetValue() ); break;
1273 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
1274 : }
1275 :
1276 0 : return true;
1277 : }
1278 :
1279 0 : bool SvxPageModelItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
1280 : {
1281 0 : nMemberId &= ~CONVERT_TWIPS;
1282 : bool bRet;
1283 0 : OUString aStr;
1284 0 : switch ( nMemberId )
1285 : {
1286 0 : case MID_AUTO: bRet = ( rVal >>= bAuto ); break;
1287 0 : case MID_NAME: bRet = ( rVal >>= aStr ); if ( bRet ) SetValue(aStr); break;
1288 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
1289 : }
1290 :
1291 0 : return bRet;
1292 : }
1293 :
1294 0 : bool SvxPageModelItem::GetPresentation
1295 : (
1296 : SfxItemPresentation ePres,
1297 : SfxMapUnit /*eCoreUnit*/,
1298 : SfxMapUnit /*ePresUnit*/,
1299 : OUString& rText, const IntlWrapper *
1300 : ) const
1301 : {
1302 0 : rText.clear();
1303 0 : bool bSet = !GetValue().isEmpty();
1304 :
1305 0 : switch ( ePres )
1306 : {
1307 : case SFX_ITEM_PRESENTATION_NAMELESS:
1308 0 : if ( bSet )
1309 0 : rText = GetValue();
1310 0 : return true;
1311 :
1312 : case SFX_ITEM_PRESENTATION_COMPLETE:
1313 0 : if ( bSet )
1314 : {
1315 0 : rText = EE_RESSTR(RID_SVXITEMS_PAGEMODEL_COMPLETE) + GetValue();
1316 : }
1317 0 : return true;
1318 : default: ;//prevent warning
1319 : }
1320 0 : return false;
1321 : }
1322 :
1323 :
1324 :
1325 50114 : SvxScriptSpaceItem::SvxScriptSpaceItem( bool bOn, const sal_uInt16 nId )
1326 50114 : : SfxBoolItem( nId, bOn )
1327 : {
1328 50114 : }
1329 :
1330 43854 : SfxPoolItem* SvxScriptSpaceItem::Clone( SfxItemPool * ) const
1331 : {
1332 43854 : return new SvxScriptSpaceItem( GetValue(), Which() );
1333 : }
1334 :
1335 0 : SfxPoolItem* SvxScriptSpaceItem::Create(SvStream & rStrm, sal_uInt16) const
1336 : {
1337 : bool bFlag;
1338 0 : rStrm.ReadCharAsBool( bFlag );
1339 0 : return new SvxScriptSpaceItem( bFlag, Which() );
1340 : }
1341 :
1342 13100 : sal_uInt16 SvxScriptSpaceItem::GetVersion( sal_uInt16 nFFVer ) const
1343 : {
1344 : DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
1345 : SOFFICE_FILEFORMAT_40==nFFVer ||
1346 : SOFFICE_FILEFORMAT_50==nFFVer,
1347 : "SvxTwoLinesItem: Is there a new file format? ");
1348 :
1349 13100 : return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
1350 : }
1351 :
1352 0 : bool SvxScriptSpaceItem::GetPresentation(
1353 : SfxItemPresentation /*ePres*/,
1354 : SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
1355 : OUString &rText, const IntlWrapper* /*pIntl*/ ) const
1356 : {
1357 0 : rText = EE_RESSTR( !GetValue()
1358 : ? RID_SVXITEMS_SCRPTSPC_OFF
1359 0 : : RID_SVXITEMS_SCRPTSPC_ON );
1360 0 : return true;
1361 : }
1362 :
1363 :
1364 :
1365 4130 : SvxHangingPunctuationItem::SvxHangingPunctuationItem(
1366 : bool bOn, const sal_uInt16 nId )
1367 4130 : : SfxBoolItem( nId, bOn )
1368 : {
1369 4130 : }
1370 :
1371 2693 : SfxPoolItem* SvxHangingPunctuationItem::Clone( SfxItemPool * ) const
1372 : {
1373 2693 : return new SvxHangingPunctuationItem( GetValue(), Which() );
1374 : }
1375 :
1376 0 : SfxPoolItem* SvxHangingPunctuationItem::Create(SvStream & rStrm, sal_uInt16) const
1377 : {
1378 : bool nValue;
1379 0 : rStrm.ReadCharAsBool( nValue );
1380 0 : return new SvxHangingPunctuationItem( nValue, Which() );
1381 : }
1382 :
1383 0 : sal_uInt16 SvxHangingPunctuationItem::GetVersion( sal_uInt16 nFFVer ) const
1384 : {
1385 : DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
1386 : SOFFICE_FILEFORMAT_40==nFFVer ||
1387 : SOFFICE_FILEFORMAT_50==nFFVer,
1388 : "SvxHangingPunctuationItem: Is there a new file format? ");
1389 :
1390 0 : return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
1391 : }
1392 :
1393 0 : bool SvxHangingPunctuationItem::GetPresentation(
1394 : SfxItemPresentation /*ePres*/,
1395 : SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
1396 : OUString &rText, const IntlWrapper* /*pIntl*/ ) const
1397 : {
1398 0 : rText = EE_RESSTR( !GetValue()
1399 : ? RID_SVXITEMS_HNGPNCT_OFF
1400 0 : : RID_SVXITEMS_HNGPNCT_ON );
1401 0 : return true;
1402 : }
1403 :
1404 :
1405 3483 : SvxForbiddenRuleItem::SvxForbiddenRuleItem(
1406 : bool bOn, const sal_uInt16 nId )
1407 3483 : : SfxBoolItem( nId, bOn )
1408 : {
1409 3483 : }
1410 :
1411 2046 : SfxPoolItem* SvxForbiddenRuleItem::Clone( SfxItemPool * ) const
1412 : {
1413 2046 : return new SvxForbiddenRuleItem( GetValue(), Which() );
1414 : }
1415 :
1416 0 : SfxPoolItem* SvxForbiddenRuleItem::Create(SvStream & rStrm, sal_uInt16) const
1417 : {
1418 : bool nValue;
1419 0 : rStrm.ReadCharAsBool( nValue );
1420 0 : return new SvxForbiddenRuleItem( nValue, Which() );
1421 : }
1422 :
1423 0 : sal_uInt16 SvxForbiddenRuleItem::GetVersion( sal_uInt16 nFFVer ) const
1424 : {
1425 : DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
1426 : SOFFICE_FILEFORMAT_40==nFFVer ||
1427 : SOFFICE_FILEFORMAT_50==nFFVer,
1428 : "SvxForbiddenRuleItem: Is there a new file format? ");
1429 :
1430 0 : return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
1431 : }
1432 :
1433 0 : bool SvxForbiddenRuleItem::GetPresentation(
1434 : SfxItemPresentation /*ePres*/,
1435 : SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
1436 : OUString &rText, const IntlWrapper* /*pIntl*/ ) const
1437 : {
1438 0 : rText = EE_RESSTR( !GetValue()
1439 : ? RID_SVXITEMS_FORBIDDEN_RULE_OFF
1440 0 : : RID_SVXITEMS_FORBIDDEN_RULE_ON );
1441 0 : return true;
1442 : }
1443 :
1444 : /*************************************************************************
1445 : |* class SvxParaVertAlignItem
1446 : *************************************************************************/
1447 :
1448 2009 : SvxParaVertAlignItem::SvxParaVertAlignItem( sal_uInt16 nValue,
1449 : const sal_uInt16 nW )
1450 2009 : : SfxUInt16Item( nW, nValue )
1451 : {
1452 2009 : }
1453 :
1454 1916 : SfxPoolItem* SvxParaVertAlignItem::Clone( SfxItemPool* ) const
1455 : {
1456 1916 : return new SvxParaVertAlignItem( GetValue(), Which() );
1457 : }
1458 :
1459 0 : SfxPoolItem* SvxParaVertAlignItem::Create( SvStream& rStrm, sal_uInt16 ) const
1460 : {
1461 : sal_uInt16 nVal;
1462 0 : rStrm.ReadUInt16( nVal );
1463 0 : return new SvxParaVertAlignItem( nVal, Which() );
1464 : }
1465 :
1466 0 : SvStream& SvxParaVertAlignItem::Store( SvStream & rStrm, sal_uInt16 ) const
1467 : {
1468 0 : rStrm.WriteUInt16( GetValue() );
1469 0 : return rStrm;
1470 : }
1471 :
1472 0 : sal_uInt16 SvxParaVertAlignItem::GetVersion( sal_uInt16 nFFVer ) const
1473 : {
1474 0 : return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
1475 : }
1476 :
1477 0 : bool SvxParaVertAlignItem::GetPresentation(
1478 : SfxItemPresentation /*ePres*/,
1479 : SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
1480 : OUString &rText, const IntlWrapper* ) const
1481 : {
1482 : sal_uInt16 nTmp;
1483 0 : switch( GetValue() )
1484 : {
1485 0 : case AUTOMATIC: nTmp = RID_SVXITEMS_PARAVERTALIGN_AUTO; break;
1486 0 : case TOP: nTmp = RID_SVXITEMS_PARAVERTALIGN_TOP; break;
1487 0 : case CENTER: nTmp = RID_SVXITEMS_PARAVERTALIGN_CENTER; break;
1488 0 : case BOTTOM: nTmp = RID_SVXITEMS_PARAVERTALIGN_BOTTOM; break;
1489 0 : default: nTmp = RID_SVXITEMS_PARAVERTALIGN_BASELINE; break;
1490 : }
1491 0 : rText = EE_RESSTR( nTmp );
1492 0 : return true;
1493 : }
1494 :
1495 12 : bool SvxParaVertAlignItem::QueryValue( com::sun::star::uno::Any& rVal,
1496 : sal_uInt8 /*nMemberId*/ ) const
1497 : {
1498 12 : rVal <<= (sal_Int16)GetValue();
1499 12 : return true;
1500 : }
1501 :
1502 1414 : bool SvxParaVertAlignItem::PutValue( const com::sun::star::uno::Any& rVal,
1503 : sal_uInt8 /*nMemberId*/ )
1504 : {
1505 1414 : sal_Int16 nVal = sal_Int16();
1506 1414 : if((rVal >>= nVal) && nVal >=0 && nVal <= BOTTOM )
1507 : {
1508 1414 : SetValue( (sal_uInt16)nVal );
1509 1414 : return true;
1510 : }
1511 : else
1512 0 : return false;
1513 : }
1514 :
1515 3883 : bool SvxParaVertAlignItem::operator==( const SfxPoolItem& rItem ) const
1516 : {
1517 : DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
1518 3883 : return SfxUInt16Item::operator==( rItem );
1519 : }
1520 :
1521 :
1522 2182 : SvxParaGridItem::SvxParaGridItem( bool bOn, const sal_uInt16 nId )
1523 2182 : : SfxBoolItem( nId, bOn )
1524 : {
1525 2182 : }
1526 :
1527 1885 : SfxPoolItem* SvxParaGridItem::Clone( SfxItemPool * ) const
1528 : {
1529 1885 : return new SvxParaGridItem( GetValue(), Which() );
1530 : }
1531 :
1532 0 : SfxPoolItem* SvxParaGridItem::Create(SvStream & rStrm, sal_uInt16) const
1533 : {
1534 : bool bFlag;
1535 0 : rStrm.ReadCharAsBool( bFlag );
1536 0 : return new SvxParaGridItem( bFlag, Which() );
1537 : }
1538 :
1539 0 : sal_uInt16 SvxParaGridItem::GetVersion( sal_uInt16 nFFVer ) const
1540 : {
1541 : DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
1542 : SOFFICE_FILEFORMAT_40==nFFVer ||
1543 : SOFFICE_FILEFORMAT_50==nFFVer,
1544 : "SvxParaGridItem: Is there a new file format? ");
1545 :
1546 0 : return SOFFICE_FILEFORMAT_50 > nFFVer ? USHRT_MAX : 0;
1547 : }
1548 :
1549 0 : bool SvxParaGridItem::GetPresentation(
1550 : SfxItemPresentation /*ePres*/,
1551 : SfxMapUnit /*eCoreMetric*/, SfxMapUnit /*ePresMetric*/,
1552 : OUString &rText, const IntlWrapper* /*pIntl*/ ) const
1553 : {
1554 0 : rText = GetValue() ?
1555 : EE_RESSTR( RID_SVXITEMS_PARASNAPTOGRID_ON ) :
1556 0 : EE_RESSTR( RID_SVXITEMS_PARASNAPTOGRID_OFF );
1557 :
1558 0 : return true;
1559 : }
1560 :
1561 :
1562 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|