diff -r f5050f1da672 -r 04becd199f91 javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/LaunchAppQueryView.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/LaunchAppQueryView.java Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +package com.nokia.mj.impl.installer.ui.eswt; + +import com.nokia.mj.impl.installer.ui.ApplicationInfo; +import com.nokia.mj.impl.installer.ui.LaunchAppInfo; + +import java.io.InputStream; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.FocusListener; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; + +/** + * LaunchAppQueryView asks from the user if the application should be launched. + */ +public class LaunchAppQueryView extends ConfirmationViewBase +{ + private LaunchAppInfo iLaunchAppInfo = null; + private Button iDefaultButton = null; + + /** Constructor */ + protected LaunchAppQueryView() + { + super(); + } + + /** Constructor */ + protected LaunchAppQueryView(InstallerUiEswt aInstaller, Composite aParent) + { + super(aInstaller, aParent, 1); + setTitle(InstallerUiTexts.get(InstallerUiTexts.INSTALLATION_COMPLETE)); + setCommands(InstallerUiTexts.get(InstallerUiTexts.START), + InstallerUiTexts.get(InstallerUiTexts.CLOSE)); + } + + /** Show launch app query. */ + public boolean launchAppQuery(LaunchAppInfo aLaunchAppInfo) + { + if (isDisposed() || aLaunchAppInfo == null) + { + return false; + } + + iLaunchAppInfo = aLaunchAppInfo; + // Use confirm() from super class to display the view. + boolean result = confirm(); + // Return the result to the client. + return result; + } + + protected void createView() + { + GridData gridData = null; + int labelStyle = SWT.WRAP; + + // Add title. + String title = InstallerUiTexts.get + (InstallerUiTexts.INSTALLATION_COMPLETE); + Label titleLabel = createLabel(title, getColumns(), labelStyle); + + ApplicationInfo[] applications = iLaunchAppInfo.getApplications(); + if (applications != null) + { + // Load suite icon if it is available. + InputStream suiteIconInputStream = + iLaunchAppInfo.getSuiteIconInputStream(); + Image suiteIcon = null; + if (suiteIconInputStream != null) + { + suiteIcon = InstallerUiEswt.loadImage + (getComposite().getDisplay(), suiteIconInputStream, + iLaunchAppInfo.getSuiteIconPath()); + } + + InputStream[] appIconInputStreams = + iLaunchAppInfo.getAppIconInputStreams(); + Button[] appButtons = new Button[applications.length]; + for (int i = 0; i < applications.length; i++) + { + // Load application icon if it is available. + Image appIcon = null; + if (appIconInputStreams != null && + appIconInputStreams.length > i && + appIconInputStreams[i] != null) + { + appIcon = InstallerUiEswt.loadImage + (getComposite().getDisplay(), appIconInputStreams[i], + applications[i].getIconPath()); + } + if (appIcon == null && suiteIcon != null) + { + appIcon = suiteIcon; + } + + // Add launch button for each application. + appButtons[i] = new Button(getComposite(), SWT.PUSH); + gridData = new GridData(GridData.FILL_HORIZONTAL); + appButtons[i].setLayoutData(gridData); + appButtons[i].setText(applications[i].getName()); + appButtons[i].setImage(appIcon); + + // Add listeners for the launch button. + final int index = i; + appButtons[i].addListener(SWT.Selection, new Listener() + { + public void handleEvent(Event aEvent) + { + iLaunchAppInfo.setSelection(index); + confirmOk(); + } + }); + appButtons[i].addFocusListener(new FocusListener() + { + public void focusGained(FocusEvent aEvent) + { + getScrolledComposite().showControl( + (Control)aEvent.widget); + if (!userHasAnswered()) + { + iLaunchAppInfo.setSelection(index); + } + } + public void focusLost(FocusEvent aEvent) + { + // nop + } + }); + addSoftKeyListenerFor(appButtons[i]); + } + iDefaultButton = appButtons[0]; + } + } + + /** + * This method is called after user has answered to query. + */ + protected void getDataFromView() + { + // User selection data is initialized in button listeners. + } + + /** + * Returns true if the View should have focus after it has been opened. + */ + protected boolean forceFocusToView() + { + return false; + } + + /** + * Returns SWT style for this view. + */ + protected int getStyle() + { + return SWT.V_SCROLL; + } + + /** + * Called after view and commands have been created. Subclasses + * can overrride this method to set focus to their own default + * commands. + */ + protected void setDefaultCommand() + { + if (iDefaultButton != null) + { + iDefaultButton.setFocus(); + getShell().setDefaultButton(iDefaultButton); + } + } +}