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/drawing/PolyPolygonBezierCoords.hpp>
21 : #include <com/sun/star/drawing/Hatch.hpp>
22 : #include <com/sun/star/drawing/LineStyle.hpp>
23 : #include <com/sun/star/drawing/LineDash.hpp>
24 : #include <com/sun/star/drawing/DashStyle.hpp>
25 : #include <com/sun/star/awt/Point.hpp>
26 : #include <com/sun/star/drawing/PointSequence.hpp>
27 : #include <com/sun/star/drawing/FillStyle.hpp>
28 : #include <com/sun/star/awt/Gradient.hpp>
29 : #include <com/sun/star/uno/Sequence.hxx>
30 : #include <com/sun/star/beans/PropertyValue.hpp>
31 : #include <svl/itempool.hxx>
32 : #include <editeng/memberids.hrc>
33 : #include <tools/stream.hxx>
34 : #include <tools/mapunit.hxx>
35 :
36 : #include "svx/unoapi.hxx"
37 : #include <svl/style.hxx>
38 :
39 : #include <tools/bigint.hxx>
40 : #include <svl/itemset.hxx>
41 : #include <svx/dialogs.hrc>
42 : #include "svx/svdstr.hrc"
43 : #include "svx/xattr.hxx"
44 : #include <svx/xtable.hxx>
45 : #include <svx/dialmgr.hxx>
46 : #include <editeng/itemtype.hxx>
47 : #include <svx/xdef.hxx>
48 : #include <svx/unomid.hxx>
49 : #include <svx/svdmodel.hxx>
50 : #include <basegfx/polygon/b2dpolygon.hxx>
51 : #include <basegfx/point/b2dpoint.hxx>
52 : #include <basegfx/vector/b2dvector.hxx>
53 : #include <basegfx/tools/unotools.hxx>
54 : #include <vcl/gradient.hxx>
55 :
56 : #include <stdio.h>
57 : #include <libxml/xmlwriter.h>
58 :
59 : using namespace ::com::sun::star;
60 :
61 : #define VCLTOSVCOL( rCol ) (sal_uInt16)((((sal_uInt16)(rCol))<<8)|(rCol))
62 :
63 114066 : TYPEINIT1_AUTOFACTORY(NameOrIndex, SfxStringItem);
64 :
65 0 : long ScaleMetricValue( long nVal, long nMul, long nDiv )
66 : {
67 0 : BigInt aVal( nVal );
68 :
69 0 : aVal *= nMul;
70 :
71 0 : if ( aVal.IsNeg() != ( nDiv < 0 ) )
72 0 : aVal-=nDiv/2; // for correct rounding
73 : else
74 0 : aVal+=nDiv/2; // for correct rounding
75 :
76 0 : aVal/=nDiv;
77 :
78 0 : return long( aVal );
79 : }
80 :
81 36140 : NameOrIndex::NameOrIndex(sal_uInt16 _nWhich, sal_Int32 nIndex) :
82 : SfxStringItem(_nWhich, OUString()),
83 36140 : nPalIndex(nIndex)
84 : {
85 36140 : }
86 :
87 70091 : NameOrIndex::NameOrIndex(sal_uInt16 _nWhich, const OUString& rName) :
88 : SfxStringItem(_nWhich, rName),
89 70091 : nPalIndex(-1)
90 : {
91 70091 : }
92 :
93 0 : NameOrIndex::NameOrIndex(sal_uInt16 _nWhich, SvStream& rIn)
94 : : SfxStringItem(_nWhich, rIn)
95 0 : , nPalIndex(-1)
96 : {
97 0 : rIn.ReadInt32( nPalIndex );
98 0 : }
99 :
100 130263 : NameOrIndex::NameOrIndex(const NameOrIndex& rNameOrIndex) :
101 : SfxStringItem(rNameOrIndex),
102 130263 : nPalIndex(rNameOrIndex.nPalIndex)
103 : {
104 130263 : }
105 :
106 593059 : bool NameOrIndex::operator==(const SfxPoolItem& rItem) const
107 : {
108 1175954 : return ( SfxStringItem::operator==(rItem) &&
109 1175954 : static_cast<const NameOrIndex&>(rItem).nPalIndex == nPalIndex );
110 : }
111 :
112 0 : SfxPoolItem* NameOrIndex::Clone(SfxItemPool* /*pPool*/) const
113 : {
114 :
115 0 : return new NameOrIndex(*this);
116 : }
117 :
118 0 : SfxPoolItem* NameOrIndex::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
119 : {
120 0 : return new NameOrIndex(Which(), rIn);
121 : }
122 :
123 0 : SvStream& NameOrIndex::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
124 : {
125 0 : SfxStringItem::Store( rOut, nItemVersion );
126 0 : rOut.WriteInt32( nPalIndex );
127 0 : return rOut;
128 : }
129 :
130 : /** this static checks if the given NameOrIndex item has a unique name for its value.
131 : The returned String is a unique name for an item with this value in both given pools.
132 : Argument pPool2 can be null.
133 : If returned string equals NameOrIndex->GetName(), the name was already unique.
134 : */
135 28333 : OUString NameOrIndex::CheckNamedItem( const NameOrIndex* pCheckItem, const sal_uInt16 nWhich, const SfxItemPool* pPool1, const SfxItemPool* /*pPool2*/, SvxCompareValueFunc pCompareValueFunc, sal_uInt16 nPrefixResId, const XPropertyListRef &pDefaults )
136 : {
137 28333 : bool bForceNew = false;
138 :
139 28333 : OUString aUniqueName = SvxUnogetInternalNameForItem(nWhich, pCheckItem->GetName());
140 :
141 : // 2. if we have a name check if there is already an item with the
142 : // same name in the documents pool with a different line end or start
143 :
144 28333 : if (!aUniqueName.isEmpty() && pPool1)
145 : {
146 27847 : const sal_uInt32 nCount = pPool1->GetItemCount2( nWhich );
147 :
148 53909 : for( sal_uInt32 nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
149 : {
150 53909 : const NameOrIndex *pItem = static_cast<const NameOrIndex*>(pPool1->GetItem2( nWhich, nSurrogate ));
151 :
152 53909 : if( pItem && ( pItem->GetName() == pCheckItem->GetName() ) )
153 : {
154 : // if there is already an item with the same name and the same
155 : // value its ok to set it
156 27847 : if( !pCompareValueFunc( pItem, pCheckItem ) )
157 : {
158 : // same name but different value, we need a new name for this item
159 0 : aUniqueName.clear();
160 0 : bForceNew = true;
161 : }
162 27847 : break;
163 : }
164 : }
165 : }
166 :
167 : // if we have no name yet, find existing item with same content or
168 : // create a unique name
169 28333 : if (aUniqueName.isEmpty())
170 : {
171 486 : sal_Int32 nUserIndex = 1;
172 486 : const ResId aRes(SVX_RES(nPrefixResId));
173 486 : OUString aUser( aRes.toString() );
174 486 : aUser += " ";
175 :
176 486 : if( pDefaults.get() )
177 : {
178 486 : const int nCount = pDefaults->Count();
179 : int nIndex;
180 7259 : for( nIndex = 0; nIndex < nCount; nIndex++ )
181 : {
182 6775 : XPropertyEntry* pEntry = pDefaults->Get(nIndex);
183 6775 : if( pEntry )
184 : {
185 6775 : bool bFound = false;
186 :
187 6775 : switch( nWhich )
188 : {
189 : case XATTR_FILLBITMAP:
190 : {
191 275 : const GraphicObject& rGraphicObjectA(static_cast<const XFillBitmapItem*>(pCheckItem)->GetGraphicObject());
192 275 : const GraphicObject& rGraphicObjectB(static_cast<XBitmapEntry*>(pEntry)->GetGraphicObject());
193 :
194 275 : bFound = (rGraphicObjectA == rGraphicObjectB);
195 275 : break;
196 : }
197 : case XATTR_LINEDASH:
198 1520 : bFound = static_cast<const XLineDashItem*>(pCheckItem)->GetDashValue() == static_cast<XDashEntry*>(pEntry)->GetDash();
199 1520 : break;
200 : case XATTR_LINESTART:
201 0 : bFound = static_cast<const XLineStartItem*>(pCheckItem)->GetLineStartValue() == static_cast<XLineEndEntry*>(pEntry)->GetLineEnd();
202 0 : break;
203 : case XATTR_LINEEND:
204 0 : bFound = static_cast<const XLineEndItem*>(pCheckItem)->GetLineEndValue() == static_cast<XLineEndEntry*>(pEntry)->GetLineEnd();
205 0 : break;
206 : case XATTR_FILLGRADIENT:
207 3570 : bFound = static_cast<const XFillGradientItem*>(pCheckItem)->GetGradientValue() == static_cast<XGradientEntry*>(pEntry)->GetGradient();
208 3570 : break;
209 : case XATTR_FILLHATCH:
210 1410 : bFound = static_cast<const XFillHatchItem*>(pCheckItem)->GetHatchValue() == static_cast<XHatchEntry*>(pEntry)->GetHatch();
211 1410 : break;
212 : }
213 :
214 6775 : if( bFound )
215 : {
216 2 : aUniqueName = pEntry->GetName();
217 2 : break;
218 : }
219 : else
220 : {
221 6773 : OUString aEntryName = pEntry->GetName();
222 6773 : if(aEntryName.getLength() >= aUser.getLength())
223 : {
224 5534 : sal_Int32 nThisIndex = aEntryName.copy( aUser.getLength() ).toInt32();
225 5534 : if( nThisIndex >= nUserIndex )
226 330 : nUserIndex = nThisIndex + 1;
227 6773 : }
228 : }
229 : }
230 : }
231 : }
232 :
233 486 : if (aUniqueName.isEmpty() && pPool1)
234 : {
235 484 : const sal_uInt32 nCount = pPool1->GetItemCount2( nWhich );
236 : const NameOrIndex *pItem;
237 2629 : for( sal_uInt32 nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
238 : {
239 2371 : pItem = static_cast<const NameOrIndex*>(pPool1->GetItem2( nWhich, nSurrogate ));
240 :
241 2371 : if( pItem && !pItem->GetName().isEmpty() )
242 : {
243 1591 : if( !bForceNew && pCompareValueFunc( pItem, pCheckItem ) )
244 226 : return pItem->GetName();
245 :
246 1365 : if( pItem->GetName().startsWith( aUser ) )
247 : {
248 1361 : sal_Int32 nThisIndex = pItem->GetName().copy( aUser.getLength() ).toInt32();
249 1361 : if( nThisIndex >= nUserIndex )
250 1361 : nUserIndex = nThisIndex + 1;
251 : }
252 : }
253 : }
254 258 : aUniqueName = aUser;
255 258 : aUniqueName += OUString::number( nUserIndex );
256 260 : }
257 : }
258 :
259 28107 : return aUniqueName;
260 : }
261 :
262 0 : void NameOrIndex::dumpAsXml(xmlTextWriterPtr pWriter) const
263 : {
264 0 : xmlTextWriterStartElement(pWriter, BAD_CAST("nameOrIndex"));
265 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("isIndex"), BAD_CAST(OString::boolean(IsIndex()).getStr()));
266 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("name"), BAD_CAST(GetName().toUtf8().getStr()));
267 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("index"), BAD_CAST(OString::number(GetIndex()).getStr()));
268 0 : xmlTextWriterEndElement(pWriter);
269 0 : }
270 :
271 59775 : TYPEINIT1_AUTOFACTORY(XColorItem, NameOrIndex);
272 :
273 0 : XColorItem::XColorItem(sal_uInt16 _nWhich, sal_Int32 nIndex, const Color& rTheColor) :
274 : NameOrIndex(_nWhich, nIndex),
275 0 : aColor(rTheColor)
276 : {
277 0 : }
278 :
279 59984 : XColorItem::XColorItem(sal_uInt16 _nWhich, const OUString& rName, const Color& rTheColor) :
280 : NameOrIndex(_nWhich, rName),
281 59984 : aColor(rTheColor)
282 : {
283 59984 : }
284 :
285 8269 : XColorItem::XColorItem(sal_uInt16 _nWhich, const Color& rTheColor)
286 : : NameOrIndex(_nWhich, OUString())
287 8269 : , aColor(rTheColor)
288 : {
289 8269 : }
290 :
291 121676 : XColorItem::XColorItem(const XColorItem& rItem) :
292 : NameOrIndex(rItem),
293 121676 : aColor(rItem.aColor)
294 : {
295 121676 : }
296 :
297 0 : XColorItem::XColorItem(sal_uInt16 _nWhich, SvStream& rIn) :
298 0 : NameOrIndex(_nWhich, rIn)
299 : {
300 0 : if (!IsIndex())
301 : {
302 0 : ReadColor( rIn, aColor );
303 : }
304 0 : }
305 :
306 1530 : SfxPoolItem* XColorItem::Clone(SfxItemPool* /*pPool*/) const
307 : {
308 1530 : return new XColorItem(*this);
309 : }
310 :
311 578928 : bool XColorItem::operator==(const SfxPoolItem& rItem) const
312 : {
313 1157856 : return ( NameOrIndex::operator==(rItem) &&
314 1157856 : static_cast<const XColorItem&>(rItem).aColor == aColor );
315 : }
316 :
317 0 : SfxPoolItem* XColorItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
318 : {
319 0 : return new XColorItem(Which(), rIn);
320 : }
321 :
322 0 : SvStream& XColorItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
323 : {
324 0 : NameOrIndex::Store( rOut, nItemVersion );
325 :
326 0 : if ( !IsIndex() )
327 : {
328 0 : WriteColor( rOut, aColor );
329 : }
330 :
331 0 : return rOut;
332 : }
333 :
334 103816 : const Color& XColorItem::GetColorValue(const XColorList* pTable) const
335 : {
336 103816 : if (!IsIndex())
337 103816 : return aColor;
338 : else
339 0 : return pTable->GetColor(GetIndex())->GetColor();
340 :
341 : }
342 :
343 181 : bool XColorItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
344 : {
345 181 : rVal <<= (sal_Int32)GetColorValue().GetRGBColor();
346 181 : return true;
347 : }
348 :
349 576 : bool XColorItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
350 : {
351 576 : sal_Int32 nValue = 0;
352 576 : rVal >>= nValue;
353 576 : SetColorValue( nValue );
354 :
355 576 : return true;
356 : }
357 :
358 : // --- line attributes ---
359 :
360 242358 : TYPEINIT1_AUTOFACTORY(XLineStyleItem, SfxEnumItem);
361 :
362 39829 : XLineStyleItem::XLineStyleItem(com::sun::star::drawing::LineStyle eTheLineStyle) :
363 39829 : SfxEnumItem(XATTR_LINESTYLE, sal::static_int_cast< sal_uInt16 >(eTheLineStyle))
364 : {
365 39829 : }
366 :
367 0 : XLineStyleItem::XLineStyleItem(SvStream& rIn) :
368 0 : SfxEnumItem(XATTR_LINESTYLE, rIn)
369 : {
370 0 : }
371 :
372 57262 : SfxPoolItem* XLineStyleItem::Clone(SfxItemPool* /*pPool*/) const
373 : {
374 57262 : return new XLineStyleItem( *this );
375 : }
376 :
377 0 : SfxPoolItem* XLineStyleItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
378 : {
379 0 : return new XLineStyleItem(rIn);
380 : }
381 :
382 0 : bool XLineStyleItem::GetPresentation
383 : (
384 : SfxItemPresentation /*ePres*/,
385 : SfxMapUnit /*eCoreUnit*/,
386 : SfxMapUnit /*ePresUnit*/,
387 : OUString& rText, const IntlWrapper *
388 : ) const
389 : {
390 0 : rText.clear();
391 :
392 0 : sal_uInt16 nId = 0;
393 :
394 0 : switch( (sal_uInt16)GetValue() )
395 : {
396 : case com::sun::star::drawing::LineStyle_NONE:
397 0 : nId = RID_SVXSTR_INVISIBLE;
398 0 : break;
399 : case com::sun::star::drawing::LineStyle_SOLID:
400 0 : nId = RID_SVXSTR_SOLID;
401 0 : break;
402 : }
403 :
404 0 : if ( nId )
405 0 : rText = SVX_RESSTR( nId );
406 0 : return true;
407 : }
408 :
409 2606 : bool XLineStyleItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
410 : {
411 2606 : ::com::sun::star::drawing::LineStyle eLS = (::com::sun::star::drawing::LineStyle)GetValue();
412 2606 : rVal <<= eLS;
413 2606 : return true;
414 : }
415 :
416 37355 : bool XLineStyleItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
417 : {
418 : ::com::sun::star::drawing::LineStyle eLS;
419 37355 : if(!(rVal >>= eLS ))
420 : {
421 : // also try an int (for Basic)
422 1656 : sal_Int32 nLS = 0;
423 1656 : if(!(rVal >>= nLS))
424 0 : return false;
425 1656 : eLS = (::com::sun::star::drawing::LineStyle)nLS;
426 : }
427 :
428 37355 : SetValue( sal::static_int_cast< sal_uInt16 >( eLS ) );
429 37355 : return true;
430 : }
431 :
432 0 : sal_uInt16 XLineStyleItem::GetValueCount() const
433 : {
434 0 : return 3;
435 : }
436 :
437 6136 : XDash::XDash(css::drawing::DashStyle eTheDash, sal_uInt16 nTheDots, sal_uIntPtr nTheDotLen,
438 : sal_uInt16 nTheDashes, sal_uIntPtr nTheDashLen, sal_uIntPtr nTheDistance) :
439 : eDash(eTheDash),
440 : nDots(nTheDots),
441 : nDotLen(nTheDotLen),
442 : nDashes(nTheDashes),
443 : nDashLen(nTheDashLen),
444 6136 : nDistance(nTheDistance)
445 : {
446 6136 : }
447 :
448 2305 : bool XDash::operator==(const XDash& rDash) const
449 : {
450 3541 : return ( eDash == rDash.eDash &&
451 2040 : nDots == rDash.nDots &&
452 1327 : nDotLen == rDash.nDotLen &&
453 1046 : nDashes == rDash.nDashes &&
454 3349 : nDashLen == rDash.nDashLen &&
455 2826 : nDistance == rDash.nDistance );
456 : }
457 :
458 : // XDash is translated into an array of doubles which describe the lengths of the
459 : // dashes, dots and empty passages. It returns the complete length of the full DashDot
460 : // sequence and fills the given vetor of doubles accordingly (also resizing, so deleting it).
461 : static double SMALLEST_DASH_WIDTH(26.95);
462 :
463 327 : double XDash::CreateDotDashArray(::std::vector< double >& rDotDashArray, double fLineWidth) const
464 : {
465 327 : double fFullDotDashLen(0.0);
466 327 : const sal_uInt16 nNumDotDashArray = (GetDots() + GetDashes()) * 2;
467 327 : rDotDashArray.resize( nNumDotDashArray, 0.0 );
468 : sal_uInt16 a;
469 327 : sal_uInt16 nIns(0);
470 327 : double fDashDotDistance = (double)GetDistance();
471 327 : double fSingleDashLen = (double)GetDashLen();
472 327 : double fSingleDotLen = (double)GetDotLen();
473 :
474 327 : if(GetDashStyle() == css::drawing::DashStyle_RECTRELATIVE || GetDashStyle() == css::drawing::DashStyle_ROUNDRELATIVE)
475 : {
476 196 : if(fLineWidth != 0.0)
477 : {
478 196 : double fFactor = fLineWidth / 100.0;
479 :
480 196 : if(GetDashes())
481 : {
482 181 : if(GetDashLen())
483 : {
484 : // is a dash
485 180 : fSingleDashLen *= fFactor;
486 : }
487 : else
488 : {
489 : // is a dot
490 1 : fSingleDashLen = fLineWidth;
491 : }
492 : }
493 :
494 196 : if(GetDots())
495 : {
496 142 : if(GetDotLen())
497 : {
498 : // is a dash
499 141 : fSingleDotLen *= fFactor;
500 : }
501 : else
502 : {
503 : // is a dot
504 1 : fSingleDotLen = fLineWidth;
505 : }
506 : }
507 :
508 196 : if(GetDashes() || GetDots())
509 : {
510 196 : if(GetDistance())
511 : {
512 196 : fDashDotDistance *= fFactor;
513 : }
514 : else
515 : {
516 0 : fDashDotDistance = fLineWidth;
517 : }
518 : }
519 : }
520 : else
521 : {
522 0 : if(GetDashes())
523 : {
524 0 : if(GetDashLen())
525 : {
526 : // is a dash
527 0 : fSingleDashLen = (SMALLEST_DASH_WIDTH * fSingleDashLen) / 100.0;
528 : }
529 : else
530 : {
531 : // is a dot
532 0 : fSingleDashLen = SMALLEST_DASH_WIDTH;
533 : }
534 : }
535 :
536 0 : if(GetDots())
537 : {
538 0 : if(GetDotLen())
539 : {
540 : // is a dash
541 0 : fSingleDotLen = (SMALLEST_DASH_WIDTH * fSingleDotLen) / 100.0;
542 : }
543 : else
544 : {
545 : // is a dot
546 0 : fSingleDotLen = SMALLEST_DASH_WIDTH;
547 : }
548 : }
549 :
550 0 : if(GetDashes() || GetDots())
551 : {
552 0 : if(GetDistance())
553 : {
554 : // dash as distance
555 0 : fDashDotDistance = (SMALLEST_DASH_WIDTH * fDashDotDistance) / 100.0;
556 : }
557 : else
558 : {
559 : // dot as distance
560 0 : fDashDotDistance = SMALLEST_DASH_WIDTH;
561 : }
562 : }
563 : }
564 : }
565 : else
566 : {
567 : // smallest dot size compare value
568 131 : double fDotCompVal(fLineWidth != 0.0 ? fLineWidth : SMALLEST_DASH_WIDTH);
569 :
570 : // absolute values
571 131 : if(GetDashes())
572 : {
573 104 : if(GetDashLen())
574 : {
575 : // is a dash
576 103 : if(fSingleDashLen < SMALLEST_DASH_WIDTH)
577 : {
578 38 : fSingleDashLen = SMALLEST_DASH_WIDTH;
579 : }
580 : }
581 : else
582 : {
583 : // is a dot
584 1 : if(fSingleDashLen < fDotCompVal)
585 : {
586 1 : fSingleDashLen = fDotCompVal;
587 : }
588 : }
589 : }
590 :
591 131 : if(GetDots())
592 : {
593 85 : if(GetDotLen())
594 : {
595 : // is a dash
596 83 : if(fSingleDotLen < SMALLEST_DASH_WIDTH)
597 : {
598 60 : fSingleDotLen = SMALLEST_DASH_WIDTH;
599 : }
600 : }
601 : else
602 : {
603 : // is a dot
604 2 : if(fSingleDotLen < fDotCompVal)
605 : {
606 2 : fSingleDotLen = fDotCompVal;
607 : }
608 : }
609 : }
610 :
611 131 : if(GetDashes() || GetDots())
612 : {
613 131 : if(GetDistance())
614 : {
615 : // dash as distance
616 131 : if(fDashDotDistance < SMALLEST_DASH_WIDTH)
617 : {
618 60 : fDashDotDistance = SMALLEST_DASH_WIDTH;
619 : }
620 : }
621 : else
622 : {
623 : // dot as distance
624 0 : if(fDashDotDistance < fDotCompVal)
625 : {
626 0 : fDashDotDistance = fDotCompVal;
627 : }
628 : }
629 : }
630 : }
631 :
632 574 : for(a=0;a<GetDots();a++)
633 : {
634 247 : rDotDashArray[nIns++] = fSingleDotLen;
635 247 : fFullDotDashLen += fSingleDotLen;
636 247 : rDotDashArray[nIns++] = fDashDotDistance;
637 247 : fFullDotDashLen += fDashDotDistance;
638 : }
639 :
640 877 : for(a=0;a<GetDashes();a++)
641 : {
642 550 : rDotDashArray[nIns++] = fSingleDashLen;
643 550 : fFullDotDashLen += fSingleDashLen;
644 550 : rDotDashArray[nIns++] = fDashDotDistance;
645 550 : fFullDotDashLen += fDashDotDistance;
646 : }
647 :
648 327 : return fFullDotDashLen;
649 : }
650 :
651 15861 : TYPEINIT1_AUTOFACTORY(XLineDashItem, NameOrIndex);
652 :
653 202 : XLineDashItem::XLineDashItem(const OUString& rName, const XDash& rTheDash) :
654 : NameOrIndex(XATTR_LINEDASH, rName),
655 202 : aDash(rTheDash)
656 : {
657 202 : }
658 :
659 708 : XLineDashItem::XLineDashItem(const XLineDashItem& rItem) :
660 : NameOrIndex(rItem),
661 708 : aDash(rItem.aDash)
662 : {
663 708 : }
664 :
665 0 : XLineDashItem::XLineDashItem(SvStream& rIn) :
666 0 : NameOrIndex(XATTR_LINEDASH, rIn)
667 : {
668 0 : if (!IsIndex())
669 : {
670 : sal_uInt16 nSTemp;
671 : sal_uInt32 nLTemp;
672 : sal_Int32 nITemp;
673 :
674 0 : rIn.ReadInt32( nITemp ); aDash.SetDashStyle((css::drawing::DashStyle)nITemp);
675 0 : rIn.ReadUInt16( nSTemp ); aDash.SetDots(nSTemp);
676 0 : rIn.ReadUInt32( nLTemp ); aDash.SetDotLen(nLTemp);
677 0 : rIn.ReadUInt16( nSTemp ); aDash.SetDashes(nSTemp);
678 0 : rIn.ReadUInt32( nLTemp ); aDash.SetDashLen(nLTemp);
679 0 : rIn.ReadUInt32( nLTemp ); aDash.SetDistance(nLTemp);
680 : }
681 0 : }
682 :
683 5069 : XLineDashItem::XLineDashItem(SfxItemPool* /*pPool*/, const XDash& rTheDash)
684 : : NameOrIndex( XATTR_LINEDASH, -1 ),
685 5069 : aDash(rTheDash)
686 : {
687 5069 : }
688 :
689 708 : SfxPoolItem* XLineDashItem::Clone(SfxItemPool* /*pPool*/) const
690 : {
691 708 : return new XLineDashItem(*this);
692 : }
693 :
694 984 : bool XLineDashItem::operator==(const SfxPoolItem& rItem) const
695 : {
696 1544 : return ( NameOrIndex::operator==(rItem) &&
697 1544 : aDash == static_cast<const XLineDashItem&>(rItem).aDash );
698 : }
699 :
700 0 : SfxPoolItem* XLineDashItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
701 : {
702 0 : return new XLineDashItem(rIn);
703 : }
704 :
705 0 : SvStream& XLineDashItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
706 : {
707 0 : NameOrIndex::Store( rOut, nItemVersion );
708 :
709 0 : if (!IsIndex())
710 : {
711 0 : rOut.WriteInt32( aDash.GetDashStyle() );
712 0 : rOut.WriteUInt16( aDash.GetDots() );
713 0 : rOut.WriteUInt32( aDash.GetDotLen() );
714 0 : rOut.WriteUInt16( aDash.GetDashes() );
715 0 : rOut.WriteUInt32( aDash.GetDashLen() );
716 0 : rOut.WriteUInt32( aDash.GetDistance() );
717 : }
718 :
719 0 : return rOut;
720 : }
721 :
722 :
723 0 : bool XLineDashItem::GetPresentation
724 : (
725 : SfxItemPresentation /*ePres*/,
726 : SfxMapUnit /*eCoreUnit*/,
727 : SfxMapUnit /*ePresUnit*/,
728 : OUString& rText, const IntlWrapper *
729 : ) const
730 : {
731 0 : rText = GetName();
732 0 : return true;
733 : }
734 :
735 0 : bool XLineDashItem::HasMetrics() const
736 : {
737 0 : return true;
738 : }
739 :
740 0 : bool XLineDashItem::ScaleMetrics(long nMul, long nDiv)
741 : {
742 0 : aDash.SetDotLen( ScaleMetricValue( aDash.GetDotLen(), nMul, nDiv ) );
743 0 : aDash.SetDashLen( ScaleMetricValue( aDash.GetDashLen(), nMul, nDiv ) );
744 0 : aDash.SetDistance( ScaleMetricValue( aDash.GetDistance(), nMul, nDiv ) );
745 0 : return true;
746 : }
747 :
748 580 : bool XLineDashItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
749 : {
750 580 : nMemberId &= ~CONVERT_TWIPS;
751 :
752 580 : switch ( nMemberId )
753 : {
754 : case 0:
755 : {
756 0 : uno::Sequence< beans::PropertyValue > aPropSeq( 2 );
757 :
758 0 : ::com::sun::star::drawing::LineDash aLineDash;
759 :
760 0 : const XDash& rXD = GetDashValue();
761 0 : aLineDash.Style = (::com::sun::star::drawing::DashStyle)((sal_uInt16)rXD.GetDashStyle());
762 0 : aLineDash.Dots = rXD.GetDots();
763 0 : aLineDash.DotLen = rXD.GetDotLen();
764 0 : aLineDash.Dashes = rXD.GetDashes();
765 0 : aLineDash.DashLen = rXD.GetDashLen();
766 0 : aLineDash.Distance = rXD.GetDistance();
767 :
768 0 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
769 0 : aPropSeq[0].Name = "Name";
770 0 : aPropSeq[0].Value = uno::makeAny( aApiName );
771 0 : aPropSeq[1].Name = "LineDash";
772 0 : aPropSeq[1].Value = uno::makeAny( aLineDash );
773 0 : rVal = uno::makeAny( aPropSeq );
774 0 : break;
775 : }
776 :
777 : case MID_NAME:
778 : {
779 258 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
780 258 : rVal <<= aApiName;
781 258 : break;
782 : }
783 :
784 : case MID_LINEDASH:
785 : {
786 322 : const XDash& rXD = GetDashValue();
787 :
788 322 : ::com::sun::star::drawing::LineDash aLineDash;
789 :
790 322 : aLineDash.Style = (::com::sun::star::drawing::DashStyle)((sal_uInt16)rXD.GetDashStyle());
791 322 : aLineDash.Dots = rXD.GetDots();
792 322 : aLineDash.DotLen = rXD.GetDotLen();
793 322 : aLineDash.Dashes = rXD.GetDashes();
794 322 : aLineDash.DashLen = rXD.GetDashLen();
795 322 : aLineDash.Distance = rXD.GetDistance();
796 :
797 322 : rVal <<= aLineDash;
798 322 : break;
799 : }
800 :
801 : case MID_LINEDASH_STYLE:
802 : {
803 0 : const XDash& rXD = GetDashValue();
804 0 : rVal <<= (::com::sun::star::drawing::DashStyle)((sal_Int16)rXD.GetDashStyle());
805 0 : break;
806 : }
807 :
808 : case MID_LINEDASH_DOTS:
809 : {
810 0 : const XDash& rXD = GetDashValue();
811 0 : rVal <<= rXD.GetDots();
812 0 : break;
813 : }
814 :
815 : case MID_LINEDASH_DOTLEN:
816 : {
817 0 : const XDash& rXD = GetDashValue();
818 0 : rVal <<= rXD.GetDotLen();
819 0 : break;
820 : }
821 :
822 : case MID_LINEDASH_DASHES:
823 : {
824 0 : const XDash& rXD = GetDashValue();
825 0 : rVal <<= rXD.GetDashes();
826 0 : break;
827 : }
828 :
829 : case MID_LINEDASH_DASHLEN:
830 : {
831 0 : const XDash& rXD = GetDashValue();
832 0 : rVal <<= rXD.GetDashLen();
833 0 : break;
834 : }
835 :
836 : case MID_LINEDASH_DISTANCE:
837 : {
838 0 : const XDash& rXD = GetDashValue();
839 0 : rVal <<= rXD.GetDistance();
840 0 : break;
841 : }
842 :
843 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
844 : }
845 :
846 580 : return true;
847 : }
848 :
849 135 : bool XLineDashItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
850 : {
851 135 : nMemberId &= ~CONVERT_TWIPS;
852 :
853 135 : switch ( nMemberId )
854 : {
855 : case 0:
856 : {
857 0 : uno::Sequence< beans::PropertyValue > aPropSeq;
858 0 : ::com::sun::star::drawing::LineDash aLineDash;
859 0 : OUString aName;
860 0 : bool bLineDash( false );
861 :
862 0 : if ( rVal >>= aPropSeq )
863 : {
864 0 : for ( sal_Int32 n = 0; n < aPropSeq.getLength(); n++ )
865 : {
866 0 : if ( aPropSeq[n].Name == "Name" )
867 0 : aPropSeq[n].Value >>= aName;
868 0 : else if ( aPropSeq[n].Name == "LineDash" )
869 : {
870 0 : if ( aPropSeq[n].Value >>= aLineDash )
871 0 : bLineDash = true;
872 : }
873 : }
874 :
875 0 : SetName( aName );
876 0 : if ( bLineDash )
877 : {
878 0 : XDash aXDash;
879 :
880 0 : aXDash.SetDashStyle((css::drawing::DashStyle)((sal_uInt16)(aLineDash.Style)));
881 0 : aXDash.SetDots(aLineDash.Dots);
882 0 : aXDash.SetDotLen(aLineDash.DotLen);
883 0 : aXDash.SetDashes(aLineDash.Dashes);
884 0 : aXDash.SetDashLen(aLineDash.DashLen);
885 0 : aXDash.SetDistance(aLineDash.Distance);
886 :
887 0 : if((0 == aXDash.GetDots()) && (0 == aXDash.GetDashes()))
888 0 : aXDash.SetDots(1);
889 :
890 0 : SetDashValue( aXDash );
891 : }
892 :
893 0 : return true;
894 : }
895 :
896 0 : return false;
897 : }
898 :
899 : case MID_NAME:
900 : {
901 0 : OUString aName;
902 0 : if (!(rVal >>= aName))
903 0 : return false;
904 0 : SetName( aName );
905 0 : break;
906 : }
907 :
908 : case MID_LINEDASH:
909 : {
910 135 : ::com::sun::star::drawing::LineDash aLineDash;
911 135 : if(!(rVal >>= aLineDash))
912 0 : return false;
913 :
914 135 : XDash aXDash;
915 :
916 135 : aXDash.SetDashStyle((css::drawing::DashStyle)((sal_uInt16)(aLineDash.Style)));
917 135 : aXDash.SetDots(aLineDash.Dots);
918 135 : aXDash.SetDotLen(aLineDash.DotLen);
919 135 : aXDash.SetDashes(aLineDash.Dashes);
920 135 : aXDash.SetDashLen(aLineDash.DashLen);
921 135 : aXDash.SetDistance(aLineDash.Distance);
922 :
923 135 : if((0 == aXDash.GetDots()) && (0 == aXDash.GetDashes()))
924 0 : aXDash.SetDots(1);
925 :
926 135 : SetDashValue( aXDash );
927 135 : break;
928 : }
929 :
930 : case MID_LINEDASH_STYLE:
931 : {
932 0 : sal_Int16 nVal = sal_Int16();
933 0 : if(!(rVal >>= nVal))
934 0 : return false;
935 :
936 0 : XDash aXDash = GetDashValue();
937 0 : aXDash.SetDashStyle((css::drawing::DashStyle)((sal_uInt16)(nVal)));
938 :
939 0 : if((0 == aXDash.GetDots()) && (0 == aXDash.GetDashes()))
940 0 : aXDash.SetDots(1);
941 :
942 0 : SetDashValue( aXDash );
943 :
944 0 : break;
945 : }
946 :
947 : case MID_LINEDASH_DOTS:
948 : case MID_LINEDASH_DASHES:
949 : {
950 0 : sal_Int16 nVal = sal_Int16();
951 0 : if(!(rVal >>= nVal))
952 0 : return false;
953 :
954 0 : XDash aXDash = GetDashValue();
955 0 : if ( nMemberId == MID_LINEDASH_DOTS )
956 0 : aXDash.SetDots( nVal );
957 : else
958 0 : aXDash.SetDashes( nVal );
959 :
960 0 : if((0 == aXDash.GetDots()) && (0 == aXDash.GetDashes()))
961 0 : aXDash.SetDots(1);
962 :
963 0 : SetDashValue( aXDash );
964 0 : break;
965 : }
966 :
967 : case MID_LINEDASH_DOTLEN:
968 : case MID_LINEDASH_DASHLEN:
969 : case MID_LINEDASH_DISTANCE:
970 : {
971 0 : sal_Int32 nVal = 0;
972 0 : if(!(rVal >>= nVal))
973 0 : return false;
974 :
975 0 : XDash aXDash = GetDashValue();
976 0 : if ( nMemberId == MID_LINEDASH_DOTLEN )
977 0 : aXDash.SetDotLen( nVal );
978 0 : else if ( nMemberId == MID_LINEDASH_DASHLEN )
979 0 : aXDash.SetDashLen( nVal );
980 : else
981 0 : aXDash.SetDistance( nVal );
982 :
983 0 : if((0 == aXDash.GetDots()) && (0 == aXDash.GetDashes()))
984 0 : aXDash.SetDots(1);
985 :
986 0 : SetDashValue( aXDash );
987 0 : break;
988 : }
989 : }
990 :
991 135 : return true;
992 : }
993 :
994 225 : bool XLineDashItem::CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 )
995 : {
996 225 : return static_cast<const XLineDashItem*>(p1)->GetDashValue() == static_cast<const XLineDashItem*>(p2)->GetDashValue();
997 : }
998 :
999 367 : XLineDashItem* XLineDashItem::checkForUniqueItem( SdrModel* pModel ) const
1000 : {
1001 367 : if( pModel )
1002 : {
1003 : const OUString aUniqueName = NameOrIndex::CheckNamedItem(
1004 262 : this, XATTR_LINEDASH, &pModel->GetItemPool(),
1005 393 : pModel->GetStyleSheetPool() ? &pModel->GetStyleSheetPool()->GetPool() : NULL,
1006 : XLineDashItem::CompareValueFunc, RID_SVXSTR_DASH11,
1007 917 : pModel->GetPropertyList( XDASH_LIST ) );
1008 :
1009 : // if the given name is not valid, replace it!
1010 262 : if( aUniqueName != GetName() )
1011 152 : return new XLineDashItem( aUniqueName, aDash );
1012 : }
1013 :
1014 215 : return NULL;
1015 : }
1016 :
1017 175218 : TYPEINIT1_AUTOFACTORY(XLineWidthItem, SfxMetricItem);
1018 :
1019 6546 : XLineWidthItem::XLineWidthItem(long nWidth) :
1020 6546 : SfxMetricItem(XATTR_LINEWIDTH, nWidth)
1021 : {
1022 6546 : }
1023 :
1024 0 : XLineWidthItem::XLineWidthItem(SvStream& rIn) :
1025 0 : SfxMetricItem(XATTR_LINEWIDTH, rIn)
1026 : {
1027 0 : }
1028 :
1029 36461 : SfxPoolItem* XLineWidthItem::Clone(SfxItemPool* /*pPool*/) const
1030 : {
1031 36461 : return new XLineWidthItem(*this);
1032 : }
1033 :
1034 0 : SfxPoolItem* XLineWidthItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
1035 : {
1036 0 : return new XLineWidthItem(rIn);
1037 : }
1038 :
1039 0 : bool XLineWidthItem::GetPresentation
1040 : (
1041 : SfxItemPresentation /*ePres*/,
1042 : SfxMapUnit eCoreUnit,
1043 : SfxMapUnit ePresUnit,
1044 : OUString& rText, const IntlWrapper * pIntl
1045 : ) const
1046 : {
1047 0 : rText = GetMetricText( (long) GetValue(),
1048 0 : eCoreUnit, ePresUnit, pIntl) +
1049 0 : " " + EE_RESSTR( GetMetricId( ePresUnit) );
1050 0 : return true;
1051 : }
1052 :
1053 2052 : bool XLineWidthItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
1054 : {
1055 2052 : sal_Int32 nValue = GetValue();
1056 2052 : if( 0 != (nMemberId&CONVERT_TWIPS) )
1057 0 : nValue = convertTwipToMm100(nValue);
1058 :
1059 2052 : rVal <<= nValue;
1060 2052 : return true;
1061 : }
1062 :
1063 30324 : bool XLineWidthItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
1064 : {
1065 30324 : sal_Int32 nValue = 0;
1066 30324 : rVal >>= nValue;
1067 30324 : if( 0 != (nMemberId&CONVERT_TWIPS) )
1068 0 : nValue = convertMm100ToTwip(nValue);
1069 :
1070 30324 : SetValue( nValue );
1071 30324 : return true;
1072 : }
1073 :
1074 158492 : TYPEINIT1_AUTOFACTORY(XLineColorItem, XColorItem);
1075 :
1076 0 : XLineColorItem::XLineColorItem(sal_Int32 nIndex, const Color& rTheColor) :
1077 0 : XColorItem(XATTR_LINECOLOR, nIndex, rTheColor)
1078 : {
1079 0 : }
1080 :
1081 6824 : XLineColorItem::XLineColorItem(const OUString& rName, const Color& rTheColor) :
1082 6824 : XColorItem(XATTR_LINECOLOR, rName, rTheColor)
1083 : {
1084 6824 : }
1085 :
1086 0 : XLineColorItem::XLineColorItem(SvStream& rIn) :
1087 0 : XColorItem(XATTR_LINECOLOR, rIn)
1088 : {
1089 0 : }
1090 :
1091 59126 : SfxPoolItem* XLineColorItem::Clone(SfxItemPool* /*pPool*/) const
1092 : {
1093 59126 : return new XLineColorItem(*this);
1094 : }
1095 :
1096 0 : SfxPoolItem* XLineColorItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
1097 : {
1098 0 : return new XLineColorItem(rIn);
1099 : }
1100 :
1101 0 : bool XLineColorItem::GetPresentation
1102 : (
1103 : SfxItemPresentation /*ePres*/,
1104 : SfxMapUnit /*eCoreUnit*/,
1105 : SfxMapUnit /*ePresUnit*/,
1106 : OUString& rText, const IntlWrapper *
1107 : ) const
1108 : {
1109 0 : rText = GetName();
1110 0 : return true;
1111 : }
1112 :
1113 1908 : bool XLineColorItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
1114 : {
1115 1908 : rVal <<= (sal_Int32)GetColorValue().GetRGBColor();
1116 1908 : return true;
1117 : }
1118 :
1119 27649 : bool XLineColorItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
1120 : {
1121 27649 : sal_Int32 nValue = 0;
1122 27649 : if(!(rVal >>= nValue))
1123 0 : return false;
1124 :
1125 27649 : SetColorValue( nValue );
1126 27649 : return true;
1127 : }
1128 :
1129 : // --- tooling for simple spooling B2DPolygon to file and back ---
1130 :
1131 : namespace
1132 : {
1133 0 : void streamOutB2DPolyPolygon(const basegfx::B2DPolyPolygon& rPolyPolygon, SvStream& rOut)
1134 : {
1135 0 : const sal_uInt32 nPolygonCount(rPolyPolygon.count());
1136 0 : rOut.WriteUInt32( nPolygonCount );
1137 :
1138 0 : for(sal_uInt32 a(0L); a < nPolygonCount; a++)
1139 : {
1140 0 : const basegfx::B2DPolygon aCandidate(rPolyPolygon.getB2DPolygon(a));
1141 0 : const sal_uInt32 nPointCount(aCandidate.count());
1142 0 : const sal_uInt8 bClosed(aCandidate.isClosed() ? 1 : 0);
1143 0 : const sal_uInt8 bControlPoints(aCandidate.areControlPointsUsed() ? 1 : 0);
1144 0 : rOut.WriteUInt32( nPointCount );
1145 0 : rOut.WriteUChar( bClosed );
1146 0 : rOut.WriteUChar( bControlPoints );
1147 :
1148 0 : for(sal_uInt32 b(0L); b < nPointCount; b++)
1149 : {
1150 0 : const basegfx::B2DPoint aPoint(aCandidate.getB2DPoint(b));
1151 0 : rOut.WriteDouble( aPoint.getX() );
1152 0 : rOut.WriteDouble( aPoint.getY() );
1153 :
1154 0 : if(bControlPoints)
1155 : {
1156 0 : const sal_uInt8 bEdgeIsCurve(aCandidate.isPrevControlPointUsed(b) || aCandidate.isNextControlPointUsed(b) ? 1 : 0);
1157 0 : rOut.WriteUChar( bEdgeIsCurve );
1158 :
1159 0 : if(bEdgeIsCurve)
1160 : {
1161 0 : const basegfx::B2DVector aControlVectorA(aCandidate.getPrevControlPoint(b));
1162 0 : rOut.WriteDouble( aControlVectorA.getX() );
1163 0 : rOut.WriteDouble( aControlVectorA.getY() );
1164 :
1165 0 : const basegfx::B2DVector aControlVectorB(aCandidate.getNextControlPoint(b));
1166 0 : rOut.WriteDouble( aControlVectorB.getX() );
1167 0 : rOut.WriteDouble( aControlVectorB.getY() );
1168 : }
1169 : }
1170 0 : }
1171 0 : }
1172 0 : }
1173 :
1174 0 : basegfx::B2DPolyPolygon streamInB2DPolyPolygon(SvStream& rIn)
1175 : {
1176 0 : basegfx::B2DPolyPolygon aRetval;
1177 : sal_uInt32 nPolygonCount;
1178 0 : rIn.ReadUInt32( nPolygonCount );
1179 :
1180 0 : for(sal_uInt32 a(0L); a < nPolygonCount; a++)
1181 : {
1182 : sal_uInt32 nPointCount;
1183 : sal_uInt8 bClosed;
1184 : sal_uInt8 bControlPoints;
1185 :
1186 0 : rIn.ReadUInt32( nPointCount );
1187 0 : rIn.ReadUChar( bClosed );
1188 0 : rIn.ReadUChar( bControlPoints );
1189 :
1190 0 : basegfx::B2DPolygon aCandidate;
1191 0 : aCandidate.setClosed(0 != bClosed);
1192 :
1193 0 : for(sal_uInt32 b(0L); b < nPointCount; b++)
1194 : {
1195 : double fX, fY;
1196 0 : rIn.ReadDouble( fX );
1197 0 : rIn.ReadDouble( fY );
1198 0 : aCandidate.append(basegfx::B2DPoint(fX, fY));
1199 :
1200 0 : if(0 != bControlPoints)
1201 : {
1202 : sal_uInt8 bEdgeIsCurve;
1203 0 : rIn.ReadUChar( bEdgeIsCurve );
1204 :
1205 0 : if(0 != bEdgeIsCurve)
1206 : {
1207 0 : rIn.ReadDouble( fX );
1208 0 : rIn.ReadDouble( fY );
1209 0 : aCandidate.setPrevControlPoint(b, basegfx::B2DVector(fX, fY));
1210 :
1211 0 : rIn.ReadDouble( fX );
1212 0 : rIn.ReadDouble( fY );
1213 0 : aCandidate.setNextControlPoint(b, basegfx::B2DVector(fX, fY));
1214 : }
1215 : }
1216 : }
1217 :
1218 0 : aRetval.append(aCandidate);
1219 0 : }
1220 :
1221 0 : return aRetval;
1222 : }
1223 : }
1224 :
1225 17079 : TYPEINIT1_AUTOFACTORY(XLineStartItem, NameOrIndex);
1226 :
1227 152 : XLineStartItem::XLineStartItem(sal_Int32 nIndex)
1228 152 : : NameOrIndex(XATTR_LINESTART, nIndex)
1229 : {
1230 152 : }
1231 :
1232 739 : XLineStartItem::XLineStartItem(const OUString& rName, const basegfx::B2DPolyPolygon& rPolyPolygon)
1233 : : NameOrIndex(XATTR_LINESTART, rName),
1234 739 : maPolyPolygon(rPolyPolygon)
1235 : {
1236 739 : }
1237 :
1238 2119 : XLineStartItem::XLineStartItem(const XLineStartItem& rItem)
1239 : : NameOrIndex(rItem),
1240 2119 : maPolyPolygon(rItem.maPolyPolygon)
1241 : {
1242 2119 : }
1243 :
1244 0 : XLineStartItem::XLineStartItem(SvStream& rIn) :
1245 0 : NameOrIndex(XATTR_LINESTART, rIn)
1246 : {
1247 0 : if (!IsIndex())
1248 : {
1249 0 : maPolyPolygon = streamInB2DPolyPolygon(rIn);
1250 : }
1251 0 : }
1252 :
1253 5069 : XLineStartItem::XLineStartItem(SfxItemPool* /*pPool*/, const basegfx::B2DPolyPolygon& rPolyPolygon)
1254 : : NameOrIndex( XATTR_LINESTART, -1 ),
1255 5069 : maPolyPolygon(rPolyPolygon)
1256 : {
1257 5069 : }
1258 :
1259 2119 : SfxPoolItem* XLineStartItem::Clone(SfxItemPool* /*pPool*/) const
1260 : {
1261 2119 : return new XLineStartItem(*this);
1262 : }
1263 :
1264 2837 : bool XLineStartItem::operator==(const SfxPoolItem& rItem) const
1265 : {
1266 2837 : return ( NameOrIndex::operator==(rItem) && static_cast<const XLineStartItem&>(rItem).maPolyPolygon == maPolyPolygon );
1267 : }
1268 :
1269 0 : SfxPoolItem* XLineStartItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
1270 : {
1271 0 : return new XLineStartItem(rIn);
1272 : }
1273 :
1274 0 : SvStream& XLineStartItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
1275 : {
1276 0 : NameOrIndex::Store( rOut, nItemVersion );
1277 :
1278 0 : if (!IsIndex())
1279 : {
1280 0 : streamOutB2DPolyPolygon(maPolyPolygon, rOut);
1281 : }
1282 :
1283 0 : return rOut;
1284 : }
1285 :
1286 :
1287 0 : bool XLineStartItem::GetPresentation
1288 : (
1289 : SfxItemPresentation /*ePres*/,
1290 : SfxMapUnit /*eCoreUnit*/,
1291 : SfxMapUnit /*ePresUnit*/,
1292 : OUString& rText, const IntlWrapper *
1293 : ) const
1294 : {
1295 0 : rText = GetName();
1296 0 : return true;
1297 : }
1298 :
1299 1986 : bool XLineStartItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
1300 : {
1301 1986 : nMemberId &= ~CONVERT_TWIPS;
1302 1986 : if( nMemberId == MID_NAME )
1303 : {
1304 314 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
1305 314 : rVal <<= aApiName;
1306 : }
1307 : else
1308 : {
1309 1672 : com::sun::star::drawing::PolyPolygonBezierCoords aBezier;
1310 1672 : basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier( maPolyPolygon, aBezier );
1311 1672 : rVal <<= aBezier;
1312 : }
1313 :
1314 1986 : return true;
1315 : }
1316 :
1317 196 : bool XLineStartItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
1318 : {
1319 196 : nMemberId &= ~CONVERT_TWIPS;
1320 196 : if( nMemberId == MID_NAME )
1321 : {
1322 0 : return false;
1323 : }
1324 : else
1325 : {
1326 196 : maPolyPolygon.clear();
1327 :
1328 196 : if( rVal.hasValue() && rVal.getValue() )
1329 : {
1330 196 : if( rVal.getValueType() != cppu::UnoType<com::sun::star::drawing::PolyPolygonBezierCoords>::get())
1331 0 : return false;
1332 :
1333 196 : com::sun::star::drawing::PolyPolygonBezierCoords const * pCoords = static_cast<com::sun::star::drawing::PolyPolygonBezierCoords const *>(rVal.getValue());
1334 196 : if( pCoords->Coordinates.getLength() > 0 )
1335 : {
1336 196 : maPolyPolygon = basegfx::unotools::polyPolygonBezierToB2DPolyPolygon( *pCoords );
1337 : // #i72807# close line start/end polygons hard
1338 : // maPolyPolygon.setClosed(true);
1339 : }
1340 : }
1341 : }
1342 :
1343 196 : return true;
1344 : }
1345 :
1346 : /** this function searches in both the models pool and the styles pool for XLineStartItem
1347 : and XLineEndItem with the same value or name and returns an item with the value of
1348 : this item and a unique name for an item with this value. */
1349 334 : XLineStartItem* XLineStartItem::checkForUniqueItem( SdrModel* pModel ) const
1350 : {
1351 334 : if( pModel )
1352 : {
1353 223 : XLineStartItem* pTempItem = NULL;
1354 223 : const XLineStartItem* pLineStartItem = this;
1355 :
1356 223 : OUString aUniqueName( GetName() );
1357 :
1358 223 : if( !maPolyPolygon.count() )
1359 : {
1360 : // if the polygon is empty, check if the name is empty
1361 0 : if( aUniqueName.isEmpty() )
1362 0 : return NULL;
1363 :
1364 : // force empty name for empty polygons
1365 0 : return new XLineStartItem( "", maPolyPolygon );
1366 : }
1367 :
1368 223 : if( maPolyPolygon.count() > 1L )
1369 : {
1370 : // check if the polygon is closed
1371 0 : if(!maPolyPolygon.isClosed())
1372 : {
1373 : // force a closed polygon
1374 0 : basegfx::B2DPolyPolygon aNew(maPolyPolygon);
1375 0 : aNew.setClosed(true);
1376 0 : pTempItem = new XLineStartItem( aUniqueName, aNew );
1377 0 : pLineStartItem = pTempItem;
1378 : }
1379 : }
1380 :
1381 223 : bool bForceNew = false;
1382 :
1383 : // 2. if we have a name check if there is already an item with the
1384 : // same name in the documents pool with a different line end or start
1385 :
1386 : sal_uInt32 nCount, nSurrogate;
1387 :
1388 223 : const SfxItemPool* pPool1 = &pModel->GetItemPool();
1389 223 : if( !aUniqueName.isEmpty() && pPool1 )
1390 : {
1391 141 : nCount = pPool1->GetItemCount2( XATTR_LINESTART );
1392 :
1393 181 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1394 : {
1395 177 : const XLineStartItem* pItem = static_cast<const XLineStartItem*>(pPool1->GetItem2( XATTR_LINESTART, nSurrogate ));
1396 :
1397 177 : if( pItem && ( pItem->GetName() == pLineStartItem->GetName() ) )
1398 : {
1399 : // if there is already an item with the same name and the same
1400 : // value its ok to set it
1401 137 : if( pItem->GetLineStartValue() != pLineStartItem->GetLineStartValue() )
1402 : {
1403 : // same name but different value, we need a new name for this item
1404 0 : aUniqueName.clear();
1405 0 : bForceNew = true;
1406 : }
1407 137 : break;
1408 : }
1409 : }
1410 :
1411 141 : if( !bForceNew )
1412 : {
1413 141 : nCount = pPool1->GetItemCount2( XATTR_LINEEND );
1414 :
1415 181 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1416 : {
1417 160 : const XLineEndItem* pItem = static_cast<const XLineEndItem*>(pPool1->GetItem2( XATTR_LINEEND, nSurrogate ));
1418 :
1419 160 : if( pItem && ( pItem->GetName() == pLineStartItem->GetName() ) )
1420 : {
1421 : // if there is already an item with the same name and the same
1422 : // value its ok to set it
1423 120 : if( pItem->GetLineEndValue() != pLineStartItem->GetLineStartValue() )
1424 : {
1425 : // same name but different value, we need a new name for this item
1426 0 : aUniqueName.clear();
1427 0 : bForceNew = true;
1428 : }
1429 120 : break;
1430 : }
1431 : }
1432 : }
1433 : }
1434 :
1435 223 : const SfxItemPool* pPool2 = pModel->GetStyleSheetPool() ? &pModel->GetStyleSheetPool()->GetPool() : NULL;
1436 223 : if( !aUniqueName.isEmpty() && pPool2)
1437 : {
1438 14 : nCount = pPool2->GetItemCount2( XATTR_LINESTART );
1439 45 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1440 : {
1441 44 : const XLineStartItem* pItem = static_cast<const XLineStartItem*>(pPool2->GetItem2( XATTR_LINESTART, nSurrogate ));
1442 :
1443 44 : if( pItem && ( pItem->GetName() == pLineStartItem->GetName() ) )
1444 : {
1445 : // if there is already an item with the same name and the same
1446 : // value its ok to set it
1447 13 : if( pItem->GetLineStartValue() != pLineStartItem->GetLineStartValue() )
1448 : {
1449 : // same name but different value, we need a new name for this item
1450 0 : aUniqueName.clear();
1451 0 : bForceNew = true;
1452 : }
1453 13 : break;
1454 : }
1455 : }
1456 :
1457 14 : if( !bForceNew )
1458 : {
1459 14 : nCount = pPool2->GetItemCount2( XATTR_LINEEND );
1460 48 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1461 : {
1462 41 : const XLineEndItem* pItem = static_cast<const XLineEndItem*>(pPool2->GetItem2( XATTR_LINEEND, nSurrogate ));
1463 :
1464 41 : if( pItem && ( pItem->GetName() == pLineStartItem->GetName() ) )
1465 : {
1466 : // if there is already an item with the same name and the same
1467 : // value its ok to set it
1468 7 : if( pItem->GetLineEndValue() != pLineStartItem->GetLineStartValue() )
1469 : {
1470 : // same name but different value, we need a new name for this item
1471 0 : aUniqueName.clear();
1472 0 : bForceNew = true;
1473 : }
1474 7 : break;
1475 : }
1476 : }
1477 : }
1478 : }
1479 :
1480 : // if we have no name yet, find existing item with same content or
1481 : // create a unique name
1482 223 : if( aUniqueName.isEmpty() )
1483 : {
1484 82 : bool bFoundExisting = false;
1485 :
1486 82 : sal_Int32 nUserIndex = 1;
1487 82 : const ResId aRes(SVX_RES(RID_SVXSTR_LINEEND));
1488 82 : const OUString aUser( aRes.toString() );
1489 :
1490 82 : if( pPool1 )
1491 : {
1492 82 : nCount = pPool1->GetItemCount2( XATTR_LINESTART );
1493 : sal_uInt32 nSurrogate2;
1494 :
1495 469 : for( nSurrogate2 = 0; nSurrogate2 < nCount; nSurrogate2++ )
1496 : {
1497 452 : const XLineStartItem* pItem = static_cast<const XLineStartItem*>(pPool1->GetItem2( XATTR_LINESTART, nSurrogate2 ));
1498 :
1499 452 : if( pItem && !pItem->GetName().isEmpty() )
1500 : {
1501 349 : if( !bForceNew && pItem->GetLineStartValue() == pLineStartItem->GetLineStartValue() )
1502 : {
1503 65 : aUniqueName = pItem->GetName();
1504 65 : bFoundExisting = true;
1505 65 : break;
1506 : }
1507 :
1508 284 : if( pItem->GetName().startsWith( aUser ) )
1509 : {
1510 76 : sal_Int32 nThisIndex = pItem->GetName().copy( aUser.getLength() ).toInt32();
1511 76 : if( nThisIndex >= nUserIndex )
1512 76 : nUserIndex = nThisIndex + 1;
1513 : }
1514 : }
1515 : }
1516 :
1517 82 : nCount = pPool1->GetItemCount2( XATTR_LINEEND );
1518 448 : for( nSurrogate2 = 0; nSurrogate2 < nCount; nSurrogate2++ )
1519 : {
1520 387 : const XLineEndItem* pItem = static_cast<const XLineEndItem*>(pPool1->GetItem2( XATTR_LINEEND, nSurrogate2 ));
1521 :
1522 387 : if( pItem && !pItem->GetName().isEmpty() )
1523 : {
1524 305 : if( !bForceNew && pItem->GetLineEndValue() == pLineStartItem->GetLineStartValue() )
1525 : {
1526 21 : aUniqueName = pItem->GetName();
1527 21 : bFoundExisting = true;
1528 21 : break;
1529 : }
1530 :
1531 284 : if( pItem->GetName().startsWith( aUser ) )
1532 : {
1533 76 : sal_Int32 nThisIndex = pItem->GetName().copy( aUser.getLength() ).toInt32();
1534 76 : if( nThisIndex >= nUserIndex )
1535 13 : nUserIndex = nThisIndex + 1;
1536 : }
1537 : }
1538 : }
1539 : }
1540 :
1541 82 : if( !bFoundExisting )
1542 : {
1543 17 : aUniqueName = aUser;
1544 17 : aUniqueName += " ";
1545 17 : aUniqueName += OUString::number( nUserIndex );
1546 82 : }
1547 : }
1548 :
1549 : // if the given name is not valid, replace it!
1550 223 : if( aUniqueName != GetName() || pTempItem )
1551 : {
1552 82 : if( pTempItem )
1553 : {
1554 0 : pTempItem->SetName( aUniqueName );
1555 0 : return pTempItem;
1556 : }
1557 : else
1558 : {
1559 82 : return new XLineStartItem( aUniqueName, maPolyPolygon );
1560 : }
1561 141 : }
1562 : }
1563 :
1564 252 : return NULL;
1565 : }
1566 :
1567 17119 : TYPEINIT1_AUTOFACTORY(XLineEndItem, NameOrIndex);
1568 :
1569 152 : XLineEndItem::XLineEndItem(sal_Int32 nIndex)
1570 152 : : NameOrIndex(XATTR_LINEEND, nIndex)
1571 : {
1572 152 : }
1573 :
1574 408 : XLineEndItem::XLineEndItem(const OUString& rName, const basegfx::B2DPolyPolygon& rPolyPolygon)
1575 : : NameOrIndex(XATTR_LINEEND, rName),
1576 408 : maPolyPolygon(rPolyPolygon)
1577 : {
1578 408 : }
1579 :
1580 2149 : XLineEndItem::XLineEndItem(const XLineEndItem& rItem)
1581 : : NameOrIndex(rItem),
1582 2149 : maPolyPolygon(rItem.maPolyPolygon)
1583 : {
1584 2149 : }
1585 :
1586 0 : XLineEndItem::XLineEndItem(SvStream& rIn) :
1587 0 : NameOrIndex(XATTR_LINEEND, rIn)
1588 : {
1589 0 : if (!IsIndex())
1590 : {
1591 0 : maPolyPolygon = streamInB2DPolyPolygon(rIn);
1592 : }
1593 0 : }
1594 :
1595 5069 : XLineEndItem::XLineEndItem(SfxItemPool* /*pPool*/, const basegfx::B2DPolyPolygon& rPolyPolygon)
1596 : : NameOrIndex( XATTR_LINEEND, -1 ),
1597 5069 : maPolyPolygon(rPolyPolygon)
1598 : {
1599 5069 : }
1600 :
1601 2149 : SfxPoolItem* XLineEndItem::Clone(SfxItemPool* /*pPool*/) const
1602 : {
1603 2149 : return new XLineEndItem(*this);
1604 : }
1605 :
1606 2099 : bool XLineEndItem::operator==(const SfxPoolItem& rItem) const
1607 : {
1608 2099 : return ( NameOrIndex::operator==(rItem) && static_cast<const XLineEndItem&>(rItem).maPolyPolygon == maPolyPolygon );
1609 : }
1610 :
1611 0 : SfxPoolItem* XLineEndItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
1612 : {
1613 0 : return new XLineEndItem(rIn);
1614 : }
1615 :
1616 0 : SvStream& XLineEndItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
1617 : {
1618 0 : NameOrIndex::Store( rOut, nItemVersion );
1619 :
1620 0 : if (!IsIndex())
1621 : {
1622 0 : streamOutB2DPolyPolygon(maPolyPolygon, rOut);
1623 : }
1624 :
1625 0 : return rOut;
1626 : }
1627 :
1628 :
1629 : /** this function searches in both the models pool and the styles pool for XLineStartItem
1630 : and XLineEndItem with the same value or name and returns an item with the value of
1631 : this item and a unique name for an item with this value. */
1632 495 : XLineEndItem* XLineEndItem::checkForUniqueItem( SdrModel* pModel ) const
1633 : {
1634 495 : if( pModel )
1635 : {
1636 239 : XLineEndItem* pTempItem = NULL;
1637 239 : const XLineEndItem* pLineEndItem = this;
1638 :
1639 239 : OUString aUniqueName( GetName() );
1640 :
1641 239 : if( !maPolyPolygon.count() )
1642 : {
1643 : // if the polygon is empty, check if the name is empty
1644 0 : if( aUniqueName.isEmpty() )
1645 0 : return NULL;
1646 :
1647 : // force empty name for empty polygons
1648 0 : return new XLineEndItem( "", maPolyPolygon );
1649 : }
1650 :
1651 239 : if( maPolyPolygon.count() > 1L )
1652 : {
1653 : // check if the polygon is closed
1654 0 : if(!maPolyPolygon.isClosed())
1655 : {
1656 : // force a closed polygon
1657 0 : basegfx::B2DPolyPolygon aNew(maPolyPolygon);
1658 0 : aNew.setClosed(true);
1659 0 : pTempItem = new XLineEndItem( aUniqueName, aNew );
1660 0 : pLineEndItem = pTempItem;
1661 : }
1662 : }
1663 :
1664 239 : bool bForceNew = false;
1665 :
1666 : // 2. if we have a name check if there is already an item with the
1667 : // same name in the documents pool with a different line end or start
1668 :
1669 : sal_uInt16 nCount, nSurrogate;
1670 :
1671 239 : const SfxItemPool* pPool1 = &pModel->GetItemPool();
1672 239 : if( !aUniqueName.isEmpty() && pPool1 )
1673 : {
1674 198 : nCount = pPool1->GetItemCount2( XATTR_LINESTART );
1675 :
1676 304 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1677 : {
1678 298 : const XLineStartItem* pItem = static_cast<const XLineStartItem*>(pPool1->GetItem2( XATTR_LINESTART, nSurrogate ));
1679 :
1680 298 : if( pItem && ( pItem->GetName() == pLineEndItem->GetName() ) )
1681 : {
1682 : // if there is already an item with the same name and the same
1683 : // value its ok to set it
1684 192 : if( pItem->GetLineStartValue() != pLineEndItem->GetLineEndValue() )
1685 : {
1686 : // same name but different value, we need a new name for this item
1687 2 : aUniqueName.clear();
1688 2 : bForceNew = true;
1689 : }
1690 192 : break;
1691 : }
1692 : }
1693 :
1694 198 : if( !bForceNew )
1695 : {
1696 196 : nCount = pPool1->GetItemCount2( XATTR_LINEEND );
1697 :
1698 301 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1699 : {
1700 300 : const XLineEndItem* pItem = static_cast<const XLineEndItem*>(pPool1->GetItem2( XATTR_LINEEND, nSurrogate ));
1701 :
1702 300 : if( pItem && ( pItem->GetName() == pLineEndItem->GetName() ) )
1703 : {
1704 : // if there is already an item with the same name and the same
1705 : // value its ok to set it
1706 195 : if( pItem->GetLineEndValue() != pLineEndItem->GetLineEndValue() )
1707 : {
1708 : // same name but different value, we need a new name for this item
1709 0 : aUniqueName.clear();
1710 0 : bForceNew = true;
1711 : }
1712 195 : break;
1713 : }
1714 : }
1715 : }
1716 : }
1717 :
1718 239 : const SfxItemPool* pPool2 = pModel->GetStyleSheetPool() ? &pModel->GetStyleSheetPool()->GetPool() : NULL;
1719 239 : if( !aUniqueName.isEmpty() && pPool2)
1720 : {
1721 45 : nCount = pPool2->GetItemCount2( XATTR_LINESTART );
1722 144 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1723 : {
1724 138 : const XLineStartItem* pItem = static_cast<const XLineStartItem*>(pPool2->GetItem2( XATTR_LINESTART, nSurrogate ));
1725 :
1726 138 : if( pItem && ( pItem->GetName() == pLineEndItem->GetName() ) )
1727 : {
1728 : // if there is already an item with the same name and the same
1729 : // value its ok to set it
1730 39 : if( pItem->GetLineStartValue() != pLineEndItem->GetLineEndValue() )
1731 : {
1732 : // same name but different value, we need a new name for this item
1733 0 : aUniqueName.clear();
1734 0 : bForceNew = true;
1735 : }
1736 39 : break;
1737 : }
1738 : }
1739 :
1740 45 : if( !bForceNew )
1741 : {
1742 45 : nCount = pPool2->GetItemCount2( XATTR_LINEEND );
1743 146 : for( nSurrogate = 0; nSurrogate < nCount; nSurrogate++ )
1744 : {
1745 146 : const XLineEndItem* pItem = static_cast<const XLineEndItem*>(pPool2->GetItem2( XATTR_LINEEND, nSurrogate ));
1746 :
1747 146 : if( pItem && ( pItem->GetName() == pLineEndItem->GetName() ) )
1748 : {
1749 : // if there is already an item with the same name and the same
1750 : // value its ok to set it
1751 45 : if( pItem->GetLineEndValue() != pLineEndItem->GetLineEndValue() )
1752 : {
1753 : // same name but different value, we need a new name for this item
1754 0 : aUniqueName.clear();
1755 0 : bForceNew = true;
1756 : }
1757 45 : break;
1758 : }
1759 : }
1760 : }
1761 : }
1762 :
1763 : // if we have no name yet, find existing item with same content or
1764 : // create a unique name
1765 239 : if( aUniqueName.isEmpty() )
1766 : {
1767 43 : bool bFoundExisting = false;
1768 :
1769 43 : sal_Int32 nUserIndex = 1;
1770 43 : const ResId aRes(SVX_RES(RID_SVXSTR_LINEEND));
1771 43 : const OUString aUser( aRes.toString() );
1772 :
1773 43 : if( pPool1 )
1774 : {
1775 43 : nCount = pPool1->GetItemCount2( XATTR_LINESTART );
1776 : sal_uInt32 nSurrogate2;
1777 :
1778 199 : for( nSurrogate2 = 0; nSurrogate2 < nCount; nSurrogate2++ )
1779 : {
1780 183 : const XLineStartItem* pItem = static_cast<const XLineStartItem*>(pPool1->GetItem2( XATTR_LINESTART, nSurrogate2 ));
1781 :
1782 183 : if( pItem && !pItem->GetName().isEmpty() )
1783 : {
1784 152 : if( !bForceNew && pItem->GetLineStartValue() == pLineEndItem->GetLineEndValue() )
1785 : {
1786 27 : aUniqueName = pItem->GetName();
1787 27 : bFoundExisting = true;
1788 27 : break;
1789 : }
1790 :
1791 125 : if( pItem->GetName().startsWith( aUser ) )
1792 : {
1793 90 : sal_Int32 nThisIndex = pItem->GetName().copy( aUser.getLength() ).toInt32();
1794 90 : if( nThisIndex >= nUserIndex )
1795 90 : nUserIndex = nThisIndex + 1;
1796 : }
1797 : }
1798 : }
1799 :
1800 43 : nCount = pPool1->GetItemCount2( XATTR_LINEEND );
1801 175 : for( nSurrogate2 = 0; nSurrogate2 < nCount; nSurrogate2++ )
1802 : {
1803 172 : const XLineEndItem* pItem = static_cast<const XLineEndItem*>(pPool1->GetItem2( XATTR_LINEEND, nSurrogate2 ));
1804 :
1805 172 : if( pItem && !pItem->GetName().isEmpty() )
1806 : {
1807 141 : if( !bForceNew && pItem->GetLineEndValue() == pLineEndItem->GetLineEndValue() )
1808 : {
1809 40 : aUniqueName = pItem->GetName();
1810 40 : bFoundExisting = true;
1811 40 : break;
1812 : }
1813 :
1814 101 : if( pItem->GetName().startsWith( aUser ) )
1815 : {
1816 63 : sal_Int32 nThisIndex = pItem->GetName().copy( aUser.getLength() ).toInt32();
1817 63 : if( nThisIndex >= nUserIndex )
1818 0 : nUserIndex = nThisIndex + 1;
1819 : }
1820 : }
1821 : }
1822 : }
1823 :
1824 43 : if( !bFoundExisting )
1825 : {
1826 3 : aUniqueName = aUser;
1827 3 : aUniqueName += " ";
1828 3 : aUniqueName += OUString::number( nUserIndex );
1829 43 : }
1830 : }
1831 :
1832 : // if the given name is not valid, replace it!
1833 239 : if( aUniqueName != GetName() || pTempItem )
1834 : {
1835 43 : if( pTempItem )
1836 : {
1837 0 : pTempItem->SetName( aUniqueName );
1838 0 : return pTempItem;
1839 : }
1840 : else
1841 : {
1842 43 : return new XLineEndItem( aUniqueName, maPolyPolygon );
1843 : }
1844 196 : }
1845 : }
1846 :
1847 452 : return NULL;
1848 : }
1849 :
1850 0 : bool XLineEndItem::GetPresentation
1851 : (
1852 : SfxItemPresentation /*ePres*/,
1853 : SfxMapUnit /*eCoreUnit*/,
1854 : SfxMapUnit /*ePresUnit*/,
1855 : OUString& rText, const IntlWrapper *
1856 : ) const
1857 : {
1858 0 : rText = GetName();
1859 0 : return true;
1860 : }
1861 :
1862 1979 : bool XLineEndItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
1863 : {
1864 1979 : nMemberId &= ~CONVERT_TWIPS;
1865 1979 : if( nMemberId == MID_NAME )
1866 : {
1867 326 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
1868 326 : rVal <<= aApiName;
1869 : }
1870 : else
1871 : {
1872 1653 : com::sun::star::drawing::PolyPolygonBezierCoords aBezier;
1873 1653 : basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier( maPolyPolygon, aBezier );
1874 1653 : rVal <<= aBezier;
1875 : }
1876 1979 : return true;
1877 : }
1878 :
1879 196 : bool XLineEndItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
1880 : {
1881 196 : nMemberId &= ~CONVERT_TWIPS;
1882 196 : if( nMemberId == MID_NAME )
1883 : {
1884 0 : return false;
1885 : }
1886 : else
1887 : {
1888 196 : maPolyPolygon.clear();
1889 :
1890 196 : if( rVal.hasValue() && rVal.getValue() )
1891 : {
1892 196 : if( rVal.getValueType() != cppu::UnoType<com::sun::star::drawing::PolyPolygonBezierCoords>::get())
1893 0 : return false;
1894 :
1895 196 : com::sun::star::drawing::PolyPolygonBezierCoords const * pCoords = static_cast<com::sun::star::drawing::PolyPolygonBezierCoords const *>(rVal.getValue());
1896 196 : if( pCoords->Coordinates.getLength() > 0 )
1897 : {
1898 196 : maPolyPolygon = basegfx::unotools::polyPolygonBezierToB2DPolyPolygon( *pCoords );
1899 : // #i72807# close line start/end polygons hard
1900 : // maPolyPolygon.setClosed(true);
1901 : }
1902 : }
1903 : }
1904 :
1905 196 : return true;
1906 : }
1907 :
1908 16103 : TYPEINIT1_AUTOFACTORY(XLineStartWidthItem, SfxMetricItem);
1909 :
1910 5726 : XLineStartWidthItem::XLineStartWidthItem(long nWidth) :
1911 5726 : SfxMetricItem(XATTR_LINESTARTWIDTH, nWidth)
1912 : {
1913 5726 : }
1914 :
1915 0 : XLineStartWidthItem::XLineStartWidthItem(SvStream& rIn) :
1916 0 : SfxMetricItem(XATTR_LINESTARTWIDTH, rIn)
1917 : {
1918 0 : }
1919 :
1920 1132 : SfxPoolItem* XLineStartWidthItem::Clone(SfxItemPool* /*pPool*/) const
1921 : {
1922 1132 : return new XLineStartWidthItem(*this);
1923 : }
1924 :
1925 0 : SfxPoolItem* XLineStartWidthItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
1926 : {
1927 0 : return new XLineStartWidthItem(rIn);
1928 : }
1929 :
1930 0 : bool XLineStartWidthItem::GetPresentation
1931 : (
1932 : SfxItemPresentation /*ePres*/,
1933 : SfxMapUnit eCoreUnit,
1934 : SfxMapUnit ePresUnit,
1935 : OUString& rText, const IntlWrapper * pIntl
1936 : ) const
1937 : {
1938 0 : rText = GetMetricText( (long) GetValue(),
1939 0 : eCoreUnit, ePresUnit, pIntl) +
1940 0 : " " + EE_RESSTR( GetMetricId( ePresUnit) );
1941 0 : return true;
1942 : }
1943 :
1944 309 : bool XLineStartWidthItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
1945 : {
1946 309 : rVal <<= (sal_Int32)GetValue();
1947 309 : return true;
1948 : }
1949 :
1950 289 : bool XLineStartWidthItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
1951 : {
1952 289 : sal_Int32 nValue = 0;
1953 289 : rVal >>= nValue;
1954 289 : SetValue( nValue );
1955 289 : return true;
1956 : }
1957 :
1958 16534 : TYPEINIT1_AUTOFACTORY(XLineEndWidthItem, SfxMetricItem);
1959 :
1960 5689 : XLineEndWidthItem::XLineEndWidthItem(long nWidth) :
1961 5689 : SfxMetricItem(XATTR_LINEENDWIDTH, nWidth)
1962 : {
1963 5689 : }
1964 :
1965 0 : XLineEndWidthItem::XLineEndWidthItem(SvStream& rIn) :
1966 0 : SfxMetricItem(XATTR_LINEENDWIDTH, rIn)
1967 : {
1968 0 : }
1969 :
1970 1369 : SfxPoolItem* XLineEndWidthItem::Clone(SfxItemPool* /*pPool*/) const
1971 : {
1972 1369 : return new XLineEndWidthItem(*this);
1973 : }
1974 :
1975 0 : SfxPoolItem* XLineEndWidthItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
1976 : {
1977 0 : return new XLineEndWidthItem(rIn);
1978 : }
1979 :
1980 0 : bool XLineEndWidthItem::GetPresentation
1981 : (
1982 : SfxItemPresentation /*ePres*/,
1983 : SfxMapUnit eCoreUnit,
1984 : SfxMapUnit ePresUnit,
1985 : OUString& rText, const IntlWrapper *pIntl
1986 : ) const
1987 : {
1988 0 : rText = GetMetricText( (long) GetValue(),
1989 0 : eCoreUnit, ePresUnit, pIntl) +
1990 0 : " " + EE_RESSTR( GetMetricId( ePresUnit) );
1991 0 : return true;
1992 : }
1993 :
1994 307 : bool XLineEndWidthItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
1995 : {
1996 307 : rVal <<= (sal_Int32)GetValue();
1997 307 : return true;
1998 : }
1999 :
2000 353 : bool XLineEndWidthItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
2001 : {
2002 353 : sal_Int32 nValue = 0;
2003 353 : rVal >>= nValue;
2004 353 : SetValue( nValue );
2005 353 : return true;
2006 : }
2007 :
2008 15965 : TYPEINIT1_AUTOFACTORY(XLineStartCenterItem, SfxBoolItem);
2009 :
2010 5464 : XLineStartCenterItem::XLineStartCenterItem(bool bStartCenter) :
2011 5464 : SfxBoolItem(XATTR_LINESTARTCENTER, bStartCenter)
2012 : {
2013 5464 : }
2014 :
2015 0 : XLineStartCenterItem::XLineStartCenterItem(SvStream& rIn) :
2016 0 : SfxBoolItem(XATTR_LINESTARTCENTER, rIn)
2017 : {
2018 0 : }
2019 :
2020 969 : SfxPoolItem* XLineStartCenterItem::Clone(SfxItemPool* /*pPool*/) const
2021 : {
2022 969 : return new XLineStartCenterItem(*this);
2023 : }
2024 :
2025 0 : SfxPoolItem* XLineStartCenterItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
2026 : {
2027 0 : return new XLineStartCenterItem(rIn);
2028 : }
2029 :
2030 0 : bool XLineStartCenterItem::GetPresentation
2031 : (
2032 : SfxItemPresentation /*ePres*/,
2033 : SfxMapUnit /*eCoreUnit*/,
2034 : SfxMapUnit /*ePresUnit*/,
2035 : OUString& rText, const IntlWrapper *
2036 : ) const
2037 : {
2038 0 : rText = OUString( ResId( GetValue() ? RID_SVXSTR_CENTERED :
2039 0 : RID_SVXSTR_NOTCENTERED, DIALOG_MGR() ) );
2040 0 : return true;
2041 : }
2042 :
2043 294 : bool XLineStartCenterItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
2044 : {
2045 294 : sal_Bool bValue = GetValue();
2046 294 : rVal.setValue( &bValue, cppu::UnoType<bool>::get() );
2047 294 : return true;
2048 : }
2049 :
2050 245 : bool XLineStartCenterItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
2051 : {
2052 245 : if( !rVal.hasValue() || rVal.getValueType() != cppu::UnoType<bool>::get() )
2053 0 : return false;
2054 :
2055 245 : SetValue( *static_cast<sal_Bool const *>(rVal.getValue()) );
2056 245 : return true;
2057 : }
2058 :
2059 16246 : TYPEINIT1_AUTOFACTORY(XLineEndCenterItem, SfxBoolItem);
2060 :
2061 5172 : XLineEndCenterItem::XLineEndCenterItem(bool bEndCenter) :
2062 5172 : SfxBoolItem(XATTR_LINEENDCENTER, bEndCenter)
2063 : {
2064 5172 : }
2065 :
2066 0 : XLineEndCenterItem::XLineEndCenterItem(SvStream& rIn) :
2067 0 : SfxBoolItem(XATTR_LINEENDCENTER, rIn)
2068 : {
2069 0 : }
2070 :
2071 798 : SfxPoolItem* XLineEndCenterItem::Clone(SfxItemPool* /*pPool*/) const
2072 : {
2073 798 : return new XLineEndCenterItem(*this);
2074 : }
2075 :
2076 0 : SfxPoolItem* XLineEndCenterItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
2077 : {
2078 0 : return new XLineEndCenterItem(rIn);
2079 : }
2080 :
2081 0 : bool XLineEndCenterItem::GetPresentation
2082 : (
2083 : SfxItemPresentation /*ePres*/,
2084 : SfxMapUnit /*eCoreUnit*/,
2085 : SfxMapUnit /*ePresUnit*/,
2086 : OUString& rText, const IntlWrapper *
2087 : ) const
2088 : {
2089 0 : rText = OUString( ResId( GetValue() ? RID_SVXSTR_CENTERED :
2090 0 : RID_SVXSTR_NOTCENTERED, DIALOG_MGR() ) );
2091 0 : return true;
2092 : }
2093 :
2094 277 : bool XLineEndCenterItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
2095 : {
2096 277 : sal_Bool bValue = GetValue();
2097 277 : rVal.setValue( &bValue, cppu::UnoType<bool>::get() );
2098 277 : return true;
2099 : }
2100 :
2101 263 : bool XLineEndCenterItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
2102 : {
2103 263 : if( !rVal.hasValue() || rVal.getValueType() != cppu::UnoType<bool>::get() )
2104 0 : return false;
2105 :
2106 263 : SetValue( *static_cast<sal_Bool const *>(rVal.getValue()) );
2107 263 : return true;
2108 : }
2109 :
2110 : // --- fill attributes ---
2111 :
2112 299152 : TYPEINIT1_AUTOFACTORY(XFillStyleItem, SfxEnumItem);
2113 :
2114 61885 : XFillStyleItem::XFillStyleItem(drawing::FillStyle eFillStyle) :
2115 61885 : SfxEnumItem(XATTR_FILLSTYLE, sal::static_int_cast< sal_uInt16 >(eFillStyle))
2116 : {
2117 61885 : }
2118 :
2119 0 : XFillStyleItem::XFillStyleItem(SvStream& rIn) :
2120 0 : SfxEnumItem(XATTR_FILLSTYLE, rIn)
2121 : {
2122 0 : }
2123 :
2124 44936 : SfxPoolItem* XFillStyleItem::Clone(SfxItemPool* /*pPool*/) const
2125 : {
2126 44936 : return new XFillStyleItem( *this );
2127 : }
2128 :
2129 0 : SfxPoolItem* XFillStyleItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
2130 : {
2131 0 : return new XFillStyleItem(rIn);
2132 : }
2133 :
2134 0 : bool XFillStyleItem::GetPresentation
2135 : (
2136 : SfxItemPresentation /*ePres*/,
2137 : SfxMapUnit /*eCoreUnit*/,
2138 : SfxMapUnit /*ePresUnit*/,
2139 : OUString& rText, const IntlWrapper *
2140 : ) const
2141 : {
2142 0 : rText.clear();
2143 :
2144 0 : sal_uInt16 nId = 0;
2145 :
2146 0 : switch( (sal_uInt16)GetValue() )
2147 : {
2148 : case drawing::FillStyle_NONE:
2149 0 : nId = RID_SVXSTR_INVISIBLE;
2150 0 : break;
2151 : case drawing::FillStyle_SOLID:
2152 0 : nId = RID_SVXSTR_SOLID;
2153 0 : break;
2154 : case drawing::FillStyle_GRADIENT:
2155 0 : nId = RID_SVXSTR_GRADIENT;
2156 0 : break;
2157 : case drawing::FillStyle_HATCH:
2158 0 : nId = RID_SVXSTR_HATCH;
2159 0 : break;
2160 : case drawing::FillStyle_BITMAP:
2161 0 : nId = RID_SVXSTR_BITMAP;
2162 0 : break;
2163 : }
2164 :
2165 0 : if ( nId )
2166 0 : rText = SVX_RESSTR( nId );
2167 0 : return true;
2168 : }
2169 :
2170 0 : sal_uInt16 XFillStyleItem::GetValueCount() const
2171 : {
2172 0 : return 5;
2173 : }
2174 :
2175 3292 : bool XFillStyleItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
2176 : {
2177 3292 : ::com::sun::star::drawing::FillStyle eFS = (::com::sun::star::drawing::FillStyle)GetValue();
2178 :
2179 3292 : rVal <<= eFS;
2180 :
2181 3292 : return true;
2182 : }
2183 :
2184 31171 : bool XFillStyleItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
2185 : {
2186 : ::com::sun::star::drawing::FillStyle eFS;
2187 31171 : if(!(rVal >>= eFS))
2188 : {
2189 : // also try an int (for Basic)
2190 2 : sal_Int32 nFS = 0;
2191 2 : if(!(rVal >>= nFS))
2192 2 : return false;
2193 0 : eFS = (::com::sun::star::drawing::FillStyle)nFS;
2194 : }
2195 :
2196 31169 : SetValue( sal::static_int_cast< sal_uInt16 >( eFS ) );
2197 :
2198 31169 : return true;
2199 : }
2200 :
2201 0 : void XFillStyleItem::dumpAsXml(xmlTextWriterPtr pWriter) const
2202 : {
2203 0 : xmlTextWriterStartElement(pWriter, BAD_CAST("xFillStyleItem"));
2204 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("whichId"), BAD_CAST(OString::number(Which()).getStr()));
2205 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"), BAD_CAST(OString::number(GetValue()).getStr()));
2206 :
2207 0 : OUString aPresentation;
2208 0 : GetPresentation(SFX_ITEM_PRESENTATION_NAMELESS, SFX_MAPUNIT_100TH_MM, SFX_MAPUNIT_100TH_MM, aPresentation);
2209 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("presentation"), BAD_CAST(aPresentation.toUtf8().getStr()));
2210 :
2211 0 : xmlTextWriterEndElement(pWriter);
2212 0 : }
2213 :
2214 167996 : TYPEINIT1_AUTOFACTORY(XFillColorItem, XColorItem);
2215 :
2216 0 : XFillColorItem::XFillColorItem(sal_Int32 nIndex, const Color& rTheColor) :
2217 0 : XColorItem(XATTR_FILLCOLOR, nIndex, rTheColor)
2218 : {
2219 0 : }
2220 :
2221 43532 : XFillColorItem::XFillColorItem(const OUString& rName, const Color& rTheColor) :
2222 43532 : XColorItem(XATTR_FILLCOLOR, rName, rTheColor)
2223 : {
2224 43532 : }
2225 :
2226 0 : XFillColorItem::XFillColorItem(SvStream& rIn) :
2227 0 : XColorItem(XATTR_FILLCOLOR, rIn)
2228 : {
2229 0 : }
2230 :
2231 60940 : SfxPoolItem* XFillColorItem::Clone(SfxItemPool* /*pPool*/) const
2232 : {
2233 60940 : return new XFillColorItem(*this);
2234 : }
2235 :
2236 0 : SfxPoolItem* XFillColorItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
2237 : {
2238 0 : return new XFillColorItem(rIn);
2239 : }
2240 :
2241 0 : bool XFillColorItem::GetPresentation
2242 : (
2243 : SfxItemPresentation /*ePres*/,
2244 : SfxMapUnit /*eCoreUnit*/,
2245 : SfxMapUnit /*ePresUnit*/,
2246 : OUString& rText, const IntlWrapper *
2247 : ) const
2248 : {
2249 0 : rText = GetName();
2250 0 : return true;
2251 : }
2252 :
2253 1829 : bool XFillColorItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
2254 : {
2255 1829 : rVal <<= (sal_Int32)GetColorValue().GetRGBColor();
2256 :
2257 1829 : return true;
2258 : }
2259 :
2260 22832 : bool XFillColorItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/)
2261 : {
2262 22832 : sal_Int32 nValue = 0;
2263 22832 : if(!(rVal >>= nValue ))
2264 0 : return false;
2265 :
2266 22832 : SetColorValue( nValue );
2267 22832 : return true;
2268 : }
2269 :
2270 0 : void XFillColorItem::dumpAsXml(xmlTextWriterPtr pWriter) const
2271 : {
2272 0 : xmlTextWriterStartElement(pWriter, BAD_CAST("xFillColorItem"));
2273 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("whichId"), BAD_CAST(OString::number(Which()).getStr()));
2274 0 : xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"), BAD_CAST(GetColorValue().AsRGBHexString().toUtf8().getStr()));
2275 0 : xmlTextWriterEndElement(pWriter);
2276 0 : }
2277 :
2278 16624 : TYPEINIT1_AUTOFACTORY(XSecondaryFillColorItem, XColorItem);
2279 :
2280 4814 : XSecondaryFillColorItem::XSecondaryFillColorItem(const OUString& rName, const Color& rTheColor) :
2281 4814 : XColorItem(XATTR_SECONDARYFILLCOLOR, rName, rTheColor)
2282 : {
2283 4814 : }
2284 :
2285 0 : XSecondaryFillColorItem::XSecondaryFillColorItem( SvStream& rIn ) :
2286 0 : XColorItem(XATTR_SECONDARYFILLCOLOR, rIn)
2287 : {
2288 0 : }
2289 :
2290 48 : SfxPoolItem* XSecondaryFillColorItem::Clone(SfxItemPool* /*pPool*/) const
2291 : {
2292 48 : return new XSecondaryFillColorItem(*this);
2293 : }
2294 :
2295 0 : SfxPoolItem* XSecondaryFillColorItem::Create( SvStream& rIn, sal_uInt16 nVer ) const
2296 : {
2297 0 : if ( nVer >= 2 )
2298 0 : return new XSecondaryFillColorItem( rIn );
2299 : else
2300 0 : return new XSecondaryFillColorItem( "", Color(0,184,255) );
2301 : }
2302 :
2303 0 : sal_uInt16 XSecondaryFillColorItem::GetVersion( sal_uInt16 /*nFileFormatVersion*/ ) const
2304 : {
2305 0 : return 2;
2306 : }
2307 :
2308 0 : bool XSecondaryFillColorItem::GetPresentation
2309 : (
2310 : SfxItemPresentation /*ePres*/,
2311 : SfxMapUnit /*eCoreUnit*/,
2312 : SfxMapUnit /*ePresUnit*/,
2313 : OUString& rText, const IntlWrapper *
2314 : ) const
2315 : {
2316 0 : rText = GetName();
2317 0 : return true;
2318 : }
2319 :
2320 1640 : XGradient::XGradient() :
2321 : eStyle( css::awt::GradientStyle_LINEAR ),
2322 : aStartColor( Color( COL_BLACK ) ),
2323 : aEndColor( Color( COL_WHITE ) ),
2324 : nAngle( 0 ),
2325 : nBorder( 0 ),
2326 : nOfsX( 50 ),
2327 : nOfsY( 50 ),
2328 : nIntensStart( 100 ),
2329 : nIntensEnd( 100 ),
2330 1640 : nStepCount( 0 )
2331 : {
2332 1640 : }
2333 :
2334 5339 : XGradient::XGradient(const Color& rStart, const Color& rEnd,
2335 : css::awt::GradientStyle eTheStyle, long nTheAngle, sal_uInt16 nXOfs,
2336 : sal_uInt16 nYOfs, sal_uInt16 nTheBorder,
2337 : sal_uInt16 nStartIntens, sal_uInt16 nEndIntens,
2338 : sal_uInt16 nSteps) :
2339 : eStyle(eTheStyle),
2340 : aStartColor(rStart),
2341 : aEndColor(rEnd),
2342 : nAngle(nTheAngle),
2343 : nBorder(nTheBorder),
2344 : nOfsX(nXOfs),
2345 : nOfsY(nYOfs),
2346 : nIntensStart(nStartIntens),
2347 : nIntensEnd(nEndIntens),
2348 5339 : nStepCount(nSteps)
2349 : {
2350 5339 : }
2351 :
2352 15111 : bool XGradient::operator==(const XGradient& rGradient) const
2353 : {
2354 29294 : return ( eStyle == rGradient.eStyle &&
2355 25431 : aStartColor == rGradient.aStartColor &&
2356 22494 : aEndColor == rGradient.aEndColor &&
2357 22404 : nAngle == rGradient.nAngle &&
2358 22316 : nBorder == rGradient.nBorder &&
2359 22316 : nOfsX == rGradient.nOfsX &&
2360 22316 : nOfsY == rGradient.nOfsY &&
2361 22316 : nIntensStart == rGradient.nIntensStart &&
2362 37427 : nIntensEnd == rGradient.nIntensEnd &&
2363 26269 : nStepCount == rGradient.nStepCount );
2364 : }
2365 :
2366 37297 : TYPEINIT1_AUTOFACTORY(XFillGradientItem, NameOrIndex);
2367 :
2368 4814 : XFillGradientItem::XFillGradientItem(sal_Int32 nIndex,
2369 : const XGradient& rTheGradient) :
2370 : NameOrIndex(XATTR_FILLGRADIENT, nIndex),
2371 4814 : aGradient(rTheGradient)
2372 : {
2373 4814 : }
2374 :
2375 319 : XFillGradientItem::XFillGradientItem(const OUString& rName,
2376 : const XGradient& rTheGradient, sal_uInt16 nWhich)
2377 : : NameOrIndex(nWhich, rName)
2378 319 : , aGradient(rTheGradient)
2379 : {
2380 319 : }
2381 :
2382 1931 : XFillGradientItem::XFillGradientItem(const XFillGradientItem& rItem) :
2383 : NameOrIndex(rItem),
2384 1931 : aGradient(rItem.aGradient)
2385 : {
2386 1931 : }
2387 :
2388 0 : XFillGradientItem::XFillGradientItem(SvStream& rIn, sal_uInt16 nVer) :
2389 : NameOrIndex(XATTR_FILLGRADIENT, rIn),
2390 0 : aGradient(COL_BLACK, COL_WHITE)
2391 : {
2392 0 : if (!IsIndex())
2393 : {
2394 : sal_uInt16 nUSTemp;
2395 : sal_uInt16 nRed;
2396 : sal_uInt16 nGreen;
2397 : sal_uInt16 nBlue;
2398 : sal_Int16 nITemp;
2399 : sal_Int32 nLTemp;
2400 :
2401 0 : rIn.ReadInt16( nITemp ); aGradient.SetGradientStyle((css::awt::GradientStyle)nITemp);
2402 0 : rIn.ReadUInt16( nRed );
2403 0 : rIn.ReadUInt16( nGreen );
2404 0 : rIn.ReadUInt16( nBlue );
2405 0 : Color aCol;
2406 0 : aCol = Color( (sal_uInt8)( nRed >> 8 ), (sal_uInt8)( nGreen >> 8 ), (sal_uInt8)( nBlue >> 8 ) );
2407 0 : aGradient.SetStartColor( aCol );
2408 :
2409 0 : rIn.ReadUInt16( nRed );
2410 0 : rIn.ReadUInt16( nGreen );
2411 0 : rIn.ReadUInt16( nBlue );
2412 0 : aCol = Color( (sal_uInt8)( nRed >> 8 ), (sal_uInt8)( nGreen >> 8 ), (sal_uInt8)( nBlue >> 8 ) );
2413 0 : aGradient.SetEndColor(aCol);
2414 0 : rIn.ReadInt32( nLTemp ); aGradient.SetAngle(nLTemp);
2415 0 : rIn.ReadUInt16( nUSTemp ); aGradient.SetBorder(nUSTemp);
2416 0 : rIn.ReadUInt16( nUSTemp ); aGradient.SetXOffset(nUSTemp);
2417 0 : rIn.ReadUInt16( nUSTemp ); aGradient.SetYOffset(nUSTemp);
2418 0 : rIn.ReadUInt16( nUSTemp ); aGradient.SetStartIntens(nUSTemp);
2419 0 : rIn.ReadUInt16( nUSTemp ); aGradient.SetEndIntens(nUSTemp);
2420 :
2421 : // for newer versions consider the step width as well
2422 0 : if (nVer >= 1)
2423 : {
2424 0 : rIn.ReadUInt16( nUSTemp ); aGradient.SetSteps(nUSTemp);
2425 : }
2426 : }
2427 0 : }
2428 :
2429 5081 : XFillGradientItem::XFillGradientItem( const XGradient& rTheGradient )
2430 : : NameOrIndex( XATTR_FILLGRADIENT, -1 ),
2431 5081 : aGradient(rTheGradient)
2432 : {
2433 5081 : }
2434 :
2435 1316 : SfxPoolItem* XFillGradientItem::Clone(SfxItemPool* /*pPool*/) const
2436 : {
2437 1316 : return new XFillGradientItem(*this);
2438 : }
2439 :
2440 2806 : bool XFillGradientItem::operator==(const SfxPoolItem& rItem) const
2441 : {
2442 4001 : return ( NameOrIndex::operator==(rItem) &&
2443 4001 : aGradient == static_cast<const XFillGradientItem&>(rItem).aGradient );
2444 : }
2445 :
2446 0 : SfxPoolItem* XFillGradientItem::Create(SvStream& rIn, sal_uInt16 nVer) const
2447 : {
2448 0 : return new XFillGradientItem(rIn, nVer);
2449 : }
2450 :
2451 0 : SvStream& XFillGradientItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
2452 : {
2453 0 : NameOrIndex::Store( rOut, nItemVersion );
2454 :
2455 0 : if (!IsIndex())
2456 : {
2457 0 : rOut.WriteInt16( aGradient.GetGradientStyle() );
2458 :
2459 : sal_uInt16 nTmp;
2460 :
2461 0 : nTmp = VCLTOSVCOL( aGradient.GetStartColor().GetRed() ); rOut.WriteUInt16( nTmp );
2462 0 : nTmp = VCLTOSVCOL( aGradient.GetStartColor().GetGreen() ); rOut.WriteUInt16( nTmp );
2463 0 : nTmp = VCLTOSVCOL( aGradient.GetStartColor().GetBlue() ); rOut.WriteUInt16( nTmp );
2464 0 : nTmp = VCLTOSVCOL( aGradient.GetEndColor().GetRed() ); rOut.WriteUInt16( nTmp );
2465 0 : nTmp = VCLTOSVCOL( aGradient.GetEndColor().GetGreen() ); rOut.WriteUInt16( nTmp );
2466 0 : nTmp = VCLTOSVCOL( aGradient.GetEndColor().GetBlue() ); rOut.WriteUInt16( nTmp );
2467 :
2468 0 : rOut.WriteInt32( aGradient.GetAngle() );
2469 0 : rOut.WriteUInt16( aGradient.GetBorder() );
2470 0 : rOut.WriteUInt16( aGradient.GetXOffset() );
2471 0 : rOut.WriteUInt16( aGradient.GetYOffset() );
2472 0 : rOut.WriteUInt16( aGradient.GetStartIntens() );
2473 0 : rOut.WriteUInt16( aGradient.GetEndIntens() );
2474 0 : rOut.WriteUInt16( aGradient.GetSteps() );
2475 : }
2476 :
2477 0 : return rOut;
2478 : }
2479 :
2480 37907 : const XGradient& XFillGradientItem::GetGradientValue() const // GetValue -> GetGradientValue
2481 : {
2482 37907 : if (!IsIndex())
2483 37907 : return aGradient;
2484 : // ToDo: This should fail. We never called this code with a table so this should always
2485 : // have failed. Thus, I'm thinking that XFillGradientItem can't be an Index.
2486 0 : return aGradient;
2487 : }
2488 :
2489 0 : sal_uInt16 XFillGradientItem::GetVersion( sal_uInt16 /*nFileFormatVersion*/) const
2490 : {
2491 : // !!! this version number also represents the version number of superclasses
2492 : // !!! (e.g. XFillFloatTransparenceItem); if you make any changes here,
2493 : // !!! the superclass is also affected
2494 0 : return 1;
2495 : }
2496 :
2497 0 : bool XFillGradientItem::GetPresentation
2498 : (
2499 : SfxItemPresentation /*ePres*/,
2500 : SfxMapUnit /*eCoreUnit*/,
2501 : SfxMapUnit /*ePresUnit*/,
2502 : OUString& rText, const IntlWrapper *
2503 : ) const
2504 : {
2505 0 : rText = GetName();
2506 0 : return true;
2507 : }
2508 :
2509 1365 : bool XFillGradientItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
2510 : {
2511 1365 : nMemberId &= ~CONVERT_TWIPS;
2512 1365 : switch ( nMemberId )
2513 : {
2514 : case 0:
2515 : {
2516 79 : uno::Sequence< beans::PropertyValue > aPropSeq( 2 );
2517 :
2518 79 : ::com::sun::star::awt::Gradient aGradient2;
2519 :
2520 79 : const XGradient& aXGradient = GetGradientValue();
2521 79 : aGradient2.Style = (::com::sun::star::awt::GradientStyle) aXGradient.GetGradientStyle();
2522 79 : aGradient2.StartColor = (sal_Int32)aXGradient.GetStartColor().GetColor();
2523 79 : aGradient2.EndColor = (sal_Int32)aXGradient.GetEndColor().GetColor();
2524 79 : aGradient2.Angle = (short)aXGradient.GetAngle();
2525 79 : aGradient2.Border = aXGradient.GetBorder();
2526 79 : aGradient2.XOffset = aXGradient.GetXOffset();
2527 79 : aGradient2.YOffset = aXGradient.GetYOffset();
2528 79 : aGradient2.StartIntensity = aXGradient.GetStartIntens();
2529 79 : aGradient2.EndIntensity = aXGradient.GetEndIntens();
2530 79 : aGradient2.StepCount = aXGradient.GetSteps();
2531 :
2532 158 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
2533 79 : aPropSeq[0].Name = "Name";
2534 79 : aPropSeq[0].Value = uno::makeAny( aApiName );
2535 79 : aPropSeq[1].Name = "FillGradient";
2536 79 : aPropSeq[1].Value = uno::makeAny( aGradient2 );
2537 79 : rVal = uno::makeAny( aPropSeq );
2538 158 : break;
2539 : }
2540 :
2541 : case MID_FILLGRADIENT:
2542 : {
2543 712 : const XGradient& aXGradient = GetGradientValue();
2544 712 : ::com::sun::star::awt::Gradient aGradient2;
2545 :
2546 712 : aGradient2.Style = (::com::sun::star::awt::GradientStyle) aXGradient.GetGradientStyle();
2547 712 : aGradient2.StartColor = (sal_Int32)aXGradient.GetStartColor().GetColor();
2548 712 : aGradient2.EndColor = (sal_Int32)aXGradient.GetEndColor().GetColor();
2549 712 : aGradient2.Angle = (short)aXGradient.GetAngle();
2550 712 : aGradient2.Border = aXGradient.GetBorder();
2551 712 : aGradient2.XOffset = aXGradient.GetXOffset();
2552 712 : aGradient2.YOffset = aXGradient.GetYOffset();
2553 712 : aGradient2.StartIntensity = aXGradient.GetStartIntens();
2554 712 : aGradient2.EndIntensity = aXGradient.GetEndIntens();
2555 712 : aGradient2.StepCount = aXGradient.GetSteps();
2556 :
2557 712 : rVal <<= aGradient2;
2558 712 : break;
2559 : }
2560 :
2561 : case MID_NAME:
2562 : {
2563 574 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
2564 574 : rVal <<= aApiName;
2565 574 : break;
2566 : }
2567 :
2568 0 : case MID_GRADIENT_STYLE: rVal <<= (sal_Int16)GetGradientValue().GetGradientStyle(); break;
2569 0 : case MID_GRADIENT_STARTCOLOR: rVal <<= (sal_Int32)GetGradientValue().GetStartColor().GetColor(); break;
2570 0 : case MID_GRADIENT_ENDCOLOR: rVal <<= (sal_Int32)GetGradientValue().GetEndColor().GetColor(); break;
2571 0 : case MID_GRADIENT_ANGLE: rVal <<= (sal_Int16)GetGradientValue().GetAngle(); break;
2572 0 : case MID_GRADIENT_BORDER: rVal <<= GetGradientValue().GetBorder(); break;
2573 0 : case MID_GRADIENT_XOFFSET: rVal <<= GetGradientValue().GetXOffset(); break;
2574 0 : case MID_GRADIENT_YOFFSET: rVal <<= GetGradientValue().GetYOffset(); break;
2575 0 : case MID_GRADIENT_STARTINTENSITY: rVal <<= GetGradientValue().GetStartIntens(); break;
2576 0 : case MID_GRADIENT_ENDINTENSITY: rVal <<= GetGradientValue().GetEndIntens(); break;
2577 0 : case MID_GRADIENT_STEPCOUNT: rVal <<= GetGradientValue().GetSteps(); break;
2578 :
2579 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
2580 : }
2581 :
2582 1365 : return true;
2583 : }
2584 :
2585 396 : bool XFillGradientItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
2586 : {
2587 396 : nMemberId &= ~CONVERT_TWIPS;
2588 :
2589 396 : switch ( nMemberId )
2590 : {
2591 : case 0:
2592 : {
2593 79 : uno::Sequence< beans::PropertyValue > aPropSeq;
2594 79 : ::com::sun::star::awt::Gradient aGradient2;
2595 158 : OUString aName;
2596 79 : bool bGradient( false );
2597 :
2598 79 : if ( rVal >>= aPropSeq )
2599 : {
2600 237 : for ( sal_Int32 n = 0; n < aPropSeq.getLength(); n++ )
2601 : {
2602 158 : if ( aPropSeq[n].Name == "Name" )
2603 79 : aPropSeq[n].Value >>= aName;
2604 79 : else if ( aPropSeq[n].Name == "FillGradient" )
2605 : {
2606 79 : if ( aPropSeq[n].Value >>= aGradient2 )
2607 79 : bGradient = true;
2608 : }
2609 : }
2610 :
2611 79 : SetName( aName );
2612 79 : if ( bGradient )
2613 : {
2614 79 : XGradient aXGradient;
2615 :
2616 79 : aXGradient.SetGradientStyle( (css::awt::GradientStyle) aGradient2.Style );
2617 79 : aXGradient.SetStartColor( aGradient2.StartColor );
2618 79 : aXGradient.SetEndColor( aGradient2.EndColor );
2619 79 : aXGradient.SetAngle( aGradient2.Angle );
2620 79 : aXGradient.SetBorder( aGradient2.Border );
2621 79 : aXGradient.SetXOffset( aGradient2.XOffset );
2622 79 : aXGradient.SetYOffset( aGradient2.YOffset );
2623 79 : aXGradient.SetStartIntens( aGradient2.StartIntensity );
2624 79 : aXGradient.SetEndIntens( aGradient2.EndIntensity );
2625 79 : aXGradient.SetSteps( aGradient2.StepCount );
2626 :
2627 79 : SetGradientValue( aXGradient );
2628 : }
2629 :
2630 79 : return true;
2631 : }
2632 :
2633 79 : return false;
2634 : }
2635 :
2636 : case MID_NAME:
2637 : {
2638 0 : OUString aName;
2639 0 : if (!(rVal >>= aName ))
2640 0 : return false;
2641 0 : SetName( aName );
2642 0 : break;
2643 : }
2644 :
2645 : case MID_FILLGRADIENT:
2646 : {
2647 317 : ::com::sun::star::awt::Gradient aGradient2;
2648 317 : if(!(rVal >>= aGradient2))
2649 0 : return false;
2650 :
2651 317 : XGradient aXGradient;
2652 :
2653 317 : aXGradient.SetGradientStyle( (css::awt::GradientStyle) aGradient2.Style );
2654 317 : aXGradient.SetStartColor( aGradient2.StartColor );
2655 317 : aXGradient.SetEndColor( aGradient2.EndColor );
2656 317 : aXGradient.SetAngle( aGradient2.Angle );
2657 317 : aXGradient.SetBorder( aGradient2.Border );
2658 317 : aXGradient.SetXOffset( aGradient2.XOffset );
2659 317 : aXGradient.SetYOffset( aGradient2.YOffset );
2660 317 : aXGradient.SetStartIntens( aGradient2.StartIntensity );
2661 317 : aXGradient.SetEndIntens( aGradient2.EndIntensity );
2662 317 : aXGradient.SetSteps( aGradient2.StepCount );
2663 :
2664 317 : SetGradientValue( aXGradient );
2665 317 : break;
2666 : }
2667 :
2668 : case MID_GRADIENT_STARTCOLOR:
2669 : case MID_GRADIENT_ENDCOLOR:
2670 : {
2671 0 : sal_Int32 nVal = 0;
2672 0 : if(!(rVal >>= nVal ))
2673 0 : return false;
2674 :
2675 0 : XGradient aXGradient = GetGradientValue();
2676 :
2677 0 : if ( nMemberId == MID_GRADIENT_STARTCOLOR )
2678 0 : aXGradient.SetStartColor( nVal );
2679 : else
2680 0 : aXGradient.SetEndColor( nVal );
2681 0 : SetGradientValue( aXGradient );
2682 0 : break;
2683 : }
2684 :
2685 : case MID_GRADIENT_STYLE:
2686 : case MID_GRADIENT_ANGLE:
2687 : case MID_GRADIENT_BORDER:
2688 : case MID_GRADIENT_STARTINTENSITY:
2689 : case MID_GRADIENT_ENDINTENSITY:
2690 : case MID_GRADIENT_STEPCOUNT:
2691 : case MID_GRADIENT_XOFFSET:
2692 : case MID_GRADIENT_YOFFSET:
2693 : {
2694 0 : sal_Int16 nVal = sal_Int16();
2695 0 : if(!(rVal >>= nVal ))
2696 0 : return false;
2697 :
2698 0 : XGradient aXGradient = GetGradientValue();
2699 :
2700 0 : switch ( nMemberId )
2701 : {
2702 : case MID_GRADIENT_STYLE:
2703 0 : aXGradient.SetGradientStyle( (css::awt::GradientStyle)nVal ); break;
2704 : case MID_GRADIENT_ANGLE:
2705 0 : aXGradient.SetAngle( nVal ); break;
2706 : case MID_GRADIENT_BORDER:
2707 0 : aXGradient.SetBorder( nVal ); break;
2708 : case MID_GRADIENT_STARTINTENSITY:
2709 0 : aXGradient.SetStartIntens( nVal ); break;
2710 : case MID_GRADIENT_ENDINTENSITY:
2711 0 : aXGradient.SetEndIntens( nVal ); break;
2712 : case MID_GRADIENT_STEPCOUNT:
2713 0 : aXGradient.SetSteps( nVal ); break;
2714 : case MID_GRADIENT_XOFFSET:
2715 0 : aXGradient.SetXOffset( nVal ); break;
2716 : case MID_GRADIENT_YOFFSET:
2717 0 : aXGradient.SetYOffset( nVal ); break;
2718 : }
2719 :
2720 0 : SetGradientValue( aXGradient );
2721 0 : break;
2722 : }
2723 : }
2724 :
2725 317 : return true;
2726 : }
2727 :
2728 7334 : bool XFillGradientItem::CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 )
2729 : {
2730 7334 : return static_cast<const XFillGradientItem*>(p1)->GetGradientValue() == static_cast<const XFillGradientItem*>(p2)->GetGradientValue();
2731 : }
2732 :
2733 7814 : XFillGradientItem* XFillGradientItem::checkForUniqueItem( SdrModel* pModel ) const
2734 : {
2735 7814 : if( pModel )
2736 : {
2737 : const OUString aUniqueName = NameOrIndex::CheckNamedItem(
2738 7316 : this, Which(), &pModel->GetItemPool(),
2739 7527 : pModel->GetStyleSheetPool() ? &pModel->GetStyleSheetPool()->GetPool() : NULL,
2740 : XFillGradientItem::CompareValueFunc, RID_SVXSTR_GRADIENT,
2741 22159 : pModel->GetPropertyList( XGRADIENT_LIST ) );
2742 :
2743 : // if the given name is not valid, replace it!
2744 7316 : if( aUniqueName != GetName() )
2745 179 : return new XFillGradientItem( aUniqueName, aGradient, Which() );
2746 : }
2747 :
2748 7635 : return NULL;
2749 : }
2750 :
2751 38087 : TYPEINIT1_AUTOFACTORY( XFillFloatTransparenceItem, XFillGradientItem );
2752 :
2753 52 : XFillFloatTransparenceItem::XFillFloatTransparenceItem() :
2754 52 : bEnabled( false )
2755 : {
2756 52 : SetWhich( XATTR_FILLFLOATTRANSPARENCE );
2757 52 : }
2758 :
2759 0 : XFillFloatTransparenceItem::XFillFloatTransparenceItem(const OUString& rName, const XGradient& rGradient, bool bEnable ) :
2760 : XFillGradientItem ( rName, rGradient ),
2761 0 : bEnabled ( bEnable )
2762 : {
2763 0 : SetWhich( XATTR_FILLFLOATTRANSPARENCE );
2764 0 : }
2765 :
2766 615 : XFillFloatTransparenceItem::XFillFloatTransparenceItem( const XFillFloatTransparenceItem& rItem ) :
2767 : XFillGradientItem ( rItem ),
2768 615 : bEnabled ( rItem.bEnabled )
2769 : {
2770 615 : SetWhich( XATTR_FILLFLOATTRANSPARENCE );
2771 615 : }
2772 :
2773 4814 : XFillFloatTransparenceItem::XFillFloatTransparenceItem(SfxItemPool* /*pPool*/, const XGradient& rTheGradient, bool bEnable )
2774 : : XFillGradientItem ( -1, rTheGradient ),
2775 4814 : bEnabled ( bEnable )
2776 : {
2777 4814 : SetWhich( XATTR_FILLFLOATTRANSPARENCE );
2778 4814 : }
2779 :
2780 388 : bool XFillFloatTransparenceItem::operator==( const SfxPoolItem& rItem ) const
2781 : {
2782 488 : return ( NameOrIndex::operator==(rItem) ) &&
2783 488 : ( GetGradientValue() == static_cast<const XFillGradientItem&>(rItem).GetGradientValue() ) &&
2784 488 : ( bEnabled == static_cast<const XFillFloatTransparenceItem&>(rItem).bEnabled );
2785 : }
2786 :
2787 615 : SfxPoolItem* XFillFloatTransparenceItem::Clone( SfxItemPool* /*pPool*/) const
2788 : {
2789 615 : return new XFillFloatTransparenceItem( *this );
2790 : }
2791 :
2792 0 : sal_uInt16 XFillFloatTransparenceItem::GetVersion( sal_uInt16 nFileFormatVersion ) const
2793 : {
2794 : // !!! if version number of this object must be increased, please !!!
2795 : // !!! increase version number of base class XFillGradientItem !!!
2796 0 : return XFillGradientItem::GetVersion( nFileFormatVersion );
2797 : }
2798 :
2799 569 : bool XFillFloatTransparenceItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
2800 : {
2801 569 : return XFillGradientItem::QueryValue( rVal, nMemberId );
2802 : }
2803 :
2804 49 : bool XFillFloatTransparenceItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
2805 : {
2806 49 : return XFillGradientItem::PutValue( rVal, nMemberId );
2807 : }
2808 :
2809 0 : bool XFillFloatTransparenceItem::GetPresentation( SfxItemPresentation ePres,
2810 : SfxMapUnit eCoreUnit, SfxMapUnit ePresUnit,
2811 : OUString& rText,
2812 : const IntlWrapper * pIntlWrapper ) const
2813 : {
2814 0 : return XFillGradientItem::GetPresentation( ePres, eCoreUnit, ePresUnit, rText, pIntlWrapper );
2815 : }
2816 :
2817 2912 : bool XFillFloatTransparenceItem::CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 )
2818 : {
2819 5824 : return static_cast<const XFillFloatTransparenceItem*>(p1)->IsEnabled() == static_cast<const XFillFloatTransparenceItem*>(p2)->IsEnabled() &&
2820 5824 : static_cast<const XFillFloatTransparenceItem*>(p1)->GetGradientValue() == static_cast<const XFillFloatTransparenceItem*>(p2)->GetGradientValue();
2821 : }
2822 :
2823 9358 : XFillFloatTransparenceItem* XFillFloatTransparenceItem::checkForUniqueItem( SdrModel* pModel ) const
2824 : {
2825 : // #85953# unique name only necessary when enabled
2826 9358 : if(IsEnabled())
2827 : {
2828 2942 : if( pModel )
2829 : {
2830 : const OUString aUniqueName = NameOrIndex::CheckNamedItem( this,
2831 : XATTR_FILLFLOATTRANSPARENCE,
2832 2912 : &pModel->GetItemPool(),
2833 2916 : pModel->GetStyleSheetPool() ? &pModel->GetStyleSheetPool()->GetPool() : NULL,
2834 : XFillFloatTransparenceItem::CompareValueFunc,
2835 : RID_SVXSTR_TRASNGR0,
2836 8740 : XPropertyListRef() );
2837 :
2838 : // if the given name is not valid, replace it!
2839 2912 : if( aUniqueName != GetName() )
2840 : {
2841 0 : return new XFillFloatTransparenceItem( aUniqueName, GetGradientValue(), true );
2842 2912 : }
2843 : }
2844 : }
2845 : else
2846 : {
2847 : // #85953# if disabled, force name to empty string
2848 6416 : if( !GetName().isEmpty() )
2849 : {
2850 0 : return new XFillFloatTransparenceItem(OUString(), GetGradientValue(), false);
2851 : }
2852 : }
2853 :
2854 9358 : return NULL;
2855 : }
2856 :
2857 5324 : XHatch::XHatch(const Color& rCol, css::drawing::HatchStyle eTheStyle, long nTheDistance,
2858 : long nTheAngle) :
2859 : eStyle(eTheStyle),
2860 : aColor(rCol),
2861 : nDistance(nTheDistance),
2862 5324 : nAngle(nTheAngle)
2863 : {
2864 5324 : }
2865 :
2866 12560 : bool XHatch::operator==(const XHatch& rHatch) const
2867 : {
2868 23532 : return ( eStyle == rHatch.eStyle &&
2869 21266 : aColor == rHatch.aColor &&
2870 32685 : nDistance == rHatch.nDistance &&
2871 22391 : nAngle == rHatch.nAngle );
2872 : }
2873 :
2874 30945 : TYPEINIT1_AUTOFACTORY(XFillHatchItem, NameOrIndex);
2875 :
2876 143 : XFillHatchItem::XFillHatchItem(const OUString& rName,
2877 : const XHatch& rTheHatch) :
2878 : NameOrIndex(XATTR_FILLHATCH, rName),
2879 143 : aHatch(rTheHatch)
2880 : {
2881 143 : }
2882 :
2883 960 : XFillHatchItem::XFillHatchItem(const XFillHatchItem& rItem) :
2884 : NameOrIndex(rItem),
2885 960 : aHatch(rItem.aHatch)
2886 : {
2887 960 : }
2888 :
2889 0 : XFillHatchItem::XFillHatchItem(SvStream& rIn) :
2890 : NameOrIndex(XATTR_FILLHATCH, rIn),
2891 0 : aHatch(COL_BLACK)
2892 : {
2893 0 : if (!IsIndex())
2894 : {
2895 : sal_uInt16 nRed;
2896 : sal_uInt16 nGreen;
2897 : sal_uInt16 nBlue;
2898 : sal_Int16 nITemp;
2899 : sal_Int32 nLTemp;
2900 :
2901 0 : rIn.ReadInt16( nITemp ); aHatch.SetHatchStyle((css::drawing::HatchStyle)nITemp);
2902 0 : rIn.ReadUInt16( nRed );
2903 0 : rIn.ReadUInt16( nGreen );
2904 0 : rIn.ReadUInt16( nBlue );
2905 :
2906 0 : Color aCol;
2907 0 : aCol = Color( (sal_uInt8)( nRed >> 8 ), (sal_uInt8)( nGreen >> 8 ), (sal_uInt8)( nBlue >> 8 ) );
2908 0 : aHatch.SetColor(aCol);
2909 0 : rIn.ReadInt32( nLTemp ); aHatch.SetDistance(nLTemp);
2910 0 : rIn.ReadInt32( nLTemp ); aHatch.SetAngle(nLTemp);
2911 : }
2912 0 : }
2913 :
2914 5069 : XFillHatchItem::XFillHatchItem(SfxItemPool* /*pPool*/, const XHatch& rTheHatch)
2915 : : NameOrIndex( XATTR_FILLHATCH, -1 ),
2916 5069 : aHatch(rTheHatch)
2917 : {
2918 5069 : }
2919 :
2920 960 : SfxPoolItem* XFillHatchItem::Clone(SfxItemPool* /*pPool*/) const
2921 : {
2922 960 : return new XFillHatchItem(*this);
2923 : }
2924 :
2925 3847 : bool XFillHatchItem::operator==(const SfxPoolItem& rItem) const
2926 : {
2927 4237 : return ( NameOrIndex::operator==(rItem) &&
2928 4237 : aHatch == static_cast<const XFillHatchItem&>(rItem).aHatch );
2929 : }
2930 :
2931 0 : SfxPoolItem* XFillHatchItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
2932 : {
2933 0 : return new XFillHatchItem(rIn);
2934 : }
2935 :
2936 0 : SvStream& XFillHatchItem::Store( SvStream& rOut, sal_uInt16 nItemVersion ) const
2937 : {
2938 0 : NameOrIndex::Store( rOut, nItemVersion );
2939 :
2940 0 : if (!IsIndex())
2941 : {
2942 0 : rOut.WriteInt16( aHatch.GetHatchStyle() );
2943 :
2944 : sal_uInt16 nTmp;
2945 0 : nTmp = VCLTOSVCOL( aHatch.GetColor().GetRed() ); rOut.WriteUInt16( nTmp );
2946 0 : nTmp = VCLTOSVCOL( aHatch.GetColor().GetGreen() ); rOut.WriteUInt16( nTmp );
2947 0 : nTmp = VCLTOSVCOL( aHatch.GetColor().GetBlue() ); rOut.WriteUInt16( nTmp );
2948 :
2949 0 : rOut.WriteInt32( aHatch.GetDistance() );
2950 0 : rOut.WriteInt32( aHatch.GetAngle() );
2951 : }
2952 :
2953 0 : return rOut;
2954 : }
2955 :
2956 :
2957 0 : bool XFillHatchItem::GetPresentation
2958 : (
2959 : SfxItemPresentation /*ePres*/,
2960 : SfxMapUnit /*eCoreUnit*/,
2961 : SfxMapUnit /*ePresUnit*/,
2962 : OUString& rText, const IntlWrapper *
2963 : ) const
2964 : {
2965 0 : rText = GetName();
2966 0 : return true;
2967 : }
2968 :
2969 0 : bool XFillHatchItem::HasMetrics() const
2970 : {
2971 0 : return true;
2972 : }
2973 :
2974 0 : bool XFillHatchItem::ScaleMetrics(long nMul, long nDiv)
2975 : {
2976 0 : aHatch.SetDistance( ScaleMetricValue( aHatch.GetDistance(), nMul, nDiv ) );
2977 0 : return true;
2978 : }
2979 :
2980 712 : bool XFillHatchItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const
2981 : {
2982 712 : nMemberId &= ~CONVERT_TWIPS;
2983 :
2984 712 : switch ( nMemberId )
2985 : {
2986 : case 0:
2987 : {
2988 79 : uno::Sequence< beans::PropertyValue > aPropSeq( 2 );
2989 :
2990 79 : ::com::sun::star::drawing::Hatch aUnoHatch;
2991 :
2992 79 : aUnoHatch.Style = (::com::sun::star::drawing::HatchStyle)aHatch.GetHatchStyle();
2993 79 : aUnoHatch.Color = aHatch.GetColor().GetColor();
2994 79 : aUnoHatch.Distance = aHatch.GetDistance();
2995 79 : aUnoHatch.Angle = aHatch.GetAngle();
2996 :
2997 158 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
2998 79 : aPropSeq[0].Name = "Name";
2999 79 : aPropSeq[0].Value = uno::makeAny( aApiName );
3000 79 : aPropSeq[1].Name = "FillHatch";
3001 79 : aPropSeq[1].Value = uno::makeAny( aUnoHatch );
3002 79 : rVal = uno::makeAny( aPropSeq );
3003 158 : break;
3004 : }
3005 :
3006 : case MID_FILLHATCH:
3007 : {
3008 335 : ::com::sun::star::drawing::Hatch aUnoHatch;
3009 :
3010 335 : aUnoHatch.Style = (::com::sun::star::drawing::HatchStyle)aHatch.GetHatchStyle();
3011 335 : aUnoHatch.Color = aHatch.GetColor().GetColor();
3012 335 : aUnoHatch.Distance = aHatch.GetDistance();
3013 335 : aUnoHatch.Angle = aHatch.GetAngle();
3014 335 : rVal <<= aUnoHatch;
3015 335 : break;
3016 : }
3017 :
3018 : case MID_NAME:
3019 : {
3020 298 : OUString aApiName = SvxUnogetApiNameForItem(Which(), GetName());
3021 298 : rVal <<= aApiName;
3022 298 : break;
3023 : }
3024 :
3025 : case MID_HATCH_STYLE:
3026 0 : rVal <<= (::com::sun::star::drawing::HatchStyle)aHatch.GetHatchStyle(); break;
3027 : case MID_HATCH_COLOR:
3028 0 : rVal <<= (sal_Int32)aHatch.GetColor().GetColor(); break;
3029 : case MID_HATCH_DISTANCE:
3030 0 : rVal <<= aHatch.GetDistance(); break;
3031 : case MID_HATCH_ANGLE:
3032 0 : rVal <<= aHatch.GetAngle(); break;
3033 :
3034 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
3035 : }
3036 :
3037 712 : return true;
3038 : }
3039 :
3040 261 : bool XFillHatchItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId )
3041 : {
3042 261 : nMemberId &= ~CONVERT_TWIPS;
3043 :
3044 261 : switch ( nMemberId )
3045 : {
3046 : case 0:
3047 : {
3048 79 : uno::Sequence< beans::PropertyValue > aPropSeq;
3049 79 : ::com::sun::star::drawing::Hatch aUnoHatch;
3050 158 : OUString aName;
3051 79 : bool bHatch( false );
3052 :
3053 79 : if ( rVal >>= aPropSeq )
3054 : {
3055 237 : for ( sal_Int32 n = 0; n < aPropSeq.getLength(); n++ )
3056 : {
3057 158 : if ( aPropSeq[n].Name == "Name" )
3058 79 : aPropSeq[n].Value >>= aName;
3059 79 : else if ( aPropSeq[n].Name == "FillHatch" )
3060 : {
3061 79 : if ( aPropSeq[n].Value >>= aUnoHatch )
3062 79 : bHatch = true;
3063 : }
3064 : }
3065 :
3066 79 : SetName( aName );
3067 79 : if ( bHatch )
3068 : {
3069 79 : aHatch.SetHatchStyle( (css::drawing::HatchStyle)aUnoHatch.Style );
3070 79 : aHatch.SetColor( aUnoHatch.Color );
3071 79 : aHatch.SetDistance( aUnoHatch.Distance );
3072 79 : aHatch.SetAngle( aUnoHatch.Angle );
3073 : }
3074 :
3075 79 : return true;
3076 : }
3077 :
3078 79 : return false;
3079 : }
3080 :
3081 : case MID_FILLHATCH:
3082 : {
3083 182 : ::com::sun::star::drawing::Hatch aUnoHatch;
3084 182 : if(!(rVal >>= aUnoHatch))
3085 0 : return false;
3086 :
3087 182 : aHatch.SetHatchStyle( (css::drawing::HatchStyle)aUnoHatch.Style );
3088 182 : aHatch.SetColor( aUnoHatch.Color );
3089 182 : aHatch.SetDistance( aUnoHatch.Distance );
3090 182 : aHatch.SetAngle( aUnoHatch.Angle );
3091 182 : break;
3092 : }
3093 :
3094 : case MID_NAME:
3095 : {
3096 0 : OUString aName;
3097 0 : if (!(rVal >>= aName ))
3098 0 : return false;
3099 0 : SetName( aName );
3100 0 : break;
3101 : }
3102 :
3103 : case MID_HATCH_STYLE:
3104 : {
3105 0 : sal_Int16 nVal = sal_Int16();
3106 0 : if (!(rVal >>= nVal ))
3107 0 : return false;
3108 0 : aHatch.SetHatchStyle( (css::drawing::HatchStyle)nVal );
3109 0 : break;
3110 : }
3111 :
3112 : case MID_HATCH_COLOR:
3113 : case MID_HATCH_DISTANCE:
3114 : case MID_HATCH_ANGLE:
3115 : {
3116 0 : sal_Int32 nVal = 0;
3117 0 : if (!(rVal >>= nVal ))
3118 0 : return false;
3119 :
3120 0 : if ( nMemberId == MID_HATCH_COLOR )
3121 0 : aHatch.SetColor( nVal );
3122 0 : else if ( nMemberId == MID_HATCH_DISTANCE )
3123 0 : aHatch.SetDistance( nVal );
3124 : else
3125 0 : aHatch.SetAngle( nVal );
3126 0 : break;
3127 : }
3128 :
3129 0 : default: OSL_FAIL("Wrong MemberId!"); return false;
3130 : }
3131 :
3132 182 : return true;
3133 : }
3134 :
3135 10760 : bool XFillHatchItem::CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 )
3136 : {
3137 10760 : return static_cast<const XFillHatchItem*>(p1)->GetHatchValue() == static_cast<const XFillHatchItem*>(p2)->GetHatchValue();
3138 : }
3139 :
3140 9688 : XFillHatchItem* XFillHatchItem::checkForUniqueItem( SdrModel* pModel ) const
3141 : {
3142 9688 : if( pModel )
3143 : {
3144 : const OUString aUniqueName = NameOrIndex::CheckNamedItem(
3145 9630 : this, XATTR_FILLHATCH, &pModel->GetItemPool(),
3146 9753 : pModel->GetStyleSheetPool() ? &pModel->GetStyleSheetPool()->GetPool() : NULL,
3147 : XFillHatchItem::CompareValueFunc, RID_SVXSTR_HATCH10,
3148 29013 : pModel->GetPropertyList( XHATCH_LIST ) );
3149 :
3150 : // if the given name is not valid, replace it!
3151 9630 : if( aUniqueName != GetName() )
3152 141 : return new XFillHatchItem( aUniqueName, aHatch );
3153 : }
3154 :
3155 9547 : return NULL;
3156 : }
3157 :
3158 : // --- form text attributes ---
3159 :
3160 14182 : TYPEINIT1_AUTOFACTORY(XFormTextStyleItem, SfxEnumItem);
3161 :
3162 4814 : XFormTextStyleItem::XFormTextStyleItem(XFormTextStyle eTheStyle) :
3163 4814 : SfxEnumItem(XATTR_FORMTXTSTYLE, sal::static_int_cast< sal_uInt16 >(eTheStyle))
3164 : {
3165 4814 : }
3166 :
3167 0 : XFormTextStyleItem::XFormTextStyleItem(SvStream& rIn) :
3168 0 : SfxEnumItem(XATTR_FORMTXTSTYLE, rIn)
3169 : {
3170 0 : }
3171 :
3172 32 : SfxPoolItem* XFormTextStyleItem::Clone(SfxItemPool* /*pPool*/) const
3173 : {
3174 32 : return new XFormTextStyleItem( *this );
3175 : }
3176 :
3177 0 : SfxPoolItem* XFormTextStyleItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3178 : {
3179 0 : return new XFormTextStyleItem(rIn);
3180 : }
3181 :
3182 0 : sal_uInt16 XFormTextStyleItem::GetValueCount() const
3183 : {
3184 0 : return 5;
3185 : }
3186 :
3187 0 : bool XFormTextStyleItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
3188 : {
3189 0 : rVal <<= (sal_Int32)GetValue();
3190 0 : return true;
3191 : }
3192 :
3193 0 : bool XFormTextStyleItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/)
3194 : {
3195 0 : sal_Int32 nValue = 0;
3196 0 : rVal >>= nValue;
3197 0 : SetValue(sal::static_int_cast< sal_uInt16 >(nValue));
3198 :
3199 0 : return true;
3200 : }
3201 :
3202 14182 : TYPEINIT1_AUTOFACTORY(XFormTextAdjustItem, SfxEnumItem);
3203 :
3204 4814 : XFormTextAdjustItem::XFormTextAdjustItem(XFormTextAdjust eTheAdjust) :
3205 4814 : SfxEnumItem(XATTR_FORMTXTADJUST, sal::static_int_cast< sal_uInt16 >(eTheAdjust))
3206 : {
3207 4814 : }
3208 :
3209 0 : XFormTextAdjustItem::XFormTextAdjustItem(SvStream& rIn) :
3210 0 : SfxEnumItem(XATTR_FORMTXTADJUST, rIn)
3211 : {
3212 0 : }
3213 :
3214 32 : SfxPoolItem* XFormTextAdjustItem::Clone(SfxItemPool* /*pPool*/) const
3215 : {
3216 32 : return new XFormTextAdjustItem( *this );
3217 : }
3218 :
3219 0 : SfxPoolItem* XFormTextAdjustItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3220 : {
3221 0 : return new XFormTextAdjustItem(rIn);
3222 : }
3223 :
3224 0 : sal_uInt16 XFormTextAdjustItem::GetValueCount() const
3225 : {
3226 0 : return 4;
3227 : }
3228 :
3229 0 : bool XFormTextAdjustItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
3230 : {
3231 0 : rVal <<= (sal_Int32)GetValue();
3232 0 : return true;
3233 : }
3234 :
3235 0 : bool XFormTextAdjustItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/)
3236 : {
3237 0 : sal_Int32 nValue = 0;
3238 0 : rVal >>= nValue;
3239 0 : SetValue(sal::static_int_cast< sal_uInt16 >(nValue));
3240 :
3241 0 : return true;
3242 : }
3243 :
3244 14182 : TYPEINIT1_AUTOFACTORY(XFormTextDistanceItem, SfxMetricItem);
3245 :
3246 4814 : XFormTextDistanceItem::XFormTextDistanceItem(long nDist) :
3247 4814 : SfxMetricItem(XATTR_FORMTXTDISTANCE, nDist)
3248 : {
3249 4814 : }
3250 :
3251 0 : XFormTextDistanceItem::XFormTextDistanceItem(SvStream& rIn) :
3252 0 : SfxMetricItem(XATTR_FORMTXTDISTANCE, rIn)
3253 : {
3254 0 : }
3255 :
3256 32 : SfxPoolItem* XFormTextDistanceItem::Clone(SfxItemPool* /*pPool*/) const
3257 : {
3258 32 : return new XFormTextDistanceItem(*this);
3259 : }
3260 :
3261 0 : SfxPoolItem* XFormTextDistanceItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3262 : {
3263 0 : return new XFormTextDistanceItem(rIn);
3264 : }
3265 :
3266 14182 : TYPEINIT1_AUTOFACTORY(XFormTextStartItem, SfxMetricItem);
3267 :
3268 4814 : XFormTextStartItem::XFormTextStartItem(long nStart) :
3269 4814 : SfxMetricItem(XATTR_FORMTXTSTART, nStart)
3270 : {
3271 4814 : }
3272 :
3273 0 : XFormTextStartItem::XFormTextStartItem(SvStream& rIn) :
3274 0 : SfxMetricItem(XATTR_FORMTXTSTART, rIn)
3275 : {
3276 0 : }
3277 :
3278 32 : SfxPoolItem* XFormTextStartItem::Clone(SfxItemPool* /*pPool*/) const
3279 : {
3280 32 : return new XFormTextStartItem(*this);
3281 : }
3282 :
3283 0 : SfxPoolItem* XFormTextStartItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3284 : {
3285 0 : return new XFormTextStartItem(rIn);
3286 : }
3287 :
3288 14182 : TYPEINIT1_AUTOFACTORY(XFormTextMirrorItem, SfxBoolItem);
3289 :
3290 4814 : XFormTextMirrorItem::XFormTextMirrorItem(bool bMirror) :
3291 4814 : SfxBoolItem(XATTR_FORMTXTMIRROR, bMirror)
3292 : {
3293 4814 : }
3294 :
3295 0 : XFormTextMirrorItem::XFormTextMirrorItem(SvStream& rIn) :
3296 0 : SfxBoolItem(XATTR_FORMTXTMIRROR, rIn)
3297 : {
3298 0 : }
3299 :
3300 32 : SfxPoolItem* XFormTextMirrorItem::Clone(SfxItemPool* /*pPool*/) const
3301 : {
3302 32 : return new XFormTextMirrorItem(*this);
3303 : }
3304 :
3305 0 : SfxPoolItem* XFormTextMirrorItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3306 : {
3307 0 : return new XFormTextMirrorItem(rIn);
3308 : }
3309 :
3310 14182 : TYPEINIT1_AUTOFACTORY(XFormTextOutlineItem, SfxBoolItem);
3311 :
3312 4814 : XFormTextOutlineItem::XFormTextOutlineItem(bool bOutline) :
3313 4814 : SfxBoolItem(XATTR_FORMTXTOUTLINE, bOutline)
3314 : {
3315 4814 : }
3316 :
3317 0 : XFormTextOutlineItem::XFormTextOutlineItem(SvStream& rIn) :
3318 0 : SfxBoolItem(XATTR_FORMTXTOUTLINE, rIn)
3319 : {
3320 0 : }
3321 :
3322 32 : SfxPoolItem* XFormTextOutlineItem::Clone(SfxItemPool* /*pPool*/) const
3323 : {
3324 32 : return new XFormTextOutlineItem(*this);
3325 : }
3326 :
3327 0 : SfxPoolItem* XFormTextOutlineItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3328 : {
3329 0 : return new XFormTextOutlineItem(rIn);
3330 : }
3331 :
3332 14182 : TYPEINIT1_AUTOFACTORY(XFormTextShadowItem, SfxEnumItem);
3333 :
3334 4814 : XFormTextShadowItem::XFormTextShadowItem(XFormTextShadow eFormTextShadow) :
3335 : SfxEnumItem(
3336 4814 : XATTR_FORMTXTSHADOW, sal::static_int_cast< sal_uInt16 >(eFormTextShadow))
3337 : {
3338 4814 : }
3339 :
3340 0 : XFormTextShadowItem::XFormTextShadowItem(SvStream& rIn) :
3341 0 : SfxEnumItem(XATTR_FORMTXTSHADOW, rIn)
3342 : {
3343 0 : }
3344 :
3345 32 : SfxPoolItem* XFormTextShadowItem::Clone(SfxItemPool* /*pPool*/) const
3346 : {
3347 32 : return new XFormTextShadowItem( *this );
3348 : }
3349 :
3350 0 : SfxPoolItem* XFormTextShadowItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3351 : {
3352 0 : return new XFormTextShadowItem(rIn);
3353 : }
3354 :
3355 0 : sal_uInt16 XFormTextShadowItem::GetValueCount() const
3356 : {
3357 0 : return 3;
3358 : }
3359 :
3360 0 : bool XFormTextShadowItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/) const
3361 : {
3362 0 : rVal <<= (sal_Int32)GetValue();
3363 0 : return true;
3364 : }
3365 :
3366 0 : bool XFormTextShadowItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/)
3367 : {
3368 0 : sal_Int32 nValue = 0;
3369 0 : rVal >>= nValue;
3370 0 : SetValue(sal::static_int_cast< sal_uInt16 >(nValue));
3371 :
3372 0 : return true;
3373 : }
3374 :
3375 14182 : TYPEINIT1_AUTOFACTORY(XFormTextShadowColorItem, XColorItem);
3376 :
3377 4814 : XFormTextShadowColorItem::XFormTextShadowColorItem(const OUString& rName,
3378 : const Color& rTheColor) :
3379 4814 : XColorItem(XATTR_FORMTXTSHDWCOLOR, rName, rTheColor)
3380 : {
3381 4814 : }
3382 :
3383 0 : XFormTextShadowColorItem::XFormTextShadowColorItem(SvStream& rIn) :
3384 0 : XColorItem(XATTR_FORMTXTSHDWCOLOR, rIn)
3385 : {
3386 0 : }
3387 :
3388 32 : SfxPoolItem* XFormTextShadowColorItem::Clone(SfxItemPool* /*pPool*/) const
3389 : {
3390 32 : return new XFormTextShadowColorItem(*this);
3391 : }
3392 :
3393 0 : SfxPoolItem* XFormTextShadowColorItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3394 : {
3395 0 : return new XFormTextShadowColorItem(rIn);
3396 : }
3397 :
3398 14182 : TYPEINIT1_AUTOFACTORY(XFormTextShadowXValItem, SfxMetricItem);
3399 :
3400 4814 : XFormTextShadowXValItem::XFormTextShadowXValItem(long nVal) :
3401 4814 : SfxMetricItem(XATTR_FORMTXTSHDWXVAL, nVal)
3402 : {
3403 4814 : }
3404 :
3405 0 : XFormTextShadowXValItem::XFormTextShadowXValItem(SvStream& rIn) :
3406 0 : SfxMetricItem(XATTR_FORMTXTSHDWXVAL, rIn)
3407 : {
3408 0 : }
3409 :
3410 32 : SfxPoolItem* XFormTextShadowXValItem::Clone(SfxItemPool* /*pPool*/) const
3411 : {
3412 32 : return new XFormTextShadowXValItem(*this);
3413 : }
3414 :
3415 0 : SfxPoolItem* XFormTextShadowXValItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3416 : {
3417 0 : return new XFormTextShadowXValItem(rIn);
3418 : }
3419 :
3420 14182 : TYPEINIT1_AUTOFACTORY(XFormTextShadowYValItem, SfxMetricItem);
3421 :
3422 4814 : XFormTextShadowYValItem::XFormTextShadowYValItem(long nVal) :
3423 4814 : SfxMetricItem(XATTR_FORMTXTSHDWYVAL, nVal)
3424 : {
3425 4814 : }
3426 :
3427 0 : XFormTextShadowYValItem::XFormTextShadowYValItem(SvStream& rIn) :
3428 0 : SfxMetricItem(XATTR_FORMTXTSHDWYVAL, rIn)
3429 : {
3430 0 : }
3431 :
3432 32 : SfxPoolItem* XFormTextShadowYValItem::Clone(SfxItemPool* /*pPool*/) const
3433 : {
3434 32 : return new XFormTextShadowYValItem(*this);
3435 : }
3436 :
3437 0 : SfxPoolItem* XFormTextShadowYValItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3438 : {
3439 0 : return new XFormTextShadowYValItem(rIn);
3440 : }
3441 :
3442 14182 : TYPEINIT1_AUTOFACTORY(XFormTextHideFormItem, SfxBoolItem);
3443 :
3444 4814 : XFormTextHideFormItem::XFormTextHideFormItem(bool bHide) :
3445 4814 : SfxBoolItem(XATTR_FORMTXTHIDEFORM, bHide)
3446 : {
3447 4814 : }
3448 :
3449 0 : XFormTextHideFormItem::XFormTextHideFormItem(SvStream& rIn) :
3450 0 : SfxBoolItem(XATTR_FORMTXTHIDEFORM, rIn)
3451 : {
3452 0 : }
3453 :
3454 32 : SfxPoolItem* XFormTextHideFormItem::Clone(SfxItemPool* /*pPool*/) const
3455 : {
3456 32 : return new XFormTextHideFormItem(*this);
3457 : }
3458 :
3459 0 : SfxPoolItem* XFormTextHideFormItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const
3460 : {
3461 0 : return new XFormTextHideFormItem(rIn);
3462 : }
3463 :
3464 : // --- SetItems ---
3465 :
3466 14068 : TYPEINIT1(XLineAttrSetItem, SfxSetItem);
3467 :
3468 : /// a line attribute set item
3469 4814 : XLineAttrSetItem::XLineAttrSetItem( SfxItemSet* pItemSet ) :
3470 4814 : SfxSetItem( XATTRSET_LINE, pItemSet)
3471 : {
3472 4814 : }
3473 :
3474 0 : XLineAttrSetItem::XLineAttrSetItem( SfxItemPool* pItemPool ) :
3475 : SfxSetItem( XATTRSET_LINE,
3476 0 : new SfxItemSet( *pItemPool, XATTR_LINE_FIRST, XATTR_LINE_LAST))
3477 : {
3478 0 : }
3479 :
3480 0 : XLineAttrSetItem::XLineAttrSetItem( const XLineAttrSetItem& rLineAttr ) :
3481 0 : SfxSetItem( rLineAttr )
3482 : {
3483 0 : }
3484 :
3485 191 : XLineAttrSetItem::XLineAttrSetItem( const XLineAttrSetItem& rLineAttr,
3486 : SfxItemPool* pItemPool) :
3487 191 : SfxSetItem( rLineAttr, pItemPool )
3488 : {
3489 191 : }
3490 :
3491 191 : SfxPoolItem* XLineAttrSetItem::Clone( SfxItemPool* pPool ) const
3492 : {
3493 191 : return new XLineAttrSetItem( *this, pPool );
3494 : }
3495 :
3496 : /// create a set item out of a stream
3497 0 : SfxPoolItem* XLineAttrSetItem::Create( SvStream& rStream, sal_uInt16 /*nVersion*/) const
3498 : {
3499 0 : SfxItemSet *pSet2 = new SfxItemSet( *GetItemSet().GetPool(),
3500 0 : XATTR_LINE_FIRST, XATTR_LINE_LAST);
3501 0 : pSet2->Load( rStream );
3502 0 : return new XLineAttrSetItem( pSet2 );
3503 : }
3504 :
3505 : /// save a set item in a stream
3506 0 : SvStream& XLineAttrSetItem::Store( SvStream& rStream, sal_uInt16 nItemVersion ) const
3507 : {
3508 0 : return SfxSetItem::Store( rStream, nItemVersion );
3509 : }
3510 :
3511 :
3512 14049 : TYPEINIT1(XFillAttrSetItem, SfxSetItem);
3513 :
3514 : /// fill attribute set item
3515 4814 : XFillAttrSetItem::XFillAttrSetItem( SfxItemSet* pItemSet ) :
3516 4814 : SfxSetItem( XATTRSET_FILL, pItemSet)
3517 : {
3518 4814 : }
3519 :
3520 0 : XFillAttrSetItem::XFillAttrSetItem( SfxItemPool* pItemPool ) :
3521 : SfxSetItem( XATTRSET_FILL,
3522 0 : new SfxItemSet( *pItemPool, XATTR_FILL_FIRST, XATTR_FILL_LAST))
3523 : {
3524 0 : }
3525 :
3526 0 : XFillAttrSetItem::XFillAttrSetItem( const XFillAttrSetItem& rFillAttr ) :
3527 0 : SfxSetItem( rFillAttr )
3528 : {
3529 0 : }
3530 :
3531 191 : XFillAttrSetItem::XFillAttrSetItem( const XFillAttrSetItem& rFillAttr,
3532 : SfxItemPool* pItemPool ) :
3533 191 : SfxSetItem( rFillAttr, pItemPool )
3534 : {
3535 191 : }
3536 :
3537 191 : SfxPoolItem* XFillAttrSetItem::Clone( SfxItemPool* pPool ) const
3538 : {
3539 191 : return new XFillAttrSetItem( *this, pPool );
3540 : }
3541 :
3542 : /// create a set item out of a stream
3543 0 : SfxPoolItem* XFillAttrSetItem::Create( SvStream& rStream, sal_uInt16 /*nVersion*/) const
3544 : {
3545 0 : SfxItemSet *pSet2 = new SfxItemSet( *GetItemSet().GetPool(),
3546 0 : XATTR_FILL_FIRST, XATTR_FILL_LAST);
3547 0 : pSet2->Load( rStream );
3548 0 : return new XFillAttrSetItem( pSet2 );
3549 : }
3550 :
3551 : /// save a set item in a stream
3552 0 : SvStream& XFillAttrSetItem::Store( SvStream& rStream, sal_uInt16 nItemVersion ) const
3553 : {
3554 0 : return SfxSetItem::Store( rStream, nItemVersion );
3555 435 : }
3556 :
3557 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|