]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/kbdstate.h
make wxKeyEvent and wxMouseEvent derive from the same wxKeyboardState object (indirec...
[wxWidgets.git] / include / wx / kbdstate.h
diff --git a/include/wx/kbdstate.h b/include/wx/kbdstate.h
new file mode 100644 (file)
index 0000000..b3a44e8
--- /dev/null
@@ -0,0 +1,91 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/kbdstate.h
+// Purpose:     Declaration of wxKeyboardState class
+// Author:      Vadim Zeitlin
+// Created:     2008-09-19
+// RCS-ID:      $Id$
+// Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_KBDSTATE_H_
+#define _WX_KBDSTATE_H_
+
+#include "wx/defs.h"
+
+// ----------------------------------------------------------------------------
+// wxKeyboardState stores the state of the keyboard modifier keys
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxKeyboardState
+{
+public:
+    wxKeyboardState()
+        : m_controlDown(false),
+          m_shiftDown(false),
+          m_altDown(false),
+          m_metaDown(false)
+    {
+    }
+
+    // default copy ctor, assignment operator and dtor are ok
+
+
+    // accessors for the various modifier keys
+    // ---------------------------------------
+
+    // should be used check if the key event has exactly the given modifiers:
+    // "GetModifiers() = wxMOD_CONTROL" is easier to write than "ControlDown()
+    // && !MetaDown() && !AltDown() && !ShiftDown()"
+    int GetModifiers() const
+    {
+        return (m_controlDown ? wxMOD_CONTROL : 0) |
+               (m_shiftDown ? wxMOD_SHIFT : 0) |
+               (m_metaDown ? wxMOD_META : 0) |
+               (m_altDown ? wxMOD_ALT : 0);
+    }
+
+    // returns true if any modifiers at all are pressed
+    bool HasModifiers() const { return GetModifiers() != wxMOD_NONE; }
+
+    // accessors for individual modifier keys
+    bool ControlDown() const { return m_controlDown; }
+    bool ShiftDown() const { return m_shiftDown; }
+    bool MetaDown() const { return m_metaDown; }
+    bool AltDown() const { return m_altDown; }
+
+    // "Cmd" is a pseudo key which is Control for PC and Unix platforms but
+    // Apple ("Command") key under Macs: it makes often sense to use it instead
+    // of, say, ControlDown() because Cmd key is used for the same thing under
+    // Mac as Ctrl elsewhere (but Ctrl still exists, just not used for this
+    // purpose under Mac)
+    bool CmdDown() const
+    {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+        return MetaDown();
+#else
+        return ControlDown();
+#endif
+    }
+
+    // these functions are mostly used by wxWidgets itself
+    // ---------------------------------------------------
+
+    void SetControlDown(bool down) { m_controlDown = down; }
+    void SetShiftDown(bool down)   { m_shiftDown = down; }
+    void SetAltDown(bool down)     { m_altDown = down; }
+    void SetMetaDown(bool down)    { m_metaDown = down; }
+
+
+    // for backwards compatibility with the existing code accessing these
+    // members of wxKeyEvent directly, these variables are public, however you
+    // should not use them in any new code, please use the accessors instead
+public:
+    bool m_controlDown : 1;
+    bool m_shiftDown   : 1;
+    bool m_altDown     : 1;
+    bool m_metaDown    : 1;
+};
+
+#endif // _WX_KBDSTATE_H_
+