Add wxUSE_UIACTIONSIMULATOR and turn it off by default.

Disable the recently added wxUIActionSimulator class until the issues with it
mentioned at http://article.gmane.org/gmane.comp.lib.wxwidgets.devel/119792/
are fixed.

Also use "" around wx headers instead of <> in wx code itself.

See #11801.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63736 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-03-22 11:40:35 +00:00
parent 75738bb65b
commit 9b7e022676
19 changed files with 222 additions and 89 deletions

53
configure vendored
View File

@@ -1883,6 +1883,7 @@ Optional Features:
--enable-metafiles use wxMetaFile (Win32 only)
--enable-dragimage use wxDragImage
--enable-accessibility enable accessibility support
--enable-uiactionsim use wxUIActionSimulator (experimental)
--enable-palette use wxPalette class
--enable-image use wxImage class
--enable-gif use gif images (GIF file format)
@@ -2969,6 +2970,7 @@ DEFAULT_wxUSE_LIBSDL=no
DEFAULT_wxUSE_ACCESSIBILITY=no
DEFAULT_wxUSE_IPV6=no
DEFAULT_wxUSE_GSTREAMER8=no
DEFAULT_wxUSE_UIACTIONSIMULATOR=no
DEFAULT_wxUSE_UNICODE_UTF8=auto
DEFAULT_wxUSE_OPENGL=auto
@@ -13557,6 +13559,50 @@ fi
echo "${ECHO_T}$result" >&6; }
enablestring=
defaultval=$wxUSE_ALL_FEATURES
if test -z "$defaultval"; then
if test x"$enablestring" = xdisable; then
defaultval=yes
else
defaultval=no
fi
fi
{ echo "$as_me:$LINENO: checking for --${enablestring:-enable}-uiactionsim" >&5
echo $ECHO_N "checking for --${enablestring:-enable}-uiactionsim... $ECHO_C" >&6; }
# Check whether --enable-uiactionsim was given.
if test "${enable_uiactionsim+set}" = set; then
enableval=$enable_uiactionsim;
if test "$enableval" = yes; then
wx_cv_use_uiactionsim='wxUSE_UIACTIONSIMULATOR=yes'
else
wx_cv_use_uiactionsim='wxUSE_UIACTIONSIMULATOR=no'
fi
else
wx_cv_use_uiactionsim='wxUSE_UIACTIONSIMULATOR=${'DEFAULT_wxUSE_UIACTIONSIMULATOR":-$defaultval}"
fi
eval "$wx_cv_use_uiactionsim"
if test x"$enablestring" = xdisable; then
if test $wxUSE_UIACTIONSIMULATOR = no; then
result=yes
else
result=no
fi
else
result=$wxUSE_UIACTIONSIMULATOR
fi
{ echo "$as_me:$LINENO: result: $result" >&5
echo "${ECHO_T}$result" >&6; }
enablestring=
@@ -46306,6 +46352,13 @@ _ACEOF
fi
if test "$wxUSE_UIACTIONSIMULATOR" = "yes" ; then
cat >>confdefs.h <<\_ACEOF
#define wxUSE_UIACTIONSIMULATOR 1
_ACEOF
fi
USES_CONTROLS=0
if test "$wxUSE_CONTROLS" = "yes"; then

View File

