X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a02a5cfcf33bb2c0edae246c1b19e286bf86d422..76015a6bb79156d8af1b5e8b4b8e46b4e192d18f:/src/common/uiactioncmn.cpp

diff --git a/src/common/uiactioncmn.cpp b/src/common/uiactioncmn.cpp
index 52747d1284..0df4aea34b 100644
--- a/src/common/uiactioncmn.cpp
+++ b/src/common/uiactioncmn.cpp
@@ -1,59 +1,149 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        src/common/uiactioncmn.cpp
 // Purpose:     wxUIActionSimulator common implementation
-// 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
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/wxprec.h"
 
-#include "wx/uiaction.h"
-
-wxUIActionSimulator::wxUIActionSimulator()
-{
-}
-
-wxUIActionSimulator::~wxUIActionSimulator()
-{
-}
+#if wxUSE_UIACTIONSIMULATOR
 
+#include "wx/uiaction.h"
 
-bool wxUIActionSimulator::MouseClick(int button) 
+bool wxUIActionSimulator::MouseClick(int button)
 {
     MouseDown(button);
     MouseUp(button);
-    
+
     return true;
 }
 
-bool wxUIActionSimulator::MouseDblClick(int button) 
+#ifndef __WXOSX__
+
+bool wxUIActionSimulator::MouseDblClick(int button)
 {
     MouseDown(button);
     MouseUp(button);
     MouseDown(button);
     MouseUp(button);
-    
+
     return true;
 }
 
-bool wxUIActionSimulator::MouseDragDrop(long x1, long y1, long x2, long y2, int button)
+bool wxUIActionSimulator::MouseDragDrop(long x1, long y1, long x2, long y2,
+                                   int button)
 {
     MouseMove(x1, y1);
     MouseDown(button);
-    MouseMove(x2, y2);    
+    MouseMove(x2, y2);
     MouseUp(button);
     
     return true;
 }
 
-bool  wxUIActionSimulator::Char(int keycode, bool shiftDown, bool cmdDown, bool altDown)
+#endif
+
+bool
+wxUIActionSimulator::Key(int keycode, int modifiers, bool isDown)
 {
-    Key(keycode, false, shiftDown, cmdDown, altDown);
-    Key(keycode, true, shiftDown, cmdDown, altDown);
-    
+    wxASSERT_MSG( (modifiers & wxMOD_ALTGR) != wxMOD_ALTGR,
+        "wxMOD_ALTGR is not implemented" );
+    wxASSERT_MSG( !(modifiers & wxMOD_META ),
+        "wxMOD_META is not implemented" );
+    wxASSERT_MSG( !(modifiers & wxMOD_WIN ),
+        "wxMOD_WIN is not implemented" );
+
+    if ( isDown )
+        SimulateModifiers(modifiers, true);
+
+    bool rc = DoKey(keycode, modifiers, isDown);
+
+    if ( !isDown )
+        SimulateModifiers(modifiers, false);
+
+    return rc;
+}
+
+void wxUIActionSimulator::SimulateModifiers(int modifiers, bool isDown)
+{
+    if ( modifiers & wxMOD_SHIFT )
+        DoKey(WXK_SHIFT, modifiers, isDown);
+    if ( modifiers & wxMOD_ALT )
+        DoKey(WXK_ALT, modifiers, isDown);
+    if ( modifiers & wxMOD_CONTROL )
+        DoKey(WXK_CONTROL, modifiers, isDown);
+}
+
+bool wxUIActionSimulator::Char(int keycode, int modifiers)
+{
+    switch(keycode)
+    {
+    case '0':
+        keycode = '0';
+        break;
+    case '1':
+        keycode = '1';
+        break;
+    case '2':
+        keycode = '2';
+        break;
+    case '3':
+        keycode = '3';
+        break;
+    case '4':
+        keycode = '4';
+        break;
+    case '5':
+        keycode = '5';
+        break;
+    case '6':
+        keycode = '6';
+        break;
+    case '7':
+        keycode = '7';
+        break;
+    case '8':
+        keycode = '8';
+        break;
+    case '9':
+        keycode = '9';
+        break;
+    case '+':
+        keycode = '+';
+        break;
+    case '-':
+        keycode = '-';
+        break;
+    case '.':
+        keycode = '.';
+        break;
+    default:
+        break;
+    };
+
+    Key(keycode, modifiers, true);
+    Key(keycode, modifiers, false);
+
+    return true;
+}
+
+bool wxUIActionSimulator::Text(const char *s)
+{
+    while ( *s != '\0' )
+    {
+        const char ch = *s++;
+        if ( !Char(ch, isupper(ch) ? wxMOD_SHIFT : 0) )
+            return false;
+    }
+
     return true;
-} 
+}
+
+#endif // wxUSE_UIACTIONSIMULATOR