[Libreoffice-commits] core.git: 2 commits - sw/source

Jim Raykowski raykowj at gmail.com
Thu Apr 26 14:17:40 UTC 2018


 sw/source/core/crsr/trvlreg.cxx   |   48 ++++++++++++++++++++++++++++++++++----
 sw/source/uibase/wrtsh/wrtsh3.cxx |   37 +++++++++++++++++++++++++++--
 2 files changed, 79 insertions(+), 6 deletions(-)

New commits:
commit 7a30e0d63d37eeb7b5c1e30791de17a51ddd0652
Author: Jim Raykowski <raykowj at gmail.com>
Date:   Sat Apr 21 23:09:15 2018 -0800

    tdf#115600 Display messages in FindBar for Section navigation
    
    ...and make Section navigation wrap
    
    Change-Id: I3af8ba9ac1b3177f5aaf54628976c14a63a1685e
    Reviewed-on: https://gerrit.libreoffice.org/53275
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/sw/source/core/crsr/trvlreg.cxx b/sw/source/core/crsr/trvlreg.cxx
index d5255047cd26..ecec0f16ee85 100644
--- a/sw/source/core/crsr/trvlreg.cxx
+++ b/sw/source/core/crsr/trvlreg.cxx
@@ -26,21 +26,39 @@
 #include "callnk.hxx"
 #include <pamtyp.hxx>
 #include <section.hxx>
+#include <svx/srchdlg.hxx>
 
 bool GotoPrevRegion( SwPaM& rCurrentCursor, SwMoveFnCollection const & fnPosRegion,
                         bool bInReadOnly )
 {
+    SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::Empty );
     SwNodeIndex aIdx( rCurrentCursor.GetPoint()->nNode );
     SwSectionNode* pNd = aIdx.GetNode().FindSectionNode();
     if( pNd )
         aIdx.Assign( *pNd, - 1 );
 
+    SwNodeIndex aOldIdx = aIdx;
+    sal_uLong nLastNd = rCurrentCursor.GetDoc()->GetNodes().Count() - 1;
     do {
         while( aIdx.GetIndex() &&
             nullptr == ( pNd = aIdx.GetNode().StartOfSectionNode()->GetSectionNode()) )
+        {
             --aIdx;
+            if ( aIdx == aOldIdx )
+            {
+                SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::NavElementNotFound );
+                return false;
+            }
+        }
 
