LCOV - code coverage report
Current view: top level - sw/source/core/uibase/wrtsh - move.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 339 0.0 %
Date: 2014-04-14 Functions: 0 45 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 <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           0 :     inline ShellMoveCrsr( SwWrtShell* pWrtSh, sal_Bool bSel )
      47             :     {
      48           0 :         bAct = !pWrtSh->ActionPend() && (pWrtSh->GetFrmType(0,sal_False) & FRMTYPE_FLY_ANY);
      49           0 :         ( pSh = pWrtSh )->MoveCrsr( sal_Bool(bSel) );
      50           0 :         pWrtSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_HYPERLINK_GETLINK);
      51           0 :     }
      52           0 :     inline ~ShellMoveCrsr()
      53             :     {
      54           0 :         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           0 :     }
      62             : };
      63             : 
      64           0 : void SwWrtShell::MoveCrsr( sal_Bool bWithSelect )
      65             : {
      66           0 :     ResetCursorStack();
      67           0 :     if ( IsGCAttr() )
      68             :     {
      69           0 :         GCAttr();
      70           0 :         ClearGCAttr();
      71             :     }
      72           0 :     if ( bWithSelect )
      73           0 :         SttSelect();
      74             :     else
      75             :     {
      76           0 :         EndSelect();
      77           0 :         (this->*fnKillSel)( 0, sal_False );
      78             :     }
      79           0 : }
      80             : 
      81           0 : sal_Bool SwWrtShell::SimpleMove( FNSimpleMove FnSimpleMove, sal_Bool bSelect )
      82             : {
      83             :     sal_Bool nRet;
      84           0 :     if( bSelect )
      85             :     {
      86           0 :         SttCrsrMove();
      87           0 :         MoveCrsr( sal_True );
      88           0 :         nRet = (this->*FnSimpleMove)();
      89           0 :         EndCrsrMove();
      90             :     }
      91           0 :     else if( 0 != ( nRet = (this->*FnSimpleMove)() ) )
      92           0 :         MoveCrsr( sal_False );
      93           0 :     return nRet;
      94             : }
      95             : 
      96           0 : sal_Bool SwWrtShell::Left( sal_uInt16 nMode, sal_Bool bSelect,
      97             :                             sal_uInt16 nCount, sal_Bool bBasicCall, sal_Bool bVisual )
      98             : {
      99           0 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly()  && !GetViewOptions()->IsSelectionInReadonly())
     100             :     {
     101           0 :         Point aTmp( VisArea().Pos() );
     102           0 :         aTmp.X() -= VisArea().Width() * nReadOnlyScrollOfst / 100;
     103           0 :         rView.SetVisArea( aTmp );
     104           0 :         return sal_True;
     105             :     }
     106             :     else
     107             :     {
     108           0 :         ShellMoveCrsr aTmp( this, bSelect );
     109           0 :         return SwCrsrShell::Left( nCount, nMode, bVisual );
     110             :     }
     111             : }
     112             : 
     113           0 : sal_Bool SwWrtShell::Right( sal_uInt16 nMode, sal_Bool bSelect,
     114             :                             sal_uInt16 nCount, sal_Bool bBasicCall, sal_Bool bVisual )
     115             : {
     116           0 :     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() = rView.SetHScrollMax( aTmp.X() );
     121           0 :         rView.SetVisArea( aTmp );
     122           0 :         return sal_True;
     123             :     }
     124             :     else
     125             :     {
     126           0 :         ShellMoveCrsr aTmp( this, bSelect );
     127           0 :         return SwCrsrShell::Right( nCount, nMode, bVisual );
     128             :     }
     129             : }
     130             : 
     131           0 : bool SwWrtShell::Up( bool bSelect, sal_uInt16 nCount, bool bBasicCall )
     132             : {
     133           0 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly()  && !GetViewOptions()->IsSelectionInReadonly())
     134             :     {
     135           0 :         Point aTmp( VisArea().Pos() );
     136           0 :         aTmp.Y() -= VisArea().Height() * nReadOnlyScrollOfst / 100;
     137           0 :         rView.SetVisArea( aTmp );
     138           0 :         return true;
     139             :     }
     140             : 
     141           0 :     ShellMoveCrsr aTmp( this, bSelect );
     142           0 :     return SwCrsrShell::Up( nCount );
     143             : }
     144             : 
     145           0 : bool SwWrtShell::Down( bool bSelect, sal_uInt16 nCount, bool bBasicCall )
     146             : {
     147           0 :     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() = rView.SetVScrollMax( aTmp.Y() );
     152           0 :         rView.SetVisArea( aTmp );
     153           0 :         return true;
     154             :     }
     155             : 
     156           0 :     ShellMoveCrsr aTmp( this, bSelect );
     157           0 :     return SwCrsrShell::Down( nCount );
     158             : }
     159             : 
     160           0 : sal_Bool SwWrtShell::LeftMargin( sal_Bool bSelect, sal_Bool bBasicCall )
     161             : {
     162           0 :     if ( !bSelect && !bBasicCall && IsCrsrReadonly() )
     163             :     {
     164           0 :         Point aTmp( VisArea().Pos() );
     165           0 :         aTmp.X() = DOCUMENTBORDER;
     166           0 :         rView.SetVisArea( aTmp );
     167           0 :         return sal_True;
     168             :     }
     169             :     else
     170             :     {
     171           0 :         ShellMoveCrsr aTmp( this, bSelect );
     172           0 :         return SwCrsrShell::LeftMargin();
     173             :     }
     174             : }
     175             : 
     176           0 : sal_Bool SwWrtShell::RightMargin( sal_Bool bSelect, sal_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 :         rView.SetVisArea( aTmp );
     185           0 :         return sal_True;
     186             :     }
     187             :     else
     188             :     {
     189           0 :         ShellMoveCrsr aTmp( this, bSelect );
     190           0 :         return SwCrsrShell::RightMargin(bBasicCall);
     191             :     }
     192             : }
     193             : 
     194           0 : sal_Bool SwWrtShell::GoStart( sal_Bool bKeepArea, sal_Bool *pMoveTable,
     195             :                             sal_Bool bSelect, sal_Bool bDontMoveRegion )
     196             : {
     197           0 :     if ( IsCrsrInTbl() )
     198             :     {
     199           0 :         const sal_Bool bBoxSelection = HasBoxSelection();
     200           0 :         if( !bBlockMode )
     201             :         {
     202           0 :             if ( !bSelect )
     203           0 :                 EnterStdMode();
     204             :             else
     205           0 :                 SttSelect();
     206             :         }
     207             :             // Table cell ?
     208           0 :         if ( !bBoxSelection && (MoveSection( fnSectionCurr, fnSectionStart)
     209           0 :                 || bDontMoveRegion))
     210             :         {
     211           0 :             if ( pMoveTable )
     212           0 :                 *pMoveTable = sal_False;
     213           0 :             return sal_True;
     214             :         }
     215           0 :         if( MoveTable( fnTableCurr, fnTableStart ) || bDontMoveRegion )
     216             :         {
     217           0 :             if ( pMoveTable )
     218           0 :                 *pMoveTable = sal_True;
     219           0 :             return sal_True;
     220             :         }
     221           0 :         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           0 :             *pMoveTable = sal_True;
     229           0 :             return sal_True;
     230             :         }
     231             :     }
     232             : 
     233           0 :     if( !bBlockMode )
     234             :     {
     235           0 :         if ( !bSelect )
     236           0 :             EnterStdMode();
     237             :         else
     238           0 :             SttSelect();
     239             :     }
     240           0 :     const sal_uInt16 nFrmType = GetFrmType(0,sal_False);
     241           0 :     if ( FRMTYPE_FLY_ANY & nFrmType )
     242             :     {
     243           0 :         if( MoveSection( fnSectionCurr, fnSectionStart ) )
     244           0 :             return sal_True;
     245           0 :         else if ( FRMTYPE_FLY_FREE & nFrmType || bDontMoveRegion )
     246           0 :             return sal_False;
     247             :     }
     248           0 :     if(( FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FOOTNOTE ) & nFrmType )
     249             :     {
     250           0 :         if ( MoveSection( fnSectionCurr, fnSectionStart ) )
     251           0 :             return sal_True;
     252           0 :         else if ( bKeepArea )
     253           0 :             return sal_True;
     254             :     }
     255             :     // Regions ???
     256           0 :     return SwCrsrShell::MoveRegion( fnRegionCurrAndSkip, fnRegionStart ) ||
     257           0 :            SwCrsrShell::SttEndDoc(sal_True);
     258             : }
     259             : 
     260           0 : sal_Bool SwWrtShell::GoEnd(sal_Bool bKeepArea, sal_Bool *pMoveTable)
     261             : {
     262           0 :     if ( pMoveTable && *pMoveTable )
     263           0 :         return MoveTable( fnTableCurr, fnTableEnd );
     264             : 
     265           0 :     if ( IsCrsrInTbl() )
     266             :     {
     267           0 :         if ( MoveSection( fnSectionCurr, fnSectionEnd ) ||
     268           0 :              MoveTable( fnTableCurr, fnTableEnd ) )
     269           0 :             return sal_True;
     270             :     }
     271             :     else
     272             :     {
     273           0 :         const sal_uInt16 nFrmType = GetFrmType(0,sal_False);
     274           0 :         if ( FRMTYPE_FLY_ANY & nFrmType )
     275             :         {
     276           0 :             if ( MoveSection( fnSectionCurr, fnSectionEnd ) )
     277           0 :                 return sal_True;
     278           0 :             else if ( FRMTYPE_FLY_FREE & nFrmType )
     279           0 :                 return sal_False;
     280             :         }
     281           0 :         if(( FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FOOTNOTE ) & nFrmType )
     282             :         {
     283           0 :             if ( MoveSection( fnSectionCurr, fnSectionEnd) )
     284           0 :                 return sal_True;
     285           0 :             else if ( bKeepArea )
     286           0 :                 return sal_True;
     287             :         }
     288             :     }
     289             :     // Regions ???
     290           0 :     return SwCrsrShell::MoveRegion( fnRegionCurrAndSkip, fnRegionEnd ) ||
     291           0 :            SwCrsrShell::SttEndDoc(sal_False);
     292             : }
     293             : 
     294           0 : sal_Bool SwWrtShell::SttDoc( sal_Bool bSelect )
     295             : {
     296           0 :     ShellMoveCrsr aTmp( this, bSelect );
     297           0 :     return GoStart(sal_False, 0, bSelect );
     298             : }
     299             : 
     300           0 : sal_Bool SwWrtShell::EndDoc( sal_Bool bSelect)
     301             : {
     302           0 :     ShellMoveCrsr aTmp( this, bSelect );
     303           0 :     return GoEnd();
     304             : }
     305             : 
     306           0 : sal_Bool SwWrtShell::SttNxtPg( sal_Bool bSelect )
     307             : {
     308           0 :     ShellMoveCrsr aTmp( this, bSelect );
     309           0 :     return MovePage( fnPageNext, fnPageStart );
     310             : }
     311             : 
     312           0 : sal_Bool SwWrtShell::SttPrvPg( sal_Bool bSelect )
     313             : {
     314           0 :     ShellMoveCrsr aTmp( this, bSelect );
     315           0 :     return MovePage( fnPagePrev, fnPageStart );
     316             : }
     317             : 
     318           0 : sal_Bool SwWrtShell::EndNxtPg( sal_Bool bSelect )
     319             : {
     320           0 :     ShellMoveCrsr aTmp( this, bSelect );
     321           0 :     return MovePage( fnPageNext, fnPageEnd );
     322             : }
     323             : 
     324           0 : sal_Bool SwWrtShell::EndPrvPg( sal_Bool bSelect )
     325             : {
     326           0 :     ShellMoveCrsr aTmp( this, bSelect );
     327           0 :     return MovePage( fnPagePrev, fnPageEnd );
     328             : }
     329             : 
     330           0 : sal_Bool SwWrtShell::SttPg( sal_Bool bSelect )
     331             : {
     332           0 :     ShellMoveCrsr aTmp( this, bSelect );
     333           0 :     return MovePage( fnPageCurr, fnPageStart );
     334             : }
     335             : 
     336           0 : sal_Bool SwWrtShell::EndPg( sal_Bool bSelect )
     337             : {
     338           0 :     ShellMoveCrsr aTmp( this, bSelect );
     339           0 :     return MovePage( fnPageCurr, fnPageEnd );
     340             : }
     341             : 
     342           0 : sal_Bool SwWrtShell::SttPara( sal_Bool bSelect )
     343             : {
     344           0 :     ShellMoveCrsr aTmp( this, bSelect );
     345           0 :     return MovePara( fnParaCurr, fnParaStart );
     346             : }
     347             : 
     348           0 : sal_Bool SwWrtShell::EndPara( sal_Bool bSelect )
     349             : {
     350           0 :     ShellMoveCrsr aTmp( this, bSelect );
     351           0 :     return MovePara(fnParaCurr,fnParaEnd);
     352             : }
     353             : 
     354             : // Column-by-jumping.
     355             : // SSelection with or without
     356             : // returns success or failure
     357             : 
     358           0 : sal_Bool SwWrtShell::StartOfColumn( sal_Bool bSelect )
     359             : {
     360           0 :     ShellMoveCrsr aTmp( this, bSelect);
     361           0 :     return MoveColumn(fnColumnCurr, fnColumnStart);
     362             : }
     363             : 
     364           0 : sal_Bool SwWrtShell::EndOfColumn( sal_Bool bSelect )
     365             : {
     366           0 :     ShellMoveCrsr aTmp( this, bSelect);
     367           0 :     return MoveColumn(fnColumnCurr, fnColumnEnd);
     368             : }
     369             : 
     370           0 : sal_Bool SwWrtShell::StartOfNextColumn( sal_Bool bSelect )
     371             : {
     372           0 :     ShellMoveCrsr aTmp( this, bSelect);
     373           0 :     return MoveColumn( fnColumnNext, fnColumnStart);
     374             : }
     375             : 
     376           0 : sal_Bool SwWrtShell::EndOfNextColumn( sal_Bool bSelect )
     377             : {
     378           0 :     ShellMoveCrsr aTmp( this, bSelect);
     379           0 :     return MoveColumn(fnColumnNext, fnColumnEnd);
     380             : }
     381             : 
     382           0 : sal_Bool SwWrtShell::StartOfPrevColumn( sal_Bool bSelect )
     383             : {
     384           0 :     ShellMoveCrsr aTmp( this, bSelect);
     385           0 :     return MoveColumn(fnColumnPrev, fnColumnStart);
     386             : }
     387             : 
     388           0 : sal_Bool SwWrtShell::EndOfPrevColumn( sal_Bool bSelect )
     389             : {
     390           0 :     ShellMoveCrsr aTmp( this, bSelect);
     391           0 :     return MoveColumn(fnColumnPrev, fnColumnEnd);
     392             : }
     393             : 
     394           0 : sal_Bool SwWrtShell::PushCrsr(SwTwips lOffset, sal_Bool bSelect)
     395             : {
     396           0 :     sal_Bool bDiff = sal_False;
     397           0 :     SwRect aOldRect( GetCharRect() ), aTmpArea( VisArea() );
     398             : 
     399             :     // bDestOnStack indicates if I could not set the coursor at the current
     400             :     // position, because in this region is no content.
     401           0 :     if( !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 :         aDest = GetCntntPos(aPt,lOffset > 0);
     412           0 :         aDest.X() = aPt.X();
     413           0 :         bDestOnStack = true;
     414             :     }
     415             : 
     416             :     // If we had a frame selection, it must be removed after the fnSetCrsr
     417             :     // and we have to remember the position on the stack to return to it later.
     418           0 :     sal_Bool bIsFrmSel = sal_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(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->*fnSetCrsr)( &aDest, sal_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 :         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             :     pCrsrStack = new CrsrStack( bDiff, bIsFrmSel, aOldRect.Center(),
     467           0 :                                 lOffset, pCrsrStack );
     468           0 :     return !bDestOnStack && bDiff;
     469             : }
     470             : 
     471           0 : sal_Bool SwWrtShell::PopCrsr(sal_Bool bUpdate, sal_Bool bSelect)
     472             : {
     473           0 :     if( 0 == pCrsrStack)
     474           0 :         return sal_False;
     475             : 
     476           0 :     const sal_Bool bValidPos = 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() -= pCrsrStack->lOffset;
     483           0 :         if( aTmpArea.IsInside( pCrsrStack->aDocPos ) )
     484             :         {
     485           0 :             if( bSelect )
     486           0 :                 SttSelect();
     487             :             else
     488           0 :                 EndSelect();
     489             : 
     490           0 :             (this->*fnSetCrsr)(&pCrsrStack->aDocPos, !pCrsrStack->bIsFrmSel);
     491           0 :             if( pCrsrStack->bIsFrmSel && IsObjSelectable(pCrsrStack->aDocPos))
     492             :             {
     493           0 :                 HideCrsr();
     494           0 :                 SelectObj( pCrsrStack->aDocPos );
     495           0 :                 EnterSelFrmMode( &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 sal_False;
     505             :         }
     506             :     }
     507           0 :     CrsrStack *pTmp = pCrsrStack;
     508           0 :     pCrsrStack = pCrsrStack->pNext;
     509           0 :     delete pTmp;
     510           0 :     if( 0 == pCrsrStack )
     511             :     {
     512           0 :         ePageMove = MV_NO;
     513           0 :         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 :     CrsrStack *pTmp = pCrsrStack;
     524           0 :     while(pCrsrStack)
     525             :     {
     526           0 :         pTmp = pCrsrStack->pNext;
     527           0 :         delete pCrsrStack;
     528           0 :         pCrsrStack = pTmp;
     529             :     }
     530           0 :     ePageMove = MV_NO;
     531           0 :     bDestOnStack = false;
     532           0 : }
     533             : /**
     534             :     if no stack exists --> cancel selection
     535             :     if stack && change of direction
     536             :         --> pop cursor and return
     537             :     else
     538             :         --> push cursor
     539             :             transpose cursor
     540             : */
     541             : 
     542           0 : sal_Bool SwWrtShell::PageCrsr(SwTwips lOffset, sal_Bool bSelect)
     543             : {
     544             :     // Do nothing if an offset of 0 was indicated
     545           0 :     if(!lOffset) return sal_False;
     546             :         // Was once used to force a reformat of the layout.
     547             :         // This has not work that way, because the cursor was not set
     548             :         // because this does not happen within a
     549             :         // Start-/EndActionParentheses.
     550             :         // Because only SwViewShell::EndAction() is called at the end,
     551             :         // no updating of the display of the cursor position takes place.
     552             :         // The CrsrShell-Actionparentheses cannot be used, because it
     553             :         // always leads to displaying the cursor, thus also,
     554             :         // if after the scroll scrolled in a region without a valid postition.
     555             :         // SwViewShell::StartAction();
     556           0 :     PageMove eDir = lOffset > 0? MV_PAGE_DOWN: MV_PAGE_UP;
     557             :         // Change of direction and stack present
     558           0 :     if( eDir != ePageMove && ePageMove != MV_NO && PopCrsr( sal_True, bSelect ))
     559           0 :         return sal_True;
     560             : 
     561           0 :     const sal_Bool bRet = PushCrsr(lOffset, bSelect);
     562           0 :     ePageMove = eDir;
     563           0 :     return bRet;
     564             : }
     565             : 
     566           0 : sal_Bool SwWrtShell::GotoPage(sal_uInt16 nPage, sal_Bool bRecord)
     567             : {
     568           0 :     ShellMoveCrsr aTmp( this, sal_False);
     569           0 :     if( SwCrsrShell::GotoPage(nPage) && bRecord)
     570             :     {
     571           0 :         if(IsSelFrmMode())
     572             :         {
     573           0 :             UnSelectFrm();
     574           0 :             LeaveSelFrmMode();
     575             :         }
     576           0 :         return sal_True;
     577             :     }
     578           0 :     return sal_False;
     579             : }
     580             : 
     581           0 : sal_Bool SwWrtShell::GotoMark( const ::sw::mark::IMark* const pMark, sal_Bool bSelect, sal_Bool bStart )
     582             : {
     583           0 :     ShellMoveCrsr aTmp( this, bSelect );
     584           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     585           0 :     bool bRet = SwCrsrShell::GotoMark( pMark, bStart );
     586           0 :     if (bRet)
     587           0 :         aNavigationMgr.addEntry(aPos);
     588           0 :     return bRet;
     589             : }
     590             : 
     591           0 : sal_Bool SwWrtShell::GotoFly( const OUString& rName, FlyCntType eType, sal_Bool bSelFrame )
     592             : {
     593           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     594           0 :     bool bRet = SwFEShell::GotoFly(rName, eType, bSelFrame);
     595           0 :     if (bRet)
     596           0 :         aNavigationMgr.addEntry(aPos);
     597           0 :     return bRet;
     598             : }
     599             : 
     600           0 : bool SwWrtShell::GotoINetAttr( const SwTxtINetFmt& rAttr )
     601             : {
     602           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     603           0 :     bool bRet = SwCrsrShell::GotoINetAttr(rAttr);
     604           0 :     if (bRet)
     605           0 :         aNavigationMgr.addEntry(aPos);
     606           0 :     return bRet;
     607             : }
     608             : 
     609           0 : void SwWrtShell::GotoOutline( sal_uInt16 nIdx )
     610             : {
     611           0 :     addCurrentPosition();
     612           0 :     SwCrsrShell::GotoOutline (nIdx);
     613           0 : }
     614             : 
     615           0 : bool SwWrtShell::GotoOutline( const OUString& rName )
     616             : {
     617           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     618           0 :     bool bRet = SwCrsrShell::GotoOutline (rName);
     619           0 :     if (bRet)
     620           0 :         aNavigationMgr.addEntry(aPos);
     621           0 :     return bRet;
     622             : }
     623             : 
     624           0 : bool SwWrtShell::GotoRegion( const OUString& rName )
     625             : {
     626           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     627           0 :     bool bRet = SwCrsrShell::GotoRegion (rName);
     628           0 :     if (bRet)
     629           0 :         aNavigationMgr.addEntry(aPos);
     630           0 :     return bRet;
     631             :  }
     632             : 
     633           0 : sal_Bool SwWrtShell::GotoRefMark( const OUString& rRefMark, sal_uInt16 nSubType,
     634             :                                     sal_uInt16 nSeqNo )
     635             : {
     636           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     637           0 :     bool bRet = SwCrsrShell::GotoRefMark(rRefMark, nSubType, nSeqNo);
     638           0 :     if (bRet)
     639           0 :         aNavigationMgr.addEntry(aPos);
     640           0 :     return bRet;
     641             : }
     642             : 
     643           0 : sal_Bool SwWrtShell::GotoNextTOXBase( const OUString* pName )
     644             : {
     645           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     646           0 :     bool bRet = SwCrsrShell::GotoNextTOXBase(pName);
     647           0 :     if (bRet)
     648           0 :         aNavigationMgr.addEntry(aPos);
     649           0 :     return bRet;
     650             : }
     651             : 
     652           0 : bool SwWrtShell::GotoTable( const OUString& rName )
     653             : {
     654           0 :    SwPosition aPos = *GetCrsr()->GetPoint();
     655           0 :     bool bRet = SwCrsrShell::GotoTable(rName);
     656           0 :     if (bRet)
     657           0 :         aNavigationMgr.addEntry(aPos);
     658           0 :     return bRet;
     659             : }
     660             : 
     661           0 : sal_Bool SwWrtShell::GotoFld( const SwFmtFld& rFld ) {
     662           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     663           0 :     bool bRet = SwCrsrShell::GotoFld(rFld);
     664           0 :     if (bRet)
     665           0 :         aNavigationMgr.addEntry(aPos);
     666           0 :     return bRet;
     667             : }
     668             : 
     669           0 : const SwRangeRedline* SwWrtShell::GotoRedline( sal_uInt16 nArrPos, sal_Bool bSelect ) {
     670           0 :     SwPosition aPos = *GetCrsr()->GetPoint();
     671           0 :     const SwRangeRedline *pRedline = SwCrsrShell::GotoRedline(nArrPos, bSelect);
     672           0 :     if (pRedline)
     673           0 :         aNavigationMgr.addEntry(aPos);
     674           0 :     return pRedline;
     675             : }
     676             : 
     677           0 : sal_Bool SwWrtShell::SelectTxtAttr( sal_uInt16 nWhich, const SwTxtAttr* pAttr )
     678             : {
     679             :     sal_Bool bRet;
     680             :     {
     681           0 :         SwMvContext aMvContext(this);
     682           0 :         SttSelect();
     683           0 :         bRet = SwCrsrShell::SelectTxtAttr( nWhich, sal_False, pAttr );
     684             :     }
     685           0 :     EndSelect();
     686           0 :     return bRet;
     687             : }
     688             : 
     689             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10