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