javauis/eswt_qt/xlibutils/java/src/com/nokia/mj/impl/uitestutils/Key.java
branchRCL_3
changeset 65 ae942d28ec0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/xlibutils/java/src/com/nokia/mj/impl/uitestutils/Key.java	Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,245 @@
+package com.nokia.mj.impl.uitestutils;
+
+/**
+ * This class is used when sending emulated key events from automated test
+ * cases. hides the platform keycode specifities from the test cases. There
+ * might be an implementation of this class for different platforms enabling
+ * running of the same key input test cases on each platform. This
+ * implementation is for Xlib.
+ */
+public class Key {
+    
+    //
+    // LOGICAL KEY CODES 
+    //
+    
+    // Non unicode MIDP key codes, these are the correct values from MIDP spec. 
+    public static final  int UpArrow                     = -1; 
+    public static final  int DownArrow                   = -2;
+    public static final  int LeftArrow                   = -3;
+    public static final  int RightArrow                  = -4;
+    public static final  int Select                      = -5; // Middle softkey
+    public static final  int CBA1                        = -6; // Left softkey
+    public static final  int CBA2                        = -7; // Right softkey
+    public static final  int Clear                       = -8;    
+    public static final  int Send                        = -10; 
+    public static final  int End                         = -11;
+    public static final  int Applications                = -12;
+    public static final  int Voice                       = -13;
+    public static final  int ClockwiseRotate             = -16;
+    public static final  int CounterClockwiseRotate      = -17;
+    public static final  int ClockwiseFastRotate         = -18;
+    public static final  int CounterClockwiseFastRotate  = -19;
+    public static final  int PlayPause                   = -20;
+    public static final  int PreviousRew                 = -21;
+    public static final  int NextFF                      = -22;
+    public static final  int Stop                        = -23;
+    public static final  int Edit                        = -50;
+    public static final  int AAction                     = -51;
+    public static final  int BAction                     = -52;
+        
+    // Non unicode non MIDP key codes. These values are just made up and are not from any spec. 
+    public static final  int  Power                      = -100;
+    public static final  int  Backspace                  = -101;
+    public static final  int  GripOpen                   = -102;
+    public static final  int  GripClose                  = -103;
+    public static final  int  Camera                     = -104;
+    public static final  int  VolumeUp                   = -105;
+    public static final  int  VolumeDown                 = -106;
+    public static final  int  PageUp                     = -107;
+    public static final  int  PageDown                   = -108;
+    public static final  int  HomeKey                    = -109;
+    public static final  int  EndKey                     = -110;
+    // Activate key represents a key that will cause a "default selection" of an item. On Linux
+    // this is Enter, but on S60 it may be the same key as Select.
+    public static final  int  Activate                   = -111;
+    public static final  int  InsertKey                  = -112;
+    public static final  int  ReturnKey                  = -113;
+    public static final  int  DeleteKey                  = -114;
+    public static final  int  Escape                     = -115;
+    public static final  int  ControlRight               = -116;
+    public static final  int  ControlLeft                = -117;
+    public static final  int  ShiftRight                 = -118;
+    public static final  int  ShiftLeft                  = -119;
+    public static final  int  Multiply                   = -120;
+    public static final  int  Divide                     = -121;
+    public static final  int  Add                        = -122;
+    public static final  int  Subtract                   = -123;
+
+    public static final  int  Undefined                  = -121;
+    
+     // Map from logical key codes to Xlib key syms 
+    static int keycodes[] = {
+        UpArrow,
+        DownArrow,
+        LeftArrow,
+        RightArrow,
+        Select,
+        CBA1,
+        CBA2,
+        Clear,
+        Send,
+        End,
+        Applications,
+        Voice,
+        ClockwiseRotate,
+        CounterClockwiseRotate,
+        ClockwiseFastRotate,
+        CounterClockwiseFastRotate,
+        PlayPause,
+        PreviousRew,
+        NextFF,
+        Stop,
+        Edit,
+        AAction,
+        BAction,
+        Power,
+        Backspace,
+        GripOpen,
+        GripClose,
+        Camera,
+        VolumeUp,
+        VolumeDown,
+        PageUp,
+        PageDown,
+        HomeKey,
+        EndKey,
+        Activate,
+        InsertKey,
+        ReturnKey,
+        DeleteKey,
+        Escape,
+        ControlRight,
+        ControlLeft,
+        ShiftRight,
+        ShiftLeft,
+        Multiply,
+        Divide,
+        Add,
+        Subtract,
+        Undefined
+    };
+    static int keysyms[] = {
+        XlibKeys.XK_Up,         // UpArrow 
+        XlibKeys.XK_Down,       // DownArrow
+        XlibKeys.XK_Left,       // LeftArrow
+        XlibKeys.XK_Right,      // RightArrow
+        XlibKeys.XK_space,      // Select
+        0,                      // CBA1
+        0,                      // CBA2
+        XlibKeys.XK_Clear,      // Clear    
+        0,                      // Send 
+        0,                      // End
+        0,                      // Applications
+        0,                      // Voice
+        0,                      // ClockwiseRotate
+        0,                      // CounterClockwiseRotate
+        0,                      // ClockwiseFastRotate
+        0,                      // CounterClockwiseFastRotate
+        0,                      // PlayPause
+        0,                      // PreviousRew
+        0,                      // NextFF
+        0,                      // Stop
+        0,                      // Edit
+        0,                      // AAction
+        0,                      // BAction
+        0,                      // Power
+        XlibKeys.XK_BackSpace,  // Backspace
+        0,                      // GripOpen
+        0,                      // GripClose
+        0,                      // Camera
+        0,                      // VolumeUp
+        0,                      // VolumeDown
+        XlibKeys.XK_Page_Up,    // PageUp
+        XlibKeys.XK_Page_Down,  // PageDown
+        XlibKeys.XK_Home,       // HomeKey
+        XlibKeys.XK_End,        // EndKey
+        XlibKeys.XK_Return,     // Activate
+        XlibKeys.XK_Insert,     // InsertKey
+        XlibKeys.XK_Return,     // ReturnKey
+        XlibKeys.XK_Delete,     // DeleteKey
+        XlibKeys.XK_Escape,     // Esc
+        XlibKeys.XK_Control_R,  // ControlRight
+        XlibKeys.XK_Control_L,  // ControlLeft
+        XlibKeys.XK_Shift_R,    // ControlRight
+        XlibKeys.XK_Shift_L,    // ControlLeft
+        XlibKeys.XK_KP_Multiply, // Multiply
+        XlibKeys.XK_KP_Divide,  // Divide
+        XlibKeys.XK_KP_Add,     // Add
+        XlibKeys.XK_KP_Subtract, // Subtract
+        XlibKeys.XK_Return                       // Undefined
+    };
+    
+    protected int keysym(int code) {
+        for(int i = 0; i < keycodes.length; ++i) {
+            if(keycodes[i] == code) return keysyms[i];
+        }
+        return 0;
+    }
+    
+    /** Default constructor. Only here for compatibility with old test cases. */
+    public Key() {
+        this.keyCode = 0;
+    }
+    
+    /**
+     * Same as Key(int), only here for compatibility with old test cases.
+     * Scancode not used.
+     */
+    public Key(int keyCode, int scanCode) {
+        this(keyCode);
+    }
+        
+    /**
+     * Constructor accepting a character code or a logical key code defined
+     * above. E.g. to send a tab key pass '\t' here. To send an up arrow pass
+     * UpArrow.
+     * 
+     * @param key
+     *            A character code or a logical key code.
+     */
+    public Key(int key) {
+            
+        // Convert MIDP keyCodes to Xlib keycodes
+        if (key < 0) {
+            int keysym = keysym(key);
+            if(keysym != 0) {
+                keyCode = XlibUtils.XKeysymToKeycode(keysym);
+            }
+        } 
+        // Try using character code as the keysym (except the null character)
+        else {
+            // Try if it maps to latin1
+            keyCode = XlibUtils.XKeysymToKeycode(key);
+            
+            // If not latin1, try tty function keys
+            if((keyCode == 0) && ((0xff00 & keyCode) == 0)) {
+                keyCode = XlibUtils.XKeysymToKeycode(0xff00|key);
+            }
+            
+            // More attempts
+        } 
+        
+        if(keyCode == 0 && modifiers == 0) {
+            throw new IllegalArgumentException("Failed to map to any keycode: code=" + key + " char =" + (char)key);
+        }
+     }    
+    
+    /**
+     * Use constructor rather than setting directly, only public for
+     * compatibility with old test cases.
+     */
+    public int keyCode; 
+    
+    /**
+     * Not used for anything, only here for compatibility with old test cases.
+     */
+    public int scanCode; 
+    
+    /**
+     * Inclusive OR of modifiers. Will be sent with the key event.
+     * 
+     * @see com.nokia.mj.impl.uitestutils.Modifier
+     */
+    public int modifiers;
+}