javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/MobileDevice.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
parent 50 023eef975703
permissions -rw-r--r--
v2.2.19_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*******************************************************************************
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
 * Copyright (c) 2004 IBM Corp.
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
 * Portion Copyright (c) 2005, 2008 Nokia Corporation and/or its subsidiary(-ies).
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
 * All rights reserved. This program and the accompanying materials
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
 * are made available under the terms of the Eclipse Public License v1.0
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
 * which accompanies this distribution, and is available at
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
 * http://www.eclipse.org/legal/epl-v10.html
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
 *
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
 * Contributors:
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
 *    Mark Rogalski (IBM Corp.) - initial API specification
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
 *    Nokia Corporation - S60 implementation
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
 *    Nokia Corporation - QT implementation
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
 *******************************************************************************/
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
package org.eclipse.ercp.swt.mobile;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
import java.util.Vector;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
import org.eclipse.swt.SWT;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
import org.eclipse.swt.internal.qt.OS;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
import org.eclipse.swt.widgets.Display;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
import org.eclipse.swt.widgets.Internal_PackageSupport;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
/** 
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
 * Instances of this class represent the device that is being used.
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
 * It provides methods that enable applications to learn more about the device 
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
 * specific characteristics and capabilities.
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
 * <p>
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
 * Applications can query what input features and display screens are permanently 
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
 * part of the device. These are considered <i>local</i> features. Some devices also
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
 * allow input mechanisms or screens to be attached to the device at runtime. These
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
 * are considered <i>remote</i> features.  Since local features do not come and go,
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
 * it is sufficient to query for them once. On the other hand, since remote devices
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
 * can be added or removed at any time, an application needs to add a <code>
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
 * MobileDeviceListener</code> to be informed of these events.
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
 * <p> 
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
 * Local features may also be <i>internal</i> or <i>external</i>. 
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
 * External features are only available when a device is closed.
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
 * Internal features are only available when a device is opened.
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
 *
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
 * @see Screen
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
 * @see Input
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
 * @see MobileDeviceListener
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
 */
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
public class MobileDevice {
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    47
    private static int  handleMobileDevice;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    48
    private Vector      mobileDeviceListeners;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    49
    private Screen[]    screens;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    50
    private Input[]     inputs;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    51
    private int         alertLevel;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    52
    private boolean     isOpen;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    53
    private static int  desktopWidgetHandle;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
    static MobileDevice currentMobileDevice;
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    55
    private int         activeScreenId;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
    
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
    
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
    
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
    /** 
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
     * feature which is permanently attached to the mobile device and always available
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    62
     */    
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
    public static final int LOCAL = 0;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    65
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    66
     * local feature which is only available when mobile device is opened
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    67
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    68
    public static final int INTERNAL = 1;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    70
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    71
     * local feature which is only available when mobile device is closed
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    72
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    73
    public static final int EXTERNAL = 2;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    74
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    75
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    76
     * feature which is not part of the mobile device unless connected via wire or wireless signal
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    77
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    78
    public static final int REMOTE = 3;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    79
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    80
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    81
     * alert level indicating simple notification (ex. e-mail arrival)
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    82
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    83
    public static final int ALERT_LOW_IMPORTANCE = 1;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    84
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    85
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    86
     * alert level indicating user attention desired (ex. instant message arrival)
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    87
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    88
    public static final int ALERT_HIGH_IMPORTANCE = 2;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    89
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    90
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    91
     * alert level indicating immediate attention is required (ex. battery level at 1%)
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    92
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    93
    public static final int ALERT_CRITICAL = 3;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
   /**
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
    * virtual keyboard status indicating normal show and hide operation
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
    */
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    97
    public static final int VK_NORMAL = 1;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
    99
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   100
     * virtual keyboard status indicating keyboard is always visible
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   101
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   102
    public static final int VK_ALWAYS_ON = 2;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   103
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   104
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   105
     * virtual keyboard status indicating keyboard is always hidden
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   106
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   107
    public static final int VK_ALWAYS_OFF = 3;      
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   108
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   109
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   110
     * Constructs a new instance of this class. Non-public to prevent
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   111
     * instantiation outside this package.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   112
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   113
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   114
    MobileDevice () {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   115
       
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   116
        (getDisplay()).syncExec(new Runnable() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   117
            public void run() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   118
                handleMobileDevice = Internal_PackageSupport.initializeMobileDevice(
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   119
                        Internal_PackageSupport.getDisplayInstance());
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   120
                if (handleMobileDevice == 0) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   121
                    SWT.error(SWT.ERROR_NO_HANDLES);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   122
                }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   123
                OS.MobileDevice_createFlipWatch(handleMobileDevice);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   124
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   125
        }); 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   126
        mobileDeviceListeners = new Vector();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   127
        isOpen = true;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   128
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   129
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   130
    private static Display getDisplay(){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   131
        Display display = Internal_PackageSupport.getDisplayInstance();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   132
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   133
        // Following if-statement (getting default display) should be removed
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   134
        // if agreed that MobileDevice shouldn't create the display.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   135
        if(display==null){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   136
            display = Display.getDefault();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   137
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   138
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   139
        if(display == null || display.isDisposed()){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   140
            SWT.error(SWT.ERROR_DEVICE_DISPOSED);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   141
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   142
        return display;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   143
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   144
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   145
    private void sendMobileDeviceChangedEvent(int eventType) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   146
        // MobileDevice changed event for open and closed
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   147
        int count = mobileDeviceListeners.size();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   148
        for (int i = 0; i <count; ++i) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   149
            MobileDeviceEvent event = new MobileDeviceEvent(this);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   150
            event.type = eventType;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   151
            MobileDeviceListener listener = (MobileDeviceListener) mobileDeviceListeners.elementAt(i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   152
            listener.deviceChanged(event);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   153
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   154
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   155
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   156
    void qt_swt_event_mobiledevice_changed(boolean aStatus) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   157
        // update MobileDevice status to opened/closed
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   158
        isOpen = aStatus;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   159
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   160
        if(isOpen){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   161
            sendMobileDeviceChangedEvent(MobileDeviceEvent.OPENED);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   162
        }else{
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   163
            sendMobileDeviceChangedEvent(MobileDeviceEvent.CLOSED);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   164
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   165
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   166
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   167
    void qt_swt_event_mobiledevice_screen_activate(boolean aStatus) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   168
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   169
        if(screens.length > 0 && activeScreenId<screens.length){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   170
            if(aStatus){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   171
                // update the active screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   172
                activeScreenId = OS.getScreenDeviceNumber();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   173
                //forward to screen activated event to new active screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   174
                screens[activeScreenId].internal_sendScreenEventActivated();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   175
            }else {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   176
                //forward to screen deactivated event to old active screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   177
                screens[activeScreenId].internal_sendScreenEventDeactivated();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   178
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   179
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   180
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   181
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   182
    void qt_swt_event_mobiledevice_orientationchanged() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   183
        activeScreenId = OS.getScreenDeviceNumber();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   184
        if(activeScreenId<screens.length){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   185
            // forward to orientation change event to active screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   186
            screens[activeScreenId].internal_sendOrientationScreenChanged();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   187
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   188
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   189
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   190
    private void sendMobileDeviceScreenChangedEvent(int eventType, Screen screen) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   191
        int count = mobileDeviceListeners.size();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   192
        for (int i = 0; i <count; ++i) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   193
            MobileDeviceEvent event = new MobileDeviceEvent(this);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   194
            event.type = eventType;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   195
            event.data = screen;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   196
            event.feature = screen;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   197
            MobileDeviceListener listener = (MobileDeviceListener) mobileDeviceListeners.elementAt(i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   198
            listener.screenChanged(event);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   199
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   200
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   201
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   202
    void qt_signal_screen_changed(int aCount) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   203
        int type = 0;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   204
        Screen screen = null;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   205
        Screen []newScreens = new Screen[aCount];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   206
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   207
        // if getScreen is not called and if still want 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   208
        // screen changed event in the MobileDevice
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   209
        if(screens.length==0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   210
            getScreens();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   211
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   212
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   213
        if(screens.length > aCount){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   214
            // screen removed
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   215
            int screenHandle = 0;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   216
            for(int j=0; j<screens.length; j++) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   217
                // found removed screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   218
                boolean found = false;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   219
                for(int i=0; i<aCount; i++) {     
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   220
                    screenHandle = OS.QDesktopWidget_screen(desktopWidgetHandle, i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   221
                    if(screens[j].screenHandle== screenHandle){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   222
                        newScreens[i] = screens[j];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   223
                        newScreens[i].id = i;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   224
                        found = true;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   225
                        break;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   226
                     }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   227
                }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   228
                if(!found){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   229
                    screen = screens[j];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   230
                    screens[j].internal_dispose();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   231
                } 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   232
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   233
            screens = new Screen[aCount];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   234
            // remove detached screen from 'screens'
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   235
            System.arraycopy(newScreens, 0, screens, 0, aCount);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   236
            type = MobileDeviceEvent.REMOVED;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   237
        } else if( screens.length < aCount){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   238
            // screen attached
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   239
            for(int i=0; i<aCount; i++) {   
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   240
                // found added screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   241
                int screenHandle = OS.QDesktopWidget_screen(desktopWidgetHandle, i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   242
                boolean found=false;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   243
                for(int j=0; j<screens.length; j++) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   244
                    if(screens[j].screenHandle== screenHandle){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   245
                        newScreens[i] = screens[j];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   246
                        newScreens[i].id = i;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   247
                        found = true;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   248
                        break;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   249
                    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   250
                }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   251
                if(!found){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   252
                    screen = screens[i];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   253
                    newScreens[i] = new Screen(i, desktopWidgetHandle);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   254
                } 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   255
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   256
            screens = new Screen[aCount];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   257
            // add attached screen to 'screens'
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   258
            System.arraycopy(newScreens, 0, screens, 0, aCount);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   259
            type = MobileDeviceEvent.ADDED;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   260
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   261
        sendMobileDeviceScreenChangedEvent(type, screen);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   262
        activeScreenId = OS.getScreenDeviceNumber();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   263
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   264
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   265
    private static void hookEvents() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   266
        int screenSignalProxy = OS.SignalHandler_new(desktopWidgetHandle, OS.QSIGNAL_QDESKTOPWIDGET_SCREENCOUNTCHANGED);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   267
        OS.QObject_connectOrThrow(desktopWidgetHandle, "screenCountChanged(int)", screenSignalProxy,
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   268
                "widgetSignal(int)", OS.QT_AUTOCONNECTION);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   269
    }
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   270
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   271
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   272
     * Adds the listener to the collection of listeners who will be notified when a device 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   273
     * configuration change occurs, by calling one of the methods defined in the 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   274
     * <code>MobileDeviceListener</code> interface. 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   275
     * <p>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   276
     * <code>screenChanged</code> is called when a monitor configuration changes.<br>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   277
     * <code>inputChanged</code> is called when an input configuration changes.<br>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   278
     * <code>deviceChanged</code> is called when the device is opened or closed.<br>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   279
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   280
     * @param listener instance called when device events occur
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   281
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   282
     * @exception IllegalArgumentException <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   283
     *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   284
     * </ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   285
     * @exception SWTError <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   286
     *    <li>ERROR_ITEM_NOT_ADDED - if the operation fails because of an operating system failure</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   287
     * </ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   288
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   289
     * @see #removeMobileDeviceListener
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   290
     * @see MobileDeviceListener
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   291
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   292
    public void addMobileDeviceListener(MobileDeviceListener listener) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   293
        if (listener == null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   294
            SWT.error (SWT.ERROR_NULL_ARGUMENT);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   295
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   296
        mobileDeviceListeners.addElement(listener);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   297
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   298
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   299
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   300
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   301
     * Alerts the user using device specific mechanisms such as sounds, flashing, or
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   302
     * vibration. <code>Level</code> must be one of ALERT_LOW_IMPORTANCE,
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   303
     * ALERT_HIGH_IMPORTANCE, or ALERT_CRITICAL. The method maps these levels to
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   304
     * device specific features that may also be dependent upon user configuration
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   305
     * or current profile.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   306
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   307
     * @param level
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   308
     *            constant describing the importance of the alert
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   309
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   310
     * @exception IllegalArgumentException
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   311
     *                <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   312
     *                <li>ERROR_INVALID_ARGUMENT - if level is not one of the
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   313
     *                allowed class constants</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   314
     *                </ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   315
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   316
     * @see #ALERT_LOW_IMPORTANCE
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   317
     * @see #ALERT_HIGH_IMPORTANCE
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   318
     * @see #ALERT_CRITICAL
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   319
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   320
    public void alert(int level) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   321
        if (    level != ALERT_LOW_IMPORTANCE &&
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   322
                level != ALERT_HIGH_IMPORTANCE &&
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   323
                level != ALERT_CRITICAL) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   324
            SWT.error(SWT.ERROR_INVALID_ARGUMENT);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   325
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   326
        alertLevel = level;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   327
        (getDisplay()).syncExec(new Runnable() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   328
            public void run() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   329
                if(alertLevel == ALERT_LOW_IMPORTANCE){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   330
                    OS.QApplication_beep();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   331
                }else if(alertLevel == ALERT_HIGH_IMPORTANCE){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   332
                    OS.MobileDevice_flashLights(handleMobileDevice, 3000);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   333
                    OS.MobileDevice_vibration(handleMobileDevice, 3000);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   334
                }else if(alertLevel == ALERT_CRITICAL){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   335
                    OS.QApplication_beep();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   336
                    OS.MobileDevice_flashLights(handleMobileDevice, 3000);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   337
                    OS.MobileDevice_vibration(handleMobileDevice, 3000);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   338
                }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   339
               
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   340
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   341
        }); 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   342
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   343
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   344
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   345
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   346
     * Returns an array of Input objects describing the input features available to the device. 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   347
     * The return value may be <code>null</code> if there are no input features available.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   348
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   349
     * @exception SWTError <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   350
     *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   351
     *         of an operating system failure</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   352
     * </ul> 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   353
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   354
     * @see Input
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   355
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   356
    public Input[] getInputs() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   357
        if(inputs == null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   358
            try {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   359
                (getDisplay()).syncExec(new Runnable() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   360
                    public void run() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   361
                        int mask = OS.getHwInputs();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   362
                        int nbInputs = 0;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   363
                        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   364
                        // finding out number of keyboards available
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   365
                        if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   366
                            nbInputs+=2;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   367
                        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   368
                        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   369
                        if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   370
                            nbInputs+=2;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   371
                        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   372
                        // create java counter part of Inputs and
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   373
                        // add location and type
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   374
                        inputs = new Input[nbInputs];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   375
                        int i=0;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   376
                        int location;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   377
                        if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   378
                            if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   379
                                location = MobileDevice.INTERNAL;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   380
                            } else {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   381
                                location = MobileDevice.LOCAL;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   382
                            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   383
                            inputs[i] = new Input(i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   384
                            inputs[i].setLocation(location);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   385
                            inputs[i].setType(Input.SOFTKEYS);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   386
                            i+=1;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   387
                            inputs[i] = new Input(i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   388
                            inputs[i].setLocation(location);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   389
                            inputs[i].setType(Input.FULL_KEYBOARD);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   390
                            i+=1;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   391
                        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   392
                        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   393
                        if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   394
                            if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   395
                                location = MobileDevice.EXTERNAL;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   396
                            } else {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   397
                                location = MobileDevice.LOCAL;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   398
                            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   399
                            inputs[i] = new Input(i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   400
                            inputs[i].setLocation(location);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   401
                            inputs[i].setType(Input.SOFTKEYS);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   402
                            i+=1;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   403
                            inputs[i] = new Input(i);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   404
                            inputs[i].setLocation(location);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   405
                            inputs[i].setType(Input.KEYPAD);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   406
                        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   407
                    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   408
                });
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   409
            } catch(Throwable e) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   410
                SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);           
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   411
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   412
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   413
        return inputs;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   414
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   415
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   416
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   417
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   418
     * Returns an array of Screen objects describing the display features available to the device. 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   419
     * The return value may be <code>null</code> if there are no display screens available.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   420
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   421
     * @exception SWTError <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   422
     *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   423
     *         of an operating system failure</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   424
     * </ul> 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   425
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   426
     * @see Screen
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   427
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   428
    public Screen[] getScreens() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   429
        if(screens == null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   430
            try {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   431
                (getDisplay()).syncExec(new Runnable() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   432
                    public void run() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   433
                        int nbScreens = OS.QDesktopWidget_screenCount(desktopWidgetHandle);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   434
                        activeScreenId = OS.getScreenDeviceNumber();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   435
                        screens = new Screen[nbScreens];
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   436
                        for(int i=0; i<nbScreens; i++) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   437
                            screens[i] = new Screen(i, desktopWidgetHandle);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   438
                        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   439
                    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   440
                });
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   441
            } catch(Throwable e) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   442
                SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);           
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   443
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   444
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   445
        return screens;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   446
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   447
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   448
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   449
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   450
     * Returns singleton instance of MobileDevice class.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   451
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   452
     * @return singleton of MobileDevice class. Must not be Null.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   453
     * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   454
     * @exception SWTError <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   455
     *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because of 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   456
     *         an operating system failure</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   457
     * </ul> 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   458
     */ 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   459
    public static MobileDevice getMobileDevice() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   460
        if(currentMobileDevice == null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   461
            try {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   462
                currentMobileDevice = new MobileDevice(); 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   463
                Internal_PackageSupport.setMobileDevice(getDisplay(),currentMobileDevice);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   464
                desktopWidgetHandle = OS.QApplication_desktop();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   465
                hookEvents();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   466
            } catch (Throwable e) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   467
                SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   468
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   469
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   470
        return currentMobileDevice;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   471
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   472
     
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   473
     
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   474
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   475
     * Returns whether device is opened. For devices that have no internal screens 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   476
     * or input features, the method always returns <code>true</code>.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   477
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   478
    public boolean isOpen() { 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   479
        getDisplay();
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   480
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   481
        return isOpen; 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   482
    }
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   483
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   484
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   485
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   486
     * Call to dispose the Screen object.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   487
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   488
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   489
    void internal_dispose() {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   490
        if (inputs != null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   491
            for (int i = 0; i < inputs.length; i++) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   492
                if (inputs[i] != null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   493
                    inputs[i].internal_dispose();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   494
                }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   495
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   496
        }
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   497
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   498
        if (screens != null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   499
            for (int i = 0; i < screens.length; i++) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   500
                if (screens[i] != null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   501
                    screens[i].internal_dispose();
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   502
                }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   503
            }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   504
        }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   505
        // actual native counter part is deleted in display
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   506
        currentMobileDevice = null;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   507
        handleMobileDevice = 0;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   508
        inputs = null;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   509
        screens = null;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   510
        desktopWidgetHandle = 0;
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   511
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   512
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   513
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   514
    /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   515
     * Removes the listener from the collection of listeners who will be notified when a device 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   516
     * configuration change occurs. 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   517
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   518
     * @param listener instance called when device events occur
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   519
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   520
     * @exception IllegalArgumentException <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   521
     *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   522
     * </ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   523
     * @exception SWTError <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   524
     *    <li>ERROR_ITEM_NOT_REMOVED - if the operation fails because 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   525
     *         of an operating system failure</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   526
     * </ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   527
     *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   528
     * @see #addMobileDeviceListener
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   529
     * @see MobileDeviceListener
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   530
     */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   531
    public void removeMobileDeviceListener(MobileDeviceListener listener) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   532
        if (listener == null) {
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   533
            SWT.error (SWT.ERROR_NULL_ARGUMENT);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   534
        }
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   535
50
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   536
        //remove listener
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   537
        //Remove method of Vector class never fails,
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   538
        //so ERROR_ITEM_NOT_REMOVED could never be thrown.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   539
        mobileDeviceListeners.removeElement(listener);
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   540
    }
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   541
    
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   542
     /**
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   543
      * Sets the status of the system virtual keyboard (if one is available).
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   544
      * By default, or when status is set to VK_NORMAL, a system virtual keyboard
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   545
      * is displayed when a widget capable of text input gains focus and is
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   546
      * hidden when that widget looses focus. However, there are cases where 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   547
      * an application may wish to continuously display the virtual keyboard
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   548
      * or always keep it hidden. Setting the status to VK_ALWAYS_ON or VK_ALWAYS_OFF
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   549
      * will accomplish this and the effect is immediate. Changing focus will
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   550
      * then have no affect on the virtual keyboard. Note: By default, widgets which 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   551
      * normally accept input but are set to <i>read only</i> do not cause the 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   552
      * the virtual keyboard to display.
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   553
      *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   554
      * @param status virtual keyboard mode. One of VK_NORMAL, VK_ALWAYS_ON, VK_ALWAYS_OFF
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   555
      * 
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   556
      * @exception IllegalArgumentException <ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   557
      *    <li>ERROR_INVALID_ARGUMENT - if the status parameter is not valid</li>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   558
      * </ul>
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   559
      *
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   560
      * @see #VK_NORMAL
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   561
      * @see #VK_ALWAYS_ON
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   562
      * @see #VK_ALWAYS_OFF
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   563
      */
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   564
    public void setVKStatus(int status){
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   565
        
023eef975703 v2.2.4_1
hgs
parents: 35
diff changeset
   566
    }
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   567
}