-        if( pNd ) // is there another section node?
+        if ( !aIdx.GetIndex() )
+        {
+            SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::StartWrapped );
+            aIdx = nLastNd;
+            continue;
+        }
+
+        assert( pNd );  // coverity, should never be nullptr
         {
             if( pNd->GetSection().IsHiddenFlag() ||
                 ( !bInReadOnly &&
@@ -48,6 +66,7 @@ bool GotoPrevRegion( SwPaM& rCurrentCursor, SwMoveFnCollection const & fnPosRegi
             {
                 // skip protected or hidden ones
                 aIdx.Assign( *pNd, - 1 );
+                continue;
             }
             else if( &fnPosRegion == &fnMoveForward )
             {
@@ -76,25 +95,43 @@ bool GotoPrevRegion( SwPaM& rCurrentCursor, SwMoveFnCollection const & fnPosRegi
             rCurrentCursor.GetPoint()->nNode = aIdx;
             return true;
         }
-    } while( pNd );
+    } while( true );
+
+    // the flow is such that it is not possible to get here
     return false;
 }
 
 bool GotoNextRegion( SwPaM& rCurrentCursor, SwMoveFnCollection const & fnPosRegion,
                         bool bInReadOnly )
 {
+    SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::Empty );
     SwNodeIndex aIdx( rCurrentCursor.GetPoint()->nNode );
     SwSectionNode* pNd = aIdx.GetNode().FindSectionNode();
     if( pNd )
         aIdx.Assign( *pNd->EndOfSectionNode(), - 1 );
 
+    SwNodeIndex aOldIdx = aIdx;
     sal_uLong nEndCount = aIdx.GetNode().GetNodes().Count()-1;
     do {
         while( aIdx.GetIndex() < nEndCount &&
                 nullptr == ( pNd = aIdx.GetNode().GetSectionNode()) )
+        {
             ++aIdx;
+            if ( aIdx == aOldIdx )
+            {
+                SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::NavElementNotFound );
+                return false;
+            }
+        }
 
-        if( pNd ) // is there another section node?
+        if ( aIdx.GetIndex() == nEndCount )
+        {
+            SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::EndWrapped );
+            aIdx = 0;
+            continue;
+        }
+
+        assert( pNd );  // coverity, should never be nullptr
         {
             if( pNd->GetSection().IsHiddenFlag() ||
                 ( !bInReadOnly &&
@@ -102,6 +139,7 @@ bool GotoNextRegion( SwPaM& rCurrentCursor, SwMoveFnCollection const & fnPosRegi
             {
                 // skip protected or hidden ones
                 aIdx.Assign( *pNd->EndOfSectionNode(), +1 );
+                continue;
             }
             else if( &fnPosRegion == &fnMoveForward )
             {
@@ -130,7 +168,9 @@ bool GotoNextRegion( SwPaM& rCurrentCursor, SwMoveFnCollection const & fnPosRegi
             rCurrentCursor.GetPoint()->nNode = aIdx;
             return true;
         }
-    } while( pNd );
+    } while( true );
+
+    // the flow is such that it is not possible to get here
     return false;
 }
 
commit 3659520e3324779b6bf7c0f5a5b3f3072e8a875a
Author: Jim Raykowski <raykowj at gmail.com>
Date:   Sun Apr 22 23:58:22 2018 -0800

    tdf#115600 Display messages in FindBar for Bookmark navigation
    
    ...and make Bookmark navigation wrap
    
    Change-Id: I3cba18e37c4887ad68d358c10ebb9c9ff592f6ad
    Reviewed-on: https://gerrit.libreoffice.org/53370
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/sw/source/uibase/wrtsh/wrtsh3.cxx b/sw/source/uibase/wrtsh/wrtsh3.cxx
index 337e005470d6..7fcd2f56aaab 100644
--- a/sw/source/uibase/wrtsh/wrtsh3.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh3.cxx
@@ -25,6 +25,7 @@
 #include <svx/svdview.hxx>
 #include <svx/fmglob.hxx>
 #include <svx/svdouno.hxx>
+#include <svx/srchdlg.hxx>
 #include <com/sun/star/form/FormButtonType.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <sfx2/htmlmode.hxx>
@@ -140,12 +141,44 @@ void SwWrtShell::GotoMark( const ::sw::mark::IMark* const pMark )
 
 bool SwWrtShell::GoNextBookmark()
 {
-    return MoveBookMark( BOOKMARK_NEXT );
+    if ( !getIDocumentMarkAccess()->getBookmarksCount() )
+    {
+        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::NavElementNotFound );
+        return false;
+    }
+    LockView( true );
+    bool bRet = MoveBookMark( BOOKMARK_NEXT );
+    if ( !bRet )
+    {
+        MoveBookMark( BOOKMARK_INDEX, getIDocumentMarkAccess()->getBookmarksBegin()->get() );
+        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::EndWrapped );
+    }
+    else
+        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::Empty );
+    LockView( false );
+    ShowCursor();
+    return true;
 }
 
 bool SwWrtShell::GoPrevBookmark()
 {
-    return MoveBookMark( BOOKMARK_PREV );
+    if ( !getIDocumentMarkAccess()->getBookmarksCount() )
+    {
+        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::NavElementNotFound );
+        return false;
+    }
+    LockView( true );
+    bool bRet = MoveBookMark( BOOKMARK_PREV );
+    if ( !bRet )
+    {
+        MoveBookMark( BOOKMARK_INDEX, ( getIDocumentMarkAccess()->getBookmarksEnd() - 1 )->get() );
+        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::StartWrapped );
+    }
+    else
+        SvxSearchDialogWrapper::SetSearchLabel( SearchLabel::Empty );
+    LockView( false );
+    ShowCursor();
+    return true;
 }
 
 void SwWrtShell::ExecMacro( const SvxMacro& rMacro, OUString* pRet, SbxArray* pArgs )


More information about the Libreoffice-commits mailing list