/*******************************************************************************
 * Copyright (c) 2004, 2007 Mylyn project committers 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
 *******************************************************************************/

package org.eclipse.mylyn.internal.sandbox.ui.highlighters;

import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.mylyn.internal.sandbox.ui.SandboxUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.ITaskHighlighter;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.swt.graphics.Color;

/**
 * Decorator that provides a background color for tasks.
 * 
 * NOTE: Setting the background color through a ILightweightLabelDecorator does not seem to work on the task list.
 * 
 * TODO remove ITaskHighlighter and replace by ILightweightLabelDecorator
 * 
 * @author Steffen Pingel
 */
public class TaskHighlighter implements ILightweightLabelDecorator, ITaskHighlighter {

	public TaskHighlighter() {
		TasksUiPlugin.getDefault().setHighlighter(this);
	}

	public void addListener(ILabelProviderListener listener) {
		// ignore
	}

	public void decorate(Object element, IDecoration decoration) {
		if (element instanceof ITask) {
			ITask task = (ITask) element;
			Highlighter highlighter = SandboxUiPlugin.getDefault().getHighlighterForContextId(
					"" + task.getHandleIdentifier());
			if (highlighter != null) {
				decoration.setBackgroundColor(highlighter.getHighlightColor());
			}
		}
	}

	public void dispose() {
		// ignore
	}

	public Color getHighlightColor(ITask task) {
		Highlighter highlighter = SandboxUiPlugin.getDefault().getHighlighterForContextId(
				"" + task.getHandleIdentifier());
		if (highlighter != null) {
			return highlighter.getHighlightColor();
		}
		return null;
	}

	public boolean isLabelProperty(Object element, String property) {
		// ignore
		return false;
	}

	public void removeListener(ILabelProviderListener listener) {
		// ignore
	}

}
