LCOV - code coverage report
Current view: top level - sw/source/core/layout - pagedesc.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 238 0.0 %
Date: 2014-04-14 Functions: 0 34 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <editeng/pbinitem.hxx>
      21             : #include <editeng/ulspitem.hxx>
      22             : #include <editeng/boxitem.hxx>
      23             : #include <editeng/brushitem.hxx>
      24             : #include <editeng/shaditem.hxx>
      25             : #include "editeng/frmdiritem.hxx"
      26             : #include <fmtclds.hxx>
      27             : #include <fmtfsize.hxx>
      28             : #include <pagefrm.hxx>
      29             : #include <pagedesc.hxx>
      30             : #include <swtable.hxx>
      31             : #include <frmtool.hxx>
      32             : #include <doc.hxx>
      33             : #include <poolfmt.hrc>
      34             : #include <poolfmt.hxx>
      35             : #include <switerator.hxx>
      36             : 
      37             : using namespace ::com::sun::star;
      38             : 
      39           0 : SwPageDesc::SwPageDesc( const OUString& rName, SwFrmFmt *pFmt, SwDoc *pDc ) :
      40             :     SwModify( 0 ),
      41             :     aDescName( rName ),
      42           0 :     aMaster( pDc->GetAttrPool(), rName, pFmt ),
      43           0 :     aLeft( pDc->GetAttrPool(), rName, pFmt ),
      44           0 :     m_FirstMaster( pDc->GetAttrPool(), rName, pFmt ),
      45           0 :     m_FirstLeft( pDc->GetAttrPool(), rName, pFmt ),
      46             :     aDepend( this, 0 ),
      47             :     pFollow( this ),
      48             :     nRegHeight( 0 ),
      49             :     nRegAscent( 0 ),
      50             :     eUse( (UseOnPage)(nsUseOnPage::PD_ALL | nsUseOnPage::PD_HEADERSHARE | nsUseOnPage::PD_FOOTERSHARE | nsUseOnPage::PD_FIRSTSHARE ) ),
      51             :     bLandscape( sal_False ),
      52             :     bHidden( sal_False ),
      53           0 :     aFtnInfo()
      54             : {
      55           0 : }
      56             : 
      57           0 : SwPageDesc::SwPageDesc( const SwPageDesc &rCpy ) :
      58             :     SwModify( 0 ),
      59             :     aDescName( rCpy.GetName() ),
      60           0 :     aNumType( rCpy.GetNumType() ),
      61           0 :     aMaster( rCpy.GetMaster() ),
      62           0 :     aLeft( rCpy.GetLeft() ),
      63           0 :     m_FirstMaster( rCpy.GetFirstMaster() ),
      64           0 :     m_FirstLeft( rCpy.GetFirstLeft() ),
      65           0 :     aDepend( this, (SwModify*)rCpy.aDepend.GetRegisteredIn() ),
      66             :     pFollow( rCpy.pFollow ),
      67           0 :     nRegHeight( rCpy.GetRegHeight() ),
      68           0 :     nRegAscent( rCpy.GetRegAscent() ),
      69           0 :     eUse( rCpy.ReadUseOn() ),
      70           0 :     bLandscape( rCpy.GetLandscape() ),
      71           0 :     bHidden( rCpy.IsHidden() ),
      72           0 :     aFtnInfo( rCpy.GetFtnInfo() )
      73             : {
      74           0 : }
      75             : 
      76           0 : SwPageDesc & SwPageDesc::operator = (const SwPageDesc & rSrc)
      77             : {
      78           0 :     aDescName = rSrc.aDescName;
      79           0 :     aNumType = rSrc.aNumType;
      80           0 :     aMaster = rSrc.aMaster;
      81           0 :     aLeft = rSrc.aLeft;
      82           0 :     m_FirstMaster = rSrc.m_FirstMaster;
      83           0 :     m_FirstLeft = rSrc.m_FirstLeft;
      84             : 
      85           0 :     if (rSrc.pFollow == &rSrc)
      86           0 :         pFollow = this;
      87             :     else
      88           0 :         pFollow = rSrc.pFollow;
      89             : 
      90           0 :     nRegHeight = rSrc.nRegHeight;
      91           0 :     nRegAscent = rSrc.nRegAscent;
      92           0 :     eUse = rSrc.eUse;
      93           0 :     bLandscape = rSrc.bLandscape;
      94           0 :     return *this;
      95             : }
      96             : 
      97           0 : SwPageDesc::~SwPageDesc()
      98             : {
      99           0 : }
     100             : 
     101             : /// Only the margin is mirrored.
     102             : /// Attributes like borders and so on are copied 1:1.
     103           0 : void SwPageDesc::Mirror()
     104             : {
     105             :     //Only the margins are mirrored, all other values are just copied.
     106           0 :     SvxLRSpaceItem aLR( RES_LR_SPACE );
     107           0 :     const SvxLRSpaceItem &rLR = aMaster.GetLRSpace();
     108           0 :     aLR.SetLeft(  rLR.GetRight() );
     109           0 :     aLR.SetRight( rLR.GetLeft() );
     110             : 
     111           0 :     SfxItemSet aSet( *aMaster.GetAttrSet().GetPool(),
     112           0 :                      aMaster.GetAttrSet().GetRanges() );
     113           0 :     aSet.Put( aLR );
     114           0 :     aSet.Put( aMaster.GetFrmSize() );
     115           0 :     aSet.Put( aMaster.GetPaperBin() );
     116           0 :     aSet.Put( aMaster.GetULSpace() );
     117           0 :     aSet.Put( aMaster.GetBox() );
     118           0 :     aSet.Put( aMaster.GetBackground() );
     119           0 :     aSet.Put( aMaster.GetShadow() );
     120           0 :     aSet.Put( aMaster.GetCol() );
     121           0 :     aSet.Put( aMaster.GetFrmDir() );    // #112217#
     122           0 :     aLeft.SetFmtAttr( aSet );
     123           0 : }
     124             : 
     125           0 : void SwPageDesc::ResetAllAttr( sal_Bool bLeft )
     126             : {
     127           0 :     SwFrmFmt& rFmt = bLeft ? GetLeft() : GetMaster();
     128             : 
     129             :     // #i73790# - method renamed
     130           0 :     rFmt.ResetAllFmtAttr();
     131           0 :     rFmt.SetFmtAttr( SvxFrameDirectionItem(FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR) );
     132           0 : }
     133             : 
     134             : // gets information from Modify
     135           0 : bool SwPageDesc::GetInfo( SfxPoolItem & rInfo ) const
     136             : {
     137           0 :     if( !aMaster.GetInfo( rInfo ) )
     138           0 :         return false;       // found
     139           0 :     if ( !aLeft.GetInfo( rInfo ) )
     140           0 :         return false ;
     141           0 :     if ( !m_FirstMaster.GetInfo( rInfo ) )
     142           0 :         return false;
     143           0 :     return m_FirstLeft.GetInfo( rInfo );
     144             : }
     145             : 
     146             : /// set the style for the grid alignment
     147           0 : void SwPageDesc::SetRegisterFmtColl( const SwTxtFmtColl* pFmt )
     148             : {
     149           0 :     if( pFmt != GetRegisterFmtColl() )
     150             :     {
     151           0 :         if( pFmt )
     152           0 :             ((SwTxtFmtColl*)pFmt)->Add( &aDepend );
     153             :         else
     154           0 :             ((SwTxtFmtColl*)GetRegisterFmtColl())->Remove( &aDepend );
     155             : 
     156           0 :         RegisterChange();
     157             :     }
     158           0 : }
     159             : 
     160             : /// retrieve the style for the grid alignment
     161           0 : const SwTxtFmtColl* SwPageDesc::GetRegisterFmtColl() const
     162             : {
     163           0 :     const SwModify* pReg = aDepend.GetRegisteredIn();
     164           0 :     return (SwTxtFmtColl*)pReg;
     165             : }
     166             : 
     167             : /// notifie all affected page frames
     168           0 : void SwPageDesc::RegisterChange()
     169             : {
     170             :     // #117072# - During destruction of the document <SwDoc>
     171             :     // the page description is modified. Thus, do nothing, if the document
     172             :     // is in destruction respectively if no viewshell exists.
     173           0 :     SwDoc* pDoc = GetMaster().GetDoc();
     174           0 :     if ( !pDoc || pDoc->IsInDtor() )
     175             :     {
     176           0 :         return;
     177             :     }
     178           0 :     SwViewShell* pSh = 0L;
     179           0 :     pDoc->GetEditShell( &pSh );
     180           0 :     if ( !pSh )
     181             :     {
     182           0 :         return;
     183             :     }
     184             : 
     185           0 :     nRegHeight = 0;
     186             :     {
     187           0 :         SwIterator<SwFrm,SwFmt> aIter( GetMaster() );
     188           0 :         for( SwFrm* pLast = aIter.First(); pLast; pLast = aIter.Next() )
     189             :         {
     190           0 :             if( pLast->IsPageFrm() )
     191           0 :                 ((SwPageFrm*)pLast)->PrepareRegisterChg();
     192           0 :         }
     193             :     }
     194             :     {
     195           0 :         SwIterator<SwFrm,SwFmt> aIter( GetLeft() );
     196           0 :         for( SwFrm* pLast = aIter.First(); pLast; pLast = aIter.Next() )
     197             :         {
     198           0 :             if( pLast->IsPageFrm() )
     199           0 :                 ((SwPageFrm*)pLast)->PrepareRegisterChg();
     200           0 :         }
     201             :     }
     202             :     {
     203           0 :         SwIterator<SwFrm,SwFmt> aIter( GetFirstMaster() );
     204           0 :         for( SwFrm* pLast = aIter.First(); pLast; pLast = aIter.Next() )
     205             :         {
     206           0 :             if( pLast->IsPageFrm() )
     207           0 :                 ((SwPageFrm*)pLast)->PrepareRegisterChg();
     208           0 :         }
     209             :     }
     210             :     {
     211           0 :         SwIterator<SwFrm,SwFmt> aIter( GetFirstLeft() );
     212           0 :         for( SwFrm* pLast = aIter.First(); pLast; pLast = aIter.Next() )
     213             :         {
     214           0 :             if( pLast->IsPageFrm() )
     215           0 :                 ((SwPageFrm*)pLast)->PrepareRegisterChg();
     216           0 :         }
     217             :     }
     218             : }
     219             : 
     220             : /// special handling if the style of the grid alignment changes
     221           0 : void SwPageDesc::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
     222             : {
     223           0 :     const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
     224           0 :     NotifyClients( pOld, pNew );
     225             : 
     226           0 :     if ( (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich)
     227           0 :         || isCHRATR(nWhich) || (RES_PARATR_LINESPACING == nWhich) )
     228             :     {
     229           0 :         RegisterChange();
     230             :     }
     231           0 : }
     232             : 
     233           0 : static const SwFrm* lcl_GetFrmOfNode( const SwNode& rNd )
     234             : {
     235             :     SwModify* pMod;
     236           0 :     sal_uInt16 nFrmType = FRM_CNTNT;
     237             : 
     238           0 :     if( rNd.IsCntntNode() )
     239             :     {
     240           0 :         pMod = &(SwCntntNode&)rNd;
     241             :     }
     242           0 :     else if( rNd.IsTableNode() )
     243             :     {
     244           0 :         pMod = ((SwTableNode&)rNd).GetTable().GetFrmFmt();
     245           0 :         nFrmType = FRM_TAB;
     246             :     }
     247             :     else
     248           0 :         pMod = 0;
     249             : 
     250           0 :     Point aNullPt;
     251           0 :     return pMod ? ::GetFrmOfModify( 0, *pMod, nFrmType, &aNullPt, 0, sal_False )
     252           0 :                 : 0;
     253             : }
     254             : 
     255           0 : const SwPageDesc* SwPageDesc::GetPageDescOfNode(const SwNode& rNd)
     256             : {
     257           0 :     const SwPageDesc* pRet = 0;
     258           0 :     const SwFrm* pChkFrm = lcl_GetFrmOfNode( rNd );
     259           0 :     if (pChkFrm && 0 != (pChkFrm = pChkFrm->FindPageFrm()))
     260           0 :         pRet = ((const SwPageFrm*)pChkFrm)->GetPageDesc();
     261           0 :     return pRet;
     262             : }
     263             : 
     264           0 : const SwFrmFmt* SwPageDesc::GetPageFmtOfNode( const SwNode& rNd,
     265             :                                               sal_Bool bCheckForThisPgDc ) const
     266             : {
     267             :     // which PageDescFormat is valid for this node?
     268             :     const SwFrmFmt* pRet;
     269           0 :     const SwFrm* pChkFrm = lcl_GetFrmOfNode( rNd );
     270             : 
     271           0 :     if( pChkFrm && 0 != ( pChkFrm = pChkFrm->FindPageFrm() ))
     272             :     {
     273             :         const SwPageDesc* pPd = bCheckForThisPgDc ? this :
     274           0 :                                 ((SwPageFrm*)pChkFrm)->GetPageDesc();
     275           0 :         pRet = &pPd->GetMaster();
     276             :         OSL_ENSURE( ((SwPageFrm*)pChkFrm)->GetPageDesc() == pPd, "Wrong node for detection of page format!" );
     277             :         // this page is assigned to which format?
     278           0 :         if( !pChkFrm->KnowsFormat(*pRet) )
     279             :         {
     280           0 :             pRet = &pPd->GetLeft();
     281             :             OSL_ENSURE( pChkFrm->KnowsFormat(*pRet), "Wrong node for detection of page format!" );
     282             :         }
     283             :     }
     284             :     else
     285           0 :         pRet = &GetMaster();
     286           0 :     return pRet;
     287             : }
     288             : 
     289           0 : sal_Bool SwPageDesc::IsFollowNextPageOfNode( const SwNode& rNd ) const
     290             : {
     291           0 :     sal_Bool bRet = sal_False;
     292           0 :     if( GetFollow() && this != GetFollow() )
     293             :     {
     294           0 :         const SwFrm* pChkFrm = lcl_GetFrmOfNode( rNd );
     295           0 :         if( pChkFrm && 0 != ( pChkFrm = pChkFrm->FindPageFrm() ) &&
     296           0 :             pChkFrm->IsPageFrm() &&
     297           0 :             ( !pChkFrm->GetNext() || GetFollow() ==
     298           0 :                         ((SwPageFrm*)pChkFrm->GetNext())->GetPageDesc() ))
     299             :             // the page on which the follow points was found
     300           0 :             bRet = sal_True;
     301             :     }
     302           0 :     return bRet;
     303             : }
     304             : 
     305           0 : SwFrmFmt *SwPageDesc::GetLeftFmt(bool const bFirst)
     306             : {
     307           0 :     return (nsUseOnPage::PD_LEFT & eUse)
     308             :             ? ((bFirst) ? &m_FirstLeft : &aLeft)
     309           0 :             : 0;
     310             : }
     311             : 
     312           0 : SwFrmFmt *SwPageDesc::GetRightFmt(bool const bFirst)
     313             : {
     314           0 :     return (nsUseOnPage::PD_RIGHT & eUse)
     315             :             ? ((bFirst) ? &m_FirstMaster : &aMaster)
     316           0 :             : 0;
     317             : }
     318             : 
     319           0 : sal_Bool SwPageDesc::IsFirstShared() const
     320             : {
     321           0 :     return eUse & nsUseOnPage::PD_FIRSTSHARE ? sal_True : sal_False;
     322             : }
     323             : 
     324           0 : void SwPageDesc::ChgFirstShare( sal_Bool bNew )
     325             : {
     326           0 :     if ( bNew )
     327           0 :         eUse = (UseOnPage) (eUse | nsUseOnPage::PD_FIRSTSHARE);
     328             :     else
     329           0 :         eUse = (UseOnPage) (eUse & nsUseOnPage::PD_NOFIRSTSHARE);
     330           0 : }
     331             : 
     332           0 : SwPageDesc* SwPageDesc::GetByName(SwDoc& rDoc, const OUString& rName)
     333             : {
     334           0 :     const sal_uInt16 nDCount = rDoc.GetPageDescCnt();
     335             : 
     336           0 :     for( sal_uInt16 i = 0; i < nDCount; i++ )
     337             :     {
     338           0 :         SwPageDesc* pDsc = &rDoc.GetPageDesc( i );
     339           0 :         if(pDsc->GetName() == rName)
     340             :         {
     341           0 :             return pDsc;
     342             :         }
     343             :     }
     344             : 
     345           0 :     for( sal_Int32 i = RC_POOLPAGEDESC_BEGIN; i <= STR_POOLPAGE_LANDSCAPE; ++i)
     346             :     {
     347           0 :         if (rName==SW_RESSTR(i))
     348             :         {
     349             :             return rDoc.GetPageDescFromPool( static_cast< sal_uInt16 >(
     350           0 :                         i - RC_POOLPAGEDESC_BEGIN + RES_POOLPAGE_BEGIN) );
     351             :         }
     352             :     }
     353             : 
     354           0 :     return 0;
     355             : }
     356             : 
     357           0 : SwPageFtnInfo::SwPageFtnInfo() :
     358             :     nMaxHeight( 0 ),
     359             :     nLineWidth(10),
     360             :     eLineStyle( table::BorderLineStyle::SOLID ),
     361             :     aWidth( 25, 100 ),
     362             :     nTopDist( 57 ),         //1mm
     363           0 :     nBottomDist( 57 )
     364             : {
     365           0 :     eAdj = FRMDIR_HORI_RIGHT_TOP == GetDefaultFrameDirection(GetAppLanguage()) ?
     366             :            FTNADJ_RIGHT :
     367           0 :            FTNADJ_LEFT;
     368           0 : }
     369             : 
     370           0 : SwPageFtnInfo::SwPageFtnInfo( const SwPageFtnInfo &rCpy ) :
     371           0 :     nMaxHeight( rCpy.GetHeight() ),
     372             :     nLineWidth(rCpy.nLineWidth),
     373             :     eLineStyle(rCpy.eLineStyle),
     374             :     aLineColor(rCpy.aLineColor),
     375           0 :     aWidth( rCpy.GetWidth() ),
     376           0 :     eAdj( rCpy.GetAdj() ),
     377           0 :     nTopDist( rCpy.GetTopDist() ),
     378           0 :     nBottomDist( rCpy.GetBottomDist() )
     379             : {
     380           0 : }
     381             : 
     382           0 : SwPageFtnInfo &SwPageFtnInfo::operator=( const SwPageFtnInfo& rCpy )
     383             : {
     384           0 :     nMaxHeight  = rCpy.GetHeight();
     385           0 :     nLineWidth  = rCpy.nLineWidth;
     386           0 :     eLineStyle  = rCpy.eLineStyle;
     387           0 :     aLineColor  = rCpy.aLineColor;
     388           0 :     aWidth      = rCpy.GetWidth();
     389           0 :     eAdj        = rCpy.GetAdj();
     390           0 :     nTopDist    = rCpy.GetTopDist();
     391           0 :     nBottomDist = rCpy.GetBottomDist();
     392           0 :     return *this;
     393             : }
     394             : 
     395           0 : sal_Bool SwPageFtnInfo::operator==( const SwPageFtnInfo& rCmp ) const
     396             : {
     397           0 :     return ( nMaxHeight == rCmp.GetHeight() &&
     398           0 :              nLineWidth == rCmp.nLineWidth &&
     399           0 :              eLineStyle == rCmp.eLineStyle &&
     400           0 :              aLineColor == rCmp.aLineColor &&
     401           0 :              aWidth     == rCmp.GetWidth() &&
     402           0 :              eAdj       == rCmp.GetAdj() &&
     403           0 :              nTopDist   == rCmp.GetTopDist() &&
     404           0 :              nBottomDist== rCmp.GetBottomDist() );
     405             : }
     406             : 
     407           0 : SwPageDescExt::SwPageDescExt(const SwPageDesc & rPageDesc, SwDoc * _pDoc)
     408           0 :     : aPageDesc(rPageDesc), pDoc(_pDoc)
     409             : {
     410           0 :     SetPageDesc(rPageDesc);
     411           0 : }
     412             : 
     413           0 : SwPageDescExt::SwPageDescExt(const SwPageDescExt & rSrc)
     414           0 :     : aPageDesc(rSrc.aPageDesc), pDoc(rSrc.pDoc)
     415             : {
     416           0 :     SetPageDesc(rSrc.aPageDesc);
     417           0 : }
     418             : 
     419           0 : SwPageDescExt::~SwPageDescExt()
     420             : {
     421           0 : }
     422             : 
     423           0 : OUString SwPageDescExt::GetName() const
     424             : {
     425           0 :     return aPageDesc.GetName();
     426             : }
     427             : 
     428           0 : void SwPageDescExt::SetPageDesc(const SwPageDesc & _aPageDesc)
     429             : {
     430           0 :     aPageDesc = _aPageDesc;
     431             : 
     432           0 :     if (aPageDesc.GetFollow())
     433           0 :         sFollow = aPageDesc.GetFollow()->GetName();
     434           0 : }
     435             : 
     436           0 : SwPageDescExt & SwPageDescExt::operator = (const SwPageDesc & rSrc)
     437             : {
     438           0 :     SetPageDesc(rSrc);
     439             : 
     440           0 :     return *this;
     441             : }
     442             : 
     443           0 : SwPageDescExt & SwPageDescExt::operator = (const SwPageDescExt & rSrc)
     444             : {
     445           0 :     SetPageDesc(rSrc.aPageDesc);
     446             : 
     447           0 :     return *this;
     448             : }
     449             : 
     450           0 : SwPageDescExt::operator SwPageDesc() const
     451             : {
     452           0 :     SwPageDesc aResult(aPageDesc);
     453             : 
     454           0 :     SwPageDesc * pPageDesc = pDoc->GetPageDesc(sFollow);
     455             : 
     456           0 :     if ( 0 != pPageDesc )
     457           0 :         aResult.SetFollow(pPageDesc);
     458             : 
     459           0 :     return aResult;
     460             : }
     461             : 
     462           0 : SwPageDescs::~SwPageDescs()
     463             : {
     464           0 :     for(const_iterator it = begin(); it != end(); ++it)
     465           0 :         delete *it;
     466           0 : }
     467             : 
     468             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10