connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/StatusDisplay.java
author dadubrow
Fri, 26 Feb 2010 11:30:21 -0600
branchRCL_2_4
changeset 1034 42eaaa076776
child 1047 cc3916f16460
permissions -rw-r--r--
Add support for status notification popups
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1034
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     1
/**
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     3
* All rights reserved.
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     4
* This component and the accompanying materials are made available
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     6
* which accompanies this distribution, and is available
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     8
*
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
     9
* Initial Contributors:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    11
*
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    12
* Contributors:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    13
*
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    14
* Description: 
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    15
*
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    16
*/
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    17
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    18
package com.nokia.carbide.remoteconnections.internal.ui;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    19
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    20
import java.text.MessageFormat;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    21
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    22
import org.eclipse.core.runtime.IStatus;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    23
import org.eclipse.jface.dialogs.Dialog;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    24
import org.eclipse.jface.layout.GridLayoutFactory;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    25
import org.eclipse.jface.resource.JFaceResources;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    26
import org.eclipse.mylyn.internal.provisional.commons.ui.AbstractNotificationPopup;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    27
import org.eclipse.swt.SWT;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    28
import org.eclipse.swt.events.DisposeEvent;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    29
import org.eclipse.swt.events.DisposeListener;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    30
import org.eclipse.swt.events.SelectionAdapter;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    31
import org.eclipse.swt.events.SelectionEvent;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    32
import org.eclipse.swt.graphics.Image;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    33
import org.eclipse.swt.layout.GridData;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    34
import org.eclipse.swt.widgets.Composite;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    35
import org.eclipse.swt.widgets.Display;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    36
import org.eclipse.swt.widgets.Label;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    37
import org.eclipse.swt.widgets.Link;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    38
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    39
import com.nokia.carbide.remoteconnections.internal.api.IStatusDisplay;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    40
import com.nokia.cpp.internal.api.utils.core.Check;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    41
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    42
@SuppressWarnings("restriction")
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    43
public class StatusDisplay implements IStatusDisplay {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    44
		
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    45
	private final class NotificationPopup extends AbstractNotificationPopup {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    46
		private final IStatus status;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    47
		private final String prompt;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    48
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    49
		private NotificationPopup(Display display, IStatus status, String prompt) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    50
			super(display);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    51
			this.status = status;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    52
			this.prompt = prompt;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    53
			setDelayClose(30 * 1000);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    54
		}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    55
		
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    56
		protected void createContentArea(Composite composite) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    57
			GridLayoutFactory.fillDefaults().margins(5, 5).applyTo(composite);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    58
			Label label = new Label(composite, SWT.WRAP);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    59
			label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    60
			label.setText(status.getMessage());
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    61
			label.setBackground(composite.getBackground());
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    62
			if (prompt != null) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    63
				Link link = new Link(composite, SWT.WRAP);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    64
				link.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    65
				link.setText(MessageFormat.format("<a href=\"{0}\">{0}</a>", prompt));
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    66
				link.setBackground(composite.getBackground());
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    67
				link.addSelectionListener(new SelectionAdapter() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    68
					public void widgetSelected(SelectionEvent e) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    69
						clicked = true;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    70
						NotificationPopup.this.close();
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    71
					}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    72
				});
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    73
			}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    74
		}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    75
		
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    76
		@Override
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    77
		protected String getPopupShellTitle() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    78
			switch (status.getSeverity()) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    79
			case IStatus.INFO:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    80
				return "Information";
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    81
			case IStatus.WARNING:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    82
				return "Warning";
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    83
			case IStatus.ERROR:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    84
				return "Error";
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    85
			};
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    86
			Check.checkState(false);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    87
			return null;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    88
		}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    89
	 
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    90
		@Override
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    91
		protected Image getPopupShellImage(int maximumHeight) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    92
			switch (status.getSeverity()) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    93
			case IStatus.INFO:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    94
				return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_INFO);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    95
			case IStatus.WARNING:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    96
				return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    97
			case IStatus.ERROR:
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    98
				return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
    99
			};
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   100
			Check.checkState(false);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   101
			return null;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   102
		}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   103
	}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   104
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   105
	private boolean clicked;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   106
	private boolean closed;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   107
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   108
	public StatusDisplay() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   109
	}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   110
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   111
	public void displayStatus(final IStatus status) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   112
		final Display display = Display.getDefault();
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   113
		display.syncExec(new Runnable() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   114
			public void run() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   115
				doDisplayStatus(display, null, status);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   116
			}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   117
		});
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   118
	}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   119
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   120
	public void displayStatusWithAction(final IStatus status, final String prompt, Runnable action) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   121
		final Display display = Display.getDefault();
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   122
		display.asyncExec(new Runnable() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   123
			public void run() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   124
				doDisplayStatus(display, prompt, status);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   125
			}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   126
		});
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   127
		while (!closed) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   128
			try {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   129
				Thread.sleep(200);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   130
			} catch (InterruptedException e1) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   131
			}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   132
		}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   133
		if (clicked)
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   134
			action.run();
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   135
	}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   136
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   137
	protected void doDisplayStatus(Display display, String prompt, IStatus status) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   138
		NotificationPopup popup = new NotificationPopup(display, status, prompt);
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   139
		popup.open();
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   140
		popup.getShell().addDisposeListener(new DisposeListener() {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   141
			public void widgetDisposed(DisposeEvent e) {
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   142
				StatusDisplay.this.closed = true;
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   143
			}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   144
		});
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   145
	}
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   146
42eaaa076776 Add support for status notification popups
dadubrow
parents:
diff changeset
   147
}