LCOV - code coverage report
Current view: top level - sw/source/core/edit - editsh.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 121 543 22.3 %
Date: 2015-06-13 12:38:46 Functions: 12 58 20.7 %
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 <vcl/cmdevt.hxx>
      22             : #include <unotools/charclass.hxx>
      23             : #include <comphelper/processfactory.hxx>
      24             : #include <comphelper/string.hxx>
      25             : #include <unotools/transliterationwrapper.hxx>
      26             : #include <swwait.hxx>
      27             : #include <fmtsrnd.hxx>
      28             : #include <fmtinfmt.hxx>
      29             : #include <txtinet.hxx>
      30             : #include <frmfmt.hxx>
      31             : #include <charfmt.hxx>
      32             : #include <doc.hxx>
      33             : #include <IDocumentUndoRedo.hxx>
      34             : #include <IDocumentSettingAccess.hxx>
      35             : #include <IDocumentLinksAdministration.hxx>
      36             : #include <IDocumentFieldsAccess.hxx>
      37             : #include <IDocumentStatistics.hxx>
      38             : #include <IDocumentState.hxx>
      39             : #include <docary.hxx>
      40             : #include <editsh.hxx>
      41             : #include <frame.hxx>
      42             : #include <cntfrm.hxx>
      43             : #include <pam.hxx>
      44             : #include <ndtxt.hxx>
      45             : #include <grfatr.hxx>
      46             : #include <flyfrm.hxx>
      47             : #include <swtable.hxx>
      48             : #include <swundo.hxx>
      49             : #include <calc.hxx>
      50             : #include <edimp.hxx>
      51             : #include <ndgrf.hxx>
      52             : #include <ndole.hxx>
      53             : #include <txtfrm.hxx>
      54             : #include <rootfrm.hxx>
      55             : #include <extinput.hxx>
      56             : #include <crsskip.hxx>
      57             : #include <scriptinfo.hxx>
      58             : #include <unocrsrhelper.hxx>
      59             : #include <section.hxx>
      60             : #include <unochart.hxx>
      61             : #include <numrule.hxx>
      62             : #include <SwNodeNum.hxx>
      63             : #include <unocrsr.hxx>
      64             : #include <calbck.hxx>
      65             : 
      66             : using namespace com::sun::star;
      67             : 
      68           0 : void SwEditShell::Insert( sal_Unicode c, bool bOnlyCurrCrsr )
      69             : {
      70           0 :     StartAllAction();
      71           0 :     for(SwPaM& rPaM : GetCrsr()->GetRingContainer())
      72             :     {
      73           0 :         const bool bSuccess = GetDoc()->getIDocumentContentOperations().InsertString(rPaM, OUString(c));
      74             :         OSL_ENSURE( bSuccess, "Doc->Insert() failed." );
      75             :         (void) bSuccess;
      76             : 
      77           0 :         SaveTableBoxContent( rPaM.GetPoint() );
      78           0 :         if( bOnlyCurrCrsr )
      79           0 :             break;
      80             : 
      81             :     }
      82             : 
      83           0 :     EndAllAction();
      84           0 : }
      85             : 
      86          18 : void SwEditShell::Insert2(const OUString &rStr, const bool bForceExpandHints )
      87             : {
      88          18 :     StartAllAction();
      89             :     {
      90             :         const SwInsertFlags nInsertFlags =
      91             :             (bForceExpandHints)
      92          18 :             ? (SwInsertFlags::FORCEHINTEXPAND | SwInsertFlags::EMPTYEXPAND)
      93          36 :             : SwInsertFlags::EMPTYEXPAND;
      94             : 
      95          36 :         for(SwPaM& rCurrentCrsr : getShellCrsr( true )->GetRingContainer())
      96             :         {
      97             :             //OPT: GetSystemCharSet
      98             :             const bool bSuccess =
      99          18 :                 GetDoc()->getIDocumentContentOperations().InsertString(rCurrentCrsr, rStr, nInsertFlags);
     100             :             OSL_ENSURE( bSuccess, "Doc->Insert() failed." );
     101             : 
     102          18 :             if (bSuccess)
     103             :             {
     104          18 :                 GetDoc()->UpdateRsid( rCurrentCrsr, rStr.getLength() );
     105             : 
     106             :                 // Set paragraph rsid if beginning of paragraph
     107             :                 SwTextNode *const pTextNode =
     108          18 :                     rCurrentCrsr.GetPoint()->nNode.GetNode().GetTextNode();
     109          18 :                 if( pTextNode && pTextNode->Len() == 1)
     110           4 :                     GetDoc()->UpdateParRsid( pTextNode );
     111             :             }
     112             : 
     113          18 :             SaveTableBoxContent( rCurrentCrsr.GetPoint() );
     114             : 
     115             :         }
     116             :     }
     117             : 
     118             :     // calculate cursor bidi level
     119          18 :     SwCursor* pTmpCrsr = _GetCrsr();
     120          18 :     const bool bDoNotSetBidiLevel = ! pTmpCrsr ||
     121          36 :                                 ( 0 != dynamic_cast<SwUnoCrsr*>(pTmpCrsr) );
     122             : 
     123          18 :     if ( ! bDoNotSetBidiLevel )
     124             :     {
     125          18 :         SwNode& rNode = pTmpCrsr->GetPoint()->nNode.GetNode();
     126          18 :         if ( rNode.IsTextNode() )
     127             :         {
     128          18 :             SwIndex& rIdx = pTmpCrsr->GetPoint()->nContent;
     129          18 :             sal_Int32 nPos = rIdx.GetIndex();
     130          18 :             sal_Int32 nPrevPos = nPos;
     131          18 :             if ( nPrevPos )
     132          18 :                 --nPrevPos;
     133             : 
     134          18 :             SwScriptInfo* pSI = SwScriptInfo::GetScriptInfo( static_cast<SwTextNode&>(rNode), true );
     135             : 
     136          18 :             sal_uInt8 nLevel = 0;
     137          18 :             if ( ! pSI )
     138             :             {
     139             :                 // seems to be an empty paragraph.
     140          10 :                 Point aPt;
     141             :                 SwContentFrm* pFrm =
     142          10 :                         static_cast<SwTextNode&>(rNode).getLayoutFrm( GetLayout(), &aPt, pTmpCrsr->GetPoint(),
     143          10 :                                                     false );
     144             : 
     145          10 :                 SwScriptInfo aScriptInfo;
     146          10 :                 aScriptInfo.InitScriptInfo( static_cast<SwTextNode&>(rNode), pFrm->IsRightToLeft() );
     147          10 :                 nLevel = aScriptInfo.DirType( nPrevPos );
     148             :             }
     149             :             else
     150             :             {
     151           8 :                 if ( COMPLETE_STRING != pSI->GetInvalidityA() )
     152           8 :                     pSI->InitScriptInfo( static_cast<SwTextNode&>(rNode) );
     153           8 :                 nLevel = pSI->DirType( nPrevPos );
     154             :             }
     155             : 
     156          18 :             pTmpCrsr->SetCrsrBidiLevel( nLevel );
     157             :         }
     158             :     }
     159             : 
     160          18 :     SetInFrontOfLabel( false ); // #i27615#
     161             : 
     162          18 :     EndAllAction();
     163          18 : }
     164             : 
     165           0 : void SwEditShell::Overwrite(const OUString &rStr)
     166             : {
     167           0 :     StartAllAction();
     168           0 :     for(SwPaM& rPaM : GetCrsr()->GetRingContainer())
     169             :     {
     170           0 :         if( !GetDoc()->getIDocumentContentOperations().Overwrite(rPaM, rStr ) )
     171             :         {
     172             :             OSL_FAIL( "Doc->getIDocumentContentOperations().Overwrite(Str) failed." );
     173             :         }
     174           0 :         SaveTableBoxContent( rPaM.GetPoint() );
     175             :     }
     176           0 :     EndAllAction();
     177           0 : }
     178             : 
     179          48 : long SwEditShell::SplitNode( bool bAutoFormat, bool bCheckTableStart )
     180             : {
     181          48 :     StartAllAction();
     182          48 :     GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL);
     183             : 
     184          96 :     for(SwPaM& rPaM : GetCrsr()->GetRingContainer())
     185             :     {
     186             :         // Here, a table cell becomes a normal text cell.
     187          48 :         GetDoc()->ClearBoxNumAttrs( rPaM.GetPoint()->nNode );
     188          48 :         GetDoc()->getIDocumentContentOperations().SplitNode( *rPaM.GetPoint(), bCheckTableStart );
     189             :     }
     190             : 
     191          48 :     GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL);
     192             : 
     193          48 :     if( bAutoFormat )
     194           0 :         AutoFormatBySplitNode();
     195             : 
     196          48 :     ClearTableBoxContent();
     197             : 
     198          48 :     EndAllAction();
     199          48 :     return 1L;
     200             : }
     201             : 
     202           0 : bool SwEditShell::AppendTextNode()
     203             : {
     204           0 :     bool bRet = false;
     205           0 :     StartAllAction();
     206           0 :     GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL);
     207             : 
     208           0 :     for(SwPaM& rPaM : GetCrsr()->GetRingContainer())
     209             :     {
     210           0 :         GetDoc()->ClearBoxNumAttrs( rPaM.GetPoint()->nNode );
     211           0 :         bRet = GetDoc()->getIDocumentContentOperations().AppendTextNode( *rPaM.GetPoint()) || bRet;
     212             :     }
     213             : 
     214           0 :     GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL);
     215             : 
     216           0 :     ClearTableBoxContent();
     217             : 
     218           0 :     EndAllAction();
     219           0 :     return bRet;
     220             : }
     221             : 
     222             : // the returned SwGrfNode pointer is used in GetGraphic() and GetGraphicSize()
     223           0 : SwGrfNode * SwEditShell::_GetGrfNode() const
     224             : {
     225           0 :     SwGrfNode *pGrfNode = 0;
     226           0 :     SwPaM* pCrsr = GetCrsr();
     227           0 :     if( !pCrsr->HasMark() ||
     228           0 :         pCrsr->GetPoint()->nNode == pCrsr->GetMark()->nNode )
     229           0 :         pGrfNode = pCrsr->GetPoint()->nNode.GetNode().GetGrfNode();
     230             : 
     231           0 :     return pGrfNode;
     232             : }
     233             : 
     234             : // returns a Graphic pointer if CurCrsr->GetPoint() points to a SwGrfNode and
     235             : // GetMark is not set or points to the same Graphic
     236           0 : const Graphic* SwEditShell::GetGraphic( bool bWait ) const
     237             : {
     238           0 :     SwGrfNode* pGrfNode = _GetGrfNode();
     239           0 :     const Graphic* pGrf( 0L );
     240           0 :     if ( pGrfNode )
     241             :     {
     242           0 :         pGrf = &(pGrfNode->GetGrf(bWait && GRAPHIC_DEFAULT == pGrfNode->GetGrf().GetType()));
     243             :     }
     244           0 :     return pGrf;
     245             : }
     246             : 
     247           0 : bool SwEditShell::IsGrfSwapOut( bool bOnlyLinked ) const
     248             : {
     249           0 :     SwGrfNode *pGrfNode = _GetGrfNode();
     250           0 :     return pGrfNode &&
     251           0 :         (bOnlyLinked ? ( pGrfNode->IsLinkedFile() &&
     252           0 :                         ( GRAPHIC_DEFAULT == pGrfNode->GetGrfObj().GetType()||
     253           0 :                           pGrfNode->GetGrfObj().IsSwappedOut()))
     254           0 :                      : pGrfNode->GetGrfObj().IsSwappedOut());
     255             : }
     256             : 
     257           0 : const GraphicObject* SwEditShell::GetGraphicObj() const
     258             : {
     259           0 :     SwGrfNode* pGrfNode = _GetGrfNode();
     260           0 :     return pGrfNode ? &(pGrfNode->GetGrfObj()) : 0L;
     261             : }
     262             : 
     263           0 : sal_uInt16 SwEditShell::GetGraphicType() const
     264             : {
     265           0 :     SwGrfNode *pGrfNode = _GetGrfNode();
     266           0 :     return static_cast<sal_uInt16>(pGrfNode ? pGrfNode->GetGrfObj().GetType() : GRAPHIC_NONE);
     267             : }
     268             : 
     269             : // returns the size of a graphic in <rSz> if CurCrsr->GetPoint() points to a SwGrfNode and
     270             : // GetMark is not set or points to the same graphic
     271           0 : bool SwEditShell::GetGrfSize(Size& rSz) const
     272             : {
     273             :     SwNoTextNode* pNoTextNd;
     274           0 :     SwPaM* pCurrentCrsr = GetCrsr();
     275           0 :     if( ( !pCurrentCrsr->HasMark()
     276           0 :          || pCurrentCrsr->GetPoint()->nNode == pCurrentCrsr->GetMark()->nNode )
     277           0 :          && 0 != ( pNoTextNd = pCurrentCrsr->GetNode().GetNoTextNode() ) )
     278             :     {
     279           0 :         rSz = pNoTextNd->GetTwipSize();
     280           0 :         return true;
     281             :     }
     282           0 :     return false;
     283             : 
     284             : }
     285             : 
     286             : /// Read again if graphic is not OK and replace old one
     287           0 : void SwEditShell::ReRead( const OUString& rGrfName, const OUString& rFltName,
     288             :                     const Graphic* pGraphic, const GraphicObject* pGrfObj )
     289             : {
     290           0 :     StartAllAction();
     291           0 :     mpDoc->getIDocumentContentOperations().ReRead( *GetCrsr(), rGrfName, rFltName, pGraphic, pGrfObj );
     292           0 :     EndAllAction();
     293           0 : }
     294             : 
     295             : /// Returns the name and the filter name of a graphic if the pointer is on a graphic.
     296             : /// If a String-pointer is != 0 then return corresponding name.
     297           0 : void SwEditShell::GetGrfNms( OUString* pGrfName, OUString* pFltName,
     298             :                             const SwFlyFrameFormat* pFormat ) const
     299             : {
     300             :     OSL_ENSURE( pGrfName || pFltName, "No parameters" );
     301           0 :     if( pFormat )
     302           0 :         SwDoc::GetGrfNms( *pFormat, pGrfName, pFltName );
     303             :     else
     304             :     {
     305           0 :         SwGrfNode *pGrfNode = _GetGrfNode();
     306           0 :         if( pGrfNode && pGrfNode->IsLinkedFile() )
     307           0 :             pGrfNode->GetFileFilterNms( pGrfName, pFltName );
     308             :     }
     309           0 : }
     310             : 
     311           0 : const tools::PolyPolygon *SwEditShell::GetGraphicPolygon() const
     312             : {
     313           0 :     SwNoTextNode *pNd = GetCrsr()->GetNode().GetNoTextNode();
     314           0 :     return pNd->HasContour();
     315             : }
     316             : 
     317           0 : void SwEditShell::SetGraphicPolygon( const tools::PolyPolygon *pPoly )
     318             : {
     319           0 :     SwNoTextNode *pNd = GetCrsr()->GetNode().GetNoTextNode();
     320           0 :     StartAllAction();
     321           0 :     pNd->SetContour( pPoly );
     322           0 :     SwFlyFrm *pFly = static_cast<SwFlyFrm*>(pNd->getLayoutFrm(GetLayout())->GetUpper());
     323           0 :     const SwFormatSurround &rSur = pFly->GetFormat()->GetSurround();
     324           0 :     pFly->GetFormat()->NotifyClients( &rSur, &rSur );
     325           0 :     GetDoc()->getIDocumentState().SetModified();
     326           0 :     EndAllAction();
     327           0 : }
     328             : 
     329           0 : void SwEditShell::ClearAutomaticContour()
     330             : {
     331           0 :     SwNoTextNode *pNd = GetCrsr()->GetNode().GetNoTextNode();
     332             :     OSL_ENSURE( pNd, "is no NoTextNode!" );
     333           0 :     if( pNd->HasAutomaticContour() )
     334             :     {
     335           0 :         StartAllAction();
     336           0 :         pNd->SetContour( NULL, false );
     337           0 :         SwFlyFrm *pFly = static_cast<SwFlyFrm*>(pNd->getLayoutFrm(GetLayout())->GetUpper());
     338           0 :         const SwFormatSurround &rSur = pFly->GetFormat()->GetSurround();
     339           0 :         pFly->GetFormat()->NotifyClients( &rSur, &rSur );
     340           0 :         GetDoc()->getIDocumentState().SetModified();
     341           0 :         EndAllAction();
     342             :     }
     343           0 : }
     344             : 
     345             : /** Get OLE object at pointer.
     346             :  *
     347             :  * Returns a pointer to a SvInPlaceObjectRef if CurCrsr->GetPoint() points to a SwOLENode and
     348             :  * GetMark is not set or points to the same object reference. Gets this pointer from the Doc
     349             :  * if the object should be searched by name.
     350             :  */
     351           0 : svt::EmbeddedObjectRef& SwEditShell::GetOLEObject() const
     352             : {
     353             :     OSL_ENSURE(  CNT_OLE == GetCntType(), "GetOLEObj: no OLENode." );
     354             :     OSL_ENSURE( !GetCrsr()->HasMark() ||
     355             :             (GetCrsr()->HasMark() &&
     356             :                 GetCrsr()->GetPoint()->nNode == GetCrsr()->GetMark()->nNode),
     357             :             "GetOLEObj: no OLENode." );
     358             : 
     359           0 :     SwOLENode *pOLENode = GetCrsr()->GetNode().GetOLENode();
     360             :     OSL_ENSURE( pOLENode, "GetOLEObj: no OLENode." );
     361           0 :     SwOLEObj& rOObj = pOLENode->GetOLEObj();
     362           0 :     return rOObj.GetObject();
     363             : }
     364             : 
     365           0 : bool SwEditShell::HasOLEObj( const OUString &rName ) const
     366             : {
     367             :     SwStartNode *pStNd;
     368           0 :     SwNodeIndex aIdx( *GetNodes().GetEndOfAutotext().StartOfSectionNode(), 1 );
     369           0 :     while ( 0 != (pStNd = aIdx.GetNode().GetStartNode()) )
     370             :     {
     371           0 :         ++aIdx;
     372           0 :         SwNode& rNd = aIdx.GetNode();
     373           0 :         if( rNd.IsOLENode() &&
     374           0 :             rName == static_cast<SwOLENode&>(rNd).GetChartTableName() &&
     375           0 :             static_cast<SwOLENode&>(rNd).getLayoutFrm( GetLayout() ) )
     376           0 :             return true;
     377             : 
     378           0 :         aIdx.Assign( *pStNd->EndOfSectionNode(), + 1 );
     379             :     }
     380           0 :     return false;
     381             : }
     382             : 
     383           0 : void SwEditShell::SetChartName( const OUString &rName )
     384             : {
     385           0 :     SwOLENode *pONd = GetCrsr()->GetNode().GetOLENode();
     386             :     OSL_ENSURE( pONd, "ChartNode not found" );
     387           0 :     pONd->SetChartTableName( rName );
     388           0 : }
     389             : 
     390           0 : void SwEditShell::UpdateCharts( const OUString &rName )
     391             : {
     392           0 :     GetDoc()->UpdateCharts( rName );
     393           0 : }
     394             : 
     395             : /// change table name
     396           0 : void SwEditShell::SetTableName( SwFrameFormat& rTableFormat, const OUString &rNewName )
     397             : {
     398           0 :     GetDoc()->SetTableName( rTableFormat, rNewName );
     399           0 : }
     400             : 
     401             : /// request current word
     402           0 : OUString SwEditShell::GetCurWord()
     403             : {
     404           0 :     const SwPaM& rPaM = *GetCrsr();
     405           0 :     const SwTextNode* pNd = rPaM.GetNode().GetTextNode();
     406             :     OUString aString = pNd ?
     407           0 :                      pNd->GetCurWord(rPaM.GetPoint()->nContent.GetIndex()) :
     408           0 :                      OUString();
     409           0 :     return aString;
     410             : }
     411             : 
     412           0 : void SwEditShell::UpdateDocStat( )
     413             : {
     414           0 :     StartAllAction();
     415           0 :     GetDoc()->getIDocumentStatistics().UpdateDocStat( false, true );
     416           0 :     EndAllAction();
     417           0 : }
     418             : 
     419           0 : const SwDocStat& SwEditShell::GetUpdatedDocStat()
     420             : {
     421           0 :     StartAllAction();
     422           0 :     const SwDocStat &rRet = GetDoc()->getIDocumentStatistics().GetUpdatedDocStat( false, true );
     423           0 :     EndAllAction();
     424           0 :     return rRet;
     425             : }
     426             : 
     427             : // OPT: eddocinl.cxx
     428             : 
     429             : /// get the reference of a given name in the Doc
     430           0 : const SwFormatRefMark* SwEditShell::GetRefMark( const OUString& rName ) const
     431             : {
     432           0 :     return GetDoc()->GetRefMark( rName );
     433             : }
     434             : 
     435             : /// get the names of all references in a Doc
     436          40 : sal_uInt16 SwEditShell::GetRefMarks( std::vector<OUString>* pStrings ) const
     437             : {
     438          40 :     return GetDoc()->GetRefMarks( pStrings );
     439             : }
     440             : 
     441           0 : OUString SwEditShell::GetDropText( const sal_Int32 nChars ) const
     442             : {
     443             :     /*
     444             :      * pb: made changes for #i74939#
     445             :      *
     446             :      * always return a string even though there is a selection
     447             :      */
     448             : 
     449           0 :     OUString aText;
     450           0 :     SwPaM* pCrsr = GetCrsr();
     451           0 :     if ( IsMultiSelection() )
     452             :     {
     453             :         // if a multi selection exists, search for the first line
     454             :         // -> it is the cursor with the lowest index
     455           0 :         sal_uLong nIndex = pCrsr->GetMark()->nNode.GetIndex();
     456           0 :         bool bPrev = true;
     457           0 :         SwPaM* pLast = pCrsr;
     458           0 :         SwPaM* pTemp = pCrsr;
     459           0 :         while ( bPrev )
     460             :         {
     461           0 :             SwPaM* pPrev2 = dynamic_cast< SwPaM* >( pTemp->GetPrev() );
     462           0 :             bPrev = ( pPrev2 && pPrev2 != pLast );
     463           0 :             if ( bPrev )
     464             :             {
     465           0 :                 pTemp = pPrev2;
     466           0 :                 sal_uLong nTemp = pPrev2->GetMark()->nNode.GetIndex();
     467           0 :                 if ( nTemp < nIndex )
     468             :                 {
     469           0 :                     nIndex = nTemp;
     470           0 :                     pCrsr = pPrev2;
     471             :                 }
     472             :             }
     473             :         }
     474             :     }
     475             : 
     476           0 :     SwTextNode* pTextNd = pCrsr->GetNode( !pCrsr->HasMark() ).GetTextNode();
     477           0 :     if( pTextNd )
     478             :     {
     479           0 :         sal_Int32 nDropLen = pTextNd->GetDropLen( nChars );
     480           0 :         if( nDropLen )
     481           0 :             aText = pTextNd->GetText().copy(0, nDropLen);
     482             :     }
     483             : 
     484           0 :     return aText;
     485             : }
     486             : 
     487           0 : void SwEditShell::ReplaceDropText( const OUString &rStr, SwPaM* pPaM )
     488             : {
     489           0 :     SwPaM* pCrsr = pPaM ? pPaM : GetCrsr();
     490           0 :     if( pCrsr->GetPoint()->nNode == pCrsr->GetMark()->nNode &&
     491           0 :         pCrsr->GetNode().GetTextNode()->IsTextNode() )
     492             :     {
     493           0 :         StartAllAction();
     494             : 
     495           0 :         const SwNodeIndex& rNd = pCrsr->GetPoint()->nNode;
     496           0 :         SwPaM aPam( rNd, rStr.getLength(), rNd, 0 );
     497           0 :         if( !GetDoc()->getIDocumentContentOperations().Overwrite( aPam, rStr ) )
     498             :         {
     499             :             OSL_FAIL( "Doc->getIDocumentContentOperations().Overwrite(Str) failed." );
     500             :         }
     501             : 
     502           0 :         EndAllAction();
     503             :     }
     504           0 : }
     505             : 
     506           0 : OUString SwEditShell::Calculate()
     507             : {
     508           0 :     OUString  aFormel;                    // the final formula
     509           0 :     SwCalc    aCalc( *GetDoc() );
     510           0 :     const CharClass& rCC = GetAppCharClass();
     511             : 
     512           0 :     for(SwPaM& rCurrentPaM : GetCrsr()->GetNext()->GetRingContainer())
     513             :     {
     514           0 :         SwTextNode* pTextNd = rCurrentPaM.GetNode().GetTextNode();
     515           0 :         if(pTextNd)
     516             :         {
     517           0 :             const SwPosition *pStart = rCurrentPaM.Start(), *pEnd = rCurrentPaM.End();
     518           0 :             const sal_Int32 nStt = pStart->nContent.GetIndex();
     519             :             OUString aStr = pTextNd->GetExpandText( nStt, pEnd->nContent.
     520           0 :                                                 GetIndex() - nStt );
     521             : 
     522           0 :             aStr = rCC.lowercase( aStr );
     523             : 
     524             :             sal_Unicode ch;
     525           0 :             bool bValidFields = false;
     526           0 :             sal_Int32 nPos = 0;
     527             : 
     528           0 :             while( nPos < aStr.getLength() )
     529             :             {
     530           0 :                 ch = aStr[ nPos++ ];
     531           0 :                 if( rCC.isLetter( aStr, nPos-1 ) || ch == '_' )
     532             :                 {
     533           0 :                     sal_Int32 nTmpStt = nPos-1;
     534           0 :                     while(  nPos < aStr.getLength() &&
     535           0 :                             0 != ( ch = aStr[ nPos++ ]) &&
     536           0 :                            (rCC.isLetterNumeric( aStr, nPos - 1 ) ||
     537           0 :                                ch == '_'|| ch == '.' ))
     538             :                         ;
     539             : 
     540           0 :                     if( nPos < aStr.getLength() )
     541           0 :                         --nPos;
     542             : 
     543           0 :                     OUString sVar = aStr.copy( nTmpStt, nPos - nTmpStt );
     544           0 :                     if( !::FindOperator( sVar ) &&
     545           0 :                         (::Find( sVar, aCalc.GetVarTable(),TBLSZ) ||
     546           0 :                          aCalc.VarLook( sVar )) )
     547             :                     {
     548           0 :                         if( !bValidFields )
     549             :                         {
     550           0 :                             GetDoc()->getIDocumentFieldsAccess().FieldsToCalc( aCalc,
     551             :                                                   pStart->nNode.GetIndex(),
     552           0 :                                                   pStart->nContent.GetIndex() );
     553           0 :                             bValidFields = true;
     554             :                         }
     555           0 :                         aFormel += "(" + aCalc.GetStrResult( aCalc.VarLook( sVar )->nValue ) + ")";
     556             :                     }
     557             :                     else
     558           0 :                         aFormel += sVar;
     559             :                 }
     560             :                 else
     561           0 :                     aFormel += OUString(ch);
     562           0 :             }
     563             :         }
     564             :     }
     565             : 
     566           0 :     return aCalc.GetStrResult( aCalc.Calculate(aFormel) );
     567             : }
     568             : 
     569          11 : sfx2::LinkManager& SwEditShell::GetLinkManager()
     570             : {
     571          11 :     return mpDoc->getIDocumentLinksAdministration().GetLinkManager();
     572             : }
     573             : 
     574           0 : void *SwEditShell::GetIMapInventor() const
     575             : {
     576             :     // The node on which the cursor points should be sufficient as a unique identifier
     577           0 :     return static_cast<void*>(&(GetCrsr()->GetNode()));
     578             : }
     579             : 
     580             : // #i73788#
     581           0 : Graphic SwEditShell::GetIMapGraphic() const
     582             : {
     583             :     // returns always a graphic if the cursor is in a Fly
     584           0 :     SET_CURR_SHELL( const_cast<SwViewShell*>(static_cast<SwViewShell const *>(this)) );
     585           0 :     Graphic aRet;
     586           0 :     SwPaM* pCrsr = GetCrsr();
     587           0 :     if ( !pCrsr->HasMark() )
     588             :     {
     589           0 :         SwNode& rNd =pCrsr->GetNode();
     590           0 :         if( rNd.IsGrfNode() )
     591             :         {
     592           0 :             SwGrfNode & rGrfNode(static_cast<SwGrfNode&>(rNd));
     593           0 :             aRet = rGrfNode.GetGrf(GRAPHIC_DEFAULT == rGrfNode.GetGrf().GetType());
     594             :         }
     595           0 :         else if ( rNd.IsOLENode() )
     596             :         {
     597           0 :             aRet = *static_cast<SwOLENode&>(rNd).GetGraphic();
     598             :         }
     599             :         else
     600             :         {
     601           0 :             SwFlyFrm* pFlyFrm = rNd.GetContentNode()->getLayoutFrm( GetLayout() )->FindFlyFrm();
     602           0 :             if(pFlyFrm)
     603           0 :                 aRet = pFlyFrm->GetFormat()->MakeGraphic();
     604             :         }
     605             :     }
     606           0 :     return aRet;
     607             : }
     608             : 
     609           0 : bool SwEditShell::InsertURL( const SwFormatINetFormat& rFormat, const OUString& rStr, bool bKeepSelection )
     610             : {
     611             :     // URL and hint text (directly or via selection) necessary
     612           0 :     if( rFormat.GetValue().isEmpty() || ( rStr.isEmpty() && !HasSelection() ) )
     613           0 :         return false;
     614           0 :     StartAllAction();
     615           0 :     GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_UI_INSERT_URLTXT, NULL);
     616           0 :     bool bInsText = true;
     617             : 
     618           0 :     if( !rStr.isEmpty() )
     619             :     {
     620           0 :         SwPaM* pCrsr = GetCrsr();
     621           0 :         if( pCrsr->HasMark() && *pCrsr->GetPoint() != *pCrsr->GetMark() )
     622             :         {
     623             :             // Selection existent, multi selection?
     624           0 :             bool bDelText = true;
     625           0 :             if( !pCrsr->IsMultiSelection() )
     626             :             {
     627             :                 // einfach Selection -> Text ueberpruefen
     628           0 :                 const OUString sText(comphelper::string::stripEnd(GetSelText(), ' '));
     629           0 :                 if( sText == rStr )
     630           0 :                     bDelText = bInsText = false;
     631             :             }
     632           0 :             else if( rFormat.GetValue() == rStr ) // Are Name and URL equal?
     633           0 :                 bDelText = bInsText = false;
     634             : 
     635           0 :             if( bDelText )
     636           0 :                 Delete();
     637             :         }
     638           0 :         else if( pCrsr->IsMultiSelection() && rFormat.GetValue() == rStr )
     639           0 :             bInsText = false;
     640             : 
     641           0 :         if( bInsText )
     642             :         {
     643           0 :             Insert2( rStr );
     644           0 :             SetMark();
     645           0 :             ExtendSelection( false, rStr.getLength() );
     646             :         }
     647             :     }
     648             :     else
     649           0 :         bInsText = false;
     650             : 
     651           0 :     SetAttrItem( rFormat );
     652           0 :     if (bInsText && !IsCrsrPtAtEnd())
     653           0 :         SwapPam();
     654           0 :     if(!bKeepSelection)
     655           0 :         ClearMark();
     656           0 :     if( bInsText )
     657           0 :         DontExpandFormat();
     658           0 :     GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_UI_INSERT_URLTXT, NULL );
     659           0 :     EndAllAction();
     660           0 :     return true;
     661             : }
     662             : 
     663          40 : void SwEditShell::GetINetAttrs( SwGetINetAttrs& rArr )
     664             : {
     665          40 :     rArr.clear();
     666             : 
     667             :     const SwTextNode* pTextNd;
     668          40 :     const SwCharFormats* pFormats = GetDoc()->GetCharFormats();
     669         112 :     for( auto n = pFormats->size(); 1 < n; )
     670             :     {
     671          32 :         SwIterator<SwTextINetFormat,SwCharFormat> aIter(*(*pFormats)[--n]);
     672          32 :         for( SwTextINetFormat* pFnd = aIter.First(); pFnd; pFnd = aIter.Next() )
     673             :         {
     674           0 :             if( 0 != ( pTextNd = pFnd->GetpTextNode()) &&
     675           0 :                 pTextNd->GetNodes().IsDocNodes() )
     676             :             {
     677           0 :                 SwTextINetFormat& rAttr = *pFnd;
     678           0 :                 OUString sText( pTextNd->GetExpandText( rAttr.GetStart(),
     679           0 :                                     *rAttr.GetEnd() - rAttr.GetStart() ) );
     680             : 
     681           0 :                 sText = comphelper::string::remove(sText, 0x0a);
     682           0 :                 sText = comphelper::string::strip(sText, ' ');
     683             : 
     684           0 :                 if( !sText.isEmpty() )
     685             :                 {
     686           0 :                     SwGetINetAttr* pNew = new SwGetINetAttr( sText, rAttr );
     687           0 :                     rArr.push_back( pNew );
     688           0 :                 }
     689             :             }
     690             :         }
     691          32 :     }
     692          40 : }
     693             : 
     694             : /// If the cursor is in a INetAttribute then it will be deleted completely (incl. hint text, the
     695             : /// latter is needed for drag & drop)
     696           0 : bool SwEditShell::DelINetAttrWithText()
     697             : {
     698           0 :     bool bRet = SelectTextAttr( RES_TXTATR_INETFMT, false );
     699           0 :     if( bRet )
     700           0 :         DeleteSel( *GetCrsr() );
     701           0 :     return bRet;
     702             : }
     703             : 
     704             : /// Set the DontExpand flag at the text character attributes
     705           0 : bool SwEditShell::DontExpandFormat()
     706             : {
     707           0 :     bool bRet = false;
     708           0 :     if( !IsTableMode() && GetDoc()->DontExpandFormat( *GetCrsr()->GetPoint() ))
     709             :     {
     710           0 :         bRet = true;
     711           0 :         CallChgLnk();
     712             :     }
     713           0 :     return bRet;
     714             : }
     715             : 
     716           0 : SvNumberFormatter* SwEditShell::GetNumberFormatter()
     717             : {
     718           0 :     return GetDoc()->GetNumberFormatter();
     719             : }
     720             : 
     721          44 : bool SwEditShell::ConvertFieldsToText()
     722             : {
     723          44 :     StartAllAction();
     724          44 :     bool bRet = GetDoc()->ConvertFieldsToText();
     725          44 :     EndAllAction();
     726          44 :     return bRet;
     727             : }
     728             : 
     729          44 : void SwEditShell::SetNumberingRestart()
     730             : {
     731          44 :     StartAllAction();
     732          44 :     Push();
     733             :     // iterate over all text contents - body, frames, header, footer, footnote text
     734          44 :     SwPaM* pCrsr = GetCrsr();
     735         132 :     for(int i = 0; i < 2; i++)
     736             :     {
     737          88 :         if(!i)
     738          44 :             MakeFindRange(DOCPOS_START, DOCPOS_END, pCrsr); // body content
     739             :         else
     740          44 :             MakeFindRange(DOCPOS_OTHERSTART, DOCPOS_OTHEREND, pCrsr); // extra content
     741          88 :         SwPosition* pSttPos = pCrsr->Start(), *pEndPos = pCrsr->End();
     742          88 :         sal_uLong nCurrNd = pSttPos->nNode.GetIndex();
     743          88 :         sal_uLong nEndNd = pEndPos->nNode.GetIndex();
     744          88 :         if( nCurrNd <= nEndNd )
     745             :         {
     746             :             SwContentFrm* pCntFrm;
     747          88 :             bool bGoOn = true;
     748             :             // iterate over all paragraphs
     749         432 :             while( bGoOn )
     750             :             {
     751         256 :                 SwNode* pNd = GetDoc()->GetNodes()[ nCurrNd ];
     752         256 :                 switch( pNd->GetNodeType() )
     753             :                 {
     754             :                 case ND_TEXTNODE:
     755         212 :                     if( 0 != ( pCntFrm = static_cast<SwTextNode*>(pNd)->getLayoutFrm( GetLayout() )) )
     756             :                     {
     757             :                         // skip hidden frames - ignore protection!
     758         212 :                         if( !static_cast<SwTextFrm*>(pCntFrm)->IsHiddenNow() )
     759             :                         {
     760             :                             // if the node is numbered and the starting value of the numbering equals the
     761             :                             // start value of the numbering rule then set this value as hard starting value
     762             : 
     763             :                             // get the node num
     764             :                             // OD 2005-11-09
     765         212 :                             SwTextNode* pTextNd( pNd->GetTextNode() );
     766         212 :                             SwNumRule* pNumRule( pTextNd->GetNumRule() );
     767             : 
     768             :                             bool bIsNodeNum =
     769          40 :                                ( pNumRule && pTextNd->GetNum() &&
     770          60 :                                  ( pTextNd->HasNumber() || pTextNd->HasBullet() ) &&
     771         252 :                                  pTextNd->IsCountedInList() &&
     772         232 :                                  !pTextNd->IsListRestart() );
     773         212 :                             if (bIsNodeNum)
     774             :                             {
     775          20 :                                 int nListLevel = pTextNd->GetActualListLevel();
     776             : 
     777          20 :                                 if (nListLevel < 0)
     778           0 :                                     nListLevel = 0;
     779             : 
     780          20 :                                 if (nListLevel >= MAXLEVEL)
     781           0 :                                     nListLevel = MAXLEVEL - 1;
     782             : 
     783          40 :                                  bIsNodeNum = pTextNd->GetNum()->GetNumber() ==
     784          40 :                                     pNumRule->Get( static_cast<sal_uInt16>(nListLevel) ).GetStart();
     785             :                             }
     786         212 :                             if (bIsNodeNum)
     787             :                             {
     788             :                                 // now set a the start value as attribute
     789          10 :                                 SwPosition aCurrentNode(*pNd);
     790          10 :                                 GetDoc()->SetNumRuleStart( aCurrentNode, true );
     791             :                             }
     792             :                         }
     793             :                     }
     794         212 :                     break;
     795             :                 case ND_SECTIONNODE:
     796             :                     // skip hidden sections  - ignore protection!
     797           0 :                     if(static_cast<SwSectionNode*>(pNd)->GetSection().IsHidden() )
     798           0 :                         nCurrNd = pNd->EndOfSectionIndex();
     799           0 :                     break;
     800             :                 case ND_ENDNODE:
     801             :                     {
     802           0 :                         break;
     803             :                     }
     804             :                 }
     805             : 
     806         256 :                 bGoOn = nCurrNd < nEndNd;
     807         256 :                 ++nCurrNd;
     808             :             }
     809             :         }
     810             :     }
     811             : 
     812          44 :     Pop(false);
     813          44 :     EndAllAction();
     814          44 : }
     815             : 
     816           0 : sal_uInt16 SwEditShell::GetLineCount( bool bActPos )
     817             : {
     818           0 :     sal_uInt16 nRet = 0;
     819           0 :     CalcLayout();
     820           0 :     SwPaM* pPam = GetCrsr();
     821           0 :     SwNodeIndex& rPtIdx = pPam->GetPoint()->nNode;
     822           0 :     SwNodeIndex aStart( rPtIdx );
     823             :     SwContentNode* pCNd;
     824           0 :     SwContentFrm *pCntFrm = 0;
     825             :     sal_uLong nTmpPos;
     826             : 
     827           0 :     if( !bActPos )
     828           0 :         aStart = 0;
     829           0 :     else if( rPtIdx > ( nTmpPos = GetDoc()->GetNodes().GetEndOfExtras().GetIndex()) )
     830             :         // BodyArea => Start is EndOfIcons + 1
     831           0 :         aStart = nTmpPos + 1;
     832             :     else
     833             :     {
     834           0 :         if( 0 != ( pCNd = pPam->GetContentNode() ) &&
     835           0 :             0 != ( pCntFrm = pCNd->getLayoutFrm( GetLayout() ) ) )
     836             :         {
     837             :             const SwStartNode *pTmp;
     838           0 :             if( pCntFrm->IsInFly() )                        // Fly
     839           0 :                 pTmp = pCNd->FindFlyStartNode();
     840           0 :             else if( pCntFrm->IsInFootnote() )                   // Footnote
     841           0 :                 pTmp = pCNd->FindFootnoteStartNode();
     842             :             else
     843             :             {                                               // Footer/Header
     844           0 :                 const sal_uInt16 nTyp = FRM_HEADER | FRM_FOOTER;
     845           0 :                 SwFrm* pFrm = pCntFrm;
     846           0 :                 while( pFrm && !(pFrm->GetType() & nTyp) )
     847           0 :                     pFrm = pFrm->GetUpper();
     848             :                 OSL_ENSURE( pFrm, "Wo bin ich?" );
     849           0 :                 if( pFrm && ( pFrm->GetType() & FRM_FOOTER ) )
     850           0 :                     pTmp = pCNd->FindFooterStartNode();
     851             :                 else
     852           0 :                     pTmp = pCNd->FindHeaderStartNode();
     853             :             }
     854             :             OSL_ENSURE( pTmp, "Missing StartNode" );
     855           0 :             aStart  = *pTmp;
     856             :         }
     857             :         OSL_ENSURE( pCNd && pCntFrm, "Missing Layout-Information" );
     858             :     }
     859             : 
     860           0 :     while( 0 != ( pCNd = GetDoc()->GetNodes().GoNextSection(
     861           0 :                 &aStart, true, false )) && ( !bActPos || aStart <= rPtIdx ) )
     862             :     {
     863           0 :         if( 0 != ( pCntFrm = pCNd->getLayoutFrm( GetLayout() ) ) && pCntFrm->IsTextFrm() )
     864             :         {
     865           0 :             const sal_Int32 nActPos = bActPos && aStart == rPtIdx ?
     866           0 :                 pPam->GetPoint()->nContent.GetIndex() : COMPLETE_STRING;
     867           0 :             nRet = nRet + static_cast<SwTextFrm*>(pCntFrm)->GetLineCount( nActPos );
     868             :         }
     869             :     }
     870           0 :     return nRet;
     871             : }
     872             : 
     873           0 : long SwEditShell::CompareDoc( const SwDoc& rDoc )
     874             : {
     875           0 :     StartAllAction();
     876           0 :     long nRet = GetDoc()->CompareDoc( rDoc );
     877           0 :     EndAllAction();
     878           0 :     return nRet;
     879             : }
     880             : 
     881           1 : long SwEditShell::MergeDoc( const SwDoc& rDoc )
     882             : {
     883           1 :     StartAllAction();
     884           1 :     long nRet = GetDoc()->MergeDoc( rDoc );
     885           1 :     EndAllAction();
     886           1 :     return nRet;
     887             : }
     888             : 
     889           0 : const SwFootnoteInfo& SwEditShell::GetFootnoteInfo() const
     890             : {
     891           0 :     return GetDoc()->GetFootnoteInfo();
     892             : }
     893             : 
     894           0 : void SwEditShell::SetFootnoteInfo(const SwFootnoteInfo& rInfo)
     895             : {
     896           0 :     StartAllAction();
     897           0 :     SET_CURR_SHELL( this );
     898           0 :     GetDoc()->SetFootnoteInfo(rInfo);
     899           0 :     CallChgLnk();
     900           0 :     EndAllAction();
     901           0 : }
     902             : 
     903           0 : const SwEndNoteInfo& SwEditShell::GetEndNoteInfo() const
     904             : {
     905           0 :     return GetDoc()->GetEndNoteInfo();
     906             : }
     907             : 
     908           0 : void SwEditShell::SetEndNoteInfo(const SwEndNoteInfo& rInfo)
     909             : {
     910           0 :     StartAllAction();
     911           0 :     SET_CURR_SHELL( this );
     912           0 :     GetDoc()->SetEndNoteInfo(rInfo);
     913           0 :     EndAllAction();
     914           0 : }
     915             : 
     916           0 : const SwLineNumberInfo& SwEditShell::GetLineNumberInfo() const
     917             : {
     918           0 :     return GetDoc()->GetLineNumberInfo();
     919             : }
     920             : 
     921           0 : void SwEditShell::SetLineNumberInfo(const SwLineNumberInfo& rInfo)
     922             : {
     923           0 :     StartAllAction();
     924           0 :     SET_CURR_SHELL( this );
     925           0 :     GetDoc()->SetLineNumberInfo(rInfo);
     926           0 :     AddPaintRect( GetLayout()->Frm() );
     927           0 :     EndAllAction();
     928           0 : }
     929             : 
     930           0 : sal_uInt16 SwEditShell::GetLinkUpdMode(bool bDocSettings) const
     931             : {
     932           0 :     return getIDocumentSettingAccess()->getLinkUpdateMode( !bDocSettings );
     933             : }
     934             : 
     935           0 : void SwEditShell::SetLinkUpdMode( sal_uInt16 nMode )
     936             : {
     937           0 :     getIDocumentSettingAccess()->setLinkUpdateMode( nMode );
     938           0 : }
     939             : 
     940             : // Interface for TextInputData - (for text input of japanese/chinese characters)
     941           0 : SwExtTextInput* SwEditShell::CreateExtTextInput(LanguageType eInputLanguage)
     942             : {
     943           0 :     SwExtTextInput* pRet = GetDoc()->CreateExtTextInput( *GetCrsr() );
     944           0 :     pRet->SetLanguage(eInputLanguage);
     945           0 :     pRet->SetOverwriteCursor( SwCrsrShell::IsOverwriteCrsr() );
     946           0 :     return pRet;
     947             : }
     948             : 
     949           0 : OUString SwEditShell::DeleteExtTextInput( SwExtTextInput* pDel, bool bInsText )
     950             : {
     951           0 :     if( !pDel )
     952             :     {
     953           0 :         const SwPosition& rPos = *GetCrsr()->GetPoint();
     954           0 :         pDel = GetDoc()->GetExtTextInput( rPos.nNode.GetNode(),
     955           0 :                                           rPos.nContent.GetIndex() );
     956           0 :         if( !pDel )
     957             :         {
     958             :             //JP 25.10.2001: under UNIX the cursor is moved before the Input-
     959             :             //              Engine event comes in. So take any - normally there
     960             :             //              exist only one at the time. -- Task 92016
     961           0 :             pDel = GetDoc()->GetExtTextInput();
     962             :         }
     963             :     }
     964           0 :     OUString sRet;
     965           0 :     if( pDel )
     966             :     {
     967           0 :         OUString sTmp;
     968           0 :         SwUnoCursorHelper::GetTextFromPam(*pDel, sTmp);
     969           0 :         sRet = sTmp;
     970           0 :         SET_CURR_SHELL( this );
     971           0 :         StartAllAction();
     972           0 :         pDel->SetInsText( bInsText );
     973           0 :         SetOverwriteCrsr( pDel->IsOverwriteCursor() );
     974           0 :         const SwPosition aPos( *pDel->GetPoint() );
     975           0 :         GetDoc()->DeleteExtTextInput( pDel );
     976             : 
     977             :         // In this case, the "replace" function did not set the cursor
     978             :         // to the original position. Therefore we have to do this manually.
     979           0 :         if ( ! bInsText && IsOverwriteCrsr() )
     980           0 :             *GetCrsr()->GetPoint() = aPos;
     981             : 
     982           0 :         EndAllAction();
     983             :     }
     984           0 :     return sRet;
     985             : }
     986             : 
     987           0 : void SwEditShell::SetExtTextInputData( const CommandExtTextInputData& rData )
     988             : {
     989           0 :     const SwPosition& rPos = *GetCrsr()->GetPoint();
     990           0 :     SwExtTextInput* pInput = GetDoc()->GetExtTextInput( rPos.nNode.GetNode() );
     991           0 :     if( pInput )
     992             :     {
     993           0 :         StartAllAction();
     994           0 :         SET_CURR_SHELL( this );
     995             : 
     996           0 :         if( !rData.IsOnlyCursorChanged() )
     997           0 :             pInput->SetInputData( rData );
     998             :         // position cursor
     999           0 :         const SwPosition& rStt = *pInput->Start();
    1000           0 :         const sal_Int32 nNewCrsrPos = rStt.nContent.GetIndex() + rData.GetCursorPos();
    1001             : 
    1002             :         // ugly but works
    1003           0 :         ShowCrsr();
    1004           0 :         const sal_Int32 nDiff = nNewCrsrPos - rPos.nContent.GetIndex();
    1005           0 :         if( 0 > nDiff )
    1006           0 :             Left( (sal_Int32)-nDiff, CRSR_SKIP_CHARS );
    1007           0 :         else if( 0 < nDiff )
    1008           0 :             Right( (sal_Int32)nDiff, CRSR_SKIP_CHARS );
    1009             : 
    1010           0 :         SetOverwriteCrsr( rData.IsCursorOverwrite() );
    1011             : 
    1012           0 :         EndAllAction();
    1013             : 
    1014           0 :         if( !rData.IsCursorVisible() )  // must be called after the EndAction
    1015           0 :             HideCrsr();
    1016             :     }
    1017           0 : }
    1018             : 
    1019           0 : void SwEditShell::TransliterateText( sal_uInt32 nType )
    1020             : {
    1021           0 :     utl::TransliterationWrapper aTrans( ::comphelper::getProcessComponentContext(), nType );
    1022           0 :     StartAllAction();
    1023           0 :     SET_CURR_SHELL( this );
    1024             : 
    1025           0 :     SwPaM* pCrsr = GetCrsr();
    1026           0 :     if( pCrsr->GetNext() != pCrsr )
    1027             :     {
    1028           0 :         GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL);
    1029           0 :         for(SwPaM& rPaM : GetCrsr()->GetRingContainer())
    1030             :         {
    1031           0 :             if( rPaM.HasMark() )
    1032           0 :                 GetDoc()->getIDocumentContentOperations().TransliterateText( rPaM, aTrans );
    1033             :         }
    1034           0 :         GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL);
    1035             :     }
    1036             :     else
    1037           0 :         GetDoc()->getIDocumentContentOperations().TransliterateText( *pCrsr, aTrans );
    1038             : 
    1039           0 :     EndAllAction();
    1040           0 : }
    1041             : 
    1042         887 : void SwEditShell::CountWords( SwDocStat& rStat ) const
    1043             : {
    1044        1780 :     for(SwPaM& rPaM : GetCrsr()->GetRingContainer())
    1045             :     {
    1046         893 :         if( rPaM.HasMark() )
    1047          12 :             SwDoc::CountWords( rPaM, rStat );
    1048             : 
    1049             :     }
    1050         887 : }
    1051             : 
    1052        1167 : void SwEditShell::ApplyViewOptions( const SwViewOption &rOpt )
    1053             : {
    1054        1167 :     SwCrsrShell::StartAction();
    1055        1167 :     SwViewShell::ApplyViewOptions( rOpt );
    1056        1167 :     SwEditShell::EndAction();
    1057        1344 : }
    1058             : 
    1059             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11