javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java Tue Apr 27 16:30:29 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);
+ }
+}