@@ -387,6 +387,7 @@ dnl features disabled by default
DEFAULT_wxUSE_ACCESSIBILITY=no
DEFAULT_wxUSE_IPV6=no
DEFAULT_wxUSE_GSTREAMER8=no
DEFAULT_wxUSE_UIACTIONSIMULATOR=no
dnl automatic features
DEFAULT_wxUSE_UNICODE_UTF8=auto
@@ -1013,6 +1014,7 @@ WX_ARG_FEATURE(joystick, [ --enable-joystick use wxJoystick], wxUSE_JO
WX_ARG_FEATURE(metafile, [ --enable-metafiles use wxMetaFile (Win32 only)], wxUSE_METAFILE)
WX_ARG_FEATURE(dragimage, [ --enable-dragimage use wxDragImage], wxUSE_DRAGIMAGE)
WX_ARG_FEATURE(accessibility,[ --enable-accessibility enable accessibility support], wxUSE_ACCESSIBILITY)
WX_ARG_FEATURE(uiactionsim, [ --enable-uiactionsim use wxUIActionSimulator (experimental)], wxUSE_UIACTIONSIMULATOR)
dnl ---------------------------------------------------------------------------
dnl support for image formats that do not rely on external library
@@ -6719,6 +6721,10 @@ if test "$wxUSE_MOUSEWHEEL" = "yes" ; then
AC_DEFINE(wxUSE_MOUSEWHEEL)
fi
if test "$wxUSE_UIACTIONSIMULATOR" = "yes" ; then
AC_DEFINE(wxUSE_UIACTIONSIMULATOR)
fi
dnl ---------------------------------------------------------------------------
dnl GUI controls
dnl ---------------------------------------------------------------------------

View File

@@ -1065,6 +1065,14 @@
# endif
#endif /* !defined(wxUSE_TREECTRL) */
#ifndef wxUSE_UIACTIONSIMULATOR
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_UIACTIONSIMULATOR must be defined, please read comment near the top of this file."
# else
# define wxUSE_UIACTIONSIMULATOR 0
# endif
#endif /* !defined(wxUSE_UIACTIONSIMULATOR) */
#ifndef wxUSE_VALIDATORS
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_VALIDATORS must be defined, please read comment near the top of this file."

View File

@@ -1214,6 +1214,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -1214,6 +1214,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -1214,6 +1214,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -1214,6 +1214,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -1215,6 +1215,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -1214,6 +1214,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -1210,6 +1210,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -9,19 +9,22 @@
// 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/event.h"
#include "wx/dynarray.h"
class WXDLLIMPEXP_CORE wxUIActionSimulator
{
public:
wxUIActionSimulator();
~wxUIActionSimulator();
// Mouse related
bool MouseMove(long x, long y);
bool MouseDown(int button = wxMOUSE_BTN_LEFT);
@@ -29,23 +32,25 @@ public:
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.
// 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);
};
#endif
#endif // wxUSE_UIACTIONSIMULATOR
#endif // _WX_UIACTIONSIMULATOR_H_

View File

@@ -1213,6 +1213,11 @@
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
// Compile wxUIActionSimulator class?
//
// This is experimental code subject to change. It's not fully implemented yet.
#define wxUSE_UIACTIONSIMULATOR 0
// ----------------------------------------------------------------------------
// wxDC classes for various output formats
// ----------------------------------------------------------------------------

View File

@@ -10,18 +10,22 @@
@class wxUIActionSimulator
wxUIActionSimulator is a class used to simulate user interface actions
such as a mouse click or a key press.
such as a mouse click or a key press.
@note that this class is currently experimental and disabled by default,
you must set @c wxUSE_UIACTIONSIMULATOR to 1 in your setup.h file or use
configure @c --enable-uiactionsim option to enable it.
Common usages for this class would be to provide playback and record (aka macro recording)
functionality for users, or to drive unit tests by simulating user sessions.
See the uiaction sample for example usage of this class.
NOTE: For keyboard operations, currently you must pass the keycode of the actual
key on the keyboard. To simulate, e.g. IME actions, you'd need to simulate the actual
keypresses needed to active the IME, then the keypresses needed to type and select
the desired character.
@library{wxcore}
*/
@@ -33,43 +37,43 @@ class wxUIActionSimulator
*/
wxUIActionSimulator();
~wxUIActionSimulator();
/**
Move the mouse to the specified coordinates.
@param x
x coordinate to move to, in screen coordinates.
@param y
y coordinate to move to, in screen coordinates.
*/
bool MouseMove(long x, long y);
/**
Press a mouse button.
@param button
Button to press. Valid constants are wxMOUSE_BTN_LEFT, wxMOUSE_BTN_MIDDLE, and wxMOUSE_BTN_RIGHT.
*/
bool MouseDown(int button = wxMOUSE_BTN_LEFT);
/**
Release a mouse button.
@param button
Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants.
*/
bool MouseUp(int button = wxMOUSE_BTN_LEFT);
/**
Click a mouse button.
@param button
Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants.
*/
bool MouseClick(int button = wxMOUSE_BTN_LEFT);
/**
Double-click a mouse button.
@param button
Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants.
*/
@@ -77,70 +81,70 @@ class wxUIActionSimulator
/**
Perform a drag and drop operation.
@param x1
x start coordinate, in screen coordinates.
@param y1
y start coordinate, in screen coordinates.
@param x2
x desintation coordinate, in screen coordinates.
@param y2
y destination coordinate, in screen coordinates.
@param button
Button to press. See wxUIActionSimulator::MouseDown for a list of valid constants.
*/
bool MouseDragDrop(long x1, long y1, long x2, long y2, int button = wxMOUSE_BTN_LEFT);
/**
Press a key.
Press a key.
@param keycode
key to operate on, as an integer.
@param shiftDown
true if the shift key should be pressed, false otherwise.
@param cmdDown
true if the cmd key should be pressed, false otherwise.
@param altDown
true if the alt key should be pressed, false otherwise.
*/
bool KeyDown(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false);
/**
Release a key.
Release a key.
@param keycode
key to operate on, as an integer.
@param shiftDown
true if the shift key should be pressed, false otherwise.
@param cmdDown
true if the cmd key should be pressed, false otherwise.
@param altDown
true if the alt key should be pressed, false otherwise.
*/
bool KeyUp(int keycode, bool shiftDown=false, bool cmdDown=false, bool altDown=false);
/**
Press and release a key.
Press and release a key.
@param keycode
key to operate on, as an integer.
@param shiftDown
true if the shift key should be pressed, false otherwise.
@param cmdDown
true if the cmd key should be pressed, false otherwise.
@param altDown
true if the alt key should be pressed, false otherwise.
*/

View File

@@ -24,6 +24,8 @@
#pragma hdrstop
#endif
#if wxUSE_UIACTIONSIMULATOR
// for all others, include the necessary headers (this file is usually all you
// need because it includes almost all "standard" wxWidgets headers)
#ifndef WX_PRECOMP
@@ -164,3 +166,5 @@ void MyFrame::OnButtonPressed(wxCommandEvent&)
{
m_buttonPressed = true;
}
#endif // wxUSE_UIACTIONSIMULATOR

View File

@@ -520,6 +520,8 @@
#define wxUSE_MOUSEWHEEL 0
#define wxUSE_UIACTIONSIMULATOR 0
#define wxUSE_POSTSCRIPT 0

View File

@@ -11,6 +11,8 @@
#include "wx/wxprec.h"
#if wxUSE_UIACTIONSIMULATOR
#include "wx/uiaction.h"
wxUIActionSimulator::wxUIActionSimulator()
@@ -22,21 +24,21 @@ wxUIActionSimulator::~wxUIActionSimulator()
}
bool wxUIActionSimulator::MouseClick(int button)
bool wxUIActionSimulator::MouseClick(int button)
{
MouseDown(button);
MouseUp(button);
return true;
}
bool wxUIActionSimulator::MouseDblClick(int button)
bool wxUIActionSimulator::MouseDblClick(int button)
{
MouseDown(button);
MouseUp(button);
MouseDown(button);
MouseUp(button);
return true;
}
@@ -44,9 +46,9 @@ bool wxUIActionSimulator::MouseDragDrop(long x1, long y1, long x2, long y2, int
{
MouseMove(x1, y1);
MouseDown(button);
MouseMove(x2, y2);
MouseMove(x2, y2);
MouseUp(button);
return true;
}
@@ -54,6 +56,8 @@ bool wxUIActionSimulator::Char(int keycode, bool shiftDown, bool cmdDown, bool
{
Key(keycode, false, shiftDown, cmdDown, altDown);
Key(keycode, true, shiftDown, cmdDown, altDown);
return true;
}
}
#endif // wxUSE_UIACTIONSIMULATOR

View File

@@ -11,13 +11,11 @@
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/defs.h"
#endif
#if wxUSE_UIACTIONSIMULATOR
#include "wx/uiaction.h"
#include <windows.h>
#include "wx/msw/wrapwin.h"
DWORD EventTypeForMouseButton(int button, bool isDown)
{
@@ -38,7 +36,7 @@ DWORD EventTypeForMouseButton(int button, bool isDown)
return MOUSEEVENTF_MIDDLEDOWN;
else
return MOUSEEVENTF_MIDDLEUP;
default:
wxFAIL_MSG("Unsupported button passed in.");
return -1;
@@ -54,7 +52,7 @@ bool wxUIActionSimulator::MouseDown(int button)
}
bool wxUIActionSimulator::MouseMove(long x, long y)
{
{
mouse_event(MOUSEEVENTF_MOVE, x, y, 0, 0);
return true;
}
@@ -76,3 +74,4 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool shiftDown, bool cmd
return true;
}
#endif // wxUSE_UIACTIONSIMULATOR

View File

@@ -9,8 +9,11 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include <wx/defs.h>
#include <wx/uiaction.h>
#include "wx/defs.h"
#if wxUSE_UIACTIONSIMULATOR
#include "wx/uiaction.h"
#include <ApplicationServices/ApplicationServices.h>
@@ -30,9 +33,9 @@ CGEventType CGEventTypeForMouseButton(int button, bool isDown)
return kCGEventRightMouseDown;
else
return kCGEventRightMouseUp;
// Apparently all other buttons use the constant OtherMouseDown
// Apparently all other buttons use the constant OtherMouseDown
default:
if (isDown)
return kCGEventOtherMouseDown;
@@ -55,13 +58,13 @@ bool wxUIActionSimulator::MouseDown(int button)
{
CGPoint pos;
int x, y;
wxGetMousePosition(&x, &y);
wxGetMousePosition(&x, &y);
pos.x = x;
pos.y = y;
CGEventType type = CGEventTypeForMouseButton(button, true);
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, button);
CGEventSetType(event, type);
if (event)
{
CGEventPost(tap, event);
@@ -78,13 +81,13 @@ bool wxUIActionSimulator::MouseMove(long x, long y)
CGEventType type = kCGEventMouseMoved;
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, kCGMouseButtonLeft);
CGEventSetType(event, type);
if (event)
{
CGEventPost(tap, event);
}
CFRelease(event);
return true;
}
@@ -92,13 +95,13 @@ bool wxUIActionSimulator::MouseUp(int button)
{
CGPoint pos;
int x, y;
wxGetMousePosition(&x, &y);
wxGetMousePosition(&x, &y);
pos.x = x;
pos.y = y;
CGEventType type = CGEventTypeForMouseButton(button, false);
CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, button);
CGEventSetType(event, type);
if (event)
{
CGEventPost(tap, event);
@@ -125,8 +128,9 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool shiftDown, bool cmd
SendCharCode((CGCharCode)58, false);
if (cmdDown)
SendCharCode((CGCharCode)55, false);
return true;
}
#endif // wxUSE_UIACTIONSIMULATOR

