X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=244a858dbca70488982b1fd23ae0c899a75d5db6;hb=de3c8e5b80effa940c92980032389c868f377d6b;hp=0693b1e0513c6bbfa2ac43eb52ce655cfeea83be;hpb=36666181380871d06a96797c7cc80b72369717c9;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 0693b1e051..244a858dbc 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -328,20 +328,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const flag.setOnOff(true); break; - case LFUN_TRACK_CHANGES: - flag.setOnOff(buf->params().tracking_changes); - break; - case LFUN_EXPORT: enable = cmd.argument == "custom" || Exporter::IsExportable(*buf, cmd.argument); break; - case LFUN_UNDO: - enable = !buf->undostack().empty(); - break; - case LFUN_REDO: - enable = !buf->redostack().empty(); - break; case LFUN_CUT: case LFUN_COPY: enable = cur.selection(); @@ -380,17 +370,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_MENURELOAD: enable = !buf->isUnnamed() && !buf->isClean(); break; - case LFUN_BOOKMARK_GOTO: - enable = view()->isSavedPosition(strToUnsignedInt(cmd.argument)); - break; - case LFUN_MERGE_CHANGES: - case LFUN_ACCEPT_CHANGE: - case LFUN_REJECT_CHANGE: - case LFUN_ACCEPT_ALL_CHANGES: - case LFUN_REJECT_ALL_CHANGES: - enable = buf && buf->params().tracking_changes; - break; case LFUN_INSET_SETTINGS: { enable = false; @@ -436,7 +416,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const enable = name == "aboutlyx" || name == "file" || name == "forks" - || name == "preferences" + || name == "prefs" || name == "texinfo"; else if (name == "print") enable = Exporter::IsExportable(*buf, "dvi") @@ -450,6 +430,13 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } + case LFUN_DIALOG_UPDATE: { + string const name = cmd.getArg(0); + if (!buf) + enable = name == "prefs"; + break; + } + case LFUN_MENUNEW: case LFUN_MENUNEWTMPLT: case LFUN_WORDFINDFORWARD: @@ -479,7 +466,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_GOTO_PARAGRAPH: case LFUN_DIALOG_SHOW_NEW_INSET: case LFUN_DIALOG_SHOW_NEXT_INSET: - case LFUN_DIALOG_UPDATE: case LFUN_DIALOG_HIDE: case LFUN_DIALOG_DISCONNECT_INSET: case LFUN_CHILDOPEN: @@ -497,21 +483,22 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_SET_COLOR: case LFUN_MESSAGE: case LFUN_EXTERNAL_EDIT: - case LFUN_FILE_INSERT: - case LFUN_FILE_INSERT_ASCII: - case LFUN_FILE_INSERT_ASCII_PARA: + case LFUN_GRAPHICS_EDIT: case LFUN_ALL_INSETS_TOGGLE: case LFUN_LANGUAGE_BUFFER: case LFUN_TEXTCLASS_APPLY: case LFUN_TEXTCLASS_LOAD: case LFUN_SAVE_AS_DEFAULT: case LFUN_BUFFERPARAMS_APPLY: - + case LFUN_LYXRC_APPLY: // these are handled in our dispatch() break; default: + cur.getStatus(cmd, flag); + if (!flag.enabled()) + flag = view()->getStatus(cmd); } if (!enable) @@ -525,6 +512,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const flag.enabled(false); } + //lyxerr << "LyXFunc::getStatus: got: " << flag.enabled() << endl; return flag; } @@ -551,12 +539,36 @@ bool ensureBufferClean(BufferView * bv) return buf.isClean(); } + void showPrintError(string const & name) { - string str = bformat(_("Could not print the document %1$s.\n" - "Check that your printer is set up correctly."), - MakeDisplayPath(name, 50)); - Alert::error(_("Print document failed"), str); + string str = bformat(_("Could not print the document %1$s.\n" + "Check that your printer is set up correctly."), + MakeDisplayPath(name, 50)); + Alert::error(_("Print document failed"), str); +} + + +void loadTextclass(string const & name) +{ + std::pair const tc_pair = + textclasslist.NumberOfClass(name); + + if (!tc_pair.first) { + lyxerr << "Document class \"" << name + << "\" does not exist." + << std::endl; + return; + } + + lyx::textclass_type const tc = tc_pair.second; + + if (!textclasslist[tc].load()) { + string s = bformat(_("The document could not be converted\n" + "into the document class %1$s."), + textclasslist[tc].name()); + Alert::error(_("Could not change class"), s); + } } } //namespace anon @@ -575,6 +587,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) dispatch_buffer.erase(); selection_possible = false; + bool update = true; + // We cannot use this function here if (!getStatus(cmd).enabled()) { lyxerr[Debug::ACTION] << "LyXFunc::dispatch: " @@ -617,6 +631,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; case LFUN_EXEC_COMMAND: + owner->getToolbar().display("minibuffer", true); owner->focus_command_buffer(); break; @@ -1024,12 +1039,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) if (!data.empty()) owner->getDialogs().show("character", data); } - else if (name == "preamble") - owner->getDialogs().showPreamble(); - else if (name == "preferences") - owner->getDialogs().showPreferences(); - else if (name == "spellchecker") - owner->getDialogs().showSpellchecker(); else if (name == "latexlog") { pair const logfile = @@ -1117,6 +1126,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) inset->dispatch(view()->cursor(), fr); } else if (name == "paragraph") { dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); + } else if (name == "prefs") { + owner->getDialogs().update(name, string()); } break; } @@ -1191,7 +1202,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) case LFUN_SAVEPREFERENCES: { Path p(user_lyxdir()); - lyxrc.write("preferences"); + lyxrc.write("preferences", false); break; } @@ -1251,8 +1262,9 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; } - case LFUN_BREAKLINE: { -#warning swallow 'Return' if the minibuffer is focused. But how? + case LFUN_GRAPHICS_EDIT: { + FuncRequest fr(action, argument); + InsetGraphics().dispatch(view()->cursor(), fr); break; } @@ -1313,7 +1325,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) lyx::textclass_type const old_class = buffer->params().textclass; - dispatch(FuncRequest(LFUN_TEXTCLASS_LOAD, argument)); + loadTextclass(argument); std::pair const tc_pair = textclasslist.NumberOfClass(argument); @@ -1326,9 +1338,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) // nothing to do break; - owner->message( - _("Converting document to new document class...")); - + owner->message(_("Converting document to new document class...")); ErrorList el; lyx::cap::SwitchLayoutsBetweenClasses( old_class, new_class, @@ -1339,43 +1349,37 @@ void LyXFunc::dispatch(FuncRequest const & cmd, bool verbose) break; } - case LFUN_TEXTCLASS_LOAD: { - std::pair const tc_pair = - textclasslist.NumberOfClass(argument); - - if (!tc_pair.first) { - lyxerr << "Document class \"" << argument - << "\" does not exist." - << std::endl; - break; - } - - lyx::textclass_type const tc = tc_pair.second; - - bool const success = textclasslist[tc].load(); - if (success) - break; + case LFUN_TEXTCLASS_LOAD: + loadTextclass(argument); + break; - string s = bformat(_("The document could not be converted\n" - "into the document class %1$s."), - textclasslist[tc].name()); - Alert::error(_("Could not change class"), s); + case LFUN_LYXRC_APPLY: { + istringstream ss(argument); + bool const success = lyxrc.read(ss) == 0; + if (!success) { + lyxerr << "Warning in LFUN_LYXRC_APPLY!\n" + << "Unable to read lyxrc data" + << endl; + } break; } default: { + update = false; DispatchResult res = view()->cursor().dispatch(cmd); - if (!res.dispatched()); - view()->dispatch(cmd); + if (res.dispatched()) + update |= res.update(); + else + update |= view()->dispatch(cmd); + break; } } if (view()->available()) { - view()->fitCursor(); - view()->update(); - view()->cursor().updatePos(); + if (view()->fitCursor() || update) + view()->update(); // if we executed a mutating lfun, mark the buffer as dirty if (getStatus(cmd).enabled() && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer)