X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.cpp;h=de2d71a1234aff48dbd5efd5ab33c5af8bd70616;hb=4b7f1b3c3918cd32070c72b6d8e95a888981c7a2;hp=2a00deff7d07aafb67d8d4e1eb812c51182db60f;hpb=b6924667699d4b63a865e8b484b8f25b898dbf92;p=lyx.git diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 2a00deff7d..de2d71a123 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1014,7 +1014,6 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) case LFUN_SCREEN_SHOW_CURSOR: case LFUN_BIBTEX_DATABASE_ADD: case LFUN_BIBTEX_DATABASE_DEL: - case LFUN_NOTES_MUTATE: case LFUN_ALL_INSETS_TOGGLE: case LFUN_STATISTICS: case LFUN_BRANCH_ADD_INSERT: @@ -1026,8 +1025,8 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) break; case LFUN_REGEXP_MODE: - // FIXME: Test if current WorkArea is the search WorkArea - flag.setEnabled(buffer().isInternal() && !cur.inRegexped()); + flag.setEnabled(buffer().isInternal() && !cur.inRegexped() + && cur.inset().lyxCode() != ERT_CODE); break; case LFUN_LABEL_COPY_AS_REF: { @@ -1039,18 +1038,6 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) break; } - case LFUN_NEXT_INSET_MODIFY: { - // this is the real function we want to invoke - FuncRequest tmpcmd = cmd; - tmpcmd.action = LFUN_INSET_MODIFY; - // if there is an inset at cursor, see whether it - // handles the lfun, other start from scratch - Inset * inset = cur.nextInset(); - if (!inset || !inset->getStatus(cur, tmpcmd, flag)) - flag = lyx::getStatus(tmpcmd); - break; - } - case LFUN_LABEL_GOTO: { flag.setEnabled(!cmd.argument().empty() || getInsetByCode(cur, REF_CODE)); @@ -1161,7 +1148,7 @@ void BufferView::editInset(string const & name, Inset * inset) } -bool BufferView::dispatch(FuncRequest const & cmd) +void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) { //lyxerr << [ cmd = " << cmd << "]" << endl; @@ -1178,7 +1165,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) // Don't dispatch function that does not apply to internal buffers. if (buffer_.isInternal() && lyxaction.funcHasFlag(cmd.action, LyXAction::NoInternal)) - return false; + return; // We'll set this back to false if need be. bool dispatched = true; @@ -1203,7 +1190,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) // We are most certainly here because of a change in the document // It is then better to make sure that all dialogs are in sync with // current document settings. - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } @@ -1214,7 +1201,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) buffer_.params().clearLayoutModules(); buffer_.params().makeDocumentClass(); updateLayout(oldClass); - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } @@ -1231,7 +1218,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) buffer_.params().addLayoutModule(argument); buffer_.params().makeDocumentClass(); updateLayout(oldClass); - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } @@ -1254,7 +1241,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) buffer_.params().setBaseClass(argument); buffer_.params().makeDocumentClass(); updateLayout(oldDocClass); - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } @@ -1270,30 +1257,30 @@ bool BufferView::dispatch(FuncRequest const & cmd) buffer_.params().setBaseClass(bc); buffer_.params().makeDocumentClass(); updateLayout(oldClass); - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } case LFUN_UNDO: - cur.message(_("Undo")); + dr.setMessage(_("Undo")); cur.clearSelection(); if (!cur.textUndo()) - cur.message(_("No further undo information")); + dr.setMessage(_("No further undo information")); else - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; case LFUN_REDO: - cur.message(_("Redo")); + dr.setMessage(_("Redo")); cur.clearSelection(); if (!cur.textRedo()) - cur.message(_("No further redo information")); + dr.setMessage(_("No further redo information")); else - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; case LFUN_FONT_STATE: - cur.message(cur.currentState()); + dr.setMessage(cur.currentState()); break; case LFUN_BOOKMARK_SAVE: @@ -1356,7 +1343,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) // Set the cursor dit.pos() = pos; setCursor(dit); - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); } else { // Switch to other buffer view and resend cmd theLyXFunc().dispatch(FuncRequest( @@ -1410,18 +1397,18 @@ bool BufferView::dispatch(FuncRequest const & cmd) case LFUN_CHANGE_NEXT: findNextChange(this); // FIXME: Move this LFUN to Buffer so that we don't have to do this: - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; case LFUN_CHANGE_PREVIOUS: findPreviousChange(this); // FIXME: Move this LFUN to Buffer so that we don't have to do this: - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; case LFUN_CHANGES_MERGE: if (findNextChange(this) || findPreviousChange(this)) { - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); showDialog("changes"); } break; @@ -1434,7 +1421,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) // accept everything in a single step to support atomic undo buffer_.text().acceptOrRejectChanges(cur, Text::ACCEPT); // FIXME: Move this LFUN to Buffer so that we don't have to do this: - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; case LFUN_ALL_CHANGES_REJECT: @@ -1446,7 +1433,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) // Note: reject does not work recursively; the user may have to repeat the operation buffer_.text().acceptOrRejectChanges(cur, Text::REJECT); // FIXME: Move this LFUN to Buffer so that we don't have to do this: - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; case LFUN_WORD_FIND_FORWARD: @@ -1494,7 +1481,8 @@ bool BufferView::dispatch(FuncRequest const & cmd) DocIterator end = cur.selectionEnd(); if (beg.pit() == end.pit()) { for (pos_type p = beg.pos() ; p < end.pos() ; ++p) { - if (cur.paragraph().isDeleted(p)) + if (!cur.inMathed() + && cur.paragraph().isDeleted(p)) has_deleted = true; } } @@ -1516,23 +1504,23 @@ bool BufferView::dispatch(FuncRequest const & cmd) case LFUN_MARK_OFF: cur.clearSelection(); - cur.message(from_utf8(N_("Mark off"))); + dr.setMessage(from_utf8(N_("Mark off"))); break; case LFUN_MARK_ON: cur.clearSelection(); cur.setMark(true); - cur.message(from_utf8(N_("Mark on"))); + dr.setMessage(from_utf8(N_("Mark on"))); break; case LFUN_MARK_TOGGLE: cur.setSelection(false); if (cur.mark()) { cur.setMark(false); - cur.message(from_utf8(N_("Mark removed"))); + dr.setMessage(from_utf8(N_("Mark removed"))); } else { cur.setMark(true); - cur.message(from_utf8(N_("Mark set"))); + dr.setMessage(from_utf8(N_("Mark set"))); } cur.resetAnchor(); break; @@ -1626,32 +1614,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) // It did not work too; no action needed. break; cur.clearSelection(); - processUpdateFlags(Update::SinglePar | Update::FitCursor); - break; - } - - case LFUN_NEXT_INSET_MODIFY: { - // create the the real function we want to invoke - FuncRequest tmpcmd = cmd; - tmpcmd.action = LFUN_INSET_MODIFY; - // if there is an inset at cursor, see whether it - // can be modified. - Inset * inset = cur.nextInset(); - if (inset) { - cur.recordUndo(); - inset->dispatch(cur, tmpcmd); - } - // if it did not work, try the underlying inset. - if (!inset || !cur.result().dispatched()) { - cur.recordUndo(); - cur.dispatch(tmpcmd); - } - - if (!cur.result().dispatched()) - // It did not work too; no action needed. - break; - cur.clearSelection(); - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::SinglePar | Update::FitCursor); break; } @@ -1681,7 +1644,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) bool update = in_texted && cur.bv().checkDepm(cur, old); cur.finishUndo(); if (update) - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } @@ -1702,7 +1665,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) y = getPos(cur, cur.boundary()).y_; cur.finishUndo(); - processUpdateFlags(Update::SinglePar | Update::FitCursor); + dr.update(Update::SinglePar | Update::FitCursor); break; } @@ -1719,19 +1682,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) y = getPos(cur, cur.boundary()).y_; cur.finishUndo(); - processUpdateFlags(Update::SinglePar | Update::FitCursor); - break; - } - - // This could be rewriten using some command like forall - // once the insets refactoring is done. - case LFUN_NOTES_MUTATE: { - if (cmd.argument().empty()) - break; - - if (mutateNotes(cur, cmd.getArg(0), cmd.getArg(1))) { - processUpdateFlags(Update::Force); - } + dr.update(Update::SinglePar | Update::FitCursor); break; } @@ -1774,12 +1725,13 @@ bool BufferView::dispatch(FuncRequest const & cmd) cur.endUndoGroup(); cur = savecur; cur.fixIfBroken(); - processUpdateFlags(Update::Force); + dr.update(Update::Force); - if (iterations >= max_iter) - cur.errorMessage(bformat(_("`inset-forall' interrupted because number of actions is larger than %1$d"), max_iter)); - else - cur.message(bformat(_("Applied \"%1$s\" to %2$d insets"), from_utf8(commandstr), iterations)); + if (iterations >= max_iter) { + dr.setError(true); + dr.setMessage(bformat(_("`inset-forall' interrupted because number of actions is larger than %1$d"), max_iter)); + } else + dr.setMessage(bformat(_("Applied \"%1$s\" to %2$d insets"), from_utf8(commandstr), iterations)); break; } @@ -1803,7 +1755,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) it->dispatch(tmpcur, fr); } } - processUpdateFlags(Update::Force | Update::FitCursor); + dr.update(Update::Force | Update::FitCursor); break; } @@ -1891,7 +1843,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) cur.recordUndo(); FuncRequest fr(LFUN_INSET_MODIFY, cmd.argument()); inset->dispatch(cur, fr); - processUpdateFlags(Update::SinglePar | Update::FitCursor); + dr.update(Update::SinglePar | Update::FitCursor); break; } @@ -1901,7 +1853,8 @@ bool BufferView::dispatch(FuncRequest const & cmd) } buffer_.undo().endUndoGroup(); - return dispatched; + dr.dispatched(dispatched); + return; } @@ -2212,7 +2165,7 @@ void BufferView::gotoLabel(docstring const & label) TocIterator end = toc.end(); for (; toc_it != end; ++toc_it) { if (label == toc_it->str()) { - dispatch(toc_it->action()); + lyx::dispatch(toc_it->action()); return; } }