LCOV - code coverage report
Current view: top level - sw/source/uibase/wrtsh - move.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 106 339 31.3 %
Date: 2015-06-13 12:38:46 Functions: 21 47 44.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 <sfx2/bindings.hxx>
      21             : #include <wrtsh.hxx>
      22             : #include <view.hxx>
      23             : #include <viewopt.hxx>
      24             : #include <crsskip.hxx>
      25             : 
      26             : /**
      27             :    Always:
      28             :     -   Reset of the cursor stack
      29             :     -   retrigger timer
      30             :     -   if applicable: GCAttr
      31             : 
      32             :     on selection
      33             :     -   SttSelect()
      34             : 
      35             :     else
      36             :     -   EndSelect()
      37             :  */
      38             : 
      39             : const long nReadOnlyScrollOfst = 10;
      40             : 
      41             : class ShellMoveCrsr
      42             : {
      43             :     SwWrtShell* pSh;
      44             :     bool bAct;
      45             : public:
      46         114 :     inline ShellMoveCrsr( SwWrtShell* pWrtSh, bool bSel )
      47             :     {
      48         114 :         bAct = !pWrtSh->ActionPend() && (pWrtSh->GetFrmType(0,false) & FrmTypeFlags::FLY_ANY);
      49         114 :         ( pSh = pWrtSh )->MoveCrsr( bSel );
      50         114 :         pWrtSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_HYPERLINK_GETLINK);
      51         114 :     }
      52         114 :     inline ~ShellMoveCrsr()
      53             :     {
      54         114 :         if( bAct )
      55             :         {
      56             :             // The action is used for scrolling in "single paragraph"
      57             :             // frames with fixed height.
      58           0 :             pSh->StartAllAction();
      59           0 :             pSh->EndAllAction();
      60             :         }
      61         114 :     }
      62             : };
      63             : 
      64         114 : void SwWrtShell::MoveCrsr( bool bWithSelect )
      65             : {
      66         114 :     ResetCursorStack();
      67         114 :     if ( IsGCAttr() )
      68             :     {
      69           1 :         GCAttr();
      70           1 :         ClearGCAttr();
      71             :     }
      72         114 :     if ( bWithSelect )
      73          26 :         SttSelect();
      74             :     else
      75             :     {
      76          88 :         EndSelect();
      77          88 :         (this->*m_fnKillSel)( 0, false );
      78             :     }
      79         114 : }
      80             : 
      81           0 : bool SwWrtShell::SimpleMove( FNSimpleMove FnSimpleMove, bool bSelect )
      82             : {
      83             :     bool nRet;
      84           0 :     if( bSelect )
      85             :     {
      86           0 :         SttCrsrMove();
      87           0 :         MoveCrsr( true );
      88           0 :         nRet = (this->*FnSimpleMove)();
      89           0 :         EndCrsrMove();
      90             :     }
      91           0 :     else if( ( nRet = (this->*FnSimpleMove)() ) )
      92           0 :         MoveCrsr( false );
      93           0 :     return nRet;
      94             : }
      95             : 
      96          10 : bool SwWrtShell::Left( sal_uInt16 nMode, bool bSelect,
      97             :                             sal_uInt16 nCount, bool bBasicCall, bool bVisual )
      98             : {
      99          10 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly()  && !GetViewOptions()->IsSelectionInReadonly())
     100             :     {
     101           0 :         Point aTmp( VisArea().Pos() );
     102           0 :         aTmp.X() -= VisArea().Width() * nReadOnlyScrollOfst / 100;
     103           0 :         m_rView.SetVisArea( aTmp );
     104           0 :         return true;
     105             :     }
     106             :     else
     107             :     {
     108          10 :         ShellMoveCrsr aTmp( this, bSelect );
     109          10 :         return SwCrsrShell::Left( nCount, nMode, bVisual );
     110             :     }
     111             : }
     112             : 
     113          20 : bool SwWrtShell::Right( sal_uInt16 nMode, bool bSelect,
     114             :                             sal_uInt16 nCount, bool bBasicCall, bool bVisual )
     115             : {
     116          20 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly() && !GetViewOptions()->IsSelectionInReadonly() )
     117             :     {
     118           0 :         Point aTmp( VisArea().Pos() );
     119           0 :         aTmp.X() += VisArea().Width() * nReadOnlyScrollOfst / 100;
     120           0 :         aTmp.X() = m_rView.SetHScrollMax( aTmp.X() );
     121           0 :         m_rView.SetVisArea( aTmp );
     122           0 :         return true;
     123             :     }
     124             :     else
     125             :     {
     126          20 :         ShellMoveCrsr aTmp( this, bSelect );
     127          20 :         return SwCrsrShell::Right( nCount, nMode, bVisual );
     128             :     }
     129             : }
     130             : 
     131           2 : bool SwWrtShell::Up( bool bSelect, sal_uInt16 nCount, bool bBasicCall )
     132             : {
     133           2 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly()  && !GetViewOptions()->IsSelectionInReadonly())
     134             :     {
     135           0 :         Point aTmp( VisArea().Pos() );
     136           0 :         aTmp.Y() -= VisArea().Height() * nReadOnlyScrollOfst / 100;
     137           0 :         m_rView.SetVisArea( aTmp );
     138           0 :         return true;
     139             :     }
     140             : 
     141           2 :     ShellMoveCrsr aTmp( this, bSelect );
     142           2 :     return SwCrsrShell::Up( nCount );
     143             : }
     144             : 
     145           4 : bool SwWrtShell::Down( bool bSelect, sal_uInt16 nCount, bool bBasicCall )
     146             : {
     147           4 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly() && !GetViewOptions()->IsSelectionInReadonly())
     148             :     {
     149           0 :         Point aTmp( VisArea().Pos() );
     150           0 :         aTmp.Y() += VisArea().Height() * nReadOnlyScrollOfst / 100;
     151           0 :         aTmp.Y() = m_rView.SetVScrollMax( aTmp.Y() );
     152           0 :         m_rView.SetVisArea( aTmp );
     153           0 :         return true;
     154             :     }
     155             : 
     156           4 :     ShellMoveCrsr aTmp( this, bSelect );
     157           4 :     return SwCrsrShell::Down( nCount );
     158             : }
     159             : 
     160           0 : bool SwWrtShell::LeftMargin( bool bSelect, bool bBasicCall )
     161             : {
     162           0 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly() )
     163             :     {
     164           0 :         Point aTmp( VisArea().Pos() );
     165           0 :         aTmp.X() = DOCUMENTBORDER;
     166           0 :         m_rView.SetVisArea( aTmp );
     167           0 :         return true;
     168             :     }
     169             :     else
     170             :     {
     171           0 :         ShellMoveCrsr aTmp( this, bSelect );
     172           0 :         return SwCrsrShell::LeftMargin();
     173             :     }
     174             : }
     175             : 
     176           0 : bool SwWrtShell::RightMargin( bool bSelect, bool bBasicCall  )
     177             : {
     178           0 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly() )
     179             :     {
     180           0 :         Point aTmp( VisArea().Pos() );
     181           0 :         aTmp.X() = GetDocSize().Width() - VisArea().Width() + DOCUMENTBORDER;
     182           0 :         if( DOCUMENTBORDER > aTmp.X() )
     183           0 :             aTmp.X() = DOCUMENTBORDER;
     184           0 :         m_rView.SetVisArea( aTmp );
     185           0 :         return true;
     186             :     }
     187             :     else
     188             :     {
     189           0 :         ShellMoveCrsr aTmp( this, bSelect );
     190           0 :         return SwCrsrShell::RightMargin(bBasicCall);
     191             :     }
     192             : }
     193             : 
     194          22 : bool SwWrtShell::GoStart( bool bKeepArea, bool *pMoveTable,
     195             :                           bool bSelect, bool bDontMoveRegion )
     196             : {
     197          22 :     if ( IsCrsrInTable() )
     198             :     {
     199          11 :         const bool bBoxSelection = HasBoxSelection();
     200          11 :         if( !m_bBlockMode )
     201             :         {
     202          11 :             if ( !bSelect )
     203          11 :                 EnterStdMode();
     204             :             else
     205           0 :                 SttSelect();
     206             :         }
     207             :             // Table cell ?
     208          17 :         if ( !bBoxSelection && (MoveSection( fnSectionCurr, fnSectionStart)
     209           6 :                 || bDontMoveRegion))
     210             :         {
     211           6 :             if ( pMoveTable )
     212           6 :                 *pMoveTable = false;
     213           6 :             return true;
     214             :         }
     215           5 :         if( MoveTable( fnTableCurr, fnTableStart ) || bDontMoveRegion )
     216             :         {
     217           0 :             if ( pMoveTable )
     218           0 :                 *pMoveTable = true;
     219           0 :             return true;
     220             :         }
     221           5 :         else if( bBoxSelection && pMoveTable )
     222             :         {
     223             :             // JP 09.01.96: We have a box selection (or a empty cell)
     224             :             //              and we want select (pMoveTable will be
     225             :             //              set in SelAll). Then the table must not
     226             :             //              be left, otherwise there is no selection
     227             :             //              of the entire table possible!
     228           5 :             *pMoveTable = true;
     229           5 :             return true;
     230             :         }
     231             :     }
     232             : 
     233          11 :     if( !m_bBlockMode )
     234             :     {
     235          11 :         if ( !bSelect )
     236          11 :             EnterStdMode();
     237             :         else
     238           0 :             SttSelect();
     239             :     }
     240          11 :     const FrmTypeFlags nFrmType = GetFrmType(0,false);
     241          11 :     if ( FrmTypeFlags::FLY_ANY & nFrmType )
     242             :     {
     243           0 :         if( MoveSection( fnSectionCurr, fnSectionStart ) )
     244           0 :             return true;
     245           0 :         else if ( FrmTypeFlags::FLY_FREE & nFrmType || bDontMoveRegion )
     246           0 :             return false;
     247             :     }
     248          11 :     if(( FrmTypeFlags::HEADER | FrmTypeFlags::FOOTER | FrmTypeFlags::FOOTNOTE ) & nFrmType )
     249             :     {
     250           0 :         if ( MoveSection( fnSectionCurr, fnSectionStart ) )
     251           0 :             return true;
     252           0 :         else if ( bKeepArea )
     253           0 :             return true;
     254             :     }
     255             :     // Regions ???
     256          22 :     return SwCrsrShell::MoveRegion( fnRegionCurrAndSkip, fnRegionStart ) ||
     257          22 :            SwCrsrShell::SttEndDoc(true);
     258             : }
     259             : 
     260          26 : bool SwWrtShell::GoEnd(bool bKeepArea, bool *pMoveTable)
     261             : {
     262          26 :     if ( pMoveTable && *pMoveTable )
     263           5 :         return MoveTable( fnTableCurr, fnTableEnd );
     264             : 
     265          21 :     if ( IsCrsrInTable() )
     266             :     {
     267          13 :         if ( MoveSection( fnSectionCurr, fnSectionEnd ) ||
     268           1 :              MoveTable( fnTableCurr, fnTableEnd ) )
     269          12 :             return true;
     270             :     }
     271             :     else
     272             :     {
     273           9 :         const FrmTypeFlags nFrmType = GetFrmType(0,false);
     274           9 :         if ( FrmTypeFlags::FLY_ANY & nFrmType )
     275             :         {
     276           0 :             if ( MoveSection( fnSectionCurr, fnSectionEnd ) )
     277           0 :                 return true;
     278           0 :             else if ( FrmTypeFlags::FLY_FREE & nFrmType )
     279           0 :                 return false;
     280             :         }
     281           9 :         if(( FrmTypeFlags::HEADER | FrmTypeFlags::FOOTER | FrmTypeFlags::FOOTNOTE ) & nFrmType )
     282             :         {
     283           0 :             if ( MoveSection( fnSectionCurr, fnSectionEnd) )
     284           0 :                 return true;
     285           0 :             else if ( bKeepArea )
     286           0 :                 return true;
     287             :         }
     288             :     }
     289             :     // Regions ???
     290          18 :     return SwCrsrShell::MoveRegion( fnRegionCurrAndSkip, fnRegionEnd ) ||
     291          18 :            SwCrsrShell::SttEndDoc(false);
     292             : }
     293             : 
     294           9 : bool SwWrtShell::SttDoc( bool bSelect )
     295             : {
     296           9 :     ShellMoveCrsr aTmp( this, bSelect );
     297           9 :     return GoStart(false, 0, bSelect );
     298             : }
     299             : 
     300           8 : bool SwWrtShell::EndDoc( bool bSelect)
     301             : {
     302           8 :     ShellMoveCrsr aTmp( this, bSelect );
     303           8 :     return GoEnd();
     304             : }
     305             : 
     306           1 : bool SwWrtShell::SttNxtPg( bool bSelect )
     307             : {
     308           1 :     ShellMoveCrsr aTmp( this, bSelect );
     309           1 :     return MovePage( fnPageNext, fnPageStart );
     310             : }
     311             : 
     312           0 : bool SwWrtShell::SttPrvPg( bool bSelect )
     313             : {
     314           0 :     ShellMoveCrsr aTmp( this, bSelect );
     315           0 :     return MovePage( fnPagePrev, fnPageStart );
     316             : }
     317             : 
     318           0 : bool SwWrtShell::EndNxtPg( bool bSelect )
     319             : {
     320           0 :     ShellMoveCrsr aTmp( this, bSelect );
     321           0 :     return MovePage( fnPageNext, fnPageEnd );
     322             : }
     323             : 
     324           1 : bool SwWrtShell::EndPrvPg( bool bSelect )
     325             : {
     326           1 :     ShellMoveCrsr aTmp( this, bSelect );
     327           1 :     return MovePage( fnPagePrev, fnPageEnd );
     328             : }
     329             : 
     330          52 : bool SwWrtShell::SttPg( bool bSelect )
     331             : {
     332          52 :     ShellMoveCrsr aTmp( this, bSelect );
     333          52 :     return MovePage( fnPageCurr, fnPageStart );
     334             : }
     335             : 
     336           1 : bool SwWrtShell::EndPg( bool bSelect )
     337             : {
     338           1 :     ShellMoveCrsr aTmp( this, bSelect );
     339           1 :     return MovePage( fnPageCurr, fnPageEnd );
     340             : }
     341             : 
     342           0 : bool SwWrtShell::SttPara( bool bSelect )
     343             : {
     344           0 :     ShellMoveCrsr aTmp( this, bSelect );
     345           0 :     return MovePara( fnParaCurr, fnParaStart );
     346             : }
     347             : 
     348           1 : bool SwWrtShell::EndPara( bool bSelect )
     349             : {
     350           1 :     ShellMoveCrsr aTmp( this, bSelect );
     351           1 :     return MovePara(fnParaCurr,fnParaEnd);
     352             : }
     353             : 
     354             : // Column-by-jumping.
     355             : // SSelection with or without
     356             : // returns success or failure
     357             : 
     358           0 : bool SwWrtShell::StartOfColumn( bool bSelect )
     359             : {
     360           0 :     ShellMoveCrsr aTmp( this, bSelect);
     361           0 :     return MoveColumn(fnColumnCurr, fnColumnStart);
     362             : }
     363             : 
     364           0 : bool SwWrtShell::EndOfColumn( bool bSelect )
     365             : {
     366           0 :     ShellMoveCrsr aTmp( this, bSelect);
     367           0 :     return MoveColumn(fnColumnCurr, fnColumnEnd);
     368             : }
     369             : 
     370           0 : bool SwWrtShell::StartOfNextColumn( bool bSelect )
     371             : {
     372           0 :     ShellMoveCrsr aTmp( this, bSelect);
     373           0 :     return MoveColumn( fnColumnNext, fnColumnStart);
     374             : }
     375             : 
     376           0 : bool SwWrtShell::EndOfNextColumn( bool bSelect )
     377             : {
     378           0 :     ShellMoveCrsr aTmp( this, bSelect);
     379           0 :     return MoveColumn(fnColumnNext, fnColumnEnd);
     380             : }
     381             : 
     382           0 : bool SwWrtShell::StartOfPrevColumn( bool bSelect )
     383             : {
     384           0 :     ShellMoveCrsr aTmp( this, bSelect);
     385           0 :     return MoveColumn(fnColumnPrev, fnColumnStart);
     386             : }
     387             : 
     388           0 : bool SwWrtShell::EndOfPrevColumn( bool bSelect )
     389             : {
     390           0 :     ShellMoveCrsr aTmp( this, bSelect);
     391           0 :     return MoveColumn(fnColumnPrev, fnColumnEnd);
     392             : }
     393             : 
     394           0 : bool SwWrtShell::PushCrsr(SwTwips lOffset, bool bSelect)
     395             : {
     396           0 :     bool bDiff = false;
     397           0 :     SwRect aOldRect( GetCharRect() ), aTmpArea( VisArea() );
     398             : 
     399             :     // m_bDestOnStack indicates if I could not set the coursor at the current
     400             :     // position, because in this region is no content.
     401           0 :     if( !m_bDestOnStack )
     402             :     {
     403           0 :         Point aPt( aOldRect.Center() );
     404             : 
     405           0 :         if( !IsCrsrVisible() )
     406             :             // set CrsrPos to top-/bottom left pos. So the pagescroll is not
     407             :             // be dependent on the current cursor, but on the visarea.
     408           0 :             aPt.Y() = aTmpArea.Top() + aTmpArea.Height() / 2;
     409             : 
     410           0 :         aPt.Y() += lOffset;
     411           0 :         m_aDest = GetContentPos(aPt,lOffset > 0);
     412           0 :         m_aDest.X() = aPt.X();
     413           0 :         m_bDestOnStack = true;
     414             :     }
     415             : 
     416             :     // If we had a frame selection, it must be removed after the m_fnSetCrsr
     417             :     // and we have to remember the position on the stack to return to it later.
     418           0 :     bool bIsFrmSel = false;
     419             : 
     420             :     //Target position is now within the viewable region -->
     421             :     //Place the cursor at the target position; remember that no target
     422             :     //position is longer on the stack.
     423             :     //The new visible region is to be determined beforehand.
     424           0 :     aTmpArea.Pos().Y() += lOffset;
     425           0 :     if( aTmpArea.IsInside(m_aDest) )
     426             :     {
     427           0 :         if( bSelect )
     428           0 :             SttSelect();
     429             :         else
     430           0 :             EndSelect();
     431             : 
     432           0 :         bIsFrmSel = IsFrmSelected();
     433           0 :         bool bIsObjSel = 0 != IsObjSelected();
     434             : 
     435             :         // unselect frame
     436           0 :         if( bIsFrmSel || bIsObjSel )
     437             :         {
     438           0 :             UnSelectFrm();
     439           0 :             LeaveSelFrmMode();
     440           0 :             if ( bIsObjSel )
     441             :             {
     442           0 :                 GetView().SetDrawFuncPtr( NULL );
     443           0 :                 GetView().LeaveDrawCreate();
     444             :             }
     445             : 
     446           0 :             CallChgLnk();
     447             :         }
     448             : 
     449           0 :         (this->*m_fnSetCrsr)( &m_aDest, true );
     450             : 
     451           0 :         bDiff = aOldRect != GetCharRect();
     452             : 
     453           0 :         if( bIsFrmSel )
     454             :         {
     455             :             // In frames take only the upper corner
     456             :             // so that it can be re-selected.
     457           0 :             aOldRect.SSize( 5, 5 );
     458             :         }
     459             : 
     460             :             // reset Dest. SPoint Flags
     461           0 :         m_bDestOnStack = false;
     462             :     }
     463             : 
     464             :     // Position into the stack; bDiff indicates if there is a
     465             :     // difference between the old and the new cursor position.
     466             :     m_pCrsrStack = new CrsrStack( bDiff, bIsFrmSel, aOldRect.Center(),
     467           0 :                                 lOffset, m_pCrsrStack );
     468           0 :     return !m_bDestOnStack && bDiff;
     469             : }
     470             : 
     471        2757 : bool SwWrtShell::PopCrsr(bool bUpdate, bool bSelect)
     472             : {
     473        2757 :     if( 0 == m_pCrsrStack)
     474        2757 :         return false;
     475             : 
     476           0 :     const bool bValidPos = m_pCrsrStack->bValidCurPos;
     477           0 :     if( bUpdate && bValidPos )
     478             :     {
     479             :             // If a predecessor is on the stack,
     480             :             // use the flag for a valid position.
     481           0 :         SwRect aTmpArea(VisArea());
     482           0 :         aTmpArea.Pos().Y() -= m_pCrsrStack->lOffset;
     483           0 :         if( aTmpArea.IsInside( m_pCrsrStack->aDocPos ) )
     484             :         {
     485           0 :             if( bSelect )
     486           0 :                 SttSelect();
     487             :             else
     488           0 :                 EndSelect();
     489             : 
     490           0 :             (this->*m_fnSetCrsr)(&m_pCrsrStack->aDocPos, !m_pCrsrStack->bIsFrmSel);
     491           0 :             if( m_pCrsrStack->bIsFrmSel && IsObjSelectable(m_pCrsrStack->aDocPos))
     492             :             {
     493           0 :                 HideCrsr();
     494           0 :                 SelectObj( m_pCrsrStack->aDocPos );
     495           0 :                 EnterSelFrmMode( &m_pCrsrStack->aDocPos );
     496             :             }
     497             :         }
     498             :             // If a discrepancy between the visible range and the
     499             :             // remembered cursor position occurs, all of the remembered
     500             :             // positions are thrown away.
     501             :         else
     502             :         {
     503           0 :             _ResetCursorStack();
     504           0 :             return false;
     505             :         }
     506             :     }
     507           0 :     CrsrStack *pTmp = m_pCrsrStack;
     508           0 :     m_pCrsrStack = m_pCrsrStack->pNext;
     509           0 :     delete pTmp;
     510           0 :     if( 0 == m_pCrsrStack )
     511             :     {
     512           0 :         m_ePageMove = MV_NO;
     513           0 :         m_bDestOnStack = false;
     514             :     }
     515           0 :     return bValidPos;
     516             : }
     517             : 
     518             : // Reset of all pushed cursor positions; these will
     519             : // not be displayed ( --> No Start-/EndAction!!)
     520             : 
     521           0 : void SwWrtShell::_ResetCursorStack()
     522             : {
     523           0 :     while(m_pCrsrStack)
     524             :     {
     525           0 :         CrsrStack* const pTmp = m_pCrsrStack->pNext;
     526           0 :         delete m_pCrsrStack;
     527           0 :         m_pCrsrStack = pTmp;
     528             :     }
     529           0 :     m_ePageMove = MV_NO;
     530           0 :     m_bDestOnStack = false;
     531           0 : }
     532             : /**
     533             :     if no stack exists --> cancel selection
     534             :     if stack && change of direction
     535             :         --> pop cursor and return
     536             :     else
     537             :         --> push cursor
     538             :             transpose cursor
     539             : */
     540             : 
     541           0 : bool SwWrtShell::PageCrsr(SwTwips lOffset, bool bSelect)
     542             : {
     543             :     // Do nothing if an offset of 0 was indicated
     544           0 :     if(!lOffset) return false;
     545             :         // Was once used to force a reformat of the layout.
     546             :         // This has not work that way, because the cursor was not set
     547             :         // because this does not happen within a
     548             :         // Start-/EndActionParentheses.
     549             :         // Because only SwViewShell::EndAction() is called at the end,
     550             :         // no updating of the display of the cursor position takes place.
     551             :         // The CrsrShell-Actionparentheses cannot be used, because it
     552             :         // always leads to displaying the cursor, thus also,
     553             :         // if after the scroll scrolled in a region without a valid postition.
     554             :         // SwViewShell::StartAction();
     555           0 :     PageMove eDir = lOffset > 0? MV_PAGE_DOWN: MV_PAGE_UP;
     556             :         // Change of direction and stack present
     557           0 :     if( eDir != m_ePageMove && m_ePageMove != MV_NO && PopCrsr( true, bSelect ))
     558           0 :         return true;
     559             : 
     560           0 :     const bool bRet = PushCrsr(lOffset, bSelect);
     561           0 :     m_ePageMove = eDir;
     562           0 :     return bRet;
     563             : }
     564             : 
     565           5 : bool SwWrtShell::GotoPage(sal_uInt16 nPage, bool bRecord)
     566             : {
     567           5 :     ShellMoveCrsr aTmp( this, false);
     568           5 :     if( SwCrsrShell::GotoPage(nPage) && bRecord)
     569             :     {
     570           3 :         if(IsSelFrmMode())
     571             :         {
     572           0 :             UnSelectFrm();
     573           0 :             LeaveSelFrmMode();
     574             :         }
     575           3 :         return true;
     576             :     }
     577           2 :     return false;
     578             : }
     579             : 
     580           0 : bool SwWrtShell::GotoMark( const ::sw::mark::IMark* const pMark, bool bSelect, bool bStart )
     581             : {
     582           0 :     ShellMoveCrsr aTmp( this, bSelect );
     583           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     584           0 :     bool bRet = SwCrsrShell::GotoMark( pMark, bStart );
     585           0 :     if (bRet)
     586           0 :         m_aNavigationMgr.addEntry(aPos);
     587           0 :     return bRet;
     588             : }
     589             : 
     590           0 : bool SwWrtShell::GotoFly( const OUString& rName, FlyCntType eType, bool bSelFrame )
     591             : {
     592           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     593           0 :     bool bRet = SwFEShell::GotoFly(rName, eType, bSelFrame);
     594           0 :     if (bRet)
     595           0 :         m_aNavigationMgr.addEntry(aPos);
     596           0 :     return bRet;
     597             : }
     598             : 
     599           0 : bool SwWrtShell::GotoINetAttr( const SwTextINetFormat& rAttr )
     600             : {
     601           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     602           0 :     bool bRet = SwCrsrShell::GotoINetAttr(rAttr);
     603           0 :     if (bRet)
     604           0 :         m_aNavigationMgr.addEntry(aPos);
     605           0 :     return bRet;
     606             : }
     607             : 
     608           0 : void SwWrtShell::GotoOutline( sal_uInt16 nIdx )
     609             : {
     610           0 :     addCurrentPosition();
     611           0 :     SwCrsrShell::GotoOutline (nIdx);
     612           0 : }
     613             : 
     614           0 : bool SwWrtShell::GotoOutline( const OUString& rName )
     615             : {
     616           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     617           0 :     bool bRet = SwCrsrShell::GotoOutline (rName);
     618           0 :     if (bRet)
     619           0 :         m_aNavigationMgr.addEntry(aPos);
     620           0 :     return bRet;
     621             : }
     622             : 
     623           0 : bool SwWrtShell::GotoRegion( const OUString& rName )
     624             : {
     625           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     626           0 :     bool bRet = SwCrsrShell::GotoRegion (rName);
     627           0 :     if (bRet)
     628           0 :         m_aNavigationMgr.addEntry(aPos);
     629           0 :     return bRet;
     630             :  }
     631             : 
     632           0 : bool SwWrtShell::GotoRefMark( const OUString& rRefMark, sal_uInt16 nSubType,
     633             :                                     sal_uInt16 nSeqNo )
     634             : {
     635           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     636           0 :     bool bRet = SwCrsrShell::GotoRefMark(rRefMark, nSubType, nSeqNo);
     637           0 :     if (bRet)
     638           0 :         m_aNavigationMgr.addEntry(aPos);
     639           0 :     return bRet;
     640             : }
     641             : 
     642           0 : bool SwWrtShell::GotoNextTOXBase( const OUString* pName )
     643             : {
     644           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     645           0 :     bool bRet = SwCrsrShell::GotoNextTOXBase(pName);
     646           0 :     if (bRet)
     647           0 :         m_aNavigationMgr.addEntry(aPos);
     648           0 :     return bRet;
     649             : }
     650             : 
     651           8 : bool SwWrtShell::GotoTable( const OUString& rName )
     652             : {
     653           8 :    SwPosition aPos = *GetCrsr()->GetPoint();
     654           8 :     bool bRet = SwCrsrShell::GotoTable(rName);
     655           8 :     if (bRet)
     656           8 :         m_aNavigationMgr.addEntry(aPos);
     657           8 :     return bRet;
     658             : }
     659             : 
     660           0 : bool SwWrtShell::GotoFormatField( const SwFormatField& rField ) {
     661           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     662           0 :     bool bRet = SwCrsrShell::GotoFormatField(rField);
     663           0 :     if (bRet)
     664           0 :         m_aNavigationMgr.addEntry(aPos);
     665           0 :     return bRet;
     666             : }
     667             : 
     668           0 : const SwRangeRedline* SwWrtShell::GotoRedline( sal_uInt16 nArrPos, bool bSelect ) {
     669           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     670           0 :     const SwRangeRedline *pRedline = SwCrsrShell::GotoRedline(nArrPos, bSelect);
     671           0 :     if (pRedline)
     672           0 :         m_aNavigationMgr.addEntry(aPos);
     673           0 :     return pRedline;
     674             : }
     675             : 
     676           0 : bool SwWrtShell::SelectTextAttr( sal_uInt16 nWhich, const SwTextAttr* pAttr )
     677             : {
     678             :     bool bRet;
     679             :     {
     680           0 :         SwMvContext aMvContext(this);
     681           0 :         SttSelect();
     682           0 :         bRet = SwCrsrShell::SelectTextAttr( nWhich, false, pAttr );
     683             :     }
     684           0 :     EndSelect();
     685           0 :     return bRet;
     686         177 : }
     687             : 
     688             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11