/*******************************************************************************
* Copyright (c) 2012 Google, 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:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package com.windowtester.runtime.gef.internal.locator;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import com.windowtester.internal.runtime.locator.LocatorIterator;
import com.windowtester.runtime.IAdaptable;
import com.windowtester.runtime.gef.internal.WTGEFPlugin;
import com.windowtester.runtime.gef.locator.FigureCanvasLocator;
import com.windowtester.runtime.gef.locator.FigureCanvasXYLocator;
import com.windowtester.runtime.gef.locator.FigureClassLocator;
import com.windowtester.runtime.gef.locator.FigureLocator;
import com.windowtester.runtime.gef.locator.PaletteItemLocator;
import com.windowtester.runtime.locator.IItemLocator;
import com.windowtester.runtime.locator.ILocator;
/**
* Figure label provider service.
*/
public class FigureLabelProvider extends LabelProvider {
//public for testing
public static final String FIGURE = "icons/widgets/default_figure.gif";
public static final String PALETTE_ITEM = "icons/widgets/palette_item.gif";
public static final String CANVAS = "icons/widgets/canvas.gif";
private static final class TextProvider {
String getText(Object element) {
if (!(element instanceof ILocator))
return null;
ILocator locator = (ILocator)element;
String text = getLocatorText(locator);
if (text != null)
return text;
LocatorIterator iter = LocatorIterator.forLocator(locator);
for ( ; iter.hasNext(); ) {
locator = iter.next();
text = getLocatorText(locator);
if (text != null)
return text;
}
return null;
}
private String getLocatorText(ILocator locator) {
if (locator instanceof PaletteItemLocator) {
String str = "Palette Item: ";
IItemLocator adapter = (IItemLocator) ((PaletteItemLocator)locator).getAdapter(IItemLocator.class);
if (adapter == null)
return null;
str += "\"" + adapter.getPath() + "\"";
return str;
}
if (locator instanceof FigureClassLocator) {
FigureClassLocator fcl = (FigureClassLocator)locator;
return "Figure (" + fcl.getClassName() +")";
}
if (locator instanceof FigureCanvasLocator) {
return "Figure Canvas";
}
if (locator instanceof FigureCanvasXYLocator) {
return "Figure Canvas";
}
return null;
}
}
private final TextProvider textProvider = new TextProvider();
public static FigureLabelProvider forDelegate(FigureLocatorDelegate delegate) {
return new FigureLabelProvider(); //TODO: arg is ignored -- if not necessary remove
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
*/
public Image getImage(Object element) {
element = adaptToLocatorIfSupported(element);
if (element instanceof FigureCanvasLocator)
return getImage(CANVAS);
if (element instanceof FigureCanvasXYLocator)
return getImage(CANVAS);
if (element instanceof PaletteItemLocatorDelegate)
return getImage(PALETTE_ITEM);
if (element instanceof PaletteItemLocator)
return getImage(PALETTE_ITEM);
if (element instanceof FigureLocatorDelegate)
return getImage(FIGURE);
if (element instanceof DelegatingLocator)
return getImage(FIGURE);
if (element instanceof FigureLocator)
return getImage(FIGURE);
if (element instanceof FigureClassLocator)
return getImage(FIGURE);
return super.getImage(element);
}
//public for testing
public static Image getImage(String imagePath) {
return WTGEFPlugin.getDefault().getImage(imagePath);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
*/
public String getText(Object element) {
element = adaptToLocatorIfSupported(element);
String text = textProvider.getText(element);
if (text != null)
return text;
return super.getText(element);
}
private Object adaptToLocatorIfSupported(Object element) {
if (element instanceof IAdaptable) {
Object adapted = ((IAdaptable)element).getAdapter(ILocator.class);
if (adapted != null)
return adapted;
}
return element;
}
}