]> git.lyx.org Git - lyx.git/blobdiff - src/kbmap.h
reintrodoce operator<< fix
[lyx.git] / src / kbmap.h
index d61f539695f9aaa34d9aea042ff558c3333eab6a..015bce9c3713953403cf45c60c103e6f1a1ab806 100644 (file)
 #pragma interface
 #endif
 
-#include <X11/Xlib.h>
+#include <list>
 
 #include "LString.h"
 
-#define KB_PREALLOC  16
-#define KB_HASHSIZE 128   // yes, yes - I know. 128 is not exactly prime :-)
-// ... but we are dealing with ASCII chars mostly.
-
-class kb_keymap;
 class kb_sequence;
 
-///
-struct kb_key {
-       /// Keysym
-       unsigned int code;
-       
-       /// Modifier masks
-       unsigned int mod;
-       
-       /// Keymap for prefix keys
-       kb_keymap * table;
-       
-       /// Action for !prefix keys
-       int action;
-};
-
-
 /// Defines key maps and actions for key sequences
 class kb_keymap {
 public:
-       ///
-       kb_keymap() {
-               size = 0; 
-               table = 0;
-       }
        ///
        ~kb_keymap();
        
-       /// Bind a key-sequence to an action
-       /** Returns 0 on success. Otherwise, position in string where
-         error occured. */
-       int bind(char const * seq, int action);
-       
+       /** Bind a key-sequence to an action.
+           Returns 0 on success. Otherwise, position in string where
+           error occured. */
+       int bind(string const & seq, int action);
+
        ///
-       int print(char * buf, int maxlen) const;
+       void print(string & buf) const;
        
        /// Look up a key in the keymap
-       int lookup(KeySym key, unsigned mod, kb_sequence * seq);
+       int lookup(unsigned int key,
+                  unsigned int mod, kb_sequence * seq) const;
 
        /// Given an action, find all keybindings.
-       string findbinding(int action) const;
+       string const findbinding(int action) const;
 private:
-       /// Define a new key sequence
-       int defkey(kb_sequence * seq, int action, int idx = 0);
-       
-       /// Size of the table (<0: hashtab)
-       int size;
-       
-       /// Holds the defined keys
-       /** Both kinds of tables ends with NoSymbol */
-       union
-       {
-               /// Table for linear array
-               kb_key * table;
+       ///
+       struct kb_key {
+               /// Keysym
+               unsigned int code;
+               
+               /// Modifier masks
+               unsigned int mod;
+               
+               /// Keymap for prefix keys
+               kb_keymap * table;
                
-               /// Hash table holding key lists
-               kb_key ** htable;
+               /// Action for !prefix keys
+               int action;
        };
-};
 
 
-/// Holds a key sequence and the current and standard keymaps
-class kb_sequence {
-public:
+       /// Define a new key sequence
+       int defkey(kb_sequence * seq, int action, int idx = 0);
        ///
-       kb_sequence() {
-               stdmap = curmap = 0;
-               sequence = staticseq;
-               modifiers = staticmod;
-               length = 0; 
-               size = KB_PREALLOC;
-       }
+       static string const keyname(kb_key const & k);
        
        ///
-       
-       
+       static
+       void printKey(kb_key const & key, string & buf);
        ///
-       ~kb_sequence()
-       {
-               if (sequence != staticseq) {
-                       delete sequence;
-                       delete modifiers;
-               }
+       bool empty() const {
+               return table.empty();
        }
-       
-       /// Add a key to the key sequence and look it up in the curmap
-       /** Add a key to the key sequence and look it up in the curmap
-         if the latter is defined. */
-       int addkey(KeySym key, unsigned mod, unsigned nmod = 0);
-       
-       ///
-       int print(char * buf, int maxlen, bool when_defined = false) const; //RVDK_PATCH_5
-       
-        ///
-       int printOptions(char * buf, int maxlen) const;
-       
-       /// Make length negative to mark the sequence as deleted
-       void delseq();
-       
-       ///
-       char getiso();
-       
        ///
-       KeySym getsym();
-       
-       ///
-       void reset();
-       
+       typedef std::list<kb_key> Table;
        ///
-       int parse(char const * s);
-       
-       /// 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 */
-       unsigned int * sequence;
-       
-       ///
-       unsigned int * modifiers;
-       
-       /// Current length of key sequence
-       int length;
-       
-private:
-       /// Static array preallocated for sequence
-       unsigned int staticseq[KB_PREALLOC];
-       
-       ///
-       unsigned int staticmod[KB_PREALLOC];
-       
-       /// Physically allocated storage size
-       int size;
+       Table table;
 };
 
 #endif