X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fkbmap.h;h=2ffe6885f15c2c452fb40a0f1b7a0364e4fcaa57;hb=52eb91c94fb70d58dceef430659c8781de2eccda;hp=e7f35d723690a5991d2df1f90e0eed888f039090;hpb=1120aa806c16aac6942760f244a1dbbe30c744be;p=lyx.git diff --git a/src/kbmap.h b/src/kbmap.h index e7f35d7236..2ffe6885f1 100644 --- a/src/kbmap.h +++ b/src/kbmap.h @@ -1,24 +1,33 @@ // -*- C++ -*- /** * \file kbmap.h - * Copyright 1995-2002 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 John Levon + * \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 "frontends/key_state.h" +#include "frontends/LyXKeySym.h" + +#include "support/docstream.h" + +#include -#include -#include +#include +#include -#include "LString.h" + +namespace lyx { class kb_sequence; @@ -29,70 +38,104 @@ public: * 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 */ - string::size_type bind(string const & seq, int action); + 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 + * @param forgui true if the string should use translations and + * special characters. + */ + docstring const print(bool forgui) const; - /// print all available keysyms - 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_PREFIX / LFUN_UNKNOWN_ACTION + * @return the action / LFUN_COMMAND_PREFIX / LFUN_UNKNOWN_ACTION */ - int lookup(unsigned int key, - unsigned int mod, kb_sequence * seq) const; + FuncRequest const & + lookup(LyXKeySymPtr key, + key_modifier::state mod, kb_sequence * seq) const; + + /// + typedef std::deque Bindings; /// Given an action, find all keybindings. - string const findbinding(int action, - string const & prefix = string()) const; + Bindings findbindings(FuncRequest const & func) const; + + /// Given an action, print the keybindings. + docstring 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 + * @param key the key as a keysym * @param mod the modifiers */ - static string const printKeysym(unsigned int key, unsigned int mod); + static std::string const printKeySym(LyXKeySym const & key, + key_modifier::state mod); - /// return the ISO value of a keysym - static char getiso(unsigned int i); + 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 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, int action, unsigned int r = 0); - - /// Returns a string of the given key - string const printKey(kb_key const & key) const; + void defkey(kb_sequence * seq, FuncRequest const & func, + unsigned int r = 0); + + /** + * 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 std::list Table; + typedef std::vector Table; /// Table table; }; +/// Implementation is in lyx_main.C +extern kb_keymap & theTopLevelKeymap(); + + +} // namespace lyx + #endif // KBMAP_H