]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfunc.C
add config.h
[lyx.git] / src / lyxfunc.C
index 6bea04231801bbc5aa72691266e08322d1c294dc..ff526d5968dab7ef08868c7e5c70bf392af54565 100644 (file)
@@ -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<unsigned int>(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<unsigned int>(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;
 
@@ -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");
@@ -1163,9 +1180,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                // --- 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;
 
@@ -1237,8 +1251,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
 
                        view()->setCursorFromRow(row);
 
-                       view()->center();
-                       // see BufferView::center()
+                       updateFlags = Update::FitCursor;
                        break;
                }
 
@@ -1386,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()))
@@ -1474,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 <lyx_name>"
-                                                       " <x11_name>"));
+                               setErrorMessage(from_ascii(N_(
+                                               "Syntax: set-color <lyx_name>"
+                                               " <x11_name>")));
                                break;
                        }
 
@@ -1600,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;
                }
 
@@ -1738,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;
                }
                }
@@ -1760,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()) {
@@ -1772,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);
        }
 }