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"
20 #include "frontends/KeySymbol.h"
26 FuncRequest const & KeySequence::addkey(KeySymbol const & key,
27 KeyModifier mod, KeyModifier nmod)
29 // adding a key to a deleted sequence
30 // starts a new sequence
37 modifiers.push_back(make_pair(mod, nmod));
38 sequence.push_back(key);
41 return curmap->lookup(key, mod, this);
43 return FuncRequest::unknown;
47 size_t KeySequence::parse(string const & s)
53 KeyModifier mod = NoModifier;
54 KeyModifier nmod = NoModifier;
56 while (i < s.length()) {
62 if (i + 1 < s.length() && s[i + 1] == '-') {
69 mod |= ControlModifier;
73 #if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
85 } else if (i + 2 < s.length() && s[i] == '~'
89 nmod |= ShiftModifier;
93 nmod |= ControlModifier;
97 #if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
112 for (; j < s.length() && s[j] != ' '; ++j)
113 tbuf += s[j]; // (!!!check bounds :-)
123 addkey(key, mod, nmod);
128 if (sequence.empty())
131 // everything is fine
136 docstring const KeySequence::print(outputFormat format) const
140 size_t const length = sequence.size();
142 for (size_t i = 0; i != length; ++i) {
145 buf += sequence[i].print(modifiers[i].first, false);
148 buf += sequence[i].print(modifiers[i].first, true);
151 KeyModifier mod = modifiers[i].first;
152 if (mod & ControlModifier)
154 if (mod & AltModifier)
155 #if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
157 if (mod & MetaModifier)
160 if (mod & ShiftModifier)
163 buf += from_utf8(sequence[i].getSymbolName());
174 docstring const KeySequence::printOptions(bool forgui) const
176 docstring buf = print(forgui ? ForGui : Portable);
181 buf += _(" options: ");
182 buf += curmap->print(forgui ? ForGui : Portable);
187 void KeySequence::reset()
194 void KeySequence::clear()
201 void KeySequence::removeKey()
206 modifiers.pop_back();
207 if (sequence.empty())