diff options
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/core/skin/AndroidPressKey.java')
-rw-r--r-- | src/plugins/emulator/src/com/motorola/studio/android/emulator/core/skin/AndroidPressKey.java | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/core/skin/AndroidPressKey.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/core/skin/AndroidPressKey.java new file mode 100644 index 0000000..e66bae0 --- /dev/null +++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/core/skin/AndroidPressKey.java @@ -0,0 +1,251 @@ +/* +* Copyright (C) 2012 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package com.motorola.studio.android.emulator.core.skin; + +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.StringTokenizer; + +import org.eclipse.swt.graphics.Rectangle; + +/** + * DESCRIPTION: + * This is a default implementation of the interface IAndroidEmulatorKey + * + * RESPONSIBILITY: + * - Provide an easy way to find the keys pressed during mouse interaction + * at skin + * - Provide means of retrieving the keysym associated with each key + * + * COLABORATORS: + * None. + * + * USAGE: + * Provide a coordinate to the isInsideKey methods to test if the coordinate + * is inside the key area + * Use the getKeysym of a key to retrieve the code that needs to be sent in a + * key event message to the server, informing that a key was pressed or released + */ +public class AndroidPressKey implements IAndroidKey +{ + // Constants used in the isFlipValid method + private static final int FLIP_SLIDE_OPENED_ONLY = 0; + + private static final int FLIP_SLIDE_CLOSED_ONLY = 1; + + private static final int FLIP_SLIDE_OPENED_AND_CLOSED = 2; + + /** + * Fields that can be found in an ordinary key.xml file + */ + private final String name; + + private final String toolTip; + + private final String keycode; + + + + private final Rectangle keyArea; + + private final int flipSlideEnabledCode; + + private final Collection<String> morphingModeCollection = new LinkedHashSet<String>(); + + /** + * Creates a new AndroidPressKey object. + * + * @param name The key name. This is usually a human readable skin, that + * provides key identification + * @param keycode The code that will be sent to server if the key is pressed + * @param toolTip The text that will be shown as the key tool tip. + * @param startx X coordinate of the upper left corner of the key + * @param starty Y coordinate of the upper left corner of the key + * @param endx X coordinate of the lower right corner of the key + * @param endy Y coordinate of the lower right corner of the key + * @param morphingModes A comma separated list of morphing modes to which this + * key applies, or null if not applicable + * @param flipenabled true if this key is valid in closed flip mode; + * false if the key is valid in opened flip mode + */ + public AndroidPressKey(String name, String keycode, String toolTip, int startx, int starty, + int endx, int endy, String morphingModes, int flipEnabledCode) + { + this(name, keycode, toolTip, new Rectangle(startx, starty, endx - startx, endy - starty), + morphingModes, flipEnabledCode); + } + + /** + * Creates a new AndroidPressKey object. + * + * @param name The key name. This is usually a human readable skin, that + * provides key identification + * @param keycode The code that will be sent to server if the key is pressed + * @param toolTip The text that will be shown as the key tool tip. + * @param key A rectangle that represents the key area at skin + * @param morphingModes A comma separated list of morphing modes to which this + * key applies, or null if not applicable + * @param flipenabled true if this key is valid in closed flip mode; + * false if the key is valid in opened flip mode + */ + public AndroidPressKey(String name, String keycode, String toolTip, Rectangle key, + String morphingModes, int flipEnabledCode) + { + this.name = name; + this.keycode = keycode; + this.toolTip = toolTip; + this.keyArea = key; + this.flipSlideEnabledCode = flipEnabledCode; + + if (morphingModes != null) + { + StringTokenizer st = new StringTokenizer(morphingModes, ","); + String token; + + while (st.hasMoreTokens()) + { + token = st.nextToken(); + morphingModeCollection.add(token); + } + } + } + + /** + * @see IAndroidKey#getKeysym() + */ + public String getKeysym() + { + return keycode; + } + + /** + * @see IAndroidKey#isInsideKey(int, int) + */ + public boolean isInsideKey(int x, int y) + { + return keyArea.contains(x, y); + } + + /** + * Retrieves the X coordinate of the lower right corner of the key + * + * @return X coordinate of the lower right corner of the key + */ + public int getEndx() + { + return keyArea.x + keyArea.width; + } + + /** + * Retrieves the Y coordinate of the lower right corner of the key + * + * @return Y coordinate of the lower right corner of the key + */ + public int getEndy() + { + return keyArea.y + keyArea.height; + } + + /** + * Tests if the key is valid in the current flip/slide mode + * + * @param isFlipSlideClosed True if the flip/slide is currently closed + * False if the flip/slide is currently opened + * + * @return true if the key is valid in the current flip/slide mode; false otherwise + */ + public boolean isFlipSlideValid(boolean isFlipSlideClosed) + { + boolean flipSlideValid = false; + + if ((flipSlideEnabledCode == FLIP_SLIDE_OPENED_AND_CLOSED) + || (isFlipSlideClosed && (flipSlideEnabledCode == FLIP_SLIDE_CLOSED_ONLY)) + || (!isFlipSlideClosed && (flipSlideEnabledCode == FLIP_SLIDE_OPENED_ONLY))) + { + flipSlideValid = true; + } + + return flipSlideValid; + } + + /** + * Retrieves the key name + * + * @return The key name + */ + public String getName() + { + return name; + } + + /** + * Retrieves the tool tip text of the key. + * + * @return The tool tip text of the key. + */ + public String getToolTip() + { + return toolTip; + } + + /** + * Retrieves the X coordinate of the upper left corner of the key + * + * @return X coordinate of the upper left corner of the key + */ + public int getStartx() + { + return keyArea.x; + } + + /** + * Retrieves the Y coordinate of the upper left corner of the key + * + * @return Y coordinate of the upper left corner of the key + */ + public int getStarty() + { + return keyArea.y; + } + + /** + * Retrieves a rectangle that represents the key area at skin + * + * @return A rectangle that represents the key area at skin + */ + public Rectangle getKeyArea() + { + return keyArea; + } + + /** + * Tests if the key applies to the provided morphing mode + * + * @param morphingMode The morphing mode name + * @return true if the key applies to the morphing mode; false otherwise + */ + public boolean hasMorphingMode(String morphingMode) + { + if (morphingMode != null) + { + return morphingModeCollection.contains(morphingMode); + } + else + { + return false; + } + } +} |