View File

@@ -9,8 +9,11 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include <wx/defs.h>
#include <wx/uiaction.h>
#include "wx/defs.h"
#if wxUSE_UIACTIONSIMULATOR
#include "wx/uiaction.h"
#include <X11/Xlib.h>
#include <X11/Xutil.h>
@@ -35,12 +38,12 @@ void SendButtonEvent(int button, bool isDown)
}
XEvent event;
Display *display = XOpenDisplay(0);
wxASSERT_MSG(display, "No display available!");
memset(&event, 0x00, sizeof(event));
if (isDown)
event.type = ButtonPress;
else
@@ -48,16 +51,16 @@ void SendButtonEvent(int button, bool isDown)
event.xbutton.button = xbutton;
event.xbutton.same_screen = True;
XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
event.xbutton.subwindow = event.xbutton.window;
while (event.xbutton.subwindow)
{
event.xbutton.window = event.xbutton.subwindow;
XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
}
XSendEvent(display, PointerWindow, True, 0xfff, &event);
XFlush(display);
XCloseDisplay(display);
@@ -70,7 +73,7 @@ bool wxUIActionSimulator::MouseDown(int button)
}
bool wxUIActionSimulator::MouseMove(long x, long y)
{
{
Display *display = XOpenDisplay(0);
wxASSERT_MSG(display, "No display available!");
Window root = DefaultRootWindow(display);
@@ -90,11 +93,11 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool WXUNUSED(shiftDown)
{
Display *display = XOpenDisplay(0);
wxASSERT_MSG(display, "No display available!");
XKeyEvent event;
int mask = 0xfff;
memset(&event, 0x00, sizeof(event));
if (isDown) {
event.type = KeyPress;
mask = KeyPressMask;
@@ -104,16 +107,16 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool WXUNUSED(shiftDown)
mask = KeyReleaseMask;
}
event.same_screen = True;
XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.root, &event.window, &event.x_root, &event.y_root, &event.x, &event.y, &event.state);
event.subwindow = event.window;
while (event.subwindow)
{
event.window = event.subwindow;
XQueryPointer(display, event.window, &event.root, &event.subwindow, &event.x_root, &event.y_root, &event.x, &event.y, &event.state);
}
XSendEvent(display, PointerWindow, True, mask, (XEvent*) &event);
XFlush(display);
XCloseDisplay(display);
@@ -121,3 +124,4 @@ bool wxUIActionSimulator::Key(int keycode, bool isDown, bool WXUNUSED(shiftDown)
return true;
}
#endif // wxUSE_UIACTIONSIMULATOR