LCOV - code coverage report
Current view: top level - sw/source/core/layout - atrfrm.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1258 1640 76.7 %
Date: 2014-11-03 Functions: 198 232 85.3 %
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/text/WrapTextMode.hpp>
      21             : #include <com/sun/star/text/TextContentAnchorType.hpp>
      22             : #include <com/sun/star/container/XIndexContainer.hpp>
      23             : #include <com/sun/star/text/TextGridMode.hpp>
      24             : #include <svtools/unoimap.hxx>
      25             : #include <svtools/imap.hxx>
      26             : #include <svtools/imapobj.hxx>
      27             : #include <unocoll.hxx>
      28             : #include <unosett.hxx>
      29             : #include <unostyle.hxx>
      30             : #include <fmtclds.hxx>
      31             : #include <fmtornt.hxx>
      32             : #include <fmthdft.hxx>
      33             : #include <fmtpdsc.hxx>
      34             : #include <fmtcntnt.hxx>
      35             : #include <fmtfsize.hxx>
      36             : #include <fmtfordr.hxx>
      37             : #include <fmtsrnd.hxx>
      38             : #include <fmtlsplt.hxx>
      39             : #include <fmtrowsplt.hxx>
      40             : #include <fmtftntx.hxx>
      41             : #include <fmteiro.hxx>
      42             : #include <fmturl.hxx>
      43             : #include <fmtcnct.hxx>
      44             : #include <section.hxx>
      45             : #include <fmtline.hxx>
      46             : #include <tgrditem.hxx>
      47             : #include <hfspacingitem.hxx>
      48             : #include <IDocumentUndoRedo.hxx>
      49             : #include <IDocumentContentOperations.hxx>
      50             : #include <IDocumentLayoutAccess.hxx>
      51             : #include <pagefrm.hxx>
      52             : #include <rootfrm.hxx>
      53             : #include <cntfrm.hxx>
      54             : #include <crsrsh.hxx>
      55             : #include <dflyobj.hxx>
      56             : #include <dcontact.hxx>
      57             : #include <frmtool.hxx>
      58             : #include <flyfrms.hxx>
      59             : #include <pagedesc.hxx>
      60             : #include <grfatr.hxx>
      61             : #include <ndnotxt.hxx>
      62             : #include <docary.hxx>
      63             : #include <node2lay.hxx>
      64             : #include <fmtclbl.hxx>
      65             : #include <swunohelper.hxx>
      66             : #include <unoframe.hxx>
      67             : #include <unotextbodyhf.hxx>
      68             : #include <SwStyleNameMapper.hxx>
      69             : #include <editeng/brushitem.hxx>
      70             : #include <svtools/grfmgr.hxx>
      71             : #include <unomid.h>
      72             : #include <comcore.hrc>
      73             : #include <svx/svdundo.hxx>
      74             : #include <sortedobjs.hxx>
      75             : #include <HandleAnchorNodeChg.hxx>
      76             : #include <switerator.hxx>
      77             : #include <pagedeschint.hxx>
      78             : #ifndef NDEBUG
      79             : #include <ndtxt.hxx>
      80             : #endif
      81             : 
      82             : //UUUU
      83             : #include <svx/sdr/attribute/sdrallfillattributeshelper.hxx>
      84             : #include <svx/xfillit0.hxx>
      85             : #include <svl/itemiter.hxx>
      86             : 
      87             : using namespace ::com::sun::star;
      88             : 
      89       49389 : TYPEINIT1(SwFmtVertOrient, SfxPoolItem);
      90       49115 : TYPEINIT1(SwFmtHoriOrient, SfxPoolItem);
      91      168605 : TYPEINIT2(SwFmtHeader,  SfxPoolItem, SwClient );
      92      159769 : TYPEINIT2(SwFmtFooter,  SfxPoolItem, SwClient );
      93      132532 : TYPEINIT2(SwFmtPageDesc,  SfxPoolItem, SwClient );
      94       29111 : TYPEINIT1_AUTOFACTORY(SwFmtLineNumber, SfxPoolItem);
      95             : 
      96       10254 : static sal_Int16 lcl_IntToRelation(const uno::Any& rVal)
      97             : {
      98       10254 :     sal_Int16 nVal = text::RelOrientation::FRAME;
      99       10254 :     if (!(rVal >>= nVal))
     100             :         SAL_WARN("sw.core", "lcl_IntToRelation: read from Any failed!");
     101       10254 :     return nVal;
     102             : }
     103             : 
     104       23134 : void DelHFFormat( SwClient *pToRemove, SwFrmFmt *pFmt )
     105             : {
     106             :     //If the client is the last one who uses this format, then we have to delete
     107             :     //it - before this is done, we may need to delete the content-section.
     108       23134 :     SwDoc* pDoc = pFmt->GetDoc();
     109       23134 :     pFmt->Remove( pToRemove );
     110       23134 :     if( pDoc->IsInDtor() )
     111             :     {
     112        2776 :         delete pFmt;
     113       25910 :         return;
     114             :     }
     115             : 
     116             :     // Anything other than frames registered?
     117       20358 :     bool bDel = true;
     118             :     {
     119             :         // nested scope because DTOR of SwClientIter resets the flag bTreeChg.
     120             :         // It's suboptimal if the format is deleted beforehand.
     121       20358 :         SwClientIter aIter( *pFmt );        // TODO
     122       20358 :         SwClient *pLast = aIter.GoStart();
     123       20358 :         if( pLast )
     124       14048 :             do {
     125       14048 :                 bDel = pLast->IsA( TYPE(SwFrm) )
     126       14048 :                     || SwXHeadFootText::IsXHeadFootText(pLast);
     127       34406 :             } while( bDel && 0 != ( pLast = ++aIter ));
     128             :     }
     129             : 
     130       20358 :     if ( bDel )
     131             :     {
     132             :         // If there is a Crsr registered in one of the nodes, we need to call the
     133             :         // ParkCrsr in an (arbitrary) shell.
     134        6310 :         SwFmtCntnt& rCnt = (SwFmtCntnt&)pFmt->GetCntnt();
     135        6310 :         if ( rCnt.GetCntntIdx() )
     136             :         {
     137        6310 :             SwNode *pNode = 0;
     138             :             {
     139             :                 // #i92993#
     140             :                 // Begin with start node of page header/footer to assure that
     141             :                 // complete content is checked for cursors and the complete content
     142             :                 // is deleted on below made method call <pDoc->getIDocumentContentOperations().DeleteSection(pNode)>
     143        6310 :                 SwNodeIndex aIdx( *rCnt.GetCntntIdx(), 0 );
     144             :                 // If there is a Crsr registered in one of the nodes, we need to call the
     145             :                 // ParkCrsr in an (arbitrary) shell.
     146        6310 :                 pNode = & aIdx.GetNode();
     147        6310 :                 sal_uInt32 nEnd = pNode->EndOfSectionIndex();
     148       30584 :                 while ( aIdx < nEnd )
     149             :                 {
     150       26586 :                     if ( pNode->IsCntntNode() &&
     151        8622 :                          ((SwCntntNode*)pNode)->GetDepends() )
     152             :                     {
     153           0 :                         SwCrsrShell *pShell = SwIterator<SwCrsrShell,SwCntntNode>::FirstElement( *(SwCntntNode*)pNode );
     154           0 :                         if( pShell )
     155             :                         {
     156           0 :                             pShell->ParkCrsr( aIdx );
     157           0 :                                 aIdx = nEnd-1;
     158             :                         }
     159             :                     }
     160       17964 :                     ++aIdx;
     161       17964 :                     pNode = & aIdx.GetNode();
     162        6310 :                 }
     163             :             }
     164        6310 :             rCnt.SetNewCntntIdx( (const SwNodeIndex*)0 );
     165             : 
     166             :             // When deleting a header/footer-format, we ALWAYS need to disable
     167             :             // the undo function (Bug 31069)
     168        6310 :             ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
     169             : 
     170             :             OSL_ENSURE( pNode, "A big problem." );
     171        6310 :             pDoc->getIDocumentContentOperations().DeleteSection( pNode );
     172             :         }
     173        6310 :         delete pFmt;
     174             :     }
     175             : }
     176             : 
     177             : // Partially implemented inline in hxx
     178       53738 : SwFmtFrmSize::SwFmtFrmSize( SwFrmSize eSize, SwTwips nWidth, SwTwips nHeight )
     179             :     : SfxPoolItem( RES_FRM_SIZE ),
     180             :     m_aSize( nWidth, nHeight ),
     181             :     m_eFrmHeightType( eSize ),
     182       53738 :     m_eFrmWidthType( ATT_FIX_SIZE )
     183             : {
     184       53738 :     m_nWidthPercent = m_eWidthPercentRelation = m_nHeightPercent = m_eHeightPercentRelation = 0;
     185       53738 : }
     186             : 
     187         354 : SwFmtFrmSize& SwFmtFrmSize::operator=( const SwFmtFrmSize& rCpy )
     188             : {
     189         354 :     m_aSize = rCpy.GetSize();
     190         354 :     m_eFrmHeightType = rCpy.GetHeightSizeType();
     191         354 :     m_eFrmWidthType = rCpy.GetWidthSizeType();
     192         354 :     m_nHeightPercent = rCpy.GetHeightPercent();
     193         354 :     m_eHeightPercentRelation  = rCpy.GetHeightPercentRelation();
     194         354 :     m_nWidthPercent  = rCpy.GetWidthPercent();
     195         354 :     m_eWidthPercentRelation  = rCpy.GetWidthPercentRelation();
     196         354 :     return *this;
     197             : }
     198             : 
     199     1538260 : bool SwFmtFrmSize::operator==( const SfxPoolItem& rAttr ) const
     200             : {
     201             :     assert(SfxPoolItem::operator==(rAttr));
     202     2480042 :     return( m_eFrmHeightType  == ((SwFmtFrmSize&)rAttr).m_eFrmHeightType &&
     203     1883160 :             m_eFrmWidthType  == ((SwFmtFrmSize&)rAttr).m_eFrmWidthType &&
     204     1014520 :             m_aSize           == ((SwFmtFrmSize&)rAttr).GetSize()&&
     205      145940 :             m_nWidthPercent   == ((SwFmtFrmSize&)rAttr).GetWidthPercent() &&
     206      145596 :             m_eWidthPercentRelation == ((SwFmtFrmSize&)rAttr).GetWidthPercentRelation() &&
     207     1683852 :             m_nHeightPercent  == ((SwFmtFrmSize&)rAttr).GetHeightPercent() &&
     208     1611054 :             m_eHeightPercentRelation == ((SwFmtFrmSize&)rAttr).GetHeightPercentRelation() );
     209             : }
     210             : 
     211       41402 : SfxPoolItem*  SwFmtFrmSize::Clone( SfxItemPool* ) const
     212             : {
     213       41402 :     return new SwFmtFrmSize( *this );
     214             : }
     215             : 
     216        1270 : bool SwFmtFrmSize::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
     217             : {
     218             :     // here we convert always!
     219        1270 :     nMemberId &= ~CONVERT_TWIPS;
     220        1270 :     switch ( nMemberId )
     221             :     {
     222             :         case MID_FRMSIZE_SIZE:
     223             :         {
     224         164 :             awt::Size aTmp;
     225         164 :             aTmp.Height = convertTwipToMm100(m_aSize.Height());
     226         164 :             aTmp.Width = convertTwipToMm100(m_aSize.Width());
     227         164 :             rVal.setValue(&aTmp, ::cppu::UnoType<awt::Size>::get());
     228             :         }
     229         164 :         break;
     230             :         case MID_FRMSIZE_REL_HEIGHT:
     231         182 :             rVal <<= (sal_Int16)(GetHeightPercent() != 0xFF ? GetHeightPercent() : 0);
     232         182 :         break;
     233             :         case MID_FRMSIZE_REL_HEIGHT_RELATION:
     234         128 :             rVal <<= GetHeightPercentRelation();
     235         128 :         break;
     236             :         case MID_FRMSIZE_REL_WIDTH:
     237         198 :             rVal <<= (sal_Int16)(GetWidthPercent() != 0xFF ? GetWidthPercent() : 0);
     238         198 :         break;
     239             :         case MID_FRMSIZE_REL_WIDTH_RELATION:
     240         128 :             rVal <<= GetWidthPercentRelation();
     241         128 :         break;
     242             :         case MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH:
     243             :         {
     244          58 :             bool bTmp = 0xFF == GetHeightPercent();
     245          58 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
     246             :         }
     247          58 :         break;
     248             :         case MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT:
     249             :         {
     250          58 :             bool bTmp = 0xFF == GetWidthPercent();
     251          58 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
     252             :         }
     253          58 :         break;
     254             :         case MID_FRMSIZE_WIDTH :
     255         174 :             rVal <<= (sal_Int32)convertTwipToMm100(m_aSize.Width());
     256         174 :         break;
     257             :         case MID_FRMSIZE_HEIGHT:
     258             :             // #95848# returned size should never be zero.
     259             :             // (there was a bug that allowed for setting height to 0.
     260             :             // Thus there some documents existing with that not allowed
     261             :             // attribute value which may cause problems on import.)
     262          66 :             rVal <<= (sal_Int32)convertTwipToMm100(m_aSize.Height() < MINLAY ? MINLAY : m_aSize.Height() );
     263          66 :         break;
     264             :         case MID_FRMSIZE_SIZE_TYPE:
     265          62 :             rVal <<= (sal_Int16)GetHeightSizeType();
     266          62 :         break;
     267             :         case MID_FRMSIZE_IS_AUTO_HEIGHT:
     268             :         {
     269           6 :             bool bTmp = ATT_FIX_SIZE != GetHeightSizeType();
     270           6 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
     271             :         }
     272           6 :         break;
     273             :         case MID_FRMSIZE_WIDTH_TYPE:
     274          46 :             rVal <<= (sal_Int16)GetWidthSizeType();
     275          46 :         break;
     276             :     }
     277        1270 :     return true;
     278             : }
     279             : 
     280       17174 : bool SwFmtFrmSize::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
     281             : {
     282       17174 :     bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
     283       17174 :     nMemberId &= ~CONVERT_TWIPS;
     284       17174 :     bool bRet = true;
     285       17174 :     switch ( nMemberId )
     286             :     {
     287             :         case MID_FRMSIZE_SIZE:
     288             :         {
     289        5570 :             awt::Size aVal;
     290        5570 :             if(!(rVal >>= aVal))
     291          24 :                 bRet = false;
     292             :             else
     293             :             {
     294        5546 :                 Size aTmp(aVal.Width, aVal.Height);
     295        5546 :                 if(bConvert)
     296             :                 {
     297        5546 :                     aTmp.Height() = convertMm100ToTwip(aTmp.Height());
     298        5546 :                     aTmp.Width() = convertMm100ToTwip(aTmp.Width());
     299             :                 }
     300        5546 :                 if(aTmp.Height() && aTmp.Width())
     301        5546 :                     m_aSize = aTmp;
     302             :                 else
     303           0 :                     bRet = false;
     304             :             }
     305             :         }
     306        5570 :         break;
     307             :         case MID_FRMSIZE_REL_HEIGHT:
     308             :         {
     309         482 :             sal_Int16 nSet = 0;
     310         482 :             rVal >>= nSet;
     311         482 :             if(nSet >= 0 && nSet <= 0xfe)
     312         482 :                 SetHeightPercent((sal_uInt8)nSet);
     313             :             else
     314           0 :                 bRet = false;
     315             :         }
     316         482 :         break;
     317             :         case MID_FRMSIZE_REL_HEIGHT_RELATION:
     318             :         {
     319          18 :             sal_Int16 eSet = 0;
     320          18 :             rVal >>= eSet;
     321          18 :             SetHeightPercentRelation(eSet);
     322             :         }
     323          18 :         break;
     324             :         case MID_FRMSIZE_REL_WIDTH:
     325             :         {
     326         492 :             sal_Int16 nSet = 0;
     327         492 :             rVal >>= nSet;
     328         492 :             if(nSet >= 0 && nSet <= 0xfe)
     329         492 :                 SetWidthPercent((sal_uInt8)nSet);
     330             :             else
     331           0 :                 bRet = false;
     332             :         }
     333         492 :         break;
     334             :         case MID_FRMSIZE_REL_WIDTH_RELATION:
     335             :         {
     336          18 :             sal_Int16 eSet = 0;
     337          18 :             rVal >>= eSet;
     338          18 :             SetWidthPercentRelation(eSet);
     339             :         }
     340          18 :         break;
     341             :         case MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH:
     342             :         {
     343         474 :             bool bSet = *(sal_Bool*)rVal.getValue();
     344         474 :             if(bSet)
     345           2 :                 SetHeightPercent(0xff);
     346         472 :             else if( 0xff == GetHeightPercent() )
     347           0 :                 SetHeightPercent( 0 );
     348             :         }
     349         474 :         break;
     350             :         case MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT:
     351             :         {
     352         474 :             bool bSet = *(sal_Bool*)rVal.getValue();
     353         474 :             if(bSet)
     354           2 :                 SetWidthPercent(0xff);
     355         472 :             else if( 0xff == GetWidthPercent() )
     356           0 :                 SetWidthPercent(0);
     357             :         }
     358         474 :         break;
     359             :         case MID_FRMSIZE_WIDTH :
     360             :         {
     361        1948 :             sal_Int32 nWd = 0;
     362        1948 :             if(rVal >>= nWd)
     363             :             {
     364        1948 :                 if(bConvert)
     365        1948 :                     nWd = convertMm100ToTwip(nWd);
     366        1948 :                 if(nWd < MINLAY)
     367         104 :                    nWd = MINLAY;
     368        1948 :                 m_aSize.Width() = nWd;
     369             :             }
     370             :             else
     371           0 :                 bRet = false;
     372             :         }
     373        1948 :         break;
     374             :         case MID_FRMSIZE_HEIGHT:
     375             :         {
     376        1884 :             sal_Int32 nHg = 0;
     377        1884 :             if(rVal >>= nHg)
     378             :             {
     379        1884 :                 if(bConvert)
     380        1884 :                     nHg = convertMm100ToTwip(nHg);
     381        1884 :                 if(nHg < MINLAY)
     382         104 :                     nHg = MINLAY;
     383        1884 :                 m_aSize.Height() = nHg;
     384             :             }
     385             :             else
     386           0 :                 bRet = false;
     387             :         }
     388        1884 :         break;
     389             :         case MID_FRMSIZE_SIZE_TYPE:
     390             :         {
     391        4010 :             sal_Int16 nType = 0;
     392        4010 :             if((rVal >>= nType) && nType >= 0 && nType <= ATT_MIN_SIZE )
     393             :             {
     394        4010 :                 SetHeightSizeType((SwFrmSize)nType);
     395             :             }
     396             :             else
     397           0 :                 bRet = false;
     398             :         }
     399        4010 :         break;
     400             :         case MID_FRMSIZE_IS_AUTO_HEIGHT:
     401             :         {
     402        1498 :             bool bSet = *(sal_Bool*)rVal.getValue();
     403        1498 :             SetHeightSizeType(bSet ? ATT_VAR_SIZE : ATT_FIX_SIZE);
     404             :         }
     405        1498 :         break;
     406             :         case MID_FRMSIZE_WIDTH_TYPE:
     407             :         {
     408         306 :             sal_Int16 nType = 0;
     409         306 :             if((rVal >>= nType) && nType >= 0 && nType <= ATT_MIN_SIZE )
     410             :             {
     411         304 :                 SetWidthSizeType((SwFrmSize)nType);
     412             :             }
     413             :             else
     414           2 :                 bRet = false;
     415             :         }
     416         306 :         break;
     417             :         default:
     418           0 :             bRet = false;
     419             :     }
     420       17174 :     return bRet;
     421             : }
     422             : 
     423             : // Partially implemented inline in hxx
     424       12150 : SwFmtFillOrder::SwFmtFillOrder( SwFillOrder nFO )
     425       12150 :     : SfxEnumItem( RES_FILL_ORDER, sal_uInt16(nFO) )
     426       12150 : {}
     427        5106 : SfxPoolItem*  SwFmtFillOrder::Clone( SfxItemPool* ) const
     428             : {
     429        5106 :     return new SwFmtFillOrder( GetFillOrder() );
     430             : }
     431             : 
     432           0 : sal_uInt16  SwFmtFillOrder::GetValueCount() const
     433             : {
     434           0 :     return SW_FILL_ORDER_END - SW_FILL_ORDER_BEGIN;
     435             : }
     436             : 
     437             : // Partially implemented inline in hxx
     438         118 : SwFmtHeader::SwFmtHeader( SwFrmFmt *pHeaderFmt )
     439             :     : SfxPoolItem( RES_HEADER ),
     440             :     SwClient( pHeaderFmt ),
     441         118 :     bActive( pHeaderFmt ? sal_True : sal_False )
     442             : {
     443         118 : }
     444             : 
     445       22260 : SwFmtHeader::SwFmtHeader( const SwFmtHeader &rCpy )
     446             :     : SfxPoolItem( RES_HEADER ),
     447       22260 :     SwClient( (SwModify*)rCpy.GetRegisteredIn() ),
     448       44520 :     bActive( rCpy.IsActive() )
     449             : {
     450       22260 : }
     451             : 
     452        1426 : SwFmtHeader::SwFmtHeader( bool bOn )
     453             :     : SfxPoolItem( RES_HEADER ),
     454             :     SwClient( 0 ),
     455        1426 :     bActive( bOn )
     456             : {
     457        1426 : }
     458             : 
     459       65379 :  SwFmtHeader::~SwFmtHeader()
     460             : {
     461       23801 :     if ( GetHeaderFmt() )
     462       14232 :         DelHFFormat( this, GetHeaderFmt() );
     463       41578 : }
     464             : 
     465       40374 : bool SwFmtHeader::operator==( const SfxPoolItem& rAttr ) const
     466             : {
     467             :     assert(SfxPoolItem::operator==(rAttr));
     468       56532 :     return ( GetRegisteredIn() == ((SwFmtHeader&)rAttr).GetRegisteredIn() &&
     469       56532 :              bActive == ((SwFmtHeader&)rAttr).IsActive() );
     470             : }
     471             : 
     472       17690 : SfxPoolItem*  SwFmtHeader::Clone( SfxItemPool* ) const
     473             : {
     474       17690 :     return new SwFmtHeader( *this );
     475             : }
     476             : 
     477        5376 : void SwFmtHeader::RegisterToFormat( SwFmt& rFmt )
     478             : {
     479        5376 :     rFmt.Add(this);
     480        5376 : }
     481             : 
     482             : // Partially implemented inline in hxx
     483          98 : SwFmtFooter::SwFmtFooter( SwFrmFmt *pFooterFmt )
     484             :     : SfxPoolItem( RES_FOOTER ),
     485             :     SwClient( pFooterFmt ),
     486          98 :     bActive( pFooterFmt ? sal_True : sal_False )
     487             : {
     488          98 : }
     489             : 
     490       18454 : SwFmtFooter::SwFmtFooter( const SwFmtFooter &rCpy )
     491             :     : SfxPoolItem( RES_FOOTER ),
     492       18454 :     SwClient( (SwModify*)rCpy.GetRegisteredIn() ),
     493       36908 :     bActive( rCpy.IsActive() )
     494             : {
     495       18454 : }
     496             : 
     497        1424 : SwFmtFooter::SwFmtFooter( bool bOn )
     498             :     : SfxPoolItem( RES_FOOTER ),
     499             :     SwClient( 0 ),
     500        1424 :     bActive( bOn )
     501             : {
     502        1424 : }
     503             : 
     504       55441 :  SwFmtFooter::~SwFmtFooter()
     505             : {
     506       19973 :     if ( GetFooterFmt() )
     507        8902 :         DelHFFormat( this, GetFooterFmt() );
     508       35468 : }
     509             : 
     510        3496 : void SwFmtFooter::RegisterToFormat( SwFmt& rFmt )
     511             : {
     512        3496 :     rFmt.Add(this);
     513        3496 : }
     514             : 
     515       38394 : bool SwFmtFooter::operator==( const SfxPoolItem& rAttr ) const
     516             : {
     517             :     assert(SfxPoolItem::operator==(rAttr));
     518       59316 :     return ( GetRegisteredIn() == ((SwFmtFooter&)rAttr).GetRegisteredIn() &&
     519       59316 :              bActive == ((SwFmtFooter&)rAttr).IsActive() );
     520             : }
     521             : 
     522       15408 : SfxPoolItem*  SwFmtFooter::Clone( SfxItemPool* ) const
     523             : {
     524       15408 :     return new SwFmtFooter( *this );
     525             : }
     526             : 
     527             : // Partially implemented inline in hxx
     528      135374 : SwFmtCntnt::SwFmtCntnt( const SwFmtCntnt &rCpy )
     529      135374 :     : SfxPoolItem( RES_CNTNT )
     530             : {
     531      135374 :     pStartNode = rCpy.GetCntntIdx() ?
     532      135374 :                     new SwNodeIndex( *rCpy.GetCntntIdx() ) : 0;
     533      135374 : }
     534             : 
     535       13812 : SwFmtCntnt::SwFmtCntnt( const SwStartNode *pStartNd )
     536       13812 :     : SfxPoolItem( RES_CNTNT )
     537             : {
     538       13812 :     pStartNode = pStartNd ? new SwNodeIndex( *pStartNd ) : 0;
     539       13812 : }
     540             : 
     541      432748 :  SwFmtCntnt::~SwFmtCntnt()
     542             : {
     543      149184 :     delete pStartNode;
     544      283564 : }
     545             : 
     546       12322 : void SwFmtCntnt::SetNewCntntIdx( const SwNodeIndex *pIdx )
     547             : {
     548       12322 :     delete pStartNode;
     549       12322 :     pStartNode = pIdx ? new SwNodeIndex( *pIdx ) : 0;
     550       12322 : }
     551             : 
     552      518650 : bool SwFmtCntnt::operator==( const SfxPoolItem& rAttr ) const
     553             : {
     554             :     assert(SfxPoolItem::operator==(rAttr));
     555      518650 :     if( (bool)pStartNode != (bool)((SwFmtCntnt&)rAttr).pStartNode )
     556           2 :         return false;
     557      518648 :     if( pStartNode )
     558      518632 :         return ( *pStartNode == *((SwFmtCntnt&)rAttr).GetCntntIdx() );
     559          16 :     return true;
     560             : }
     561             : 
     562      134292 : SfxPoolItem*  SwFmtCntnt::Clone( SfxItemPool* ) const
     563             : {
     564      134292 :     return new SwFmtCntnt( *this );
     565             : }
     566             : 
     567             : // Partially implemented inline in hxx
     568       59529 : SwFmtPageDesc::SwFmtPageDesc( const SwFmtPageDesc &rCpy )
     569             :     : SfxPoolItem( RES_PAGEDESC ),
     570       59529 :     SwClient( (SwPageDesc*)rCpy.GetPageDesc() ),
     571             :     oNumOffset( rCpy.oNumOffset ),
     572             :     nDescNameIdx( rCpy.nDescNameIdx ),
     573      119058 :     pDefinedIn( 0 )
     574             : {
     575       59529 : }
     576             : 
     577        5688 : SwFmtPageDesc::SwFmtPageDesc( const SwPageDesc *pDesc )
     578             :     : SfxPoolItem( RES_PAGEDESC ),
     579             :     SwClient( (SwPageDesc*)pDesc ),
     580             :     nDescNameIdx( 0xFFFF ), // IDX_NO_VALUE
     581        5688 :     pDefinedIn( 0 )
     582             : {
     583        5688 : }
     584             : 
     585           0 : SwFmtPageDesc &SwFmtPageDesc::operator=(const SwFmtPageDesc &rCpy)
     586             : {
     587           0 :     if (rCpy.GetPageDesc())
     588           0 :         RegisterToPageDesc(*const_cast<SwPageDesc*>(rCpy.GetPageDesc()));
     589           0 :     oNumOffset = rCpy.oNumOffset;
     590           0 :     nDescNameIdx = rCpy.nDescNameIdx;
     591           0 :     pDefinedIn = 0;
     592             : 
     593           0 :     return *this;
     594             : }
     595             : 
     596      123986 :  SwFmtPageDesc::~SwFmtPageDesc() {}
     597             : 
     598        9246 : bool SwFmtPageDesc::KnowsPageDesc() const
     599             : {
     600        9246 :     return (GetRegisteredIn() != 0);
     601             : }
     602             : 
     603        4080 : bool SwFmtPageDesc::operator==( const SfxPoolItem& rAttr ) const
     604             : {
     605             :     assert(SfxPoolItem::operator==(rAttr));
     606        6412 :     return  ( pDefinedIn == ((SwFmtPageDesc&)rAttr).pDefinedIn ) &&
     607        5936 :             ( oNumOffset == ((SwFmtPageDesc&)rAttr).oNumOffset ) &&
     608        5936 :             ( GetPageDesc() == ((SwFmtPageDesc&)rAttr).GetPageDesc() );
     609             : }
     610             : 
     611       54633 : SfxPoolItem*  SwFmtPageDesc::Clone( SfxItemPool* ) const
     612             : {
     613       54633 :     return new SwFmtPageDesc( *this );
     614             : }
     615             : 
     616           0 : void SwFmtPageDesc::SwClientNotify( const SwModify&, const SfxHint& rHint )
     617             : {
     618           0 :     const SwPageDescHint* pHint = dynamic_cast<const SwPageDescHint*>(&rHint);
     619           0 :     if ( pHint )
     620             :     {
     621             :         // mba: shouldn't that be broadcasted also?
     622           0 :         SwFmtPageDesc aDfltDesc( pHint->GetPageDesc() );
     623           0 :         SwPageDesc* pDesc = pHint->GetPageDesc();
     624           0 :         const SwModify* pMod = GetDefinedIn();
     625           0 :         if ( pMod )
     626             :         {
     627           0 :             if( pMod->ISA( SwCntntNode ) )
     628           0 :                 ((SwCntntNode*)pMod)->SetAttr( aDfltDesc );
     629           0 :             else if( pMod->ISA( SwFmt ))
     630           0 :                 ((SwFmt*)pMod)->SetFmtAttr( aDfltDesc );
     631             :             else
     632             :             {
     633             :                 OSL_FAIL( "What kind of SwModify is this?" );
     634           0 :                 RegisterToPageDesc( *pDesc );
     635             :             }
     636             :         }
     637             :         else
     638             :             // there could be an Undo-copy
     639           0 :             RegisterToPageDesc( *pDesc );
     640             :     }
     641           0 : }
     642             : 
     643        4016 : void SwFmtPageDesc::RegisterToPageDesc( SwPageDesc& rDesc )
     644             : {
     645        4016 :     rDesc.Add( this );
     646        4016 : }
     647             : 
     648       10396 : void SwFmtPageDesc::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
     649             : {
     650       10396 :     if( !pDefinedIn )
     651       16618 :         return;
     652             : 
     653        4174 :     const sal_uInt16 nWhichId = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
     654        4174 :     switch( nWhichId )
     655             :     {
     656             :         case RES_OBJECTDYING:
     657             :                 //The Pagedesc where I'm registered dies, therefore I unregister
     658             :                 //from that format. During this I get deleted!
     659        4174 :             if( IS_TYPE( SwFmt, pDefinedIn ))
     660             :             {
     661             :                 bool const bResult =
     662           0 :                     static_cast<SwFmt*>(pDefinedIn)->ResetFmtAttr(RES_PAGEDESC);
     663             :                 OSL_ENSURE( bResult, "FmtPageDesc not deleted" );
     664             :                 (void) bResult; // unused in non-debug
     665             :             }
     666        4174 :             else if( IS_TYPE( SwCntntNode, pDefinedIn ))
     667             :             {
     668             :                 bool const bResult = static_cast<SwCntntNode*>(pDefinedIn)
     669           0 :                         ->ResetAttr(RES_PAGEDESC);
     670             :                 OSL_ENSURE( bResult, "FmtPageDesc not deleted" );
     671             :                 (void) bResult; // unused in non-debug
     672             :             }
     673        4174 :             break;
     674             : 
     675             :         default:
     676             :             /* do nothing */;
     677             :     }
     678             : }
     679             : 
     680         144 : bool SwFmtPageDesc::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
     681             : {
     682             :     // here we convert always!
     683         144 :     nMemberId &= ~CONVERT_TWIPS;
     684         144 :     bool    bRet = true;
     685         144 :     switch ( nMemberId )
     686             :     {
     687             :         case MID_PAGEDESC_PAGENUMOFFSET:
     688             :             {
     689          72 :                 ::boost::optional<sal_uInt16> oOffset = GetNumOffset();
     690          72 :                 if (oOffset)
     691             :                 {
     692           8 :                     rVal <<= (sal_Int16)oOffset.get();
     693             :                 }
     694             :                 else
     695             :                 {
     696          64 :                     rVal.clear();
     697          72 :                 }
     698             :             }
     699          72 :             break;
     700             : 
     701             :         case MID_PAGEDESC_PAGEDESCNAME:
     702             :             {
     703          72 :                 const SwPageDesc* pDesc = GetPageDesc();
     704          72 :                 if( pDesc )
     705             :                 {
     706          54 :                     OUString aString;
     707          54 :                     SwStyleNameMapper::FillProgName(pDesc->GetName(), aString, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, true );
     708          54 :                     rVal <<= aString;
     709             :                 }
     710             :                 else
     711          18 :                     rVal.clear();
     712             :             }
     713          72 :             break;
     714             :         default:
     715             :             OSL_ENSURE( false, "unknown MemberId" );
     716           0 :             bRet = false;
     717             :     }
     718         144 :     return bRet;
     719             : }
     720             : 
     721         368 : bool SwFmtPageDesc::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
     722             : {
     723             :     // here we convert always!
     724         368 :     nMemberId &= ~CONVERT_TWIPS;
     725         368 :     bool bRet = true;
     726         368 :     switch ( nMemberId )
     727             :     {
     728             :         case MID_PAGEDESC_PAGENUMOFFSET:
     729             :         {
     730         368 :             sal_Int16 nOffset = 0;
     731         368 :             if (!rVal.hasValue())
     732             :             {
     733         156 :                 SetNumOffset(boost::none);
     734             :             }
     735         212 :             else if (rVal >>= nOffset)
     736         212 :                 SetNumOffset( nOffset );
     737             :             else
     738           0 :                 bRet = false;
     739             :         }
     740         368 :         break;
     741             : 
     742             :         case MID_PAGEDESC_PAGEDESCNAME:
     743             :             /* Doesn't work, because the attribute doesn't need the name but a
     744             :              * pointer to the PageDesc (it's a client of it). The pointer can
     745             :              * only be requested from the document using the name.
     746             :              */
     747             :         default:
     748             :             OSL_ENSURE( false, "unknown MemberId" );
     749           0 :             bRet = false;
     750             :     }
     751         368 :     return bRet;
     752             : }
     753             : 
     754             : //  class SwFmtCol
     755             : //  Partially implemented inline in hxx
     756             : 
     757         454 : SwColumn::SwColumn() :
     758             :     nWish ( 0 ),
     759             :     nUpper( 0 ),
     760             :     nLower( 0 ),
     761             :     nLeft ( 0 ),
     762         454 :     nRight( 0 )
     763             : {
     764         454 : }
     765             : 
     766         166 : bool SwColumn::operator==( const SwColumn &rCmp ) const
     767             : {
     768         332 :     return (nWish    == rCmp.GetWishWidth() &&
     769         332 :             GetLeft()  == rCmp.GetLeft() &&
     770         274 :             GetRight() == rCmp.GetRight() &&
     771         108 :             GetUpper() == rCmp.GetUpper() &&
     772         274 :             GetLower() == rCmp.GetLower()) ? sal_True : sal_False;
     773             : }
     774             : 
     775        1166 : SwFmtCol::SwFmtCol( const SwFmtCol& rCpy )
     776             :     : SfxPoolItem( RES_COL ),
     777             :     m_eLineStyle( rCpy.m_eLineStyle ),
     778             :     m_nLineWidth( rCpy.m_nLineWidth),
     779             :     m_aLineColor( rCpy.m_aLineColor),
     780        1166 :     m_nLineHeight( rCpy.GetLineHeight() ),
     781        1166 :     m_eAdj( rCpy.GetLineAdj() ),
     782        1166 :     m_aColumns( (sal_Int8)rCpy.GetNumCols() ),
     783        1166 :     m_nWidth( rCpy.GetWishWidth() ),
     784             :     m_aWidthAdjustValue( rCpy.m_aWidthAdjustValue ),
     785        5830 :     m_bOrtho( rCpy.IsOrtho() )
     786             : {
     787        1636 :     for ( sal_uInt16 i = 0; i < rCpy.GetNumCols(); ++i )
     788             :     {
     789         470 :         SwColumn *pCol = new SwColumn( rCpy.GetColumns()[i] );
     790         470 :         m_aColumns.push_back( pCol );
     791             :     }
     792        1166 : }
     793             : 
     794        3552 : SwFmtCol::~SwFmtCol() {}
     795             : 
     796           0 : SwFmtCol& SwFmtCol::operator=( const SwFmtCol& rCpy )
     797             : {
     798           0 :     m_eLineStyle  = rCpy.m_eLineStyle;
     799           0 :     m_nLineWidth  = rCpy.m_nLineWidth;
     800           0 :     m_aLineColor  = rCpy.m_aLineColor;
     801           0 :     m_nLineHeight = rCpy.GetLineHeight();
     802           0 :     m_eAdj        = rCpy.GetLineAdj();
     803           0 :     m_nWidth      = rCpy.GetWishWidth();
     804           0 :     m_aWidthAdjustValue = rCpy.m_aWidthAdjustValue;
     805           0 :     m_bOrtho      = rCpy.IsOrtho();
     806             : 
     807           0 :     if ( !m_aColumns.empty() )
     808           0 :         m_aColumns.clear();
     809           0 :     for ( sal_uInt16 i = 0; i < rCpy.GetNumCols(); ++i )
     810             :     {
     811           0 :         SwColumn *pCol = new SwColumn( rCpy.GetColumns()[i] );
     812           0 :         m_aColumns.push_back( pCol );
     813             :     }
     814           0 :     return *this;
     815             : }
     816             : 
     817         742 : SwFmtCol::SwFmtCol()
     818             :     : SfxPoolItem( RES_COL )
     819             :     , m_eLineStyle( table::BorderLineStyle::NONE)
     820             :     ,
     821             :     m_nLineWidth(0),
     822             :     m_nLineHeight( 100 ),
     823             :     m_eAdj( COLADJ_NONE ),
     824             :     m_nWidth( USHRT_MAX ),
     825             :     m_aWidthAdjustValue( 0 ),
     826         742 :     m_bOrtho( true )
     827             : {
     828         742 : }
     829             : 
     830        1884 : bool SwFmtCol::operator==( const SfxPoolItem& rAttr ) const
     831             : {
     832             :     assert(SfxPoolItem::operator==(rAttr));
     833        1884 :     const SwFmtCol &rCmp = (const SwFmtCol&)rAttr;
     834        5652 :     if( !(m_eLineStyle        == rCmp.m_eLineStyle  &&
     835        3768 :           m_nLineWidth        == rCmp.m_nLineWidth  &&
     836        3768 :           m_aLineColor        == rCmp.m_aLineColor  &&
     837        3768 :           m_nLineHeight        == rCmp.GetLineHeight() &&
     838        3756 :           m_eAdj               == rCmp.GetLineAdj() &&
     839        3138 :           m_nWidth             == rCmp.GetWishWidth() &&
     840        2420 :           m_bOrtho             == rCmp.IsOrtho() &&
     841        1154 :           m_aColumns.size() == rCmp.GetNumCols() &&
     842         694 :           m_aWidthAdjustValue == rCmp.GetAdjustValue()
     843        2578 :          ) )
     844        1190 :         return false;
     845             : 
     846         802 :     for ( sal_uInt16 i = 0; i < m_aColumns.size(); ++i )
     847         166 :         if ( !(m_aColumns[i] == rCmp.GetColumns()[i]) )
     848          58 :             return false;
     849             : 
     850         636 :     return true;
     851             : }
     852             : 
     853         962 : SfxPoolItem*  SwFmtCol::Clone( SfxItemPool* ) const
     854             : {
     855         962 :     return new SwFmtCol( *this );
     856             : }
     857             : 
     858         328 : sal_uInt16 SwFmtCol::GetGutterWidth( bool bMin ) const
     859             : {
     860         328 :     sal_uInt16 nRet = 0;
     861         328 :     if ( m_aColumns.size() == 2 )
     862          46 :         nRet = m_aColumns[0].GetRight() + m_aColumns[1].GetLeft();
     863         282 :     else if ( m_aColumns.size() > 2 )
     864             :     {
     865          20 :         bool bSet = false;
     866          60 :         for ( sal_uInt16 i = 1; i < m_aColumns.size()-1; ++i )
     867             :         {
     868          40 :             const sal_uInt16 nTmp = m_aColumns[i].GetRight() + m_aColumns[i+1].GetLeft();
     869          40 :             if ( bSet )
     870             :             {
     871          20 :                 if ( nTmp != nRet )
     872             :                 {
     873           0 :                     if ( !bMin )
     874           0 :                         return USHRT_MAX;
     875           0 :                     if ( nRet > nTmp )
     876           0 :                         nRet = nTmp;
     877             :                 }
     878             :             }
     879             :             else
     880          20 :             {   bSet = true;
     881          20 :                 nRet = nTmp;
     882             :             }
     883             :         }
     884             :     }
     885         328 :     return nRet;
     886             : }
     887             : 
     888           0 : void SwFmtCol::SetGutterWidth( sal_uInt16 nNew, sal_uInt16 nAct )
     889             : {
     890           0 :     if ( m_bOrtho )
     891           0 :         Calc( nNew, nAct );
     892             :     else
     893             :     {
     894           0 :         sal_uInt16 nHalf = nNew / 2;
     895           0 :         for ( sal_uInt16 i = 0; i < m_aColumns.size(); ++i )
     896           0 :         {   SwColumn *pCol = &m_aColumns[i];
     897           0 :             pCol->SetLeft ( nHalf );
     898           0 :             pCol->SetRight( nHalf );
     899           0 :             if ( i == 0 )
     900           0 :                 pCol->SetLeft( 0 );
     901           0 :             else if ( i == (m_aColumns.size() - 1) )
     902           0 :                 pCol->SetRight( 0 );
     903             :         }
     904             :     }
     905           0 : }
     906             : 
     907          14 : void SwFmtCol::Init( sal_uInt16 nNumCols, sal_uInt16 nGutterWidth, sal_uInt16 nAct )
     908             : {
     909             :     // Deleting seems to be a bit radical on the first sight; but otherwise we
     910             :     // have to initialize all values of the remaining SwCloumns.
     911          14 :     if ( !m_aColumns.empty() )
     912           0 :         m_aColumns.clear();
     913          42 :     for ( sal_uInt16 i = 0; i < nNumCols; ++i )
     914          28 :     {   SwColumn *pCol = new SwColumn;
     915          28 :         m_aColumns.push_back( pCol );
     916             :     }
     917          14 :     m_bOrtho = true;
     918          14 :     m_nWidth = USHRT_MAX;
     919          14 :     if( nNumCols )
     920          14 :         Calc( nGutterWidth, nAct );
     921          14 : }
     922             : 
     923           0 : void SwFmtCol::SetOrtho( bool bNew, sal_uInt16 nGutterWidth, sal_uInt16 nAct )
     924             : {
     925           0 :     m_bOrtho = bNew;
     926           0 :     if ( bNew && !m_aColumns.empty() )
     927           0 :         Calc( nGutterWidth, nAct );
     928           0 : }
     929             : 
     930        1528 : sal_uInt16 SwFmtCol::CalcColWidth( sal_uInt16 nCol, sal_uInt16 nAct ) const
     931             : {
     932             :     assert(nCol < m_aColumns.size());
     933        1528 :     if ( m_nWidth != nAct )
     934             :     {
     935        1434 :         long nW = m_aColumns[nCol].GetWishWidth();
     936        1434 :         nW *= nAct;
     937        1434 :         nW /= m_nWidth;
     938        1434 :         return sal_uInt16(nW);
     939             :     }
     940             :     else
     941          94 :         return m_aColumns[nCol].GetWishWidth();
     942             : }
     943             : 
     944         118 : sal_uInt16 SwFmtCol::CalcPrtColWidth( sal_uInt16 nCol, sal_uInt16 nAct ) const
     945             : {
     946             :     assert(nCol < m_aColumns.size());
     947         118 :     sal_uInt16 nRet = CalcColWidth( nCol, nAct );
     948         118 :     const SwColumn *pCol = &m_aColumns[nCol];
     949         118 :     nRet = nRet - pCol->GetLeft();
     950         118 :     nRet = nRet - pCol->GetRight();
     951         118 :     return nRet;
     952             : }
     953             : 
     954          14 : void SwFmtCol::Calc( sal_uInt16 nGutterWidth, sal_uInt16 nAct )
     955             : {
     956          14 :     if(!GetNumCols())
     957          14 :         return;
     958             :     //First set the column widths with the current width, then calculate the
     959             :     //column's requested width using the requested total width.
     960             : 
     961          14 :     const sal_uInt16 nGutterHalf = nGutterWidth ? nGutterWidth / 2 : 0;
     962             : 
     963             :     //Width of PrtAreas is totalwidth - spacings / count
     964             :     const sal_uInt16 nPrtWidth =
     965          14 :                 (nAct - ((GetNumCols()-1) * nGutterWidth)) / GetNumCols();
     966          14 :     sal_uInt16 nAvail = nAct;
     967             : 
     968             :     //The fist column is PrtWidth + (gap width / 2)
     969          14 :     const sal_uInt16 nLeftWidth = nPrtWidth + nGutterHalf;
     970          14 :     SwColumn *pCol = &m_aColumns.front();
     971          14 :     pCol->SetWishWidth( nLeftWidth );
     972          14 :     pCol->SetRight( nGutterHalf );
     973          14 :     pCol->SetLeft ( 0 );
     974          14 :     nAvail = nAvail - nLeftWidth;
     975             : 
     976             :     //Column 2 to n-1 is PrtWidth + gap width
     977          14 :     const sal_uInt16 nMidWidth = nPrtWidth + nGutterWidth;
     978             :     sal_uInt16 i;
     979             : 
     980          14 :     for ( i = 1; i < GetNumCols()-1; ++i )
     981             :     {
     982           0 :         pCol = &m_aColumns[i];
     983           0 :         pCol->SetWishWidth( nMidWidth );
     984           0 :         pCol->SetLeft ( nGutterHalf );
     985           0 :         pCol->SetRight( nGutterHalf );
     986           0 :         nAvail = nAvail - nMidWidth;
     987             :     }
     988             : 
     989             :     //The last column is equivalent to the first one - to compensate rounding
     990             :     //errors we add the remaining space of the other columns to the last one.
     991          14 :     pCol = &m_aColumns.back();
     992          14 :     pCol->SetWishWidth( nAvail );
     993          14 :     pCol->SetLeft ( nGutterHalf );
     994          14 :     pCol->SetRight( 0 );
     995             : 
     996             :     //Convert the current width to the requested width.
     997          42 :     for ( i = 0; i < m_aColumns.size(); ++i )
     998             :     {
     999          28 :         pCol = &m_aColumns[i];
    1000          28 :         long nTmp = pCol->GetWishWidth();
    1001          28 :         nTmp *= GetWishWidth();
    1002          28 :         nTmp /= nAct;
    1003          28 :         pCol->SetWishWidth( sal_uInt16(nTmp) );
    1004             :     }
    1005             : }
    1006             : 
    1007         300 : bool SwFmtCol::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1008             : {
    1009             :     // here we convert always!
    1010         300 :     nMemberId &= ~CONVERT_TWIPS;
    1011         300 :     if(MID_COLUMN_SEPARATOR_LINE == nMemberId)
    1012             :     {
    1013             :         OSL_FAIL("not implemented");
    1014             :     }
    1015             :     else
    1016             :     {
    1017         300 :         uno::Reference< text::XTextColumns >  xCols = new SwXTextColumns(*this);
    1018         300 :         rVal.setValue(&xCols, cppu::UnoType<text::XTextColumns>::get());
    1019             :     }
    1020         300 :     return true;
    1021             : }
    1022             : 
    1023         334 : bool SwFmtCol::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1024             : {
    1025             :     // here we convert always!
    1026         334 :     nMemberId &= ~CONVERT_TWIPS;
    1027         334 :     bool bRet = false;
    1028         334 :     if(MID_COLUMN_SEPARATOR_LINE == nMemberId)
    1029             :     {
    1030             :         OSL_FAIL("not implemented");
    1031             :     }
    1032             :     else
    1033             :     {
    1034         334 :         uno::Reference< text::XTextColumns > xCols;
    1035         334 :         rVal >>= xCols;
    1036         334 :         if(xCols.is())
    1037             :         {
    1038         334 :             uno::Sequence<text::TextColumn> aSetColumns = xCols->getColumns();
    1039         334 :             const text::TextColumn* pArray = aSetColumns.getConstArray();
    1040         334 :             m_aColumns.clear();
    1041             :             //max count is 64k here - this is something the array can't do
    1042         334 :             sal_uInt16 nCount = std::min( (sal_uInt16)aSetColumns.getLength(),
    1043         668 :                                      (sal_uInt16) 0x3fff );
    1044         334 :             sal_uInt16 nWidthSum = 0;
    1045             :             // #101224# one column is no column
    1046             : 
    1047         334 :             if(nCount > 1)
    1048         596 :                 for(sal_uInt16 i = 0; i < nCount; i++)
    1049             :                 {
    1050         426 :                     SwColumn* pCol = new SwColumn;
    1051         426 :                     pCol->SetWishWidth( static_cast<sal_uInt16>(pArray[i].Width) );
    1052         426 :                     nWidthSum = static_cast<sal_uInt16>(nWidthSum + pArray[i].Width);
    1053         426 :                     pCol->SetLeft ( static_cast<sal_uInt16>(convertMm100ToTwip(pArray[i].LeftMargin)) );
    1054         426 :                     pCol->SetRight( static_cast<sal_uInt16>(convertMm100ToTwip(pArray[i].RightMargin)) );
    1055         426 :                     m_aColumns.insert(m_aColumns.begin() + i, pCol);
    1056             :                 }
    1057         334 :             bRet = true;
    1058         334 :             m_nWidth = nWidthSum;
    1059         334 :             m_bOrtho = false;
    1060             : 
    1061         668 :             uno::Reference<lang::XUnoTunnel> xNumTunnel(xCols, uno::UNO_QUERY);
    1062         334 :             SwXTextColumns* pSwColums = 0;
    1063         334 :             if(xNumTunnel.is())
    1064             :             {
    1065             :                 pSwColums = reinterpret_cast< SwXTextColumns * >(
    1066             :                     sal::static_int_cast< sal_IntPtr >(
    1067         334 :                     xNumTunnel->getSomething( SwXTextColumns::getUnoTunnelId() )));
    1068             :             }
    1069         334 :             if(pSwColums)
    1070             :             {
    1071         334 :                 m_bOrtho = pSwColums->IsAutomaticWidth();
    1072         334 :                 m_nLineWidth = pSwColums->GetSepLineWidth();
    1073         334 :                 m_aLineColor.SetColor(pSwColums->GetSepLineColor());
    1074         334 :                 m_nLineHeight = pSwColums->GetSepLineHeightRelative();
    1075         334 :                 switch ( pSwColums->GetSepLineStyle() )
    1076             :                 {
    1077             :                     default:
    1078         334 :                     case 0: m_eLineStyle = table::BorderLineStyle::NONE; break;
    1079           0 :                     case 1: m_eLineStyle = table::BorderLineStyle::SOLID; break;
    1080           0 :                     case 2: m_eLineStyle = table::BorderLineStyle::DOTTED; break;
    1081           0 :                     case 3: m_eLineStyle = table::BorderLineStyle::DASHED; break;
    1082             :                 }
    1083         334 :                 if(!pSwColums->GetSepLineIsOn())
    1084         332 :                     m_eAdj = COLADJ_NONE;
    1085           2 :                 else switch(pSwColums->GetSepLineVertAlign())
    1086             :                 {
    1087           0 :                     case 0: m_eAdj = COLADJ_TOP;  break;  //VerticalAlignment_TOP
    1088           2 :                     case 1: m_eAdj = COLADJ_CENTER;break; //VerticalAlignment_MIDDLE
    1089           0 :                     case 2: m_eAdj = COLADJ_BOTTOM;break; //VerticalAlignment_BOTTOM
    1090           0 :                     default: OSL_ENSURE( false, "unknown alignment" ); break;
    1091             :                 }
    1092         334 :             }
    1093         334 :         }
    1094             :     }
    1095         334 :     return bRet;
    1096             : }
    1097             : 
    1098             : // Partially implemented inline in hxx
    1099        2748 : SwFmtSurround::SwFmtSurround( SwSurround eFly ) :
    1100        2748 :     SfxEnumItem( RES_SURROUND, sal_uInt16( eFly ) )
    1101             : {
    1102        2748 :     bAnchorOnly = bContour = bOutside = false;
    1103        2748 : }
    1104             : 
    1105       12476 : SwFmtSurround::SwFmtSurround( const SwFmtSurround &rCpy ) :
    1106       12476 :     SfxEnumItem( RES_SURROUND, rCpy.GetValue() )
    1107             : {
    1108       12476 :     bAnchorOnly = rCpy.bAnchorOnly;
    1109       12476 :     bContour = rCpy.bContour;
    1110       12476 :     bOutside = rCpy.bOutside;
    1111       12476 : }
    1112             : 
    1113       15458 : bool SwFmtSurround::operator==( const SfxPoolItem& rAttr ) const
    1114             : {
    1115             :     assert(SfxPoolItem::operator==(rAttr));
    1116       22160 :     return ( GetValue() == ((SwFmtSurround&)rAttr).GetValue() &&
    1117       13396 :              bAnchorOnly== ((SwFmtSurround&)rAttr).bAnchorOnly &&
    1118       28760 :              bContour== ((SwFmtSurround&)rAttr).bContour &&
    1119       22066 :              bOutside== ((SwFmtSurround&)rAttr).bOutside );
    1120             : }
    1121             : 
    1122       11562 : SfxPoolItem*  SwFmtSurround::Clone( SfxItemPool* ) const
    1123             : {
    1124       11562 :     return new SwFmtSurround( *this );
    1125             : }
    1126             : 
    1127           0 : sal_uInt16  SwFmtSurround::GetValueCount() const
    1128             : {
    1129           0 :     return SURROUND_END - SURROUND_BEGIN;
    1130             : }
    1131             : 
    1132             : namespace
    1133             : {
    1134         258 :     text::WrapTextMode SwSurroundToWrapMode(SwSurround eSurround)
    1135             :     {
    1136             :         text::WrapTextMode eRet;
    1137         258 :         switch(eSurround)
    1138             :         {
    1139             :             case SURROUND_THROUGHT:
    1140         212 :                 eRet = css::text::WrapTextMode_THROUGHT;
    1141         212 :                 break;
    1142             :             case SURROUND_PARALLEL:
    1143          22 :                 eRet = css::text::WrapTextMode_PARALLEL;
    1144          22 :                 break;
    1145             :             case SURROUND_IDEAL:
    1146          16 :                 eRet = css::text::WrapTextMode_DYNAMIC;
    1147          16 :                 break;
    1148             :             case SURROUND_LEFT:
    1149           4 :                 eRet = css::text::WrapTextMode_LEFT;
    1150           4 :                 break;
    1151             :             case SURROUND_RIGHT:
    1152           0 :                 eRet = css::text::WrapTextMode_RIGHT;
    1153           0 :                 break;
    1154             :             default:
    1155           4 :                 eRet = css::text::WrapTextMode_NONE;
    1156           4 :                 break;
    1157             :         }
    1158         258 :         return eRet;
    1159             :     }
    1160             : }
    1161             : 
    1162         514 : bool SwFmtSurround::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1163             : {
    1164             :     // here we convert always!
    1165         514 :     nMemberId &= ~CONVERT_TWIPS;
    1166         514 :     bool bRet = true;
    1167         514 :     switch ( nMemberId )
    1168             :     {
    1169             :         case MID_SURROUND_SURROUNDTYPE:
    1170         258 :             rVal <<= SwSurroundToWrapMode(GetSurround());
    1171         258 :             break;
    1172             :         case MID_SURROUND_ANCHORONLY:
    1173             :         {
    1174         120 :             bool bTmp = IsAnchorOnly();
    1175         120 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
    1176         120 :             break;
    1177             :         }
    1178             :         case MID_SURROUND_CONTOUR:
    1179             :         {
    1180          68 :             bool bTmp = IsContour();
    1181          68 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
    1182          68 :             break;
    1183             :         }
    1184             :         case MID_SURROUND_CONTOUROUTSIDE:
    1185             :         {
    1186          68 :             bool bTmp = IsOutside();
    1187          68 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
    1188          68 :             break;
    1189             :         }
    1190             :         default:
    1191             :             OSL_ENSURE( false, "unknown MemberId" );
    1192           0 :             bRet = false;
    1193             :     }
    1194         514 :     return bRet;
    1195             : }
    1196             : 
    1197        8050 : bool SwFmtSurround::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1198             : {
    1199             :     // here we convert always!
    1200        8050 :     nMemberId &= ~CONVERT_TWIPS;
    1201        8050 :     bool bRet = true;
    1202        8050 :     switch ( nMemberId )
    1203             :     {
    1204             :         case MID_SURROUND_SURROUNDTYPE:
    1205             :         {
    1206        5626 :             sal_Int32 eVal = SWUnoHelper::GetEnumAsInt32( rVal );
    1207        5626 :             if( eVal >= 0 && eVal < (sal_Int16)SURROUND_END )
    1208        5626 :                 SetValue( static_cast<sal_uInt16>(eVal) );
    1209             :             else {
    1210             :                 //exception
    1211             :                 ;
    1212             :             }
    1213             :         }
    1214        5626 :         break;
    1215             : 
    1216             :         case MID_SURROUND_ANCHORONLY:
    1217         338 :             SetAnchorOnly( *(sal_Bool*)rVal.getValue() );
    1218         338 :             break;
    1219             :         case MID_SURROUND_CONTOUR:
    1220        1948 :             SetContour( *(sal_Bool*)rVal.getValue() );
    1221        1948 :             break;
    1222             :         case MID_SURROUND_CONTOUROUTSIDE:
    1223         138 :             SetOutside( *(sal_Bool*)rVal.getValue() );
    1224         138 :             break;
    1225             :         default:
    1226             :             OSL_ENSURE( false, "unknown MemberId" );
    1227           0 :             bRet = false;
    1228             :     }
    1229        8050 :     return bRet;
    1230             : }
    1231             : 
    1232           0 : SvStream& SwFmtVertOrient::Store(SvStream &rStream, sal_uInt16 /*version*/) const
    1233             : {
    1234             : #if SAL_TYPES_SIZEOFLONG == 8
    1235           0 :     rStream.WriteInt64(m_nYPos);
    1236             : #else
    1237             :     rStream.WriteInt32(m_nYPos);
    1238             : #endif
    1239           0 :     rStream.WriteInt16( m_eOrient ).WriteInt16( m_eRelation );
    1240           0 :     return rStream;
    1241             : }
    1242             : 
    1243           0 : SfxPoolItem* SwFmtVertOrient::Create(SvStream &rStream, sal_uInt16 /*itemVersion*/) const
    1244             : {
    1245           0 :     SwTwips yPos(0);
    1246           0 :     sal_Int16 orient(0);
    1247           0 :     sal_Int16 relation(0);
    1248             :     // compatibility hack for Table Auto Format: SwTwips is "long" :(
    1249             :     // (this means that the file format is platform dependent)
    1250             : #if SAL_TYPES_SIZEOFLONG == 8
    1251           0 :     rStream.ReadInt64(yPos);
    1252             : #else
    1253             :     sal_Int32 n;
    1254             :     rStream.ReadInt32(n);
    1255             :     yPos = n;
    1256             : #endif
    1257           0 :     rStream.ReadInt16( orient ).ReadInt16( relation );
    1258             : 
    1259           0 :     return new SwFmtVertOrient(yPos, orient, relation);
    1260             : }
    1261             : 
    1262             : // Partially implemented inline in hxx
    1263    13069798 : SwFmtVertOrient::SwFmtVertOrient( SwTwips nY, sal_Int16 eVert,
    1264             :                                   sal_Int16 eRel )
    1265             :     : SfxPoolItem( RES_VERT_ORIENT ),
    1266             :     m_nYPos( nY ),
    1267             :     m_eOrient( eVert ),
    1268    13069798 :     m_eRelation( eRel )
    1269    13069798 : {}
    1270             : 
    1271      111454 : bool SwFmtVertOrient::operator==( const SfxPoolItem& rAttr ) const
    1272             : {
    1273             :     assert(SfxPoolItem::operator==(rAttr));
    1274      144324 :     return ( m_nYPos     == ((SwFmtVertOrient&)rAttr).m_nYPos &&
    1275      133508 :              m_eOrient   == ((SwFmtVertOrient&)rAttr).m_eOrient &&
    1276      133508 :              m_eRelation == ((SwFmtVertOrient&)rAttr).m_eRelation );
    1277             : }
    1278             : 
    1279       25232 : SfxPoolItem*  SwFmtVertOrient::Clone( SfxItemPool* ) const
    1280             : {
    1281       25232 :     return new SwFmtVertOrient( m_nYPos, m_eOrient, m_eRelation );
    1282             : }
    1283             : 
    1284       18718 : bool SwFmtVertOrient::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1285             : {
    1286             :     // here we convert always!
    1287       18718 :     nMemberId &= ~CONVERT_TWIPS;
    1288       18718 :     bool bRet = true;
    1289       18718 :     switch ( nMemberId )
    1290             :     {
    1291             :         case MID_VERTORIENT_ORIENT:
    1292             :         {
    1293        1472 :             rVal <<= (sal_Int16)m_eOrient;
    1294             :         }
    1295        1472 :         break;
    1296             :         case MID_VERTORIENT_RELATION:
    1297        1000 :                 rVal <<= (sal_Int16)m_eRelation;
    1298        1000 :         break;
    1299             :         case MID_VERTORIENT_POSITION:
    1300       16246 :                 rVal <<= (sal_Int32)convertTwipToMm100(GetPos());
    1301       16246 :                 break;
    1302             :         default:
    1303             :             OSL_ENSURE( false, "unknown MemberId" );
    1304           0 :             bRet = false;
    1305             :     }
    1306       18718 :     return bRet;
    1307             : }
    1308             : 
    1309       16960 : bool SwFmtVertOrient::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1310             : {
    1311       16960 :     bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
    1312       16960 :     nMemberId &= ~CONVERT_TWIPS;
    1313       16960 :     bool bRet = true;
    1314       16960 :     switch ( nMemberId )
    1315             :     {
    1316             :         case MID_VERTORIENT_ORIENT:
    1317             :         {
    1318        7706 :             sal_uInt16 nVal = text::VertOrientation::NONE;
    1319        7706 :             rVal >>= nVal;
    1320        7706 :             m_eOrient = nVal;
    1321             :         }
    1322        7706 :         break;
    1323             :         case MID_VERTORIENT_RELATION:
    1324             :         {
    1325        5830 :             m_eRelation = lcl_IntToRelation(rVal);
    1326             :         }
    1327        5830 :         break;
    1328             :         case MID_VERTORIENT_POSITION:
    1329             :         {
    1330        3424 :             sal_Int32 nVal = 0;
    1331        3424 :             rVal >>= nVal;
    1332        3424 :             if(bConvert)
    1333        3424 :                 nVal = convertMm100ToTwip(nVal);
    1334        3424 :             SetPos( nVal );
    1335             :         }
    1336        3424 :         break;
    1337             :         default:
    1338             :             OSL_ENSURE( false, "unknown MemberId" );
    1339           0 :             bRet = false;
    1340             :     }
    1341       16960 :     return bRet;
    1342             : }
    1343             : 
    1344             : // Partially implemented inline in hxx
    1345       30466 : SwFmtHoriOrient::SwFmtHoriOrient( SwTwips nX, sal_Int16 eHori,
    1346             :                               sal_Int16 eRel, bool bPos )
    1347             :     : SfxPoolItem( RES_HORI_ORIENT ),
    1348             :     nXPos( nX ),
    1349             :     eOrient( eHori ),
    1350             :     eRelation( eRel ),
    1351       30466 :     bPosToggle( bPos )
    1352       30466 : {}
    1353             : 
    1354      117286 : bool SwFmtHoriOrient::operator==( const SfxPoolItem& rAttr ) const
    1355             : {
    1356             :     assert(SfxPoolItem::operator==(rAttr));
    1357      141304 :     return ( nXPos == ((SwFmtHoriOrient&)rAttr).nXPos &&
    1358       41746 :              eOrient == ((SwFmtHoriOrient&)rAttr).eOrient &&
    1359      147978 :              eRelation == ((SwFmtHoriOrient&)rAttr).eRelation &&
    1360      130250 :              bPosToggle == ((SwFmtHoriOrient&)rAttr).bPosToggle );
    1361             : }
    1362             : 
    1363       23460 : SfxPoolItem*  SwFmtHoriOrient::Clone( SfxItemPool* ) const
    1364             : {
    1365       23460 :     return new SwFmtHoriOrient( nXPos, eOrient, eRelation, bPosToggle );
    1366             : }
    1367             : 
    1368       18834 : bool SwFmtHoriOrient::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1369             : {
    1370             :     // here we convert always!
    1371       18834 :     nMemberId &= ~CONVERT_TWIPS;
    1372       18834 :     bool bRet = true;
    1373       18834 :     switch ( nMemberId )
    1374             :     {
    1375             :         case MID_HORIORIENT_ORIENT:
    1376             :         {
    1377        1456 :             rVal <<= (sal_Int16)eOrient;
    1378             :         }
    1379        1456 :         break;
    1380             :         case MID_HORIORIENT_RELATION:
    1381         992 :             rVal <<= (sal_Int16)eRelation;
    1382         992 :         break;
    1383             :         case MID_HORIORIENT_POSITION:
    1384       16238 :                 rVal <<= (sal_Int32)convertTwipToMm100(GetPos());
    1385       16238 :                 break;
    1386             :         case MID_HORIORIENT_PAGETOGGLE:
    1387             :         {
    1388         148 :             bool bTmp = IsPosToggle();
    1389         148 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
    1390             :         }
    1391         148 :                 break;
    1392             :         default:
    1393             :             OSL_ENSURE( false, "unknown MemberId" );
    1394           0 :             bRet = false;
    1395             :     }
    1396       18834 :     return bRet;
    1397             : }
    1398             : 
    1399       15784 : bool SwFmtHoriOrient::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1400             : {
    1401       15784 :     bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
    1402       15784 :     nMemberId &= ~CONVERT_TWIPS;
    1403       15784 :     bool bRet = true;
    1404       15784 :     switch ( nMemberId )
    1405             :     {
    1406             :         case MID_HORIORIENT_ORIENT:
    1407             :         {
    1408        5590 :             sal_Int16 nVal = text::HoriOrientation::NONE;
    1409        5590 :             rVal >>= nVal;
    1410        5590 :             eOrient = nVal;
    1411             :         }
    1412        5590 :         break;
    1413             :         case MID_HORIORIENT_RELATION:
    1414             :         {
    1415        4424 :             eRelation = lcl_IntToRelation(rVal);
    1416             :         }
    1417        4424 :         break;
    1418             :         case MID_HORIORIENT_POSITION:
    1419             :         {
    1420        3502 :             sal_Int32 nVal = 0;
    1421        3502 :             if(!(rVal >>= nVal))
    1422           0 :                 bRet = false;
    1423        3502 :             if(bConvert)
    1424        3502 :                 nVal = convertMm100ToTwip(nVal);
    1425        3502 :             SetPos( nVal );
    1426             :         }
    1427        3502 :         break;
    1428             :         case MID_HORIORIENT_PAGETOGGLE:
    1429        2268 :                 SetPosToggle( *(sal_Bool*)rVal.getValue());
    1430        2268 :             break;
    1431             :         default:
    1432             :             OSL_ENSURE( false, "unknown MemberId" );
    1433           0 :             bRet = false;
    1434             :     }
    1435       15784 :     return bRet;
    1436             : }
    1437             : 
    1438             : // Partially implemented inline in hxx
    1439        7492 : SwFmtAnchor::SwFmtAnchor( RndStdIds nRnd, sal_uInt16 nPage )
    1440             :     : SfxPoolItem( RES_ANCHOR ),
    1441             :     nAnchorId( nRnd ),
    1442             :     nPageNum( nPage ),
    1443             :     // OD 2004-05-05 #i28701# - get always new increased order number
    1444        7492 :     mnOrder( ++mnOrderCounter )
    1445        7492 : {}
    1446             : 
    1447      183410 : SwFmtAnchor::SwFmtAnchor( const SwFmtAnchor &rCpy )
    1448             :     : SfxPoolItem( RES_ANCHOR )
    1449      183410 :     , m_pCntntAnchor( (rCpy.GetCntntAnchor())
    1450      121790 :             ?  new SwPosition( *rCpy.GetCntntAnchor() ) : 0 )
    1451      183410 :     , nAnchorId( rCpy.GetAnchorId() )
    1452      183410 :     , nPageNum( rCpy.GetPageNum() )
    1453             :     // OD 2004-05-05 #i28701# - get always new increased order number
    1454      855430 :     , mnOrder( ++mnOrderCounter )
    1455             : {
    1456      183410 : }
    1457             : 
    1458      344714 : SwFmtAnchor::~SwFmtAnchor()
    1459             : {
    1460      344714 : }
    1461             : 
    1462       25988 : void SwFmtAnchor::SetAnchor( const SwPosition *pPos )
    1463             : {
    1464             :     // anchor only to paragraphs, or start nodes in case of FLY_AT_FLY
    1465             :     // also allow table node, this is used when a table is selected and is converted to a frame by the UI
    1466             :     assert(!pPos
    1467             :             || ((FLY_AT_FLY == nAnchorId) &&
    1468             :                     dynamic_cast<SwStartNode*>(&pPos->nNode.GetNode()))
    1469             :             || (FLY_AT_PARA == nAnchorId && dynamic_cast<SwTableNode*>(&pPos->nNode.GetNode()))
    1470             :             || dynamic_cast<SwTxtNode*>(&pPos->nNode.GetNode()));
    1471       25988 :     m_pCntntAnchor .reset( (pPos) ? new SwPosition( *pPos ) : 0 );
    1472             :     // Flys anchored AT paragraph should not point into the paragraph content
    1473       50600 :     if (m_pCntntAnchor &&
    1474       60830 :         ((FLY_AT_PARA == nAnchorId) || (FLY_AT_FLY == nAnchorId)))
    1475             :     {
    1476        4800 :         m_pCntntAnchor->nContent.Assign( 0, 0 );
    1477             :     }
    1478       25988 : }
    1479             : 
    1480         150 : SwFmtAnchor& SwFmtAnchor::operator=(const SwFmtAnchor& rAnchor)
    1481             : {
    1482         150 :     nAnchorId  = rAnchor.GetAnchorId();
    1483         150 :     nPageNum   = rAnchor.GetPageNum();
    1484             :     // OD 2004-05-05 #i28701# - get always new increased order number
    1485         150 :     mnOrder = ++mnOrderCounter;
    1486             : 
    1487         150 :     m_pCntntAnchor.reset( (rAnchor.GetCntntAnchor())
    1488           0 :         ? new SwPosition(*(rAnchor.GetCntntAnchor()))
    1489         150 :         : 0 );
    1490         150 :     return *this;
    1491             : }
    1492             : 
    1493       63788 : bool SwFmtAnchor::operator==( const SfxPoolItem& rAttr ) const
    1494             : {
    1495             :     assert(SfxPoolItem::operator==(rAttr));
    1496       63788 :     SwFmtAnchor const& rFmtAnchor(static_cast<SwFmtAnchor const&>(rAttr));
    1497             :     // OD 2004-05-05 #i28701# - Note: <mnOrder> hasn't to be considered.
    1498      118560 :     return ( nAnchorId == rFmtAnchor.GetAnchorId() &&
    1499      158312 :              nPageNum == rFmtAnchor.GetPageNum()   &&
    1500             :                 // compare anchor: either both do not point into a textnode or
    1501             :                 // both do (valid m_pCntntAnchor) and the positions are equal
    1502      105874 :              ((m_pCntntAnchor.get() == rFmtAnchor.m_pCntntAnchor.get()) ||
    1503      148150 :               (m_pCntntAnchor && rFmtAnchor.GetCntntAnchor() &&
    1504      109502 :                (*m_pCntntAnchor == *rFmtAnchor.GetCntntAnchor()))));
    1505             : }
    1506             : 
    1507      153410 : SfxPoolItem*  SwFmtAnchor::Clone( SfxItemPool* ) const
    1508             : {
    1509      153410 :     return new SwFmtAnchor( *this );
    1510             : }
    1511             : 
    1512             : // OD 2004-05-05 #i28701#
    1513             : sal_uInt32 SwFmtAnchor::mnOrderCounter = 0;
    1514             : 
    1515             : // OD 2004-05-05 #i28701#
    1516             : 
    1517       18260 : bool SwFmtAnchor::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1518             : {
    1519             :     // here we convert always!
    1520       18260 :     nMemberId &= ~CONVERT_TWIPS;
    1521       18260 :     bool bRet = true;
    1522       18260 :     switch ( nMemberId )
    1523             :     {
    1524             :         case MID_ANCHOR_ANCHORTYPE:
    1525             : 
    1526             :             text::TextContentAnchorType eRet;
    1527       18238 :             switch (GetAnchorId())
    1528             :             {
    1529             :                 case  FLY_AT_CHAR:
    1530        3430 :                     eRet = text::TextContentAnchorType_AT_CHARACTER;
    1531        3430 :                     break;
    1532             :                 case  FLY_AT_PAGE:
    1533        1946 :                     eRet = text::TextContentAnchorType_AT_PAGE;
    1534        1946 :                     break;
    1535             :                 case  FLY_AT_FLY:
    1536          18 :                     eRet = text::TextContentAnchorType_AT_FRAME;
    1537          18 :                     break;
    1538             :                 case  FLY_AS_CHAR:
    1539        8734 :                     eRet = text::TextContentAnchorType_AS_CHARACTER;
    1540        8734 :                     break;
    1541             :                 //case  FLY_AT_PARA:
    1542             :                 default:
    1543        4110 :                     eRet = text::TextContentAnchorType_AT_PARAGRAPH;
    1544             :             }
    1545       18238 :             rVal <<= eRet;
    1546       36498 :         break;
    1547             :         case MID_ANCHOR_PAGENUM:
    1548          22 :             rVal <<= (sal_Int16)GetPageNum();
    1549          22 :         break;
    1550             :         case MID_ANCHOR_ANCHORFRAME:
    1551             :         {
    1552           0 :             if (m_pCntntAnchor && FLY_AT_FLY == nAnchorId)
    1553             :             {
    1554           0 :                 SwFrmFmt* pFmt = m_pCntntAnchor->nNode.GetNode().GetFlyFmt();
    1555           0 :                 if(pFmt)
    1556             :                 {
    1557             :                     uno::Reference<text::XTextFrame> const xRet(
    1558           0 :                         SwXTextFrame::CreateXTextFrame(*pFmt->GetDoc(), pFmt));
    1559           0 :                     rVal <<= xRet;
    1560             :                 }
    1561             :             }
    1562             :         }
    1563           0 :         break;
    1564             :         default:
    1565             :             OSL_ENSURE( false, "unknown MemberId" );
    1566           0 :             bRet = false;
    1567             :     }
    1568       18260 :     return bRet;
    1569             : }
    1570             : 
    1571        8260 : bool SwFmtAnchor::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1572             : {
    1573             :     // here we convert always!
    1574        8260 :     nMemberId &= ~CONVERT_TWIPS;
    1575        8260 :     bool bRet = true;
    1576        8260 :     switch ( nMemberId )
    1577             :     {
    1578             :         case MID_ANCHOR_ANCHORTYPE:
    1579             :         {
    1580             :             RndStdIds   eAnchor;
    1581        8030 :             switch( SWUnoHelper::GetEnumAsInt32( rVal ) )
    1582             :             {
    1583             :                 case  text::TextContentAnchorType_AS_CHARACTER:
    1584        3782 :                     eAnchor = FLY_AS_CHAR;
    1585        3782 :                     break;
    1586             :                 case  text::TextContentAnchorType_AT_PAGE:
    1587         246 :                     eAnchor = FLY_AT_PAGE;
    1588         246 :                     if( GetPageNum() > 0 )
    1589             :                     {
    1590             :                         // If the anchor type is page and a valid page number
    1591             :                         // has been set, the content position isn't required
    1592             :                         // any longer.
    1593         182 :                         m_pCntntAnchor.reset();
    1594             :                     }
    1595         246 :                     break;
    1596             :                 case  text::TextContentAnchorType_AT_FRAME:
    1597          18 :                     eAnchor = FLY_AT_FLY;
    1598          18 :                     break;
    1599             :                 case  text::TextContentAnchorType_AT_CHARACTER:
    1600        1942 :                     eAnchor = FLY_AT_CHAR;
    1601        1942 :                     break;
    1602             :                 //case  text::TextContentAnchorType_AT_PARAGRAPH:
    1603             :                 default:
    1604        2042 :                     eAnchor = FLY_AT_PARA;
    1605        2042 :                     break;
    1606             :             }
    1607        8030 :             SetType( eAnchor );
    1608             :         }
    1609        8030 :         break;
    1610             :         case MID_ANCHOR_PAGENUM:
    1611             :         {
    1612         230 :             sal_Int16 nVal = 0;
    1613         230 :             if((rVal >>= nVal) && nVal > 0)
    1614             :             {
    1615         230 :                 SetPageNum( nVal );
    1616         230 :                 if (FLY_AT_PAGE == GetAnchorId())
    1617             :                 {
    1618             :                     // If the anchor type is page and a valid page number
    1619             :                     // is set, the content paoition has to be deleted to not
    1620             :                     // confuse the layout (frmtool.cxx). However, if the
    1621             :                     // anchor type is not page, any content position will
    1622             :                     // be kept.
    1623         220 :                     m_pCntntAnchor.reset();
    1624             :                 }
    1625             :             }
    1626             :             else
    1627           0 :                 bRet = false;
    1628             :         }
    1629         230 :         break;
    1630             :         case MID_ANCHOR_ANCHORFRAME:
    1631             :         //no break here!;
    1632             :         default:
    1633             :             OSL_ENSURE( false, "unknown MemberId" );
    1634           0 :             bRet = false;
    1635             :     }
    1636        8260 :     return bRet;
    1637             : }
    1638             : 
    1639             : // Partially implemented inline in hxx
    1640          90 : SwFmtURL::SwFmtURL() :
    1641             :     SfxPoolItem( RES_URL ),
    1642             :     pMap( 0 ),
    1643          90 :     bIsServerMap( false )
    1644             : {
    1645          90 : }
    1646             : 
    1647         132 : SwFmtURL::SwFmtURL( const SwFmtURL &rURL) :
    1648             :     SfxPoolItem( RES_URL ),
    1649             :     sTargetFrameName( rURL.GetTargetFrameName() ),
    1650             :     sURL( rURL.GetURL() ),
    1651             :     sName( rURL.GetName() ),
    1652         132 :     bIsServerMap( rURL.IsServerMap() )
    1653             : {
    1654         132 :     pMap = rURL.GetMap() ? new ImageMap( *rURL.GetMap() ) : 0;
    1655         132 : }
    1656             : 
    1657         574 : SwFmtURL::~SwFmtURL()
    1658             : {
    1659         222 :     delete pMap;
    1660         352 : }
    1661             : 
    1662          42 : bool SwFmtURL::operator==( const SfxPoolItem &rAttr ) const
    1663             : {
    1664             :     assert(SfxPoolItem::operator==(rAttr));
    1665          42 :     const SwFmtURL &rCmp = (SwFmtURL&)rAttr;
    1666         126 :     bool bRet = bIsServerMap     == rCmp.IsServerMap() &&
    1667         244 :                 sURL             == rCmp.GetURL() &&
    1668         270 :                 sTargetFrameName == rCmp.GetTargetFrameName() &&
    1669         110 :                 sName            == rCmp.GetName();
    1670          42 :     if ( bRet )
    1671             :     {
    1672          26 :         if ( pMap && rCmp.GetMap() )
    1673           4 :             bRet = *pMap == *rCmp.GetMap();
    1674             :         else
    1675          22 :             bRet = pMap == rCmp.GetMap();
    1676             :     }
    1677          42 :     return bRet;
    1678             : }
    1679             : 
    1680          40 : SfxPoolItem* SwFmtURL::Clone( SfxItemPool* ) const
    1681             : {
    1682          40 :     return new SwFmtURL( *this );
    1683             : }
    1684             : 
    1685          10 : void SwFmtURL::SetURL(const OUString &rURL, bool bServerMap)
    1686             : {
    1687          10 :     sURL = rURL;
    1688          10 :     bIsServerMap = bServerMap;
    1689          10 : }
    1690             : 
    1691           0 : void SwFmtURL::SetMap( const ImageMap *pM )
    1692             : {
    1693           0 :     delete pMap;
    1694           0 :     pMap = pM ? new ImageMap( *pM ) : 0;
    1695           0 : }
    1696             : 
    1697          64 : bool SwFmtURL::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1698             : {
    1699             :     // here we convert always!
    1700          64 :     nMemberId &= ~CONVERT_TWIPS;
    1701          64 :     bool bRet = true;
    1702          64 :     switch ( nMemberId )
    1703             :     {
    1704             :         case MID_URL_URL:
    1705           0 :             rVal <<= GetURL();
    1706           0 :         break;
    1707             :         case MID_URL_TARGET:
    1708           0 :             rVal <<= GetTargetFrameName();
    1709           0 :         break;
    1710             :         case MID_URL_HYPERLINKNAME:
    1711           0 :             rVal <<= GetName();
    1712           0 :             break;
    1713             :         case MID_URL_CLIENTMAP:
    1714             :         {
    1715          64 :             uno::Reference< uno::XInterface > xInt;
    1716          64 :             if(pMap)
    1717             :             {
    1718           2 :                 xInt = SvUnoImageMap_createInstance( *pMap, sw_GetSupportedMacroItems() );
    1719             :             }
    1720             :             else
    1721             :             {
    1722          62 :                 ImageMap aEmptyMap;
    1723          62 :                 xInt = SvUnoImageMap_createInstance( aEmptyMap, sw_GetSupportedMacroItems() );
    1724             :             }
    1725         128 :             uno::Reference< container::XIndexContainer > xCont(xInt, uno::UNO_QUERY);
    1726         128 :             rVal <<= xCont;
    1727             :         }
    1728          64 :         break;
    1729             :         case MID_URL_SERVERMAP:
    1730             :         {
    1731           0 :             bool bTmp = IsServerMap();
    1732           0 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
    1733             :         }
    1734           0 :             break;
    1735             :         default:
    1736             :             OSL_ENSURE( false, "unknown MemberId" );
    1737           0 :             bRet = false;
    1738             :     }
    1739          64 :     return bRet;
    1740             : }
    1741             : 
    1742          20 : bool SwFmtURL::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1743             : {
    1744             :     // here we convert always!
    1745          20 :     nMemberId &= ~CONVERT_TWIPS;
    1746          20 :     bool bRet = true;
    1747          20 :     switch ( nMemberId )
    1748             :     {
    1749             :         case MID_URL_URL:
    1750             :         {
    1751           4 :             OUString sTmp;
    1752           4 :             rVal >>= sTmp;
    1753           4 :             SetURL( sTmp, bIsServerMap );
    1754             :         }
    1755           4 :         break;
    1756             :         case MID_URL_TARGET:
    1757             :         {
    1758           4 :             OUString sTmp;
    1759           4 :             rVal >>= sTmp;
    1760           4 :             SetTargetFrameName( sTmp );
    1761             :         }
    1762           4 :         break;
    1763             :         case MID_URL_HYPERLINKNAME:
    1764             :         {
    1765           4 :             OUString sTmp;
    1766           4 :             rVal >>= sTmp;
    1767           4 :             SetName( sTmp );
    1768             :         }
    1769           4 :         break;
    1770             :         case MID_URL_CLIENTMAP:
    1771             :         {
    1772           4 :             uno::Reference<container::XIndexContainer> xCont;
    1773           4 :             if(!rVal.hasValue())
    1774           0 :                 DELETEZ(pMap);
    1775           4 :             else if(rVal >>= xCont)
    1776             :             {
    1777           4 :                 if(!pMap)
    1778           4 :                     pMap = new ImageMap;
    1779           4 :                 bRet = SvUnoImageMap_fillImageMap( xCont, *pMap );
    1780             :             }
    1781             :             else
    1782           0 :                 bRet = false;
    1783             :         }
    1784           4 :         break;
    1785             :         case MID_URL_SERVERMAP:
    1786           4 :             bIsServerMap = *(sal_Bool*)rVal.getValue();
    1787           4 :             break;
    1788             :         default:
    1789             :             OSL_ENSURE( false, "unknown MemberId" );
    1790           0 :             bRet = false;
    1791             :     }
    1792          20 :     return bRet;
    1793             : }
    1794             : 
    1795         336 : SfxPoolItem* SwFmtEditInReadonly::Clone( SfxItemPool* ) const
    1796             : {
    1797         336 :     return new SwFmtEditInReadonly( Which(), GetValue() );
    1798             : }
    1799             : 
    1800           6 : SfxPoolItem* SwFmtLayoutSplit::Clone( SfxItemPool* ) const
    1801             : {
    1802           6 :     return new SwFmtLayoutSplit( GetValue() );
    1803             : }
    1804             : 
    1805        7396 : SfxPoolItem* SwFmtRowSplit::Clone( SfxItemPool* ) const
    1806             : {
    1807        7396 :     return new SwFmtRowSplit( GetValue() );
    1808             : }
    1809             : 
    1810         120 : SfxPoolItem* SwFmtNoBalancedColumns::Clone( SfxItemPool* ) const
    1811             : {
    1812         120 :     return new SwFmtNoBalancedColumns( GetValue() );
    1813             : }
    1814             : 
    1815             : // class SwFmtFtnEndAtTxtEnd
    1816             : 
    1817           0 : sal_uInt16 SwFmtFtnEndAtTxtEnd::GetValueCount() const
    1818             : {
    1819           0 :     return sal_uInt16( FTNEND_ATTXTEND_END );
    1820             : }
    1821             : 
    1822         108 : SwFmtFtnEndAtTxtEnd& SwFmtFtnEndAtTxtEnd::operator=(
    1823             :                         const SwFmtFtnEndAtTxtEnd& rAttr )
    1824             : {
    1825         108 :     SfxEnumItem::SetValue( rAttr.GetValue() );
    1826         108 :     aFmt = rAttr.aFmt;
    1827         108 :     nOffset = rAttr.nOffset;
    1828         108 :     sPrefix = rAttr.sPrefix;
    1829         108 :     sSuffix = rAttr.sSuffix;
    1830         108 :     return *this;
    1831             : }
    1832             : 
    1833         292 : bool SwFmtFtnEndAtTxtEnd::operator==( const SfxPoolItem& rItem ) const
    1834             : {
    1835         292 :     const SwFmtFtnEndAtTxtEnd& rAttr = (SwFmtFtnEndAtTxtEnd&)rItem;
    1836         430 :     return SfxEnumItem::operator==( rAttr ) &&
    1837         264 :             aFmt.GetNumberingType() == rAttr.aFmt.GetNumberingType() &&
    1838         214 :             nOffset == rAttr.nOffset &&
    1839         432 :             sPrefix == rAttr.sPrefix &&
    1840         344 :             sSuffix == rAttr.sSuffix;
    1841             : }
    1842             : 
    1843         130 : bool SwFmtFtnEndAtTxtEnd::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    1844             : {
    1845         130 :     nMemberId &= ~CONVERT_TWIPS;
    1846         130 :     switch(nMemberId)
    1847             :     {
    1848             :         case MID_COLLECT     :
    1849             :         {
    1850          20 :             bool bVal = GetValue() >= FTNEND_ATTXTEND;
    1851          20 :             rVal.setValue(&bVal, ::getBooleanCppuType());
    1852             :         }
    1853          20 :         break;
    1854             :         case MID_RESTART_NUM :
    1855             :         {
    1856          20 :             bool bVal = GetValue() >= FTNEND_ATTXTEND_OWNNUMSEQ;
    1857          20 :             rVal.setValue(&bVal, ::getBooleanCppuType());
    1858             :         }
    1859          20 :         break;
    1860          20 :         case MID_NUM_START_AT: rVal <<= (sal_Int16) nOffset; break;
    1861             :         case MID_OWN_NUM     :
    1862             :         {
    1863          20 :             bool bVal = GetValue() >= FTNEND_ATTXTEND_OWNNUMANDFMT;
    1864          20 :             rVal.setValue(&bVal, ::getBooleanCppuType());
    1865             :         }
    1866          20 :         break;
    1867          10 :         case MID_NUM_TYPE    : rVal <<= aFmt.GetNumberingType(); break;
    1868          20 :         case MID_PREFIX      : rVal <<= OUString(sPrefix); break;
    1869          20 :         case MID_SUFFIX      : rVal <<= OUString(sSuffix); break;
    1870           0 :         default: return false;
    1871             :     }
    1872         130 :     return true;
    1873             : }
    1874             : 
    1875          54 : bool SwFmtFtnEndAtTxtEnd::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    1876             : {
    1877          54 :     bool bRet = true;
    1878          54 :     nMemberId &= ~CONVERT_TWIPS;
    1879          54 :     switch(nMemberId)
    1880             :     {
    1881             :         case MID_COLLECT     :
    1882             :         {
    1883           8 :             bool bVal = *(sal_Bool*)rVal.getValue();
    1884           8 :             if(!bVal && GetValue() >= FTNEND_ATTXTEND)
    1885           6 :                 SetValue(FTNEND_ATPGORDOCEND);
    1886           2 :             else if(bVal && GetValue() < FTNEND_ATTXTEND)
    1887           2 :                 SetValue(FTNEND_ATTXTEND);
    1888             :         }
    1889           8 :         break;
    1890             :         case MID_RESTART_NUM :
    1891             :         {
    1892           8 :             bool bVal = *(sal_Bool*)rVal.getValue();
    1893           8 :             if(!bVal && GetValue() >= FTNEND_ATTXTEND_OWNNUMSEQ)
    1894           8 :                 SetValue(FTNEND_ATTXTEND);
    1895           0 :             else if(bVal && GetValue() < FTNEND_ATTXTEND_OWNNUMSEQ)
    1896           0 :                 SetValue(FTNEND_ATTXTEND_OWNNUMSEQ);
    1897             :         }
    1898           8 :         break;
    1899             :         case MID_NUM_START_AT:
    1900             :         {
    1901           8 :             sal_Int16 nVal = 0;
    1902           8 :             rVal >>= nVal;
    1903           8 :             if(nVal >= 0)
    1904           8 :                 nOffset = nVal;
    1905             :             else
    1906           0 :                 bRet = false;
    1907             :         }
    1908           8 :         break;
    1909             :         case MID_OWN_NUM     :
    1910             :         {
    1911           8 :             bool bVal = *(sal_Bool*)rVal.getValue();
    1912           8 :             if(!bVal && GetValue() >= FTNEND_ATTXTEND_OWNNUMANDFMT)
    1913           0 :                 SetValue(FTNEND_ATTXTEND_OWNNUMSEQ);
    1914           8 :             else if(bVal && GetValue() < FTNEND_ATTXTEND_OWNNUMANDFMT)
    1915           8 :                 SetValue(FTNEND_ATTXTEND_OWNNUMANDFMT);
    1916             :         }
    1917           8 :         break;
    1918             :         case MID_NUM_TYPE    :
    1919             :         {
    1920           6 :             sal_Int16 nVal = 0;
    1921           6 :             rVal >>= nVal;
    1922          12 :             if(nVal >= 0 &&
    1923          10 :                 (nVal <= SVX_NUM_ARABIC ||
    1924           8 :                     SVX_NUM_CHARS_UPPER_LETTER_N == nVal ||
    1925           4 :                         SVX_NUM_CHARS_LOWER_LETTER_N == nVal ))
    1926           2 :                 aFmt.SetNumberingType(nVal);
    1927             :             else
    1928           4 :                 bRet = false;
    1929             :         }
    1930           6 :         break;
    1931             :         case MID_PREFIX      :
    1932             :         {
    1933           8 :             OUString sVal; rVal >>= sVal;
    1934           8 :             sPrefix = sVal;
    1935             :         }
    1936           8 :         break;
    1937             :         case MID_SUFFIX      :
    1938             :         {
    1939           8 :             OUString sVal; rVal >>= sVal;
    1940           8 :             sSuffix = sVal;
    1941             :         }
    1942           8 :         break;
    1943           0 :         default: bRet = false;
    1944             :     }
    1945          54 :     return bRet;
    1946             : }
    1947             : 
    1948             : // class SwFmtFtnAtTxtEnd
    1949             : 
    1950          52 : SfxPoolItem* SwFmtFtnAtTxtEnd::Clone( SfxItemPool* ) const
    1951             : {
    1952          52 :     SwFmtFtnAtTxtEnd* pNew = new SwFmtFtnAtTxtEnd;
    1953          52 :     *pNew = *this;
    1954          52 :     return pNew;
    1955             : }
    1956             : 
    1957             : // class SwFmtEndAtTxtEnd
    1958             : 
    1959          56 : SfxPoolItem* SwFmtEndAtTxtEnd::Clone( SfxItemPool* ) const
    1960             : {
    1961          56 :     SwFmtEndAtTxtEnd* pNew = new SwFmtEndAtTxtEnd;
    1962          56 :     *pNew = *this;
    1963          56 :     return pNew;
    1964             : }
    1965             : 
    1966             : //class SwFmtChain
    1967             : 
    1968          24 : bool SwFmtChain::operator==( const SfxPoolItem &rAttr ) const
    1969             : {
    1970             :     assert(SfxPoolItem::operator==(rAttr));
    1971             : 
    1972          48 :     return GetPrev() == ((SwFmtChain&)rAttr).GetPrev() &&
    1973          48 :            GetNext() == ((SwFmtChain&)rAttr).GetNext();
    1974             : }
    1975             : 
    1976           8 : SwFmtChain::SwFmtChain( const SwFmtChain &rCpy ) :
    1977           8 :     SfxPoolItem( RES_CHAIN )
    1978             : {
    1979           8 :     SetPrev( rCpy.GetPrev() );
    1980           8 :     SetNext( rCpy.GetNext() );
    1981           8 : }
    1982             : 
    1983          70 : SfxPoolItem* SwFmtChain::Clone( SfxItemPool* ) const
    1984             : {
    1985          70 :     SwFmtChain *pRet = new SwFmtChain;
    1986          70 :     pRet->SetPrev( GetPrev() );
    1987          70 :     pRet->SetNext( GetNext() );
    1988          70 :     return pRet;
    1989             : }
    1990             : 
    1991         102 : void SwFmtChain::SetPrev( SwFlyFrmFmt *pFmt )
    1992             : {
    1993         102 :     if ( pFmt )
    1994          58 :         pFmt->Add( &aPrev );
    1995          44 :     else if ( aPrev.GetRegisteredIn() )
    1996           8 :         ((SwModify*)aPrev.GetRegisteredIn())->Remove( &aPrev );
    1997         102 : }
    1998             : 
    1999          94 : void SwFmtChain::SetNext( SwFlyFrmFmt *pFmt )
    2000             : {
    2001          94 :     if ( pFmt )
    2002          34 :         pFmt->Add( &aNext );
    2003          60 :     else if ( aNext.GetRegisteredIn() )
    2004           0 :         ((SwModify*)aNext.GetRegisteredIn())->Remove( &aNext );
    2005          94 : }
    2006             : 
    2007         682 : bool SwFmtChain::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2008             : {
    2009             :     // here we convert always!
    2010         682 :     nMemberId &= ~CONVERT_TWIPS;
    2011         682 :     bool   bRet = true;
    2012         682 :     OUString aRet;
    2013         682 :     switch ( nMemberId )
    2014             :     {
    2015             :         case MID_CHAIN_PREVNAME:
    2016         322 :             if ( GetPrev() )
    2017           4 :                 aRet = GetPrev()->GetName();
    2018         322 :             break;
    2019             :         case MID_CHAIN_NEXTNAME:
    2020         360 :             if ( GetNext() )
    2021           4 :                 aRet = GetNext()->GetName();
    2022         360 :             break;
    2023             :         default:
    2024             :             OSL_ENSURE( false, "unknown MemberId" );
    2025           0 :             bRet = false;
    2026             :     }
    2027         682 :     rVal <<= aRet;
    2028         682 :     return bRet;
    2029             : }
    2030             : 
    2031       11596 : SwFmtLineNumber::SwFmtLineNumber() :
    2032       11596 :     SfxPoolItem( RES_LINENUMBER )
    2033             : {
    2034       11596 :     nStartValue = 0;
    2035       11596 :     bCountLines = true;
    2036       11596 : }
    2037             : 
    2038       30180 : SwFmtLineNumber::~SwFmtLineNumber()
    2039             : {
    2040       30180 : }
    2041             : 
    2042       16028 : bool SwFmtLineNumber::operator==( const SfxPoolItem &rAttr ) const
    2043             : {
    2044             :     assert(SfxPoolItem::operator==(rAttr));
    2045             : 
    2046       32032 :     return nStartValue  == ((SwFmtLineNumber&)rAttr).GetStartValue() &&
    2047       32032 :            bCountLines  == ((SwFmtLineNumber&)rAttr).IsCount();
    2048             : }
    2049             : 
    2050        9252 : SfxPoolItem* SwFmtLineNumber::Clone( SfxItemPool* ) const
    2051             : {
    2052        9252 :     return new SwFmtLineNumber( *this );
    2053             : }
    2054             : 
    2055         340 : bool SwFmtLineNumber::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2056             : {
    2057             :     // here we convert always!
    2058         340 :     nMemberId &= ~CONVERT_TWIPS;
    2059         340 :     bool bRet = true;
    2060         340 :     switch ( nMemberId )
    2061             :     {
    2062             :         case MID_LINENUMBER_COUNT:
    2063             :         {
    2064         168 :             bool bTmp = IsCount();
    2065         168 :             rVal.setValue(&bTmp, ::getBooleanCppuType());
    2066             :         }
    2067         168 :         break;
    2068             :         case MID_LINENUMBER_STARTVALUE:
    2069         172 :             rVal <<= (sal_Int32)GetStartValue();
    2070         172 :             break;
    2071             :         default:
    2072             :             OSL_ENSURE( false, "unknown MemberId" );
    2073           0 :             bRet = false;
    2074             :     }
    2075         340 :     return bRet;
    2076             : }
    2077             : 
    2078        3920 : bool SwFmtLineNumber::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    2079             : {
    2080             :     // here we convert always!
    2081        3920 :     nMemberId &= ~CONVERT_TWIPS;
    2082        3920 :     bool bRet = true;
    2083        3920 :     switch ( nMemberId )
    2084             :     {
    2085             :         case MID_LINENUMBER_COUNT:
    2086        3072 :             SetCountLines( *(sal_Bool*)rVal.getValue() );
    2087        3072 :             break;
    2088             :         case MID_LINENUMBER_STARTVALUE:
    2089             :         {
    2090         848 :             sal_Int32 nVal = 0;
    2091         848 :             if(rVal >>= nVal)
    2092         848 :                 SetStartValue( nVal );
    2093             :             else
    2094           0 :                 bRet = false;
    2095             :         }
    2096         848 :         break;
    2097             :         default:
    2098             :             OSL_ENSURE( false, "unknown MemberId" );
    2099           0 :             bRet = false;
    2100             :     }
    2101        3920 :     return bRet;
    2102             : }
    2103             : 
    2104         308 : SwTextGridItem::SwTextGridItem()
    2105             :     : SfxPoolItem( RES_TEXTGRID ), m_aColor( COL_LIGHTGRAY ), m_nLines( 20 )
    2106             :     , m_nBaseHeight( 400 ), m_nRubyHeight( 200 ), m_eGridType( GRID_NONE )
    2107             :     , m_bRubyTextBelow( false ), m_bPrintGrid( true ), m_bDisplayGrid( true )
    2108         308 :     , m_nBaseWidth(400), m_bSnapToChars( true ), m_bSquaredMode(true)
    2109             : {
    2110         308 : }
    2111             : 
    2112      155978 : SwTextGridItem::~SwTextGridItem()
    2113             : {
    2114      155978 : }
    2115             : 
    2116      132248 : bool SwTextGridItem::operator==( const SfxPoolItem& rAttr ) const
    2117             : {
    2118             :     assert(SfxPoolItem::operator==(rAttr));
    2119      132248 :     SwTextGridItem const& rOther(static_cast<SwTextGridItem const&>(rAttr));
    2120      132248 :     return m_eGridType == rOther.GetGridType()
    2121      132066 :         && m_nLines == rOther.GetLines()
    2122       71066 :         && m_nBaseHeight == rOther.GetBaseHeight()
    2123       59656 :         && m_nRubyHeight == rOther.GetRubyHeight()
    2124       53630 :         && m_bRubyTextBelow == rOther.GetRubyTextBelow()
    2125       53630 :         && m_bDisplayGrid == rOther.GetDisplayGrid()
    2126       45046 :         && m_bPrintGrid == rOther.GetPrintGrid()
    2127       36264 :         && m_aColor == rOther.GetColor()
    2128       36264 :         && m_nBaseWidth == rOther.GetBaseWidth()
    2129       36108 :         && m_bSnapToChars == rOther.GetSnapToChars()
    2130      168356 :         && m_bSquaredMode == rOther.GetSquaredMode();
    2131             : }
    2132             : 
    2133       73994 : SfxPoolItem* SwTextGridItem::Clone( SfxItemPool* ) const
    2134             : {
    2135       73994 :     return new SwTextGridItem( *this );
    2136             : }
    2137             : 
    2138           0 : SwTextGridItem& SwTextGridItem::operator=( const SwTextGridItem& rCpy )
    2139             : {
    2140           0 :     m_aColor = rCpy.GetColor();
    2141           0 :     m_nLines = rCpy.GetLines();
    2142           0 :     m_nBaseHeight = rCpy.GetBaseHeight();
    2143           0 :     m_nRubyHeight = rCpy.GetRubyHeight();
    2144           0 :     m_eGridType = rCpy.GetGridType();
    2145           0 :     m_bRubyTextBelow = rCpy.GetRubyTextBelow();
    2146           0 :     m_bPrintGrid = rCpy.GetPrintGrid();
    2147           0 :     m_bDisplayGrid = rCpy.GetDisplayGrid();
    2148           0 :     m_nBaseWidth = rCpy.GetBaseWidth();
    2149           0 :     m_bSnapToChars = rCpy.GetSnapToChars();
    2150           0 :     m_bSquaredMode = rCpy.GetSquaredMode();
    2151             : 
    2152           0 :     return *this;
    2153             : }
    2154             : 
    2155         500 : bool SwTextGridItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
    2156             : {
    2157         500 :     bool bRet = true;
    2158             : 
    2159         500 :     switch( nMemberId & ~CONVERT_TWIPS )
    2160             :     {
    2161             :         case MID_GRID_COLOR:
    2162          40 :             rVal <<= GetColor().GetColor();
    2163          40 :             break;
    2164             :         case MID_GRID_LINES:
    2165          40 :             rVal <<= GetLines();
    2166          40 :             break;
    2167             :         case MID_GRID_RUBY_BELOW:
    2168          40 :             rVal.setValue( &m_bRubyTextBelow, ::getBooleanCppuType() );
    2169          40 :             break;
    2170             :         case MID_GRID_PRINT:
    2171          40 :             rVal.setValue( &m_bPrintGrid, ::getBooleanCppuType() );
    2172          40 :             break;
    2173             :         case MID_GRID_DISPLAY:
    2174          40 :             rVal.setValue( &m_bDisplayGrid, ::getBooleanCppuType() );
    2175          40 :             break;
    2176             :         case MID_GRID_BASEHEIGHT:
    2177             :             OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0,
    2178             :                         "This value needs TWIPS-MM100 conversion" );
    2179          40 :             rVal <<= (sal_Int32) convertTwipToMm100(m_nBaseHeight);
    2180          40 :             break;
    2181             :         case MID_GRID_BASEWIDTH:
    2182             :             OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0,
    2183             :                         "This value needs TWIPS-MM100 conversion" );
    2184          40 :             rVal <<= (sal_Int32) convertTwipToMm100(m_nBaseWidth);
    2185          40 :             break;
    2186             :         case MID_GRID_RUBYHEIGHT:
    2187             :             OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0,
    2188             :                         "This value needs TWIPS-MM100 conversion" );
    2189          40 :             rVal <<= (sal_Int32)convertTwipToMm100(m_nRubyHeight);
    2190          40 :             break;
    2191             :         case MID_GRID_TYPE:
    2192          40 :             switch( GetGridType() )
    2193             :             {
    2194             :                 case GRID_NONE:
    2195          40 :                     rVal <<= text::TextGridMode::NONE;
    2196          40 :                     break;
    2197             :                 case GRID_LINES_ONLY:
    2198           0 :                     rVal <<= text::TextGridMode::LINES;
    2199           0 :                     break;
    2200             :                 case GRID_LINES_CHARS:
    2201           0 :                     rVal <<= text::TextGridMode::LINES_AND_CHARS;
    2202           0 :                     break;
    2203             :                 default:
    2204             :                     OSL_FAIL("unknown SwTextGrid value");
    2205           0 :                     bRet = false;
    2206           0 :                     break;
    2207             :             }
    2208          40 :             break;
    2209             :         case MID_GRID_SNAPTOCHARS:
    2210          40 :             rVal.setValue( &m_bSnapToChars, ::getBooleanCppuType() );
    2211          40 :             break;
    2212             :         case MID_GRID_STANDARD_MODE:
    2213             :             {
    2214         100 :                 bool bStandardMode = !m_bSquaredMode;
    2215         100 :                 rVal.setValue( &bStandardMode, ::getBooleanCppuType() );
    2216             :             }
    2217         100 :             break;
    2218             :         default:
    2219             :             OSL_FAIL("Unknown SwTextGridItem member");
    2220           0 :             bRet = false;
    2221           0 :             break;
    2222             :     }
    2223             : 
    2224         500 :     return bRet;
    2225             : }
    2226             : 
    2227       29902 : bool SwTextGridItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
    2228             : {
    2229       29902 :     bool bRet = true;
    2230       29902 :     switch( nMemberId & ~CONVERT_TWIPS )
    2231             :     {
    2232             :         case MID_GRID_COLOR:
    2233             :         {
    2234         126 :             sal_Int32 nTmp = 0;
    2235         126 :             bRet = (rVal >>= nTmp);
    2236         126 :             if( bRet )
    2237         126 :                 SetColor( Color(nTmp) );
    2238             :         }
    2239         126 :         break;
    2240             :         case MID_GRID_LINES:
    2241             :         {
    2242        4180 :             sal_Int16 nTmp = 0;
    2243        4180 :             bRet = (rVal >>= nTmp);
    2244        4180 :             if( bRet && (nTmp >= 0) )
    2245        4180 :                 SetLines( (sal_uInt16)nTmp );
    2246             :             else
    2247           0 :                 bRet = false;
    2248             :         }
    2249        4180 :         break;
    2250             :         case MID_GRID_RUBY_BELOW:
    2251         126 :             SetRubyTextBelow( *(sal_Bool*)rVal.getValue() );
    2252         126 :             break;
    2253             :         case MID_GRID_PRINT:
    2254        4270 :             SetPrintGrid( *(sal_Bool*)rVal.getValue() );
    2255        4270 :             break;
    2256             :         case MID_GRID_DISPLAY:
    2257        4270 :             SetDisplayGrid( *(sal_Bool*)rVal.getValue() );
    2258        4270 :             break;
    2259             :         case MID_GRID_BASEHEIGHT:
    2260             :         case MID_GRID_BASEWIDTH:
    2261             :         case MID_GRID_RUBYHEIGHT:
    2262             :         {
    2263             :             OSL_ENSURE( (nMemberId & CONVERT_TWIPS) != 0,
    2264             :                         "This value needs TWIPS-MM100 conversion" );
    2265        8448 :             sal_Int32 nTmp = 0;
    2266        8448 :             bRet = (rVal >>= nTmp);
    2267        8448 :             nTmp = convertMm100ToTwip( nTmp );
    2268        8448 :             if( bRet && (nTmp >= 0) && ( nTmp <= USHRT_MAX) )
    2269             :             {
    2270             :                 // rhbz#1043551 round up to 5pt -- 0 causes divide-by-zero
    2271             :                 // in layout; 1pt ties the painting code up in knots for
    2272             :                 // minutes with bazillion lines...
    2273             : #define MIN_TEXTGRID_SIZE 100
    2274       16896 :                 if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEHEIGHT )
    2275             :                 {
    2276        4180 :                     nTmp = std::max<sal_Int32>(nTmp, MIN_TEXTGRID_SIZE);
    2277        4180 :                     SetBaseHeight( (sal_uInt16)nTmp );
    2278             :                 }
    2279        4268 :                 else if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEWIDTH )
    2280             :                 {
    2281          88 :                     nTmp = std::max<sal_Int32>(nTmp, MIN_TEXTGRID_SIZE);
    2282          88 :                     SetBaseWidth( (sal_uInt16)nTmp );
    2283             :                 }
    2284             :                 else
    2285        4180 :                     SetRubyHeight( (sal_uInt16)nTmp );
    2286             :             }
    2287             :             else
    2288           0 :                 bRet = false;
    2289             :         }
    2290        8448 :         break;
    2291             :         case MID_GRID_TYPE:
    2292             :         {
    2293        4270 :             sal_Int16 nTmp = 0;
    2294        4270 :             bRet = (rVal >>= nTmp);
    2295        4270 :             if( bRet )
    2296             :             {
    2297        4270 :                 switch( nTmp )
    2298             :                 {
    2299             :                     case text::TextGridMode::NONE:
    2300        4256 :                         SetGridType( GRID_NONE );
    2301        4256 :                         break;
    2302             :                     case text::TextGridMode::LINES:
    2303          14 :                         SetGridType( GRID_LINES_ONLY );
    2304          14 :                         break;
    2305             :                     case text::TextGridMode::LINES_AND_CHARS:
    2306           0 :                         SetGridType( GRID_LINES_CHARS );
    2307           0 :                         break;
    2308             :                     default:
    2309           0 :                         bRet = false;
    2310           0 :                         break;
    2311             :                 }
    2312             :             }
    2313        4270 :             break;
    2314             :         }
    2315             :         case MID_GRID_SNAPTOCHARS:
    2316          88 :             SetSnapToChars( *(sal_Bool*)rVal.getValue() );
    2317          88 :             break;
    2318             :         case MID_GRID_STANDARD_MODE:
    2319             :         {
    2320        4124 :             bool bStandard = *(sal_Bool*)rVal.getValue();
    2321        4124 :                SetSquaredMode( !bStandard );
    2322        4124 :             break;
    2323             :         }
    2324             :         default:
    2325             :             OSL_FAIL("Unknown SwTextGridItem member");
    2326           0 :             bRet = false;
    2327             :     }
    2328             : 
    2329       29902 :     return bRet;
    2330             : }
    2331             : 
    2332        4020 : void SwTextGridItem::SwitchPaperMode(bool bNew)
    2333             : {
    2334        4020 :     if (bNew == m_bSquaredMode)
    2335             :     {
    2336             :         //same paper mode, not switch
    2337        3996 :         return;
    2338             :     }
    2339             : 
    2340             :     // use default value when grid is disable
    2341          24 :     if (m_eGridType == GRID_NONE)
    2342             :     {
    2343          24 :         m_bSquaredMode = bNew;
    2344          24 :         Init();
    2345          24 :         return;
    2346             :     }
    2347             : 
    2348           0 :     if (m_bSquaredMode)
    2349             :     {
    2350             :         //switch from "squared mode" to "standard mode"
    2351           0 :         m_nBaseWidth = m_nBaseHeight;
    2352           0 :         m_nBaseHeight = m_nBaseHeight + m_nRubyHeight;
    2353           0 :         m_nRubyHeight = 0;
    2354             :     }
    2355             :     else
    2356             :     {
    2357             :         //switch from "standard mode" to "squared mode"
    2358           0 :         m_nRubyHeight = m_nBaseHeight/3;
    2359           0 :         m_nBaseHeight = m_nBaseHeight - m_nRubyHeight;
    2360           0 :         m_nBaseWidth = m_nBaseHeight;
    2361             :     }
    2362           0 :     m_bSquaredMode = !m_bSquaredMode;
    2363             : }
    2364             : 
    2365        3600 : void SwTextGridItem::Init()
    2366             : {
    2367        3600 :     if (m_bSquaredMode)
    2368             :     {
    2369           0 :         m_nLines = 20;
    2370           0 :         m_nBaseHeight = 400;
    2371           0 :         m_nRubyHeight = 200;
    2372           0 :         m_eGridType = GRID_NONE;
    2373           0 :         m_bRubyTextBelow = false;
    2374           0 :         m_bPrintGrid = true;
    2375           0 :         m_bDisplayGrid = true;
    2376           0 :         m_bSnapToChars = true;
    2377           0 :         m_nBaseWidth = 400;
    2378             :     }
    2379             :     else
    2380             :     {
    2381        3600 :         m_nLines = 44;
    2382        3600 :         m_nBaseHeight = 312;
    2383        3600 :         m_nRubyHeight = 0;
    2384        3600 :         m_eGridType = GRID_NONE;
    2385        3600 :         m_bRubyTextBelow = false;
    2386        3600 :         m_bPrintGrid = true;
    2387        3600 :         m_bDisplayGrid = true;
    2388        3600 :         m_nBaseWidth = 210;
    2389        3600 :         m_bSnapToChars = true;
    2390             :     }
    2391        3600 : }
    2392             : 
    2393        2616 : SfxPoolItem* SwHeaderAndFooterEatSpacingItem::Clone( SfxItemPool* ) const
    2394             : {
    2395        2616 :     return new SwHeaderAndFooterEatSpacingItem( Which(), GetValue() );
    2396             : }
    2397             : 
    2398             : // Partially implemented inline in hxx
    2399      621662 : TYPEINIT1( SwFrmFmt, SwFmt );
    2400       66473 : IMPL_FIXEDMEMPOOL_NEWDEL_DLL( SwFrmFmt )
    2401             : 
    2402       24244 : SwFrmFmt::SwFrmFmt(
    2403             :     SwAttrPool& rPool,
    2404             :     const sal_Char* pFmtNm,
    2405             :     SwFrmFmt *pDrvdFrm,
    2406             :     sal_uInt16 nFmtWhich,
    2407             :     const sal_uInt16* pWhichRange)
    2408             : :   SwFmt(rPool, pFmtNm, (pWhichRange ? pWhichRange : aFrmFmtSetRange), pDrvdFrm, nFmtWhich),
    2409             :     m_wXObject(),
    2410       24244 :     maFillAttributes()
    2411             : {
    2412       24244 : }
    2413             : 
    2414       72232 : SwFrmFmt::SwFrmFmt(
    2415             :     SwAttrPool& rPool,
    2416             :     const OUString &rFmtNm,
    2417             :     SwFrmFmt *pDrvdFrm,
    2418             :     sal_uInt16 nFmtWhich,
    2419             :     const sal_uInt16* pWhichRange)
    2420             : :   SwFmt(rPool, rFmtNm, (pWhichRange ? pWhichRange : aFrmFmtSetRange), pDrvdFrm, nFmtWhich),
    2421             :     m_wXObject(),
    2422       72232 :     maFillAttributes()
    2423             : {
    2424       72232 : }
    2425             : 
    2426      491490 : bool SwFrmFmt::supportsFullDrawingLayerFillAttributeSet() const
    2427             : {
    2428      491490 :     return true;
    2429             : }
    2430             : 
    2431      802438 : void SwFrmFmt::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
    2432             : {
    2433      802438 :     SwFmtHeader *pH = 0;
    2434      802438 :     SwFmtFooter *pF = 0;
    2435             : 
    2436      802438 :     sal_uInt16 nWhich = pNew ? pNew->Which() : 0;
    2437             : 
    2438      802438 :     if( RES_ATTRSET_CHG == nWhich )
    2439             :     {
    2440      797232 :         ((SwAttrSetChg*)pNew)->GetChgSet()->GetItemState(
    2441      797232 :             RES_HEADER, false, (const SfxPoolItem**)&pH );
    2442      797232 :         ((SwAttrSetChg*)pNew)->GetChgSet()->GetItemState(
    2443      797232 :             RES_FOOTER, false, (const SfxPoolItem**)&pF );
    2444             : 
    2445             :         //UUUU reset fill information
    2446      797232 :         if (maFillAttributes.get() && supportsFullDrawingLayerFillAttributeSet())
    2447             :         {
    2448        1255 :             SfxItemIter aIter(*((SwAttrSetChg*)pNew)->GetChgSet());
    2449        1255 :             bool bReset(false);
    2450             : 
    2451        2850 :             for(const SfxPoolItem* pItem = aIter.FirstItem(); pItem && !bReset; pItem = aIter.NextItem())
    2452             :             {
    2453        1595 :                 bReset = !IsInvalidItem(pItem) && pItem->Which() >= XATTR_FILL_FIRST && pItem->Which() <= XATTR_FILL_LAST;
    2454             :             }
    2455             : 
    2456        1255 :             if(bReset)
    2457             :             {
    2458           6 :                 maFillAttributes.reset();
    2459        1255 :             }
    2460             :         }
    2461             :     }
    2462        5206 :     else if(RES_FMT_CHG == nWhich)
    2463             :     {
    2464             :         //UUUU reset fill information on format change (e.g. style changed)
    2465         164 :         if (maFillAttributes.get() && supportsFullDrawingLayerFillAttributeSet())
    2466             :         {
    2467          14 :             maFillAttributes.reset();
    2468             :         }
    2469             :     }
    2470        5042 :     else if( RES_HEADER == nWhich )
    2471           0 :         pH = (SwFmtHeader*)pNew;
    2472        5042 :     else if( RES_FOOTER == nWhich )
    2473           0 :         pF = (SwFmtFooter*)pNew;
    2474             : 
    2475      802438 :     if( pH && pH->IsActive() && !pH->GetHeaderFmt() )
    2476             :     {   //If he doesn't have one, I'll add one
    2477        1326 :         SwFrmFmt *pFmt = GetDoc()->getIDocumentLayoutAccess().MakeLayoutFmt( RND_STD_HEADER, 0 );
    2478        1326 :         pH->RegisterToFormat( *pFmt );
    2479             :     }
    2480             : 
    2481      802438 :     if( pF && pF->IsActive() && !pF->GetFooterFmt() )
    2482             :     {   //If he doesn't have one, I'll add one
    2483        1330 :         SwFrmFmt *pFmt = GetDoc()->getIDocumentLayoutAccess().MakeLayoutFmt( RND_STD_FOOTER, 0 );
    2484        1330 :         pF->RegisterToFormat( *pFmt );
    2485             :     }
    2486             : 
    2487      802438 :     SwFmt::Modify( pOld, pNew );
    2488             : 
    2489      802438 :     if (pOld && (RES_REMOVE_UNO_OBJECT == pOld->Which()))
    2490             :     {   // invalidate cached uno object
    2491        1886 :         SetXObject(uno::Reference<uno::XInterface>(0));
    2492             :     }
    2493      802438 : }
    2494             : 
    2495          78 : void SwFrmFmt::RegisterToFormat( SwFmt& rFmt )
    2496             : {
    2497          78 :     rFmt.Add( this );
    2498          78 : }
    2499             : 
    2500             : /// Delete all Frms that are registered in aDepend.
    2501        4014 : void SwFrmFmt::DelFrms()
    2502             : {
    2503        4014 :     SwIterator<SwFrm,SwFmt> aIter( *this );
    2504        4014 :     SwFrm * pLast = aIter.First();
    2505        4014 :     if( pLast )
    2506          38 :         do {
    2507          38 :                 pLast->Cut();
    2508          38 :                 delete pLast;
    2509        4014 :         } while( 0 != ( pLast = aIter.Next() ));
    2510        4014 : }
    2511             : 
    2512           0 : void SwFrmFmt::MakeFrms()
    2513             : {
    2514             :     OSL_ENSURE( false, "Sorry not implemented." );
    2515           0 : }
    2516             : 
    2517        2300 : SwRect SwFrmFmt::FindLayoutRect( const bool bPrtArea, const Point* pPoint,
    2518             :                                  const bool bCalcFrm ) const
    2519             : {
    2520        2300 :     SwRect aRet;
    2521        2300 :     SwFrm *pFrm = 0;
    2522        2300 :     if( ISA( SwSectionFmt ) )
    2523             :     {
    2524             :         // get the Frame using Node2Layout
    2525           0 :         SwSectionNode* pSectNd = ((SwSectionFmt*)this)->GetSectionNode();
    2526           0 :         if( pSectNd )
    2527             :         {
    2528           0 :             SwNode2Layout aTmp( *pSectNd, pSectNd->GetIndex() - 1 );
    2529           0 :             pFrm = aTmp.NextFrm();
    2530             : 
    2531           0 :             if( pFrm && !pFrm->KnowsFormat(*this) )
    2532             :             {
    2533             :                 // the Section doesn't have his own Frame, so if someone
    2534             :                 // needs the real size, we have to implement this by requesting
    2535             :                 // the matching Frame from the end.
    2536             :                 // PROBLEM: what happens if SectionFrames overlaps multiple
    2537             :                 //          pages?
    2538           0 :                 if( bPrtArea )
    2539           0 :                     aRet = pFrm->Prt();
    2540             :                 else
    2541             :                 {
    2542           0 :                     aRet = pFrm->Frm();
    2543           0 :                     --aRet.Pos().Y();
    2544             :                 }
    2545           0 :                 pFrm = 0;       // the rect is finished by now
    2546           0 :             }
    2547             :         }
    2548             :     }
    2549             :     else
    2550             :     {
    2551        2300 :         sal_uInt16 nFrmType = RES_FLYFRMFMT == Which() ? FRM_FLY : USHRT_MAX;
    2552             :         pFrm = ::GetFrmOfModify( 0, *(SwModify*)this, nFrmType, pPoint,
    2553        2300 :                                     0, bCalcFrm );
    2554             :     }
    2555             : 
    2556        2300 :     if( pFrm )
    2557             :     {
    2558        2008 :         if( bPrtArea )
    2559           4 :             aRet = pFrm->Prt();
    2560             :         else
    2561        2004 :             aRet = pFrm->Frm();
    2562             :     }
    2563        2300 :     return aRet;
    2564             : }
    2565             : 
    2566       50450 : SwContact* SwFrmFmt::FindContactObj()
    2567             : {
    2568       50450 :     return SwIterator<SwContact,SwFmt>::FirstElement( *this );
    2569             : }
    2570             : 
    2571       33190 : SdrObject* SwFrmFmt::FindSdrObject()
    2572             : {
    2573             :     // #i30669# - use method <FindContactObj()> instead of
    2574             :     // duplicated code.
    2575       33190 :     SwContact* pFoundContact = FindContactObj();
    2576       33190 :     return pFoundContact ? pFoundContact->GetMaster() : 0;
    2577             : }
    2578             : 
    2579       19310 : SdrObject* SwFrmFmt::FindRealSdrObject()
    2580             : {
    2581       19310 :     if( RES_FLYFRMFMT == Which() )
    2582             :     {
    2583        2588 :         Point aNullPt;
    2584             :         SwFlyFrm* pFly = (SwFlyFrm*)::GetFrmOfModify( 0, *this, FRM_FLY,
    2585        2588 :                                                     &aNullPt, 0, false );
    2586        2588 :         return pFly ? pFly->GetVirtDrawObj() : 0;
    2587             :     }
    2588       16722 :     return FindSdrObject();
    2589             : }
    2590             : 
    2591          16 : bool SwFrmFmt::IsLowerOf( const SwFrmFmt& rFmt ) const
    2592             : {
    2593             :     //Also linking from inside to outside or from outside to inside is not
    2594             :     //allowed.
    2595          16 :     SwFlyFrm *pSFly = SwIterator<SwFlyFrm,SwFmt>::FirstElement(*this);
    2596          16 :     if( pSFly )
    2597             :     {
    2598           0 :         SwFlyFrm *pAskFly = SwIterator<SwFlyFrm,SwFmt>::FirstElement(rFmt);
    2599           0 :         if( pAskFly )
    2600           0 :             return pSFly->IsLowerOf( pAskFly );
    2601             :     }
    2602             : 
    2603             :     // let's try it using the node positions
    2604          16 :     const SwFmtAnchor* pAnchor = &rFmt.GetAnchor();
    2605          16 :     if ((FLY_AT_PAGE != pAnchor->GetAnchorId()) && pAnchor->GetCntntAnchor())
    2606             :     {
    2607          16 :         const SwFrmFmts& rFmts = *GetDoc()->GetSpzFrmFmts();
    2608          16 :         const SwNode* pFlyNd = pAnchor->GetCntntAnchor()->nNode.GetNode().
    2609          16 :                                 FindFlyStartNode();
    2610          32 :         while( pFlyNd )
    2611             :         {
    2612             :             // then we walk up using the anchor
    2613             :             sal_uInt16 n;
    2614           0 :             for( n = 0; n < rFmts.size(); ++n )
    2615             :             {
    2616           0 :                 const SwFrmFmt* pFmt = rFmts[ n ];
    2617           0 :                 const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx();
    2618           0 :                 if( pIdx && pFlyNd == &pIdx->GetNode() )
    2619             :                 {
    2620           0 :                     if( pFmt == this )
    2621           0 :                         return true;
    2622             : 
    2623           0 :                     pAnchor = &pFmt->GetAnchor();
    2624           0 :                     if ((FLY_AT_PAGE == pAnchor->GetAnchorId()) ||
    2625           0 :                         !pAnchor->GetCntntAnchor() )
    2626             :                     {
    2627           0 :                         return false;
    2628             :                     }
    2629             : 
    2630           0 :                     pFlyNd = pAnchor->GetCntntAnchor()->nNode.GetNode().
    2631           0 :                                 FindFlyStartNode();
    2632           0 :                     break;
    2633             :                 }
    2634             :             }
    2635           0 :             if( n >= rFmts.size() )
    2636             :             {
    2637             :                 OSL_ENSURE( false, "Fly section but no format found" );
    2638           0 :                 return false;
    2639             :             }
    2640             :         }
    2641             :     }
    2642          16 :     return false;
    2643             : }
    2644             : 
    2645             : // #i31698#
    2646           0 : SwFrmFmt::tLayoutDir SwFrmFmt::GetLayoutDir() const
    2647             : {
    2648           0 :     return SwFrmFmt::HORI_L2R;
    2649             : }
    2650             : 
    2651        4014 : void SwFrmFmt::SetLayoutDir( const SwFrmFmt::tLayoutDir )
    2652             : {
    2653             :     // empty body, because default implementation does nothing
    2654        4014 : }
    2655             : 
    2656             : // #i28749#
    2657           0 : sal_Int16 SwFrmFmt::GetPositionLayoutDir() const
    2658             : {
    2659           0 :     return text::PositionLayoutDir::PositionInLayoutDirOfAnchor;
    2660             : }
    2661           0 : void SwFrmFmt::SetPositionLayoutDir( const sal_Int16 )
    2662             : {
    2663             :     // empty body, because default implementation does nothing
    2664           0 : }
    2665             : 
    2666           0 : OUString SwFrmFmt::GetDescription() const
    2667             : {
    2668           0 :     return SW_RES(STR_FRAME);
    2669             : }
    2670             : 
    2671             : //  class SwFlyFrmFmt
    2672             : //  Partially implemented inline in hxx
    2673             : 
    2674      187688 : TYPEINIT1( SwFlyFrmFmt, SwFrmFmt );
    2675          90 : IMPL_FIXEDMEMPOOL_NEWDEL( SwFlyFrmFmt )
    2676             : 
    2677       11748 : SwFlyFrmFmt::~SwFlyFrmFmt()
    2678             : {
    2679        3916 :     SwIterator<SwFlyFrm,SwFmt> aIter( *this );
    2680        3916 :     SwFlyFrm * pLast = aIter.First();
    2681        3916 :     if( pLast )
    2682           0 :         do {
    2683           0 :                 delete pLast;
    2684             :         } while( 0 != ( pLast = aIter.Next() ));
    2685             : 
    2686        7832 :     SwIterator<SwFlyDrawContact,SwFmt> a2ndIter( *this );
    2687        3916 :     SwFlyDrawContact* pC = a2ndIter.First();
    2688        3916 :     if( pC )
    2689         896 :         do {
    2690         896 :                 delete pC;
    2691             : 
    2692        3916 :         } while( 0 != ( pC = a2ndIter.Next() ));
    2693        7832 : }
    2694             : 
    2695             : /// Creates the Frms if the format describes a paragraph-bound frame.
    2696             : /// MA: 1994-02-14: creates the Frms also for frames anchored at page.
    2697        2540 : void SwFlyFrmFmt::MakeFrms()
    2698             : {
    2699             :     // is there a layout?
    2700        2540 :     if( !GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell() )
    2701        1396 :         return;
    2702             : 
    2703        1842 :     SwModify *pModify = 0;
    2704             :     // OD 24.07.2003 #111032# - create local copy of anchor attribute for possible changes.
    2705        1842 :     SwFmtAnchor aAnchorAttr( GetAnchor() );
    2706        1842 :     switch( aAnchorAttr.GetAnchorId() )
    2707             :     {
    2708             :     case FLY_AS_CHAR:
    2709             :     case FLY_AT_PARA:
    2710             :     case FLY_AT_CHAR:
    2711        1642 :         if( aAnchorAttr.GetCntntAnchor() )
    2712             :         {
    2713        1642 :             pModify = aAnchorAttr.GetCntntAnchor()->nNode.GetNode().GetCntntNode();
    2714             :         }
    2715        1642 :         break;
    2716             : 
    2717             :     case FLY_AT_FLY:
    2718           0 :         if( aAnchorAttr.GetCntntAnchor() )
    2719             :         {
    2720             :             //First search in the content because this is O(1)
    2721             :             //This can go wrong for linked frames because in this case it's
    2722             :             //possible, that no Frame exists for this content.
    2723             :             //In such a situation we also need to search from StartNode to
    2724             :             //FrameFormat.
    2725           0 :             SwNodeIndex aIdx( aAnchorAttr.GetCntntAnchor()->nNode );
    2726           0 :             SwCntntNode *pCNd = GetDoc()->GetNodes().GoNext( &aIdx );
    2727             :             // #i105535#
    2728           0 :             if ( pCNd == 0 )
    2729             :             {
    2730           0 :                 pCNd = aAnchorAttr.GetCntntAnchor()->nNode.GetNode().GetCntntNode();
    2731             :             }
    2732           0 :             if ( pCNd )
    2733             :             {
    2734           0 :                 if( SwIterator<SwFrm,SwCntntNode>::FirstElement( *pCNd ) )
    2735             :                 {
    2736           0 :                     pModify = pCNd;
    2737             :                 }
    2738             :             }
    2739             :             // #i105535#
    2740           0 :             if ( pModify == 0 )
    2741             :             {
    2742           0 :                 const SwNodeIndex &rIdx = aAnchorAttr.GetCntntAnchor()->nNode;
    2743           0 :                 SwFrmFmts& rFmts = *GetDoc()->GetSpzFrmFmts();
    2744           0 :                 for( sal_uInt16 i = 0; i < rFmts.size(); ++i )
    2745             :                 {
    2746           0 :                     SwFrmFmt* pFlyFmt = rFmts[i];
    2747           0 :                     if( pFlyFmt->GetCntnt().GetCntntIdx() &&
    2748           0 :                         rIdx == *pFlyFmt->GetCntnt().GetCntntIdx() )
    2749             :                     {
    2750           0 :                         pModify = pFlyFmt;
    2751           0 :                         break;
    2752             :                     }
    2753             :                 }
    2754           0 :             }
    2755             :         }
    2756           0 :         break;
    2757             : 
    2758             :     case FLY_AT_PAGE:
    2759             :         {
    2760         200 :             sal_uInt16 nPgNum = aAnchorAttr.GetPageNum();
    2761         200 :             SwPageFrm *pPage = (SwPageFrm*)GetDoc()->getIDocumentLayoutAccess().GetCurrentLayout()->Lower();
    2762         200 :             if( nPgNum == 0 && aAnchorAttr.GetCntntAnchor() )
    2763             :             {
    2764          14 :                 SwCntntNode *pCNd = aAnchorAttr.GetCntntAnchor()->nNode.GetNode().GetCntntNode();
    2765          14 :                 SwIterator<SwFrm,SwCntntNode> aIter( *pCNd );
    2766          14 :                 for ( SwFrm* pFrm = aIter.First(); pFrm != NULL; pFrm = aIter.Next() )
    2767             :                 {
    2768          14 :                     pPage = pFrm->FindPageFrm();
    2769          14 :                     if( pPage )
    2770             :                     {
    2771          14 :                         nPgNum = pPage->GetPhyPageNum();
    2772          14 :                         aAnchorAttr.SetPageNum( nPgNum );
    2773          14 :                         aAnchorAttr.SetAnchor( 0 );
    2774          14 :                         SetFmtAttr( aAnchorAttr );
    2775          14 :                         break;
    2776             :                     }
    2777          14 :                 }
    2778             :             }
    2779         538 :             while ( pPage )
    2780             :             {
    2781         200 :                 if ( pPage->GetPhyPageNum() == nPgNum )
    2782             :                 {
    2783             :                     // #i50432# - adjust synopsis of <PlaceFly(..)>
    2784          62 :                     pPage->PlaceFly( 0, this );
    2785          62 :                     break;
    2786             :                 }
    2787         138 :                 pPage = (SwPageFrm*)pPage->GetNext();
    2788             :             }
    2789             :         }
    2790         200 :         break;
    2791             :     default:
    2792           0 :         break;
    2793             :     }
    2794             : 
    2795        1842 :     if( pModify )
    2796             :     {
    2797        1642 :         SwIterator<SwFrm,SwModify> aIter( *pModify );
    2798        3534 :         for( SwFrm *pFrm = aIter.First(); pFrm; pFrm = aIter.Next() )
    2799             :         {
    2800        3784 :             bool bAdd = !pFrm->IsCntntFrm() ||
    2801        3784 :                             !((SwCntntFrm*)pFrm)->IsFollow();
    2802             : 
    2803        1892 :             if ( FLY_AT_FLY == aAnchorAttr.GetAnchorId() && !pFrm->IsFlyFrm() )
    2804             :             {
    2805           0 :                 SwFrm* pFlyFrm = pFrm->FindFlyFrm();
    2806           0 :                 if ( pFlyFrm )
    2807             :                 {
    2808           0 :                     pFrm = pFlyFrm;
    2809             :                 }
    2810             :                 else
    2811             :                 {
    2812           0 :                     aAnchorAttr.SetType( FLY_AT_PARA );
    2813           0 :                     SetFmtAttr( aAnchorAttr );
    2814           0 :                     MakeFrms();
    2815           0 :                     return;
    2816             :                 }
    2817             :             }
    2818             : 
    2819        1892 :             if( pFrm->GetDrawObjs() )
    2820             :             {
    2821             :                 // #i28701# - new type <SwSortedObjs>
    2822        1418 :                 SwSortedObjs &rObjs = *pFrm->GetDrawObjs();
    2823       21024 :                 for( size_t i = 0; i < rObjs.size(); ++i)
    2824             :                 {
    2825             :                     // #i28701# - consider changed type of
    2826             :                     // <SwSortedObjs> entries.
    2827       20190 :                     SwAnchoredObject* pObj = rObjs[i];
    2828       26844 :                     if( pObj->ISA(SwFlyFrm) &&
    2829        6654 :                         (&pObj->GetFrmFmt()) == this )
    2830             :                     {
    2831         584 :                         bAdd = false;
    2832         584 :                         break;
    2833             :                     }
    2834             :                 }
    2835             :             }
    2836             : 
    2837        1892 :             if( bAdd )
    2838             :             {
    2839             :                 SwFlyFrm *pFly;
    2840        1308 :                 switch( aAnchorAttr.GetAnchorId() )
    2841             :                 {
    2842             :                 case FLY_AT_FLY:
    2843           0 :                     pFly = new SwFlyLayFrm( this, pFrm, pFrm );
    2844           0 :                     break;
    2845             : 
    2846             :                 case FLY_AT_PARA:
    2847             :                 case FLY_AT_CHAR:
    2848        1180 :                     pFly = new SwFlyAtCntFrm( this, pFrm, pFrm );
    2849        1180 :                     break;
    2850             : 
    2851             :                 default:
    2852             :                     assert(false && "Neuer Ankertyp" );
    2853             :                     //fall-through
    2854             :                 case FLY_AS_CHAR:
    2855         128 :                     pFly = new SwFlyInCntFrm( this, pFrm, pFrm );
    2856         128 :                     break;
    2857             :                 }
    2858        1308 :                 pFrm->AppendFly( pFly );
    2859        1308 :                 SwPageFrm *pPage = pFly->FindPageFrm();
    2860        1308 :                 if( pPage )
    2861        1308 :                     ::RegistFlys( pPage, pFly );
    2862             :             }
    2863        1642 :         }
    2864        1842 :     }
    2865             : }
    2866             : 
    2867          46 : SwFlyFrm* SwFlyFrmFmt::GetFrm( const Point* pPoint, const bool bCalcFrm ) const
    2868             : {
    2869             :     return (SwFlyFrm*)::GetFrmOfModify( 0, *(SwModify*)this, FRM_FLY,
    2870          46 :                                             pPoint, 0, bCalcFrm );
    2871             : }
    2872             : 
    2873           0 : SwAnchoredObject* SwFlyFrmFmt::GetAnchoredObj( const Point* pPoint, const bool bCalcFrm ) const
    2874             : {
    2875           0 :     SwFlyFrm* pFlyFrm( GetFrm( pPoint, bCalcFrm ) );
    2876           0 :     if ( pFlyFrm )
    2877             :     {
    2878           0 :         return dynamic_cast<SwAnchoredObject*>(pFlyFrm);
    2879             :     }
    2880             :     else
    2881             :     {
    2882           0 :         return 0L;
    2883             :     }
    2884             : }
    2885             : 
    2886          73 : bool SwFlyFrmFmt::GetInfo( SfxPoolItem& rInfo ) const
    2887             : {
    2888          73 :     bool bRet = true;
    2889          73 :     switch( rInfo.Which() )
    2890             :     {
    2891             :     case RES_CONTENT_VISIBLE:
    2892             :         {
    2893           0 :             ((SwPtrMsgPoolItem&)rInfo).pObject = SwIterator<SwFrm,SwFmt>::FirstElement( *this );
    2894             :         }
    2895           0 :         bRet = false;
    2896           0 :         break;
    2897             : 
    2898             :     default:
    2899          73 :         bRet = SwFrmFmt::GetInfo( rInfo );
    2900          73 :         break;
    2901             :     }
    2902          73 :     return bRet;
    2903             : }
    2904             : 
    2905             : // #i73249#
    2906         320 : void SwFlyFrmFmt::SetObjTitle( const OUString& rTitle, bool bBroadcast )
    2907             : {
    2908         320 :     SdrObject* pMasterObject = FindSdrObject();
    2909             :     OSL_ENSURE( pMasterObject, "<SwFlyFrmFmt::SetObjTitle(..)> - missing <SdrObject> instance" );
    2910         320 :     if ( !pMasterObject )
    2911             :     {
    2912         322 :         return;
    2913             :     }
    2914             : 
    2915         318 :     if( bBroadcast )
    2916             :     {
    2917           2 :         SwStringMsgPoolItem aOld( RES_TITLE_CHANGED, pMasterObject->GetTitle() );
    2918           4 :         SwStringMsgPoolItem aNew( RES_TITLE_CHANGED, rTitle );
    2919           2 :         pMasterObject->SetTitle( rTitle );
    2920           4 :         ModifyNotification( &aOld, &aNew );
    2921             :     }
    2922             :     else
    2923             :     {
    2924         316 :         pMasterObject->SetTitle( rTitle );
    2925             :     }
    2926             : }
    2927             : 
    2928        1120 : OUString SwFlyFrmFmt::GetObjTitle() const
    2929             : {
    2930        1120 :     const SdrObject* pMasterObject = FindSdrObject();
    2931             :     OSL_ENSURE( pMasterObject, "<SwFlyFrmFmt::GetObjTitle(..)> - missing <SdrObject> instance" );
    2932        1120 :     if ( !pMasterObject )
    2933             :     {
    2934          38 :         return OUString();
    2935             :     }
    2936             : 
    2937        1082 :     return pMasterObject->GetTitle();
    2938             : }
    2939             : 
    2940         472 : void SwFlyFrmFmt::SetObjDescription( const OUString& rDescription, bool bBroadcast )
    2941             : {
    2942         472 :     SdrObject* pMasterObject = FindSdrObject();
    2943             :     OSL_ENSURE( pMasterObject, "<SwFlyFrmFmt::SetDescription(..)> - missing <SdrObject> instance" );
    2944         472 :     if ( !pMasterObject )
    2945             :     {
    2946         472 :         return;
    2947             :     }
    2948             : 
    2949         472 :     if( bBroadcast )
    2950             :     {
    2951         156 :         SwStringMsgPoolItem aOld( RES_DESCRIPTION_CHANGED, pMasterObject->GetDescription() );
    2952         312 :         SwStringMsgPoolItem aNew( RES_DESCRIPTION_CHANGED, rDescription );
    2953         156 :         pMasterObject->SetDescription( rDescription );
    2954         312 :         ModifyNotification( &aOld, &aNew );
    2955             :     }
    2956             :     else
    2957             :     {
    2958         316 :         pMasterObject->SetDescription( rDescription );
    2959             :     }
    2960             : }
    2961             : 
    2962        1058 : OUString SwFlyFrmFmt::GetObjDescription() const
    2963             : {
    2964        1058 :     const SdrObject* pMasterObject = FindSdrObject();
    2965             :     OSL_ENSURE( pMasterObject, "<SwFlyFrmFmt::GetDescription(..)> - missing <SdrObject> instance" );
    2966        1058 :     if ( !pMasterObject )
    2967             :     {
    2968           0 :         return OUString();
    2969             :     }
    2970             : 
    2971        1058 :     return pMasterObject->GetDescription();
    2972             : }
    2973             : 
    2974             : /** SwFlyFrmFmt::IsBackgroundTransparent - for #99657#
    2975             : 
    2976             :     OD 22.08.2002 - overloading virtual method and its default implementation,
    2977             :     because format of fly frame provides transparent backgrounds.
    2978             :     Method determines, if background of fly frame is transparent.
    2979             : 
    2980             :     @return true, if background color is transparent, but not "no fill"
    2981             :     or the transparency of a existing background graphic is set.
    2982             : */
    2983       14707 : bool SwFlyFrmFmt::IsBackgroundTransparent() const
    2984             : {
    2985             :     //UUUU
    2986       14707 :     if (supportsFullDrawingLayerFillAttributeSet() && getSdrAllFillAttributesHelper())
    2987             :     {
    2988       14707 :         return getSdrAllFillAttributesHelper()->isTransparent();
    2989             :     }
    2990             : 
    2991             :     // NOTE: If background color is "no fill"/"auto fill" (COL_TRANSPARENT)
    2992             :     //     and there is no background graphic, it "inherites" the background
    2993             :     //     from its anchor.
    2994           0 :     SvxBrushItem aBackground(makeBackgroundBrushItem());
    2995           0 :     if ( (aBackground.GetColor().GetTransparency() != 0) &&
    2996           0 :          (aBackground.GetColor() != COL_TRANSPARENT)
    2997             :        )
    2998             :     {
    2999           0 :         return true;
    3000             :     }
    3001             :     else
    3002             :     {
    3003             :         const GraphicObject *pTmpGrf =
    3004           0 :                 static_cast<const GraphicObject*>(aBackground.GetGraphicObject());
    3005           0 :         if ( (pTmpGrf) &&
    3006           0 :              (pTmpGrf->GetAttr().GetTransparency() != 0)
    3007             :            )
    3008             :         {
    3009           0 :             return true;
    3010             :         }
    3011             :     }
    3012             : 
    3013           0 :     return false;
    3014             : }
    3015             : 
    3016             : /** SwFlyFrmFmt::IsBackgroundBrushInherited - for #103898#
    3017             : 
    3018             :     OD 08.10.2002 - method to determine, if the brush for drawing the
    3019             :     background is "inherited" from its parent/grandparent.
    3020             :     This is the case, if no background graphic is set and the background
    3021             :     color is "no fill"/"auto fill"
    3022             :     NOTE: condition is "copied" from method <SwFrm::GetBackgroundBrush(..).
    3023             : 
    3024             :     @return true, if background brush is "inherited" from parent/grandparent
    3025             : */
    3026        2993 : bool SwFlyFrmFmt::IsBackgroundBrushInherited() const
    3027             : {
    3028             :     //UUUU
    3029        2993 :     if (supportsFullDrawingLayerFillAttributeSet() && getSdrAllFillAttributesHelper())
    3030             :     {
    3031        2993 :         return !getSdrAllFillAttributesHelper()->isUsed();
    3032             :     }
    3033             :     else
    3034             :     {
    3035           0 :         SvxBrushItem aBackground(makeBackgroundBrushItem());
    3036           0 :         if ( (aBackground.GetColor() == COL_TRANSPARENT) &&
    3037           0 :              !(aBackground.GetGraphicObject()) )
    3038             :         {
    3039           0 :             return true;
    3040           0 :         }
    3041             :     }
    3042             : 
    3043           0 :     return false;
    3044             : }
    3045             : 
    3046             : // #125892#
    3047           0 : SwHandleAnchorNodeChg::SwHandleAnchorNodeChg( SwFlyFrmFmt& _rFlyFrmFmt,
    3048             :                                               const SwFmtAnchor& _rNewAnchorFmt,
    3049             :                                               SwFlyFrm* _pKeepThisFlyFrm )
    3050             :     : mrFlyFrmFmt( _rFlyFrmFmt ),
    3051           0 :       mbAnchorNodeChanged( false )
    3052             : {
    3053           0 :     const RndStdIds nNewAnchorType( _rNewAnchorFmt.GetAnchorId() );
    3054           0 :     if ( ((nNewAnchorType == FLY_AT_PARA) ||
    3055           0 :           (nNewAnchorType == FLY_AT_CHAR)) &&
    3056           0 :          _rNewAnchorFmt.GetCntntAnchor() &&
    3057           0 :          _rNewAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode() )
    3058             :     {
    3059           0 :         const SwFmtAnchor& aOldAnchorFmt( _rFlyFrmFmt.GetAnchor() );
    3060           0 :         if ( aOldAnchorFmt.GetAnchorId() == nNewAnchorType &&
    3061           0 :              aOldAnchorFmt.GetCntntAnchor() &&
    3062           0 :              aOldAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode() &&
    3063           0 :              aOldAnchorFmt.GetCntntAnchor()->nNode !=
    3064           0 :                                     _rNewAnchorFmt.GetCntntAnchor()->nNode )
    3065             :         {
    3066             :             // determine 'old' number of anchor frames
    3067           0 :             sal_uInt32 nOldNumOfAnchFrm( 0L );
    3068           0 :             SwIterator<SwFrm,SwCntntNode> aOldIter( *(aOldAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode()) );
    3069           0 :             for( SwFrm* pOld = aOldIter.First(); pOld; pOld = aOldIter.Next() )
    3070             :             {
    3071           0 :                 ++nOldNumOfAnchFrm;
    3072             :             }
    3073             :             // determine 'new' number of anchor frames
    3074           0 :             sal_uInt32 nNewNumOfAnchFrm( 0L );
    3075           0 :             SwIterator<SwFrm,SwCntntNode> aNewIter( *(_rNewAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode()) );
    3076           0 :             for( SwFrm* pNew = aNewIter.First(); pNew; pNew = aNewIter.Next() )
    3077             :             {
    3078           0 :                 ++nNewNumOfAnchFrm;
    3079             :             }
    3080           0 :             if ( nOldNumOfAnchFrm != nNewNumOfAnchFrm )
    3081             :             {
    3082             :                 // delete existing fly frames except <_pKeepThisFlyFrm>
    3083           0 :                 SwIterator<SwFrm,SwFmt> aIter( mrFlyFrmFmt );
    3084           0 :                 SwFrm* pFrm = aIter.First();
    3085           0 :                 if ( pFrm )
    3086             :                 {
    3087           0 :                     do {
    3088           0 :                         if ( pFrm != _pKeepThisFlyFrm )
    3089             :                         {
    3090           0 :                             pFrm->Cut();
    3091           0 :                             delete pFrm;
    3092             :                         }
    3093             :                     } while( 0 != ( pFrm = aIter.Next() ));
    3094             :                 }
    3095             :                 // indicate, that re-creation of fly frames necessary
    3096           0 :                 mbAnchorNodeChanged = true;
    3097           0 :             }
    3098             :         }
    3099             :     }
    3100           0 : }
    3101             : 
    3102           0 : SwHandleAnchorNodeChg::~SwHandleAnchorNodeChg()
    3103             : {
    3104           0 :     if ( mbAnchorNodeChanged )
    3105             :     {
    3106           0 :         mrFlyFrmFmt.MakeFrms();
    3107             :     }
    3108           0 : }
    3109             : 
    3110             : //  class SwDrawFrmFmt
    3111             : //  Partially implemented inline in hxx
    3112             : 
    3113       25434 : TYPEINIT1( SwDrawFrmFmt, SwFrmFmt );
    3114          90 : IMPL_FIXEDMEMPOOL_NEWDEL( SwDrawFrmFmt )
    3115             : 
    3116       13404 : SwDrawFrmFmt::~SwDrawFrmFmt()
    3117             : {
    3118        4468 :     SwContact *pContact = FindContactObj();
    3119        4468 :     delete pContact;
    3120        8936 : }
    3121             : 
    3122        2350 : void SwDrawFrmFmt::MakeFrms()
    3123             : {
    3124        2350 :     SwDrawContact *pContact = (SwDrawContact*)FindContactObj();
    3125        2350 :     if ( pContact )
    3126        2350 :          pContact->ConnectToLayout();
    3127        2350 : }
    3128             : 
    3129        7692 : void SwDrawFrmFmt::DelFrms()
    3130             : {
    3131        7692 :     SwDrawContact *pContact = (SwDrawContact *)FindContactObj();
    3132        7692 :     if ( pContact ) //for the reader and other unpredictable things.
    3133        7692 :         pContact->DisconnectFromLayout();
    3134        7692 : }
    3135             : 
    3136             : // #i31698#
    3137        8620 : SwFrmFmt::tLayoutDir SwDrawFrmFmt::GetLayoutDir() const
    3138             : {
    3139        8620 :     return meLayoutDir;
    3140             : }
    3141             : 
    3142        4152 : void SwDrawFrmFmt::SetLayoutDir( const SwFrmFmt::tLayoutDir _eLayoutDir )
    3143             : {
    3144        4152 :     meLayoutDir = _eLayoutDir;
    3145        4152 : }
    3146             : 
    3147             : // #i28749#
    3148        1948 : sal_Int16 SwDrawFrmFmt::GetPositionLayoutDir() const
    3149             : {
    3150        1948 :     return mnPositionLayoutDir;
    3151             : }
    3152        1954 : void SwDrawFrmFmt::SetPositionLayoutDir( const sal_Int16 _nPositionLayoutDir )
    3153             : {
    3154        1954 :     switch ( _nPositionLayoutDir )
    3155             :     {
    3156             :         case text::PositionLayoutDir::PositionInHoriL2R:
    3157             :         case text::PositionLayoutDir::PositionInLayoutDirOfAnchor:
    3158             :         {
    3159        1954 :             mnPositionLayoutDir = _nPositionLayoutDir;
    3160             :         }
    3161        1954 :         break;
    3162             :         default:
    3163             :         {
    3164             :             OSL_FAIL( "<SwDrawFrmFmt::SetPositionLayoutDir(..)> - invalid attribute value." );
    3165             :         }
    3166             :     }
    3167        1954 : }
    3168             : 
    3169           0 : OUString SwDrawFrmFmt::GetDescription() const
    3170             : {
    3171           0 :     OUString aResult;
    3172           0 :     const SdrObject * pSdrObj = FindSdrObject();
    3173             : 
    3174           0 :     if (pSdrObj)
    3175             :     {
    3176           0 :         if (pSdrObj != pSdrObjCached)
    3177             :         {
    3178           0 :             SdrObject * pSdrObjCopy = pSdrObj->Clone();
    3179           0 :             SdrUndoNewObj * pSdrUndo = new SdrUndoNewObj(*pSdrObjCopy);
    3180           0 :             sSdrObjCachedComment = pSdrUndo->GetComment();
    3181             : 
    3182           0 :             delete pSdrUndo;
    3183             : 
    3184           0 :             pSdrObjCached = pSdrObj;
    3185             :         }
    3186             : 
    3187           0 :         aResult = sSdrObjCachedComment;
    3188             :     }
    3189             :     else
    3190           0 :         aResult = SW_RESSTR(STR_GRAPHIC);
    3191             : 
    3192           0 :     return aResult;
    3193             : }
    3194             : 
    3195           0 : IMapObject* SwFrmFmt::GetIMapObject( const Point& rPoint,
    3196             :                                         const SwFlyFrm *pFly ) const
    3197             : {
    3198           0 :     const SwFmtURL &rURL = GetURL();
    3199           0 :     if( !rURL.GetMap() )
    3200           0 :         return 0;
    3201             : 
    3202           0 :     if( !pFly )
    3203             :     {
    3204           0 :         pFly = SwIterator<SwFlyFrm,SwFmt>::FirstElement( *this );
    3205           0 :         if( !pFly )
    3206           0 :             return 0;
    3207             :     }
    3208             : 
    3209             :     //Original size for OLE and graphic is TwipSize, otherwise the size of
    3210             :     //FrmFmt of the Fly.
    3211             :     const SwFrm *pRef;
    3212           0 :     SwNoTxtNode *pNd = 0;
    3213           0 :     Size aOrigSz;
    3214           0 :     if( pFly->Lower() && pFly->Lower()->IsNoTxtFrm() )
    3215             :     {
    3216           0 :         pRef = pFly->Lower();
    3217           0 :         pNd = ((SwCntntFrm*)pRef)->GetNode()->GetNoTxtNode();
    3218           0 :         aOrigSz = pNd->GetTwipSize();
    3219             :     }
    3220             :     else
    3221             :     {
    3222           0 :         pRef = pFly;
    3223           0 :         aOrigSz = pFly->GetFmt()->GetFrmSize().GetSize();
    3224             :     }
    3225             : 
    3226           0 :     if( aOrigSz.Width() != 0 && aOrigSz.Height() != 0 )
    3227             :     {
    3228           0 :         Point aPos( rPoint );
    3229           0 :         Size aActSz ( pRef == pFly ? pFly->Frm().SSize() : pRef->Prt().SSize() );
    3230           0 :         const MapMode aSrc ( MAP_TWIP );
    3231           0 :         const MapMode aDest( MAP_100TH_MM );
    3232           0 :         aOrigSz = OutputDevice::LogicToLogic( aOrigSz, aSrc, aDest );
    3233           0 :         aActSz  = OutputDevice::LogicToLogic( aActSz,  aSrc, aDest );
    3234           0 :         aPos -= pRef->Frm().Pos();
    3235           0 :         aPos -= pRef->Prt().Pos();
    3236           0 :         aPos    = OutputDevice::LogicToLogic( aPos, aSrc, aDest );
    3237           0 :         sal_uInt32 nFlags = 0;
    3238           0 :         if ( pFly != pRef && pNd->IsGrfNode() )
    3239             :         {
    3240           0 :             const sal_uInt16 nMirror = pNd->GetSwAttrSet().
    3241           0 :                                         GetMirrorGrf().GetValue();
    3242           0 :             if ( RES_MIRROR_GRAPH_BOTH == nMirror )
    3243           0 :                 nFlags = IMAP_MIRROR_HORZ | IMAP_MIRROR_VERT;
    3244           0 :             else if ( RES_MIRROR_GRAPH_VERT == nMirror )
    3245           0 :                 nFlags = IMAP_MIRROR_VERT;
    3246           0 :             else if ( RES_MIRROR_GRAPH_HOR == nMirror )
    3247           0 :                 nFlags = IMAP_MIRROR_HORZ;
    3248             : 
    3249             :         }
    3250           0 :         return ((ImageMap*)rURL.GetMap())->GetHitIMapObject( aOrigSz,
    3251           0 :                                                 aActSz, aPos, nFlags );
    3252             :     }
    3253             : 
    3254           0 :     return 0;
    3255             : }
    3256             : 
    3257             : //UUUU
    3258      285456 : drawinglayer::attribute::SdrAllFillAttributesHelperPtr SwFrmFmt::getSdrAllFillAttributesHelper() const
    3259             : {
    3260      285456 :     if (supportsFullDrawingLayerFillAttributeSet())
    3261             :     {
    3262             :         // create FillAttributes on demand
    3263      266554 :         if(!maFillAttributes.get())
    3264             :         {
    3265       18955 :             const_cast< SwFrmFmt* >(this)->maFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(GetAttrSet()));
    3266             :         }
    3267             :     }
    3268             :     else
    3269             :     {
    3270             :         // FALLBACKBREAKHERE assert wrong usage
    3271             :         OSL_ENSURE(false, "getSdrAllFillAttributesHelper() call only valid for RES_FLYFRMFMT and RES_FRMFMT (!)");
    3272             :     }
    3273             : 
    3274      285456 :     return maFillAttributes;
    3275             : }
    3276             : 
    3277          12 : bool IsFlyFrmFmtInHeader(const SwFrmFmt& rFmt)
    3278             : {
    3279          12 :     const SwFlyFrmFmt* pFlyFrmFmt = dynamic_cast<const SwFlyFrmFmt*>(&rFmt);
    3280          12 :     if (!pFlyFrmFmt)
    3281           2 :         return false;
    3282          10 :     SwFlyFrm* pFlyFrm = const_cast<SwFlyFrm*>(pFlyFrmFmt->GetFrm());
    3283          10 :     if (!pFlyFrm) // fdo#54648: "hidden" drawing object has no layout frame
    3284             :     {
    3285           0 :         return false;
    3286             :     }
    3287          10 :     SwPageFrm* pPageFrm = pFlyFrm->FindPageFrmOfAnchor();
    3288          10 :     SwFrm* pHeader = pPageFrm->Lower();
    3289          10 :     if (pHeader->GetType() == FRM_HEADER)
    3290             :     {
    3291           4 :         const SwFrm* pFrm = pFlyFrm->GetAnchorFrm();
    3292          18 :         while (pFrm)
    3293             :         {
    3294          12 :             if (pFrm == pHeader)
    3295           2 :                 return true;
    3296          10 :             pFrm = pFrm->GetUpper();
    3297             :         }
    3298             :     }
    3299           8 :     return false;
    3300         270 : }
    3301             : 
    3302             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10