blob: f3f43171411065de1648a2eefd3f9177aecf46f9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.notifications;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.LegacyActionTools;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.mylyn.commons.notifications.ui.AbstractUiNotification;
import org.eclipse.mylyn.commons.workbench.AbstractWorkbenchNotificationPopup;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.ui.TaskScalingHyperlink;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
/**
* @author Rob Elves
* @author Mik Kersten
*/
public class TaskListNotificationPopup extends AbstractWorkbenchNotificationPopup {
private static final String NOTIFICATIONS_HIDDEN = Messages.TaskListNotificationPopup_more;
private static final int NUM_NOTIFICATIONS_TO_DISPLAY = 4;
private List<AbstractUiNotification> notifications;
public TaskListNotificationPopup(Shell parent) {
super(parent.getDisplay());
}
public void setContents(List<AbstractUiNotification> notifications) {
this.notifications = notifications;
}
public List<AbstractUiNotification> getNotifications() {
return new ArrayList<AbstractUiNotification>(notifications);
}
@Override
protected void createTitleArea(Composite parent) {
super.createTitleArea(parent);
}
@Override
protected Color getTitleForeground() {
return TasksUiPlugin.getDefault().getFormColors(Display.getDefault()).getColor(IFormColors.TITLE);
}
@Override
protected void createContentArea(Composite parent) {
int count = 0;
for (final AbstractUiNotification notification : notifications) {
Composite notificationComposite = new Composite(parent, SWT.NO_FOCUS);
GridLayout gridLayout = new GridLayout(2, false);
GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(notificationComposite);
notificationComposite.setLayout(gridLayout);
notificationComposite.setBackground(parent.getBackground());
if (count < NUM_NOTIFICATIONS_TO_DISPLAY) {
final Label notificationLabelIcon = new Label(notificationComposite, SWT.NO_FOCUS);
notificationLabelIcon.setBackground(parent.getBackground());
notificationLabelIcon.setImage(notification.getNotificationKindImage());
if (!(notification instanceof TaskListNotificationReminder)) {
final AbstractTask task = (AbstractTask) notification.getAdapter(AbstractTask.class);
if (task != null) {
notificationLabelIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
TasksUiPlugin.getTaskDataManager().setTaskRead(task, true);
notificationLabelIcon.setImage(null);
notificationLabelIcon.setToolTipText(null);
}
});
notificationLabelIcon.setToolTipText(Messages.TaskListNotificationPopup_Mark_Task_Read);
}
}
final TaskScalingHyperlink itemLink = new TaskScalingHyperlink(notificationComposite, SWT.BEGINNING
| SWT.NO_FOCUS);
GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(itemLink);
itemLink.setText(LegacyActionTools.escapeMnemonics(notification.getLabel()));
itemLink.setImage(notification.getNotificationImage());
itemLink.setBackground(parent.getBackground());
itemLink.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
notification.open();
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
Shell windowShell = window.getShell();
if (windowShell != null) {
if (windowShell.getMinimized()) {
windowShell.setMinimized(false);
}
windowShell.open();
windowShell.forceActive();
}
}
}
});
String descriptionText = null;
if (notification.getDescription() != null) {
descriptionText = notification.getDescription();
}
if (descriptionText != null && !descriptionText.trim().equals("")) { //$NON-NLS-1$
Label descriptionLabel = new Label(notificationComposite, SWT.NO_FOCUS);
descriptionLabel.setText(LegacyActionTools.escapeMnemonics(descriptionText));
descriptionLabel.setBackground(parent.getBackground());
GridDataFactory.fillDefaults()
.span(2, SWT.DEFAULT)
.grab(true, false)
.align(SWT.FILL, SWT.TOP)
.applyTo(descriptionLabel);
}
} else {
int numNotificationsRemain = notifications.size() - count;
TaskScalingHyperlink remainingHyperlink = new TaskScalingHyperlink(notificationComposite, SWT.NO_FOCUS);
remainingHyperlink.setBackground(parent.getBackground());
remainingHyperlink.setText(numNotificationsRemain + " " + NOTIFICATIONS_HIDDEN); //$NON-NLS-1$
GridDataFactory.fillDefaults().span(2, SWT.DEFAULT).applyTo(remainingHyperlink);
remainingHyperlink.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
TasksUiUtil.openTasksViewInActivePerspective().setFocus();
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
Shell windowShell = window.getShell();
if (windowShell != null) {
windowShell.setMaximized(true);
windowShell.open();
}
}
}
});
break;
}
count++;
}
}
}