X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fkbmap.h;h=63bf3c05db07f3a764572e57f5155b4cb6e353e7;hb=e94889a041628203c50b66b9a4add63210de6928;hp=4cd1b0845ba3f40f400620db8703077aed50c8c5;hpb=9ce32d63e5ff1dbf4c04e3d8263b2649ef3ac595;p=lyx.git diff --git a/src/kbmap.h b/src/kbmap.h index 4cd1b0845b..63bf3c05db 100644 --- a/src/kbmap.h +++ b/src/kbmap.h @@ -1,78 +1,129 @@ // -*- 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 kbmap.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 + * \author John Levon + * + * Full author contact details are available in file CREDITS. + */ #ifndef KBMAP_H #define KBMAP_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "funcrequest.h" -#include -using std::list; +#include "frontends/key_state.h" +#include "frontends/LyXKeySym.h" -#include "LString.h" +#include + +#include +#include class kb_sequence; /// Defines key maps and actions for key sequences class kb_keymap { public: - /// - ~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. + * @return 0 on success, or position in string seq where error + * occurs. + * See kb_sequence::parse for the syntax of the seq string + */ + std::string::size_type bind(std::string const & seq, FuncRequest const & func); + + // Parse a bind file + bool read(std::string const & bind_file); + + /// print all available keysyms + std::string const print() const; + + /** + * Look up a key press in the keymap. + * @param key the keysym + * @param mod the modifiers + * @param seq the current key sequence so far + * @return the action / LFUN_COMMAND_PREFIX / LFUN_UNKNOWN_ACTION + */ + FuncRequest const & + lookup(LyXKeySymPtr key, + key_modifier::state mod, kb_sequence * seq) const; /// - void print(string & buf) const; - - /// Look up a key in the keymap - int lookup(unsigned int key, - unsigned int mod, kb_sequence * seq) const; + typedef std::deque Bindings; /// Given an action, find all keybindings. - string findbinding(int action) const; + Bindings findbindings(FuncRequest const & func) const; + + /// Given an action, print the keybindings. + std::string const printbindings(FuncRequest const & func) const; + + /** + * Given an action, find the first 1-key binding (if it exists). + * The LyXKeySym pointer is 0 is no key is found. + * [only used by the Qt/Mac frontend] + */ + std::pair + find1keybinding(FuncRequest const & func) const; + + + /** + * Returns a string of the given keysym, with modifiers. + * @param key the key as a keysym + * @param mod the modifiers + */ + static std::string const printKeySym(LyXKeySym const & key, + key_modifier::state mod); + + typedef std::pair modifier_pair; + private: /// struct kb_key { /// Keysym - unsigned int code; - + LyXKeySymPtr code; + /// Modifier masks - unsigned int mod; - + modifier_pair mod; + /// Keymap for prefix keys - kb_keymap * table; - + boost::shared_ptr table; + /// Action for !prefix keys - int action; + FuncRequest func; }; + /** + * Define an action for a key sequence. + * @param r internal recursion level + */ + void defkey(kb_sequence * seq, FuncRequest const & func, + unsigned int r = 0); - /// Define a new key sequence - int defkey(kb_sequence * seq, int action, int idx = 0); - /// - static string keyname(kb_key const & k); - - /// - static - void printKey(kb_key const & key, string & buf); - /// + /// Returns a string of the given key + std::string const printKey(kb_key const & key) const; + + /** + * Given an action, find all keybindings + * @param func the action + * @param prefix a sequence to prepend the results + */ + Bindings findbindings(FuncRequest const & func, + kb_sequence const & prefix) const; + + /// is the table empty ? bool empty() const { return table.empty(); } /// - typedef list Table; + typedef std::vector Table; /// Table table; }; -#endif +#endif // KBMAP_H