diff -r 6c158198356e -r ae942d28ec0e javauis/eswt_qt/xlibutils/java/src/com/nokia/mj/impl/uitestutils/Key.java --- /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; +}