/******************************************************************************* * Copyright (c) 2004, 2015 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.tasks.ui; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.mylyn.commons.ui.CommonImages; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.ITaskRepositoryElement; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.mylyn.tasks.ui.TasksUiImages; /** * @author Mik Kersten */ public class TaskLabelDecorator implements ILightweightLabelDecorator { public void decorate(Object element, IDecoration decoration) { ImageDescriptor priorityOverlay = getPriorityImageDescriptor(element); if (priorityOverlay != null) { decoration.addOverlay(priorityOverlay, IDecoration.BOTTOM_LEFT); } if (element instanceof ITask) { ITask task = (ITask) element; if (!task.isCompleted() && (TasksUiPlugin.getTaskActivityManager().isDueToday(task) || TasksUiPlugin.getTaskActivityManager() .isOverdue(task))) { decoration.addOverlay(CommonImages.OVERLAY_DATE_OVERDUE, IDecoration.TOP_RIGHT); } else if (!task.isCompleted() && task.getDueDate() != null) { decoration.addOverlay(CommonImages.OVERLAY_DATE_DUE, IDecoration.TOP_RIGHT); } if (hasNotes(task)) { decoration.addOverlay(TasksUiImages.NOTES, IDecoration.BOTTOM_RIGHT); } } else if (element instanceof ITaskRepositoryElement) { ITaskRepositoryElement repositoryElement = (ITaskRepositoryElement) element; String repositoryUrl = repositoryElement.getRepositoryUrl(); TaskRepository taskRepository = TasksUi.getRepositoryManager().getRepository( repositoryElement.getConnectorKind(), repositoryUrl); if (taskRepository != null) { decoration.addSuffix(" [" + taskRepository.getRepositoryLabel() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ } } else if (element instanceof TaskRepository) { ImageDescriptor overlay = TasksUiPlugin.getDefault().getBrandManager().getOverlayIcon((TaskRepository) element); if (overlay != null) { decoration.addOverlay(overlay, IDecoration.BOTTOM_RIGHT); } } } public void addListener(ILabelProviderListener listener) { // ignore } public void dispose() { // ignore } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { // ignore } private ImageDescriptor getPriorityImageDescriptor(Object element) { AbstractRepositoryConnectorUi connectorUi; if (element instanceof ITask) { ITask repositoryTask = (ITask) element; connectorUi = TasksUiPlugin.getConnectorUi(((ITask) element).getConnectorKind()); if (connectorUi != null) { return connectorUi.getTaskPriorityOverlay(repositoryTask); } } if (element instanceof ITask) { return TasksUiInternal.getPriorityImage((ITask) element); } return null; } private boolean hasNotes(ITask task) { if (task instanceof AbstractTask) { return !((AbstractTask) task).getNotes().isEmpty(); } return false; } }