X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FKeySequence.cpp;h=cc6a5bd9855da6fd4535b1813f5821903da1bcac;hb=823e44822e6638824900eee2f7e2e7165af97f8d;hp=c13c41ecdfaf08c81665fafd7323111db7236864;hpb=5265a8c02c7223f72dda771fd776c104bc729487;p=lyx.git diff --git a/src/KeySequence.cpp b/src/KeySequence.cpp index c13c41ecdf..cc6a5bd985 100644 --- a/src/KeySequence.cpp +++ b/src/KeySequence.cpp @@ -3,7 +3,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes * \author John Levon * @@ -13,24 +13,18 @@ #include #include "KeySequence.h" - -#include "gettext.h" #include "KeyMap.h" -#include "lfuns.h" - -#include "frontends/LyXKeySym.h" -#include "frontends/LyXKeySymFactory.h" +#include "support/gettext.h" -namespace lyx { +#include "frontends/KeySymbol.h" -using std::make_pair; -using std::string; +using namespace std; +namespace lyx { -FuncRequest const & -KeySequence::addkey(LyXKeySymPtr key, - key_modifier::state mod, key_modifier::state nmod) +FuncRequest const & KeySequence::addkey(KeySymbol const & key, + KeyModifier mod, KeyModifier nmod) { // adding a key to a deleted sequence // starts a new sequence @@ -43,12 +37,10 @@ KeySequence::addkey(LyXKeySymPtr key, modifiers.push_back(make_pair(mod, nmod)); sequence.push_back(key); - if (curmap) { + if (curmap) return curmap->lookup(key, mod, this); - } - static FuncRequest unknown(LFUN_UNKNOWN_ACTION); - return unknown; + return FuncRequest::unknown; } @@ -58,8 +50,8 @@ size_t KeySequence::parse(string const & s) return 1; size_t i = 0; - key_modifier::state mod = key_modifier::none; - key_modifier::state nmod = key_modifier::none; + KeyModifier mod = NoModifier; + KeyModifier nmod = NoModifier; while (i < s.length()) { if (s[i] == ' ') @@ -70,15 +62,15 @@ size_t KeySequence::parse(string const & s) if (i + 1 < s.length() && s[i + 1] == '-') { switch (s[i]) { case 's': case 'S': - mod |= key_modifier::shift; + mod |= ShiftModifier; i += 2; continue; case 'c': case 'C': - mod |= key_modifier::ctrl; + mod |= ControlModifier; i += 2; continue; case 'm': case 'M': - mod |= key_modifier::alt; + mod |= AltModifier; i += 2; continue; default: @@ -88,15 +80,15 @@ size_t KeySequence::parse(string const & s) && s[i + 2] == '-') { switch (s[i + 1]) { case 's': case 'S': - nmod |= key_modifier::shift; + nmod |= ShiftModifier; i += 3; continue; case 'c': case 'C': - nmod |= key_modifier::ctrl; + nmod |= ControlModifier; i += 3; continue; case 'm': case 'M': - nmod |= key_modifier::alt; + nmod |= AltModifier; i += 3; continue; default: @@ -108,16 +100,16 @@ size_t KeySequence::parse(string const & s) for (; j < s.length() && s[j] != ' '; ++j) tbuf += s[j]; // (!!!check bounds :-) - LyXKeySymPtr key(LyXKeySymFactory::create()); - key->init(tbuf); + KeySymbol key; + key.init(tbuf); - if (!key->isOK()) + if (!key.isOK()) return j; i = j; addkey(key, mod, nmod); - mod = key_modifier::none; + mod = NoModifier; } } @@ -130,16 +122,34 @@ size_t KeySequence::parse(string const & s) } -docstring const KeySequence::print(bool forgui) const +docstring const KeySequence::print(outputFormat format) const { docstring buf; size_t const length = sequence.size(); - for (size_t i = 0; i < length; ++i) { - buf += sequence[i]->print(modifiers[i].first, forgui); + for (size_t i = 0; i != length; ++i) { + switch (format) { + case Portable: + buf += sequence[i].print(modifiers[i].first, false); + break; + case ForGui: + buf += sequence[i].print(modifiers[i].first, true); + break; + case BindFile: + KeyModifier mod = modifiers[i].first; + if (mod & ControlModifier) + buf += "C-"; + if (mod & AltModifier) + buf += "M-"; + if (mod & ShiftModifier) + buf += "S-"; + + buf += from_utf8(sequence[i].getSymbolName()); + break; + } // append a blank - if (i + 1 < length) + if (i + 1 != length) buf += ' '; } return buf; @@ -148,31 +158,24 @@ docstring const KeySequence::print(bool forgui) const docstring const KeySequence::printOptions(bool forgui) const { - docstring buf; - - buf += print(forgui); + docstring buf = print(forgui ? ForGui : Portable); if (!curmap) return buf; buf += _(" options: "); - buf += curmap->print(forgui); + buf += curmap->print(forgui ? ForGui : Portable); return buf; } -void KeySequence::mark_deleted() -{ - deleted_ = true; -} - - void KeySequence::reset() { - mark_deleted(); + deleted_ = true; curmap = stdmap; } + void KeySequence::clear() { sequence.clear(); @@ -180,4 +183,15 @@ void KeySequence::clear() } +void KeySequence::removeKey() +{ + if (deleted_) + return; + sequence.pop_back(); + modifiers.pop_back(); + if (sequence.empty()) + deleted_ = true; +} + + } // namespace lyx