]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
listerrors.lyx : Update a link.
[lyx.git] / src / BufferView.cpp
index fff47d05597d682fd43ddcbe4707e7ff9b598099..957a0b067307d63b13c0a65fef4e317c9488fb6e 100644 (file)
@@ -561,7 +561,7 @@ docstring BufferView::toolTip(int x, int y) const
 }
 
 
-docstring BufferView::contextMenu(int x, int y) const
+string BufferView::contextMenu(int x, int y) const
 {
        //If there is a selection, return the containing inset menu
        if (d->cursor_.selection())
@@ -1034,9 +1034,17 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                // buffer clean/dirty status by itself.
                flag.setEnabled(!buffer_.isReadonly() && buffer_.undo().hasRedoStack());
                break;
-       case LFUN_FILE_INSERT:
        case LFUN_FILE_INSERT_PLAINTEXT_PARA:
-       case LFUN_FILE_INSERT_PLAINTEXT:
+       case LFUN_FILE_INSERT_PLAINTEXT: {
+               docstring const fname = cmd.argument();
+               if (!FileName::isAbsolute(to_utf8(fname))) {
+                       flag.message(_("Absolute filename expected."));
+                       return false;
+               }
+               flag.setEnabled(cur.inTexted());
+               break;
+       }
+       case LFUN_FILE_INSERT:
        case LFUN_BOOKMARK_SAVE:
                // FIXME: Actually, these LFUNS should be moved to Text
                flag.setEnabled(cur.inTexted());
@@ -1160,6 +1168,17 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                break;
        }
 
+       // FIXME We do not really want this here, but at present we need to
+       // handle their dispatch here, for reasons explained there, so we'll
+       // handle this here, too, for consistency.
+       case LFUN_BRANCH_ACTIVATE:
+       case LFUN_BRANCH_DEACTIVATE: {
+               BranchList const & branchList = buffer().params().branchlist();
+               docstring const branchName = cmd.argument();
+               flag.setEnabled(!branchName.empty() && branchList.find(branchName));
+               break;
+       }
+
        default:
                return false;
        }
@@ -1686,27 +1705,47 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        p = Point(width_, height_);
                Cursor old = cur;
                bool const in_texted = cur.inTexted();
-               cur.reset();
+               cur.setCursor(doc_iterator_begin(cur.buffer()));
+               cur.selHandle(false);
                buffer_.changed(true);
                updateHoveredInset();
 
                d->text_metrics_[&buffer_.text()].editXY(cur, p.x_, p.y_,
                        true, act == LFUN_SCREEN_UP); 
-               cur.resetAnchor();
                //FIXME: what to do with cur.x_target()?
                bool update = in_texted && cur.bv().checkDepm(cur, old);
                cur.finishUndo();
-               if (update) {
+               if (update || cur.selection()) {
                        dr.screenUpdate(Update::Force | Update::FitCursor);
                        dr.forceBufferUpdate();
                }
                break;
        }
 
-       case LFUN_SCROLL:
-               lfunScroll(cmd);
+       case LFUN_SCROLL: {
+               string const scroll_type = cmd.getArg(0);
+               int scroll_step = 0;
+               if (scroll_type == "line")
+                       scroll_step = d->scrollbarParameters_.single_step;
+               else if (scroll_type == "page")
+                       scroll_step = d->scrollbarParameters_.page_step;
+               else
+                       return;
+               string const scroll_quantity = cmd.getArg(1);
+               if (scroll_quantity == "up")
+                       scrollUp(scroll_step);
+               else if (scroll_quantity == "down")
+                       scrollDown(scroll_step);
+               else {
+                       int const scroll_value = convert<int>(scroll_quantity);
+                       if (scroll_value)
+                               scroll(scroll_step * scroll_value);
+               }
+               buffer_.changed(true);
+               updateHoveredInset();
                dr.forceBufferUpdate();
                break;
+       }
 
        case LFUN_SCREEN_UP_SELECT: {
                cur.selHandle(true);
@@ -1906,6 +1945,51 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        cur.setCurrentFont();
                        dr.forceBufferUpdate();
                }
