X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FKeyMap.cpp;h=8c28b50031263e981064e2de056da0c0f67c0a11;hb=21514ad5129df123605cc11b1dc04d525ce4a295;hp=a45bfc6998181f54e63ad4a8599f467dbb682f6c;hpb=404f1dc80a6afda7688ed480e86c443dd430dfe3;p=lyx.git diff --git a/src/KeyMap.cpp b/src/KeyMap.cpp index a45bfc6998..8c28b50031 100644 --- a/src/KeyMap.cpp +++ b/src/KeyMap.cpp @@ -23,6 +23,10 @@ #include "support/docstream.h" #include "support/FileName.h" #include "support/filetools.h" +#include "support/gettext.h" +#include "support/lstrings.h" + +#include "frontends/alert.h" #include #include @@ -55,7 +59,7 @@ string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod) size_t KeyMap::bind(string const & seq, FuncRequest const & func) { LYXERR(Debug::KBMAP, "BIND: Sequence `" << seq << "' Action `" - << func.action << '\''); + << func.action() << '\''); KeySequence k(0, 0); @@ -109,7 +113,7 @@ void KeyMap::bind(KeySequence * seq, FuncRequest const & func, unsigned int r) it->prefixes.reset(); } it->func = func; - it->func.origin = FuncRequest::KEYBOARD; + it->func.setOrigin(FuncRequest::KEYBOARD); return; } else if (!it->prefixes.get()) { lyxerr << "Error: New binding for '" @@ -129,7 +133,7 @@ void KeyMap::bind(KeySequence * seq, FuncRequest const & func, unsigned int r) newone->mod = seq->modifiers[r]; if (r + 1 == seq->length()) { newone->func = func; - newone->func.origin = FuncRequest::KEYBOARD; + newone->func.setOrigin(FuncRequest::KEYBOARD); newone->prefixes.reset(); } else { newone->prefixes.reset(new KeyMap); @@ -205,7 +209,40 @@ void KeyMap::clear() } -bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) +bool KeyMap::read(string const & bind_file, KeyMap * unbind_map, BindReadType rt) +{ + FileName bf = i18nLibFileSearch("bind", bind_file, "bind"); + if (bf.empty()) { + if (rt == MissingOK) + return true; + + lyxerr << "Could not find bind file: " << bind_file; + if (rt == Default) { + frontend::Alert::warning(_("Could not find bind file"), + bformat(_("Unable to find the bind file\n%1$s.\n" + "Please check your installation."), from_utf8(bind_file))); + return false; + } + + static string const defaultBindfile = "cua"; + if (bind_file == defaultBindfile) { + frontend::Alert::warning(_("Could not find `cua.bind' file"), + _("Unable to find the default bind file `cua.bind'.\n" + "Please check your installation.")); + return false; + } + + // Try it with the default file. + frontend::Alert::warning(_("Could not find bind file"), + bformat(_("Unable to find the bind file\n%1$s.\n" + "Falling back to default."), from_utf8(bind_file))); + return read(defaultBindfile, unbind_map); + } + return read(bf, unbind_map); +} + + +bool KeyMap::read(FileName const & bind_file, KeyMap * unbind_map) { enum { BN_BIND, @@ -223,14 +260,13 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); - FileName const tmp = i18nLibFileSearch("bind", bind_file, "bind"); - lexrc.setFile(tmp); + lexrc.setFile(bind_file); if (!lexrc.isOK()) { - LYXERR0("KeyMap::read: cannot open bind file:" << tmp); + LYXERR0("KeyMap::read: cannot open bind file:" << bind_file.absFileName()); return false; } - LYXERR(Debug::KBMAP, "Reading bind file:" << tmp); + LYXERR(Debug::KBMAP, "Reading bind file:" << bind_file.absFileName()); bool error = false; while (lexrc.isOK()) { @@ -260,7 +296,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) string cmd = lexrc.getString(); FuncRequest func = lyxaction.lookupFunc(cmd); - if (func.action == LFUN_UNKNOWN_ACTION) { + if (func.action() == LFUN_UNKNOWN_ACTION) { lexrc.printError("BN_BIND: Unknown LyX function `$$Token'"); error = true; break; @@ -286,7 +322,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) string cmd = lexrc.getString(); FuncRequest func = lyxaction.lookupFunc(cmd); - if (func.action == LFUN_UNKNOWN_ACTION) { + if (func.action() == LFUN_UNKNOWN_ACTION) { lexrc.printError("BN_UNBIND: Unknown LyX" " function `$$Token'"); error = true; @@ -313,7 +349,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) } if (error) - LYXERR0("KeyMap::read: error while reading bind file:" << tmp); + LYXERR0("KeyMap::read: error while reading bind file:" << bind_file.absFileName()); return !error; } @@ -332,7 +368,7 @@ void KeyMap::write(string const & bind_file, bool append, bool unbind) const BindingList::const_iterator it = list.begin(); BindingList::const_iterator it_end = list.end(); for (; it != it_end; ++it) { - FuncCode action = it->request.action; + FuncCode action = it->request.action(); string arg = to_utf8(it->request.argument()); os << tag << " \"" @@ -449,15 +485,15 @@ KeyMap::BindingList KeyMap::listBindings(bool unbound, KeyMap::ItemType tag) con BindingList list; listBindings(list, KeySequence(0, 0), tag); if (unbound) { - LyXAction::const_func_iterator fit = lyxaction.func_begin(); - LyXAction::const_func_iterator fit_end = lyxaction.func_end(); - for (; fit != fit_end; ++fit) { + LyXAction::const_iterator fit = lyxaction.func_begin(); + LyXAction::const_iterator const fen = lyxaction.func_end(); + for (; fit != fen; ++fit) { FuncCode action = fit->second; bool has_action = false; - BindingList::const_iterator it = list.begin(); - BindingList::const_iterator it_end = list.end(); - for (; it != it_end; ++it) - if (it->request.action == action) { + BindingList::const_iterator bit = list.begin(); + BindingList::const_iterator const ben = list.end(); + for (; bit != ben; ++bit) + if (bit->request.action() == action) { has_action = true; break; }