1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/kbdstate.h 3 // Purpose: Declaration of wxKeyboardState class 4 // Author: Vadim Zeitlin 5 // Created: 2008-09-19 6 // Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org> 7 // Licence: wxWindows licence 8 /////////////////////////////////////////////////////////////////////////////// 9 10 #ifndef _WX_KBDSTATE_H_ 11 #define _WX_KBDSTATE_H_ 12 13 #include "wx/defs.h" 14 15 // ---------------------------------------------------------------------------- 16 // wxKeyboardState stores the state of the keyboard modifier keys 17 // ---------------------------------------------------------------------------- 18 19 class WXDLLIMPEXP_CORE wxKeyboardState 20 { 21 public: 22 wxKeyboardState(bool controlDown = false, 23 bool shiftDown = false, 24 bool altDown = false, 25 bool metaDown = false) m_controlDown(controlDown)26 : m_controlDown(controlDown), 27 m_shiftDown(shiftDown), 28 m_altDown(altDown), 29 m_metaDown(metaDown) 30 #ifdef __WXOSX__ 31 ,m_rawControlDown(false) 32 #endif 33 { 34 } 35 36 // default copy ctor, assignment operator and dtor are ok 37 38 39 // accessors for the various modifier keys 40 // --------------------------------------- 41 42 // should be used check if the key event has exactly the given modifiers: 43 // "GetModifiers() = wxMOD_CONTROL" is easier to write than "ControlDown() 44 // && !MetaDown() && !AltDown() && !ShiftDown()" GetModifiers()45 int GetModifiers() const 46 { 47 return (m_controlDown ? wxMOD_CONTROL : 0) | 48 (m_shiftDown ? wxMOD_SHIFT : 0) | 49 (m_metaDown ? wxMOD_META : 0) | 50 #ifdef __WXOSX__ 51 (m_rawControlDown ? wxMOD_RAW_CONTROL : 0) | 52 #endif 53 (m_altDown ? wxMOD_ALT : 0); 54 } 55 56 // returns true if any modifiers at all are pressed HasAnyModifiers()57 bool HasAnyModifiers() const { return GetModifiers() != wxMOD_NONE; } 58 59 // returns true if any modifiers changing the usual key interpretation are 60 // pressed, notably excluding Shift HasModifiers()61 bool HasModifiers() const 62 { 63 return ControlDown() || RawControlDown() || AltDown(); 64 } 65 66 // accessors for individual modifier keys ControlDown()67 bool ControlDown() const { return m_controlDown; } RawControlDown()68 bool RawControlDown() const 69 { 70 #ifdef __WXOSX__ 71 return m_rawControlDown; 72 #else 73 return m_controlDown; 74 #endif 75 } ShiftDown()76 bool ShiftDown() const { return m_shiftDown; } MetaDown()77 bool MetaDown() const { return m_metaDown; } AltDown()78 bool AltDown() const { return m_altDown; } 79 80 // "Cmd" is a pseudo key which is Control for PC and Unix platforms but 81 // Apple ("Command") key under Macs: it makes often sense to use it instead 82 // of, say, ControlDown() because Cmd key is used for the same thing under 83 // Mac as Ctrl elsewhere (but Ctrl still exists, just not used for this 84 // purpose under Mac) CmdDown()85 bool CmdDown() const 86 { 87 return ControlDown(); 88 } 89 90 // these functions are mostly used by wxWidgets itself 91 // --------------------------------------------------- 92 SetControlDown(bool down)93 void SetControlDown(bool down) { m_controlDown = down; } SetRawControlDown(bool down)94 void SetRawControlDown(bool down) 95 { 96 #ifdef __WXOSX__ 97 m_rawControlDown = down; 98 #else 99 m_controlDown = down; 100 #endif 101 } SetShiftDown(bool down)102 void SetShiftDown(bool down) { m_shiftDown = down; } SetAltDown(bool down)103 void SetAltDown(bool down) { m_altDown = down; } SetMetaDown(bool down)104 void SetMetaDown(bool down) { m_metaDown = down; } 105 106 107 // for backwards compatibility with the existing code accessing these 108 // members of wxKeyEvent directly, these variables are public, however you 109 // should not use them in any new code, please use the accessors instead 110 public: 111 bool m_controlDown : 1; 112 bool m_shiftDown : 1; 113 bool m_altDown : 1; 114 bool m_metaDown : 1; 115 #ifdef __WXOSX__ 116 bool m_rawControlDown : 1; 117 #endif 118 }; 119 120 #endif // _WX_KBDSTATE_H_ 121 122