]> git.lyx.org Git - lyx.git/blobdiff - src/kbsequence.h
Continue to improve GtkLengthEntry
[lyx.git] / src / kbsequence.h
index 255adb2d298f7d86f81f70084391fbc4df09b72c..3d894a1ec31c54d1fe602cb7db77656a7d757095 100644 (file)
@@ -1,75 +1,84 @@
 // -*- C++ -*-
 /**
  * \file kbsequence.h
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ *
+ * Full author contact details are available in file CREDITS.
  */
 
 #ifndef KBSEQUENCE_H
 #define KBSEQUENCE_H
 
-#ifdef __GNUG__
-#pragma interface
-#endif
+#include "frontends/key_state.h"
 
-#include <vector>
-#include "LString.h"
+#include <boost/shared_ptr.hpp>
 
-#include "commandtags.h"
+#include <string>
+#include <vector>
 
 class kb_keymap;
+class LyXKeySym;
+class FuncRequest;
 
 /// Holds a key sequence and the current and standard keymaps
 class kb_sequence {
 public:
+       typedef boost::shared_ptr<LyXKeySym> LyXKeySymPtr;
+       typedef std::vector<LyXKeySymPtr> KeySequence;
+
        friend class kb_keymap;
 
        ///
        kb_sequence(kb_keymap * std, kb_keymap * cur)
-               : stdmap(std), curmap(cur), length_(0), deleted_(false) {}
-
-       
+               : stdmap(std), curmap(cur), deleted_(false) {}
 
        /**
         * Add a key to the key sequence and look it up in the curmap
         * if the latter is defined.
+        * @param keysym the key to add
         * @param mod modifier mask
         * @param nmod which modifiers to mask out for equality test
         * @return the action matching this key sequence or LFUN_UNKNOWN_ACTION
         */
-       kb_action addkey(unsigned int key, unsigned int mod, unsigned int nmod = 0);
+       FuncRequest const &
+       addkey(LyXKeySymPtr keysym, key_modifier::state mod,
+              key_modifier::state nmod = key_modifier::none);
 
        /**
         * Add a sequence of keys from a string to the sequence
         * @return string::npos if OK, else error position in string
         *
         * Keys in the string must be separated with whitespace;
-        * Use the keysym names used by XStringToKeysym
+        * Use the keysym names used by XStringToKeysym, f.ex.
+        * "Space", "a", "Return", ...
         * Prefixes are S-, C-, M- for shift, control, meta
+        * Prefixes can also be ignored by using the Tilde "~"
+        * f.ex.: "~S-Space".
         */
-       string::size_type parse(string const & s);
-       
+       std::string::size_type parse(std::string const & s);
+
        /**
         * Return the current sequence as a string.
         * @see parse()
         */
-       string const print() const;
-       
+       std::string const print() const;
+
        /**
         * Return the current sequence and available options as
         * a string. No options are added if no curmap kb map exists.
         */
-       string const printOptions() const;
-       
+       std::string const printOptions() const;
+
        /// Mark the sequence as deleted.
        void mark_deleted();
 
-       /// Return the ISO value of the last keysym in sequence, or 0
-       char getiso() const;
-       
        /// Reset sequence to become "deleted"
        void reset();
-       
+
        /// clear in full
        void clear();
 
@@ -78,31 +87,28 @@ public:
        }
 
        /// length of sequence
-       std::vector<unsigned int>::size_type length() const {
-               return length_;
+       KeySequence::size_type length() const {
+               return sequence.size();
        }
 
        /// Keymap to use if a new sequence is starting
        kb_keymap * stdmap;
-       
+
        /// Keymap to use for the next key
        kb_keymap * curmap;
-       
+
 private:
-       /// get the keysym of last in sequence
-       unsigned int getsym() const;
-       
        /**
-        * Array holding the current key sequence.
-        * If sequence[length-1] < 0xff it can be used as ISO8859 char
+        * Array holding the current key sequence as KeySyms.
+        * If sequence[length - 1] < 0xff it can be used as ISO8859 char
         */
-       std::vector<unsigned int> sequence;
-       
+       KeySequence sequence;
+
+       typedef std::pair<key_modifier::state, key_modifier::state>
+               modifier_pair;
+
        /// modifiers for keys in the sequence
-       std::vector<unsigned int> modifiers;
-       
-       /// Current length of key sequence
-       std::vector<unsigned int>::size_type length_;
+       std::vector<modifier_pair> modifiers;
 
        /// is keysequence deleted ?
        bool deleted_;