LCOV - code coverage report
Current view: top level - sw/source/core/txtnode - txtatr2.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 132 145 91.0 %
Date: 2014-11-03 Functions: 31 48 64.6 %
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 <hintids.hxx>
      21             : #include <hints.hxx>
      22             : #include <sfx2/objsh.hxx>
      23             : #include <editeng/xmlcnitm.hxx>
      24             : #include <editeng/twolinesitem.hxx>
      25             : #include <txtinet.hxx>
      26             : #include <txtatr.hxx>
      27             : #include <fchrfmt.hxx>
      28             : #include <fmtinfmt.hxx>
      29             : #include <charfmt.hxx>
      30             : #include <ndtxt.hxx>
      31             : #include <poolfmt.hxx>
      32             : #include <doc.hxx>
      33             : #include <fmtruby.hxx>
      34             : #include <fmtmeta.hxx>
      35             : #include <IDocumentState.hxx>
      36             : #include <IDocumentStylePoolAccess.hxx>
      37             : 
      38        4584 : TYPEINIT1(SwTxtINetFmt,SwClient);
      39         432 : TYPEINIT1(SwTxtRuby,SwClient);
      40             : 
      41       12362 : SwTxtCharFmt::SwTxtCharFmt( SwFmtCharFmt& rAttr,
      42             :                     sal_Int32 nStt, sal_Int32 nEnde )
      43             :     : SwTxtAttr( rAttr, nStt )
      44             :     , SwTxtAttrEnd( rAttr, nStt, nEnde )
      45             :     , m_pTxtNode( 0 )
      46       12362 :     , m_nSortNumber( 0 )
      47             : {
      48       12362 :     rAttr.pTxtAttr = this;
      49       12362 :     SetCharFmtAttr( true );
      50       12362 : }
      51             : 
      52       24724 : SwTxtCharFmt::~SwTxtCharFmt( )
      53             : {
      54       24724 : }
      55             : 
      56        8944 : void SwTxtCharFmt::ModifyNotification( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
      57             : {
      58        8944 :     const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
      59             :     OSL_ENSURE(  isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
      60             :              || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
      61             :         "SwTxtCharFmt::Modify(): unknown Modify");
      62             : 
      63        8944 :     if ( m_pTxtNode )
      64             :     {
      65             :         SwUpdateAttr aUpdateAttr(
      66        8806 :             GetStart(),
      67        8806 :             *GetEnd(),
      68       26418 :             nWhich);
      69             : 
      70        8806 :         m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
      71             :     }
      72        8944 : }
      73             : 
      74          12 : bool SwTxtCharFmt::GetInfo( SfxPoolItem& rInfo ) const
      75             : {
      76          24 :     if ( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
      77          12 :         &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
      78             :     {
      79           0 :         return true;
      80             :     }
      81             : 
      82          12 :     static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
      83          12 :     return false;
      84             : }
      85             : 
      86        3446 : SwTxtAttrNesting::SwTxtAttrNesting( SfxPoolItem & i_rAttr,
      87             :             const sal_Int32 i_nStart, const sal_Int32 i_nEnd )
      88             :     : SwTxtAttr( i_rAttr, i_nStart )
      89        3446 :     , SwTxtAttrEnd( i_rAttr, i_nStart, i_nEnd )
      90             : {
      91        3446 :     SetDontExpand( true );  // never expand this attribute
      92             :     // lock the expand flag: simple guarantee that nesting will not be
      93             :     // invalidated by expand operations
      94        3446 :     SetLockExpandFlag( true );
      95        3446 :     SetDontExpandStartAttr( true );
      96        3446 :     SetNesting( true );
      97        3446 : }
      98             : 
      99        3446 : SwTxtAttrNesting::~SwTxtAttrNesting()
     100             : {
     101        3446 : }
     102             : 
     103        2864 : SwTxtINetFmt::SwTxtINetFmt( SwFmtINetFmt& rAttr,
     104             :                             sal_Int32 nStart, sal_Int32 nEnd )
     105             :     : SwTxtAttr( rAttr, nStart )
     106             :     , SwTxtAttrNesting( rAttr, nStart, nEnd )
     107             :     , SwClient( 0 )
     108             :     , m_pTxtNode( 0 )
     109             :     , m_bVisited( false )
     110        2864 :     , m_bVisitedValid( false )
     111             : {
     112        2864 :     rAttr.mpTxtAttr  = this;
     113        2864 :     SetCharFmtAttr( true );
     114        2864 : }
     115             : 
     116        5728 : SwTxtINetFmt::~SwTxtINetFmt( )
     117             : {
     118        5728 : }
     119             : 
     120       27431 : SwCharFmt* SwTxtINetFmt::GetCharFmt()
     121             : {
     122       27431 :     const SwFmtINetFmt& rFmt = SwTxtAttrEnd::GetINetFmt();
     123       27431 :     SwCharFmt* pRet = NULL;
     124             : 
     125       27431 :     if (!rFmt.GetValue().isEmpty())
     126             :     {
     127       27431 :         SwDoc* pDoc = GetTxtNode().GetDoc();
     128       27431 :         if( !IsVisitedValid() )
     129             :         {
     130        2832 :             SetVisited( pDoc->IsVisitedURL( rFmt.GetValue() ) );
     131        2832 :             SetVisitedValid( true );
     132             :         }
     133             : 
     134       27431 :         const sal_uInt16 nId = IsVisited() ? rFmt.GetVisitedFmtId() : rFmt.GetINetFmtId();
     135       27431 :         const OUString& rStr = IsVisited() ? rFmt.GetVisitedFmt() : rFmt.GetINetFmt();
     136       27431 :         if (rStr.isEmpty())
     137             :         {
     138             :             OSL_ENSURE( false, "<SwTxtINetFmt::GetCharFmt()> - missing character format at hyperlink attribute");
     139             :         }
     140             : 
     141             :         // JP 10.02.2000, Bug 72806: dont modify the doc for getting the
     142             :         //      correct charstyle.
     143       27431 :         bool bResetMod = !pDoc->getIDocumentState().IsModified();
     144       27431 :         Link aOle2Lnk;
     145       27431 :         if ( bResetMod )
     146             :         {
     147       17248 :             aOle2Lnk = pDoc->GetOle2Link();
     148       17248 :             ( (SwDoc*) pDoc )->SetOle2Link( Link() );
     149             :         }
     150             : 
     151       27431 :         pRet = IsPoolUserFmt( nId )
     152             :                ? ( (SwDoc*) pDoc )->FindCharFmtByName( rStr )
     153       27431 :                : ( (SwDoc*) pDoc )->getIDocumentStylePoolAccess().GetCharFmtFromPool( nId );
     154             : 
     155       27431 :         if ( bResetMod )
     156             :         {
     157       17248 :             ( (SwDoc*) pDoc )->getIDocumentState().ResetModified();
     158       17248 :             ( (SwDoc*) pDoc )->SetOle2Link( aOle2Lnk );
     159             :         }
     160             :     }
     161             : 
     162       27431 :     if ( pRet )
     163       26969 :         pRet->Add( this );
     164         462 :     else if ( GetRegisteredIn() )
     165           4 :         GetRegisteredInNonConst()->Remove( this );
     166             : 
     167       27431 :     return pRet;
     168             : }
     169             : 
     170        1512 : void SwTxtINetFmt::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
     171             : {
     172        1512 :     const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
     173             :     OSL_ENSURE(  isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
     174             :              || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
     175             :         "SwTxtINetFmt::Modify(): unknown Modify");
     176             : 
     177        1512 :     if ( m_pTxtNode )
     178             :     {
     179             :         SwUpdateAttr aUpdateAttr(
     180        1512 :             GetStart(),
     181        1512 :             *GetEnd(),
     182        4536 :             nWhich);
     183             : 
     184        1512 :         m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
     185             :     }
     186        1512 : }
     187             : 
     188             :     // erfrage vom Modify Informationen
     189           0 : bool SwTxtINetFmt::GetInfo( SfxPoolItem& rInfo ) const
     190             : {
     191           0 :     if ( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
     192           0 :         &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
     193             :     {
     194           0 :         return true;
     195             :     }
     196             : 
     197           0 :     static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
     198           0 :     return false;
     199             : }
     200             : 
     201           0 : bool SwTxtINetFmt::IsProtect( ) const
     202             : {
     203           0 :     return m_pTxtNode && m_pTxtNode->IsProtect();
     204             : }
     205             : 
     206         360 : SwTxtRuby::SwTxtRuby( SwFmtRuby& rAttr,
     207             :                       sal_Int32 nStart, sal_Int32 nEnd )
     208             :     : SwTxtAttr( rAttr, nStart )
     209             :     , SwTxtAttrNesting( rAttr, nStart, nEnd )
     210             :     , SwClient( 0 )
     211         360 :     , m_pTxtNode( 0 )
     212             : {
     213         360 :     rAttr.pTxtAttr  = this;
     214         360 : }
     215             : 
     216         720 : SwTxtRuby::~SwTxtRuby()
     217             : {
     218         720 : }
     219             : 
     220         144 : void SwTxtRuby::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
     221             : {
     222         144 :     const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
     223             :     OSL_ENSURE(  isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
     224             :              || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
     225             :         "SwTxtRuby::Modify(): unknown Modify");
     226             : 
     227         144 :     if ( m_pTxtNode )
     228             :     {
     229             :         SwUpdateAttr aUpdateAttr(
     230         144 :             GetStart(),
     231         144 :             *GetEnd(),
     232         432 :             nWhich);
     233             : 
     234         144 :         m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
     235             :     }
     236         144 : }
     237             : 
     238           2 : bool SwTxtRuby::GetInfo( SfxPoolItem& rInfo ) const
     239             : {
     240           4 :     if( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
     241           2 :         &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
     242             :     {
     243           0 :         return true;
     244             :     }
     245             : 
     246           2 :     static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
     247           2 :     return false;
     248             : }
     249             : 
     250         336 : SwCharFmt* SwTxtRuby::GetCharFmt()
     251             : {
     252         336 :     const SwFmtRuby& rFmt = SwTxtAttrEnd::GetRuby();
     253         336 :     SwCharFmt* pRet = 0;
     254             : 
     255         336 :     if( !rFmt.GetText().isEmpty() )
     256             :     {
     257         336 :         const SwDoc* pDoc = GetTxtNode().GetDoc();
     258         336 :         const OUString rStr = rFmt.GetCharFmtName();
     259         336 :         const sal_uInt16 nId = rStr.isEmpty()
     260             :                              ? static_cast<sal_uInt16>(RES_POOLCHR_RUBYTEXT)
     261         336 :                              : rFmt.GetCharFmtId();
     262             : 
     263             :         // JP 10.02.2000, Bug 72806: dont modify the doc for getting the
     264             :         //              correct charstyle.
     265         336 :         const bool bResetMod = !pDoc->getIDocumentState().IsModified();
     266         336 :         Link aOle2Lnk;
     267         336 :         if( bResetMod )
     268             :         {
     269          12 :             aOle2Lnk = pDoc->GetOle2Link();
     270          12 :             ((SwDoc*)pDoc)->SetOle2Link( Link() );
     271             :         }
     272             : 
     273         336 :         pRet = IsPoolUserFmt( nId )
     274             :                 ? ((SwDoc*)pDoc)->FindCharFmtByName( rStr )
     275         336 :                 : ((SwDoc*)pDoc)->getIDocumentStylePoolAccess().GetCharFmtFromPool( nId );
     276             : 
     277         336 :         if( bResetMod )
     278             :         {
     279          12 :             ((SwDoc*)pDoc)->getIDocumentState().ResetModified();
     280          12 :             ((SwDoc*)pDoc)->SetOle2Link( aOle2Lnk );
     281         336 :         }
     282             :     }
     283             : 
     284         336 :     if( pRet )
     285         336 :         pRet->Add( this );
     286           0 :     else if( GetRegisteredIn() )
     287           0 :         GetRegisteredInNonConst()->Remove( this );
     288             : 
     289         336 :     return pRet;
     290             : }
     291             : 
     292             : SwTxtMeta *
     293         194 : SwTxtMeta::CreateTxtMeta(
     294             :     ::sw::MetaFieldManager & i_rTargetDocManager,
     295             :     SwTxtNode *const i_pTargetTxtNode,
     296             :     SwFmtMeta & i_rAttr,
     297             :     sal_Int32 const i_nStart,
     298             :     sal_Int32 const i_nEnd,
     299             :     bool const i_bIsCopy)
     300             : {
     301         194 :     if (i_bIsCopy)
     302             :     {   // i_rAttr is already cloned, now call DoCopy to copy the sw::Meta
     303             :         OSL_ENSURE(i_pTargetTxtNode, "cannot copy Meta without target node");
     304           0 :         i_rAttr.DoCopy(i_rTargetDocManager, *i_pTargetTxtNode);
     305             :     }
     306         194 :     SwTxtMeta *const pTxtMeta(new SwTxtMeta(i_rAttr, i_nStart, i_nEnd));
     307         194 :     return pTxtMeta;
     308             : }
     309             : 
     310         194 : SwTxtMeta::SwTxtMeta( SwFmtMeta & i_rAttr,
     311             :         const sal_Int32 i_nStart, const sal_Int32 i_nEnd )
     312             :     : SwTxtAttr( i_rAttr, i_nStart )
     313         194 :     , SwTxtAttrNesting( i_rAttr, i_nStart, i_nEnd )
     314             : {
     315         194 :     i_rAttr.SetTxtAttr( this );
     316         194 :     SetHasDummyChar(true);
     317         194 : }
     318             : 
     319         582 : SwTxtMeta::~SwTxtMeta()
     320             : {
     321         194 :     SwFmtMeta & rFmtMeta( static_cast<SwFmtMeta &>(GetAttr()) );
     322         194 :     if (rFmtMeta.GetTxtAttr() == this)
     323             :     {
     324         194 :         rFmtMeta.SetTxtAttr(0);
     325             :     }
     326         388 : }
     327             : 
     328         388 : void SwTxtMeta::ChgTxtNode(SwTxtNode * const pNode)
     329             : {
     330         388 :     SwFmtMeta & rFmtMeta( static_cast<SwFmtMeta &>(GetAttr()) );
     331         388 :     if (rFmtMeta.GetTxtAttr() == this)
     332             :     {
     333         388 :         rFmtMeta.NotifyChangeTxtNode(pNode);
     334             :     }
     335         658 : }
     336             : 
     337             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10