/////////////////////////////////////////////////////////////////////////////
-// Name: include/wx/uiaction.cpp
+// Name: wx/uiaction.h
// Purpose: wxUIActionSimulator interface
-// Author: Kevin Ollivier
+// Author: Kevin Ollivier, Steven Lamerton, Vadim Zeitlin
// Modified by:
// Created: 2010-03-06
-// RCS-ID: $Id: menu.cpp 54129 2008-06-11 19:30:52Z SC $
+// RCS-ID: $Id$
// Copyright: (c) Kevin Ollivier
+// (c) 2010 Steven Lamerton
+// (c) 2010 Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifndef _UIACTIONSIMULATOR_H_
-#define _UIACTIONSIMULATOR_H_
+#ifndef _WX_UIACTIONSIMULATOR_H_
+#define _WX_UIACTIONSIMULATOR_H_
-#include <wx/defs.h>
-#include <wx/event.h>
-#include <wx/dynarray.h>
+#include "wx/defs.h"
+
+#if wxUSE_UIACTIONSIMULATOR
+
+#include "wx/mousestate.h" // for wxMOUSE_BTN_XXX constants
class WXDLLIMPEXP_CORE wxUIActionSimulator
{
public:
- wxUIActionSimulator();
- ~wxUIActionSimulator();
-
- // Mouse related
- bool MouseMove(long x, long y);
- bool MouseDown(int button = wxMOUSE_BTN_LEFT);
- bool MouseUp(int button = wxMOUSE_BTN_LEFT);
- bool MouseClick(int button = wxMOUSE_BTN_LEFT);
- bool MouseDblClick(int button = wxMOUSE_BTN_LEFT);
- bool MouseDragDrop(long x1, long y1, long x2, long y2, int button = wxMOUSE_BTN_LEFT);
-
- // Keyboard related:
-
- bool KeyDown(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false)
- { return Key(keycode, true, shiftDown, cmdDown, altDown); }
-
- bool KeyUp(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false)
- { return Key(keycode, false, shiftDown, cmdDown, altDown); }
-
- bool Char(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false);
-
-protected:
- // Implementation-wise, since key events take more code to set up on GTK and Mac, it makes
- // sense to handle both key down and key up in one method. However, I wanted the API for pressing
- // and releasing the mouse and keyboard to be consistent, and I don't really like using a bool
- // for pressed state, so I'm leaving this as an implementation detail.
- bool Key(int keycode, bool isDown=true, bool shiftDown=false, bool cmdDown=false, bool altDown=false);
+ wxUIActionSimulator() { }
+
+
+ // Default dtor, copy ctor and assignment operator are ok (even though the
+ // last two don't make much sense for this class).
+
+
+ // Mouse simulation
+ // ----------------
+
+ // Low level methods
+ bool MouseMove(long x, long y);
+ bool MouseMove(const wxPoint& point) { return MouseMove(point.x, point.y); }
+
+ bool MouseDown(int button = wxMOUSE_BTN_LEFT);
+ bool MouseUp(int button = wxMOUSE_BTN_LEFT);
+
+ // Higher level interface, use it if possible instead
+ bool MouseClick(int button = wxMOUSE_BTN_LEFT);
+ bool MouseDblClick(int button = wxMOUSE_BTN_LEFT);
+ bool MouseDragDrop(long x1, long y1, long x2, long y2,
+ int button = wxMOUSE_BTN_LEFT);
+ bool MouseDragDrop(const wxPoint& p1, const wxPoint& p2,
+ int button = wxMOUSE_BTN_LEFT)
+ { return MouseDragDrop(p1.x, p1.y, p2.x, p2.y, button); }
+
+ // Keyboard simulation
+ // -------------------
+
+ // Low level methods for generating key presses and releases
+ bool KeyDown(int keycode, int modifiers = wxMOD_NONE)
+ { return Key(keycode, modifiers, true); }
+
+ bool KeyUp(int keycode, int modifiers = wxMOD_NONE)
+ { return Key(keycode, modifiers, false); }
+
+ // Higher level methods for generating both the key press and release for a
+ // single key or for all characters in the ASCII string "text" which can currently
+ // contain letters, digits and characters for the definition of numbers [+-., ].
+ bool Char(int keycode, int modifiers = wxMOD_NONE);
+
+ bool Text(const char *text);
+
+private:
+ // This is the common part of Key{Down,Up}() methods: while we keep them
+ // separate at public API level for consistency with Mouse{Down,Up}(), at
+ // implementation level it makes more sense to have them in a single
+ // function.
+ //
+ // It calls DoModifiers() to simulate pressing the modifier keys if
+ // necessary and then DoKey() for the key itself.
+ bool Key(int keycode, int modifiers, bool isDown);
+
+ // Call DoKey() for all modifier keys whose bits are set in the parameter.
+ void SimulateModifiers(int modifier, bool isDown);
+
+
+ // The low-level port-specific function which really generates the key
+ // presses. It should generate exactly one key event with the given
+ // parameters.
+ bool DoKey(int keycode, int modifiers, bool isDown);
};
-#endif
+#endif // wxUSE_UIACTIONSIMULATOR
+
+#endif // _WX_UIACTIONSIMULATOR_H_