+       }
+
+       case LFUN_FILE_INSERT_PLAINTEXT_PARA:
+       case LFUN_FILE_INSERT_PLAINTEXT: {
+               bool const as_paragraph = (act == LFUN_FILE_INSERT_PLAINTEXT_PARA);
+               string const fname = to_utf8(cmd.argument());
+               if (!FileName::isAbsolute(fname))
+                       dr.setMessage(_("Absolute filename expected."));
+               else
+                       insertPlaintextFile(FileName(fname), as_paragraph);
+               break;
+       }
+
+       // FIXME We do not really want this here, but it has to be at present
+       // because we need a cursor for the recordUndoFullDocument call. What
+       // we would really like is a recordUndoBufferParams call that did not
+       // need a cursor, but we do not have that yet.
+       // So, if this does get fixed, this code can be moved back to Buffer.cpp,
+       // and the corresponding code in getStatus() should be moved back, too.
+       case LFUN_BRANCH_ACTIVATE:
+       case LFUN_BRANCH_DEACTIVATE: {
+               BranchList & branch_list = buffer().params().branchlist();
+               docstring const branch_name = cmd.argument();
+               // the case without a branch name is handled elsewhere
+               if (branch_name.empty()) {
+                       dispatched = false;
+                       break;
+               }
+               Branch * branch = branch_list.find(branch_name);
+               if (!branch) {
+                       LYXERR0("Branch " << branch_name << " does not exist.");
+                       dr.setError(true);
+                       docstring const msg =
+                               bformat(_("Branch \"%1$s\" does not exist."), branch_name);
+                       dr.setMessage(msg);
+                       break;
+               }
+               bool activate = cmd.action() == LFUN_BRANCH_ACTIVATE;
+               if (branch->isSelected() != activate) {
+                       branch->setSelected(activate);
+                       cur.recordUndoFullDocument();
+                       dr.setError(false);
+                       dr.screenUpdate(Update::Force);
+                       dr.forceBufferUpdate();
+               }
                break;
        }
 
@@ -2125,31 +2209,6 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 }
 
 
-void BufferView::lfunScroll(FuncRequest const & cmd)
-{
-       string const scroll_type = cmd.getArg(0);
-       int scroll_step = 0;
-       if (scroll_type == "line")
-               scroll_step = d->scrollbarParameters_.single_step;
-       else if (scroll_type == "page")
-               scroll_step = d->scrollbarParameters_.page_step;
-       else
-               return;
-       string const scroll_quantity = cmd.getArg(1);
-       if (scroll_quantity == "up")
-               scrollUp(scroll_step);
-       else if (scroll_quantity == "down")
-               scrollDown(scroll_step);
-       else {
-               int const scroll_value = convert<int>(scroll_quantity);
-               if (scroll_value)
-                       scroll(scroll_step * scroll_value);
-       }
-       buffer_.changed(true);
-       updateHoveredInset();
-}
-
-
 int BufferView::minVisiblePart()
 {
        return 2 * defaultRowHeight();
@@ -2364,7 +2423,7 @@ bool BufferView::checkDepm(Cursor & cur, Cursor & old)
        d->cursor_ = cur;
 
        cur.forceBufferUpdate();
-       buffer_.changed(true);
+       cur.screenUpdateFlags(Update::Force);
        return true;
 }
 
@@ -2981,7 +3040,7 @@ bool samePar(DocIterator const & a, DocIterator const & b)
 }
 
 
-void BufferView::setInlineCompletion(Cursor & cur, DocIterator const & pos, 
+void BufferView::setInlineCompletion(Cursor const & cur, DocIterator const & pos, 
        docstring const & completion, size_t uniqueChars)
 {
        uniqueChars = min(completion.size(), uniqueChars);