X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=750d2c210026a8141f171e64645863c7ff3902b0;hb=c544107e324090c6eafb4c56749da2624b9b1122;hp=ae1fa6e2e5acb4f072b86b91b3946dccd48ddea4;hpb=6d47abda7f4c367949145942f40c336beb515a8f;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index ae1fa6e2e5..750d2c2100 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -15,6 +15,8 @@ #include "kbmap.h" #include "lyxrow.h" #include "bufferlist.h" +#include "buffer.h" +#include "buffer_funcs.h" #include "BufferView.h" #include "lyxserver.h" #include "intl.h" @@ -43,8 +45,7 @@ #include "ParagraphParameters.h" #include "insets/insetcommand.h" -#include "insets/inseterror.h" -#include "insets/insetert.h" +#include "insets/insetexternal.h" #include "insets/insettabular.h" #include "mathed/formulamacro.h" @@ -65,11 +66,11 @@ #include "support/FileInfo.h" #include "support/forkedcontr.h" #include "support/lstrings.h" +#include "support/tostr.h" #include "support/path.h" +#include "support/path_defines.h" #include "support/lyxfunctional.h" -#include "BoostFormat.h" - #include #include #include @@ -78,6 +79,8 @@ #include #include +using namespace lyx::support; + using std::pair; using std::make_pair; using std::endl; @@ -85,6 +88,7 @@ using std::find_if; using std::vector; using std::transform; using std::back_inserter; +using namespace bv_funcs; extern BufferList bufferlist; extern LyXServer * lyxserver; @@ -108,26 +112,12 @@ LyXFunc::LyXFunc(LyXView * o) } -inline -LyXText * LyXFunc::TEXT(bool flag = true) const -{ - if (flag) - return view()->text; - return view()->getLyXText(); -} - - -inline -void LyXFunc::moveCursorUpdate(bool flag, bool selecting) +void LyXFunc::moveCursorUpdate() { - if (selecting || TEXT(flag)->selection.mark()) { - TEXT(flag)->setSelection(); - if (!TEXT(flag)->isInInset()) - view()->toggleToggle(); - } - view()->update(TEXT(flag), BufferView::SELECT); - view()->showCursor(); - + LyXText * lt = view()->text; + if (lt->selection.mark()) + lt->setSelection(); + view()->update(); view()->switchKeyMap(); } @@ -141,13 +131,13 @@ void LyXFunc::handleKeyFunc(kb_action action) } owner->getIntl().getTransManager() - .deadkey(c, get_accent(action).accent, TEXT(false)); + .deadkey(c, get_accent(action).accent, view()->getLyXText()); // Need to clear, in case the minibuffer calls these // actions keyseq.clear(); // copied verbatim from do_accent_char - view()->update(TEXT(false), BufferView::SELECT); - TEXT(false)->selection.cursor = TEXT(false)->cursor; + view()->update(); + view()->getLyXText()->selection.cursor = view()->getLyXText()->cursor; } @@ -319,10 +309,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const // encode this in the function itself. bool disable = false; switch (ev.action) { - case LFUN_MENUPRINT: - disable = !Exporter::IsExportable(buf, "dvi") - || lyxrc.print_command == "none"; - break; case LFUN_EXPORT: disable = ev.argument != "custom" && !Exporter::IsExportable(buf, ev.argument); @@ -337,8 +323,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const case LFUN_COPY: if (tli) { UpdatableInset * in = tli; - if (in->lyxCode() != Inset::TABULAR_CODE) { - in = tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE); + if (in->lyxCode() != InsetOld::TABULAR_CODE) { + in = tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE); } if (in && static_cast(in)->hasSelection()) { disable = false; @@ -348,31 +334,35 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const disable = !mathcursor && !view()->getLyXText()->selection.set(); break; case LFUN_RUNCHKTEX: - disable = lyxrc.chktex_command == "none"; + disable = !buf->isLatex() || lyxrc.chktex_command == "none"; break; case LFUN_BUILDPROG: disable = !Exporter::IsExportable(buf, "program"); break; - case LFUN_LAYOUT_CHARACTER: - disable = tli && tli->lyxCode() == Inset::ERT_CODE; - break; - case LFUN_LAYOUT_TABULAR: disable = !tli - || (tli->lyxCode() != Inset::TABULAR_CODE - && !tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)); + || (tli->lyxCode() != InsetOld::TABULAR_CODE + && !tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE)); + break; + + case LFUN_DEPTH_MIN: + disable = !changeDepth(view(), view()->getLyXText(), DEC_DEPTH, true); + break; + + case LFUN_DEPTH_PLUS: + disable = !changeDepth(view(), view()->getLyXText(), INC_DEPTH, true); break; case LFUN_LAYOUT: case LFUN_LAYOUT_PARAGRAPH: { - Inset * inset = TEXT(false)->cursor.par()->inInset(); + InsetOld * inset = view()->getLyXText()->cursor.par()->inInset(); disable = inset && inset->forceDefaultParagraphs(inset); break; } case LFUN_INSET_OPTARG: - disable = (TEXT(false)->cursor.par()->layout()->optionalargs == 0); + disable = (view()->getLyXText()->cursor.par()->layout()->optionalargs == 0); break; case LFUN_TABULAR_FEATURE: @@ -420,16 +410,20 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const if (tli) { FuncStatus ret; //ret.disabled(true); - if (tli->lyxCode() == Inset::TABULAR_CODE) { + if (tli->lyxCode() == InsetOld::TABULAR_CODE) { ret = static_cast(tli) ->getStatus(ev.argument); - } else if (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)) { + flag |= ret; + disable = false; + } else if (tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE)) { ret = static_cast - (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)) + (tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE)) ->getStatus(ev.argument); + flag |= ret; + disable = false; + } else { + disable = true; } - flag |= ret; - disable = false; } else { static InsetTabular inset(*owner->buffer(), 1, 1); FuncStatus ret; @@ -452,7 +446,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const break; case LFUN_VC_REVERT: case LFUN_VC_UNDO: - case LFUN_VC_HISTORY: disable = !buf->lyxvc.inUse(); break; case LFUN_MENURELOAD: @@ -477,9 +470,47 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const && lt->inset_owner->owner()->isOpen())); break; } - case LFUN_LATEX_LOG: - disable = !IsFileReadable(buf->getLogName().second); + + case LFUN_INSET_SETTINGS: { + disable = true; + UpdatableInset * inset = view()->theLockingInset(); + + if (!inset) + break; + + // get the innermost inset + inset = inset->getLockingInset(); + + // jump back to owner if an InsetText, so + // we get back to the InsetTabular or whatever + if (inset->lyxCode() == InsetOld::TEXT_CODE) + inset = inset->owner(); + + InsetOld::Code code = inset->lyxCode(); + switch (code) { + case InsetOld::TABULAR_CODE: + disable = ev.argument != "tabular"; + break; + case InsetOld::ERT_CODE: + disable = ev.argument != "ert"; + break; + case InsetOld::FLOAT_CODE: + disable = ev.argument != "float"; + break; + case InsetOld::MINIPAGE_CODE: + disable = ev.argument != "minipage"; + break; + case InsetOld::WRAP_CODE: + disable = ev.argument != "wrap"; + break; + case InsetOld::NOTE_CODE: + disable = ev.argument != "note"; + break; + default: + break; + } break; + } case LFUN_MATH_MUTATE: if (mathcursor) @@ -499,109 +530,131 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const disable = !mathcursor; break; + case LFUN_DIALOG_SHOW: { + string const name = ev.getArg(0); + if (!buf) { + disable = !(name == "aboutlyx" || + name == "file" || + name == "forks" || + name == "preferences" || + name == "texinfo"); + break; + } + + if (name == "print") { + disable = !Exporter::IsExportable(buf, "dvi") || + lyxrc.print_command == "none"; + } else if (name == "character") { + UpdatableInset * tli = view()->theLockingInset(); + disable = tli && tli->lyxCode() == InsetOld::ERT_CODE; + } else if (name == "vclog") { + disable = !buf->lyxvc.inUse(); + } else if (name == "latexlog") { + disable = !IsFileReadable(buf->getLogName().second); + } + break; + } + default: break; } // the functions which insert insets - Inset::Code code = Inset::NO_CODE; + InsetOld::Code code = InsetOld::NO_CODE; switch (ev.action) { case LFUN_DIALOG_SHOW_NEW_INSET: if (ev.argument == "bibitem") - code = Inset::BIBITEM_CODE; + code = InsetOld::BIBITEM_CODE; else if (ev.argument == "bibtex") - code = Inset::BIBTEX_CODE; + code = InsetOld::BIBTEX_CODE; else if (ev.argument == "citation") - code = Inset::CITE_CODE; + code = InsetOld::CITE_CODE; else if (ev.argument == "ert") - code = Inset::ERT_CODE; + code = InsetOld::ERT_CODE; else if (ev.argument == "external") - code = Inset::EXTERNAL_CODE; + code = InsetOld::EXTERNAL_CODE; else if (ev.argument == "float") - code = Inset::FLOAT_CODE; + code = InsetOld::FLOAT_CODE; else if (ev.argument == "graphics") - code = Inset::GRAPHICS_CODE; + code = InsetOld::GRAPHICS_CODE; else if (ev.argument == "include") - code = Inset::INCLUDE_CODE; + code = InsetOld::INCLUDE_CODE; else if (ev.argument == "index") - code = Inset::INDEX_CODE; + code = InsetOld::INDEX_CODE; else if (ev.argument == "label") - code = Inset::LABEL_CODE; + code = InsetOld::LABEL_CODE; else if (ev.argument == "minipage") - code = Inset::MINIPAGE_CODE; + code = InsetOld::MINIPAGE_CODE; else if (ev.argument == "ref") - code = Inset::REF_CODE; + code = InsetOld::REF_CODE; else if (ev.argument == "toc") - code = Inset::TOC_CODE; + code = InsetOld::TOC_CODE; else if (ev.argument == "url") - code = Inset::URL_CODE; + code = InsetOld::URL_CODE; else if (ev.argument == "wrap") - code = Inset::WRAP_CODE; + code = InsetOld::WRAP_CODE; break; case LFUN_INSET_ERT: - code = Inset::ERT_CODE; + code = InsetOld::ERT_CODE; break; case LFUN_INSET_FOOTNOTE: - code = Inset::FOOT_CODE; + code = InsetOld::FOOT_CODE; break; case LFUN_TABULAR_INSERT: - code = Inset::TABULAR_CODE; + code = InsetOld::TABULAR_CODE; break; case LFUN_INSET_MARGINAL: - code = Inset::MARGIN_CODE; + code = InsetOld::MARGIN_CODE; break; case LFUN_INSET_MINIPAGE: - code = Inset::MINIPAGE_CODE; + code = InsetOld::MINIPAGE_CODE; break; case LFUN_INSET_FLOAT: case LFUN_INSET_WIDE_FLOAT: - code = Inset::FLOAT_CODE; + code = InsetOld::FLOAT_CODE; break; case LFUN_INSET_WRAP: - code = Inset::WRAP_CODE; + code = InsetOld::WRAP_CODE; break; case LFUN_FLOAT_LIST: - code = Inset::FLOAT_LIST_CODE; + code = InsetOld::FLOAT_LIST_CODE; break; #if 0 case LFUN_INSET_LIST: - code = Inset::LIST_CODE; + code = InsetOld::LIST_CODE; break; case LFUN_INSET_THEOREM: - code = Inset::THEOREM_CODE; + code = InsetOld::THEOREM_CODE; break; #endif case LFUN_INSET_CAPTION: - code = Inset::CAPTION_CODE; + code = InsetOld::CAPTION_CODE; break; case LFUN_INSERT_NOTE: - code = Inset::NOTE_CODE; + code = InsetOld::NOTE_CODE; break; case LFUN_INSERT_LABEL: - code = Inset::LABEL_CODE; + code = InsetOld::LABEL_CODE; break; case LFUN_INSET_OPTARG: - code = Inset::OPTARG_CODE; + code = InsetOld::OPTARG_CODE; break; case LFUN_ENVIRONMENT_INSERT: - code = Inset::MINIPAGE_CODE; + code = InsetOld::MINIPAGE_CODE; break; case LFUN_INDEX_INSERT: - code = Inset::INDEX_CODE; + code = InsetOld::INDEX_CODE; break; case LFUN_INDEX_PRINT: - code = Inset::INDEX_PRINT_CODE; + code = InsetOld::INDEX_PRINT_CODE; break; case LFUN_TOC_INSERT: - code = Inset::TOC_CODE; - break; - case LFUN_PARENTINSERT: - code = Inset::PARENT_CODE; + code = InsetOld::TOC_CODE; break; case LFUN_HTMLURL: case LFUN_URL: - code = Inset::URL_CODE; + code = InsetOld::URL_CODE; break; case LFUN_QUOTE: // always allow this, since we will inset a raw quote @@ -613,17 +666,17 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const case LFUN_MENU_SEPARATOR: case LFUN_LDOTS: case LFUN_END_OF_SENTENCE: - code = Inset::SPECIALCHAR_CODE; + code = InsetOld::SPECIALCHAR_CODE; break; - case LFUN_PROTECTEDSPACE: + case LFUN_SPACE_INSERT: // slight hack: we know this is allowed in math mode if (!mathcursor) - code = Inset::SPECIALCHAR_CODE; + code = InsetOld::SPACE_CODE; break; default: break; } - if (code != Inset::NO_CODE && tli && !tli->insetAllowed(code)) + if (code != InsetOld::NO_CODE && tli && !tli->insetAllowed(code)) disable = true; if (disable) @@ -639,7 +692,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const flag.setOnOff(buf->isReadonly()); break; case LFUN_APPENDIX: - flag.setOnOff(TEXT(false)->cursor.par()->params().startOfAppendix()); + flag.setOnOff(view()->getLyXText()->cursor.par()->params().startOfAppendix()); break; case LFUN_SWITCHBUFFER: // toggle on the current buffer, but do not toggle off @@ -656,7 +709,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const // the font related toggles if (!mathcursor) { - LyXFont const & font = TEXT(false)->real_current_font; + LyXFont const & font = view()->getLyXText()->real_current_font; switch (ev.action) { case LFUN_EMPH: flag.setOnOff(font.emph() == LyXFont::ON); @@ -724,15 +777,7 @@ void LyXFunc::dispatch(string const & s, bool verbose) int const action = lyxaction.LookupFunc(s); if (action == LFUN_UNKNOWN_ACTION) { -#if USE_BOOST_FORMAT -boost::format fmt(_("Unknown function (%1$s)")); -fmt % s; -owner->message(fmt.str()); -#else - string const msg = string(_("Unknown function (")) - + s + ')'; - owner->message(msg); -#endif + owner->message(bformat(_("Unknown function (%1$s)"), s)); return; } @@ -745,6 +790,28 @@ void LyXFunc::dispatch(int ac, bool verbose) dispatch(lyxaction.retrieveActionArg(ac), verbose); } +namespace { + bool ensureBufferClean(BufferView * bv) { + + Buffer & buf = *bv->buffer(); + if (buf.isClean()) + return true; + + string const file = MakeDisplayPath(buf.fileName(), 30); + string text = bformat(_("The document %1$s has unsaved " + "changes.\n\nDo you want to save " + "the document?"), file); + int const ret = Alert::prompt(_("Save changed document?"), + text, 0, 1, _("&Save"), + _("&Cancel")); + + if (ret == 0) + bv->owner()->dispatch(FuncRequest(LFUN_MENUWRITE)); + + return buf.isClean(); + } + +} //namespace anon void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) @@ -765,9 +832,6 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) selection_possible = false; - if (view()->available()) - view()->hideCursor(); - string argument = ev.argument; kb_action action = ev.action; @@ -781,10 +845,13 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) goto exit_with_message; } + if (view()->available()) + view()->hideCursor(); + if (view()->available() && view()->theLockingInset()) { - Inset::RESULT result; - if ((action > 1) || ((action == LFUN_UNKNOWN_ACTION) && - (!keyseq.deleted()))) + InsetOld::RESULT result; + if (action > 1 || (action == LFUN_UNKNOWN_ACTION && + !keyseq.deleted())) { UpdatableInset * inset = view()->theLockingInset(); #if 1 @@ -796,6 +863,19 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) && argument.empty()) { argument = encoded_last_key; } + + // the insets can't try to handle this, + // a table cell in the dummy position will + // lock its insettext, the insettext will + // pass it the bufferview, and succeed, + // so it will stay not locked. Not good + // if we've just done LFUN_ESCAPE (which + // injects an LFUN_PARAGRAPH_UPDATE) + if (action == LFUN_PARAGRAPH_UPDATE) { + view()->dispatch(ev); + goto exit_with_message; + } + // Undo/Redo is a bit tricky for insets. if (action == LFUN_UNDO) { view()->undo(); @@ -811,49 +891,52 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) goto exit_with_message; // If UNDISPATCHED, just soldier on else if (result == FINISHED) { + owner->clearMessage(); goto exit_with_message; // We do not need special RTL handling here: // FINISHED means that the cursor should be // one position after the inset. } else if (result == FINISHED_RIGHT) { - TEXT()->cursorRight(view()); - moveCursorUpdate(true, false); - owner->view_state_changed(); + view()->text->cursorRight(view()); + moveCursorUpdate(); + owner->clearMessage(); goto exit_with_message; } else if (result == FINISHED_UP) { - if (TEXT()->cursor.irow()->previous()) { + RowList::iterator const irow = view()->text->cursorIRow(); + if (irow != view()->text->rows().begin()) { #if 1 - TEXT()->setCursorFromCoordinates( - TEXT()->cursor.ix() + inset_x, - TEXT()->cursor.iy() - - TEXT()->cursor.irow()->baseline() - 1); - TEXT()->cursor.x_fix(TEXT()->cursor.x()); + view()->text->setCursorFromCoordinates( + view()->text->cursor.ix() + inset_x, + view()->text->cursor.iy() - + irow->baseline() - 1); + view()->text->cursor.x_fix(view()->text->cursor.x()); #else - TEXT()->cursorUp(view()); + view()->text->cursorUp(view()); #endif - moveCursorUpdate(true, false); - owner->view_state_changed(); + moveCursorUpdate(); } else { - view()->update(TEXT(), BufferView::SELECT); + view()->update(); } + owner->clearMessage(); goto exit_with_message; } else if (result == FINISHED_DOWN) { - if (TEXT()->cursor.irow()->next()) { + RowList::iterator const irow = view()->text->cursorIRow(); + if (boost::next(irow) != view()->text->rows().end()) { #if 1 - TEXT()->setCursorFromCoordinates( - TEXT()->cursor.ix() + inset_x, - TEXT()->cursor.iy() - - TEXT()->cursor.irow()->baseline() + - TEXT()->cursor.irow()->height() + 1); - TEXT()->cursor.x_fix(TEXT()->cursor.x()); + view()->text->setCursorFromCoordinates( + view()->text->cursor.ix() + inset_x, + view()->text->cursor.iy() - + irow->baseline() + + irow->height() + 1); + view()->text->cursor.x_fix(view()->text->cursor.x()); #else - TEXT()->cursorDown(view()); + view()->text->cursorDown(view()); #endif } else { - TEXT()->cursorRight(view()); + view()->text->cursorRight(view()); } - moveCursorUpdate(true, false); - owner->view_state_changed(); + moveCursorUpdate(); + owner->clearMessage(); goto exit_with_message; } #warning I am not sure this is still right, please have a look! (Jug 20020417) @@ -863,30 +946,30 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) case LFUN_UNKNOWN_ACTION: case LFUN_BREAKPARAGRAPH: case LFUN_BREAKLINE: - TEXT()->cursorRight(view()); + view()->text->cursorRight(view()); view()->switchKeyMap(); owner->view_state_changed(); break; case LFUN_RIGHT: - if (!TEXT()->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { - TEXT()->cursorRight(view()); - moveCursorUpdate(true, false); + if (!view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { + view()->text->cursorRight(view()); + moveCursorUpdate(); owner->view_state_changed(); } goto exit_with_message; case LFUN_LEFT: - if (TEXT()->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { - TEXT()->cursorRight(view()); - moveCursorUpdate(true, false); + if (view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { + view()->text->cursorRight(view()); + moveCursorUpdate(); owner->view_state_changed(); } goto exit_with_message; case LFUN_DOWN: - if (TEXT()->cursor.row()->next()) - TEXT()->cursorDown(view()); + if (boost::next(view()->text->cursorRow()) != view()->text->rows().end()) + view()->text->cursorDown(view()); else - TEXT()->cursorRight(view()); - moveCursorUpdate(true, false); + view()->text->cursorRight(view()); + moveCursorUpdate(); owner->view_state_changed(); goto exit_with_message; default: @@ -898,35 +981,31 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) switch (action) { - case LFUN_ESCAPE: - { - if (!view()->available()) break; + case LFUN_ESCAPE: { + if (!view()->available()) + break; // this function should be used always [asierra060396] - UpdatableInset * tli = - view()->theLockingInset(); + UpdatableInset * tli = view()->theLockingInset(); if (tli) { UpdatableInset * lock = tli->getLockingInset(); if (tli == lock) { view()->unlockInset(tli); - TEXT()->cursorRight(view()); - moveCursorUpdate(true, false); + view()->text->cursorRight(view()); + moveCursorUpdate(); owner->view_state_changed(); } else { - tli->unlockInsetInInset(view(), - lock, - true); + tli->unlockInsetInInset(view(), lock, true); } finishUndo(); // Tell the paragraph dialog that we changed paragraph dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); } + break; } - break; - // --- Misc ------------------------------------------- - case LFUN_WORDFINDFORWARD : - case LFUN_WORDFINDBACKWARD : { + case LFUN_WORDFINDFORWARD: + case LFUN_WORDFINDBACKWARD: { static string last_search; string searched_string; @@ -937,28 +1016,23 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) searched_string = last_search; } bool fw = (action == LFUN_WORDFINDFORWARD); - if (!searched_string.empty()) { - lyxfind::LyXFind(view(), searched_string, fw); - } -// view()->showCursor(); + if (!searched_string.empty()) + lyx::find::find(view(), searched_string, fw); + break; } - break; case LFUN_PREFIX: - { - if (view()->available() && !view()->theLockingInset()) { - view()->update(TEXT(), BufferView::SELECT); - } + if (view()->available() && !view()->theLockingInset()) + view()->update(); owner->message(keyseq.printOptions()); - } - break; + break; // --- Misc ------------------------------------------- case LFUN_EXEC_COMMAND: owner->focus_command_buffer(); break; - case LFUN_CANCEL: // RVDK_PATCH_5 + case LFUN_CANCEL: keyseq.reset(); meta_fake_bit = key_modifier::none; if (view()->available()) @@ -967,20 +1041,17 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) setMessage(N_("Cancel")); break; - case LFUN_META_FAKE: // RVDK_PATCH_5 - { + case LFUN_META_FAKE: meta_fake_bit = key_modifier::alt; setMessage(keyseq.print()); - } - break; + break; case LFUN_READ_ONLY_TOGGLE: - if (owner->buffer()->lyxvc.inUse()) { + if (owner->buffer()->lyxvc.inUse()) owner->buffer()->lyxvc.toggleReadOnly(); - } else { + else owner->buffer()->setReadonly( !owner->buffer()->isReadonly()); - } break; case LFUN_CENTER: // this is center and redraw. @@ -1002,56 +1073,58 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) case LFUN_MENUWRITE: if (!owner->buffer()->isUnnamed()) { - ostringstream s1; -#if USE_BOOST_FORMAT - s1 << boost::format(_("Saving document %1$s...")) - % MakeDisplayPath(owner->buffer()->fileName()); -#else - s1 << _("Saving document ") - << MakeDisplayPath(owner->buffer()->fileName()) - << _("..."); -#endif - owner->message(STRCONV(s1.str())); - MenuWrite(view(), owner->buffer()); - s1 << _(" done."); - owner->message(STRCONV(s1.str())); + string const str = bformat(_("Saving document %1$s..."), + MakeDisplayPath(owner->buffer()->fileName())); + owner->message(str); + MenuWrite(owner->buffer()); + owner->message(str + _(" done.")); } else - WriteAs(view(), owner->buffer()); + WriteAs(owner->buffer()); break; case LFUN_WRITEAS: - WriteAs(view(), owner->buffer(), argument); + WriteAs(owner->buffer(), argument); break; - case LFUN_MENURELOAD: - view()->reload(); + case LFUN_MENURELOAD: { + string const file = MakeDisplayPath(view()->buffer()->fileName(), 20); + string text = bformat(_("Any changes will be lost. Are you sure " + "you want to revert to the saved version of the document %1$s?"), file); + int const ret = Alert::prompt(_("Revert to saved document?"), + text, 0, 1, _("&Revert"), _("&Cancel")); + + if (ret == 0) + view()->reload(); break; + } case LFUN_UPDATE: Exporter::Export(owner->buffer(), argument, true); + view()->showErrorList(BufferFormat(*owner->buffer())); break; case LFUN_PREVIEW: Exporter::Preview(owner->buffer(), argument); + view()->showErrorList(BufferFormat(*owner->buffer())); break; case LFUN_BUILDPROG: Exporter::Export(owner->buffer(), "program", true); + view()->showErrorList(_("Build")); break; case LFUN_RUNCHKTEX: - MenuRunChktex(owner->buffer()); - break; - - case LFUN_MENUPRINT: - owner->getDialogs().showPrint(); + owner->buffer()->runChktex(); + view()->showErrorList(_("ChkTeX")); break; case LFUN_EXPORT: if (argument == "custom") owner->getDialogs().showSendto(); - else + else { Exporter::Export(owner->buffer(), argument, false); + view()->showErrorList(BufferFormat(*owner->buffer())); + } break; case LFUN_IMPORT: @@ -1082,24 +1155,14 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) view()->redo(); break; - case LFUN_MENUSEARCH: - owner->getDialogs().showSearch(); - break; - - case LFUN_REMOVEERRORS: - if (view()->removeAutoInsets()) { -#warning repaint() or update() or nothing ? - view()->repaint(); - view()->fitCursor(); - } - break; - case LFUN_DEPTH_MIN: - changeDepth(view(), TEXT(false), -1); + changeDepth(view(), view()->getLyXText(), DEC_DEPTH, false); + owner->view_state_changed(); break; case LFUN_DEPTH_PLUS: - changeDepth(view(), TEXT(false), 1); + changeDepth(view(), view()->getLyXText(), INC_DEPTH, false); + owner->view_state_changed(); break; case LFUN_FREEFONT_APPLY: @@ -1130,14 +1193,6 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) //#warning Find another implementation here (or another lyxfunc)! #endif #endif - case LFUN_HELP_ABOUTLYX: - owner->getDialogs().show("about"); - break; - - case LFUN_HELP_TEXINFO: - owner->getDialogs().showTexinfo(); - break; - case LFUN_HELP_OPEN: { string const arg = argument; @@ -1151,61 +1206,62 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) << arg << "'. Bad installation?" << endl; break; } - ostringstream str; -#if USE_BOOST_FORMAT - str << boost::format(_("Opening help file %1$s...")) - % MakeDisplayPath(fname); -#else - str << _("Opening help file ") - << MakeDisplayPath(fname) << _("..."); -#endif - owner->message(STRCONV(str.str())); - view()->buffer(bufferlist.loadLyXFile(fname, false)); + owner->message(bformat(_("Opening help file %1$s..."), + MakeDisplayPath(fname))); + view()->loadLyXFile(fname, false); break; } // --- version control ------------------------------- case LFUN_VC_REGISTER: { - if (!owner->buffer()->lyxvc.inUse()) + if (!ensureBufferClean(view())) + break; + if (!owner->buffer()->lyxvc.inUse()) { owner->buffer()->lyxvc.registrer(); + view()->reload(); + } } break; case LFUN_VC_CHECKIN: { + if (!ensureBufferClean(view())) + break; if (owner->buffer()->lyxvc.inUse() - && !owner->buffer()->isReadonly()) + && !owner->buffer()->isReadonly()) { owner->buffer()->lyxvc.checkIn(); + view()->reload(); + } } break; case LFUN_VC_CHECKOUT: { + if (!ensureBufferClean(view())) + break; if (owner->buffer()->lyxvc.inUse() - && owner->buffer()->isReadonly()) + && owner->buffer()->isReadonly()) { owner->buffer()->lyxvc.checkOut(); + view()->reload(); + } } break; case LFUN_VC_REVERT: { owner->buffer()->lyxvc.revert(); + view()->reload(); } break; case LFUN_VC_UNDO: { owner->buffer()->lyxvc.undoLast(); + view()->reload(); } break; - case LFUN_VC_HISTORY: - { - owner->getDialogs().show("vclog"); - break; - } - // --- buffers ---------------------------------------- case LFUN_SWITCHBUFFER: @@ -1213,52 +1269,28 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) break; case LFUN_FILE_NEW: - { - // servercmd: argument must be :