blob: 24631aa15bb4964bcffc5c071941d56f02f16ff9 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2002, 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 API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.providers.internal;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.internal.properties.Properties;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
import org.eclipse.gmf.runtime.diagram.ui.services.decorator.AbstractDecorator;
import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
import org.eclipse.gmf.runtime.draw2d.ui.figures.HashedCircle;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.LineStyle;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
/**
* Provides the unresolved view adornment for the views
* on a diagram that expect a non-null model reference.
*
* @author cmahoney
*/
public class UnresolvedViewDecorator
extends AbstractDecorator {
/**
* Creates a new <code>UnresolvedViewDecorator</code>.
* @param decoratorTarget
*/
public UnresolvedViewDecorator(IDecoratorTarget decoratorTarget) {
super(decoratorTarget);
}
/**
* Creates the appropriate unresolved view decoration if all the
* criteria is satisfied by the view passed in.
* @see org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecorator#refresh()
*/
public void refresh() {
removeDecoration();
EditPart editPart = (EditPart)getDecoratorTarget().getAdapter(EditPart.class);
View view = (View) getDecoratorTarget().getAdapter(View.class);
if (!(editPart instanceof IPrimaryEditPart)) {
return;
}
EObject element = ViewUtil.resolveSemanticElement(view);
int radius = MapModeUtil.getMapMode(((GraphicalEditPart)editPart).getFigure()).DPtoLP(8);
if (editPart instanceof ShapeEditPart && element == null) {
HashedCircle circle = new HashedCircle(HashedCircle.HashType.X,
radius);
circle.setFill(false);
setDecoration(getDecoratorTarget().addShapeDecoration(circle,
IDecoratorTarget.Direction.NORTH_EAST, MapModeUtil.getMapMode(((ShapeEditPart)editPart).getFigure()).DPtoLP(-4),
false));
} else if (view instanceof Edge) {
Edge connectorView = (Edge)view;
if (element == null) {
HashedCircle circle = new HashedCircle(HashedCircle.HashType.X,
radius);
circle.setFill(false);
setDecoration(getDecoratorTarget().addConnectionDecoration(
circle, 50, false));
} else if ((connectorView.getTarget() != null)&&(ViewUtil
.resolveSemanticElement(connectorView.getTarget()) == null)) {
HashedCircle circle = new HashedCircle(
HashedCircle.HashType.BACKSLASH, radius);
circle.setFill(false);
setDecoration(getDecoratorTarget().addConnectionDecoration(
circle, 70, false));
}
}
if (getDecoration() == null) {
return;
}
if (ViewUtil.isPropertySupported(view,Properties.ID_LINECOLOR)) {
LineStyle style = (LineStyle) view.getStyle(NotationPackage.eINSTANCE.getLineStyle());
getDecoration().setForegroundColor(
DiagramColorRegistry.getInstance().getColor(new Integer(style.getLineColor())));
}
}
/**
* Adds decoration if applicable.
* @see org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecorator#activate()
*/
public void activate() {
refresh();
}
}