2 * \file KeySequence.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Lars Gullik Bjønnes
7 * \author Jean-Marc Lasgouttes
10 * Full author contact details are available in file CREDITS.
15 #include "KeySequence.h"
18 #include "support/gettext.h"
24 FuncRequest const & KeySequence::addkey(KeySymbol const & key,
25 KeyModifier mod, KeyModifier nmod)
27 // adding a key to a deleted sequence
28 // starts a new sequence
35 modifiers.push_back(make_pair(mod, nmod));
36 sequence.push_back(key);
39 return curmap->lookup(key, mod, this);
41 return FuncRequest::unknown;
45 size_t KeySequence::parse(string const & s)
51 KeyModifier mod = NoModifier;
52 KeyModifier nmod = NoModifier;
54 while (i < s.length()) {
60 if (i + 1 < s.length() && s[i + 1] == '-') {
67 mod |= ControlModifier;
71 #if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
83 } else if (i + 2 < s.length() && s[i] == '~'
87 nmod |= ShiftModifier;
91 nmod |= ControlModifier;
95 #if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
110 for (; j < s.length() && s[j] != ' '; ++j)
111 tbuf += s[j]; // (!!!check bounds :-)
121 addkey(key, mod, nmod);
126 if (sequence.empty())
129 // everything is fine
134 docstring const KeySequence::print(outputFormat format, bool const untranslated) const
138 size_t const length = sequence.size();
140 for (size_t i = 0; i != length; ++i) {
143 buf += sequence[i].print(modifiers[i].first, false, untranslated);
146 buf += sequence[i].print(modifiers[i].first, true, untranslated);
149 KeyModifier mod = modifiers[i].first;
150 if (mod & ControlModifier)
152 if (mod & AltModifier)
153 #if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
155 if (mod & MetaModifier)
158 if (mod & ShiftModifier)
161 buf += from_utf8(sequence[i].getSymbolName());
172 docstring const KeySequence::printOptions(bool forgui) const
174 docstring buf = print(forgui ? ForGui : Portable);
179 buf += _(" options: ");
180 buf += curmap->print(forgui ? ForGui : Portable);
185 void KeySequence::reset()
192 void KeySequence::clear()
199 void KeySequence::removeKey()
204 modifiers.pop_back();
205 if (sequence.empty())