javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,353 @@
+/*
+* 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.eswt2;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * ProgressView displays a progress bar.
+ * Value range for the progress bar is between 0 and 100,
+ * unless the progress bar is created as indeterminate
+ * in which case the value is ignored.
+ */
+public class ProgressView extends ViewBase
+{
+    private KeyListener iViewKeyListener = null;
+    private KeyListener iSoftKeyListener = null;
+    private Label iLabel = null;
+    private String iMsg = null;
+    private ProgressBar iProgressBar = null;
+    private boolean iIndeterminate = false;
+    private int iValue = 0;
+    protected Button iHideCommand = null;
+    protected Button iCancelCommand = null;
+
+    /** Constructor */
+    protected ProgressView()
+    {
+        super();
+    }
+
+    /** Constructor */
+    protected ProgressView(InstallerUiEswt aInstaller, Composite aParent)
+    {
+        this(aInstaller, aParent, "");
+    }
+
+    /** Constructor */
+    protected ProgressView(InstallerUiEswt aInstaller, Composite aParent, String aMsg)
+    {
+        this(aInstaller, aParent, aMsg, false);
+    }
+
+    /** Constructor */
+    protected ProgressView(InstallerUiEswt aInstaller, Composite aParent, String aMsg,
+                           boolean aIndeterminate)
+    {
+        super(aInstaller, aParent, 8);
+        iMsg = aMsg;
+
+        // Add header.
+        if (iInstallerUi != null && iInstallerUi.getInstallInfo() != null)
+        {
+            // Add header.
+            addHeader(aMsg, iInstallerUi.getInstallInfo(), null);
+        }
+        else
+        {
+            setTitle(iMsg);
+            iLabel = createLabel(iMsg, SWT.WRAP);
+        }
+
+        iIndeterminate = aIndeterminate;
+        if (iIndeterminate)
+        {
+            iProgressBar = new ProgressBar
+            (getComposite(), SWT.INDETERMINATE | SWT.HORIZONTAL);
+        }
+        else
+        {
+            iProgressBar = new ProgressBar
+            (getComposite(), SWT.SMOOTH | SWT.HORIZONTAL);
+            iProgressBar.setMinimum(0);
+            iProgressBar.setMaximum(100);
+            iProgressBar.setSelection(iValue);
+        }
+        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+        gridData.horizontalSpan = getColumns();
+        iProgressBar.setLayoutData(gridData);
+
+        // After other widgets have been added, add content to
+        // application info Composite.
+        if (iInstallerUi != null)
+        {
+            addAppInfo(iInstallerUi.getInstallInfo(), false);
+        }
+
+        // By default add cancel command to all progress bars.
+        addCancelCommand();
+    }
+
+    /** Update text for this progress bar. */
+    public void setText(String aText)
+    {
+        iMsg = aText;
+        // UI updates must be executed in UI thread.
+        getComposite().getDisplay().syncExec
+        (new Runnable()
+        {
+            public void run()
+            {
+                setTitle(iMsg);
+                iLabel.setText(iMsg);
+                updateSize();
+            }
+        });
+    }
+
+    /** Update value for this progress bar. */
+    public void updateProgress(int aValue)
+    {
+        iValue = aValue;
+        if (iIndeterminate)
+        {
+            // No need to update an indeterminate progress bar.
+            return;
+        }
+        // UI updates must be executed in UI thread.
+        getComposite().getDisplay().syncExec
+        (new Runnable()
+        {
+            public void run()
+            {
+                iProgressBar.setSelection(iValue);
+            }
+        });
+    }
+
+    /**
+     * Adds a cancel command for this progress view.
+     */
+    protected void addCancelCommand()
+    {
+        if (iCancelCommand != null || isDisposed())
+        {
+            // Cancel command has already been added, do not add it anymore.
+            return;
+        }
+        // UI updates must be executed in UI thread.
+        getDisplay().syncExec(new Runnable()
+        {
+            public void run()
+            {
+                iHideCommand = new Button(getCommandComposite(), SWT.PUSH);
+                GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+                gridData.horizontalSpan = 1;
+                iHideCommand.setLayoutData(gridData);
+                iHideCommand.setText("Hide"); //InstallerUiTexts.get(InstallerUiTexts.HIDE));
+                iHideCommand.addSelectionListener
+                (new SelectionListener()
+                {
+                    public void widgetDefaultSelected(SelectionEvent aEvent)
+                    {
+                        widgetSelected(aEvent);
+                    }
+                    public void widgetSelected(SelectionEvent aEvent)
+                    {
+                        confirmHide();
+                    }
+                });
+                addSoftKeyListenerFor(iHideCommand);
+
+                iCancelCommand = new Button(getCommandComposite(), SWT.PUSH);
+                gridData = new GridData(GridData.FILL_HORIZONTAL);
+                gridData.horizontalSpan = 1;
+                iCancelCommand.setLayoutData(gridData);
+                iCancelCommand.setText(
+                    InstallerUiTexts.get(InstallerUiTexts.CANCEL));
+                iCancelCommand.addSelectionListener
+                (new SelectionListener()
+                {
+                    public void widgetDefaultSelected(SelectionEvent aEvent)
+                    {
+                        widgetSelected(aEvent);
+                    }
+                    public void widgetSelected(SelectionEvent aEvent)
+                    {
+                        confirmCancel();
+                    }
+                });
+                addSoftKeyListenerFor(iCancelCommand);
+                // Set the Cancel command to be the default command.
+                iCancelCommand.setFocus();
+                getShell().setDefaultButton(iCancelCommand);
+
+                // Add a KeyListener to handle selection key, LSK and RSK events.
+                addViewKeyListenerFor(getContainer());
+            }
+        });
+    }
+
+    /**
+     * Removes cancel command for this progress view.
+     */
+    protected void removeCancelCommand()
+    {
+        if (iCancelCommand == null || isDisposed())
+        {
+            // Cancel command does not exist, do nothing.
+            return;
+        }
+        // UI updates must be executed in UI thread.
+        getDisplay().syncExec
+        (new Runnable()
+        {
+            public void run()
+            {
+                getShell().setDefaultButton(null);
+                iHideCommand.dispose();
+                iHideCommand = null;
+                iCancelCommand.dispose();
+                iCancelCommand = null;
+            }
+        });
+    }
+
+    /**
+     * This method is called when user cancels the dialog.
+     */
+    protected void confirmCancel()
+    {
+        if (iCancelCommand == null)
+        {
+            // Ignore selection of a non-existing command.
+            return;
+        }
+        if (iInstallerUi != null)
+        {
+            iInstallerUi.cancel();
+        }
+    }
+
+    /**
+     * This method is called when user hides the dialog.
+     */
+    protected void confirmHide()
+    {
+        if (iHideCommand == null)
+        {
+            // Ignore selection of a non-existing command.
+            return;
+        }
+        // Hide the InstallerUi.
+        if (iInstallerUi != null)
+        {
+            log(this + " hide");
+            iInstallerUi.hide(true);
+        }
+    }
+
+    /**
+     * Adds KeyListener for given control. This KeyListener handles
+     * selection key, LSK and RSK.
+     */
+    protected void addViewKeyListenerFor(Control aControl)
+    {
+        if (aControl == null)
+        {
+            return;
+        }
+        if (iViewKeyListener == null)
+        {
+            iViewKeyListener = new KeyListener()
+            {
+                public void keyPressed(KeyEvent aEvent)
+                {
+                    switch (aEvent.keyCode)
+                    {
+                    case SWT.ARROW_UP: // up
+                    case SWT.ARROW_DOWN: // down
+                    case SWT.ARROW_LEFT: // left
+                    case SWT.ARROW_RIGHT: // right
+                        // When View has focus and user presses arrow
+                        // keys, set focus to the default command button.
+                        iCancelCommand.setFocus();
+                        break;
+                    case -5: // selection key
+                        // When View has focus the selection key
+                        // does nothing in progress bar view.
+                        break;
+                    }
+                }
+                public void keyReleased(KeyEvent aEvent)
+                {
+                }
+            };
+        }
+        aControl.addKeyListener(iViewKeyListener);
+        addSoftKeyListenerFor(aControl);
+    }
+
+    /**
+     * Adds KeyListener for given control. This KeyListener handles
+     * LSK and RSK.
+     */
+    protected void addSoftKeyListenerFor(Control aControl)
+    {
+        if (aControl == null)
+        {
+            return;
+        }
+        if (iSoftKeyListener == null)
+        {
+            iSoftKeyListener = new KeyListener()
+            {
+                public void keyPressed(KeyEvent aEvent)
+                {
+                    switch (aEvent.keyCode)
+                    {
+                    case -6: // LSK
+                        // Empty command, do nothing.
+                        break;
+                    case -7: // RSK
+                        confirmCancel();
+                        break;
+                    }
+                }
+                public void keyReleased(KeyEvent aEvent)
+                {
+                }
+            };
+        }
+        aControl.addKeyListener(iSoftKeyListener);
+    }
+}