]> git.lyx.org Git - lyx.git/blobdiff - src/kbsequence.h
Fix 3188, update the labels at each Caption insertion.
[lyx.git] / src / kbsequence.h
index 91c94e045487506f0eb27364ccc99fd83a282bbc..6dc269a0357687f9f3e343c8927992a5a4036848 100644 (file)
 // -*- C++ -*-
-/* ======================================================================= *\
-   File   : kbmap.h, kbmap.h,v 1.3 1996/12/10 04:35:57 larsbj Exp
-   Author : chb, 30.Oct.1995
-   Docu   : see kbmap.C
-   Purpose: class definitions for XKeyEvent keymap handling
-   \* ==================================================================== */
+/**
+ * \file kbsequence.h
+ * 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 "frontends/LyXKeySym.h"
 
+#include <string>
 #include <vector>
-#include "LString.h"
+
+
+namespace lyx {
 
 class kb_keymap;
+class FuncRequest;
 
 /// Holds a key sequence and the current and standard keymaps
 class kb_sequence {
 public:
-       ///
-       kb_sequence() {
-               stdmap = curmap = 0;
-               length = 0;
-       }
+       typedef std::vector<LyXKeySymPtr> KeySequence;
 
-       /** Add a key to the key sequence and look it up in the curmap
-           if the latter is defined. */
-       int addkey(unsigned int key, unsigned int mod, unsigned int nmod = 0);
+       friend class kb_keymap;
 
        ///
-       int print(string & buf, bool when_defined = false) const;
-       
-        ///
-       int printOptions(string & buf) const;
-       
-       /// Make length negative to mark the sequence as deleted
-       void delseq();
+       kb_sequence(kb_keymap * std, kb_keymap * cur)
+               : stdmap(std), curmap(cur), deleted_(false) {}
 
-       ///
-       char getiso() const;
-       
-       ///
-       unsigned int getsym() const;
-       
-       ///
+       /**
+        * 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
+        */
+       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, 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".
+        */
+       std::string::size_type parse(std::string const & s);
+
+       /**
+        * Return the current sequence as a string.
+        * @param forgui true if the string should use translations and 
+        *   special characters. 
+        * @see parse()
+        */
+       docstring const print(bool forgui) const;
+
+       /**
+        * Return the current sequence and available options as
+        * a string. No options are added if no curmap kb map exists.
+        * @param forgui true if the string should use translations and 
+        *   special characters. 
+        */
+       docstring const printOptions(bool forgui) const;
+
+       /// Mark the sequence as deleted.
+       void mark_deleted();
+
+       /// Reset sequence to become "deleted"
        void reset();
-       
-       ///
-       int parse(string const & s);
-       
+
+       /// clear in full
+       void clear();
+
+       bool deleted() const {
+               return deleted_;
+       }
+
+       /// length of sequence
+       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;
-       
-       /** Array holding the current key sequence.
-           If sequence[length-1] < 0xff it can be used as ISO8859 char */
-       std::vector<unsigned int> sequence;
-       
-       ///
-       std::vector<unsigned int> modifiers;
-       
-       /// Current length of key sequence
-       int length;
+
+private:
+       /**
+        * Array holding the current key sequence as KeySyms.
+        * If sequence[length - 1] < 0xff it can be used as ISO8859 char
+        */
+       KeySequence sequence;
+
+       typedef std::pair<key_modifier::state, key_modifier::state>
+               modifier_pair;
+
+       /// modifiers for keys in the sequence
+       std::vector<modifier_pair> modifiers;
+
+       /// is keysequence deleted ?
+       bool deleted_;
 };
 
+
+} // namespace lyx
+
 #endif