/*******************************************************************************
* Copyright (c) 2014 Pivotal Software, Inc.
* 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.gradle.ui.taskview;
import org.eclipse.jface.resource.FontDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.PlatformUI;
import org.gradle.tooling.model.Launchable;
import org.gradle.tooling.model.Task;
import org.gradle.tooling.model.TaskSelector;
import org.gradle.tooling.model.eclipse.EclipseProject;
import org.springsource.ide.eclipse.gradle.ui.GradleUI;
import org.springsource.ide.eclipse.gradle.ui.util.GradleLabelProvider;
import org.springsource.ide.eclipse.gradle.ui.wizards.GradleProjectTreeLabelProviderWithDescription;
/**
* Label provider for Gradle Tasks
*
* @author Kris De Volder
* @author Alex Boyko
*/
public class TaskLabelProvider extends GradleLabelProvider
implements
ITableLabelProvider,
ILabelProvider,
ITableFontProvider {
GradleProjectTreeLabelProviderWithDescription projectLabelProvider = new GradleProjectTreeLabelProviderWithDescription(false);
private Font taskNameFont = null;
public Image getColumnImage(Object element, int columnIndex) {
if (columnIndex == 0) {
if (element instanceof EclipseProject) {
return projectLabelProvider.getColumnImage(element, columnIndex);
} else if (element instanceof Launchable) {
Launchable task = (Launchable) element;
return task.isPublic() ? GradleUI.getDefault().getImageRegistry()
.get(GradleUI.IMAGE_PUBLIC_TASK) : GradleUI.getDefault()
.getImageRegistry().get(GradleUI.IMAGE_INTERNAL_TASK);
}
}
return null;
}
public String getColumnText(Object element, int columnIndex) {
if (element instanceof EclipseProject) {
return projectLabelProvider.getColumnText(element, columnIndex);
} else if (element instanceof Launchable) {
return getColumnText((Launchable)element, columnIndex);
} else {
return element.toString();
}
}
private String getColumnText(Launchable element, int columnIndex) {
switch (columnIndex) {
case 0:
if (element instanceof Task) {
return ((Task)element).getName();
} else if (element instanceof TaskSelector) {
return ((TaskSelector)element).getName();
} else {
return element.getDisplayName();
}
case 1:
return element.getDescription();
default: //There should really only be 2 columns but ...
return "";
}
}
@Override
public void dispose() {
super.dispose();
projectLabelProvider.dispose();
if (taskNameFont != null) {
taskNameFont.dispose();
}
}
public Image getImage(Object element) {
return getColumnImage(element, 0);
}
public String getText(Object element) {
return getColumnText(element, 0);
}
@Override
public Font getFont(Object element, int columnIndex) {
if (columnIndex == 0) {
return getTaskNameFont();
} else {
return JFaceResources.getDefaultFont();
}
}
private Font getTaskNameFont() {
if (taskNameFont == null) {
FontData[] fontData = FontDescriptor.copy(JFaceResources.getDefaultFontDescriptor().getFontData());
for (int i = 0; i < fontData.length; i++) {
fontData[i].setStyle(fontData[i].getStyle() | SWT.BOLD);
}
taskNameFont = FontDescriptor.createFrom(fontData).createFont(PlatformUI.getWorkbench().getDisplay());
}
return taskNameFont;
}
}