]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfind.cpp
These are in lib/symbols, so should have been caught by the first test:
[lyx.git] / src / lyxfind.cpp
index e5bf8b609bb60d4b348caf6043d7155ca00768b3..e95f06e27fa9d4fe963124ce12475cf36eb10bb6 100644 (file)
@@ -17,6 +17,7 @@
 #include "lyxfind.h"
 
 #include "Buffer.h"
+#include "BufferList.h"
 #include "buffer_funcs.h"
 #include "BufferParams.h"
 #include "BufferView.h"
@@ -1005,6 +1006,26 @@ bool prev_document_buffer(Buffer * & p_buf) {
 }
 
 
+/** Switch p_buf to point to next open buffer.
+ **
+ ** Return true if restarted from first open buffer.
+ **/
+bool next_open_buffer(Buffer * & p_buf) {
+       p_buf = theBufferList().next(p_buf);
+       return p_buf == *theBufferList().begin();
+}
+
+
+/** Switch p_buf to point to previous open buffer.
+ **
+ ** Return true if restarted from last open buffer.
+ **/
+bool prev_open_buffer(Buffer * & p_buf) {
+       p_buf = theBufferList().previous(p_buf);
+       return p_buf == *(theBufferList().end() - 1);
+}
+
+
 /// Finds forward
 int findForwardAdv(DocIterator & cur, MatchStringAdv & match)
 {
@@ -1025,13 +1046,16 @@ int findForwardAdv(DocIterator & cur, MatchStringAdv & match)
                }
                // No match has been found in current buffer
                bool prompt = false;
-               if (match.opt.scope == FindAndReplaceOptions::S_BUFFER) {
+               switch (match.opt.scope) {
+               case FindAndReplaceOptions::S_BUFFER:
                        prompt = true;
-               } else if (match.opt.scope == FindAndReplaceOptions::S_DOCUMENT) {
+                       break;
+               case FindAndReplaceOptions::S_DOCUMENT:
                        prompt = next_document_buffer(match.p_buf);
-               } else {
-                       /* Unimplemented scope */
-                       LASSERT(false, /**/);
+                       break;
+               case FindAndReplaceOptions::S_OPEN_BUFFERS:
+                       prompt = next_open_buffer(match.p_buf);
+                       break;
                }
                if (prompt) {
                        if (wrap_answer != -1)
@@ -1049,6 +1073,7 @@ int findForwardAdv(DocIterator & cur, MatchStringAdv & match)
        return 0;
 }
 
+
 /// Find the most backward consecutive match within same paragraph while searching backwards.
 void findMostBackwards(DocIterator & cur, MatchStringAdv const & match, int & len) {
        DocIterator cur_begin = doc_iterator_begin(cur.buffer());
@@ -1137,13 +1162,16 @@ int findBackwardsAdv(DocIterator & cur, MatchStringAdv & match) {
                }
                // No match has been found in current buffer
                bool prompt = false;
-               if (match.opt.scope == FindAndReplaceOptions::S_BUFFER) {
+               switch (match.opt.scope) {
+               case FindAndReplaceOptions::S_BUFFER:
                        prompt = true;
-               } else if (match.opt.scope == FindAndReplaceOptions::S_DOCUMENT) {
+                       break;
+               case FindAndReplaceOptions::S_DOCUMENT:
                        prompt = prev_document_buffer(match.p_buf);
-               } else {
-                       /* Unimplemented scope */
-                       LASSERT(false, /**/);
+                       break;
+               case FindAndReplaceOptions::S_OPEN_BUFFERS:
+                       prompt = prev_open_buffer(match.p_buf);
+                       break;
                }
                if (prompt) {
                        wrap_answer = frontend::Alert::prompt(