1*8af74909SZhong Yang // Scintilla source code edit control 2*8af74909SZhong Yang /** @file KeyMap.h 3*8af74909SZhong Yang ** Defines a mapping between keystrokes and commands. 4*8af74909SZhong Yang **/ 5*8af74909SZhong Yang // Copyright 1998-2001 by Neil Hodgson <[email protected]> 6*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed. 7*8af74909SZhong Yang 8*8af74909SZhong Yang #ifndef KEYMAP_H 9*8af74909SZhong Yang #define KEYMAP_H 10*8af74909SZhong Yang 11*8af74909SZhong Yang namespace Scintilla { 12*8af74909SZhong Yang 13*8af74909SZhong Yang #define SCI_NORM 0 14*8af74909SZhong Yang #define SCI_SHIFT SCMOD_SHIFT 15*8af74909SZhong Yang #define SCI_CTRL SCMOD_CTRL 16*8af74909SZhong Yang #define SCI_ALT SCMOD_ALT 17*8af74909SZhong Yang #define SCI_META SCMOD_META 18*8af74909SZhong Yang #define SCI_SUPER SCMOD_SUPER 19*8af74909SZhong Yang #define SCI_CSHIFT (SCI_CTRL | SCI_SHIFT) 20*8af74909SZhong Yang #define SCI_ASHIFT (SCI_ALT | SCI_SHIFT) 21*8af74909SZhong Yang 22*8af74909SZhong Yang /** 23*8af74909SZhong Yang */ 24*8af74909SZhong Yang class KeyModifiers { 25*8af74909SZhong Yang public: 26*8af74909SZhong Yang int key; 27*8af74909SZhong Yang int modifiers; KeyModifiers(int key_,int modifiers_)28*8af74909SZhong Yang KeyModifiers(int key_, int modifiers_) noexcept : key(key_), modifiers(modifiers_) { 29*8af74909SZhong Yang } 30*8af74909SZhong Yang bool operator<(const KeyModifiers &other) const noexcept { 31*8af74909SZhong Yang if (key == other.key) 32*8af74909SZhong Yang return modifiers < other.modifiers; 33*8af74909SZhong Yang else 34*8af74909SZhong Yang return key < other.key; 35*8af74909SZhong Yang } 36*8af74909SZhong Yang }; 37*8af74909SZhong Yang 38*8af74909SZhong Yang /** 39*8af74909SZhong Yang */ 40*8af74909SZhong Yang class KeyToCommand { 41*8af74909SZhong Yang public: 42*8af74909SZhong Yang int key; 43*8af74909SZhong Yang int modifiers; 44*8af74909SZhong Yang unsigned int msg; 45*8af74909SZhong Yang }; 46*8af74909SZhong Yang 47*8af74909SZhong Yang /** 48*8af74909SZhong Yang */ 49*8af74909SZhong Yang class KeyMap { 50*8af74909SZhong Yang std::map<KeyModifiers, unsigned int> kmap; 51*8af74909SZhong Yang static const KeyToCommand MapDefault[]; 52*8af74909SZhong Yang 53*8af74909SZhong Yang public: 54*8af74909SZhong Yang KeyMap(); 55*8af74909SZhong Yang ~KeyMap(); 56*8af74909SZhong Yang void Clear() noexcept; 57*8af74909SZhong Yang void AssignCmdKey(int key, int modifiers, unsigned int msg); 58*8af74909SZhong Yang unsigned int Find(int key, int modifiers) const; // 0 returned on failure 59*8af74909SZhong Yang const std::map<KeyModifiers, unsigned int> &GetKeyMap() const noexcept; 60*8af74909SZhong Yang }; 61*8af74909SZhong Yang 62*8af74909SZhong Yang } 63*8af74909SZhong Yang 64*8af74909SZhong Yang #endif 65