javauis/nokiauiapi_qt/javasrc_j2me/com/nokia/mid/ui/TactileFeedback.java
author hgs
Fri, 29 Oct 2010 11:49:32 +0300
changeset 87 1627c337e51e
parent 78 71ad690e91f5
permissions -rw-r--r--
v2.2.21_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     1
/*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     3
* All rights reserved.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     8
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    11
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    12
* Contributors:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    13
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    14
* Description:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    15
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    16
*/
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    17
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    18
package com.nokia.mid.ui;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    19
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    20
import org.eclipse.swt.widgets.Internal_PackageSupport;
78
71ad690e91f5 v2.2.17_1
hgs
parents: 72
diff changeset
    21
import com.nokia.mj.impl.nokiauiapi.OS;
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    22
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    23
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    24
/**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    25
 * This class is a Java extension to support tactile feedback (audio, vibra,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    26
 * piezo, etc.) on touch-enabled devices. Tactile feedback is meant to give user
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    27
 * more clear feeling of touch events, like tapping and dragging. The actual
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    28
 * physical tactile feedback depends on the device tactile feedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    29
 * implementation, hardware and device settings. A device may implement the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    30
 * feedback with different hardware methods, for example, vibra, audio or piezo
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    31
 * hardware.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    32
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    33
 * The API supports both LCDUI and eSWT UI toolkits.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    34
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    35
 * Using this class is safe when a device does not support tactile feedback. In
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    36
 * this case methods of this class can be called but this has no effect.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    37
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    38
 * Tactile feedback can be generated in two ways:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    39
 * <ul>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    40
 * <li>By producing direct feedback from the application.</li>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    41
 * <li>By adding feedback areas to area registry, in which case the feedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    42
 * will be produced by the tactile feedback system automatically when the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    43
 * defined screen area (with defined feedback) is touched.</li>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    44
 * </ul>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    45
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    46
 * Direct feedback is given instantly with {@link #directFeedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    47
 * directFeedback} specifying the feedback type. Direct feedback can be used
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    48
 * when the user action is not just a tap in a certain area. For example if the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    49
 * user drags from one menu item to the other the application may give direct
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    50
 * feedback to emphasize focus traverse.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    51
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    52
 * In case of area registry for eSWT Control, the registry needs to be updated
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    53
 * every time when the size or position of a UI component changes, or when e.g.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    54
 * a state of a UI component changes in such way that feedback type also
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    55
 * changes. Typically the area update may be implemented in
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    56
 * <code>controlMoved</code> and <code>controlResized</code> methods of
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    57
 * <code>ControlListener</code> interface.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    58
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    59
 * In case of area registry for LCDUI Canvas or CustomItem no further actions
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    60
 * are required to update tactile feedback areas when a CustomItem is moved in a
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    61
 * Form or when a Canvas is changed due to e.g. orientation switch.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    62
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    63
 * There are quite tight latency requirements for tactile feedback, and in most
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    64
 * cases feedback should be triggered in less than 30ms from the time when user
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    65
 * touched the screen. For the area registry the feedback system is responsible
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    66
 * of fulfilling this requirement, but in case of direct feedback it is the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    67
 * responsibility of the user of this API.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    68
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    69
 * The tactile feedback has 2 different styles: Basic and Sensitive. Each type
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    70
 * is defined in the device settings, not by this API. Each style of feedback is
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    71
 * used in different cases. Typically Basic style is used to emphasize the tap
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    72
 * event, while Sensitive style is used mostly at dragging operations, to
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    73
 * emphasize focus traverse, text selection, etc. Choosing a specific style for
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    74
 * each use case in up to developer, however it is good to follow the behavior
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    75
 * of native applications.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    76
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    77
 * The goal of the API is to enable user-created UI components to have tactile
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    78
 * feedback. The UI component types supported by the API are limited to
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    79
 * user-defined components only: <code>javax.microedition.lcdui.Canvas</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    80
 * <code>javax.microedition.lcdui.CustomItem</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    81
 * <code>org.eclipse.swt.widgets.Control</code>. Other UI components (i.e. List,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    82
 * TextBox, etc.) get default tactile feedback automatically from the platform.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    83
 *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    84
 * @version 0.001
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    85
 * @since 1.2
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    86
 */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    87
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    88
public class TactileFeedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    89
{
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    90
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    91
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    92
     * Constant for specifying basic tactile feedback style. Actual style
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    93
     * behaviour is set through device settings.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    94
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    95
    public static final int FEEDBACK_STYLE_BASIC = 1;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    96
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    97
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    98
     * Constant for specifying sensitive tactile feedback style. Actual style
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    99
     * behaviour is set through device settings.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   100
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   101
    public static final int FEEDBACK_STYLE_SENSITIVE = 2;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   102
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   103
    private static final String MSG_INVALID_FEEDBACK_STYLE = "Invalid feedback style specified";
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   104
    private static final String MSG_INVALID_OBJECT_TYPE = "Invalid object provided for tactile feedback registration";
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   105
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   106
    private static final int TYPE_INVALID = 0;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   107
    private static final int TYPE_ESWT = 1;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   108
    private static final int TYPE_LCDUI = 2;
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   109
    private volatile boolean feedbackEnabled;
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   110
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   111
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   112
     * Constructs tactile feedback engine object. The object may be used in both
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   113
     * LCDUI and eSWT java UI toolkits. TactileFeedback object must be
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   114
     * constructed before using any tactile feedback methods.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   115
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   116
    public TactileFeedback()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   117
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   118
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   119
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   120
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   121
     * Triggers direct tactile feedback of the specified style.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   122
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   123
     * @param style
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   124
     *            The style of the direct feedback. Use predefined values
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   125
     *            FEEDBACK_STYLE_BASIC, FEEDBACK_STYLE_SENSITIVE. Actual style
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   126
     *            behavior is set through device settings.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   127
     * @throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   128
     *             if the style parameter has invalid type.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   129
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   130
    public void directFeedback(int style) throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   131
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   132
        if ((style != FEEDBACK_STYLE_BASIC)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   133
                && (style != FEEDBACK_STYLE_SENSITIVE))
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   134
            throw new IllegalArgumentException(MSG_INVALID_FEEDBACK_STYLE);
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   135
        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   136
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   137
            final int fStyle = style;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   138
            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   139
            .eSWTUIThreadRunnerSyncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   140
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   141
                public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   142
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   143
                    OS.MTouchFeedback_InstantFeedback(fStyle);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   144
                }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   145
            });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   146
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   147
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   148
        else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   149
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   150
            OS.MTouchFeedback_InstantFeedback(style);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   151
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   152
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   153
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   154
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   155
     * Queries the device if it supports tactile feedback. It is safe to use
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   156
     * this class even if the device does not support tactile feedback. Methods
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   157
     * of this class can be called but this has no effect.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   158
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   159
     * @return true if the device supports tactile feedback, false otherwise.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   160
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   161
    public boolean isTouchFeedbackSupported()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   162
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   163
        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   164
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   165
            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   166
            .eSWTUIThreadRunnerSyncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   167
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   168
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   169
                public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   170
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   171
                    feedbackEnabled = OS
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   172
                                      .MTouchFeedback_TouchFeedbackSupported();
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   173
                }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   174
            });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   175
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   176
        else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   177
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   178
            feedbackEnabled = OS.MTouchFeedback_TouchFeedbackSupported();
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   179
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   180
        return feedbackEnabled;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   181
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   182
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   183
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   184
     * Registers area within a UI component for tactile feedback. If areas
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   185
     * overlap then the feedback is given from the last registered area.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   186
     * {@link #moveFeedbackAreaToFirstPriority moveFeedbackAreaToFirstPriority}
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   187
     * can be used to bring a certain area covered by another area into action.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   188
     * If an area with specified <code>id</code> is already registered it is
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   189
     * updated. When updating an existing area there is no need to unregister it
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   190
     * before re-registering again with new coordinates and/or feedback style.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   191
     * The area specified by <code>x</code>, <code>y</code>, <code>width</code>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   192
     * and <code>height</code> parameters may be located on the screen just
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   193
     * partially.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   194
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   195
     * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   196
     * In case of area registry for eSWT Control, the registry needs to be
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   197
     * updated every time when the size or position of a UI component changes,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   198
     * or when e.g. a state of a UI component changes in such way that feedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   199
     * type also changes. Typically the area update may be implemented in
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   200
     * <code>controlMoved</code> and <code>controlResized</code> methods of
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   201
     * <code>ControlListener</code> interface. The update of an area may be
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   202
     * implemented by calling registerFeedbackArea with the same area id but new
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   203
     * coordinates and/or feedback style.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   204
     * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   205
     * In case of area registry for LCDUI Canvas or CustomItem no further
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   206
     * actions are required to update tactile feedback areas when a CustomItem
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   207
     * is moved in a Form or when a Canvas is changed due to e.g. orientation
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   208
     * switch.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   209
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   210
     * @param uiObject
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   211
     *            The UI component for tactile feedback registration. Valid
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   212
     *            object types are: <code>javax.microedition.lcdui.Canvas</code>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   213
     *            , <code>javax.microedition.lcdui.CustomItem</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   214
     *            <code>org.eclipse.swt.widgets.Control</code>.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   215
     * @param id
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   216
     *            Id of the new tactile feedback area to be registered. Id's are
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   217
     *            used to identify particular tactile feedback area within one
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   218
     *            UI component. Id's do not need to be consecutive numbers.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   219
     * @param x
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   220
     *            x-coordinate of the top-left corner of tactile feedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   221
     *            rectangle to register.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   222
     * @param y
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   223
     *            y-coordinate of the top-left corner of tactile feedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   224
     *            rectangle to register.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   225
     * @param width
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   226
     *            Width of tactile feedback rectangle to register.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   227
     * @param height
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   228
     *            Height of tactile feedback rectangle to register.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   229
     * @param style
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   230
     *            The style of the feedback for specified area. Use predefined
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   231
     *            values <code>FEEDBACK_STYLE_BASIC</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   232
     *            <code>FEEDBACK_STYLE_SENSITIVE</code>. Actual style behaviour
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   233
     *            is defined through device settings.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   234
     * @throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   235
     *             if the uiObject parameter has invalid type.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   236
     * @throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   237
     *             if the style parameter has invalid type.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   238
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   239
    public void registerFeedbackArea(Object uiObject, int id, int x, int y,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   240
                                     int width, int height, int style) throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   241
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   242
        int type = controlType(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   243
        if (type == TYPE_INVALID)
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   244
            throw new IllegalArgumentException(MSG_INVALID_OBJECT_TYPE);
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   245
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   246
        if ((style != FEEDBACK_STYLE_BASIC)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   247
                && (style != FEEDBACK_STYLE_SENSITIVE))
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   248
            throw new IllegalArgumentException(MSG_INVALID_FEEDBACK_STYLE);
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   249
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   250
        int controlHandle = getControlHandle(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   251
        if (type == TYPE_LCDUI)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   252
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   253
            final int fControlHandle = controlHandle;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   254
            final int fId = id;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   255
            final int fX = x;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   256
            final int fY = y;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   257
            final int fWidth = width;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   258
            final int fHeight = height;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   259
            final int fStyle = style;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   260
            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   261
            .eSWTUIThreadRunnerSyncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   262
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   263
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   264
                public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   265
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   266
                    OS.MTouchFeedback_SetFeedbackArea(fControlHandle,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   267
                                                      fId, fX, fY, fWidth, fHeight, fStyle);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   268
                }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   269
            });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   270
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   271
        else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   272
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   273
            OS.MTouchFeedback_SetFeedbackArea(controlHandle, id, x, y, width,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   274
                                              height, style);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   275
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   276
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   277
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   278
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   279
     * Unregisters tactile feedback area within a UI component.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   280
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   281
     * @param uiObject
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   282
     *            The UI component for tactile feedback area de-registration.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   283
     *            Valid object types are:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   284
     *            <code>javax.microedition.lcdui.Canvas</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   285
     *            <code>javax.microedition.lcdui.CustomItem</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   286
     *            <code>org.eclipse.swt.widgets.Control</code>.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   287
     * @param id
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   288
     *            Id of the tactile feedback area to be unregistered. Id's are
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   289
     *            used to identify particular tactile feedback area within one
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   290
     *            UI component. If given id was not registered by
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   291
     *            {@link #registerFeedbackArea registerFeedbackArea} then the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   292
     *            call has no effect.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   293
     * @throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   294
     *             if the uiObject parameter has invalid type.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   295
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   296
    public void unregisterFeedbackArea(Object uiObject, int id)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   297
    throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   298
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   299
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   300
        int type = controlType(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   301
        if (type == TYPE_INVALID)
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   302
            throw new IllegalArgumentException(MSG_INVALID_OBJECT_TYPE);
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   303
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   304
        int controlHandle = getControlHandle(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   305
        if (type == TYPE_LCDUI)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   306
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   307
            final int fControlHandle = controlHandle;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   308
            final int fId = id;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   309
            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   310
            .eSWTUIThreadRunnerSyncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   311
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   312
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   313
                public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   314
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   315
                    OS.MTouchFeedback_RemoveFeedbackArea(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   316
                        fControlHandle, fId);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   317
                }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   318
            });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   319
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   320
        else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   321
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   322
            OS.MTouchFeedback_RemoveFeedbackArea(controlHandle, id);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   323
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   324
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   325
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   326
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   327
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   328
     * Removes all tactile feedback for a UI component.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   329
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   330
     * @param uiObject
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   331
     *            The UI component for tactile feedback area de-registration.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   332
     *            Valid object types are:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   333
     *            <code>javax.microedition.lcdui.Canvas</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   334
     *            <code>javax.microedition.lcdui.CustomItem</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   335
     *            <code>org.eclipse.swt.widgets.Control</code>.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   336
     * @throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   337
     *             if the uiObject parameter has invalid type.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   338
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   339
    public void removeFeedbackForComponent(Object uiObject)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   340
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   341
        if (isTouchFeedbackSupported() == false)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   342
            return;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   343
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   344
        int type = controlType(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   345
        if (type == TYPE_INVALID)
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   346
            throw new IllegalArgumentException(MSG_INVALID_OBJECT_TYPE);
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   347
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   348
        int controlHandle = getControlHandle(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   349
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   350
        if (type == TYPE_LCDUI)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   351
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   352
            final int fControlHandle = controlHandle;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   353
            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   354
            .eSWTUIThreadRunnerSyncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   355
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   356
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   357
                public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   358
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   359
                    OS.MTouchFeedback_RemoveFeedbackForControl(fControlHandle);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   360
                }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   361
            });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   362
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   363
        else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   364
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   365
            OS.MTouchFeedback_RemoveFeedbackForControl(controlHandle);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   366
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   367
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   368
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   369
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   370
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   371
     * Moves the specified tactile feedback area to first priority. Priority is
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   372
     * significant in case of overlapping tactile feedback areas. If the tactile
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   373
     * feedback styles of registered areas are different, the feedback from
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   374
     * first-priority area will be given.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   375
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   376
     * @param uiObject
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   377
     *            The UI component for tactile feedback area de-registration.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   378
     *            Valid object types are:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   379
     *            <code>javax.microedition.lcdui.Canvas</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   380
     *            <code>javax.microedition.lcdui.CustomItem</code>,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   381
     *            <code>org.eclipse.swt.widgets.Control</code>.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   382
     * @param id
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   383
     *            Id of the tactile feedback area to be unregistered. Id's are
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   384
     *            used to identify particular tactile feedback area within one
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   385
     *            UI component. If given id was not registered by
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   386
     *            {@link #registerFeedbackArea registerFeedbackArea} then the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   387
     *            call has no effect.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   388
     * @throws IllegalArgumentException
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   389
     *             if the uiObject parameter has invalid type.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   390
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   391
    public void moveFeedbackAreaToFirstPriority(Object uiObject, int id)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   392
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   393
        if (isTouchFeedbackSupported() == false)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   394
            return;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   395
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   396
        int type = controlType(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   397
        if (type == TYPE_INVALID)
87
1627c337e51e v2.2.21_1
hgs
parents: 78
diff changeset
   398
            throw new IllegalArgumentException(MSG_INVALID_OBJECT_TYPE);
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   399
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   400
        int controlHandle = getControlHandle(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   401
        if (type == TYPE_LCDUI)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   402
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   403
            final int fControlHandle = controlHandle;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   404
            final int fId = id;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   405
            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   406
            .eSWTUIThreadRunnerSyncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   407
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   408
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   409
                public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   410
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   411
                    OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   412
                        fControlHandle, fId);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   413
                }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   414
            });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   415
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   416
        else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   417
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   418
            OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   419
                controlHandle, id);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   420
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   421
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   422
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   423
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   424
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   425
    private int controlType(Object obj)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   426
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   427
        if ((obj instanceof javax.microedition.lcdui.Canvas)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   428
                || (obj instanceof javax.microedition.lcdui.CustomItem))
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   429
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   430
            return TYPE_LCDUI;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   431
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   432
        else if ((obj instanceof org.eclipse.swt.widgets.Control))
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   433
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   434
            return TYPE_ESWT;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   435
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   436
        return TYPE_INVALID;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   437
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   438
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   439
    private int getControlHandle(Object uiObject)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   440
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   441
        int controlHandle = 0;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   442
        org.eclipse.swt.widgets.Control eSwtControl = null;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   443
        if (uiObject instanceof javax.microedition.lcdui.Canvas
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   444
                || uiObject instanceof javax.microedition.lcdui.CustomItem)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   445
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   446
            eSwtControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   447
                          .getEswtControl(uiObject);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   448
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   449
        else if (uiObject instanceof org.eclipse.swt.widgets.Control)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   450
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   451
            eSwtControl = (org.eclipse.swt.widgets.Control) uiObject;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   452
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   453
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   454
        if (eSwtControl != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   455
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   456
            controlHandle = Internal_PackageSupport.topHandle(eSwtControl);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   457
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   458
        return controlHandle;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   459
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   460
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   461
}