]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfunc.C
remove redundant lyxerr.debugging checks; macro LYXERR already checks whether the...
[lyx.git] / src / lyxfunc.C
index 012ea03fe318809a3b9b7418d53704da151bf4d5..33d3ef2cb45d228a258ea510c5424be469629b0b 100644 (file)
@@ -144,10 +144,6 @@ namespace Alert = frontend::Alert;
 namespace fs = boost::filesystem;
 
 
-// (alkis)
-extern tex_accent_struct get_accent(kb_action action);
-
-
 namespace {
 
 bool getLocalStatus(LCursor cursor,
@@ -232,7 +228,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();
@@ -280,30 +276,32 @@ void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer)
 
 void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
 {
-       lyxerr[Debug::KEY] << "KeySym is " << keysym->getSymbolName() << endl;
+       LYXERR(Debug::KEY) << "KeySym is " << keysym->getSymbolName() << endl;
 
        // Do nothing if we have nothing (JMarc)
        if (!keysym->isOK()) {
-               lyxerr[Debug::KEY] << "Empty kbd action (probably composing)"
+               LYXERR(Debug::KEY) << "Empty kbd action (probably composing)"
                                   << endl;
                return;
        }
 
        if (keysym->isModifier()) {
-               lyxerr[Debug::KEY] << "isModifier true" << endl;
+               LYXERR(Debug::KEY) << "isModifier true" << endl;
                return;
        }
 
        //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
        cancel_meta_seq->reset();
 
        FuncRequest func = cancel_meta_seq->addkey(keysym, state);
-       lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION
+       LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
                           << " action first set to [" << func.action << ']'
                           << endl;
 
@@ -313,7 +311,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
        if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_PREFIX)) {
                // remove Caps Lock and Mod2 as a modifiers
                func = keyseq->addkey(keysym, (state | meta_fake_bit));
-               lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION
+               LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
                                   << "action now set to ["
                                   << func.action << ']' << endl;
        }
@@ -326,13 +324,11 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
                func = FuncRequest(LFUN_COMMAND_PREFIX);
        }
 
-       if (lyxerr.debugging(Debug::KEY)) {
-               lyxerr << BOOST_CURRENT_FUNCTION
-                      << " Key [action="
-                      << func.action << "]["
-                      << to_utf8(keyseq->print(false)) << ']'
-                      << endl;
-       }
+       LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
+              << " Key [action="
+              << func.action << "]["
+              << to_utf8(keyseq->print(false)) << ']'
+              << endl;
 
        // already here we know if it any point in going further
        // why not return already here if action == -1 and
@@ -347,9 +343,9 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
        // Let's see. But only if shift is the only modifier
        if (func.action == LFUN_UNKNOWN_ACTION &&
            state == key_modifier::shift) {
-               lyxerr[Debug::KEY] << "Trying without shift" << endl;
+               LYXERR(Debug::KEY) << "Trying without shift" << endl;
                func = keyseq->addkey(keysym, key_modifier::none);
-               lyxerr[Debug::KEY] << "Action now " << func.action << endl;
+               LYXERR(Debug::KEY) << "Action now " << func.action << endl;
        }
 
        if (func.action == LFUN_UNKNOWN_ACTION) {
@@ -357,11 +353,11 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
                // if it's normal insertable text not already covered
                // by a binding
                if (keysym->isText() && keyseq->length() == 1) {
-                       lyxerr[Debug::KEY] << "isText() is true, inserting." << endl;
+                       LYXERR(Debug::KEY) << "isText() is true, inserting." << endl;
                        func = FuncRequest(LFUN_SELF_INSERT,
                                           FuncRequest::KEYBOARD);
                } else {
-                       lyxerr[Debug::KEY] << "Unknown, !isText() - giving up" << endl;
+                       LYXERR(Debug::KEY) << "Unknown, !isText() - giving up" << endl;
                        lyx_view_->message(_("Unknown function."));
                        return;
                }
@@ -372,7 +368,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
                        docstring const arg(1, encoded_last_key);
                        dispatch(FuncRequest(LFUN_SELF_INSERT, arg,
                                             FuncRequest::KEYBOARD));
-                       lyxerr[Debug::KEY]
+                       LYXERR(Debug::KEY)
                                << "SelfInsert arg[`" << to_utf8(arg) << "']" << endl;
                }
        } else {
@@ -575,6 +571,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: {
@@ -776,7 +777,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
        string const argument = to_utf8(cmd.argument());
        kb_action const action = cmd.action;
 
-       lyxerr[Debug::ACTION] << endl << "LyXFunc::dispatch: cmd: " << cmd << endl;
+       LYXERR(Debug::ACTION) << endl << "LyXFunc::dispatch: cmd: " << cmd << endl;
        //lyxerr << "LyXFunc::dispatch: cmd: " << cmd << endl;
 
        // we have not done anything wrong yet.
@@ -790,7 +791,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
        FuncStatus const flag = getStatus(cmd);
        if (!flag.enabled()) {
                // We cannot use this function here
-               lyxerr[Debug::ACTION] << "LyXFunc::dispatch: "
+               LYXERR(Debug::ACTION) << "LyXFunc::dispatch: "
                       << lyxaction.getActionName(action)
                       << " [" << action << "] is disabled at this location"
                       << endl;
@@ -839,7 +840,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:
@@ -878,8 +879,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;
 
@@ -1052,9 +1054,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,
@@ -1099,7 +1110,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 +1174,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;
 
@@ -1203,7 +1211,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_SERVER_GET_NAME:
                        BOOST_ASSERT(lyx_view_ && lyx_view_->buffer());
                        setMessage(from_utf8(lyx_view_->buffer()->fileName()));
-                       lyxerr[Debug::INFO] << "FNAME["
+                       LYXERR(Debug::INFO) << "FNAME["
                                                         << lyx_view_->buffer()->fileName()
                                                         << "] " << endl;
                        break;
@@ -1385,9 +1393,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()))
@@ -1462,7 +1469,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_SCREEN_FONT_UPDATE:
                        BOOST_ASSERT(lyx_view_);
                        // handle the screen font changes.
-                       lyxrc.set_font_norm_type();
                        theFontLoader().update();
                        /// FIXME: only the current view will be updated. the Gui
                        /// class is able to furnish the list of views.
@@ -1473,8 +1479,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;
                        }
 
