X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=ff526d5968dab7ef08868c7e5c70bf392af54565;hb=cd4033aef3a3f1efdb5a676b8bab3d367f53a830;hp=6545b278c9480d7f855117be2dbabc03c3e6682d;hpb=1f7a1257f10704868b5e1c23fea575d833f30546;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 6545b278c9..ff526d5968 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -232,7 +232,7 @@ void LyXFunc::handleKeyFunc(kb_action action) c = 0; lyx_view_->view()->getIntl().getTransManager().deadkey( - c, get_accent(action).accent, view()->getLyXText(), view()->cursor()); + c, get_accent(action).accent, view()->cursor().innerText(), view()->cursor()); // Need to clear, in case the minibuffer calls these // actions keyseq->clear(); @@ -296,7 +296,9 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) //Encoding const * encoding = view()->cursor().getEncoding(); //encoded_last_key = keysym->getISOEncoded(encoding ? encoding->name() : ""); - size_t encoded_last_key = keysym->getUCSEncoded(); + // FIXME: encoded_last_key shadows the member variable of the same + // name. Is that intended? + char_type encoded_last_key = keysym->getUCSEncoded(); // Do a one-deep top-level lookup for // cancel and meta-fake keys. RVDK_PATCH_5 @@ -386,24 +388,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const //lyxerr << "LyXFunc::getStatus: cmd: " << cmd << endl; FuncStatus flag; - if (cmd.action == LFUN_LYX_QUIT) { - flag.message(from_utf8(N_("Exiting"))); - flag.enabled(true); - return flag; - } else if (cmd.action == LFUN_BOOKMARK_GOTO) { - // bookmarks can be valid even if there is no opened buffer - flag.enabled(LyX::ref().session().bookmarks().isValid(convert(to_utf8(cmd.argument())))); - return flag; - } else if (cmd.action == LFUN_BOOKMARK_CLEAR) { - flag.enabled(LyX::ref().session().bookmarks().size() > 0); - return flag; - } else if (cmd.action == LFUN_TOOLBAR_TOGGLE_STATE) { - ToolbarBackend::Flags flags = lyx_view_->getToolbarState(to_utf8(cmd.argument())); - if (!(flags & ToolbarBackend::AUTO)) - flag.setOnOff(flags & ToolbarBackend::ON); - return flag; - } - LCursor & cur = view()->cursor(); /* In LyX/Mac, when a dialog is open, the menus of the @@ -593,6 +577,11 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_DIALOG_SHOW_NEW_INSET: enable = cur.inset().lyxCode() != InsetBase::ERT_CODE; + if (cur.inset().lyxCode() == InsetBase::CAPTION_CODE) { + FuncStatus flag; + if (cur.inset().getStatus(cur, cmd, flag)) + return flag; + } break; case LFUN_DIALOG_UPDATE: { @@ -614,6 +603,22 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } + case LFUN_BOOKMARK_GOTO: { + const unsigned int num = convert(to_utf8(cmd.argument())); + enable = LyX::ref().session().bookmarks().isValid(num); + break; + } + + case LFUN_BOOKMARK_CLEAR: + enable = LyX::ref().session().bookmarks().size() > 0; + break; + + case LFUN_TOOLBAR_TOGGLE_STATE: { + ToolbarBackend::Flags flags = lyx_view_->getToolbarState(to_utf8(cmd.argument())); + if (!(flags & ToolbarBackend::AUTO)) + flag.setOnOff(flags & ToolbarBackend::ON); + break; + } // this one is difficult to get right. As a half-baked // solution, we consider only the first action of the sequence @@ -677,6 +682,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_BUFFER_PREVIOUS: case LFUN_WINDOW_NEW: case LFUN_WINDOW_CLOSE: + case LFUN_LYX_QUIT: // these are handled in our dispatch() break; @@ -840,7 +846,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (view()->buffer()) // cancel any selection dispatch(FuncRequest(LFUN_MARK_OFF)); - setMessage(_("Cancel")); + setMessage(from_ascii(N_("Cancel"))); break; case LFUN_META_PREFIX: @@ -879,8 +885,9 @@ void LyXFunc::dispatch(FuncRequest const & cmd) lyx_view_->message(str); menuWrite(lyx_view_->buffer()); lyx_view_->message(str + _(" done.")); - } else - writeAs(lyx_view_->buffer()); + } else { + writeAs(lyx_view_->buffer()); + } updateFlags = Update::None; break; @@ -899,7 +906,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) text, 0, 1, _("&Revert"), _("&Cancel")); if (ret == 0) - view()->reload(); + reloadBuffer(); break; } @@ -1053,9 +1060,18 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } else { // case 1: print to a file + FileName const filename(makeAbsPath(target_name, path)); + if (fs::exists(filename.toFilesystemEncoding())) { + docstring text = bformat( + _("The file %1$s already exists.\n\n" + "Do you want to over-write that file?"), + makeDisplayPath(filename.absFilename())); + if (Alert::prompt(_("Over-write file?"), + text, 0, 1, _("&Over-write"), _("&Cancel")) != 0) + break; + } command += lyxrc.print_to_file - + quoteName(makeAbsPath(target_name, - path).toFilesystemEncoding()) + + quoteName(filename.toFilesystemEncoding()) + ' ' + quoteName(dviname); res = one.startscript(Systemcall::DontWait, @@ -1074,6 +1090,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_LYX_QUIT: // quitting is triggered by the gui code // (leaving the event loop). + lyx_view_->message(from_utf8(N_("Exiting."))); if (theBufferList().quitWriteAll()) theApp()->gui().closeAllViews(); break; @@ -1099,7 +1116,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) BOOST_ASSERT(lyx_view_); string const arg = argument; if (arg.empty()) { - setErrorMessage(_("Missing argument")); + setErrorMessage(from_ascii(N_("Missing argument"))); break; } FileName const fname = i18nLibFileSearch("doc", arg, "lyx"); @@ -1121,8 +1138,9 @@ void LyXFunc::dispatch(FuncRequest const & cmd) break; if (!lyx_view_->buffer()->lyxvc().inUse()) { lyx_view_->buffer()->lyxvc().registrer(); - view()->reload(); + reloadBuffer(); } + updateFlags = Update::Force; break; case LFUN_VC_CHECK_IN: @@ -1132,7 +1150,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (lyx_view_->buffer()->lyxvc().inUse() && !lyx_view_->buffer()->isReadonly()) { lyx_view_->buffer()->lyxvc().checkIn(); - view()->reload(); + reloadBuffer(); } break; @@ -1143,28 +1161,25 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (lyx_view_->buffer()->lyxvc().inUse() && lyx_view_->buffer()->isReadonly()) { lyx_view_->buffer()->lyxvc().checkOut(); - view()->reload(); + reloadBuffer(); } break; case LFUN_VC_REVERT: BOOST_ASSERT(lyx_view_ && lyx_view_->buffer()); lyx_view_->buffer()->lyxvc().revert(); - view()->reload(); + reloadBuffer(); break; case LFUN_VC_UNDO_LAST: BOOST_ASSERT(lyx_view_ && lyx_view_->buffer()); lyx_view_->buffer()->lyxvc().undoLast(); - view()->reload(); + reloadBuffer(); break; // --- buffers ---------------------------------------- case LFUN_BUFFER_SWITCH: BOOST_ASSERT(lyx_view_); - // update bookmark pit of the current buffer before switch - for (size_t i = 0; i < LyX::ref().session().bookmarks().size(); ++i) - gotoBookmark(i+1, false, false); lyx_view_->setBuffer(theBufferList().getBuffer(argument)); break; @@ -1236,8 +1251,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) view()->setCursorFromRow(row); - view()->center(); - // see BufferView::center() + updateFlags = Update::FitCursor; break; } @@ -1385,9 +1399,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd) BOOST_ASSERT(lyx_view_); FileName const filename = makeAbsPath(argument, lyx_view_->buffer()->filePath()); - // FIXME Should use bformat - setMessage(_("Opening child document ") + - makeDisplayPath(filename.absFilename()) + "..."); + setMessage(bformat(_("Opening child document %1$s..."), + makeDisplayPath(filename.absFilename()))); view()->saveBookmark(false); string const parentfilename = lyx_view_->buffer()->fileName(); if (theBufferList().exists(filename.absFilename())) @@ -1473,8 +1486,9 @@ void LyXFunc::dispatch(FuncRequest const & cmd) string lyx_name; string const x11_name = split(argument, lyx_name, ' '); if (lyx_name.empty() || x11_name.empty()) { - setErrorMessage(_("Syntax: set-color " - " ")); + setErrorMessage(from_ascii(N_( + "Syntax: set-color " + " "))); break; } @@ -1599,11 +1613,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } if (defaults.writeFile(FileName(defaults.fileName()))) - // FIXME Should use bformat - setMessage(_("Document defaults saved in ") - + makeDisplayPath(fname)); + setMessage(bformat(_("Document defaults saved in %1$s"), + makeDisplayPath(fname))); else - setErrorMessage(_("Unable to save document defaults")); + setErrorMessage(from_ascii(N_("Unable to save document defaults"))); break; } @@ -1737,8 +1750,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) view()->cursor().dispatch(cmd); updateFlags = view()->cursor().result().update(); if (!view()->cursor().result().dispatched()) - if (view()->dispatch(cmd)) - updateFlags = Update::Force | Update::FitCursor; + updateFlags = view()->dispatch(cmd); break; } } @@ -1759,8 +1771,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd) // if we executed a mutating lfun, mark the buffer as dirty if (flag.enabled() - && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer) - && !lyxaction.funcHasFlag(cmd.action, LyXAction::ReadOnly)) + && !lyxaction.funcHasFlag(action, LyXAction::NoBuffer) + && !lyxaction.funcHasFlag(action, LyXAction::ReadOnly)) view()->buffer()->markDirty(); if (view()->cursor().inTexted()) { @@ -1771,7 +1783,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (!quitting) { lyx_view_->updateMenubar(); lyx_view_->updateToolbars(); - sendDispatchMessage(getMessage(), cmd); + // Some messages may already be translated, so we cannot use _() + sendDispatchMessage(translateIfPossible(getMessage()), cmd); } } @@ -2049,6 +2062,13 @@ void LyXFunc::closeBuffer() } +void LyXFunc::reloadBuffer() +{ + FileName filename(lyx_view_->buffer()->fileName()); + closeBuffer(); + lyx_view_->loadLyXFile(filename); +} + // Each "lyx_view_" should have it's own message method. lyxview and // the minibuffer would use the minibuffer, but lyxserver would // send an ERROR signal to its client. Alejandro 970603