blob: a8920bbaac4a0b7c649f9215156f7a5282832e6c [file] [log] [blame]
package org.eclipse.amp.agf.zest;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.amp.agf.IGraphicsAdapter;
import org.eclipse.amp.agf.gef.GenericEditPart;
import org.eclipse.amp.agf.gef.IFigureProvider;
import org.eclipse.amp.axf.core.ICompositionProvider;
import org.eclipse.core.runtime.Assert;
import org.eclipse.draw2d.Ellipse;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.RoundedRectangle;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.zest.core.viewers.EntityConnectionData;
import org.eclipse.zest.core.viewers.GraphViewer;
import org.eclipse.zest.core.viewers.IConnectionStyleProvider;
import org.eclipse.zest.core.viewers.IEntityStyleProvider;
import org.eclipse.zest.core.widgets.ZestStyles;
public class ZestStyleProvider implements IEntityStyleProvider, ILabelProvider, IColorProvider,
IConnectionStyleProvider, org.eclipse.zest.core.viewers.IFigureProvider {
public final static Color HIGHLIGHT_COLOR = Display.getCurrent().getSystemColor(org.eclipse.swt.SWT.COLOR_YELLOW);
public final static Color LINE_COLOR = Display.getCurrent().getSystemColor(org.eclipse.swt.SWT.COLOR_BLACK);
IGraphicsAdapter graphicsAdapter;
private Map<Object, IColorProvider> colorProviderFor = new HashMap<Object, IColorProvider>();
private HashMap<Object, ILabelProvider> labelProviderFor = new HashMap<Object, ILabelProvider>();
private HashMap<Object, IFigureProvider> figureProviderFor = new HashMap<Object, IFigureProvider>();
private HashMap<Object, IFigure> figureFor = new HashMap<Object, IFigure>();
private ICompositionProvider compositionProvider;
private GraphViewer viewer;
public ZestStyleProvider(GraphViewer viewer, Object object, ICompositionProvider compositionProvider,
IGraphicsAdapter graphicsAdapter) {
super();
this.viewer = viewer;
this.compositionProvider = compositionProvider;
this.graphicsAdapter = graphicsAdapter;
// viewer.addSelectionChangedListener(new SelectionChangedEvent(viewer, null));
}
public boolean fisheyeNode(Object entity) {
return false;
}
public Color getBackgroundColour(Object entity) {
return getBackground(entity);
}
public Color getBorderColor(Object entity) {
return null;
}
public Color getBorderHighlightColor(Object entity) {
return HIGHLIGHT_COLOR;
}
public int getBorderWidth(Object entity) {
return 2;
}
public Color getForegroundColour(Object entity) {
return getForeground(entity);
}
/**
*
* @param entity
* @return
* @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getNodeHighlightColor(java.lang.Object)
*/
public Color getNodeHighlightColor(Object entity) {
return HIGHLIGHT_COLOR;
}
public IFigure getTooltip(Object entity) {
return null;
}
public void dispose() {
}
public Image getImage(Object element) {
if (!(element instanceof EntityConnectionData) && getFigureProvider(element) != null) {
return getLabelProvider(element).getImage(element);
}
return null;
}
public String getText(Object element) {
if (!(element instanceof EntityConnectionData)) {
return getLabelProvider(element).getText(element);
}
return null;
}
public void addListener(ILabelProviderListener listener) {
}
public boolean isLabelProperty(Object element, String property) {
return getLabelProvider(element).isLabelProperty(element, property);
}
public void removeListener(ILabelProviderListener listener) {
}
/**
* @param element
* @return
* @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
*/
public Color getBackground(Object element) {
return getColorProvider(element).getBackground(element);
}
/**
* @param element
* @return
* @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
*/
public Color getForeground(Object element) {
return getColorProvider(element).getForeground(element);
}
/**
* @param rel
* @return
* @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getColor(java.lang.Object)
*/
public Color getColor(Object rel) {
return LINE_COLOR;
}
/**
* @param rel
* @return
* @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getConnectionStyle(java.lang.Object)
*/
public int getConnectionStyle(Object rel) {
return ZestStyles.CONNECTIONS_SOLID;
}
/**
* @param rel
* @return
* @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getHighlightColor(java.lang.Object)
*/
public Color getHighlightColor(Object rel) {
return HIGHLIGHT_COLOR;
}
/**
* @param rel
* @return
* @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getLineWidth(java.lang.Object)
*/
public int getLineWidth(Object rel) {
return 1;
}
public IFigure getFigure(Object element) {
IFigure figure = figureFor.get(element);
if (figure == null) {
figure = getFigureProvider(element).getFigure(element);
figureFor.put(element, figure);
}
if (isSelected(element)) {
highlightFigure(figure);
} else {
figure.setBorder(null);
}
return figure;
}
private boolean isSelected(Object element) {
if (viewer.getSelection() instanceof StructuredSelection) {
StructuredSelection ss = (StructuredSelection) viewer.getSelection();
for (Object sel : ss.toArray()) {
if (sel == element) {
return true;
}
}
}
return false;
}
private void highlightFigure(IFigure figure) {
if (figure instanceof Ellipse) {
figure.setBorder(GenericEditPart.HIGHLIGHT_ELLIPSE);
} else if (figure instanceof RoundedRectangle) {
figure.setBorder(GenericEditPart.HIGHLIGHT_RECTANGLE);
} else {
figure.setBorder(GenericEditPart.HIGHLIGHT_RECTANGLE);
}
}
protected IFigureProvider getFigureProvider(Object object) {
// Object parent = compositionProvider.getParent(object);
IFigureProvider figureProvider = figureProviderFor.get(object);
if (figureProvider == null) {
figureProvider = (IFigureProvider) graphicsAdapter.getAdapter(object, IFigureProvider.class);
figureProviderFor.put(object, figureProvider);
Assert.isNotNull(figureProvider);
}
return figureProvider;
}
protected IColorProvider getColorProvider(Object object) {
// Object parent = compositionProvider.getParent(object);
IColorProvider colorProvider = colorProviderFor.get(object);
if (colorProvider == null) {
colorProvider = (IColorProvider) graphicsAdapter.getAdapter(object, IColorProvider.class);
colorProviderFor.put(object, colorProvider);
Assert.isNotNull(colorProvider);
}
return colorProvider;
}
protected ILabelProvider getLabelProvider(Object object) {
// Object parent = compositionProvider.getParent(object);
ILabelProvider labelProvider = labelProviderFor.get(object);
if (labelProvider == null) {
labelProvider = (ILabelProvider) graphicsAdapter.getAdapter(object, ILabelProvider.class);
labelProviderFor.put(object, labelProvider);
}
return labelProvider;
}
}