]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/mousestate.h
Implement monitoring of file descriptors in wxMotif event loop.
[wxWidgets.git] / include / wx / mousestate.h
index 14a75516d3f542294dfb2745a7ab3082b704bc7b..8e954ad371742d5007976d818368d285af392b64 100644 (file)
 #ifndef _WX_MOUSESTATE_H_
 #define _WX_MOUSESTATE_H_
 
+#include "wx/gdicmn.h"      // for wxPoint
 #include "wx/kbdstate.h"
 
+// the symbolic names for the mouse buttons
+enum wxMouseButton
+{
+    wxMOUSE_BTN_ANY     = -1,
+    wxMOUSE_BTN_NONE    = 0,
+    wxMOUSE_BTN_LEFT    = 1,
+    wxMOUSE_BTN_MIDDLE  = 2,
+    wxMOUSE_BTN_RIGHT   = 3,
+    wxMOUSE_BTN_AUX1    = 4,
+    wxMOUSE_BTN_AUX2    = 5,
+    wxMOUSE_BTN_MAX
+};
+
 // ----------------------------------------------------------------------------
 // wxMouseState contains the information about mouse position, buttons and also
 // key modifiers
@@ -24,9 +38,9 @@ class WXDLLIMPEXP_CORE wxMouseState : public wxKeyboardState
 {
 public:
     wxMouseState()
-        : m_x(0), m_y(0),
-          m_leftDown(false), m_middleDown(false), m_rightDown(false),
-          m_aux1Down(false), m_aux2Down(false)
+        : m_leftDown(false), m_middleDown(false), m_rightDown(false),
+          m_aux1Down(false), m_aux2Down(false),
+          m_x(0), m_y(0)
     {
     }
 
@@ -37,17 +51,67 @@ public:
     wxCoord GetX() const { return m_x; }
     wxCoord GetY() const { return m_y; }
     wxPoint GetPosition() const { return wxPoint(m_x, m_y); }
+    void GetPosition(wxCoord *x, wxCoord *y) const
+    {
+        if ( x )
+            *x = m_x;
+        if ( y )
+            *y = m_y;
+    }
+
+    // this overload is for compatibility only
+    void GetPosition(long *x, long *y) const
+    {
+        if ( x )
+            *x = m_x;
+        if ( y )
+            *y = m_y;
+    }
 
     // accessors for the pressed buttons
-    bool LeftDown()    const { return m_leftDown; }
-    bool MiddleDown()  const { return m_middleDown; }
-    bool RightDown()   const { return m_rightDown; }
-    bool Aux1Down()    const { return m_aux1Down; }
-    bool Aux2Down()    const { return m_aux2Down; }
+    bool LeftIsDown()    const { return m_leftDown; }
+    bool MiddleIsDown()  const { return m_middleDown; }
+    bool RightIsDown()   const { return m_rightDown; }
+    bool Aux1IsDown()    const { return m_aux1Down; }
+    bool Aux2IsDown()    const { return m_aux2Down; }
+
+    bool ButtonIsDown(wxMouseButton but) const
+    {
+        switch ( but )
+        {
+            case wxMOUSE_BTN_ANY:
+                return LeftIsDown() || MiddleIsDown() || RightIsDown() ||
+                            Aux1IsDown() || Aux2IsDown();
+
+            case wxMOUSE_BTN_LEFT:
+                return LeftIsDown();
+
+            case wxMOUSE_BTN_MIDDLE:
+                return MiddleIsDown();
+
+            case wxMOUSE_BTN_RIGHT:
+                return RightIsDown();
+
+            case wxMOUSE_BTN_AUX1:
+                return Aux1IsDown();
+
+            case wxMOUSE_BTN_AUX2:
+                return Aux2IsDown();
+
+            case wxMOUSE_BTN_NONE:
+            case wxMOUSE_BTN_MAX:
+                break;
+        }
+
+        wxFAIL_MSG(wxS("invalid parameter"));
+        return false;
+    }
+
 
     // these functions are mostly used by wxWidgets itself
     void SetX(wxCoord x) { m_x = x; }
     void SetY(wxCoord y) { m_y = y; }
+    void SetPosition(wxPoint pos) { m_x = pos.x, m_y = pos.y; }
 
     void SetLeftDown(bool down)   { m_leftDown = down; }
     void SetMiddleDown(bool down) { m_middleDown = down; }
@@ -55,7 +119,23 @@ public:
     void SetAux1Down(bool down)   { m_aux1Down = down; }
     void SetAux2Down(bool down)   { m_aux2Down = down; }
 
-private:
+    // this mostly makes sense in the derived classes such as wxMouseEvent
+    void SetState(const wxMouseState& state) { *this = state; }
+
+    // these functions are for compatibility only, they were used in 2.8
+    // version of wxMouseState but their names are confusing as wxMouseEvent
+    // has methods with the same names which do something quite different so
+    // don't use them any more
+#if WXWIN_COMPATIBILITY_2_8
+    wxDEPRECATED_INLINE(bool LeftDown() const, return LeftIsDown(); )
+    wxDEPRECATED_INLINE(bool MiddleDown() const, return MiddleIsDown(); )
+    wxDEPRECATED_INLINE(bool RightDown() const, return RightIsDown(); )
+#endif // WXWIN_COMPATIBILITY_2_8
+
+    // for compatibility reasons these variables are public as the code using
+    // wxMouseEvent often uses them directly -- however they should not be
+    // accessed directly in this class, use the accessors above instead
+// private:
     bool m_leftDown   : 1;
     bool m_middleDown : 1;
     bool m_rightDown  : 1;