javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/DesktopCommandPresentationStrategy.java
changeset 21 2a9601315dfc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/DesktopCommandPresentationStrategy.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import org.eclipse.ercp.swt.mobile.Command;
+import org.eclipse.swt.internal.qt.CommandArranger.CommandCollection;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Widget;
+
+public class DesktopCommandPresentationStrategy extends
+        CommandPresentationStrategy {
+
+    private int commandsMenu;
+    private int commandsMenuAction;
+    private Control previousFocus;
+
+    public DesktopCommandPresentationStrategy(){
+        super();
+        initCommandsMenu();
+    }
+
+    protected void handleCommandListChange(Command added, Command removed,
+            CommandCollection commands) {
+
+        Shell shell = null;
+        if ( added != null ){
+            shell = added.control.getShell();
+            OS.QMenu_addAction(commandsMenu, handle(added) );
+        }
+        else{
+            shell = removed.control.getShell();
+            OS.QWidget_removeAction(commandsMenu, handle(removed) );
+        }
+
+        OS.QMenuBar_addAction(shell.internal_getOwnMenuBar(), commandsMenuAction );
+    }
+
+    protected void handleFocusChange(Control focused,
+            CommandCollection oldCommands, CommandCollection commands) {
+        Shell shell = focused.getShell();
+
+        if( oldCommands != null && oldCommands.getSize() >0 ){
+            Command[] remove = oldCommands.getCommands(null);
+            for(int i=0; i< remove.length; i++){
+                if (previousFocus!= null && remove[i].control == previousFocus){
+                    OS.QWidget_removeAction(handle(previousFocus), handle(remove[i]));
+                }else{
+                    OS.QWidget_removeAction(commandsMenu, handle(remove[i]));
+                }
+            }
+        }
+
+        if ( commands != null && commands.getSize() > 0 ){
+            OS.QMenuBar_addAction(shell.internal_getOwnMenuBar(), commandsMenuAction );
+            Command[] add = commands.getCommands(null);
+            CommandUtils.sort(add);
+            for(int i=0 ; i < add.length; i++){
+                if ( add[i].control != focused ){
+                    OS.QMenu_addAction( commandsMenu, handle(add[i]) );
+                }
+                else{
+                    OS.QWidget_addAction(handle(focused), handle(add[i]));
+                }
+                if (add[i].isDefaultCommand() )OS.QMenu_setDefaultAction( commandsMenu, handle(add[i]) );
+            }
+        }
+        //Store for use next time.
+        previousFocus=focused;
+    }
+
+    protected void handleMenuBarChanged(int newMenuBar,
+            CommandCollection commands) {
+        OS.QMenuBar_addAction(newMenuBar, commandsMenuAction );
+    }
+
+
+    protected void dispose() {
+        if (commandsMenu != 0 ){
+            QObjectDeleteWrapper.deleteSafely( commandsMenu );
+            commandsMenu = 0;
+        }
+        if (commandsMenuAction != 0 ){
+            QObjectDeleteWrapper.deleteSafely( commandsMenuAction );
+            commandsMenuAction = 0;
+        }
+    }
+
+    private void initCommandsMenu (){
+        commandsMenuAction = OS.QAction_new( 0 );
+        OS.QAction_setText( commandsMenuAction, "Commands");
+        commandsMenu = OS.QMenu_new( 0 );
+        OS.QAction_setMenu( commandsMenuAction, commandsMenu );
+    }
+
+    protected void handleDefaultCommandChange(Command defaultCommand) {
+        int handle = 0;
+        if (defaultCommand != null ) handle = handle(defaultCommand);
+        OS.QMenu_setDefaultAction( commandsMenu, handle );
+    }
+
+
+    private final int handle(Widget w) {
+        return Internal_PackageSupport.handle(w);
+    }
+}