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/uno/Any.hxx>
21 : #include <com/sun/star/drawing/LineStyle.hpp>
22 : #include <com/sun/star/script/Converter.hpp>
23 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
24 : #include <com/sun/star/table/ShadowLocation.hpp>
25 : #include <com/sun/star/table/TableBorder.hpp>
26 : #include <com/sun/star/table/ShadowFormat.hpp>
27 : #include <com/sun/star/table/CellRangeAddress.hpp>
28 : #include <com/sun/star/table/CellContentType.hpp>
29 : #include <com/sun/star/table/TableOrientation.hpp>
30 : #include <com/sun/star/util/SortField.hpp>
31 : #include <com/sun/star/util/SortFieldType.hpp>
32 : #include <com/sun/star/table/BorderLine2.hpp>
33 : #include <com/sun/star/table/BorderLineStyle.hpp>
34 : #include <com/sun/star/table/CellOrientation.hpp>
35 : #include <com/sun/star/table/CellAddress.hpp>
36 : #include <com/sun/star/style/PageStyleLayout.hpp>
37 : #include <com/sun/star/style/BreakType.hpp>
38 : #include <com/sun/star/style/GraphicLocation.hpp>
39 : #include <com/sun/star/awt/Rectangle.hpp>
40 : #include <com/sun/star/awt/Selection.hpp>
41 : #include <com/sun/star/awt/Size.hpp>
42 : #include <com/sun/star/text/WritingMode2.hpp>
43 : #include <com/sun/star/frame/status/UpperLowerMarginScale.hpp>
44 : #include <com/sun/star/drawing/ShadingPattern.hpp>
45 :
46 : #include <i18nutil/unicode.hxx>
47 : #include <unotools/securityoptions.hxx>
48 : #include <unotools/ucbstreamhelper.hxx>
49 : #include <limits.h>
50 : #include <comphelper/processfactory.hxx>
51 : #include <svtools/grfmgr.hxx>
52 : #include <tools/urlobj.hxx>
53 : #include <comphelper/types.hxx>
54 : #include <svl/memberid.hrc>
55 : #include <svl/cntwall.hxx>
56 : #include <svtools/borderhelper.hxx>
57 : #include <rtl/ustring.hxx>
58 : #include <rtl/ustrbuf.hxx>
59 : #include <tools/mapunit.hxx>
60 : #include <vcl/graphicfilter.hxx>
61 : #include <vcl/settings.hxx>
62 : #include <vcl/svapp.hxx>
63 : #include <editeng/editids.hrc>
64 : #include <editeng/editrids.hrc>
65 : #include <editeng/pbinitem.hxx>
66 : #include <editeng/sizeitem.hxx>
67 : #include <editeng/lrspitem.hxx>
68 : #include <editeng/ulspitem.hxx>
69 : #include <editeng/prntitem.hxx>
70 : #include <editeng/opaqitem.hxx>
71 : #include <editeng/protitem.hxx>
72 : #include <editeng/shaditem.hxx>
73 : #include <editeng/boxitem.hxx>
74 : #include <editeng/formatbreakitem.hxx>
75 : #include <editeng/keepitem.hxx>
76 : #include <editeng/lineitem.hxx>
77 : #include <editeng/brushitem.hxx>
78 : #include <editeng/frmdiritem.hxx>
79 : #include <editeng/itemtype.hxx>
80 : #include <editeng/eerdll.hxx>
81 : #include <editeng/unoprnms.hxx>
82 : #include <editeng/memberids.hrc>
83 : #include <editeng/editerr.hxx>
84 :
85 : using namespace ::editeng;
86 : using namespace ::com::sun::star;
87 : using namespace ::com::sun::star::drawing;
88 : using namespace ::com::sun::star::table::BorderLineStyle;
89 :
90 : /*
91 : SvxBorderLine is not an SfxPoolItem, and has no Store/Create serialization/deserialization methods.
92 : Since border line information needs to be serialized by the table autoformat code, these file-local
93 : methods are defined to encapsulate the necessary serialization logic.
94 : */
95 : namespace
96 : {
97 : /// Item version for saved border lines. The old version saves the line without style information.
98 : const int BORDER_LINE_OLD_VERSION = 0;
99 : /// Item version for saved border lies. The new version includes line style.
100 : const int BORDER_LINE_WITH_STYLE_VERSION = 1;
101 :
102 : /// Store a border line to a stream.
103 1790 : SvStream& StoreBorderLine(SvStream &stream, const SvxBorderLine &l, sal_uInt16 version)
104 : {
105 1790 : WriteColor( stream, l.GetColor() );
106 1790 : stream.WriteUInt16( l.GetOutWidth() )
107 3580 : .WriteUInt16( l.GetInWidth() )
108 3580 : .WriteUInt16( l.GetDistance() );
109 :
110 1790 : if (version >= BORDER_LINE_WITH_STYLE_VERSION)
111 1790 : stream.WriteUInt16( l.GetBorderLineStyle() );
112 :
113 1790 : return stream;
114 : }
115 :
116 : /// Creates a border line from a stream.
117 616 : SvxBorderLine CreateBorderLine(SvStream &stream, sal_uInt16 version)
118 : {
119 : sal_uInt16 nOutline, nInline, nDistance;
120 616 : sal_uInt16 nStyle = css::table::BorderLineStyle::NONE;
121 616 : Color aColor;
122 616 : ReadColor( stream, aColor ).ReadUInt16( nOutline ).ReadUInt16( nInline ).ReadUInt16( nDistance );
123 :
124 616 : if (version >= BORDER_LINE_WITH_STYLE_VERSION)
125 0 : stream.ReadUInt16( nStyle );
126 :
127 616 : SvxBorderLine border(&aColor);
128 616 : border.GuessLinesWidths(nStyle, nOutline, nInline, nDistance);
129 616 : return border;
130 : }
131 :
132 : /// Retrieves a BORDER_LINE_* version from a BOX_BORDER_* version.
133 2406 : sal_uInt16 BorderLineVersionFromBoxVersion(sal_uInt16 boxVersion)
134 : {
135 2406 : return (boxVersion >= BOX_BORDER_STYLE_VERSION)? BORDER_LINE_WITH_STYLE_VERSION : BORDER_LINE_OLD_VERSION;
136 : }
137 : }
138 :
139 28855 : TYPEINIT1_FACTORY(SvxPaperBinItem, SfxByteItem, new SvxPaperBinItem(0));
140 49089 : TYPEINIT1_FACTORY(SvxSizeItem, SfxPoolItem, new SvxSizeItem(0));
141 880873 : TYPEINIT1_FACTORY(SvxLRSpaceItem, SfxPoolItem, new SvxLRSpaceItem(0));
142 740807 : TYPEINIT1_FACTORY(SvxULSpaceItem, SfxPoolItem, new SvxULSpaceItem(0));
143 15399 : TYPEINIT1_FACTORY(SvxPrintItem, SfxBoolItem, new SvxPrintItem(0));
144 15685 : TYPEINIT1_FACTORY(SvxOpaqueItem, SfxBoolItem, new SvxOpaqueItem(0));
145 18899 : TYPEINIT1_FACTORY(SvxProtectItem, SfxPoolItem, new SvxProtectItem(0));
146 92540 : TYPEINIT1_FACTORY(SvxBrushItem, SfxPoolItem, new SvxBrushItem(0));
147 44742 : TYPEINIT1_FACTORY(SvxShadowItem, SfxPoolItem, new SvxShadowItem(0));
148 263979 : TYPEINIT1_FACTORY(SvxBoxItem, SfxPoolItem, new SvxBoxItem(0));
149 30425 : TYPEINIT1_FACTORY(SvxBoxInfoItem, SfxPoolItem, new SvxBoxInfoItem(0));
150 105117 : TYPEINIT1_FACTORY(SvxFmtBreakItem, SfxEnumItem, new SvxFmtBreakItem(SVX_BREAK_NONE, 0));
151 17859 : TYPEINIT1_FACTORY(SvxFmtKeepItem, SfxBoolItem, new SvxFmtKeepItem(false, 0));
152 63321 : TYPEINIT1_FACTORY(SvxLineItem, SfxPoolItem, new SvxLineItem(0));
153 800874 : TYPEINIT1_FACTORY(SvxFrameDirectionItem, SfxUInt16Item, new SvxFrameDirectionItem(FRMDIR_HORI_LEFT_TOP, 0));
154 :
155 : // class SvxPaperBinItem ------------------------------------------------
156 :
157 66 : SfxPoolItem* SvxPaperBinItem::Clone( SfxItemPool* ) const
158 : {
159 66 : return new SvxPaperBinItem( *this );
160 : }
161 :
162 :
163 :
164 0 : SvStream& SvxPaperBinItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
165 : {
166 0 : rStrm.WriteUChar( GetValue() );
167 0 : return rStrm;
168 : }
169 :
170 :
171 :
172 0 : SfxPoolItem* SvxPaperBinItem::Create( SvStream& rStrm, sal_uInt16 ) const
173 : {
174 : sal_Int8 nBin;
175 0 : rStrm.ReadSChar( nBin );
176 0 : return new SvxPaperBinItem( Which(), nBin );
177 : }
178 :
179 :
180 :
181 0 : bool SvxPaperBinItem::GetPresentation
182 : (
183 : SfxItemPresentation ePres,
184 : SfxMapUnit /*eCoreUnit*/,
185 : SfxMapUnit /*ePresUnit*/,
186 : OUString& rText, const IntlWrapper *
187 : ) const
188 : {
189 0 : switch ( ePres )
190 : {
191 : case SFX_ITEM_PRESENTATION_NAMELESS:
192 0 : rText = OUString::number( GetValue() );
193 0 : return true;
194 :
195 : case SFX_ITEM_PRESENTATION_COMPLETE:
196 : {
197 0 : sal_uInt8 nValue = GetValue();
198 :
199 0 : if ( PAPERBIN_PRINTER_SETTINGS == nValue )
200 0 : rText = EE_RESSTR(RID_SVXSTR_PAPERBIN_SETTINGS);
201 : else
202 : {
203 0 : rText = EE_RESSTR(RID_SVXSTR_PAPERBIN) + " " + OUString::number( nValue );
204 : }
205 0 : return true;
206 : }
207 : //no break necessary
208 : default: ;//prevent warning
209 : }
210 :
211 0 : return false;
212 : }
213 :
214 : // class SvxSizeItem -----------------------------------------------------
215 :
216 74873 : SvxSizeItem::SvxSizeItem( const sal_uInt16 nId, const Size& rSize ) :
217 :
218 : SfxPoolItem( nId ),
219 :
220 74873 : aSize( rSize )
221 : {
222 74873 : }
223 :
224 :
225 657 : bool SvxSizeItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
226 : {
227 657 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
228 657 : nMemberId &= ~CONVERT_TWIPS;
229 :
230 657 : awt::Size aTmp(aSize.Width(), aSize.Height());
231 657 : if( bConvert )
232 : {
233 452 : aTmp.Height = convertTwipToMm100(aTmp.Height);
234 452 : aTmp.Width = convertTwipToMm100(aTmp.Width);
235 : }
236 :
237 657 : switch( nMemberId )
238 : {
239 225 : case MID_SIZE_SIZE: rVal <<= aTmp; break;
240 98 : case MID_SIZE_WIDTH: rVal <<= aTmp.Width; break;
241 334 : case MID_SIZE_HEIGHT: rVal <<= aTmp.Height; break;
242 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
243 : }
244 :
245 657 : return true;
246 : }
247 :
248 13803 : bool SvxSizeItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
249 : {
250 13803 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
251 13803 : nMemberId &= ~CONVERT_TWIPS;
252 :
253 13803 : switch( nMemberId )
254 : {
255 : case MID_SIZE_SIZE:
256 : {
257 355 : awt::Size aTmp;
258 355 : if( rVal >>= aTmp )
259 : {
260 355 : if(bConvert)
261 : {
262 150 : aTmp.Height = convertMm100ToTwip(aTmp.Height);
263 150 : aTmp.Width = convertMm100ToTwip(aTmp.Width);
264 : }
265 355 : aSize = Size( aTmp.Width, aTmp.Height );
266 : }
267 : else
268 : {
269 0 : return false;
270 : }
271 : }
272 355 : break;
273 : case MID_SIZE_WIDTH:
274 : {
275 4996 : sal_Int32 nVal = 0;
276 4996 : if(!(rVal >>= nVal ))
277 0 : return false;
278 :
279 4996 : aSize.Width() = bConvert ? convertMm100ToTwip(nVal) : nVal;
280 : }
281 4996 : break;
282 : case MID_SIZE_HEIGHT:
283 : {
284 8452 : sal_Int32 nVal = 0;
285 8452 : if(!(rVal >>= nVal))
286 0 : return true;
287 :
288 8452 : aSize.Height() = bConvert ? convertMm100ToTwip(nVal) : nVal;
289 : }
290 8452 : break;
291 : default: OSL_FAIL("Wrong MemberId!");
292 0 : return false;
293 : }
294 13803 : return true;
295 : }
296 :
297 :
298 :
299 5619 : SvxSizeItem::SvxSizeItem( const sal_uInt16 nId ) :
300 :
301 5619 : SfxPoolItem( nId )
302 : {
303 5619 : }
304 :
305 :
306 :
307 23632 : bool SvxSizeItem::operator==( const SfxPoolItem& rAttr ) const
308 : {
309 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
310 :
311 23632 : return ( aSize == static_cast<const SvxSizeItem&>( rAttr ).GetSize() );
312 : }
313 :
314 :
315 :
316 230338 : SfxPoolItem* SvxSizeItem::Clone( SfxItemPool* ) const
317 : {
318 230338 : return new SvxSizeItem( *this );
319 : }
320 :
321 :
322 :
323 0 : bool SvxSizeItem::GetPresentation
324 : (
325 : SfxItemPresentation ePres,
326 : SfxMapUnit eCoreUnit,
327 : SfxMapUnit ePresUnit,
328 : OUString& rText, const IntlWrapper *pIntl
329 : ) const
330 : {
331 0 : OUString cpDelimTmp(cpDelim);
332 0 : switch ( ePres )
333 : {
334 : case SFX_ITEM_PRESENTATION_NAMELESS:
335 0 : rText = GetMetricText( aSize.Width(), eCoreUnit, ePresUnit, pIntl ) +
336 0 : cpDelimTmp +
337 0 : GetMetricText( aSize.Height(), eCoreUnit, ePresUnit, pIntl );
338 0 : return true;
339 :
340 : case SFX_ITEM_PRESENTATION_COMPLETE:
341 0 : rText = EE_RESSTR(RID_SVXITEMS_SIZE_WIDTH) +
342 0 : GetMetricText( aSize.Width(), eCoreUnit, ePresUnit, pIntl ) +
343 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
344 0 : cpDelimTmp +
345 0 : EE_RESSTR(RID_SVXITEMS_SIZE_HEIGHT) +
346 0 : GetMetricText( aSize.Height(), eCoreUnit, ePresUnit, pIntl ) +
347 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
348 0 : return true;
349 : //no break necessary
350 : default: ;//prevent warning
351 :
352 : }
353 0 : return false;
354 : }
355 :
356 :
357 :
358 0 : SvStream& SvxSizeItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
359 : {
360 0 : rStrm.WriteInt32( aSize.Width() );
361 0 : rStrm.WriteInt32( aSize.Height() );
362 0 : return rStrm;
363 : }
364 :
365 :
366 :
367 0 : bool SvxSizeItem::ScaleMetrics( long nMult, long nDiv )
368 : {
369 0 : aSize.Width() = Scale( aSize.Width(), nMult, nDiv );
370 0 : aSize.Height() = Scale( aSize.Height(), nMult, nDiv );
371 0 : return true;
372 : }
373 :
374 :
375 :
376 0 : bool SvxSizeItem::HasMetrics() const
377 : {
378 0 : return true;
379 : }
380 :
381 :
382 :
383 0 : SfxPoolItem* SvxSizeItem::Create( SvStream& rStrm, sal_uInt16 ) const
384 : {
385 0 : sal_Int32 nWidth(0), nHeight(0);
386 0 : rStrm.ReadInt32( nWidth ).ReadInt32( nHeight );
387 :
388 0 : SvxSizeItem* pAttr = new SvxSizeItem( Which() );
389 0 : pAttr->SetSize(Size(nWidth, nHeight));
390 :
391 0 : return pAttr;
392 : }
393 :
394 : // class SvxLRSpaceItem --------------------------------------------------
395 :
396 42323 : SvxLRSpaceItem::SvxLRSpaceItem( const sal_uInt16 nId ) :
397 :
398 : SfxPoolItem( nId ),
399 :
400 : nFirstLineOfst ( 0 ),
401 : nTxtLeft ( 0 ),
402 : nLeftMargin ( 0 ),
403 : nRightMargin ( 0 ),
404 : nPropFirstLineOfst( 100 ),
405 : nPropLeftMargin( 100 ),
406 : nPropRightMargin( 100 ),
407 : bAutoFirst ( false ),
408 : bExplicitZeroMarginValRight(false),
409 42323 : bExplicitZeroMarginValLeft(false)
410 : {
411 42323 : }
412 :
413 :
414 :
415 8382 : SvxLRSpaceItem::SvxLRSpaceItem( const long nLeft, const long nRight,
416 : const long nTLeft, const short nOfset,
417 : const sal_uInt16 nId ) :
418 :
419 : SfxPoolItem( nId ),
420 :
421 : nFirstLineOfst ( nOfset ),
422 : nTxtLeft ( nTLeft ),
423 : nLeftMargin ( nLeft ),
424 : nRightMargin ( nRight ),
425 : nPropFirstLineOfst( 100 ),
426 : nPropLeftMargin( 100 ),
427 : nPropRightMargin( 100 ),
428 : bAutoFirst ( false ),
429 : bExplicitZeroMarginValRight(false),
430 8382 : bExplicitZeroMarginValLeft(false)
431 : {
432 8382 : }
433 :
434 :
435 3333 : bool SvxLRSpaceItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
436 : {
437 3333 : bool bRet = true;
438 3333 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
439 3333 : nMemberId &= ~CONVERT_TWIPS;
440 3333 : switch( nMemberId )
441 : {
442 : // now all signed
443 : case MID_L_MARGIN:
444 500 : rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nLeftMargin) : nLeftMargin);
445 500 : break;
446 :
447 : case MID_TXT_LMARGIN :
448 884 : rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nTxtLeft) : nTxtLeft);
449 884 : break;
450 : case MID_R_MARGIN:
451 866 : rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nRightMargin) : nRightMargin);
452 866 : break;
453 : case MID_L_REL_MARGIN:
454 50 : rVal <<= (sal_Int16)nPropLeftMargin;
455 50 : break;
456 : case MID_R_REL_MARGIN:
457 50 : rVal <<= (sal_Int16)nPropRightMargin;
458 50 : break;
459 :
460 : case MID_FIRST_LINE_INDENT:
461 889 : rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nFirstLineOfst) : nFirstLineOfst);
462 889 : break;
463 :
464 : case MID_FIRST_LINE_REL_INDENT:
465 42 : rVal <<= (sal_Int16)(nPropFirstLineOfst);
466 42 : break;
467 :
468 : case MID_FIRST_AUTO:
469 52 : rVal = Bool2Any(IsAutoFirst());
470 52 : break;
471 :
472 : default:
473 0 : bRet = false;
474 : OSL_FAIL("unknown MemberId");
475 : }
476 3333 : return bRet;
477 : }
478 :
479 :
480 57302 : bool SvxLRSpaceItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
481 : {
482 57302 : bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
483 57302 : nMemberId &= ~CONVERT_TWIPS;
484 57302 : sal_Int32 nVal = 0;
485 57302 : if( nMemberId != MID_FIRST_AUTO &&
486 57014 : nMemberId != MID_L_REL_MARGIN && nMemberId != MID_R_REL_MARGIN)
487 57010 : if(!(rVal >>= nVal))
488 0 : return false;
489 :
490 57302 : switch( nMemberId )
491 : {
492 : case MID_L_MARGIN:
493 11772 : SetLeft( bConvert ? convertMm100ToTwip(nVal) : nVal );
494 11772 : break;
495 :
496 : case MID_TXT_LMARGIN :
497 15128 : SetTxtLeft( bConvert ? convertMm100ToTwip(nVal) : nVal );
498 15128 : break;
499 :
500 : case MID_R_MARGIN:
501 18380 : SetRight(bConvert ? convertMm100ToTwip(nVal) : nVal);
502 18380 : break;
503 : case MID_L_REL_MARGIN:
504 : case MID_R_REL_MARGIN:
505 : {
506 8 : sal_Int32 nRel = 0;
507 8 : if((rVal >>= nRel) && nRel >= 0 && nRel < USHRT_MAX)
508 : {
509 8 : if(MID_L_REL_MARGIN== nMemberId)
510 4 : nPropLeftMargin = (sal_uInt16)nRel;
511 : else
512 4 : nPropRightMargin = (sal_uInt16)nRel;
513 : }
514 : else
515 0 : return false;
516 : }
517 8 : break;
518 : case MID_FIRST_LINE_INDENT :
519 11730 : SetTxtFirstLineOfst((short)(bConvert ? convertMm100ToTwip(nVal) : nVal));
520 11730 : break;
521 :
522 : case MID_FIRST_LINE_REL_INDENT:
523 0 : SetPropTxtFirstLineOfst ( (sal_uInt16)nVal );
524 0 : break;
525 :
526 : case MID_FIRST_AUTO:
527 284 : SetAutoFirst( Any2Bool(rVal) );
528 284 : break;
529 :
530 : default:
531 : OSL_FAIL("unknown MemberId");
532 0 : return false;
533 : }
534 57302 : return true;
535 : }
536 :
537 :
538 :
539 : // Adapt nLeftMargin and nTxtLeft.
540 :
541 32460 : void SvxLRSpaceItem::AdjustLeft()
542 : {
543 32460 : if ( 0 > nFirstLineOfst )
544 10494 : nLeftMargin = nTxtLeft + nFirstLineOfst;
545 : else
546 21966 : nLeftMargin = nTxtLeft;
547 32460 : }
548 :
549 :
550 :
551 688036 : bool SvxLRSpaceItem::operator==( const SfxPoolItem& rAttr ) const
552 : {
553 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
554 :
555 688036 : const SvxLRSpaceItem& rOther = static_cast<const SvxLRSpaceItem&>(rAttr);
556 :
557 : return (
558 1159166 : nFirstLineOfst == rOther.GetTxtFirstLineOfst() &&
559 626350 : nTxtLeft == rOther.GetTxtLeft() &&
560 301606 : nLeftMargin == rOther.GetLeft() &&
561 257882 : nRightMargin == rOther.GetRight() &&
562 222992 : nPropFirstLineOfst == rOther.GetPropTxtFirstLineOfst() &&
563 222992 : nPropLeftMargin == rOther.GetPropLeft() &&
564 222980 : nPropRightMargin == rOther.GetPropRight() &&
565 222968 : bAutoFirst == rOther.IsAutoFirst() &&
566 895414 : bExplicitZeroMarginValRight == rOther.IsExplicitZeroMarginValRight() &&
567 783930 : bExplicitZeroMarginValLeft == rOther.IsExplicitZeroMarginValLeft() );
568 : }
569 :
570 :
571 :
572 117155 : SfxPoolItem* SvxLRSpaceItem::Clone( SfxItemPool* ) const
573 : {
574 117155 : return new SvxLRSpaceItem( *this );
575 : }
576 :
577 :
578 :
579 0 : bool SvxLRSpaceItem::GetPresentation
580 : (
581 : SfxItemPresentation ePres,
582 : SfxMapUnit eCoreUnit,
583 : SfxMapUnit ePresUnit,
584 : OUString& rText, const IntlWrapper* pIntl
585 : ) const
586 : {
587 0 : switch ( ePres )
588 : {
589 : case SFX_ITEM_PRESENTATION_NAMELESS:
590 : {
591 0 : if ( 100 != nPropLeftMargin )
592 : {
593 0 : rText = unicode::formatPercent(nPropLeftMargin,
594 0 : Application::GetSettings().GetUILanguageTag());
595 : }
596 : else
597 0 : rText = GetMetricText( (long)nLeftMargin,
598 0 : eCoreUnit, ePresUnit, pIntl );
599 0 : rText += OUString(cpDelim);
600 0 : if ( 100 != nPropFirstLineOfst )
601 : {
602 0 : rText += unicode::formatPercent(nPropFirstLineOfst,
603 0 : Application::GetSettings().GetUILanguageTag());
604 : }
605 : else
606 0 : rText += GetMetricText( (long)nFirstLineOfst,
607 0 : eCoreUnit, ePresUnit, pIntl );
608 0 : rText += OUString(cpDelim);
609 0 : if ( 100 != nRightMargin )
610 : {
611 0 : rText += unicode::formatPercent(nRightMargin,
612 0 : Application::GetSettings().GetUILanguageTag());
613 : }
614 : else
615 0 : rText += GetMetricText( (long)nRightMargin,
616 0 : eCoreUnit, ePresUnit, pIntl );
617 0 : return true;
618 : }
619 : case SFX_ITEM_PRESENTATION_COMPLETE:
620 : {
621 0 : rText = EE_RESSTR(RID_SVXITEMS_LRSPACE_LEFT);
622 0 : if ( 100 != nPropLeftMargin )
623 0 : rText += unicode::formatPercent(nPropLeftMargin,
624 0 : Application::GetSettings().GetUILanguageTag());
625 : else
626 : {
627 0 : rText = rText +
628 0 : GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl ) +
629 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
630 : }
631 0 : rText += OUString(cpDelim);
632 0 : if ( 100 != nPropFirstLineOfst || nFirstLineOfst )
633 : {
634 0 : rText += EE_RESSTR(RID_SVXITEMS_LRSPACE_FLINE);
635 0 : if ( 100 != nPropFirstLineOfst )
636 0 : rText = rText + unicode::formatPercent(nPropFirstLineOfst,
637 0 : Application::GetSettings().GetUILanguageTag());
638 : else
639 : {
640 0 : rText = rText +
641 : GetMetricText( (long)nFirstLineOfst,
642 0 : eCoreUnit, ePresUnit, pIntl ) +
643 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
644 : }
645 0 : rText += OUString(cpDelim);
646 : }
647 0 : rText += EE_RESSTR(RID_SVXITEMS_LRSPACE_RIGHT);
648 0 : if ( 100 != nPropRightMargin )
649 0 : rText = rText + unicode::formatPercent(nPropRightMargin,
650 0 : Application::GetSettings().GetUILanguageTag());
651 : else
652 : {
653 0 : rText = rText +
654 : GetMetricText( (long)nRightMargin,
655 0 : eCoreUnit, ePresUnit, pIntl ) +
656 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
657 : }
658 0 : return true;
659 : }
660 : default: ;//prevent warning
661 : }
662 0 : return false;
663 : }
664 :
665 :
666 :
667 : // BulletFI: Before 501 in the Outliner the bullet was not on the position of
668 : // the FI, so in older documents one must set FI to 0.
669 : #define BULLETLR_MARKER 0x599401FE
670 :
671 8 : SvStream& SvxLRSpaceItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const
672 : {
673 8 : short nSaveFI = nFirstLineOfst;
674 8 : ((SvxLRSpaceItem*)this)->SetTxtFirstLineOfst( 0 ); // nLeftMargin is manipulated together with this, see Create()
675 :
676 8 : sal_uInt16 nMargin = 0;
677 8 : if( nLeftMargin > 0 )
678 0 : nMargin = sal_uInt16( nLeftMargin );
679 8 : rStrm.WriteUInt16( nMargin );
680 8 : rStrm.WriteUInt16( nPropLeftMargin );
681 8 : if( nRightMargin > 0 )
682 0 : nMargin = sal_uInt16( nRightMargin );
683 : else
684 8 : nMargin = 0;
685 8 : rStrm.WriteUInt16( nMargin );
686 8 : rStrm.WriteUInt16( nPropRightMargin );
687 8 : rStrm.WriteInt16( nFirstLineOfst );
688 8 : rStrm.WriteUInt16( nPropFirstLineOfst );
689 8 : if( nTxtLeft > 0 )
690 0 : nMargin = sal_uInt16( nTxtLeft );
691 : else
692 8 : nMargin = 0;
693 8 : rStrm.WriteUInt16( nMargin );
694 8 : if( nItemVersion >= LRSPACE_AUTOFIRST_VERSION )
695 : {
696 8 : sal_Int8 nAutoFirst = bAutoFirst ? 1 : 0;
697 16 : if( nItemVersion >= LRSPACE_NEGATIVE_VERSION &&
698 16 : ( nLeftMargin < 0 || nRightMargin < 0 || nTxtLeft < 0 ) )
699 0 : nAutoFirst |= 0x80;
700 8 : rStrm.WriteSChar( nAutoFirst );
701 :
702 : // From 6.0 onwards, do not write Magic numbers...
703 : DBG_ASSERT( rStrm.GetVersion() <= SOFFICE_FILEFORMAT_50, "Change File format SvxLRSpaceItem!" );
704 8 : rStrm.WriteUInt32( BULLETLR_MARKER );
705 8 : rStrm.WriteInt16( nSaveFI );
706 :
707 8 : if( 0x80 & nAutoFirst )
708 : {
709 0 : rStrm.WriteInt32( nLeftMargin );
710 0 : rStrm.WriteInt32( nRightMargin );
711 : }
712 : }
713 :
714 8 : ((SvxLRSpaceItem*)this)->SetTxtFirstLineOfst( nSaveFI );
715 :
716 8 : return rStrm;
717 : }
718 :
719 :
720 :
721 0 : SfxPoolItem* SvxLRSpaceItem::Create( SvStream& rStrm, sal_uInt16 nVersion ) const
722 : {
723 : sal_uInt16 left, prpleft, right, prpright, prpfirstline, txtleft;
724 : short firstline;
725 0 : sal_Int8 autofirst = 0;
726 :
727 0 : if ( nVersion >= LRSPACE_AUTOFIRST_VERSION )
728 : {
729 0 : rStrm.ReadUInt16( left ).ReadUInt16( prpleft ).ReadUInt16( right ).ReadUInt16( prpright ).ReadInt16( firstline ). ReadUInt16( prpfirstline ).ReadUInt16( txtleft ).ReadSChar( autofirst );
730 :
731 0 : sal_Size nPos = rStrm.Tell();
732 : sal_uInt32 nMarker;
733 0 : rStrm.ReadUInt32( nMarker );
734 0 : if ( nMarker == BULLETLR_MARKER )
735 : {
736 0 : rStrm.ReadInt16( firstline );
737 0 : if ( firstline < 0 )
738 0 : left = left + static_cast<sal_uInt16>(firstline); // see below: txtleft = ...
739 : }
740 : else
741 0 : rStrm.Seek( nPos );
742 : }
743 0 : else if ( nVersion == LRSPACE_TXTLEFT_VERSION )
744 : {
745 0 : rStrm.ReadUInt16( left ).ReadUInt16( prpleft ).ReadUInt16( right ).ReadUInt16( prpright ).ReadInt16( firstline ). ReadUInt16( prpfirstline ).ReadUInt16( txtleft );
746 : }
747 0 : else if ( nVersion == LRSPACE_16_VERSION )
748 : {
749 0 : rStrm.ReadUInt16( left ).ReadUInt16( prpleft ).ReadUInt16( right ).ReadUInt16( prpright ).ReadInt16( firstline ). ReadUInt16( prpfirstline );
750 : }
751 : else
752 : {
753 : sal_Int8 nL, nR, nFL;
754 0 : rStrm.ReadUInt16( left ).ReadSChar( nL ).ReadUInt16( right ).ReadSChar( nR ).ReadInt16( firstline ).ReadSChar( nFL );
755 0 : prpleft = (sal_uInt16)nL;
756 0 : prpright = (sal_uInt16)nR;
757 0 : prpfirstline = (sal_uInt16)nFL;
758 : }
759 :
760 0 : txtleft = firstline >= 0 ? left : left - firstline;
761 0 : SvxLRSpaceItem* pAttr = new SvxLRSpaceItem( Which() );
762 :
763 0 : pAttr->nLeftMargin = left;
764 0 : pAttr->nPropLeftMargin = prpleft;
765 0 : pAttr->nRightMargin = right;
766 0 : pAttr->nPropRightMargin = prpright;
767 0 : pAttr->nFirstLineOfst = firstline;
768 0 : pAttr->nPropFirstLineOfst = prpfirstline;
769 0 : pAttr->nTxtLeft = txtleft;
770 0 : pAttr->bAutoFirst = autofirst & 0x01;
771 0 : if( nVersion >= LRSPACE_NEGATIVE_VERSION && ( autofirst & 0x80 ) )
772 : {
773 : sal_Int32 nMargin;
774 0 : rStrm.ReadInt32( nMargin );
775 0 : pAttr->nLeftMargin = nMargin;
776 0 : pAttr->nTxtLeft = firstline >= 0 ? nMargin : nMargin - firstline;
777 0 : rStrm.ReadInt32( nMargin );
778 0 : pAttr->nRightMargin = nMargin;
779 : }
780 0 : return pAttr;
781 : }
782 :
783 :
784 :
785 42824 : sal_uInt16 SvxLRSpaceItem::GetVersion( sal_uInt16 nFileVersion ) const
786 : {
787 : return (nFileVersion == SOFFICE_FILEFORMAT_31)
788 : ? LRSPACE_TXTLEFT_VERSION
789 42824 : : LRSPACE_NEGATIVE_VERSION;
790 : }
791 :
792 :
793 :
794 0 : bool SvxLRSpaceItem::ScaleMetrics( long nMult, long nDiv )
795 : {
796 0 : nFirstLineOfst = (short)Scale( nFirstLineOfst, nMult, nDiv );
797 0 : nTxtLeft = Scale( nTxtLeft, nMult, nDiv );
798 0 : nLeftMargin = Scale( nLeftMargin, nMult, nDiv );
799 0 : nRightMargin = Scale( nRightMargin, nMult, nDiv );
800 0 : return true;
801 : }
802 :
803 :
804 :
805 0 : bool SvxLRSpaceItem::HasMetrics() const
806 : {
807 0 : return true;
808 : }
809 :
810 : // class SvxULSpaceItem --------------------------------------------------
811 :
812 33914 : SvxULSpaceItem::SvxULSpaceItem( const sal_uInt16 nId )
813 : : SfxPoolItem(nId)
814 : , nUpper(0)
815 : , nLower(0)
816 : , bContext(false)
817 : , nPropUpper(100)
818 33914 : , nPropLower(100)
819 : {
820 33914 : }
821 :
822 :
823 :
824 19466 : SvxULSpaceItem::SvxULSpaceItem( const sal_uInt16 nUp, const sal_uInt16 nLow,
825 : const sal_uInt16 nId )
826 : : SfxPoolItem(nId)
827 : , nUpper(nUp)
828 : , nLower(nLow)
829 : , bContext(false)
830 : , nPropUpper(100)
831 19466 : , nPropLower(100)
832 : {
833 19466 : }
834 :
835 :
836 3872 : bool SvxULSpaceItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
837 : {
838 3872 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
839 3872 : nMemberId &= ~CONVERT_TWIPS;
840 3872 : switch( nMemberId )
841 : {
842 : // now all signed
843 : case 0:
844 : {
845 0 : ::com::sun::star::frame::status::UpperLowerMarginScale aUpperLowerMarginScale;
846 0 : aUpperLowerMarginScale.Upper = (sal_Int32)(bConvert ? convertTwipToMm100(nUpper) : nUpper);
847 0 : aUpperLowerMarginScale.Lower = (sal_Int32)(bConvert ? convertTwipToMm100(nLower) : nPropUpper);
848 0 : aUpperLowerMarginScale.ScaleUpper = (sal_Int16)nPropUpper;
849 0 : aUpperLowerMarginScale.ScaleLower = (sal_Int16)nPropLower;
850 0 : rVal <<= aUpperLowerMarginScale;
851 0 : break;
852 : }
853 1572 : case MID_UP_MARGIN: rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nUpper) : nUpper); break;
854 1612 : case MID_LO_MARGIN: rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nLower) : nLower); break;
855 244 : case MID_CTX_MARGIN: rVal <<= bContext; break;
856 222 : case MID_UP_REL_MARGIN: rVal <<= (sal_Int16) nPropUpper; break;
857 222 : case MID_LO_REL_MARGIN: rVal <<= (sal_Int16) nPropLower; break;
858 : }
859 3872 : return true;
860 : }
861 :
862 :
863 95430 : bool SvxULSpaceItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
864 : {
865 95430 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
866 95430 : nMemberId &= ~CONVERT_TWIPS;
867 95430 : sal_Int32 nVal = 0;
868 95430 : bool bVal = false;
869 95430 : switch( nMemberId )
870 : {
871 : case 0:
872 : {
873 0 : ::com::sun::star::frame::status::UpperLowerMarginScale aUpperLowerMarginScale;
874 0 : if ( !(rVal >>= aUpperLowerMarginScale ))
875 0 : return false;
876 : {
877 0 : SetUpper((sal_uInt16)(bConvert ? convertMm100ToTwip( aUpperLowerMarginScale.Upper ) : aUpperLowerMarginScale.Upper));
878 0 : SetLower((sal_uInt16)(bConvert ? convertMm100ToTwip( aUpperLowerMarginScale.Lower ) : aUpperLowerMarginScale.Lower));
879 0 : if( aUpperLowerMarginScale.ScaleUpper > 1 )
880 0 : nPropUpper = aUpperLowerMarginScale.ScaleUpper;
881 0 : if( aUpperLowerMarginScale.ScaleLower > 1 )
882 0 : nPropUpper = aUpperLowerMarginScale.ScaleLower;
883 : }
884 : }
885 0 : break;
886 : case MID_UP_MARGIN :
887 37966 : if(!(rVal >>= nVal) || nVal < 0)
888 0 : return false;
889 37966 : SetUpper((sal_uInt16)(bConvert ? convertMm100ToTwip(nVal) : nVal));
890 37966 : break;
891 : case MID_LO_MARGIN :
892 54248 : if(!(rVal >>= nVal) || nVal < 0)
893 0 : return false;
894 54248 : SetLower((sal_uInt16)(bConvert ? convertMm100ToTwip(nVal) : nVal));
895 54248 : break;
896 : case MID_CTX_MARGIN :
897 3208 : if (!(rVal >>= bVal))
898 0 : return false;
899 3208 : SetContextValue(bVal);
900 3208 : break;
901 : case MID_UP_REL_MARGIN:
902 : case MID_LO_REL_MARGIN:
903 : {
904 8 : sal_Int32 nRel = 0;
905 8 : if((rVal >>= nRel) && nRel > 1 )
906 : {
907 8 : if(MID_UP_REL_MARGIN == nMemberId)
908 4 : nPropUpper = (sal_uInt16)nRel;
909 : else
910 4 : nPropLower = (sal_uInt16)nRel;
911 : }
912 : else
913 0 : return false;
914 : }
915 8 : break;
916 :
917 : default:
918 : OSL_FAIL("unknown MemberId");
919 0 : return false;
920 : }
921 95430 : return true;
922 : }
923 :
924 :
925 :
926 1060446 : bool SvxULSpaceItem::operator==( const SfxPoolItem& rAttr ) const
927 : {
928 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
929 :
930 1060446 : const SvxULSpaceItem& rSpaceItem = static_cast<const SvxULSpaceItem&>( rAttr );
931 1388698 : return ( nUpper == rSpaceItem.nUpper &&
932 476590 : nLower == rSpaceItem.nLower &&
933 289622 : bContext == rSpaceItem.bContext &&
934 1343014 : nPropUpper == rSpaceItem.nPropUpper &&
935 1201730 : nPropLower == rSpaceItem.nPropLower );
936 : }
937 :
938 :
939 :
940 187084 : SfxPoolItem* SvxULSpaceItem::Clone( SfxItemPool* ) const
941 : {
942 187084 : return new SvxULSpaceItem( *this );
943 : }
944 :
945 :
946 :
947 0 : bool SvxULSpaceItem::GetPresentation
948 : (
949 : SfxItemPresentation ePres,
950 : SfxMapUnit eCoreUnit,
951 : SfxMapUnit ePresUnit,
952 : OUString& rText,
953 : const IntlWrapper *pIntl
954 : ) const
955 : {
956 0 : switch ( ePres )
957 : {
958 : case SFX_ITEM_PRESENTATION_NAMELESS:
959 : {
960 0 : if ( 100 != nPropUpper )
961 : {
962 0 : rText = unicode::formatPercent(nPropUpper,
963 0 : Application::GetSettings().GetUILanguageTag());
964 : }
965 : else
966 0 : rText = GetMetricText( (long)nUpper, eCoreUnit, ePresUnit, pIntl );
967 0 : rText += OUString(cpDelim);
968 0 : if ( 100 != nPropLower )
969 : {
970 0 : rText += unicode::formatPercent(nPropLower,
971 0 : Application::GetSettings().GetUILanguageTag());
972 : }
973 : else
974 0 : rText += GetMetricText( (long)nLower, eCoreUnit, ePresUnit, pIntl );
975 0 : return true;
976 : }
977 : case SFX_ITEM_PRESENTATION_COMPLETE:
978 : {
979 0 : rText = EE_RESSTR(RID_SVXITEMS_ULSPACE_UPPER);
980 0 : if ( 100 != nPropUpper )
981 : {
982 0 : rText += unicode::formatPercent(nPropUpper,
983 0 : Application::GetSettings().GetUILanguageTag());
984 : }
985 : else
986 : {
987 0 : rText = rText +
988 0 : GetMetricText( (long)nUpper, eCoreUnit, ePresUnit, pIntl ) +
989 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
990 : }
991 0 : rText = rText + OUString(cpDelim) + EE_RESSTR(RID_SVXITEMS_ULSPACE_LOWER);
992 0 : if ( 100 != nPropLower )
993 : {
994 0 : rText += unicode::formatPercent(nPropLower,
995 0 : Application::GetSettings().GetUILanguageTag());
996 : }
997 : else
998 : {
999 0 : rText = rText +
1000 0 : GetMetricText( (long)nLower, eCoreUnit, ePresUnit, pIntl ) +
1001 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
1002 : }
1003 0 : return true;
1004 : }
1005 : default: ;//prevent warning
1006 : }
1007 0 : return false;
1008 : }
1009 :
1010 :
1011 :
1012 8 : SvStream& SvxULSpaceItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
1013 : {
1014 8 : rStrm.WriteUInt16( GetUpper() )
1015 16 : .WriteUInt16( GetPropUpper() )
1016 16 : .WriteUInt16( GetLower() )
1017 16 : .WriteUInt16( GetPropLower() );
1018 8 : return rStrm;
1019 : }
1020 :
1021 :
1022 :
1023 0 : SfxPoolItem* SvxULSpaceItem::Create( SvStream& rStrm, sal_uInt16 nVersion ) const
1024 : {
1025 0 : sal_uInt16 upper, lower, nPL = 0, nPU = 0;
1026 :
1027 0 : if ( nVersion == ULSPACE_16_VERSION )
1028 0 : rStrm.ReadUInt16( upper ).ReadUInt16( nPU ).ReadUInt16( lower ).ReadUInt16( nPL );
1029 : else
1030 : {
1031 : sal_Int8 nU, nL;
1032 0 : rStrm.ReadUInt16( upper ).ReadSChar( nU ).ReadUInt16( lower ).ReadSChar( nL );
1033 0 : nPL = (sal_uInt16)nL;
1034 0 : nPU = (sal_uInt16)nU;
1035 : }
1036 :
1037 0 : SvxULSpaceItem* pAttr = new SvxULSpaceItem( Which() );
1038 0 : pAttr->SetUpperValue( upper );
1039 0 : pAttr->SetLowerValue( lower );
1040 0 : pAttr->SetPropUpper( nPU );
1041 0 : pAttr->SetPropLower( nPL );
1042 0 : return pAttr;
1043 : }
1044 :
1045 :
1046 :
1047 21416 : sal_uInt16 SvxULSpaceItem::GetVersion( sal_uInt16 /*nFileVersion*/ ) const
1048 : {
1049 21416 : return ULSPACE_16_VERSION;
1050 : }
1051 :
1052 :
1053 :
1054 0 : bool SvxULSpaceItem::ScaleMetrics( long nMult, long nDiv )
1055 : {
1056 0 : nUpper = (sal_uInt16)Scale( nUpper, nMult, nDiv );
1057 0 : nLower = (sal_uInt16)Scale( nLower, nMult, nDiv );
1058 0 : return true;
1059 : }
1060 :
1061 :
1062 :
1063 0 : bool SvxULSpaceItem::HasMetrics() const
1064 : {
1065 0 : return true;
1066 : }
1067 :
1068 : // class SvxPrintItem ----------------------------------------------------
1069 :
1070 2 : SfxPoolItem* SvxPrintItem::Clone( SfxItemPool* ) const
1071 : {
1072 2 : return new SvxPrintItem( *this );
1073 : }
1074 :
1075 :
1076 :
1077 0 : SvStream& SvxPrintItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
1078 : {
1079 0 : rStrm.WriteSChar( (sal_Int8)GetValue() );
1080 0 : return rStrm;
1081 : }
1082 :
1083 :
1084 :
1085 0 : SfxPoolItem* SvxPrintItem::Create( SvStream& rStrm, sal_uInt16 ) const
1086 : {
1087 : sal_Int8 bIsPrint;
1088 0 : rStrm.ReadSChar( bIsPrint );
1089 0 : return new SvxPrintItem( Which(), bIsPrint != 0 );
1090 : }
1091 :
1092 :
1093 :
1094 0 : bool SvxPrintItem::GetPresentation
1095 : (
1096 : SfxItemPresentation /*ePres*/,
1097 : SfxMapUnit /*eCoreUnit*/,
1098 : SfxMapUnit /*ePresUnit*/,
1099 : OUString& rText, const IntlWrapper *
1100 : ) const
1101 : {
1102 0 : sal_uInt16 nId = RID_SVXITEMS_PRINT_FALSE;
1103 :
1104 0 : if ( GetValue() )
1105 0 : nId = RID_SVXITEMS_PRINT_TRUE;
1106 0 : rText = EE_RESSTR(nId);
1107 0 : return true;
1108 : }
1109 :
1110 : // class SvxOpaqueItem ---------------------------------------------------
1111 :
1112 382 : SfxPoolItem* SvxOpaqueItem::Clone( SfxItemPool* ) const
1113 : {
1114 382 : return new SvxOpaqueItem( *this );
1115 : }
1116 :
1117 :
1118 :
1119 0 : SvStream& SvxOpaqueItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
1120 : {
1121 0 : rStrm.WriteSChar( (sal_Int8)GetValue() );
1122 0 : return rStrm;
1123 : }
1124 :
1125 :
1126 :
1127 0 : SfxPoolItem* SvxOpaqueItem::Create( SvStream& rStrm, sal_uInt16 ) const
1128 : {
1129 : sal_Int8 bIsOpaque;
1130 0 : rStrm.ReadSChar( bIsOpaque );
1131 0 : return new SvxOpaqueItem( Which(), bIsOpaque != 0 );
1132 : }
1133 :
1134 :
1135 :
1136 0 : bool SvxOpaqueItem::GetPresentation
1137 : (
1138 : SfxItemPresentation /*ePres*/,
1139 : SfxMapUnit /*eCoreUnit*/,
1140 : SfxMapUnit /*ePresUnit*/,
1141 : OUString& rText, const IntlWrapper *
1142 : ) const
1143 : {
1144 0 : sal_uInt16 nId = RID_SVXITEMS_OPAQUE_FALSE;
1145 :
1146 0 : if ( GetValue() )
1147 0 : nId = RID_SVXITEMS_OPAQUE_TRUE;
1148 0 : rText = EE_RESSTR(nId);
1149 0 : return true;
1150 : }
1151 :
1152 : // class SvxProtectItem --------------------------------------------------
1153 :
1154 1430 : bool SvxProtectItem::operator==( const SfxPoolItem& rAttr ) const
1155 : {
1156 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
1157 :
1158 1430 : const SvxProtectItem& rItem = static_cast<const SvxProtectItem&>(rAttr);
1159 2112 : return ( bCntnt == rItem.bCntnt &&
1160 2020 : bSize == rItem.bSize &&
1161 2020 : bPos == rItem.bPos );
1162 : }
1163 :
1164 154 : bool SvxProtectItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1165 : {
1166 154 : nMemberId &= ~CONVERT_TWIPS;
1167 : bool bValue;
1168 154 : switch(nMemberId)
1169 : {
1170 66 : case MID_PROTECT_CONTENT : bValue = bCntnt; break;
1171 44 : case MID_PROTECT_SIZE : bValue = bSize; break;
1172 44 : case MID_PROTECT_POSITION: bValue = bPos; break;
1173 : default:
1174 : OSL_FAIL("Wrong MemberId");
1175 0 : return false;
1176 : }
1177 :
1178 154 : rVal = Bool2Any( bValue );
1179 154 : return true;
1180 : }
1181 :
1182 144 : bool SvxProtectItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1183 : {
1184 144 : nMemberId &= ~CONVERT_TWIPS;
1185 144 : bool bVal( Any2Bool(rVal) );
1186 144 : switch(nMemberId)
1187 : {
1188 52 : case MID_PROTECT_CONTENT : bCntnt = bVal; break;
1189 46 : case MID_PROTECT_SIZE : bSize = bVal; break;
1190 46 : case MID_PROTECT_POSITION: bPos = bVal; break;
1191 : default:
1192 : OSL_FAIL("Wrong MemberId");
1193 0 : return false;
1194 : }
1195 144 : return true;
1196 : }
1197 :
1198 :
1199 :
1200 1193 : SfxPoolItem* SvxProtectItem::Clone( SfxItemPool* ) const
1201 : {
1202 1193 : return new SvxProtectItem( *this );
1203 : }
1204 :
1205 :
1206 :
1207 0 : bool SvxProtectItem::GetPresentation
1208 : (
1209 : SfxItemPresentation /*ePres*/,
1210 : SfxMapUnit /*eCoreUnit*/,
1211 : SfxMapUnit /*ePresUnit*/,
1212 : OUString& rText, const IntlWrapper *
1213 : ) const
1214 : {
1215 0 : sal_uInt16 nId = RID_SVXITEMS_PROT_CONTENT_FALSE;
1216 :
1217 0 : if ( bCntnt )
1218 0 : nId = RID_SVXITEMS_PROT_CONTENT_TRUE;
1219 0 : rText = EE_RESSTR(nId) + OUString(cpDelim);
1220 0 : nId = RID_SVXITEMS_PROT_SIZE_FALSE;
1221 :
1222 0 : if ( bSize )
1223 0 : nId = RID_SVXITEMS_PROT_SIZE_TRUE;
1224 0 : rText = rText + EE_RESSTR(nId) + OUString(cpDelim);
1225 0 : nId = RID_SVXITEMS_PROT_POS_FALSE;
1226 :
1227 0 : if ( bPos )
1228 0 : nId = RID_SVXITEMS_PROT_POS_TRUE;
1229 0 : rText += EE_RESSTR(nId);
1230 0 : return true;
1231 : }
1232 :
1233 :
1234 :
1235 0 : SvStream& SvxProtectItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
1236 : {
1237 0 : sal_Int8 cProt = 0;
1238 0 : if( IsPosProtected() ) cProt |= 0x01;
1239 0 : if( IsSizeProtected() ) cProt |= 0x02;
1240 0 : if( IsCntntProtected() ) cProt |= 0x04;
1241 0 : rStrm.WriteSChar( cProt );
1242 0 : return rStrm;
1243 : }
1244 :
1245 :
1246 :
1247 0 : SfxPoolItem* SvxProtectItem::Create( SvStream& rStrm, sal_uInt16 ) const
1248 : {
1249 : sal_Int8 cFlags;
1250 0 : rStrm.ReadSChar( cFlags );
1251 0 : SvxProtectItem* pAttr = new SvxProtectItem( Which() );
1252 0 : pAttr->SetPosProtect( ( cFlags & 0x01 ) != 0 );
1253 0 : pAttr->SetSizeProtect( ( cFlags & 0x02 ) != 0 );
1254 0 : pAttr->SetCntntProtect( ( cFlags & 0x04 ) != 0 );
1255 0 : return pAttr;
1256 : }
1257 :
1258 : // class SvxShadowItem ---------------------------------------------------
1259 :
1260 47187 : SvxShadowItem::SvxShadowItem( const sal_uInt16 nId,
1261 : const Color *pColor, const sal_uInt16 nW,
1262 : const SvxShadowLocation eLoc ) :
1263 : SfxEnumItemInterface( nId ),
1264 : aShadowColor(COL_GRAY),
1265 : nWidth ( nW ),
1266 47187 : eLocation ( eLoc )
1267 : {
1268 47187 : if ( pColor )
1269 44479 : aShadowColor = *pColor;
1270 47187 : }
1271 :
1272 :
1273 688 : bool SvxShadowItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1274 : {
1275 688 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
1276 688 : nMemberId &= ~CONVERT_TWIPS;
1277 :
1278 688 : table::ShadowFormat aShadow;
1279 688 : table::ShadowLocation eSet = table::ShadowLocation_NONE;
1280 688 : switch( eLocation )
1281 : {
1282 0 : case SVX_SHADOW_TOPLEFT : eSet = table::ShadowLocation_TOP_LEFT ; break;
1283 8 : case SVX_SHADOW_TOPRIGHT : eSet = table::ShadowLocation_TOP_RIGHT ; break;
1284 6 : case SVX_SHADOW_BOTTOMLEFT : eSet = table::ShadowLocation_BOTTOM_LEFT ; break;
1285 68 : case SVX_SHADOW_BOTTOMRIGHT: eSet = table::ShadowLocation_BOTTOM_RIGHT; break;
1286 : default: ;//prevent warning
1287 : }
1288 688 : aShadow.Location = eSet;
1289 688 : aShadow.ShadowWidth = bConvert ? convertTwipToMm100(nWidth) : nWidth;
1290 688 : aShadow.IsTransparent = aShadowColor.GetTransparency() > 0;
1291 688 : aShadow.Color = aShadowColor.GetColor();
1292 :
1293 688 : sal_Int8 nTransparence = rtl::math::round(float(aShadowColor.GetTransparency() * 100) / 255);
1294 :
1295 688 : switch ( nMemberId )
1296 : {
1297 0 : case MID_LOCATION: rVal <<= aShadow.Location; break;
1298 0 : case MID_WIDTH: rVal <<= aShadow.ShadowWidth; break;
1299 0 : case MID_TRANSPARENT: rVal <<= aShadow.IsTransparent; break;
1300 0 : case MID_BG_COLOR: rVal <<= aShadow.Color; break;
1301 612 : case 0: rVal <<= aShadow; break;
1302 76 : case MID_SHADOW_TRANSPARENCE: rVal <<= nTransparence; break;
1303 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
1304 : }
1305 :
1306 688 : return true;
1307 : }
1308 :
1309 354 : bool SvxShadowItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1310 : {
1311 354 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
1312 354 : nMemberId &= ~CONVERT_TWIPS;
1313 :
1314 354 : table::ShadowFormat aShadow;
1315 354 : uno::Any aAny;
1316 354 : bool bRet = QueryValue( aAny, bConvert ? CONVERT_TWIPS : 0 ) && ( aAny >>= aShadow );
1317 354 : switch ( nMemberId )
1318 : {
1319 : case MID_LOCATION:
1320 : {
1321 0 : bRet = (rVal >>= aShadow.Location);
1322 0 : if ( !bRet )
1323 : {
1324 0 : sal_Int16 nVal = 0;
1325 0 : bRet = (rVal >>= nVal);
1326 0 : aShadow.Location = (table::ShadowLocation) nVal;
1327 : }
1328 :
1329 0 : break;
1330 : }
1331 :
1332 0 : case MID_WIDTH: rVal >>= aShadow.ShadowWidth; break;
1333 0 : case MID_TRANSPARENT: rVal >>= aShadow.IsTransparent; break;
1334 0 : case MID_BG_COLOR: rVal >>= aShadow.Color; break;
1335 328 : case 0: rVal >>= aShadow; break;
1336 : case MID_SHADOW_TRANSPARENCE:
1337 : {
1338 26 : sal_Int32 nTransparence = 0;
1339 26 : if (rVal >>= nTransparence)
1340 : {
1341 26 : Color aColor(aShadow.Color);
1342 26 : aColor.SetTransparency(rtl::math::round(float(nTransparence * 255) / 100));
1343 26 : aShadow.Color = aColor.GetColor();
1344 : }
1345 26 : break;
1346 : }
1347 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
1348 : }
1349 :
1350 354 : if ( bRet )
1351 : {
1352 : // SvxShadowLocation eSet = SVX_SHADOW_NONE;
1353 354 : switch( aShadow.Location )
1354 : {
1355 6 : case table::ShadowLocation_TOP_LEFT : eLocation = SVX_SHADOW_TOPLEFT; break;
1356 20 : case table::ShadowLocation_TOP_RIGHT : eLocation = SVX_SHADOW_TOPRIGHT; break;
1357 10 : case table::ShadowLocation_BOTTOM_LEFT : eLocation = SVX_SHADOW_BOTTOMLEFT ; break;
1358 132 : case table::ShadowLocation_BOTTOM_RIGHT: eLocation = SVX_SHADOW_BOTTOMRIGHT; break;
1359 : default: ;//prevent warning
1360 : }
1361 :
1362 354 : nWidth = bConvert ? convertMm100ToTwip(aShadow.ShadowWidth) : aShadow.ShadowWidth;
1363 354 : Color aSet(aShadow.Color);
1364 354 : aShadowColor = aSet;
1365 : }
1366 :
1367 354 : return bRet;
1368 : }
1369 :
1370 :
1371 :
1372 159740 : bool SvxShadowItem::operator==( const SfxPoolItem& rAttr ) const
1373 : {
1374 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
1375 :
1376 159740 : const SvxShadowItem& rItem = static_cast<const SvxShadowItem&>(rAttr);
1377 319260 : return ( ( aShadowColor == rItem.aShadowColor ) &&
1378 319260 : ( nWidth == rItem.GetWidth() ) &&
1379 319260 : ( eLocation == rItem.GetLocation() ) );
1380 : }
1381 :
1382 :
1383 :
1384 730 : SfxPoolItem* SvxShadowItem::Clone( SfxItemPool* ) const
1385 : {
1386 730 : return new SvxShadowItem( *this );
1387 : }
1388 :
1389 :
1390 :
1391 205444 : sal_uInt16 SvxShadowItem::CalcShadowSpace( sal_uInt16 nShadow ) const
1392 : {
1393 205444 : sal_uInt16 nSpace = 0;
1394 :
1395 205444 : switch ( nShadow )
1396 : {
1397 : case SHADOW_TOP:
1398 148276 : if ( eLocation == SVX_SHADOW_TOPLEFT ||
1399 74138 : eLocation == SVX_SHADOW_TOPRIGHT )
1400 0 : nSpace = nWidth;
1401 74138 : break;
1402 :
1403 : case SHADOW_BOTTOM:
1404 148272 : if ( eLocation == SVX_SHADOW_BOTTOMLEFT ||
1405 74136 : eLocation == SVX_SHADOW_BOTTOMRIGHT )
1406 106 : nSpace = nWidth;
1407 74136 : break;
1408 :
1409 : case SHADOW_LEFT:
1410 57170 : if ( eLocation == SVX_SHADOW_TOPLEFT ||
1411 28585 : eLocation == SVX_SHADOW_BOTTOMLEFT )
1412 0 : nSpace = nWidth;
1413 28585 : break;
1414 :
1415 : case SHADOW_RIGHT:
1416 57170 : if ( eLocation == SVX_SHADOW_TOPRIGHT ||
1417 28585 : eLocation == SVX_SHADOW_BOTTOMRIGHT )
1418 100 : nSpace = nWidth;
1419 28585 : break;
1420 :
1421 : default:
1422 : OSL_FAIL( "wrong shadow" );
1423 : }
1424 205444 : return nSpace;
1425 : }
1426 :
1427 :
1428 :
1429 0 : bool SvxShadowItem::GetPresentation
1430 : (
1431 : SfxItemPresentation ePres,
1432 : SfxMapUnit eCoreUnit,
1433 : SfxMapUnit ePresUnit,
1434 : OUString& rText, const IntlWrapper *pIntl
1435 : ) const
1436 : {
1437 0 : switch ( ePres )
1438 : {
1439 : case SFX_ITEM_PRESENTATION_NAMELESS:
1440 : {
1441 0 : rText = ::GetColorString( aShadowColor ) + OUString(cpDelim);
1442 0 : sal_uInt16 nId = RID_SVXITEMS_TRANSPARENT_FALSE;
1443 :
1444 0 : if ( aShadowColor.GetTransparency() )
1445 0 : nId = RID_SVXITEMS_TRANSPARENT_TRUE;
1446 0 : rText = rText +
1447 0 : EE_RESSTR(nId) +
1448 0 : OUString(cpDelim) +
1449 0 : GetMetricText( (long)nWidth, eCoreUnit, ePresUnit, pIntl ) +
1450 0 : OUString(cpDelim) +
1451 0 : EE_RESSTR(RID_SVXITEMS_SHADOW_BEGIN + eLocation);
1452 0 : return true;
1453 : }
1454 : case SFX_ITEM_PRESENTATION_COMPLETE:
1455 : {
1456 0 : rText = EE_RESSTR(RID_SVXITEMS_SHADOW_COMPLETE) +
1457 0 : ::GetColorString( aShadowColor ) +
1458 0 : OUString(cpDelim);
1459 :
1460 0 : sal_uInt16 nId = RID_SVXITEMS_TRANSPARENT_FALSE;
1461 0 : if ( aShadowColor.GetTransparency() )
1462 0 : nId = RID_SVXITEMS_TRANSPARENT_TRUE;
1463 0 : rText = rText +
1464 0 : EE_RESSTR(nId) +
1465 0 : OUString(cpDelim) +
1466 0 : GetMetricText( (long)nWidth, eCoreUnit, ePresUnit, pIntl ) +
1467 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
1468 0 : OUString(cpDelim) +
1469 0 : EE_RESSTR(RID_SVXITEMS_SHADOW_BEGIN + eLocation);
1470 0 : return true;
1471 : }
1472 : default: ;//prevent warning
1473 : }
1474 0 : return false;
1475 : }
1476 :
1477 :
1478 :
1479 0 : SvStream& SvxShadowItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
1480 : {
1481 0 : rStrm.WriteSChar( GetLocation() )
1482 0 : .WriteUInt16( GetWidth() )
1483 0 : .WriteUChar( (aShadowColor.GetTransparency() > 0) );
1484 0 : WriteColor( rStrm, GetColor() );
1485 0 : WriteColor( rStrm, GetColor() );
1486 0 : rStrm.WriteSChar( (aShadowColor.GetTransparency() > 0 ? 0 : 1) ); //BRUSH_NULL : BRUSH_SOLID
1487 0 : return rStrm;
1488 : }
1489 :
1490 :
1491 :
1492 0 : bool SvxShadowItem::ScaleMetrics( long nMult, long nDiv )
1493 : {
1494 0 : nWidth = (sal_uInt16)Scale( nWidth, nMult, nDiv );
1495 0 : return true;
1496 : }
1497 :
1498 :
1499 :
1500 0 : bool SvxShadowItem::HasMetrics() const
1501 : {
1502 0 : return true;
1503 : }
1504 :
1505 :
1506 :
1507 0 : SfxPoolItem* SvxShadowItem::Create( SvStream& rStrm, sal_uInt16 ) const
1508 : {
1509 : sal_Int8 cLoc;
1510 : sal_uInt16 _nWidth;
1511 : bool bTrans;
1512 0 : Color aColor;
1513 0 : Color aFillColor;
1514 : sal_Int8 nStyle;
1515 0 : rStrm.ReadSChar( cLoc ).ReadUInt16( _nWidth )
1516 0 : .ReadCharAsBool( bTrans );
1517 0 : ReadColor( rStrm, aColor );
1518 0 : ReadColor( rStrm, aFillColor ).ReadSChar( nStyle );
1519 0 : aColor.SetTransparency(bTrans ? 0xff : 0);
1520 0 : return new SvxShadowItem( Which(), &aColor, _nWidth, (SvxShadowLocation)cLoc );
1521 : }
1522 :
1523 :
1524 :
1525 0 : sal_uInt16 SvxShadowItem::GetValueCount() const
1526 : {
1527 0 : return SVX_SHADOW_END; // SVX_SHADOW_BOTTOMRIGHT + 1
1528 : }
1529 :
1530 :
1531 :
1532 0 : OUString SvxShadowItem::GetValueTextByPos( sal_uInt16 nPos ) const
1533 : {
1534 : DBG_ASSERT( nPos < SVX_SHADOW_END, "enum overflow!" );
1535 0 : return EE_RESSTR(RID_SVXITEMS_SHADOW_BEGIN + nPos );
1536 : }
1537 :
1538 :
1539 :
1540 0 : sal_uInt16 SvxShadowItem::GetEnumValue() const
1541 : {
1542 0 : return (sal_uInt16)GetLocation();
1543 : }
1544 :
1545 :
1546 :
1547 0 : void SvxShadowItem::SetEnumValue( sal_uInt16 nVal )
1548 : {
1549 0 : SetLocation( (const SvxShadowLocation)nVal );
1550 0 : }
1551 :
1552 : // class SvxBoxItem ------------------------------------------------------
1553 :
1554 230046 : SvxBoxItem::SvxBoxItem( const SvxBoxItem& rCpy ) :
1555 :
1556 : SfxPoolItem ( rCpy ),
1557 : nTopDist ( rCpy.nTopDist ),
1558 : nBottomDist ( rCpy.nBottomDist ),
1559 : nLeftDist ( rCpy.nLeftDist ),
1560 230046 : nRightDist ( rCpy.nRightDist )
1561 :
1562 : {
1563 230046 : pTop = rCpy.GetTop() ? new SvxBorderLine( *rCpy.GetTop() ) : 0;
1564 230046 : pBottom = rCpy.GetBottom() ? new SvxBorderLine( *rCpy.GetBottom() ) : 0;
1565 230046 : pLeft = rCpy.GetLeft() ? new SvxBorderLine( *rCpy.GetLeft() ) : 0;
1566 230046 : pRight = rCpy.GetRight() ? new SvxBorderLine( *rCpy.GetRight() ) : 0;
1567 230046 : }
1568 :
1569 :
1570 :
1571 22949 : SvxBoxItem::SvxBoxItem( const sal_uInt16 nId ) :
1572 : SfxPoolItem( nId ),
1573 :
1574 : pTop ( 0 ),
1575 : pBottom ( 0 ),
1576 : pLeft ( 0 ),
1577 : pRight ( 0 ),
1578 : nTopDist ( 0 ),
1579 : nBottomDist ( 0 ),
1580 : nLeftDist ( 0 ),
1581 22949 : nRightDist ( 0 )
1582 :
1583 : {
1584 22949 : }
1585 :
1586 :
1587 :
1588 719519 : SvxBoxItem::~SvxBoxItem()
1589 : {
1590 252706 : delete pTop;
1591 252706 : delete pBottom;
1592 252706 : delete pLeft;
1593 252706 : delete pRight;
1594 466813 : }
1595 :
1596 :
1597 :
1598 1214 : SvxBoxItem& SvxBoxItem::operator=( const SvxBoxItem& rBox )
1599 : {
1600 1214 : nTopDist = rBox.nTopDist;
1601 1214 : nBottomDist = rBox.nBottomDist;
1602 1214 : nLeftDist = rBox.nLeftDist;
1603 1214 : nRightDist = rBox.nRightDist;
1604 1214 : SetLine( rBox.GetTop(), BOX_LINE_TOP );
1605 1214 : SetLine( rBox.GetBottom(), BOX_LINE_BOTTOM );
1606 1214 : SetLine( rBox.GetLeft(), BOX_LINE_LEFT );
1607 1214 : SetLine( rBox.GetRight(), BOX_LINE_RIGHT );
1608 1214 : return *this;
1609 : }
1610 :
1611 :
1612 :
1613 3863951 : inline bool CmpBrdLn( const SvxBorderLine* pBrd1, const SvxBorderLine* pBrd2 )
1614 : {
1615 : bool bRet;
1616 3863951 : if( 0 != pBrd1 ? 0 == pBrd2 : 0 != pBrd2 )
1617 421138 : bRet = false;
1618 : else
1619 3442813 : if( !pBrd1 )
1620 2963468 : bRet = true;
1621 : else
1622 479345 : bRet = (*pBrd1 == *pBrd2);
1623 3863951 : return bRet;
1624 : }
1625 :
1626 :
1627 :
1628 1546158 : bool SvxBoxItem::operator==( const SfxPoolItem& rAttr ) const
1629 : {
1630 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
1631 :
1632 1546158 : const SvxBoxItem& rBoxItem = static_cast<const SvxBoxItem&>(rAttr);
1633 : return (
1634 2945716 : ( nTopDist == rBoxItem.nTopDist ) &&
1635 2783878 : ( nBottomDist == rBoxItem.nBottomDist ) &&
1636 2427740 : ( nLeftDist == rBoxItem.nLeftDist ) &&
1637 2082742 : ( nRightDist == rBoxItem.nRightDist ) &&
1638 1767298 : CmpBrdLn( pTop, rBoxItem.GetTop() ) &&
1639 1346890 : CmpBrdLn( pBottom, rBoxItem.GetBottom() ) &&
1640 2722396 : CmpBrdLn( pLeft, rBoxItem.GetLeft() ) &&
1641 2103482 : CmpBrdLn( pRight, rBoxItem.GetRight() ) );
1642 : }
1643 :
1644 :
1645 4850 : table::BorderLine2 SvxBoxItem::SvxLineToLine(const SvxBorderLine* pLine, bool bConvert)
1646 : {
1647 4850 : table::BorderLine2 aLine;
1648 4850 : if(pLine)
1649 : {
1650 2480 : aLine.Color = pLine->GetColor().GetColor() ;
1651 2480 : aLine.InnerLineWidth = sal_uInt16( bConvert ? convertTwipToMm100(pLine->GetInWidth() ): pLine->GetInWidth() );
1652 2480 : aLine.OuterLineWidth = sal_uInt16( bConvert ? convertTwipToMm100(pLine->GetOutWidth()): pLine->GetOutWidth() );
1653 2480 : aLine.LineDistance = sal_uInt16( bConvert ? convertTwipToMm100(pLine->GetDistance()): pLine->GetDistance() );
1654 2480 : aLine.LineStyle = pLine->GetBorderLineStyle();
1655 2480 : aLine.LineWidth = sal_uInt32( bConvert ? convertTwipToMm100( pLine->GetWidth( ) ) : pLine->GetWidth( ) );
1656 : }
1657 : else
1658 2370 : aLine.Color = aLine.InnerLineWidth = aLine.OuterLineWidth = aLine.LineDistance = 0;
1659 4850 : return aLine;
1660 : }
1661 :
1662 5930 : bool SvxBoxItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1663 : {
1664 5930 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
1665 5930 : table::BorderLine2 aRetLine;
1666 5930 : sal_uInt16 nDist = 0;
1667 5930 : bool bDistMember = false;
1668 5930 : nMemberId &= ~CONVERT_TWIPS;
1669 5930 : switch(nMemberId)
1670 : {
1671 : case 0:
1672 : {
1673 : // 4 Borders and 5 distances
1674 0 : uno::Sequence< uno::Any > aSeq( 9 );
1675 0 : aSeq[0] = uno::makeAny( SvxBoxItem::SvxLineToLine(GetLeft(), bConvert) );
1676 0 : aSeq[1] = uno::makeAny( SvxBoxItem::SvxLineToLine(GetRight(), bConvert) );
1677 0 : aSeq[2] = uno::makeAny( SvxBoxItem::SvxLineToLine(GetBottom(), bConvert) );
1678 0 : aSeq[3] = uno::makeAny( SvxBoxItem::SvxLineToLine(GetTop(), bConvert) );
1679 0 : aSeq[4] <<= uno::makeAny( (sal_Int32)(bConvert ? convertTwipToMm100( GetDistance()) : GetDistance()));
1680 0 : aSeq[5] <<= uno::makeAny( (sal_Int32)(bConvert ? convertTwipToMm100( nTopDist ) : nTopDist ));
1681 0 : aSeq[6] <<= uno::makeAny( (sal_Int32)(bConvert ? convertTwipToMm100( nBottomDist ) : nBottomDist ));
1682 0 : aSeq[7] <<= uno::makeAny( (sal_Int32)(bConvert ? convertTwipToMm100( nLeftDist ) : nLeftDist ));
1683 0 : aSeq[8] <<= uno::makeAny( (sal_Int32)(bConvert ? convertTwipToMm100( nRightDist ) : nRightDist ));
1684 0 : rVal = uno::makeAny( aSeq );
1685 0 : return true;
1686 : }
1687 : case MID_LEFT_BORDER:
1688 : case LEFT_BORDER:
1689 856 : aRetLine = SvxBoxItem::SvxLineToLine(GetLeft(), bConvert);
1690 856 : break;
1691 : case MID_RIGHT_BORDER:
1692 : case RIGHT_BORDER:
1693 832 : aRetLine = SvxBoxItem::SvxLineToLine(GetRight(), bConvert);
1694 832 : break;
1695 : case MID_BOTTOM_BORDER:
1696 : case BOTTOM_BORDER:
1697 840 : aRetLine = SvxBoxItem::SvxLineToLine(GetBottom(), bConvert);
1698 840 : break;
1699 : case MID_TOP_BORDER:
1700 : case TOP_BORDER:
1701 1206 : aRetLine = SvxBoxItem::SvxLineToLine(GetTop(), bConvert);
1702 1206 : break;
1703 : case BORDER_DISTANCE:
1704 98 : nDist = GetDistance();
1705 98 : bDistMember = true;
1706 98 : break;
1707 : case TOP_BORDER_DISTANCE:
1708 520 : nDist = nTopDist;
1709 520 : bDistMember = true;
1710 520 : break;
1711 : case BOTTOM_BORDER_DISTANCE:
1712 518 : nDist = nBottomDist;
1713 518 : bDistMember = true;
1714 518 : break;
1715 : case LEFT_BORDER_DISTANCE:
1716 536 : nDist = nLeftDist;
1717 536 : bDistMember = true;
1718 536 : break;
1719 : case RIGHT_BORDER_DISTANCE:
1720 524 : nDist = nRightDist;
1721 524 : bDistMember = true;
1722 524 : break;
1723 : case LINE_STYLE:
1724 : case LINE_WIDTH:
1725 : // it doesn't make sense to return a value for these since it's
1726 : // probably ambiguous
1727 0 : return true;
1728 : break;
1729 : }
1730 :
1731 5930 : if( bDistMember )
1732 2196 : rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(nDist) : nDist);
1733 : else
1734 3734 : rVal <<= aRetLine;
1735 :
1736 5930 : return true;
1737 : }
1738 :
1739 : namespace
1740 : {
1741 :
1742 : bool
1743 75998 : lcl_lineToSvxLine(const table::BorderLine& rLine, SvxBorderLine& rSvxLine, bool bConvert, bool bGuessWidth)
1744 : {
1745 75998 : rSvxLine.SetColor( Color(rLine.Color));
1746 75998 : if ( bGuessWidth )
1747 : {
1748 21608 : rSvxLine.GuessLinesWidths( rSvxLine.GetBorderLineStyle(),
1749 19382 : sal_uInt16( bConvert ? convertMm100ToTwip(rLine.OuterLineWidth) : rLine.OuterLineWidth ),
1750 19382 : sal_uInt16( bConvert ? convertMm100ToTwip(rLine.InnerLineWidth) : rLine.InnerLineWidth ),
1751 81980 : sal_uInt16( bConvert ? convertMm100ToTwip(rLine.LineDistance ) : rLine.LineDistance ));
1752 : }
1753 :
1754 75998 : bool bRet = !rSvxLine.isEmpty();
1755 75998 : return bRet;
1756 : }
1757 :
1758 : }
1759 :
1760 :
1761 72 : bool SvxBoxItem::LineToSvxLine(const ::com::sun::star::table::BorderLine& rLine, SvxBorderLine& rSvxLine, bool bConvert)
1762 : {
1763 72 : return lcl_lineToSvxLine(rLine, rSvxLine, bConvert, true);
1764 : }
1765 :
1766 : bool
1767 75926 : SvxBoxItem::LineToSvxLine(const ::com::sun::star::table::BorderLine2& rLine, SvxBorderLine& rSvxLine, bool bConvert)
1768 : {
1769 : SvxBorderStyle const nStyle =
1770 151852 : (rLine.LineStyle < 0 || BORDER_LINE_STYLE_MAX < rLine.LineStyle)
1771 : ? SOLID // default
1772 139906 : : rLine.LineStyle;
1773 :
1774 75926 : rSvxLine.SetBorderLineStyle( nStyle );
1775 :
1776 75926 : bool bGuessWidth = true;
1777 75926 : if ( rLine.LineWidth )
1778 : {
1779 54492 : rSvxLine.SetWidth( bConvert? convertMm100ToTwip( rLine.LineWidth ) : rLine.LineWidth );
1780 : // fdo#46112: double does not necessarily mean symmetric
1781 : // for backwards compatibility
1782 54492 : bGuessWidth = ((DOUBLE == nStyle || DOUBLE_THIN == nStyle)) &&
1783 54904 : (rLine.InnerLineWidth > 0) && (rLine.OuterLineWidth > 0);
1784 : }
1785 :
1786 75926 : return lcl_lineToSvxLine(rLine, rSvxLine, bConvert, bGuessWidth);
1787 : }
1788 :
1789 :
1790 :
1791 : namespace
1792 : {
1793 :
1794 : bool
1795 74018 : lcl_extractBorderLine(const uno::Any& rAny, table::BorderLine2& rLine)
1796 : {
1797 74018 : if (rAny >>= rLine)
1798 74018 : return true;
1799 :
1800 0 : table::BorderLine aBorderLine;
1801 0 : if (rAny >>= aBorderLine)
1802 : {
1803 0 : rLine.Color = aBorderLine.Color;
1804 0 : rLine.InnerLineWidth = aBorderLine.InnerLineWidth;
1805 0 : rLine.OuterLineWidth = aBorderLine.OuterLineWidth;
1806 0 : rLine.LineDistance = aBorderLine.LineDistance;
1807 0 : rLine.LineStyle = table::BorderLineStyle::SOLID;
1808 0 : return true;
1809 : }
1810 :
1811 0 : return false;
1812 : }
1813 :
1814 : template<typename Item>
1815 : bool
1816 0 : lcl_setLine(const uno::Any& rAny, Item& rItem, sal_uInt16 nLine, const bool bConvert)
1817 : {
1818 0 : bool bDone = false;
1819 0 : table::BorderLine2 aBorderLine;
1820 0 : if (lcl_extractBorderLine(rAny, aBorderLine))
1821 : {
1822 0 : SvxBorderLine aLine;
1823 0 : bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
1824 0 : rItem.SetLine( bSet ? &aLine : NULL, nLine);
1825 0 : bDone = true;
1826 : }
1827 0 : return bDone;
1828 : }
1829 :
1830 : }
1831 :
1832 141966 : bool SvxBoxItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1833 : {
1834 141966 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
1835 141966 : sal_uInt16 nLine = BOX_LINE_TOP;
1836 141966 : bool bDistMember = false;
1837 141966 : nMemberId &= ~CONVERT_TWIPS;
1838 141966 : switch(nMemberId)
1839 : {
1840 : case 0:
1841 : {
1842 0 : uno::Sequence< uno::Any > aSeq;
1843 0 : if (( rVal >>= aSeq ) && ( aSeq.getLength() == 9 ))
1844 : {
1845 : // 4 Borders and 5 distances
1846 0 : const sal_uInt16 aBorders[] = { BOX_LINE_LEFT, BOX_LINE_RIGHT, BOX_LINE_BOTTOM, BOX_LINE_TOP };
1847 0 : for (int n(0); n != SAL_N_ELEMENTS(aBorders); ++n)
1848 : {
1849 0 : if (!lcl_setLine(aSeq[n], *this, aBorders[n], bConvert))
1850 0 : return false;
1851 : }
1852 :
1853 : // WTH are the borders and the distances saved in different order?
1854 0 : sal_uInt16 nLines[4] = { BOX_LINE_TOP, BOX_LINE_BOTTOM, BOX_LINE_LEFT, BOX_LINE_RIGHT };
1855 0 : for ( sal_Int32 n = 4; n < 9; n++ )
1856 : {
1857 0 : sal_Int32 nDist = 0;
1858 0 : if ( aSeq[n] >>= nDist )
1859 : {
1860 0 : if( bConvert )
1861 0 : nDist = convertMm100ToTwip(nDist);
1862 0 : if ( n == 4 )
1863 0 : SetDistance( sal_uInt16( nDist ));
1864 : else
1865 0 : SetDistance( sal_uInt16( nDist ), nLines[n-5] );
1866 : }
1867 : else
1868 0 : return false;
1869 : }
1870 :
1871 0 : return true;
1872 : }
1873 : else
1874 0 : return false;
1875 : }
1876 : case LEFT_BORDER_DISTANCE:
1877 17012 : bDistMember = true;
1878 : //fall-through
1879 : case LEFT_BORDER:
1880 : case MID_LEFT_BORDER:
1881 35416 : nLine = BOX_LINE_LEFT;
1882 35416 : break;
1883 : case RIGHT_BORDER_DISTANCE:
1884 16952 : bDistMember = true;
1885 : case RIGHT_BORDER:
1886 : case MID_RIGHT_BORDER:
1887 35296 : nLine = BOX_LINE_RIGHT;
1888 35296 : break;
1889 : case BOTTOM_BORDER_DISTANCE:
1890 17398 : bDistMember = true;
1891 : //fall-through
1892 : case BOTTOM_BORDER:
1893 : case MID_BOTTOM_BORDER:
1894 36164 : nLine = BOX_LINE_BOTTOM;
1895 36164 : break;
1896 : case TOP_BORDER_DISTANCE:
1897 16712 : bDistMember = true;
1898 : //fall-through
1899 : case TOP_BORDER:
1900 : case MID_TOP_BORDER:
1901 34876 : nLine = BOX_LINE_TOP;
1902 34876 : break;
1903 : case LINE_STYLE:
1904 : {
1905 : drawing::LineStyle eDrawingStyle;
1906 180 : rVal >>= eDrawingStyle;
1907 180 : editeng::SvxBorderStyle eBorderStyle = css::table::BorderLineStyle::NONE;
1908 180 : switch ( eDrawingStyle )
1909 : {
1910 : default:
1911 : case drawing::LineStyle_NONE:
1912 126 : break;
1913 : case drawing::LineStyle_SOLID:
1914 54 : eBorderStyle = SOLID;
1915 54 : break;
1916 : case drawing::LineStyle_DASH:
1917 0 : eBorderStyle = DASHED;
1918 0 : break;
1919 : }
1920 :
1921 : // Set the line style on all borders
1922 180 : const sal_uInt16 aBorders[] = { BOX_LINE_LEFT, BOX_LINE_RIGHT, BOX_LINE_BOTTOM, BOX_LINE_TOP };
1923 900 : for (int n(0); n != SAL_N_ELEMENTS(aBorders); ++n)
1924 : {
1925 720 : editeng::SvxBorderLine* pLine = const_cast< editeng::SvxBorderLine* >( GetLine( aBorders[n] ) );
1926 720 : if( pLine )
1927 720 : pLine->SetBorderLineStyle( eBorderStyle );
1928 : }
1929 180 : return true;
1930 : }
1931 : break;
1932 : case LINE_WIDTH:
1933 : {
1934 : // Set the line width on all borders
1935 0 : long nWidth(0);
1936 0 : rVal >>= nWidth;
1937 0 : if( bConvert )
1938 0 : nWidth = convertMm100ToTwip( nWidth );
1939 :
1940 : // Set the line Width on all borders
1941 0 : const sal_uInt16 aBorders[] = { BOX_LINE_LEFT, BOX_LINE_RIGHT, BOX_LINE_BOTTOM, BOX_LINE_TOP };
1942 0 : for (int n(0); n != SAL_N_ELEMENTS(aBorders); ++n)
1943 : {
1944 0 : editeng::SvxBorderLine* pLine = const_cast< editeng::SvxBorderLine* >( GetLine( aBorders[n] ) );
1945 0 : if( pLine )
1946 0 : pLine->SetWidth( nWidth );
1947 : }
1948 : }
1949 0 : return true;
1950 : }
1951 :
1952 141786 : if( bDistMember || nMemberId == BORDER_DISTANCE )
1953 : {
1954 68108 : sal_Int32 nDist = 0;
1955 68108 : if(!(rVal >>= nDist))
1956 0 : return false;
1957 :
1958 68108 : if(nDist >= 0)
1959 : {
1960 68072 : if( bConvert )
1961 68072 : nDist = convertMm100ToTwip(nDist);
1962 68072 : if( nMemberId == BORDER_DISTANCE )
1963 34 : SetDistance( sal_uInt16( nDist ));
1964 : else
1965 68038 : SetDistance( sal_uInt16( nDist ), nLine );
1966 68108 : }
1967 : }
1968 : else
1969 : {
1970 73678 : SvxBorderLine aLine;
1971 73678 : if( !rVal.hasValue() )
1972 0 : return false;
1973 :
1974 73678 : table::BorderLine2 aBorderLine;
1975 73678 : if( lcl_extractBorderLine(rVal, aBorderLine) )
1976 : {
1977 : // usual struct
1978 : }
1979 0 : else if (rVal.getValueTypeClass() == uno::TypeClass_SEQUENCE )
1980 : {
1981 : // serialization for basic macro recording
1982 : uno::Reference < script::XTypeConverter > xConverter
1983 0 : ( script::Converter::create(::comphelper::getProcessComponentContext()) );
1984 0 : uno::Sequence < uno::Any > aSeq;
1985 0 : uno::Any aNew;
1986 0 : try { aNew = xConverter->convertTo( rVal, ::getCppuType((const uno::Sequence < uno::Any >*)0) ); }
1987 0 : catch (const uno::Exception&) {}
1988 :
1989 0 : aNew >>= aSeq;
1990 0 : if (aSeq.getLength() >= 4 && aSeq.getLength() <= 6)
1991 : {
1992 0 : sal_Int32 nVal = 0;
1993 0 : if ( aSeq[0] >>= nVal )
1994 0 : aBorderLine.Color = nVal;
1995 0 : if ( aSeq[1] >>= nVal )
1996 0 : aBorderLine.InnerLineWidth = (sal_Int16) nVal;
1997 0 : if ( aSeq[2] >>= nVal )
1998 0 : aBorderLine.OuterLineWidth = (sal_Int16) nVal;
1999 0 : if ( aSeq[3] >>= nVal )
2000 0 : aBorderLine.LineDistance = (sal_Int16) nVal;
2001 0 : if (aSeq.getLength() >= 5) // fdo#40874 added fields
2002 : {
2003 0 : if (aSeq[4] >>= nVal)
2004 : {
2005 0 : aBorderLine.LineStyle = nVal;
2006 : }
2007 0 : if (aSeq.getLength() >= 6)
2008 : {
2009 0 : if (aSeq[5] >>= nVal)
2010 : {
2011 0 : aBorderLine.LineWidth = nVal;
2012 : }
2013 : }
2014 : }
2015 : }
2016 : else
2017 0 : return false;
2018 : }
2019 : else
2020 0 : return false;
2021 :
2022 73678 : bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
2023 73678 : SetLine(bSet ? &aLine : 0, nLine);
2024 : }
2025 :
2026 141786 : return true;
2027 : }
2028 :
2029 :
2030 :
2031 203576 : SfxPoolItem* SvxBoxItem::Clone( SfxItemPool* ) const
2032 : {
2033 203576 : return new SvxBoxItem( *this );
2034 : }
2035 :
2036 :
2037 :
2038 0 : bool SvxBoxItem::GetPresentation
2039 : (
2040 : SfxItemPresentation ePres,
2041 : SfxMapUnit eCoreUnit,
2042 : SfxMapUnit ePresUnit,
2043 : OUString& rText, const IntlWrapper *pIntl
2044 : ) const
2045 : {
2046 0 : OUString cpDelimTmp = OUString(cpDelim);
2047 0 : switch ( ePres )
2048 : {
2049 : case SFX_ITEM_PRESENTATION_NAMELESS:
2050 : {
2051 0 : rText = OUString();
2052 :
2053 0 : if ( pTop )
2054 : {
2055 0 : rText = pTop->GetValueString( eCoreUnit, ePresUnit, pIntl ) + cpDelimTmp;
2056 : }
2057 0 : if( !(pTop && pBottom && pLeft && pRight &&
2058 0 : *pTop == *pBottom && *pTop == *pLeft && *pTop == *pRight) )
2059 : {
2060 0 : if ( pBottom )
2061 : {
2062 0 : rText = rText + pBottom->GetValueString( eCoreUnit, ePresUnit, pIntl ) + cpDelimTmp;
2063 : }
2064 0 : if ( pLeft )
2065 : {
2066 0 : rText = rText + pLeft->GetValueString( eCoreUnit, ePresUnit, pIntl ) + cpDelimTmp;
2067 : }
2068 0 : if ( pRight )
2069 : {
2070 0 : rText = rText + pRight->GetValueString( eCoreUnit, ePresUnit, pIntl ) + cpDelimTmp;
2071 : }
2072 : }
2073 0 : rText += GetMetricText( (long)nTopDist, eCoreUnit, ePresUnit, pIntl );
2074 0 : if( nTopDist != nBottomDist || nTopDist != nLeftDist ||
2075 0 : nTopDist != nRightDist )
2076 : {
2077 0 : rText = rText +
2078 0 : cpDelimTmp +
2079 : GetMetricText( (long)nBottomDist, eCoreUnit,
2080 0 : ePresUnit, pIntl ) +
2081 0 : cpDelimTmp +
2082 0 : GetMetricText( (long)nLeftDist, eCoreUnit, ePresUnit, pIntl ) +
2083 0 : cpDelimTmp +
2084 : GetMetricText( (long)nRightDist, eCoreUnit,
2085 0 : ePresUnit, pIntl );
2086 : }
2087 0 : return true;
2088 : }
2089 : case SFX_ITEM_PRESENTATION_COMPLETE:
2090 : {
2091 0 : if( !(pTop || pBottom || pLeft || pRight) )
2092 : {
2093 0 : rText = EE_RESSTR(RID_SVXITEMS_BORDER_NONE) + cpDelimTmp;
2094 : }
2095 : else
2096 : {
2097 0 : rText = EE_RESSTR(RID_SVXITEMS_BORDER_COMPLETE);
2098 0 : if( pTop && pBottom && pLeft && pRight &&
2099 0 : *pTop == *pBottom && *pTop == *pLeft && *pTop == *pRight )
2100 : {
2101 0 : rText += pTop->GetValueString( eCoreUnit, ePresUnit, pIntl, true ) + cpDelimTmp;
2102 : }
2103 : else
2104 : {
2105 0 : if ( pTop )
2106 : {
2107 0 : rText = rText +
2108 0 : EE_RESSTR(RID_SVXITEMS_BORDER_TOP) +
2109 0 : pTop->GetValueString( eCoreUnit, ePresUnit, pIntl, true ) +
2110 0 : cpDelimTmp;
2111 : }
2112 0 : if ( pBottom )
2113 : {
2114 0 : rText = rText +
2115 0 : EE_RESSTR(RID_SVXITEMS_BORDER_BOTTOM) +
2116 0 : pBottom->GetValueString( eCoreUnit, ePresUnit, pIntl, true ) +
2117 0 : cpDelimTmp;
2118 : }
2119 0 : if ( pLeft )
2120 : {
2121 0 : rText = rText +
2122 0 : EE_RESSTR(RID_SVXITEMS_BORDER_LEFT) +
2123 0 : pLeft->GetValueString( eCoreUnit, ePresUnit, pIntl, true ) +
2124 0 : cpDelimTmp;
2125 : }
2126 0 : if ( pRight )
2127 : {
2128 0 : rText = rText +
2129 0 : EE_RESSTR(RID_SVXITEMS_BORDER_RIGHT) +
2130 0 : pRight->GetValueString( eCoreUnit, ePresUnit, pIntl, true ) +
2131 0 : cpDelimTmp;
2132 : }
2133 : }
2134 : }
2135 :
2136 0 : rText += EE_RESSTR(RID_SVXITEMS_BORDER_DISTANCE);
2137 0 : if( nTopDist == nBottomDist && nTopDist == nLeftDist &&
2138 0 : nTopDist == nRightDist )
2139 : {
2140 0 : rText = rText +
2141 : GetMetricText( (long)nTopDist, eCoreUnit,
2142 0 : ePresUnit, pIntl ) +
2143 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
2144 : }
2145 : else
2146 : {
2147 0 : rText = rText +
2148 0 : EE_RESSTR(RID_SVXITEMS_BORDER_TOP) +
2149 : GetMetricText( (long)nTopDist, eCoreUnit,
2150 0 : ePresUnit, pIntl ) +
2151 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
2152 0 : cpDelimTmp +
2153 0 : EE_RESSTR(RID_SVXITEMS_BORDER_BOTTOM) +
2154 : GetMetricText( (long)nBottomDist, eCoreUnit,
2155 0 : ePresUnit, pIntl ) +
2156 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
2157 0 : cpDelimTmp +
2158 0 : EE_RESSTR(RID_SVXITEMS_BORDER_LEFT) +
2159 : GetMetricText( (long)nLeftDist, eCoreUnit,
2160 0 : ePresUnit, pIntl ) +
2161 0 : " " + EE_RESSTR(GetMetricId(ePresUnit)) +
2162 0 : cpDelimTmp +
2163 0 : EE_RESSTR(RID_SVXITEMS_BORDER_RIGHT) +
2164 : GetMetricText( (long)nRightDist, eCoreUnit,
2165 0 : ePresUnit, pIntl ) +
2166 0 : " " + EE_RESSTR(GetMetricId(ePresUnit));
2167 : }
2168 0 : return true;
2169 : }
2170 : default: ;//prevent warning
2171 : }
2172 0 : return false;
2173 : }
2174 :
2175 :
2176 :
2177 1312 : SvStream& SvxBoxItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const
2178 : {
2179 1312 : rStrm.WriteUInt16( GetDistance() );
2180 : const SvxBorderLine* pLine[ 4 ]; // top, left, right, bottom
2181 1312 : pLine[ 0 ] = GetTop();
2182 1312 : pLine[ 1 ] = GetLeft();
2183 1312 : pLine[ 2 ] = GetRight();
2184 1312 : pLine[ 3 ] = GetBottom();
2185 :
2186 6560 : for( int i = 0; i < 4; i++ )
2187 : {
2188 5248 : const SvxBorderLine* l = pLine[ i ];
2189 5248 : if( l )
2190 : {
2191 1790 : rStrm.WriteSChar(i);
2192 1790 : StoreBorderLine(rStrm, *l, BorderLineVersionFromBoxVersion(nItemVersion));
2193 : }
2194 : }
2195 1312 : sal_Int8 cLine = 4;
2196 2624 : if( nItemVersion >= BOX_4DISTS_VERSION &&
2197 2624 : !(nTopDist == nLeftDist &&
2198 1312 : nTopDist == nRightDist &&
2199 1312 : nTopDist == nBottomDist) )
2200 : {
2201 0 : cLine |= 0x10;
2202 : }
2203 :
2204 1312 : rStrm.WriteSChar( cLine );
2205 :
2206 1312 : if( nItemVersion >= BOX_4DISTS_VERSION && (cLine & 0x10) != 0 )
2207 : {
2208 0 : rStrm.WriteUInt16( nTopDist )
2209 0 : .WriteUInt16( nLeftDist )
2210 0 : .WriteUInt16( nRightDist )
2211 0 : .WriteUInt16( nBottomDist );
2212 : }
2213 :
2214 1312 : return rStrm;
2215 : }
2216 :
2217 :
2218 :
2219 1317 : sal_uInt16 SvxBoxItem::GetVersion( sal_uInt16 nFFVer ) const
2220 : {
2221 : DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
2222 : SOFFICE_FILEFORMAT_40==nFFVer ||
2223 : SOFFICE_FILEFORMAT_50==nFFVer,
2224 : "SvxBoxItem: Gibt es ein neues Fileformat?" );
2225 1317 : return SOFFICE_FILEFORMAT_31==nFFVer ||
2226 1317 : SOFFICE_FILEFORMAT_40==nFFVer ? 0 : BOX_BORDER_STYLE_VERSION;
2227 : }
2228 :
2229 :
2230 :
2231 0 : bool SvxBoxItem::ScaleMetrics( long nMult, long nDiv )
2232 : {
2233 0 : if ( pTop ) pTop->ScaleMetrics( nMult, nDiv );
2234 0 : if ( pBottom ) pBottom->ScaleMetrics( nMult, nDiv );
2235 0 : if ( pLeft ) pLeft->ScaleMetrics( nMult, nDiv );
2236 0 : if ( pRight ) pRight->ScaleMetrics( nMult, nDiv );
2237 0 : nTopDist = (sal_uInt16)Scale( nTopDist, nMult, nDiv );
2238 0 : nBottomDist = (sal_uInt16)Scale( nBottomDist, nMult, nDiv );
2239 0 : nLeftDist = (sal_uInt16)Scale( nLeftDist, nMult, nDiv );
2240 0 : nRightDist = (sal_uInt16)Scale( nRightDist, nMult, nDiv );
2241 0 : return true;
2242 : }
2243 :
2244 :
2245 :
2246 0 : bool SvxBoxItem::HasMetrics() const
2247 : {
2248 0 : return true;
2249 : }
2250 :
2251 :
2252 :
2253 512 : SfxPoolItem* SvxBoxItem::Create( SvStream& rStrm, sal_uInt16 nIVersion ) const
2254 : {
2255 : sal_uInt16 nDistance;
2256 512 : rStrm.ReadUInt16( nDistance );
2257 512 : SvxBoxItem* pAttr = new SvxBoxItem( Which() );
2258 :
2259 : sal_uInt16 aLineMap[4] = { BOX_LINE_TOP, BOX_LINE_LEFT,
2260 512 : BOX_LINE_RIGHT, BOX_LINE_BOTTOM };
2261 :
2262 : sal_Int8 cLine;
2263 : while( true )
2264 : {
2265 1128 : rStrm.ReadSChar( cLine );
2266 :
2267 1128 : if( cLine > 3 )
2268 512 : break;
2269 :
2270 616 : SvxBorderLine aBorder = CreateBorderLine(rStrm, BorderLineVersionFromBoxVersion(nIVersion));
2271 616 : pAttr->SetLine( &aBorder, aLineMap[cLine] );
2272 : }
2273 :
2274 512 : if( nIVersion >= BOX_4DISTS_VERSION && (cLine&0x10) != 0 )
2275 : {
2276 0 : for( sal_uInt16 i=0; i < 4; i++ )
2277 : {
2278 : sal_uInt16 nDist;
2279 0 : rStrm.ReadUInt16( nDist );
2280 0 : pAttr->SetDistance( nDist, aLineMap[i] );
2281 0 : }
2282 : }
2283 : else
2284 : {
2285 512 : pAttr->SetDistance( nDistance );
2286 : }
2287 :
2288 1128 : return pAttr;
2289 : }
2290 :
2291 :
2292 :
2293 35474 : const SvxBorderLine *SvxBoxItem::GetLine( sal_uInt16 nLine ) const
2294 : {
2295 35474 : const SvxBorderLine *pRet = 0;
2296 :
2297 35474 : switch ( nLine )
2298 : {
2299 : case BOX_LINE_TOP:
2300 5292 : pRet = pTop;
2301 5292 : break;
2302 : case BOX_LINE_BOTTOM:
2303 8490 : pRet = pBottom;
2304 8490 : break;
2305 : case BOX_LINE_LEFT:
2306 10472 : pRet = pLeft;
2307 10472 : break;
2308 : case BOX_LINE_RIGHT:
2309 11220 : pRet = pRight;
2310 11220 : break;
2311 : default:
2312 : OSL_FAIL( "wrong line" );
2313 0 : break;
2314 : }
2315 :
2316 35474 : return pRet;
2317 : }
2318 :
2319 :
2320 :
2321 140184 : void SvxBoxItem::SetLine( const SvxBorderLine* pNew, sal_uInt16 nLine )
2322 : {
2323 140184 : SvxBorderLine* pTmp = pNew ? new SvxBorderLine( *pNew ) : 0;
2324 :
2325 140184 : switch ( nLine )
2326 : {
2327 : case BOX_LINE_TOP:
2328 34524 : delete pTop;
2329 34524 : pTop = pTmp;
2330 34524 : break;
2331 : case BOX_LINE_BOTTOM:
2332 35362 : delete pBottom;
2333 35362 : pBottom = pTmp;
2334 35362 : break;
2335 : case BOX_LINE_LEFT:
2336 33864 : delete pLeft;
2337 33864 : pLeft = pTmp;
2338 33864 : break;
2339 : case BOX_LINE_RIGHT:
2340 36434 : delete pRight;
2341 36434 : pRight = pTmp;
2342 36434 : break;
2343 : default:
2344 0 : delete pTmp;
2345 : OSL_FAIL( "wrong line" );
2346 : }
2347 140184 : }
2348 :
2349 :
2350 :
2351 2480 : sal_uInt16 SvxBoxItem::GetDistance() const
2352 : {
2353 : // The smallest distance that is not 0 will be returned.
2354 2480 : sal_uInt16 nDist = nTopDist;
2355 2480 : if( nBottomDist && (!nDist || nBottomDist < nDist) )
2356 2 : nDist = nBottomDist;
2357 2480 : if( nLeftDist && (!nDist || nLeftDist < nDist) )
2358 18 : nDist = nLeftDist;
2359 2480 : if( nRightDist && (!nDist || nRightDist < nDist) )
2360 2 : nDist = nRightDist;
2361 :
2362 2480 : return nDist;
2363 : }
2364 :
2365 :
2366 :
2367 403954 : sal_uInt16 SvxBoxItem::GetDistance( sal_uInt16 nLine ) const
2368 : {
2369 403954 : sal_uInt16 nDist = 0;
2370 403954 : switch ( nLine )
2371 : {
2372 : case BOX_LINE_TOP:
2373 96726 : nDist = nTopDist;
2374 96726 : break;
2375 : case BOX_LINE_BOTTOM:
2376 175232 : nDist = nBottomDist;
2377 175232 : break;
2378 : case BOX_LINE_LEFT:
2379 73192 : nDist = nLeftDist;
2380 73192 : break;
2381 : case BOX_LINE_RIGHT:
2382 58804 : nDist = nRightDist;
2383 58804 : break;
2384 : default:
2385 : OSL_FAIL( "wrong line" );
2386 : }
2387 :
2388 403954 : return nDist;
2389 : }
2390 :
2391 :
2392 :
2393 143182 : void SvxBoxItem::SetDistance( sal_uInt16 nNew, sal_uInt16 nLine )
2394 : {
2395 143182 : switch ( nLine )
2396 : {
2397 : case BOX_LINE_TOP:
2398 35580 : nTopDist = nNew;
2399 35580 : break;
2400 : case BOX_LINE_BOTTOM:
2401 36290 : nBottomDist = nNew;
2402 36290 : break;
2403 : case BOX_LINE_LEFT:
2404 35748 : nLeftDist = nNew;
2405 35748 : break;
2406 : case BOX_LINE_RIGHT:
2407 35564 : nRightDist = nNew;
2408 35564 : break;
2409 : default:
2410 : OSL_FAIL( "wrong line" );
2411 : }
2412 143182 : }
2413 :
2414 :
2415 :
2416 368752 : sal_uInt16 SvxBoxItem::CalcLineSpace( sal_uInt16 nLine, bool bIgnoreLine ) const
2417 : {
2418 368752 : SvxBorderLine* pTmp = 0;
2419 368752 : sal_uInt16 nDist = 0;
2420 368752 : switch ( nLine )
2421 : {
2422 : case BOX_LINE_TOP:
2423 154984 : pTmp = pTop;
2424 154984 : nDist = nTopDist;
2425 154984 : break;
2426 : case BOX_LINE_BOTTOM:
2427 155040 : pTmp = pBottom;
2428 155040 : nDist = nBottomDist;
2429 155040 : break;
2430 : case BOX_LINE_LEFT:
2431 29363 : pTmp = pLeft;
2432 29363 : nDist = nLeftDist;
2433 29363 : break;
2434 : case BOX_LINE_RIGHT:
2435 29365 : pTmp = pRight;
2436 29365 : nDist = nRightDist;
2437 29365 : break;
2438 : default:
2439 : OSL_FAIL( "wrong line" );
2440 : }
2441 :
2442 368752 : if( pTmp )
2443 : {
2444 131090 : nDist = nDist + pTmp->GetScaledWidth();
2445 : }
2446 237662 : else if( !bIgnoreLine )
2447 205048 : nDist = 0;
2448 368752 : return nDist;
2449 : }
2450 :
2451 : // class SvxBoxInfoItem --------------------------------------------------
2452 :
2453 442568 : SvxBoxInfoItem::SvxBoxInfoItem( const sal_uInt16 nId ) :
2454 : SfxPoolItem( nId ),
2455 : pHori ( 0 ),
2456 : pVert ( 0 ),
2457 : mbEnableHor( false ),
2458 : mbEnableVer( false ),
2459 442568 : nDefDist( 0 )
2460 : {
2461 442568 : bDist = bMinDist = false;
2462 442568 : ResetFlags();
2463 442568 : }
2464 :
2465 :
2466 :
2467 1364946 : SvxBoxInfoItem::SvxBoxInfoItem( const SvxBoxInfoItem& rCpy ) :
2468 : SfxPoolItem( rCpy ),
2469 : mbEnableHor( rCpy.mbEnableHor ),
2470 1364946 : mbEnableVer( rCpy.mbEnableVer )
2471 : {
2472 1364946 : pHori = rCpy.GetHori() ? new SvxBorderLine( *rCpy.GetHori() ) : 0;
2473 1364946 : pVert = rCpy.GetVert() ? new SvxBorderLine( *rCpy.GetVert() ) : 0;
2474 1364946 : bDist = rCpy.IsDist();
2475 1364946 : bMinDist = rCpy.IsMinDist();
2476 1364946 : nValidFlags = rCpy.nValidFlags;
2477 1364946 : nDefDist = rCpy.GetDefDist();
2478 1364946 : }
2479 :
2480 :
2481 :
2482 4989209 : SvxBoxInfoItem::~SvxBoxInfoItem()
2483 : {
2484 1807233 : delete pHori;
2485 1807233 : delete pVert;
2486 3181976 : }
2487 :
2488 :
2489 :
2490 1164 : SvxBoxInfoItem &SvxBoxInfoItem::operator=( const SvxBoxInfoItem& rCpy )
2491 : {
2492 1164 : delete pHori;
2493 1164 : delete pVert;
2494 1164 : pHori = rCpy.GetHori() ? new SvxBorderLine( *rCpy.GetHori() ) : 0;
2495 1164 : pVert = rCpy.GetVert() ? new SvxBorderLine( *rCpy.GetVert() ) : 0;
2496 1164 : mbEnableHor = rCpy.mbEnableHor;
2497 1164 : mbEnableVer = rCpy.mbEnableVer;
2498 1164 : bDist = rCpy.IsDist();
2499 1164 : bMinDist = rCpy.IsMinDist();
2500 1164 : nValidFlags = rCpy.nValidFlags;
2501 1164 : nDefDist = rCpy.GetDefDist();
2502 1164 : return *this;
2503 : }
2504 :
2505 :
2506 :
2507 64426 : bool SvxBoxInfoItem::operator==( const SfxPoolItem& rAttr ) const
2508 : {
2509 64426 : const SvxBoxInfoItem& rBoxInfo = static_cast<const SvxBoxInfoItem&>(rAttr);
2510 :
2511 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
2512 :
2513 64426 : return ( mbEnableHor == rBoxInfo.mbEnableHor
2514 64426 : && mbEnableVer == rBoxInfo.mbEnableVer
2515 64426 : && bDist == rBoxInfo.IsDist()
2516 64426 : && bMinDist == rBoxInfo.IsMinDist()
2517 64426 : && nValidFlags == rBoxInfo.nValidFlags
2518 64422 : && nDefDist == rBoxInfo.GetDefDist()
2519 64422 : && CmpBrdLn( pHori, rBoxInfo.GetHori() )
2520 128814 : && CmpBrdLn( pVert, rBoxInfo.GetVert() )
2521 64426 : );
2522 : }
2523 :
2524 :
2525 :
2526 5164 : void SvxBoxInfoItem::SetLine( const SvxBorderLine* pNew, sal_uInt16 nLine )
2527 : {
2528 5164 : SvxBorderLine* pTmp = pNew ? new SvxBorderLine( *pNew ) : 0;
2529 :
2530 5164 : if ( BOXINFO_LINE_HORI == nLine )
2531 : {
2532 2620 : delete pHori;
2533 2620 : pHori = pTmp;
2534 : }
2535 2544 : else if ( BOXINFO_LINE_VERT == nLine )
2536 : {
2537 2544 : delete pVert;
2538 2544 : pVert = pTmp;
2539 : }
2540 : else
2541 : {
2542 0 : delete pTmp;
2543 : OSL_FAIL( "wrong line" );
2544 : }
2545 5164 : }
2546 :
2547 :
2548 :
2549 1364892 : SfxPoolItem* SvxBoxInfoItem::Clone( SfxItemPool* ) const
2550 : {
2551 1364892 : return new SvxBoxInfoItem( *this );
2552 : }
2553 :
2554 :
2555 :
2556 0 : bool SvxBoxInfoItem::GetPresentation
2557 : (
2558 : SfxItemPresentation /*ePres*/,
2559 : SfxMapUnit /*eCoreUnit*/,
2560 : SfxMapUnit /*ePresUnit*/,
2561 : OUString& rText, const IntlWrapper *
2562 : ) const
2563 : {
2564 0 : rText = OUString();
2565 0 : return false;
2566 : }
2567 :
2568 :
2569 :
2570 0 : SvStream& SvxBoxInfoItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
2571 : {
2572 0 : sal_Int8 cFlags = 0;
2573 :
2574 0 : if ( IsTable() )
2575 0 : cFlags |= 0x01;
2576 0 : if ( IsDist() )
2577 0 : cFlags |= 0x02;
2578 0 : if ( IsMinDist() )
2579 0 : cFlags |= 0x04;
2580 0 : rStrm.WriteSChar( cFlags )
2581 0 : .WriteUInt16( GetDefDist() );
2582 : const SvxBorderLine* pLine[ 2 ];
2583 0 : pLine[ 0 ] = GetHori();
2584 0 : pLine[ 1 ] = GetVert();
2585 :
2586 0 : for( int i = 0; i < 2; i++ )
2587 : {
2588 0 : const SvxBorderLine* l = pLine[ i ];
2589 0 : if( l )
2590 : {
2591 0 : rStrm.WriteChar( (char) i );
2592 0 : WriteColor( rStrm, l->GetColor() );
2593 0 : rStrm.WriteInt16( l->GetOutWidth() )
2594 0 : .WriteInt16( l->GetInWidth() )
2595 0 : .WriteInt16( l->GetDistance() );
2596 : }
2597 : }
2598 0 : rStrm.WriteChar( (char) 2 );
2599 0 : return rStrm;
2600 : }
2601 :
2602 :
2603 :
2604 0 : bool SvxBoxInfoItem::ScaleMetrics( long nMult, long nDiv )
2605 : {
2606 0 : if ( pHori ) pHori->ScaleMetrics( nMult, nDiv );
2607 0 : if ( pVert ) pVert->ScaleMetrics( nMult, nDiv );
2608 0 : nDefDist = (sal_uInt16)Scale( nDefDist, nMult, nDiv );
2609 0 : return true;
2610 : }
2611 :
2612 :
2613 :
2614 0 : bool SvxBoxInfoItem::HasMetrics() const
2615 : {
2616 0 : return true;
2617 : }
2618 :
2619 :
2620 :
2621 0 : SfxPoolItem* SvxBoxInfoItem::Create( SvStream& rStrm, sal_uInt16 ) const
2622 : {
2623 : sal_Int8 cFlags;
2624 : sal_uInt16 _nDefDist;
2625 0 : rStrm.ReadSChar( cFlags ).ReadUInt16( _nDefDist );
2626 :
2627 0 : SvxBoxInfoItem* pAttr = new SvxBoxInfoItem( Which() );
2628 :
2629 0 : pAttr->SetTable ( ( cFlags & 0x01 ) != 0 );
2630 0 : pAttr->SetDist ( ( cFlags & 0x02 ) != 0 );
2631 0 : pAttr->SetMinDist( ( cFlags & 0x04 ) != 0 );
2632 0 : pAttr->SetDefDist( _nDefDist );
2633 :
2634 : while( true )
2635 : {
2636 : sal_Int8 cLine;
2637 0 : rStrm.ReadSChar( cLine );
2638 :
2639 0 : if( cLine > 1 )
2640 0 : break;
2641 : short nOutline, nInline, nDistance;
2642 0 : Color aColor;
2643 0 : ReadColor( rStrm, aColor ).ReadInt16( nOutline ).ReadInt16( nInline ).ReadInt16( nDistance );
2644 0 : SvxBorderLine aBorder( &aColor );
2645 0 : aBorder.GuessLinesWidths(css::table::BorderLineStyle::NONE, nOutline, nInline, nDistance);
2646 :
2647 0 : switch( cLine )
2648 : {
2649 0 : case 0: pAttr->SetLine( &aBorder, BOXINFO_LINE_HORI ); break;
2650 0 : case 1: pAttr->SetLine( &aBorder, BOXINFO_LINE_VERT ); break;
2651 : }
2652 : }
2653 0 : return pAttr;
2654 : }
2655 :
2656 :
2657 :
2658 442614 : void SvxBoxInfoItem::ResetFlags()
2659 : {
2660 442614 : nValidFlags = 0x7F; // all valid except Disable
2661 442614 : }
2662 :
2663 0 : bool SvxBoxInfoItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
2664 : {
2665 0 : bool bConvert = 0 != (nMemberId & CONVERT_TWIPS);
2666 0 : table::BorderLine2 aRetLine;
2667 0 : sal_Int16 nVal=0;
2668 0 : bool bIntMember = false;
2669 0 : nMemberId &= ~CONVERT_TWIPS;
2670 0 : switch(nMemberId)
2671 : {
2672 : case 0:
2673 : {
2674 : // 2 BorderLines, flags, valid flags and distance
2675 0 : ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > aSeq( 5 );
2676 0 : aSeq[0] = ::com::sun::star::uno::makeAny( SvxBoxItem::SvxLineToLine( pHori, bConvert) );
2677 0 : aSeq[1] = ::com::sun::star::uno::makeAny( SvxBoxItem::SvxLineToLine( pVert, bConvert) );
2678 0 : if ( IsTable() )
2679 0 : nVal |= 0x01;
2680 0 : if ( IsDist() )
2681 0 : nVal |= 0x02;
2682 0 : if ( IsMinDist() )
2683 0 : nVal |= 0x04;
2684 0 : aSeq[2] = ::com::sun::star::uno::makeAny( nVal );
2685 0 : nVal = nValidFlags;
2686 0 : aSeq[3] = ::com::sun::star::uno::makeAny( nVal );
2687 0 : aSeq[4] = ::com::sun::star::uno::makeAny( (sal_Int32)(bConvert ? convertTwipToMm100(GetDefDist()) : GetDefDist()) );
2688 0 : rVal = ::com::sun::star::uno::makeAny( aSeq );
2689 0 : return true;
2690 : }
2691 :
2692 : case MID_HORIZONTAL:
2693 0 : aRetLine = SvxBoxItem::SvxLineToLine( pHori, bConvert);
2694 0 : break;
2695 : case MID_VERTICAL:
2696 0 : aRetLine = SvxBoxItem::SvxLineToLine( pVert, bConvert);
2697 0 : break;
2698 : case MID_FLAGS:
2699 0 : bIntMember = true;
2700 0 : if ( IsTable() )
2701 0 : nVal |= 0x01;
2702 0 : if ( IsDist() )
2703 0 : nVal |= 0x02;
2704 0 : if ( IsMinDist() )
2705 0 : nVal |= 0x04;
2706 0 : rVal <<= nVal;
2707 0 : break;
2708 : case MID_VALIDFLAGS:
2709 0 : bIntMember = true;
2710 0 : nVal = nValidFlags;
2711 0 : rVal <<= nVal;
2712 0 : break;
2713 : case MID_DISTANCE:
2714 0 : bIntMember = true;
2715 0 : rVal <<= (sal_Int32)(bConvert ? convertTwipToMm100(GetDefDist()) : GetDefDist());
2716 0 : break;
2717 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
2718 : }
2719 :
2720 0 : if( !bIntMember )
2721 0 : rVal <<= aRetLine;
2722 :
2723 0 : return true;
2724 : }
2725 :
2726 :
2727 :
2728 0 : bool SvxBoxInfoItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
2729 : {
2730 0 : bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
2731 0 : nMemberId &= ~CONVERT_TWIPS;
2732 : bool bRet;
2733 0 : switch(nMemberId)
2734 : {
2735 : case 0:
2736 : {
2737 0 : ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > aSeq;
2738 0 : if (( rVal >>= aSeq ) && ( aSeq.getLength() == 5 ))
2739 : {
2740 : // 2 BorderLines, flags, valid flags and distance
2741 0 : if (!lcl_setLine(aSeq[0], *this, BOXINFO_LINE_HORI, bConvert))
2742 0 : return false;
2743 0 : if (!lcl_setLine(aSeq[1], *this, BOXINFO_LINE_VERT, bConvert))
2744 0 : return false;
2745 :
2746 0 : sal_Int16 nFlags( 0 );
2747 0 : sal_Int32 nVal( 0 );
2748 0 : if ( aSeq[2] >>= nFlags )
2749 : {
2750 0 : SetTable ( ( nFlags & 0x01 ) != 0 );
2751 0 : SetDist ( ( nFlags & 0x02 ) != 0 );
2752 0 : SetMinDist( ( nFlags & 0x04 ) != 0 );
2753 : }
2754 : else
2755 0 : return false;
2756 0 : if ( aSeq[3] >>= nFlags )
2757 0 : nValidFlags = (sal_uInt8)nFlags;
2758 : else
2759 0 : return false;
2760 0 : if (( aSeq[4] >>= nVal ) && ( nVal >= 0 ))
2761 : {
2762 0 : if( bConvert )
2763 0 : nVal = convertMm100ToTwip(nVal);
2764 0 : SetDefDist( (sal_uInt16)nVal );
2765 : }
2766 : }
2767 0 : return true;
2768 : }
2769 :
2770 : case MID_HORIZONTAL:
2771 : case MID_VERTICAL:
2772 : {
2773 0 : if( !rVal.hasValue() )
2774 0 : return false;
2775 :
2776 0 : table::BorderLine2 aBorderLine;
2777 0 : if( lcl_extractBorderLine(rVal, aBorderLine) )
2778 : {
2779 : // usual struct
2780 : }
2781 0 : else if (rVal.getValueTypeClass() == uno::TypeClass_SEQUENCE )
2782 : {
2783 : // serialization for basic macro recording
2784 0 : uno::Reference < script::XTypeConverter > xConverter( script::Converter::create(::comphelper::getProcessComponentContext()) );
2785 0 : uno::Any aNew;
2786 0 : uno::Sequence < uno::Any > aSeq;
2787 0 : try { aNew = xConverter->convertTo( rVal, ::getCppuType((const uno::Sequence < uno::Any >*)0) ); }
2788 0 : catch (const uno::Exception&) {}
2789 :
2790 0 : if ((aNew >>= aSeq) &&
2791 0 : aSeq.getLength() >= 4 && aSeq.getLength() <= 6)
2792 : {
2793 0 : sal_Int32 nVal = 0;
2794 0 : if ( aSeq[0] >>= nVal )
2795 0 : aBorderLine.Color = nVal;
2796 0 : if ( aSeq[1] >>= nVal )
2797 0 : aBorderLine.InnerLineWidth = (sal_Int16) nVal;
2798 0 : if ( aSeq[2] >>= nVal )
2799 0 : aBorderLine.OuterLineWidth = (sal_Int16) nVal;
2800 0 : if ( aSeq[3] >>= nVal )
2801 0 : aBorderLine.LineDistance = (sal_Int16) nVal;
2802 0 : if (aSeq.getLength() >= 5) // fdo#40874 added fields
2803 : {
2804 0 : if (aSeq[4] >>= nVal)
2805 : {
2806 0 : aBorderLine.LineStyle = nVal;
2807 : }
2808 0 : if (aSeq.getLength() >= 6)
2809 : {
2810 0 : if (aSeq[5] >>= nVal)
2811 : {
2812 0 : aBorderLine.LineWidth = nVal;
2813 : }
2814 : }
2815 : }
2816 : }
2817 : else
2818 0 : return false;
2819 : }
2820 0 : else if (rVal.getValueType() == ::getCppuType((const ::com::sun::star::uno::Sequence < sal_Int16 >*)0) )
2821 : {
2822 : // serialization for basic macro recording
2823 0 : ::com::sun::star::uno::Sequence < sal_Int16 > aSeq;
2824 0 : rVal >>= aSeq;
2825 0 : if (aSeq.getLength() >= 4 && aSeq.getLength() <= 6)
2826 : {
2827 0 : aBorderLine.Color = aSeq[0];
2828 0 : aBorderLine.InnerLineWidth = aSeq[1];
2829 0 : aBorderLine.OuterLineWidth = aSeq[2];
2830 0 : aBorderLine.LineDistance = aSeq[3];
2831 0 : if (aSeq.getLength() >= 5) // fdo#40874 added fields
2832 : {
2833 0 : aBorderLine.LineStyle = aSeq[4];
2834 0 : if (aSeq.getLength() >= 6)
2835 : {
2836 0 : aBorderLine.LineWidth = aSeq[5];
2837 : }
2838 : }
2839 : }
2840 : else
2841 0 : return false;
2842 : }
2843 : else
2844 0 : return false;
2845 :
2846 0 : SvxBorderLine aLine;
2847 0 : bool bSet = SvxBoxItem::LineToSvxLine(aBorderLine, aLine, bConvert);
2848 0 : if ( bSet )
2849 0 : SetLine( &aLine, nMemberId == MID_HORIZONTAL ? BOXINFO_LINE_HORI : BOXINFO_LINE_VERT );
2850 0 : break;
2851 : }
2852 : case MID_FLAGS:
2853 : {
2854 0 : sal_Int16 nFlags = sal_Int16();
2855 0 : bRet = (rVal >>= nFlags);
2856 0 : if ( bRet )
2857 : {
2858 0 : SetTable ( ( nFlags & 0x01 ) != 0 );
2859 0 : SetDist ( ( nFlags & 0x02 ) != 0 );
2860 0 : SetMinDist( ( nFlags & 0x04 ) != 0 );
2861 : }
2862 :
2863 0 : break;
2864 : }
2865 : case MID_VALIDFLAGS:
2866 : {
2867 0 : sal_Int16 nFlags = sal_Int16();
2868 0 : bRet = (rVal >>= nFlags);
2869 0 : if ( bRet )
2870 0 : nValidFlags = (sal_uInt8)nFlags;
2871 0 : break;
2872 : }
2873 : case MID_DISTANCE:
2874 : {
2875 0 : sal_Int32 nVal = 0;
2876 0 : bRet = (rVal >>= nVal);
2877 0 : if ( bRet && nVal>=0 )
2878 : {
2879 0 : if( bConvert )
2880 0 : nVal = convertMm100ToTwip(nVal);
2881 0 : SetDefDist( (sal_uInt16)nVal );
2882 : }
2883 0 : break;
2884 : }
2885 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
2886 : }
2887 :
2888 0 : return true;
2889 : }
2890 :
2891 : // class SvxFmtBreakItem -------------------------------------------------
2892 :
2893 3802 : bool SvxFmtBreakItem::operator==( const SfxPoolItem& rAttr ) const
2894 : {
2895 : DBG_ASSERT( SfxPoolItem::operator==( rAttr ), "unequal types" );
2896 :
2897 3802 : return GetValue() == static_cast<const SvxFmtBreakItem&>( rAttr ).GetValue();
2898 : }
2899 :
2900 :
2901 :
2902 0 : bool SvxFmtBreakItem::GetPresentation
2903 : (
2904 : SfxItemPresentation /*ePres*/,
2905 : SfxMapUnit /*eCoreUnit*/,
2906 : SfxMapUnit /*ePresUnit*/,
2907 : OUString& rText, const IntlWrapper *
2908 : ) const
2909 : {
2910 0 : rText = GetValueTextByPos( GetValue() );
2911 0 : return true;
2912 : }
2913 :
2914 :
2915 :
2916 0 : OUString SvxFmtBreakItem::GetValueTextByPos( sal_uInt16 nPos ) const
2917 : {
2918 : DBG_ASSERT( nPos < SVX_BREAK_END, "enum overflow!" );
2919 0 : return EE_RESSTR(RID_SVXITEMS_BREAK_BEGIN + nPos);
2920 : }
2921 :
2922 :
2923 54 : bool SvxFmtBreakItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
2924 : {
2925 54 : style::BreakType eBreak = style::BreakType_NONE;
2926 54 : switch ( (SvxBreak)GetValue() )
2927 : {
2928 8 : case SVX_BREAK_COLUMN_BEFORE: eBreak = style::BreakType_COLUMN_BEFORE; break;
2929 2 : case SVX_BREAK_COLUMN_AFTER: eBreak = style::BreakType_COLUMN_AFTER ; break;
2930 0 : case SVX_BREAK_COLUMN_BOTH: eBreak = style::BreakType_COLUMN_BOTH ; break;
2931 18 : case SVX_BREAK_PAGE_BEFORE: eBreak = style::BreakType_PAGE_BEFORE ; break;
2932 0 : case SVX_BREAK_PAGE_AFTER: eBreak = style::BreakType_PAGE_AFTER ; break;
2933 0 : case SVX_BREAK_PAGE_BOTH: eBreak = style::BreakType_PAGE_BOTH ; break;
2934 : default: ;//prevent warning
2935 : }
2936 54 : rVal <<= eBreak;
2937 54 : return true;
2938 : }
2939 :
2940 1172 : bool SvxFmtBreakItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ )
2941 : {
2942 : style::BreakType nBreak;
2943 :
2944 1172 : if(!(rVal >>= nBreak))
2945 : {
2946 0 : sal_Int32 nValue = 0;
2947 0 : if(!(rVal >>= nValue))
2948 0 : return false;
2949 :
2950 0 : nBreak = (style::BreakType) nValue;
2951 : }
2952 :
2953 1172 : SvxBreak eBreak = SVX_BREAK_NONE;
2954 1172 : switch( nBreak )
2955 : {
2956 306 : case style::BreakType_COLUMN_BEFORE: eBreak = SVX_BREAK_COLUMN_BEFORE; break;
2957 2 : case style::BreakType_COLUMN_AFTER: eBreak = SVX_BREAK_COLUMN_AFTER; break;
2958 0 : case style::BreakType_COLUMN_BOTH: eBreak = SVX_BREAK_COLUMN_BOTH; break;
2959 798 : case style::BreakType_PAGE_BEFORE: eBreak = SVX_BREAK_PAGE_BEFORE; break;
2960 0 : case style::BreakType_PAGE_AFTER: eBreak = SVX_BREAK_PAGE_AFTER; break;
2961 0 : case style::BreakType_PAGE_BOTH: eBreak = SVX_BREAK_PAGE_BOTH; break;
2962 : default: ;//prevent warning
2963 : }
2964 1172 : SetValue((sal_uInt16) eBreak);
2965 :
2966 1172 : return true;
2967 : }
2968 :
2969 :
2970 :
2971 2326 : SfxPoolItem* SvxFmtBreakItem::Clone( SfxItemPool* ) const
2972 : {
2973 2326 : return new SvxFmtBreakItem( *this );
2974 : }
2975 :
2976 :
2977 :
2978 0 : SvStream& SvxFmtBreakItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const
2979 : {
2980 0 : rStrm.WriteSChar( GetValue() );
2981 0 : if( FMTBREAK_NOAUTO > nItemVersion )
2982 0 : rStrm.WriteSChar( 0x01 );
2983 0 : return rStrm;
2984 : }
2985 :
2986 :
2987 :
2988 0 : sal_uInt16 SvxFmtBreakItem::GetVersion( sal_uInt16 nFFVer ) const
2989 : {
2990 : DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer ||
2991 : SOFFICE_FILEFORMAT_40==nFFVer ||
2992 : SOFFICE_FILEFORMAT_50==nFFVer,
2993 : "SvxFmtBreakItem: Is there a new file format? ");
2994 : return SOFFICE_FILEFORMAT_31==nFFVer ||
2995 0 : SOFFICE_FILEFORMAT_40==nFFVer ? 0 : FMTBREAK_NOAUTO;
2996 : }
2997 :
2998 :
2999 :
3000 0 : SfxPoolItem* SvxFmtBreakItem::Create( SvStream& rStrm, sal_uInt16 nVersion ) const
3001 : {
3002 : sal_Int8 eBreak, bDummy;
3003 0 : rStrm.ReadSChar( eBreak );
3004 0 : if( FMTBREAK_NOAUTO > nVersion )
3005 0 : rStrm.ReadSChar( bDummy );
3006 0 : return new SvxFmtBreakItem( (const SvxBreak)eBreak, Which() );
3007 : }
3008 :
3009 :
3010 :
3011 0 : sal_uInt16 SvxFmtBreakItem::GetValueCount() const
3012 : {
3013 0 : return SVX_BREAK_END; // SVX_BREAK_PAGE_BOTH + 1
3014 : }
3015 :
3016 : // class SvxFmtKeepItem -------------------------------------------------
3017 :
3018 11578 : SfxPoolItem* SvxFmtKeepItem::Clone( SfxItemPool* ) const
3019 : {
3020 11578 : return new SvxFmtKeepItem( *this );
3021 : }
3022 :
3023 :
3024 :
3025 0 : SvStream& SvxFmtKeepItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
3026 : {
3027 0 : rStrm.WriteSChar( (sal_Int8)GetValue() );
3028 0 : return rStrm;
3029 : }
3030 :
3031 :
3032 :
3033 0 : SfxPoolItem* SvxFmtKeepItem::Create( SvStream& rStrm, sal_uInt16 ) const
3034 : {
3035 : sal_Int8 bIsKeep;
3036 0 : rStrm.ReadSChar( bIsKeep );
3037 0 : return new SvxFmtKeepItem( bIsKeep != 0, Which() );
3038 : }
3039 :
3040 :
3041 :
3042 0 : bool SvxFmtKeepItem::GetPresentation
3043 : (
3044 : SfxItemPresentation /*ePres*/,
3045 : SfxMapUnit /*eCoreUnit*/,
3046 : SfxMapUnit /*ePresUnit*/,
3047 : OUString& rText, const IntlWrapper *
3048 : ) const
3049 : {
3050 0 : sal_uInt16 nId = RID_SVXITEMS_FMTKEEP_FALSE;
3051 :
3052 0 : if ( GetValue() )
3053 0 : nId = RID_SVXITEMS_FMTKEEP_TRUE;
3054 0 : rText = EE_RESSTR(nId);
3055 0 : return true;
3056 : }
3057 :
3058 : // class SvxLineItem ------------------------------------------------------
3059 :
3060 28556 : SvxLineItem::SvxLineItem( const sal_uInt16 nId ) :
3061 :
3062 : SfxPoolItem ( nId ),
3063 :
3064 28556 : pLine( NULL )
3065 : {
3066 28556 : }
3067 :
3068 :
3069 :
3070 919 : SvxLineItem::SvxLineItem( const SvxLineItem& rCpy ) :
3071 :
3072 919 : SfxPoolItem ( rCpy )
3073 : {
3074 919 : pLine = rCpy.GetLine() ? new SvxBorderLine( *rCpy.GetLine() ) : 0;
3075 919 : }
3076 :
3077 :
3078 :
3079 79587 : SvxLineItem::~SvxLineItem()
3080 : {
3081 28917 : delete pLine;
3082 50670 : }
3083 :
3084 :
3085 :
3086 1024 : SvxLineItem& SvxLineItem::operator=( const SvxLineItem& rLine )
3087 : {
3088 1024 : SetLine( rLine.GetLine() );
3089 :
3090 1024 : return *this;
3091 : }
3092 :
3093 :
3094 :
3095 791605 : bool SvxLineItem::operator==( const SfxPoolItem& rAttr ) const
3096 : {
3097 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
3098 :
3099 791605 : return CmpBrdLn( pLine, static_cast<const SvxLineItem&>(rAttr).GetLine() );
3100 : }
3101 :
3102 :
3103 :
3104 791 : SfxPoolItem* SvxLineItem::Clone( SfxItemPool* ) const
3105 : {
3106 791 : return new SvxLineItem( *this );
3107 : }
3108 :
3109 396 : bool SvxLineItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemId ) const
3110 : {
3111 396 : bool bConvert = 0!=(nMemId&CONVERT_TWIPS);
3112 396 : nMemId &= ~CONVERT_TWIPS;
3113 396 : if ( nMemId == 0 )
3114 : {
3115 396 : rVal <<= uno::makeAny( SvxBoxItem::SvxLineToLine(pLine, bConvert) );
3116 396 : return true;
3117 : }
3118 0 : else if ( pLine )
3119 : {
3120 0 : switch ( nMemId )
3121 : {
3122 0 : case MID_FG_COLOR: rVal <<= sal_Int32(pLine->GetColor().GetColor()); break;
3123 0 : case MID_OUTER_WIDTH: rVal <<= sal_Int32(pLine->GetOutWidth()); break;
3124 0 : case MID_INNER_WIDTH: rVal <<= sal_Int32(pLine->GetInWidth( )); break;
3125 0 : case MID_DISTANCE: rVal <<= sal_Int32(pLine->GetDistance()); break;
3126 : default:
3127 : OSL_FAIL( "Wrong MemberId" );
3128 0 : return false;
3129 : }
3130 : }
3131 :
3132 0 : return true;
3133 : }
3134 :
3135 :
3136 :
3137 340 : bool SvxLineItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemId )
3138 : {
3139 340 : bool bConvert = 0!=(nMemId&CONVERT_TWIPS);
3140 340 : nMemId &= ~CONVERT_TWIPS;
3141 340 : sal_Int32 nVal = 0;
3142 340 : if ( nMemId == 0 )
3143 : {
3144 340 : table::BorderLine2 aLine;
3145 340 : if ( lcl_extractBorderLine(rVal, aLine) )
3146 : {
3147 340 : if ( !pLine )
3148 340 : pLine = new SvxBorderLine;
3149 340 : if( !SvxBoxItem::LineToSvxLine(aLine, *pLine, bConvert) )
3150 336 : DELETEZ( pLine );
3151 340 : return true;
3152 : }
3153 0 : return false;
3154 : }
3155 0 : else if ( rVal >>= nVal )
3156 : {
3157 0 : if ( !pLine )
3158 0 : pLine = new SvxBorderLine;
3159 :
3160 0 : switch ( nMemId )
3161 : {
3162 0 : case MID_FG_COLOR: pLine->SetColor( Color(nVal) ); break;
3163 : case MID_LINE_STYLE:
3164 0 : pLine->SetBorderLineStyle(static_cast<SvxBorderStyle>(nVal));
3165 0 : break;
3166 : default:
3167 : OSL_FAIL( "Wrong MemberId" );
3168 0 : return false;
3169 : }
3170 :
3171 0 : return true;
3172 : }
3173 :
3174 0 : return false;
3175 : }
3176 :
3177 :
3178 :
3179 0 : bool SvxLineItem::GetPresentation
3180 : (
3181 : SfxItemPresentation ePres,
3182 : SfxMapUnit eCoreUnit,
3183 : SfxMapUnit ePresUnit,
3184 : OUString& rText, const IntlWrapper *pIntl
3185 : ) const
3186 : {
3187 0 : rText = OUString();
3188 :
3189 0 : if ( pLine )
3190 0 : rText = pLine->GetValueString( eCoreUnit, ePresUnit, pIntl,
3191 0 : (SFX_ITEM_PRESENTATION_COMPLETE == ePres) );
3192 0 : return true;
3193 : }
3194 :
3195 :
3196 :
3197 2624 : SvStream& SvxLineItem::Store( SvStream& rStrm , sal_uInt16 /*nItemVersion*/ ) const
3198 : {
3199 2624 : if( pLine )
3200 : {
3201 0 : WriteColor( rStrm, pLine->GetColor() );
3202 0 : rStrm.WriteInt16( pLine->GetOutWidth() )
3203 0 : .WriteInt16( pLine->GetInWidth() )
3204 0 : .WriteInt16( pLine->GetDistance() );
3205 : }
3206 : else
3207 : {
3208 2624 : WriteColor( rStrm, Color() );
3209 2624 : rStrm.WriteInt16( 0 ).WriteInt16( 0 ).WriteInt16( 0 );
3210 : }
3211 2624 : return rStrm;
3212 : }
3213 :
3214 :
3215 :
3216 0 : bool SvxLineItem::ScaleMetrics( long nMult, long nDiv )
3217 : {
3218 0 : if ( pLine ) pLine->ScaleMetrics( nMult, nDiv );
3219 0 : return true;
3220 : }
3221 :
3222 :
3223 :
3224 0 : bool SvxLineItem::HasMetrics() const
3225 : {
3226 0 : return true;
3227 : }
3228 :
3229 :
3230 :
3231 1024 : SfxPoolItem* SvxLineItem::Create( SvStream& rStrm, sal_uInt16 ) const
3232 : {
3233 1024 : SvxLineItem* _pLine = new SvxLineItem( Which() );
3234 : short nOutline, nInline, nDistance;
3235 1024 : Color aColor;
3236 :
3237 1024 : ReadColor( rStrm, aColor ).ReadInt16( nOutline ).ReadInt16( nInline ).ReadInt16( nDistance );
3238 1024 : if( nOutline )
3239 : {
3240 0 : SvxBorderLine aLine( &aColor );
3241 0 : aLine.GuessLinesWidths(css::table::BorderLineStyle::NONE, nOutline, nInline, nDistance);
3242 0 : _pLine->SetLine( &aLine );
3243 : }
3244 1024 : return _pLine;
3245 : }
3246 :
3247 :
3248 :
3249 1279 : void SvxLineItem::SetLine( const SvxBorderLine* pNew )
3250 : {
3251 1279 : delete pLine;
3252 1279 : pLine = pNew ? new SvxBorderLine( *pNew ) : 0;
3253 1279 : }
3254 :
3255 : // class SvxBrushItem ----------------------------------------------------
3256 :
3257 : #define LOAD_GRAPHIC ((sal_uInt16)0x0001)
3258 : #define LOAD_LINK ((sal_uInt16)0x0002)
3259 : #define LOAD_FILTER ((sal_uInt16)0x0004)
3260 :
3261 : // class SvxBrushItem_Impl -----------------------------------------------
3262 :
3263 : class SvxBrushItem_Impl
3264 : {
3265 : public:
3266 : GraphicObject* pGraphicObject;
3267 : sal_Int8 nGraphicTransparency; //contains a percentage value which is
3268 : //copied to the GraphicObject when necessary
3269 : Link aDoneLink;
3270 : SvStream* pStream;
3271 :
3272 98975 : SvxBrushItem_Impl( GraphicObject* p ) : pGraphicObject( p ), nGraphicTransparency(0), pStream(0) {}
3273 : };
3274 :
3275 :
3276 :
3277 4094 : void SvxBrushItem::SetDoneLink( const Link& rLink )
3278 : {
3279 4094 : pImpl->aDoneLink = rLink;
3280 4094 : }
3281 :
3282 :
3283 :
3284 9279 : SvxBrushItem::SvxBrushItem( sal_uInt16 _nWhich ) :
3285 :
3286 : SfxPoolItem( _nWhich ),
3287 :
3288 : aColor ( COL_TRANSPARENT ),
3289 : nShadingValue ( ShadingPattern::CLEAR ),
3290 9279 : pImpl ( new SvxBrushItem_Impl( 0 ) ),
3291 : maStrLink (),
3292 : maStrFilter (),
3293 : eGraphicPos ( GPOS_NONE ),
3294 18558 : bLoadAgain ( true )
3295 :
3296 : {
3297 9279 : }
3298 :
3299 :
3300 :
3301 14054 : SvxBrushItem::SvxBrushItem( const Color& rColor, sal_uInt16 _nWhich) :
3302 :
3303 : SfxPoolItem( _nWhich ),
3304 :
3305 : aColor ( rColor ),
3306 : nShadingValue ( ShadingPattern::CLEAR ),
3307 14054 : pImpl ( new SvxBrushItem_Impl( 0 ) ),
3308 : maStrLink (),
3309 : maStrFilter (),
3310 : eGraphicPos ( GPOS_NONE ),
3311 28108 : bLoadAgain ( true )
3312 :
3313 : {
3314 14054 : }
3315 :
3316 :
3317 :
3318 22 : SvxBrushItem::SvxBrushItem( const Graphic& rGraphic, SvxGraphicPosition ePos,
3319 : sal_uInt16 _nWhich ) :
3320 :
3321 : SfxPoolItem( _nWhich ),
3322 :
3323 : aColor ( COL_TRANSPARENT ),
3324 : nShadingValue ( ShadingPattern::CLEAR ),
3325 44 : pImpl ( new SvxBrushItem_Impl( new GraphicObject( rGraphic ) ) ),
3326 : maStrLink (),
3327 : maStrFilter (),
3328 : eGraphicPos ( ( GPOS_NONE != ePos ) ? ePos : GPOS_MM ),
3329 66 : bLoadAgain ( true )
3330 :
3331 : {
3332 : DBG_ASSERT( GPOS_NONE != ePos, "SvxBrushItem-Ctor with GPOS_NONE == ePos" );
3333 22 : }
3334 :
3335 :
3336 :
3337 0 : SvxBrushItem::SvxBrushItem( const GraphicObject& rGraphicObj,
3338 : SvxGraphicPosition ePos, sal_uInt16 _nWhich ) :
3339 :
3340 : SfxPoolItem( _nWhich ),
3341 :
3342 : aColor ( COL_TRANSPARENT ),
3343 : nShadingValue ( ShadingPattern::CLEAR ),
3344 0 : pImpl ( new SvxBrushItem_Impl( new GraphicObject( rGraphicObj ) ) ),
3345 : maStrLink (),
3346 : maStrFilter (),
3347 : eGraphicPos ( ( GPOS_NONE != ePos ) ? ePos : GPOS_MM ),
3348 0 : bLoadAgain ( true )
3349 :
3350 : {
3351 : DBG_ASSERT( GPOS_NONE != ePos, "SvxBrushItem-Ctor with GPOS_NONE == ePos" );
3352 0 : }
3353 :
3354 :
3355 :
3356 78 : SvxBrushItem::SvxBrushItem(
3357 : const OUString& rLink, const OUString& rFilter,
3358 : SvxGraphicPosition ePos, sal_uInt16 _nWhich ) :
3359 :
3360 : SfxPoolItem( _nWhich ),
3361 :
3362 : aColor ( COL_TRANSPARENT ),
3363 : nShadingValue ( ShadingPattern::CLEAR ),
3364 78 : pImpl ( new SvxBrushItem_Impl( NULL ) ),
3365 : maStrLink ( rLink ),
3366 : maStrFilter ( rFilter ),
3367 : eGraphicPos ( ( GPOS_NONE != ePos ) ? ePos : GPOS_MM ),
3368 156 : bLoadAgain ( true )
3369 :
3370 : {
3371 : DBG_ASSERT( GPOS_NONE != ePos, "SvxBrushItem-Ctor with GPOS_NONE == ePos" );
3372 78 : }
3373 :
3374 :
3375 :
3376 512 : SvxBrushItem::SvxBrushItem( SvStream& rStream, sal_uInt16 nVersion,
3377 : sal_uInt16 _nWhich )
3378 : : SfxPoolItem( _nWhich )
3379 : , aColor ( COL_TRANSPARENT )
3380 : , nShadingValue ( ShadingPattern::CLEAR )
3381 512 : , pImpl ( new SvxBrushItem_Impl( NULL ) )
3382 : , maStrLink ()
3383 : , maStrFilter ()
3384 : , eGraphicPos ( GPOS_NONE )
3385 1024 : , bLoadAgain (false)
3386 : {
3387 : bool bTrans;
3388 512 : Color aTempColor;
3389 512 : Color aTempFillColor;
3390 : sal_Int8 nStyle;
3391 :
3392 512 : rStream.ReadCharAsBool( bTrans );
3393 512 : ReadColor( rStream, aTempColor );
3394 512 : ReadColor( rStream, aTempFillColor );
3395 512 : rStream.ReadSChar( nStyle );
3396 :
3397 512 : switch ( nStyle )
3398 : {
3399 : case 8://BRUSH_25:
3400 : {
3401 0 : sal_uInt32 nRed = aTempColor.GetRed();
3402 0 : sal_uInt32 nGreen = aTempColor.GetGreen();
3403 0 : sal_uInt32 nBlue = aTempColor.GetBlue();
3404 0 : nRed += (sal_uInt32)(aTempFillColor.GetRed())*2;
3405 0 : nGreen += (sal_uInt32)(aTempFillColor.GetGreen())*2;
3406 0 : nBlue += (sal_uInt32)(aTempFillColor.GetBlue())*2;
3407 0 : aColor = Color( (sal_Int8)(nRed/3), (sal_Int8)(nGreen/3), (sal_Int8)(nBlue/3) );
3408 : }
3409 0 : break;
3410 :
3411 : case 9://BRUSH_50:
3412 : {
3413 0 : sal_uInt32 nRed = aTempColor.GetRed();
3414 0 : sal_uInt32 nGreen = aTempColor.GetGreen();
3415 0 : sal_uInt32 nBlue = aTempColor.GetBlue();
3416 0 : nRed += (sal_uInt32)(aTempFillColor.GetRed());
3417 0 : nGreen += (sal_uInt32)(aTempFillColor.GetGreen());
3418 0 : nBlue += (sal_uInt32)(aTempFillColor.GetBlue());
3419 0 : aColor = Color( (sal_Int8)(nRed/2), (sal_Int8)(nGreen/2), (sal_Int8)(nBlue/2) );
3420 : }
3421 0 : break;
3422 :
3423 : case 10://BRUSH_75:
3424 : {
3425 0 : sal_uInt32 nRed = aTempColor.GetRed()*2;
3426 0 : sal_uInt32 nGreen = aTempColor.GetGreen()*2;
3427 0 : sal_uInt32 nBlue = aTempColor.GetBlue()*2;
3428 0 : nRed += (sal_uInt32)(aTempFillColor.GetRed());
3429 0 : nGreen += (sal_uInt32)(aTempFillColor.GetGreen());
3430 0 : nBlue += (sal_uInt32)(aTempFillColor.GetBlue());
3431 0 : aColor = Color( (sal_Int8)(nRed/3), (sal_Int8)(nGreen/3), (sal_Int8)(nBlue/3) );
3432 : }
3433 0 : break;
3434 :
3435 : case 0://BRUSH_NULL:
3436 8 : aColor = Color( COL_TRANSPARENT );
3437 8 : break;
3438 :
3439 : default:
3440 504 : aColor = aTempColor;
3441 : }
3442 :
3443 512 : if ( nVersion >= BRUSH_GRAPHIC_VERSION )
3444 : {
3445 512 : sal_uInt16 nDoLoad = 0;
3446 : sal_Int8 nPos;
3447 :
3448 512 : rStream.ReadUInt16( nDoLoad );
3449 :
3450 512 : if ( nDoLoad & LOAD_GRAPHIC )
3451 : {
3452 0 : Graphic aGraphic;
3453 :
3454 0 : ReadGraphic( rStream, aGraphic );
3455 0 : pImpl->pGraphicObject = new GraphicObject( aGraphic );
3456 :
3457 0 : if( SVSTREAM_FILEFORMAT_ERROR == rStream.GetError() )
3458 : {
3459 0 : rStream.ResetError();
3460 : rStream.SetError( ERRCODE_SVX_GRAPHIC_WRONG_FILEFORMAT|
3461 0 : ERRCODE_WARNING_MASK );
3462 0 : }
3463 : }
3464 :
3465 512 : if ( nDoLoad & LOAD_LINK )
3466 : {
3467 : // UNICODE: rStream >> aRel;
3468 0 : OUString aRel = rStream.ReadUniOrByteString(rStream.GetStreamCharSet());
3469 :
3470 : // TODO/MBA: how can we get a BaseURL here?!
3471 : OSL_FAIL("No BaseURL!");
3472 0 : OUString aAbs = INetURLObject::GetAbsURL( "", aRel );
3473 : DBG_ASSERT( !aAbs.isEmpty(), "Invalid URL!" );
3474 0 : maStrLink = aAbs;
3475 : }
3476 :
3477 512 : if ( nDoLoad & LOAD_FILTER )
3478 : {
3479 : // UNICODE: rStream >> maStrFilter;
3480 0 : maStrFilter = rStream.ReadUniOrByteString(rStream.GetStreamCharSet());
3481 : }
3482 :
3483 512 : rStream.ReadSChar( nPos );
3484 :
3485 512 : eGraphicPos = (SvxGraphicPosition)nPos;
3486 : }
3487 512 : }
3488 :
3489 :
3490 :
3491 75030 : SvxBrushItem::SvxBrushItem( const SvxBrushItem& rItem ) :
3492 :
3493 75030 : SfxPoolItem( rItem.Which() ),
3494 : nShadingValue ( ShadingPattern::CLEAR ),
3495 75030 : pImpl ( new SvxBrushItem_Impl( NULL ) ),
3496 : maStrLink (),
3497 : maStrFilter (),
3498 : eGraphicPos ( GPOS_NONE ),
3499 150060 : bLoadAgain ( true )
3500 :
3501 : {
3502 75030 : *this = rItem;
3503 75030 : }
3504 :
3505 :
3506 :
3507 221090 : SvxBrushItem::~SvxBrushItem()
3508 : {
3509 98611 : delete pImpl->pGraphicObject;
3510 98611 : delete pImpl;
3511 122479 : }
3512 :
3513 :
3514 :
3515 1317 : sal_uInt16 SvxBrushItem::GetVersion( sal_uInt16 /*nFileVersion*/ ) const
3516 : {
3517 1317 : return BRUSH_GRAPHIC_VERSION;
3518 : }
3519 :
3520 :
3521 310 : static inline sal_Int8 lcl_PercentToTransparency(long nPercent)
3522 : {
3523 : //0xff must not be returned!
3524 310 : return sal_Int8(nPercent ? (50 + 0xfe * nPercent) / 100 : 0);
3525 : }
3526 78 : sal_Int8 SvxBrushItem::TransparencyToPercent(sal_Int32 nTrans)
3527 : {
3528 78 : return (sal_Int8)((nTrans * 100 + 127) / 254);
3529 : }
3530 :
3531 1896 : bool SvxBrushItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
3532 : {
3533 1896 : nMemberId &= ~CONVERT_TWIPS;
3534 1896 : switch( nMemberId)
3535 : {
3536 : case MID_BACK_COLOR:
3537 430 : rVal <<= (sal_Int32)( aColor.GetColor() );
3538 430 : break;
3539 : case MID_BACK_COLOR_R_G_B:
3540 28 : rVal <<= (sal_Int32)( aColor.GetRGBColor() );
3541 28 : break;
3542 : case MID_BACK_COLOR_TRANSPARENCY:
3543 34 : rVal <<= SvxBrushItem::TransparencyToPercent(aColor.GetTransparency());
3544 34 : break;
3545 : case MID_GRAPHIC_POSITION:
3546 214 : rVal <<= (style::GraphicLocation)(sal_Int16)eGraphicPos;
3547 214 : break;
3548 :
3549 : case MID_GRAPHIC:
3550 : SAL_WARN( "editeng.items", "not implemented" );
3551 0 : break;
3552 :
3553 : case MID_GRAPHIC_TRANSPARENT:
3554 316 : rVal = Bool2Any( aColor.GetTransparency() == 0xff );
3555 316 : break;
3556 :
3557 : case MID_GRAPHIC_URL:
3558 : {
3559 612 : OUString sLink;
3560 612 : if ( !maStrLink.isEmpty() )
3561 6 : sLink = maStrLink;
3562 606 : else if( pImpl->pGraphicObject )
3563 : {
3564 : OUString sPrefix(
3565 428 : UNO_NAME_GRAPHOBJ_URLPREFIX);
3566 : OUString sId(OStringToOUString(
3567 : pImpl->pGraphicObject->GetUniqueID(),
3568 856 : RTL_TEXTENCODING_ASCII_US));
3569 856 : sLink = sPrefix + sId;
3570 : }
3571 612 : rVal <<= sLink;
3572 : }
3573 612 : break;
3574 :
3575 : case MID_GRAPHIC_FILTER:
3576 : {
3577 214 : rVal <<= maStrFilter;
3578 : }
3579 214 : break;
3580 :
3581 : case MID_GRAPHIC_TRANSPARENCY:
3582 28 : rVal <<= pImpl->nGraphicTransparency;
3583 28 : break;
3584 :
3585 : case MID_SHADING_VALUE:
3586 : {
3587 20 : rVal <<= (sal_Int32)(nShadingValue);
3588 : }
3589 20 : break;
3590 : }
3591 :
3592 1896 : return true;
3593 : }
3594 :
3595 :
3596 :
3597 14470 : bool SvxBrushItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
3598 : {
3599 14470 : nMemberId &= ~CONVERT_TWIPS;
3600 14470 : switch( nMemberId)
3601 : {
3602 : case MID_BACK_COLOR:
3603 : case MID_BACK_COLOR_R_G_B:
3604 : {
3605 11148 : sal_Int32 nCol = 0;
3606 11148 : if ( !( rVal >>= nCol ) )
3607 0 : return false;
3608 11148 : if(MID_BACK_COLOR_R_G_B == nMemberId)
3609 : {
3610 22 : nCol = COLORDATA_RGB( nCol );
3611 22 : nCol += aColor.GetColor() & 0xff000000;
3612 : }
3613 11148 : aColor = Color( nCol );
3614 : }
3615 11148 : break;
3616 : case MID_BACK_COLOR_TRANSPARENCY:
3617 : {
3618 188 : sal_Int32 nTrans = 0;
3619 188 : if ( !( rVal >>= nTrans ) || nTrans < 0 || nTrans > 100 )
3620 0 : return false;
3621 188 : aColor.SetTransparency(lcl_PercentToTransparency(nTrans));
3622 : }
3623 188 : break;
3624 :
3625 : case MID_GRAPHIC_POSITION:
3626 : {
3627 : style::GraphicLocation eLocation;
3628 578 : if ( !( rVal>>=eLocation ) )
3629 : {
3630 0 : sal_Int32 nValue = 0;
3631 0 : if ( !( rVal >>= nValue ) )
3632 0 : return false;
3633 0 : eLocation = (style::GraphicLocation)nValue;
3634 : }
3635 578 : SetGraphicPos( (SvxGraphicPosition)(sal_uInt16)eLocation );
3636 : }
3637 578 : break;
3638 :
3639 : case MID_GRAPHIC:
3640 : SAL_WARN( "editeng.items", "not implemented" );
3641 0 : break;
3642 :
3643 : case MID_GRAPHIC_TRANSPARENT:
3644 898 : aColor.SetTransparency( Any2Bool( rVal ) ? 0xff : 0 );
3645 898 : break;
3646 :
3647 : case MID_GRAPHIC_URL:
3648 : {
3649 604 : if ( rVal.getValueType() == ::cppu::UnoType<OUString>::get() )
3650 : {
3651 604 : OUString sLink;
3652 604 : rVal >>= sLink;
3653 604 : if( sLink.startsWith( UNO_NAME_GRAPHOBJ_URLPKGPREFIX ) )
3654 : {
3655 : OSL_FAIL( "package urls aren't implemented" );
3656 : }
3657 604 : else if( sLink.startsWith( UNO_NAME_GRAPHOBJ_URLPREFIX ) )
3658 : {
3659 44 : maStrLink = "";
3660 : OString sId(OUStringToOString(sLink.copy( sizeof(UNO_NAME_GRAPHOBJ_URLPREFIX)-1 ),
3661 44 : RTL_TEXTENCODING_ASCII_US));
3662 44 : GraphicObject *pOldGrfObj = pImpl->pGraphicObject;
3663 44 : pImpl->pGraphicObject = new GraphicObject( sId );
3664 44 : ApplyGraphicTransparency_Impl();
3665 44 : delete pOldGrfObj;
3666 : }
3667 : else
3668 : {
3669 560 : SetGraphicLink(sLink);
3670 : }
3671 604 : if ( !sLink.isEmpty() && eGraphicPos == GPOS_NONE )
3672 6 : eGraphicPos = GPOS_MM;
3673 598 : else if( sLink.isEmpty() )
3674 554 : eGraphicPos = GPOS_NONE;
3675 : }
3676 : }
3677 604 : break;
3678 :
3679 : case MID_GRAPHIC_FILTER:
3680 : {
3681 582 : if( rVal.getValueType() == ::cppu::UnoType<OUString>::get() )
3682 : {
3683 582 : OUString sLink;
3684 582 : rVal >>= sLink;
3685 582 : SetGraphicFilter( sLink );
3686 : }
3687 : }
3688 582 : break;
3689 : case MID_GRAPHIC_TRANSPARENCY :
3690 : {
3691 4 : sal_Int32 nTmp = 0;
3692 4 : rVal >>= nTmp;
3693 4 : if(nTmp >= 0 && nTmp <= 100)
3694 : {
3695 4 : pImpl->nGraphicTransparency = sal_Int8(nTmp);
3696 4 : if(pImpl->pGraphicObject)
3697 0 : ApplyGraphicTransparency_Impl();
3698 : }
3699 : }
3700 4 : break;
3701 :
3702 : case MID_SHADING_VALUE:
3703 : {
3704 468 : sal_uInt32 nVal = 0;
3705 468 : if (!(rVal >>= nVal))
3706 0 : return false;
3707 :
3708 468 : SetShadingValue( nVal );
3709 : }
3710 468 : break;
3711 : }
3712 :
3713 14470 : return true;
3714 : }
3715 :
3716 :
3717 :
3718 0 : bool SvxBrushItem::GetPresentation
3719 : (
3720 : SfxItemPresentation /*ePres*/,
3721 : SfxMapUnit /*eCoreUnit*/,
3722 : SfxMapUnit /*ePresUnit*/,
3723 : OUString& rText, const IntlWrapper *
3724 : ) const
3725 : {
3726 0 : if ( GPOS_NONE == eGraphicPos )
3727 : {
3728 0 : rText = ::GetColorString( aColor ) + OUString(cpDelim);
3729 0 : sal_uInt16 nId = RID_SVXITEMS_TRANSPARENT_FALSE;
3730 :
3731 0 : if ( aColor.GetTransparency() )
3732 0 : nId = RID_SVXITEMS_TRANSPARENT_TRUE;
3733 0 : rText += EE_RESSTR(nId);
3734 : }
3735 : else
3736 : {
3737 0 : rText = EE_RESSTR(RID_SVXITEMS_GRAPHIC);
3738 : }
3739 :
3740 0 : return true;
3741 : }
3742 :
3743 :
3744 :
3745 77872 : SvxBrushItem& SvxBrushItem::operator=( const SvxBrushItem& rItem )
3746 : {
3747 77872 : aColor = rItem.aColor;
3748 77872 : eGraphicPos = rItem.eGraphicPos;
3749 :
3750 77872 : DELETEZ( pImpl->pGraphicObject );
3751 77872 : maStrLink = "";
3752 77872 : maStrFilter = "";
3753 :
3754 77872 : if ( GPOS_NONE != eGraphicPos )
3755 : {
3756 1634 : maStrLink = rItem.maStrLink;
3757 1634 : maStrFilter = rItem.maStrFilter;
3758 1634 : if ( rItem.pImpl->pGraphicObject )
3759 : {
3760 1562 : pImpl->pGraphicObject = new GraphicObject( *rItem.pImpl->pGraphicObject );
3761 : }
3762 : }
3763 :
3764 77872 : nShadingValue = rItem.nShadingValue;
3765 :
3766 77872 : pImpl->nGraphicTransparency = rItem.pImpl->nGraphicTransparency;
3767 77872 : return *this;
3768 : }
3769 :
3770 :
3771 :
3772 462608 : bool SvxBrushItem::operator==( const SfxPoolItem& rAttr ) const
3773 : {
3774 : DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
3775 :
3776 462608 : const SvxBrushItem& rCmp = static_cast<const SvxBrushItem&>(rAttr);
3777 875568 : bool bEqual = ( aColor == rCmp.aColor && eGraphicPos == rCmp.eGraphicPos &&
3778 875568 : pImpl->nGraphicTransparency == rCmp.pImpl->nGraphicTransparency);
3779 :
3780 462608 : if ( bEqual )
3781 : {
3782 412960 : if ( GPOS_NONE != eGraphicPos )
3783 : {
3784 1112 : bEqual = maStrLink == rCmp.maStrLink;
3785 :
3786 1112 : if ( bEqual )
3787 : {
3788 1110 : bEqual = maStrFilter == rCmp.maStrFilter;
3789 : }
3790 :
3791 1112 : if ( bEqual )
3792 : {
3793 1050 : if ( !rCmp.pImpl->pGraphicObject )
3794 0 : bEqual = !pImpl->pGraphicObject;
3795 : else
3796 2100 : bEqual = pImpl->pGraphicObject &&
3797 2100 : ( *pImpl->pGraphicObject == *rCmp.pImpl->pGraphicObject );
3798 : }
3799 : }
3800 :
3801 412960 : if (bEqual)
3802 : {
3803 412892 : bEqual = nShadingValue == rCmp.nShadingValue;
3804 : }
3805 : }
3806 :
3807 462608 : return bEqual;
3808 : }
3809 :
3810 :
3811 :
3812 17660 : SfxPoolItem* SvxBrushItem::Clone( SfxItemPool* ) const
3813 : {
3814 17660 : return new SvxBrushItem( *this );
3815 : }
3816 :
3817 :
3818 :
3819 512 : SfxPoolItem* SvxBrushItem::Create( SvStream& rStream, sal_uInt16 nVersion ) const
3820 : {
3821 512 : return new SvxBrushItem( rStream, nVersion, Which() );
3822 : }
3823 :
3824 :
3825 :
3826 1312 : SvStream& SvxBrushItem::Store( SvStream& rStream , sal_uInt16 /*nItemVersion*/ ) const
3827 : {
3828 1312 : rStream.WriteUChar( false );
3829 1312 : WriteColor( rStream, aColor );
3830 1312 : WriteColor( rStream, aColor );
3831 1312 : rStream.WriteSChar( (aColor.GetTransparency() > 0 ? 0 : 1) ); //BRUSH_NULL : BRUSH_SOLID
3832 :
3833 1312 : sal_uInt16 nDoLoad = 0;
3834 :
3835 1312 : if ( pImpl->pGraphicObject && maStrLink.isEmpty() )
3836 0 : nDoLoad |= LOAD_GRAPHIC;
3837 1312 : if ( !maStrLink.isEmpty() )
3838 0 : nDoLoad |= LOAD_LINK;
3839 1312 : if ( !maStrFilter.isEmpty() )
3840 0 : nDoLoad |= LOAD_FILTER;
3841 1312 : rStream.WriteUInt16( nDoLoad );
3842 :
3843 1312 : if ( pImpl->pGraphicObject && maStrLink.isEmpty() )
3844 0 : WriteGraphic( rStream, pImpl->pGraphicObject->GetGraphic() );
3845 1312 : if ( !maStrLink.isEmpty() )
3846 : {
3847 : OSL_FAIL("No BaseURL!");
3848 : // TODO/MBA: how to get a BaseURL?!
3849 0 : OUString aRel = INetURLObject::GetRelURL( "", maStrLink );
3850 : // UNICODE: rStream << aRel;
3851 0 : rStream.WriteUniOrByteString(aRel, rStream.GetStreamCharSet());
3852 : }
3853 1312 : if ( !maStrFilter.isEmpty() )
3854 : {
3855 : // UNICODE: rStream << maStrFilter;
3856 0 : rStream.WriteUniOrByteString(maStrFilter, rStream.GetStreamCharSet());
3857 : }
3858 1312 : rStream.WriteSChar( eGraphicPos );
3859 1312 : return rStream;
3860 : }
3861 :
3862 :
3863 :
3864 0 : void SvxBrushItem::PurgeMedium() const
3865 : {
3866 0 : DELETEZ( pImpl->pStream );
3867 0 : }
3868 :
3869 :
3870 7714 : const GraphicObject* SvxBrushItem::GetGraphicObject(OUString const & referer) const
3871 : {
3872 7714 : if ( bLoadAgain && !maStrLink.isEmpty() && !pImpl->pGraphicObject )
3873 : // when graphics already loaded, use as a cache
3874 : {
3875 14 : if (SvtSecurityOptions().isUntrustedReferer(referer)) {
3876 0 : return 0;
3877 : }
3878 14 : pImpl->pStream = utl::UcbStreamHelper::CreateStream( maStrLink, STREAM_STD_READ );
3879 14 : if( pImpl->pStream && !pImpl->pStream->GetError() )
3880 : {
3881 0 : Graphic aGraphic;
3882 : int nRes;
3883 0 : pImpl->pStream->Seek( STREAM_SEEK_TO_BEGIN );
3884 0 : nRes = GraphicFilter::GetGraphicFilter().
3885 : ImportGraphic( aGraphic, maStrLink, *pImpl->pStream,
3886 0 : GRFILTER_FORMAT_DONTKNOW, NULL, GRFILTER_I_FLAGS_DONT_SET_LOGSIZE_FOR_JPEG );
3887 :
3888 0 : if( nRes != GRFILTER_OK )
3889 : {
3890 0 : const_cast < SvxBrushItem*> (this)->bLoadAgain = false;
3891 : }
3892 : else
3893 : {
3894 0 : pImpl->pGraphicObject = new GraphicObject;
3895 0 : pImpl->pGraphicObject->SetGraphic( aGraphic );
3896 0 : const_cast < SvxBrushItem*> (this)->ApplyGraphicTransparency_Impl();
3897 0 : }
3898 : }
3899 : else
3900 : {
3901 14 : const_cast < SvxBrushItem*> (this)->bLoadAgain = false;
3902 : }
3903 : }
3904 :
3905 7714 : return pImpl->pGraphicObject;
3906 : }
3907 :
3908 : //UUUU
3909 28 : sal_Int8 SvxBrushItem::getGraphicTransparency() const
3910 : {
3911 28 : return pImpl->nGraphicTransparency;
3912 : }
3913 :
3914 : // -----------------------------------------------------------------------
3915 : //UUUU
3916 0 : void SvxBrushItem::setGraphicTransparency(sal_Int8 nNew)
3917 : {
3918 0 : if(nNew != pImpl->nGraphicTransparency)
3919 : {
3920 0 : pImpl->nGraphicTransparency = nNew;
3921 0 : ApplyGraphicTransparency_Impl();
3922 : }
3923 0 : }
3924 :
3925 : // -----------------------------------------------------------------------
3926 :
3927 :
3928 5970 : const Graphic* SvxBrushItem::GetGraphic(OUString const & referer) const
3929 : {
3930 5970 : const GraphicObject* pGrafObj = GetGraphicObject(referer);
3931 5970 : return( pGrafObj ? &( pGrafObj->GetGraphic() ) : NULL );
3932 : }
3933 :
3934 :
3935 :
3936 658 : void SvxBrushItem::SetGraphicPos( SvxGraphicPosition eNew )
3937 : {
3938 658 : eGraphicPos = eNew;
3939 :
3940 658 : if ( GPOS_NONE == eGraphicPos )
3941 : {
3942 634 : DELETEZ( pImpl->pGraphicObject );
3943 634 : maStrLink = "";
3944 634 : maStrFilter = "";
3945 : }
3946 : else
3947 : {
3948 24 : if ( !pImpl->pGraphicObject && maStrLink.isEmpty() )
3949 : {
3950 10 : pImpl->pGraphicObject = new GraphicObject; // Creating a dummy
3951 : }
3952 : }
3953 658 : }
3954 :
3955 :
3956 :
3957 78 : void SvxBrushItem::SetGraphic( const Graphic& rNew )
3958 : {
3959 78 : if ( maStrLink.isEmpty() )
3960 : {
3961 78 : if ( pImpl->pGraphicObject )
3962 38 : pImpl->pGraphicObject->SetGraphic( rNew );
3963 : else
3964 40 : pImpl->pGraphicObject = new GraphicObject( rNew );
3965 :
3966 78 : ApplyGraphicTransparency_Impl();
3967 :
3968 78 : if ( GPOS_NONE == eGraphicPos )
3969 0 : eGraphicPos = GPOS_MM; // None would be brush, then Default: middle
3970 : }
3971 : else
3972 : {
3973 : OSL_FAIL( "SetGraphic() on linked graphic! :-/" );
3974 : }
3975 78 : }
3976 :
3977 :
3978 :
3979 0 : void SvxBrushItem::SetGraphicObject( const GraphicObject& rNewObj )
3980 : {
3981 0 : if ( maStrLink.isEmpty() )
3982 : {
3983 0 : if ( pImpl->pGraphicObject )
3984 0 : *pImpl->pGraphicObject = rNewObj;
3985 : else
3986 0 : pImpl->pGraphicObject = new GraphicObject( rNewObj );
3987 :
3988 0 : ApplyGraphicTransparency_Impl();
3989 :
3990 0 : if ( GPOS_NONE == eGraphicPos )
3991 0 : eGraphicPos = GPOS_MM; // None would be brush, then Default: middle
3992 : }
3993 : else
3994 : {
3995 : OSL_FAIL( "SetGraphic() on linked graphic! :-/" );
3996 : }
3997 0 : }
3998 :
3999 :
4000 :
4001 560 : void SvxBrushItem::SetGraphicLink( const OUString& rNew )
4002 : {
4003 560 : if ( rNew.isEmpty() )
4004 554 : maStrLink = "";
4005 : else
4006 : {
4007 6 : maStrLink = rNew;
4008 6 : DELETEZ( pImpl->pGraphicObject );
4009 : }
4010 560 : }
4011 :
4012 :
4013 :
4014 582 : void SvxBrushItem::SetGraphicFilter( const OUString& rNew )
4015 : {
4016 582 : maStrFilter = rNew;
4017 582 : }
4018 :
4019 468 : void SvxBrushItem::SetShadingValue( const sal_uInt32 nNew )
4020 : {
4021 468 : nShadingValue = nNew;
4022 468 : }
4023 :
4024 : //static
4025 0 : SvxGraphicPosition SvxBrushItem::WallpaperStyle2GraphicPos( WallpaperStyle eStyle )
4026 : {
4027 : SvxGraphicPosition eResult;
4028 : // The switch is not the fastest, but the safest
4029 0 : switch( eStyle )
4030 : {
4031 0 : case WALLPAPER_NULL: eResult = GPOS_NONE; break;
4032 0 : case WALLPAPER_TILE: eResult = GPOS_TILED; break;
4033 0 : case WALLPAPER_CENTER: eResult = GPOS_MM; break;
4034 0 : case WALLPAPER_SCALE: eResult = GPOS_AREA; break;
4035 0 : case WALLPAPER_TOPLEFT: eResult = GPOS_LT; break;
4036 0 : case WALLPAPER_TOP: eResult = GPOS_MT; break;
4037 0 : case WALLPAPER_TOPRIGHT: eResult = GPOS_RT; break;
4038 0 : case WALLPAPER_LEFT: eResult = GPOS_LM; break;
4039 0 : case WALLPAPER_RIGHT: eResult = GPOS_RM; break;
4040 0 : case WALLPAPER_BOTTOMLEFT: eResult = GPOS_LB; break;
4041 0 : case WALLPAPER_BOTTOM: eResult = GPOS_MB; break;
4042 0 : case WALLPAPER_BOTTOMRIGHT: eResult = GPOS_RB; break;
4043 0 : default: eResult = GPOS_NONE;
4044 : }
4045 0 : return eResult;
4046 : };
4047 :
4048 : //static
4049 0 : WallpaperStyle SvxBrushItem::GraphicPos2WallpaperStyle( SvxGraphicPosition ePos )
4050 : {
4051 : WallpaperStyle eResult;
4052 0 : switch( ePos )
4053 : {
4054 0 : case GPOS_NONE: eResult = WALLPAPER_NULL; break;
4055 0 : case GPOS_TILED: eResult = WALLPAPER_TILE; break;
4056 0 : case GPOS_MM: eResult = WALLPAPER_CENTER; break;
4057 0 : case GPOS_AREA: eResult = WALLPAPER_SCALE; break;
4058 0 : case GPOS_LT: eResult = WALLPAPER_TOPLEFT; break;
4059 0 : case GPOS_MT: eResult = WALLPAPER_TOP; break;
4060 0 : case GPOS_RT: eResult = WALLPAPER_TOPRIGHT; break;
4061 0 : case GPOS_LM: eResult = WALLPAPER_LEFT; break;
4062 0 : case GPOS_RM: eResult = WALLPAPER_RIGHT; break;
4063 0 : case GPOS_LB: eResult = WALLPAPER_BOTTOMLEFT; break;
4064 0 : case GPOS_MB: eResult = WALLPAPER_BOTTOM; break;
4065 0 : case GPOS_RB: eResult = WALLPAPER_BOTTOMRIGHT; break;
4066 0 : default: eResult = WALLPAPER_NULL;
4067 : }
4068 0 : return eResult;
4069 : }
4070 :
4071 0 : SvxBrushItem::SvxBrushItem( const CntWallpaperItem& rItem, sal_uInt16 _nWhich ) :
4072 : SfxPoolItem ( _nWhich ),
4073 : nShadingValue ( ShadingPattern::CLEAR ),
4074 0 : pImpl ( new SvxBrushItem_Impl( 0 ) ),
4075 : maStrLink (),
4076 : maStrFilter (),
4077 0 : bLoadAgain ( true )
4078 : {
4079 0 : aColor = rItem.GetColor();
4080 :
4081 0 : if (!rItem.GetBitmapURL().isEmpty())
4082 : {
4083 0 : maStrLink = rItem.GetBitmapURL();
4084 0 : SetGraphicPos( WallpaperStyle2GraphicPos((WallpaperStyle)rItem.GetStyle() ) );
4085 : }
4086 : else
4087 : {
4088 0 : SetGraphicPos( GPOS_NONE );
4089 : }
4090 0 : }
4091 :
4092 122 : void SvxBrushItem::ApplyGraphicTransparency_Impl()
4093 : {
4094 : DBG_ASSERT(pImpl->pGraphicObject, "no GraphicObject available" );
4095 122 : if(pImpl->pGraphicObject)
4096 : {
4097 122 : GraphicAttr aAttr(pImpl->pGraphicObject->GetAttr());
4098 : aAttr.SetTransparency(lcl_PercentToTransparency(
4099 122 : pImpl->nGraphicTransparency));
4100 122 : pImpl->pGraphicObject->SetAttr(aAttr);
4101 : }
4102 122 : }
4103 :
4104 : // class SvxFrameDirectionItem ----------------------------------------------
4105 :
4106 52435 : SvxFrameDirectionItem::SvxFrameDirectionItem( SvxFrameDirection nValue ,
4107 : sal_uInt16 _nWhich )
4108 52435 : : SfxUInt16Item( _nWhich, (sal_uInt16)nValue )
4109 : {
4110 52435 : }
4111 :
4112 208861 : SvxFrameDirectionItem::~SvxFrameDirectionItem()
4113 : {
4114 208861 : }
4115 :
4116 127729 : bool SvxFrameDirectionItem::operator==( const SfxPoolItem& rCmp ) const
4117 : {
4118 : DBG_ASSERT( SfxPoolItem::operator==(rCmp), "unequal types" );
4119 :
4120 127729 : return GetValue() == static_cast<const SvxFrameDirectionItem&>(rCmp).GetValue();
4121 : }
4122 :
4123 77078 : SfxPoolItem* SvxFrameDirectionItem::Clone( SfxItemPool * ) const
4124 : {
4125 77078 : return new SvxFrameDirectionItem( *this );
4126 : }
4127 :
4128 0 : SfxPoolItem* SvxFrameDirectionItem::Create( SvStream & rStrm, sal_uInt16 /*nVer*/ ) const
4129 : {
4130 : sal_uInt16 nValue;
4131 0 : rStrm.ReadUInt16( nValue );
4132 0 : return new SvxFrameDirectionItem( (SvxFrameDirection)nValue, Which() );
4133 : }
4134 :
4135 632 : SvStream& SvxFrameDirectionItem::Store( SvStream & rStrm, sal_uInt16 /*nIVer*/ ) const
4136 : {
4137 632 : sal_uInt16 nValue = GetValue();
4138 632 : rStrm.WriteUInt16( nValue );
4139 632 : return rStrm;
4140 : }
4141 :
4142 22064 : sal_uInt16 SvxFrameDirectionItem::GetVersion( sal_uInt16 nFVer ) const
4143 : {
4144 22064 : return SOFFICE_FILEFORMAT_50 > nFVer ? USHRT_MAX : 0;
4145 : }
4146 :
4147 0 : bool SvxFrameDirectionItem::GetPresentation(
4148 : SfxItemPresentation /*ePres*/,
4149 : SfxMapUnit /*eCoreUnit*/,
4150 : SfxMapUnit /*ePresUnit*/,
4151 : OUString& rText, const IntlWrapper *) const
4152 : {
4153 0 : rText = EE_RESSTR( RID_SVXITEMS_FRMDIR_BEGIN + GetValue() );
4154 0 : return true;
4155 : }
4156 :
4157 25447 : bool SvxFrameDirectionItem::PutValue( const com::sun::star::uno::Any& rVal,
4158 : sal_uInt8 )
4159 : {
4160 25447 : sal_Int16 nVal = sal_Int16();
4161 25447 : bool bRet = ( rVal >>= nVal );
4162 25447 : if( bRet )
4163 : {
4164 : // translate WritingDirection2 constants into SvxFrameDirection
4165 25447 : switch( nVal )
4166 : {
4167 : case text::WritingMode2::LR_TB:
4168 10986 : SetValue( FRMDIR_HORI_LEFT_TOP );
4169 10986 : break;
4170 : case text::WritingMode2::RL_TB:
4171 98 : SetValue( FRMDIR_HORI_RIGHT_TOP );
4172 98 : break;
4173 : case text::WritingMode2::TB_RL:
4174 12 : SetValue( FRMDIR_VERT_TOP_RIGHT );
4175 12 : break;
4176 : case text::WritingMode2::TB_LR:
4177 0 : SetValue( FRMDIR_VERT_TOP_LEFT );
4178 0 : break;
4179 : case text::WritingMode2::PAGE:
4180 14272 : SetValue( FRMDIR_ENVIRONMENT );
4181 14272 : break;
4182 : default:
4183 79 : bRet = false;
4184 79 : break;
4185 : }
4186 : }
4187 :
4188 25447 : return bRet;
4189 : }
4190 :
4191 1494 : bool SvxFrameDirectionItem::QueryValue( com::sun::star::uno::Any& rVal,
4192 : sal_uInt8 ) const
4193 : {
4194 : // translate SvxFrameDirection into WritingDirection2
4195 : sal_Int16 nVal;
4196 1494 : bool bRet = true;
4197 1494 : switch( GetValue() )
4198 : {
4199 : case FRMDIR_HORI_LEFT_TOP:
4200 1230 : nVal = text::WritingMode2::LR_TB;
4201 1230 : break;
4202 : case FRMDIR_HORI_RIGHT_TOP:
4203 22 : nVal = text::WritingMode2::RL_TB;
4204 22 : break;
4205 : case FRMDIR_VERT_TOP_RIGHT:
4206 8 : nVal = text::WritingMode2::TB_RL;
4207 8 : break;
4208 : case FRMDIR_VERT_TOP_LEFT:
4209 0 : nVal = text::WritingMode2::TB_LR;
4210 0 : break;
4211 : case FRMDIR_ENVIRONMENT:
4212 234 : nVal = text::WritingMode2::PAGE;
4213 234 : break;
4214 : default:
4215 : OSL_FAIL("Unknown SvxFrameDirection value!");
4216 0 : bRet = false;
4217 0 : break;
4218 : }
4219 :
4220 : // return value + error state
4221 1494 : if( bRet )
4222 : {
4223 1494 : rVal <<= nVal;
4224 : }
4225 1494 : return bRet;
4226 669 : }
4227 :
4228 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|