3 * Copyright 1995-2002 the LyX Team
4 * Read the file COPYING
6 * \author John Levon <moz@compsoc.man.ac.uk>
13 #include "frontends/mouse_state.h"
14 #include "frontends/LyXKeySymFactory.h"
15 #include "kbsequence.h"
17 #include "commandtags.h"
23 int kb_sequence::addkey(LyXKeySymPtr key,
24 key_modifier::state mod, key_modifier::state nmod)
26 // adding a key to a deleted sequence
27 // starts a new sequence
34 modifiers.push_back(make_pair(mod, nmod));
35 sequence.push_back(key);
38 return curmap->lookup(key, mod, this);
41 return LFUN_UNKNOWN_ACTION;
45 string::size_type kb_sequence::parse(string const & s)
47 if (s.empty()) return 1;
49 string::size_type i = 0;
50 key_modifier::state mod = key_modifier::none;
51 key_modifier::state nmod = key_modifier::none;
53 while (i < s.length()) {
59 if (i + 1 < s.length() && s[i + 1] == '-') {
62 mod |= key_modifier::shift;
66 mod |= key_modifier::ctrl;
70 mod |= key_modifier::alt;
76 } else if (i + 2 < s.length() && s[i] == '~'
80 nmod |= key_modifier::shift;
84 nmod |= key_modifier::ctrl;
88 nmod |= key_modifier::alt;
96 string::size_type j = i;
97 for (; j < s.length() && s[j] != ' '; ++j)
98 tbuf += s[j]; // (!!!check bounds :-)
100 LyXKeySymPtr key(LyXKeySymFactory::create());
103 if ( ! key->isOK() ) {
109 addkey(key, mod, nmod);
110 mod = key_modifier::none;
115 if (sequence.size() == 0)
118 // everything is fine
123 string const kb_sequence::print() const
130 KeySequence::size_type i, length = sequence.size();
132 for (i = 0; i < length; ++i) {
133 buf += kb_keymap::printKeysym(sequence[i], modifiers[i].first);
136 if (i + 1 < length) {
144 string const kb_sequence::printOptions() const
153 buf += _(" options: ");
154 buf += curmap->print();
159 void kb_sequence::mark_deleted()
165 void kb_sequence::reset()
171 void kb_sequence::clear()