]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
grammar
[lyx.git] / src / BufferView.cpp
index b67775ecd84b3e9b5fa25346534ae61c51b44d9e..0025277e5330406ae1d33eda3113ebf668c3884b 100644 (file)
@@ -61,6 +61,7 @@
 #include "frontends/NullPainter.h"
 #include "frontends/Painter.h"
 #include "frontends/Selection.h"
+#include "frontends/Clipboard.h"
 
 #include "support/convert.h"
 #include "support/debug.h"
@@ -274,9 +275,6 @@ struct BufferView::Private
          */
        frontend::GuiBufferViewDelegate * gui_;
 
-       /// cache search string for simple search
-       docstring search_request_cache_;
-
        ///
        map<string, Inset *> edited_insets_;
 
@@ -449,6 +447,26 @@ Buffer const & BufferView::buffer() const
 }
 
 
+docstring const & BufferView::searchRequestCache() const
+{
+       return theClipboard().getFindBuffer();
+}
+
+
+void BufferView::setSearchRequestCache(docstring const & text)
+{
+       bool casesensitive;
+       bool matchword;
+       bool forward;
+       bool wrap;
+       bool instant;
+       bool onlysel;
+       docstring const search = string2find(text, casesensitive, matchword,
+                                            forward, wrap, instant, onlysel);
+       theClipboard().setFindBuffer(search);
+}
+
+
 bool BufferView::needsFitCursor() const
 {
        if (cursorStatus(d->cursor_) == CUR_INSIDE) {
@@ -959,15 +977,8 @@ bool BufferView::scrollToCursor(DocIterator const & dit, bool const recenter)
                CursorSlice const & cs = dit.innerTextSlice();
                int offset = coordOffset(dit).y_;
                int ypos = pm.position() + offset;
-               Row const & row = pm.getRow(cs.pos(), dit.boundary());
-               Dimension row_dim = row.dim();
-               // FIXME: the will not be necessary anymore if Row has both a
-               // dim() which is its full dimension and a contentsDim() which
-               // is the dimension of the text only.
-               if (&row == &pm.rows().front())
-                       row_dim.asc = pm.ascent();
-               if (&row == &pm.rows().back())
-                       row_dim.des = pm.descent();
+               Dimension const & row_dim =
+                       pm.getRow(cs.pos(), dit.boundary()).dim();
                int scrolled = 0;
                if (recenter)
                        scrolled = scroll(ypos - height_/2);
@@ -1620,21 +1631,18 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                docstring searched_string;
 
                if (!cmd.argument().empty()) {
-                       d->search_request_cache_ = cmd.argument();
+                       setSearchRequestCache(cmd.argument());
                        searched_string = cmd.argument();
                } else {
-                       searched_string = d->search_request_cache_;
+                       searched_string = searchRequestCache();
                }
 
                if (searched_string.empty())
                        break;
 
-               bool casesensitive;
-               bool matchword;
-               bool forward;
-               docstring const search = string2find(searched_string, casesensitive, matchword, forward);
                docstring const data =
-                       find2string(search, casesensitive, matchword, act == LFUN_WORD_FIND_FORWARD);
+                       find2string(searched_string, false, false,
+                                   act == LFUN_WORD_FIND_FORWARD, false, false, false);
                bool found = lyxfind(this, FuncRequest(LFUN_WORD_FIND, data));
                if (found)
                        dr.screenUpdate(Update::Force | Update::FitCursor);
@@ -1645,8 +1653,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 
        case LFUN_WORD_FIND: {
                docstring arg = cmd.argument();
-               if (arg.empty() && !d->search_request_cache_.empty())
-                       arg = d->search_request_cache_;
+               if (arg.empty())
+                       arg = searchRequestCache();
                if (arg.empty()) {
                        lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, "findreplace"));
                        break;
@@ -1656,14 +1664,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                else
                        dr.setMessage(_("Search string not found!"));
 
-               d->search_request_cache_ = arg;
+               setSearchRequestCache(arg);
                break;
        }
 
        case LFUN_SEARCH_STRING_SET: {
                docstring pattern = cmd.argument();
                if (!pattern.empty()) {
-                       d->search_request_cache_ = pattern;
+                       setSearchRequestCache(pattern);
                        break;
                }
                if (cur.selection())
@@ -1675,7 +1683,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        cur.selection(false);
                        cur.pos() = spos;
                }
-               d->search_request_cache_ = pattern;
+               setSearchRequestCache(pattern);
                break;
        }