LCOV - code coverage report
Current view: top level - svx/source/xoutdev - xattr.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 1724 0.0 %
Date: 2014-04-14 Functions: 0 417 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10