]> git.lyx.org Git - features.git/blob - src/kbmap.h
a couple of new posix wrappers, use new instead of malloc in figinset delete the...
[features.git] / src / kbmap.h
1 // -*- C++ -*-
2 /* ======================================================================= *\
3    File   : kbmap.h, kbmap.h,v 1.3 1996/12/10 04:35:57 larsbj Exp
4    Author : chb, 30.Oct.1995
5    Docu   : see kbmap.C
6    Purpose: class definitions for XKeyEvent keymap handling
7    \* ==================================================================== */
8
9 #ifndef KBMAP_H
10 #define KBMAP_H
11
12 #ifdef __GNUG__
13 #pragma interface
14 #endif
15
16 #include <X11/Xlib.h>
17
18 #include "LString.h"
19
20 #define KB_PREALLOC  16
21
22 class kb_keymap;
23 class kb_sequence;
24
25 ///
26 struct kb_key {
27         /// Keysym
28         unsigned int code;
29         
30         /// Modifier masks
31         unsigned int mod;
32         
33         /// Keymap for prefix keys
34         kb_keymap * table;
35         
36         /// Action for !prefix keys
37         int action;
38 };
39
40
41 /// Defines key maps and actions for key sequences
42 class kb_keymap {
43 public:
44         ///
45         kb_keymap() {
46                 size = 0; 
47                 table = 0;
48         }
49         ///
50         ~kb_keymap();
51         
52         /// Bind a key-sequence to an action
53         /** Returns 0 on success. Otherwise, position in string where
54             error occured. */
55         int bind(char const * seq, int action);
56
57         ///
58         void print(string & buf) const;
59         
60         /// Look up a key in the keymap
61         int lookup(KeySym key, unsigned mod, kb_sequence * seq);
62
63         /// Given an action, find all keybindings.
64         string findbinding(int action) const;
65 private:
66         /// Define a new key sequence
67         int defkey(kb_sequence * seq, int action, int idx = 0);
68         
69         /// Size of the table (<0: hashtab)
70         int size;
71         
72         /// Holds the defined keys
73         /// Table for linear array, table ends with NoSymbol.
74         kb_key * table;
75 };
76
77
78 /// Holds a key sequence and the current and standard keymaps
79 class kb_sequence {
80 public:
81         ///
82         kb_sequence() {
83                 stdmap = curmap = 0;
84                 sequence = staticseq;
85                 modifiers = staticmod;
86                 length = 0; 
87                 size = KB_PREALLOC;
88         }
89         
90         ///
91         
92         
93         ///
94         ~kb_sequence()
95                 {
96                         if (sequence != staticseq) {
97                                 delete sequence;
98                                 delete modifiers;
99                         }
100                 }
101         
102         /// Add a key to the key sequence and look it up in the curmap
103         /** Add a key to the key sequence and look it up in the curmap
104             if the latter is defined. */
105         int addkey(KeySym key, unsigned mod, unsigned nmod = 0);
106
107         ///
108         int print(string & buf, bool when_defined = false) const;
109         
110         ///
111         int printOptions(string & buf) const;
112         
113         /// Make length negative to mark the sequence as deleted
114         void delseq();
115         
116         ///
117         char getiso();
118         
119         ///
120         KeySym getsym();
121         
122         ///
123         void reset();
124         
125         ///
126         int parse(char const * s);
127         
128         /// Keymap to use if a new sequence is starting
129         kb_keymap * stdmap;
130         
131         /// Keymap to use for the next key
132         kb_keymap * curmap;
133         
134         /// Array holding the current key sequence
135         /** If sequence[length-1] < 0xff it can be used as ISO8859 char */
136         unsigned int * sequence;
137         
138         ///
139         unsigned int * modifiers;
140         
141         /// Current length of key sequence
142         int length;
143         
144 private:
145         /// Static array preallocated for sequence
146         unsigned int staticseq[KB_PREALLOC];
147         
148         ///
149         unsigned int staticmod[KB_PREALLOC];
150         
151         /// Physically allocated storage size
152         int size;
153 };
154
155 #endif