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: */
|