//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.gef.figures;

import org.eclipse.epf.authoring.ui.AuthoringUIPlugin;
import org.eclipse.swt.graphics.Image;

/**
 * Image location constants referenced in diagram.
 * @author Phong Nguyen Le
 * @since 1.0
 */
public final class Images {

	public static final Image ACTIVITY = AuthoringUIPlugin.getDefault()
			.getImage("shape/activity.gif"); //$NON-NLS-1$

	public static final Image ITERATION = AuthoringUIPlugin.getDefault()
			.getImage("shape/iteration.gif"); //$NON-NLS-1$

	public static final Image PHASE = AuthoringUIPlugin.getDefault().getImage(
			"shape/phase.gif"); //$NON-NLS-1$

	public static final Image MILESTONE = AuthoringUIPlugin.getDefault()
			.getImage("shape/milestone.gif"); //$NON-NLS-1$

	public static final Image ROLE = AuthoringUIPlugin.getDefault().getImage(
			"shape/role.gif"); //$NON-NLS-1$

	public static final Image TASK = AuthoringUIPlugin.getDefault().getImage(
			"shape/task.gif"); //$NON-NLS-1$

	public static final Image TASK_DESCRIPTOR = AuthoringUIPlugin.getDefault()
			.getImage("shape/taskdescriptor.gif"); //$NON-NLS-1$

	public static final Image WORK_PRODUCT_DESCRIPTOR = AuthoringUIPlugin
			.getDefault().getImage("shape/workproductdescriptor.gif"); //$NON-NLS-1$

	public static final Image ARTIFACT = AuthoringUIPlugin.getDefault()
			.getImage("shape/artifact.gif"); //$NON-NLS-1$

	public static final Image DELIVERABLE = AuthoringUIPlugin.getDefault()
			.getImage("shape/deliverable.gif"); //$NON-NLS-1$

	public static final Image OUTCOME = AuthoringUIPlugin.getDefault()
			.getImage("shape/outcome.gif"); //$NON-NLS-1$

	public static final Image WORK_PRODUCT = AuthoringUIPlugin.getDefault()
			.getImage("WorkProductDescriptor.gif"); //$NON-NLS-1$

	public static final Image TASK_DESCRIPTOR_16 = AuthoringUIPlugin
			.getDefault().getImage("shape/taskdes_obj.gif"); //$NON-NLS-1$

	public static final Image ROLE_DESCRIPTOR_16 = AuthoringUIPlugin
			.getDefault().getImage("shape/roledes_obj.gif"); //$NON-NLS-1$

	public static final Image WORK_PRODUCT_DESCRIPTOR_16 = AuthoringUIPlugin
			.getDefault().getImage("shape/workdes_obj.gif"); //$NON-NLS-1$

}
