javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/CommandArranger.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
parent 78 71ad690e91f5
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) 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
     3
 * 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
     4
 * 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
     5
 * 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
     6
 * 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
     7
 *
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
 * Contributors:
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
 *     Nokia Corporation - initial implementation
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
 *******************************************************************************/
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
package org.eclipse.swt.internal.qt;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
import org.eclipse.ercp.swt.mobile.Command;
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    14
import org.eclipse.ercp.swt.mobile.Internal_MobilePackageSupport;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
import org.eclipse.swt.widgets.Control;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
import org.eclipse.swt.widgets.Decorations;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
import org.eclipse.swt.widgets.Display;
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    18
import org.eclipse.swt.widgets.Internal_PackageSupport;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
import org.eclipse.swt.widgets.Menu;
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
import org.eclipse.swt.widgets.Shell;
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    21
import org.eclipse.swt.widgets.Widget;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    22
21
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
 * Manages the Command presentation cycle. This is a singleton object that gets
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
 * notified about the events that can have an effect on the way the Commands are
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
 * represented. It maintains an ordered list of Commands on the current focus
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
 * context with the help of {@link CommandCollection}. It also notifies the
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
 * currently active {@link CommandPresentationStrategy} so that the presentation
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
 * is updated if necessary.
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    30
 * 
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
 * @see Command
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
 * @see CommandCollection
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
 * @see CommandPresentationStrategy
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
 */
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    35
public class CommandArranger
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    36
{
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    38
/**
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    39
 * A helper for keeping an ordered list of {@link Command}s in the current
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    40
 * focus context. The Commands are ordered according to their proximity to
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    41
 * the currently focused control. The ordered list starts with Commands from
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    42
 * the currently focused Control if any and ends with the active Shell and
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    43
 * includes all the Commands in between. If a Control has more than one
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    44
 * Command they are ordered among themselves according to creation order.
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    45
 */
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    46
public class CommandCollection
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    47
{
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    49
private Command[] fCommands;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    51
CommandCollection() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    52
    super();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    53
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    55
/**
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    56
 * Adds the command to the collection. Warning: This does not make
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    57
 * duplicate control.
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    58
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    59
 * @param command
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    60
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    61
void addCommand(Command command) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    62
    if (command == null)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    63
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    64
    if (fCommands == null) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    65
        fCommands = new Command[1];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    66
        fCommands[0] = command;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    67
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    68
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    69
    int size = fCommands.length + 1;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    70
    Command[] newList = new Command[size];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    71
    // find the insertion point so that the order is correct
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    72
    int insertPoint = 0;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    73
    Shell activeShell = display.getActiveShell();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    74
    Control ctrl = display.getFocusControl();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    75
    while (ctrl != null && ctrl != activeShell) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    76
        if (ctrl == Internal_MobilePackageSupport.control(command)) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    77
            // Adding a command to focused control increment by one.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    78
            // adding Command.internal_getCommands(ctrl).length will
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    79
            // just duplicate the count for Commands already in array.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    80
            insertPoint++;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    81
            break;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    82
        }
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    83
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
    84
        insertPoint += Internal_PackageSupport.getCommands(ctrl).length;
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    85
        ctrl = ctrl.getParent();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    86
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    87
    System.arraycopy(fCommands, 0, newList, 0, insertPoint);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    88
    System.arraycopy(fCommands, insertPoint, newList, insertPoint + 1, fCommands.length
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    89
        - insertPoint);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    90
    newList[insertPoint] = command;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    91
    fCommands = newList;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    92
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    94
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    95
 * Adds the list of Commands to the collection.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    96
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    97
 * @param commands
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    98
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
    99
void addCommand(Command[] commands) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   100
    if (commands == null || commands.length == 0)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   101
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   102
    if (fCommands == null) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   103
        fCommands = new Command[commands.length];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   104
        System.arraycopy(commands, 0, fCommands, 0, commands.length);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   105
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   106
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   107
    int size = commands.length + fCommands.length;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   108
    Command[] newList = new Command[size];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   109
    System.arraycopy(fCommands, 0, newList, 0, fCommands.length);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   110
    System.arraycopy(commands, 0, newList, fCommands.length, commands.length);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   111
    fCommands = newList;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   112
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   113
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   114
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   115
 * Removes the command from the list.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   116
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   117
 * @param command
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   118
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   119
void removeCommand(Command command) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   120
    if (command == null)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   121
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   122
    if (fCommands == null || fCommands.length == 0)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   123
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   124
    int removeIndex = -1;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   125
    for (int i = 0; i < fCommands.length; i++) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   126
        if (fCommands[i] == command) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   127
            removeIndex = i;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
        }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   129
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   130
    if (removeIndex == -1)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   131
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   132
    Command[] newList = new Command[fCommands.length - 1];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   133
    System.arraycopy(fCommands, 0, newList, 0, removeIndex);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   134
    System.arraycopy(fCommands, removeIndex + 1, newList, removeIndex, (fCommands.length
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   135
        - removeIndex - 1));
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   136
    fCommands = newList;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   137
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   138
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   139
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   140
 * Returns the number of the Commands
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   141
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   142
 * @return boolean
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   143
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   144
int getSize() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   145
    int size = 0;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   146
    if (fCommands != null)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   147
        size = fCommands.length;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   148
    return size;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   149
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   151
/**
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   152
 * Retrieves the Commands of the types indicated by the commandTypes
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   153
 * array. The order of the commandTypes array has no significance.
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   154
 * Passing a null parameter or an empty array retrieves all the
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   155
 * available Commands.
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   156
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   157
 * @param commandTypes
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   158
 * @return Command list
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   159
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   160
Command[] getCommands(int[] commandTypes) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   161
    if (commandTypes == null || commandTypes.length == 0) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   162
        return fCommands;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   163
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   164
    int size = getSize();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   165
    Command[] filteredCommands = new Command[size];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   166
    int index = 0;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   167
    for (int i = 0; i < fCommands.length; i++) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   168
        for (int j = 0; j < commandTypes.length; j++) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   169
            if (Internal_MobilePackageSupport.type(fCommands[i]) == commandTypes[j]) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   170
                filteredCommands[index] = fCommands[i];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   171
                index++;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   172
                break;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
            }
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
        }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   175
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   176
    if (size > (index)) {// Some commands filtered resize the Array
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   177
        Command[] shrunk = new Command[index];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   178
        System.arraycopy(filteredCommands, 0, shrunk, 0, index);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   179
        return shrunk;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   180
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   181
    return filteredCommands;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   182
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   183
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   184
}// CommandCollection
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   185
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   186
private CommandCollection currentCommands;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   187
private Command defaultCommand;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   188
private Display display;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   189
Control focusedControl;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   190
Shell lastKnownActiveShell;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   191
private Command[] positiveKeyCommands;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   192
private Command negativeKeyCommand;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   193
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   194
public CommandArranger(Display display) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   195
    super();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   196
    this.display = display;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   197
    currentCommands = new CommandCollection();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   198
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   199
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   200
/**
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   201
 * Called when the application changes the QMenuBar. This method does not
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   202
 * handle the cases when the QMenuBar may change when the active top-level
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   203
 * Shell changes. Since this does not cause a menu bar change on all
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   204
 * platforms.
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   205
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   206
 * @see org.eclipse.swt.widgets.Decorations#setMenuBar(Menu)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   207
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   208
 **/
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   209
public void menuBarChanged(Decorations decorations) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   210
    if (currentCommands == null || currentCommands.getSize() < 1)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   211
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   212
    // if the changed menu bar is not on the active shell ignore and leave
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   213
    // it to focus change.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   214
    if (decorations.getShell() != decorations.getDisplay().getActiveShell())
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   215
        return;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   216
    // Call internal_getOwnMenuBar because the menu bar can be set to null
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   217
    // in Decorations and
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   218
    // we may need to create the internal one.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   219
    int menuBarHandle = decorations.internal_getOwnMenuBar();
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   220
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   221
    handleMenuBarChanged(menuBarHandle, currentCommands);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   222
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   223
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   224
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   225
 * Called when a new Shell becomes active.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   226
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   227
 * @see Control#qt_swt_event_focusWasGained() //TODO
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   228
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   229
public void shellActivityChanged() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   230
    if (display == null) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   231
        return;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   232
    }
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   233
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   234
    Shell activeShell = display.getActiveShell();
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   235
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   236
    if (activeShell == lastKnownActiveShell) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   237
        return;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   238
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   239
    lastKnownActiveShell = activeShell;
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   240
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   241
    cleanPositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   242
    cleanNegativeCommand();
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   243
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   244
    currentCommands = new CommandCollection();
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   245
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   246
    if (activeShell != null && Internal_PackageSupport.getCommands(activeShell).length > 0) {
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   247
        currentCommands.addCommand(Internal_PackageSupport.getCommands(activeShell));
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   248
    }
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   249
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   250
    // Determine where the commands go
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   251
    if (currentCommands.getSize() > 0) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   252
        Command[] add = currentCommands.getCommands(null);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   253
        updateCommandPositions(add);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   254
        placePositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   255
        placeNegativeCommand();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   256
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   257
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   258
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   259
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   260
 * Called when a new Command is created
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   261
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   262
 * @param command
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   263
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   264
public void commandAdded(Command command) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   265
    if (isInFocusContext(Internal_MobilePackageSupport.control(command))) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   266
        currentCommands.addCommand(command);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   267
        handleCommandListChange(command, null, currentCommands);
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   269
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   270
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   271
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   272
 * Called when a Command is disposed
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   273
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   274
 * @param command
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   275
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   276
public void commandRemoved(Command command) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   277
    if (command == defaultCommand)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   278
        defaultCommand = null;
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   279
    if (isInFocusContext(Internal_MobilePackageSupport.control(command))) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   280
        currentCommands.removeCommand(command);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   281
        handleCommandListChange(null, command, currentCommands);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   282
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   283
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   284
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   285
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   286
 * Called when the Display is getting disposed.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   287
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   288
public void dispose() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   289
    currentCommands = null;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   290
    display = null;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   291
    positiveKeyCommands = null;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   292
    negativeKeyCommand = null;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   293
    defaultCommand = null;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   294
    lastKnownActiveShell = null;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   295
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   296
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   297
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   298
 * Called when a Command is set default
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   299
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   300
 * @param command
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   301
 * @see Command#setDefaultCommand();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   302
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   303
public void setDefaultCommand(Command command) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   304
    defaultCommand = command;
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   305
    if (isInFocusContext(Internal_MobilePackageSupport.control(command))) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   306
        handleDefaultCommandChange(command);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   307
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   308
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   309
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   310
/**
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   311
 * Returns the default command or null if there is none.
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   312
 * 
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   313
 * @return
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   314
 * @see Command#isDefaultCommand()
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   315
 */
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   316
public Command getDefaultCommand() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   317
    return defaultCommand;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   318
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   319
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   320
private boolean isInFocusContext(Control control) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   321
    Display display = control.getDisplay();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   322
    Shell activeShell = display.getActiveShell();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   323
    return control == activeShell;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   324
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   325
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   326
private void handleCommandListChange(Command added, Command removed, CommandCollection commands) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   327
    cleanNegativeCommand();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   328
    cleanPositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   329
    updateCommandPositions(commands.getCommands(null));
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   330
    placeNegativeCommand();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   331
    placePositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   332
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   333
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   334
private void handleDefaultCommandChange(Command defaultCommand) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   335
    this.defaultCommand = defaultCommand;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   336
    cleanPositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   337
    placePositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   338
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   339
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   340
private void updateCommandPositions(Command[] commands) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   341
    positiveKeyCommands = new Command[commands.length];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   342
    int positiveKeyIndex = 0;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   343
    for (int i = 0; i < commands.length; i++) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   344
        Command cmd = commands[i];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   345
        if (cmd.isDefaultCommand()) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   346
            defaultCommand = cmd;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   347
            continue;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   348
        }
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   349
        if (CommandUtils.isNegativeType(Internal_MobilePackageSupport.type(cmd))) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   350
            if (negativeKeyCommand == null || negativeKeyCommand.isDisposed()) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   351
                negativeKeyCommand = cmd;
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   352
            }
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   353
            else if (negativeKeyCommand.getPriority() <= cmd.getPriority()) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   354
                positiveKeyCommands[positiveKeyIndex] = negativeKeyCommand;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   355
                positiveKeyIndex++;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   356
                negativeKeyCommand = cmd;
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   357
            }
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   358
            else {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   359
                positiveKeyCommands[positiveKeyIndex] = cmd;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   360
                positiveKeyIndex++;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   361
            }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   362
            continue;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   363
        }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   364
        positiveKeyCommands[positiveKeyIndex] = cmd;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   365
        positiveKeyIndex++;
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   366
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   367
    if ((positiveKeyIndex) < positiveKeyCommands.length) {// needs to shrink
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   368
        Command[] rightSized = new Command[positiveKeyIndex];
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   369
        System.arraycopy(positiveKeyCommands, 0, rightSized, 0, rightSized.length);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   370
        positiveKeyCommands = rightSized;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   371
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   372
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   373
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   374
private void cleanPositiveCommands() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   375
    boolean useBar = false;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   376
    if ((positiveKeyCommands != null && positiveKeyCommands.length > 1)
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   377
        || (defaultCommand != null && positiveKeyCommands != null)) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   378
        useBar = true;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   379
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   380
    if (defaultCommand != null && !defaultCommand.isDisposed()
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   381
        && !Internal_MobilePackageSupport.control(defaultCommand).isDisposed()) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   382
        if (useBar) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   383
            OS.QWidget_removeAction(Internal_MobilePackageSupport.control(defaultCommand)
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   384
                .getShell().internal_getOwnMenuBar(), topHandle(defaultCommand));
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   385
        }
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   386
        else {
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   387
            OS.QWidget_removeAction(
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   388
                topHandle(Internal_MobilePackageSupport.control(defaultCommand)),
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   389
                topHandle(defaultCommand));
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   390
        }
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   391
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   392
    if (positiveKeyCommands != null) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   393
        for (int i = 0; i < positiveKeyCommands.length; i++) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   394
            Command cmd = positiveKeyCommands[i];
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   395
            if (cmd == null || cmd.isDisposed()
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   396
                || Internal_MobilePackageSupport.control(cmd).isDisposed()) {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   397
                continue;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   398
            }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   399
            int handle = 0;
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   400
            if (useBar) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   401
                handle = Internal_MobilePackageSupport.control(cmd).getShell()
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   402
                    .internal_getOwnMenuBar();
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   403
            }
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   404
            else {
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   405
                handle = topHandle(Internal_MobilePackageSupport
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   406
                    .control(positiveKeyCommands[0]));
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   407
            }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   408
            OS.QWidget_removeAction(handle, topHandle(cmd));
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   409
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   410
        }
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   411
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   412
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   413
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   414
private void cleanNegativeCommand() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   415
    if (negativeKeyCommand != null && !negativeKeyCommand.isDisposed()
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   416
        && !Internal_MobilePackageSupport.control(negativeKeyCommand).isDisposed()) {
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   417
        OS.QWidget_removeAction(
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   418
            topHandle(Internal_MobilePackageSupport.control(negativeKeyCommand)),
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   419
            topHandle(negativeKeyCommand));
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   420
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   421
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   422
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   423
private void placeNegativeCommand() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   424
    if (negativeKeyCommand != null) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   425
        OS.QWidget_addAction(Internal_PackageSupport.topHandle(Internal_MobilePackageSupport
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   426
            .control(negativeKeyCommand)), topHandle(negativeKeyCommand));
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   427
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   428
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   429
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   430
private void placePositiveCommands() {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   431
    if (defaultCommand != null) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   432
        int defaultCmdHandle = topHandle(defaultCommand);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   433
        if (positiveKeyCommands != null) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   434
            OS.QMenuBar_addAction(Internal_MobilePackageSupport.control(defaultCommand)
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   435
                .getShell().internal_getOwnMenuBar(), defaultCmdHandle);
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   436
        }
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   437
        else {
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   438
            OS.QWidget_addAction(Internal_PackageSupport
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   439
                .topHandle(Internal_MobilePackageSupport.control(defaultCommand)),
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   440
                defaultCmdHandle);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   441
        }
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   442
    }
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   443
    if (positiveKeyCommands != null) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   444
        if (positiveKeyCommands.length == 1 && defaultCommand == null) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   445
            OS.QWidget_addAction(Internal_PackageSupport
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   446
                .topHandle(Internal_MobilePackageSupport.control(positiveKeyCommands[0])),
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   447
                topHandle(positiveKeyCommands[0]));
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   448
        }
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   449
        else {
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   450
            CommandUtils.sort(positiveKeyCommands);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   451
            for (int i = 0; i < positiveKeyCommands.length; i++) {
80
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   452
                OS.QMenuBar_addAction(
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   453
                    Internal_MobilePackageSupport.control(positiveKeyCommands[i]).getShell()
d6dafc5d983f v2.2.19_1
hgs
parents: 78
diff changeset
   454
                        .internal_getOwnMenuBar(), topHandle(positiveKeyCommands[i]));
78
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   455
            }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   456
        }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   457
    }
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   458
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   459
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   460
private void handleMenuBarChanged(int newMenuBar, CommandCollection commands) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   461
    placePositiveCommands();
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   462
}
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   463
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   464
private static final int topHandle(Widget w) {
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   465
    return Internal_PackageSupport.topHandle(w);
71ad690e91f5 v2.2.17_1
hgs
parents: 35
diff changeset
   466
}
21
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   467
2a9601315dfc Revision: v2.1.22
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   468
}