summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/core/skin/AndroidPressKey.java
diff options
context:
space:
mode:
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.java251
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;
+ }
+ }
+}