javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallConfirmationView.java
changeset 21 2a9601315dfc
child 56 abc41079b313
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallConfirmationView.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,225 @@
+/*
+* 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.InstallInfo;
+
+import java.io.InputStream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * InstallConfirmationView asks installation confirmation
+ * from the user.
+ */
+public class InstallConfirmationView extends ConfirmationViewBase
+{
+    private InstallDetailsView iInstallDetailsView = null;
+    private InstallInfo iInstallInfo = null;
+    /** Application suite icon */
+    private Image iSuiteIcon = null;
+
+    /** Constructor */
+    protected InstallConfirmationView()
+    {
+        super();
+    }
+
+    /** Constructor */
+    protected InstallConfirmationView(InstallerUiEswt aInstaller, Composite aParent)
+    {
+        super(aInstaller, aParent, 8);
+        setTitle(InstallerUiTexts.get(InstallerUiTexts.INSTALL));
+        setCommands(InstallerUiTexts.get(InstallerUiTexts.OK),
+                    InstallerUiTexts.get(InstallerUiTexts.CANCEL));
+    }
+
+    /**
+     * Synchoronous method for asking user confirmation.
+     */
+    public boolean confirm(InstallInfo aInstallInfo)
+    {
+        iInstallInfo = aInstallInfo;
+        boolean result = confirm();
+        if (result)
+        {
+            log("installConfirmationView confirmed");
+        }
+        else
+        {
+            log("installConfirmationView cancelled");
+        }
+        return result;
+    }
+
+    /**
+     * Calls setVisible method for superclass and calls
+     * InstallerUiListener.uiIsReady when this view is
+     * set visible for the first time,
+     */
+    private boolean iUiListenerNotified = false;
+    public void setVisible(boolean aVisible)
+    {
+        super.setVisible(aVisible);
+        if (aVisible && !iUiListenerNotified &&
+                iInstallerUi.getListener() != null)
+        {
+            // Tell installer that UI is now ready and
+            // "preparing installation" indicator can be hidden.
+            iInstallerUi.getListener().uiIsReady();
+            iUiListenerNotified = true;
+        }
+    }
+
+    /**
+     * This method is called once before view is opened.
+     */
+    protected void createView()
+    {
+        GridData gridData = null;
+        int horizontalSpan = getColumns() - 1;
+        int labelStyle = SWT.WRAP;
+
+        // Add suite icon.
+        InputStream iconInputStream = iInstallInfo.getIconInputStream();
+        if (iconInputStream != null)
+        {
+            iSuiteIcon = InstallerUiEswt.loadImage
+                         (getComposite().getDisplay(), iconInputStream,
+                          iInstallInfo.getIconPath());
+            if (iSuiteIcon != null)
+            {
+                Label iconLabel = createLabel(iSuiteIcon, 2, SWT.NONE);
+                horizontalSpan = getColumns() - 3;
+            }
+            else
+            {
+                horizontalSpan = getColumns() - 1;
+            }
+        }
+
+        // Add title.
+        String title = InstallerUiTexts.get
+                       (InstallerUiTexts.INSTALL_QUERY,
+                        new String[] { iInstallInfo.getName() });
+        if (iInstallInfo.getOldVersion() != null)
+        {
+            title = InstallerUiTexts.get
+                    (InstallerUiTexts.UPDATE_QUERY,
+                     new String[] { iInstallInfo.getName(),
+                                    iInstallInfo.getOldVersion(),
+                                    iInstallInfo.getVersion()
+                                  });
+        }
+        Label titleLabel = createLabel(title, horizontalSpan, labelStyle);
+        titleLabel.setFont(iInstallerUi.getBoldFont());
+
+        // Add security icon.
+        boolean identified = (iInstallInfo.getCertificates() != null);
+        Label securityIconLabel = createSecurityLabel(identified);
+
+        horizontalSpan = getColumns();
+
+        // Add link to details.
+        Link detailsLink = new Link(getComposite(), SWT.NONE);
+        detailsLink.setText("<a>" +
+                            InstallerUiTexts.get
+                            (InstallerUiTexts.APP_DETAILS) +
+                            "</a>");
+        detailsLink.addListener(SWT.Selection, new Listener()
+        {
+            public void handleEvent(Event aEvent)
+            {
+                openDetailsView();
+            }
+        });
+        gridData = new GridData(GridData.FILL_HORIZONTAL);
+        gridData.horizontalSpan = horizontalSpan;
+        detailsLink.setLayoutData(gridData);
+        addSoftKeyListenerFor(detailsLink);
+    }
+
+    /**
+     * This method is called after user has answered
+     * to confirmation.
+     */
+    protected void getDataFromView()
+    {
+        // nop
+    }
+
+    /**
+     * Returns SWT style for this view.
+     */
+    protected int getStyle()
+    {
+        return SWT.V_SCROLL;
+    }
+
+    /**
+     * Opens installation details view.
+     */
+    private void openDetailsView()
+    {
+        if (iInstallDetailsView != null)
+        {
+            return;
+        }
+        iInstallDetailsView = new InstallDetailsView(
+            iInstallerUi, getShell(), getTitle(), iInstallInfo, iSuiteIcon);
+        // Hide this view, so that if details view is cancelled
+        // this view is no longer visible.
+        setVisible(false);
+        // New dialog must be opened in a new thread,
+        // because we cannot use the main thread (which
+        // is blocked by InstallConfirmationView) and we
+        // cannot block the UI main thread
+        // where this method gets executed.
+        new Thread(new Runnable()
+        {
+            public void run()
+            {
+                if (iInstallDetailsView.confirm())
+                {
+                    log("installDetailsView confirmed");
+                    confirmOk();
+                }
+                else
+                {
+                    log("installDetailsView cancelled");
+                    confirmCancel();
+                }
+                iInstallDetailsView.dispose();
+                iInstallDetailsView = null;
+            }
+        }, "InstallerUiDetailsViewThread").start();
+    }
+}