X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXAction.h;h=f61772c56c9239ebfc98f5712d4bfe1f05b8d7b6;hb=4480b72a9dc8a5453a17edf55d4d4a60847a68ae;hp=70fda4ab94acab1fd821e7459226e9df52c79492;hpb=be85a6fcb55291a6fa8ebf7f6cb58fdecafd741d;p=lyx.git diff --git a/src/LyXAction.h b/src/LyXAction.h index 70fda4ab94..f61772c56c 100644 --- a/src/LyXAction.h +++ b/src/LyXAction.h @@ -4,7 +4,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author John Levon * * Full author contact details are available in file CREDITS. @@ -13,7 +13,7 @@ #ifndef LYXACTION_H #define LYXACTION_H -#include "lfuns.h" +#include "FuncCode.h" #include #include @@ -21,105 +21,114 @@ namespace lyx { +// current LFUN format +static unsigned int const LFUN_FORMAT = 4; // gm: tabular-feature + class FuncRequest; +class LyXErr; /** - * This class is a container for LyX actions. It also - * stores and managers "pseudo-actions". Pseudo-actions - * are not part of the kb_action enum, but are created - * dynamically, for encapsulating a real action and an - * argument. They are used for things like the menus. + * This class is a container for LyX actions. It associates a name to + * most of them and describes some of their properties. */ class LyXAction { public: /// category of an action, used in the Shortcuts dialog - enum func_type { + enum FuncType { Hidden, //< Not listed for configuration Edit, //< Cursor and mouse movement, copy/paste etc Math, //< Mathematics Buffer, //< Buffer and window related Layout, //< Font, Layout and textclass related - System, //< Lyx preference, server etc + System //< Lyx preference, server etc }; private: /// information for an action - struct func_info { + struct FuncInfo { /// the action name std::string name; - /// the func_attrib values set + /// the FuncAttribs values set unsigned int attrib; /// the category of this func - func_type type; + FuncType type; }; - -public: - /// noncopyable - LyXAction(LyXAction const &); - void operator=(LyXAction const &); - /// type for map between a function name and its action - typedef std::map func_map; + typedef std::map FuncMap; /// type for map between an action and its info - typedef std::map info_map; + typedef std::map InfoMap; +public: /// possible "permissions" for an action - enum func_attrib { - Noop = 0, //< nothing special about this func - ReadOnly = 1, //< can be used in RO mode (perhaps this should change) + enum FuncAttribs { + Noop = 0, //< Nothing special about this func + ReadOnly = 1, //< Can be used in RO mode (perhaps this should change) NoBuffer = 2, //< Can be used when there is no document open Argument = 4, //< Requires argument NoUpdate = 8, //< Does not (usually) require update - SingleParUpdate = 16 //< Usually only requires this par updated + SingleParUpdate = 16, //< Usually only requires this par updated + AtPoint = 32, //< dispatch first to inset at cursor if there is one + NoInternal = 64 //< Cannot be used for internal, non-document Buffers }; LyXAction(); /** - * Returns an pseudoaction from a string - * If you include arguments in func_name, a new pseudoaction - * will be created if needed. + * Creates a FuncRequest from a string of the form: + * lyx-function [argument] + * where the argument is optional and "lyx-function" is in the form you'd + * enter it in the mini-buffer. */ FuncRequest lookupFunc(std::string const & func_name) const; - /// Return the name (and argument) associated with the given (pseudo) action - std::string const getActionName(kb_action action) const; - - func_type const getActionType(kb_action action) const; + /// Return the command name associated with the given action + /// Thus: getActionName(LFUN_ERT_INSERT) --> "ert-insert". + std::string const getActionName(FuncCode action) const; + /// + FuncType getActionType(FuncCode action) const; /// True if the command has `flag' set - bool funcHasFlag(kb_action action, func_attrib flag) const; + bool funcHasFlag(FuncCode action, FuncAttribs flag) const; - /// iterator across all real actions - typedef func_map::const_iterator const_func_iterator; + /// iterator across all LFUNs + typedef FuncMap::const_iterator const_iterator; - /// return an iterator to the start of all real actions - const_func_iterator func_begin() const; + /// return an iterator to the start of the list of LFUNs + const_iterator func_begin() const; - /// return an iterator to the end of all real actions - const_func_iterator func_end() const; + /// return an iterator to one past the end of the list of LFUNs + const_iterator func_end() const; private: + /// noncopyable + LyXAction(LyXAction const &); + void operator=(LyXAction const &); + /// populate the action container with our actions void init(); /// add the given action - void newFunc(kb_action, std::string const & name, unsigned int attrib, func_type type); + void newFunc(FuncCode, std::string const & name, unsigned int attrib, FuncType type); /** - * This is a list of all the LyXFunc names with the - * coresponding action number. It is usually only used by the - * minibuffer or when assigning commands to keys during init. + * This maps LyX function names to function codes, e.g.: + * lyx_func_map["ert-insert"] == LFUN_ERT_INSERT */ - func_map lyx_func_map; + FuncMap lyx_func_map; /** - * This is a mapping from action number to an object holding - * info about this action. f.ex. command name (string), - * command attributes (ro) + * This maps function codes to objects holding info about the corresponding + * action. E.g., if + * FuncInfo const & ert = lyx_info_map[LFUN_ERT_INSERT]; + * then: + * ert.name == "ert-insert"' + * ert.attrib == Noop + * ert.type == Edit */ - info_map lyx_info_map; + InfoMap lyx_info_map; }; +LyXErr & operator<<(LyXErr &, FuncCode); + /// singleton instance extern LyXAction lyxaction;