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

Generated by: LCOV version 1.10