@@ -1599,18 +1606,17 @@ 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;
                }
 
                case LFUN_BUFFER_PARAMS_APPLY: {
                        BOOST_ASSERT(lyx_view_);
                        biblio::CiteEngine const engine =
-                               lyx_view_->buffer()->params().cite_engine;
+                               lyx_view_->buffer()->params().getEngine();
 
                        istringstream ss(argument);
                        LyXLex lex(0,0);
@@ -1624,7 +1630,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                       << (unknown_tokens == 1 ? "" : "s")
                                       << endl;
                        }
-                       if (engine == lyx_view_->buffer()->params().cite_engine)
+                       if (engine == lyx_view_->buffer()->params().getEngine())
                                break;
 
                        LCursor & cur = view()->cursor();
@@ -1737,8 +1743,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 +1764,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 +1776,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);
        }
 }
 
@@ -1783,7 +1789,7 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd
                              || cmd.origin == FuncRequest::COMMANDBUFFER);
 
        if (cmd.action == LFUN_SELF_INSERT || !verbose) {
-               lyxerr[Debug::ACTION] << "dispatch msg is " << to_utf8(msg) << endl;
+               LYXERR(Debug::ACTION) << "dispatch msg is " << to_utf8(msg) << endl;
                if (!msg.empty())
                        lyx_view_->message(msg);
                return;
@@ -1816,7 +1822,7 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd
                dispatch_msg += '(' + rtrim(comname) + ')';
        }
 
-       lyxerr[Debug::ACTION] << "verbose dispatch msg "
+       LYXERR(Debug::ACTION) << "verbose dispatch msg "
                << to_utf8(dispatch_msg) << endl;
        if (!dispatch_msg.empty())
                lyx_view_->message(dispatch_msg);
@@ -1871,8 +1877,10 @@ void LyXFunc::menuNew(string const & name, bool fromTemplate)
        }
 
        Buffer * const b = newFile(filename, templname, !name.empty());
-       if (b)
+       if (b) {
+               updateLabels(*b);
                lyx_view_->setBuffer(b);
+       }
 }
 
 
@@ -1946,7 +1954,7 @@ void LyXFunc::doImport(string const & argument)
        string format;
        string filename = split(argument, format, ' ');
 
-       lyxerr[Debug::INFO] << "LyXFunc::doImport: " << format
+       LYXERR(Debug::INFO) << "LyXFunc::doImport: " << format
                            << " file: " << filename << endl;
 
        // need user interaction
@@ -2175,9 +2183,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                        support::prependEnvPath("PATH", lyxrc.path_prefix);
                }
        case LyXRC::RC_PERS_DICT:
-       case LyXRC::RC_POPUP_BOLD_FONT:
-       case LyXRC::RC_POPUP_FONT_ENCODING:
-       case LyXRC::RC_POPUP_NORMAL_FONT:
        case LyXRC::RC_PREVIEW:
        case LyXRC::RC_PREVIEW_HASHED_LABELS:
        case LyXRC::RC_PREVIEW_SCALE_FACTOR:
@@ -2201,7 +2206,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_PRINT_COMMAND:
        case LyXRC::RC_RTL_SUPPORT:
        case LyXRC::RC_SCREEN_DPI:
-       case LyXRC::RC_SCREEN_FONT_ENCODING:
        case LyXRC::RC_SCREEN_FONT_ROMAN:
        case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY:
        case LyXRC::RC_SCREEN_FONT_SANS: