blob: 01c5d2afbc0e8a248f1cee2c8fae16bf804dbbcd [file] [log] [blame]
package org.eclipse.gmf.examples.eclipsecon.diagram.custom.editparts;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.draw2d.BorderLayout;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.PrecisionPoint;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.gmf.examples.eclipsecon.diagram.custom.Activator;
import org.eclipse.gmf.examples.eclipsecon.diagram.custom.styles.PresenterStyle;
import org.eclipse.gmf.examples.eclipsecon.diagram.custom.styles.StylesPackage;
import org.eclipse.gmf.examples.eclipsecon.diagram.edit.parts.PresenterEditPart;
import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
import org.eclipse.gmf.runtime.draw2d.ui.render.RenderedImage;
import org.eclipse.gmf.runtime.draw2d.ui.render.factory.RenderedImageFactory;
import org.eclipse.gmf.runtime.draw2d.ui.render.figures.ScalableImageFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.SlidableImageAnchor;
import org.eclipse.gmf.runtime.gef.ui.figures.WrapperNodeFigure;
import org.eclipse.gmf.runtime.notation.View;
public class BetterLookingPresenterEditPart extends PresenterEditPart {
public BetterLookingPresenterEditPart(View view) {
super(view);
// TODO Auto-generated constructor stub
}
private static final String TRANSLATE_PATH_ARGUMENT = "$nl$"; //$NON-NLS-1$
/*
* (non-Javadoc)
* @see org.eclipse.gmf.examples.eclipsecon.diagram.edit.parts.PresenterEditPart#createNodeFigure()
*/
protected NodeFigure createNodeFigure() {
// determine which figure to create - first check for default display
PresenterStyle presenterStyle = (PresenterStyle)getNotationView().getStyle(StylesPackage.eINSTANCE.getPresenterStyle());
if (presenterStyle == null || presenterStyle.getDisplayAsDefault().booleanValue())
return super.createNodeFigure();
// check for URL string
URL presenterURL = null;
try {
URL imageURL = new URL(presenterStyle.getImageURL());
presenterURL = imageURL;
} catch (MalformedURLException e) {
// assume default;
IPath path =
new Path(TRANSLATE_PATH_ARGUMENT).append(
"images" + IPath.SEPARATOR + "presenter.svg"); //$NON-NLS-1$ //$NON-NLS-2$
presenterURL = FileLocator.find(Activator.getDefault().getBundle(), path, null);
}
RenderedImage rndImg = RenderedImageFactory.getInstance(presenterURL);
final ScalableImageFigure sif = new ScalableImageFigure(rndImg, false, true, true);
NodeFigure nf = new WrapperNodeFigure(sif) {
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure#createDefaultAnchor()
*/
protected ConnectionAnchor createDefaultAnchor() {
return new SlidableImageAnchor(this, sif);
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure#createAnchor(org.eclipse.draw2d.geometry.PrecisionPoint)
*/
protected ConnectionAnchor createAnchor(PrecisionPoint p) {
if (p==null)
// If the old terminal for the connection anchor cannot be resolved (by SlidableAnchor) a null
// PrecisionPoint will passed in - this is handled here
return createDefaultAnchor();
return new SlidableImageAnchor(this, sif, p);
}
};
ConstrainedToolbarLayout myGenLayoutManager = new ConstrainedToolbarLayout();
myGenLayoutManager.setStretchMinorAxis(false);
myGenLayoutManager
.setMinorAlignment(org.eclipse.draw2d.ToolbarLayout.ALIGN_TOPLEFT);
myGenLayoutManager.setSpacing(5);
myGenLayoutManager.setVertical(true);
nf.setLayoutManager(myGenLayoutManager);
IFigure pane = new Figure();
pane.setOpaque(false);
pane.setLayoutManager(new BorderLayout());
nf.add(pane);
setupContentPane(pane);
return nf;
}
/**
* @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#handlePropertyChangeEvent(java.beans.PropertyChangeEvent)
*/
protected void handleNotificationEvent(Notification notification) {
Object feature = notification.getFeature();
if (StylesPackage.eINSTANCE.getPresenterStyle_DisplayAsDefault().equals(feature) ||
StylesPackage.eINSTANCE.getPresenterStyle_ImageURL().equals(feature))
handleMajorSemanticChange();
else
super.handleNotificationEvent(notification);
}
}