/**
* Copyright (c) 2011 committers of YAKINDU 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.ui.editor.submachine;
import org.eclipse.core.runtime.Assert;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.ImageFigure;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.ui.render.util.DiagramRenderUtil;
import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.swt.graphics.Image;
import org.yakindu.base.gmf.runtime.decorators.InteractiveDecorator;
import org.yakindu.sct.model.sgraph.State;
/**
*
* @author andreas muelder - Initial contribution and API
*
*/
public abstract class SubStateDecorator extends InteractiveDecorator {
public SubStateDecorator(IDecoratorTarget decoratorTarget) {
super(decoratorTarget);
}
protected abstract boolean shouldDecorate(State state);
@Override
public boolean shouldDecorate(EObject element) {
return (element instanceof State) ? shouldDecorate((State) element) : false;
}
protected abstract Image getDecorationImage(State state);
@Override
public Image getDecorationImage(EObject element) {
return (element instanceof State) ? getDecorationImage((State) element) : null;
}
protected abstract Diagram getTooltipDiagramToRender(State state);
@Override
protected IFigure getToolTipFigure(EObject element) {
if (element instanceof State) {
Diagram diagram = getTooltipDiagramToRender((State) element);
if (diagram != null) {
Image renderImage = renderImage(diagram);
return new ImageFigure(renderImage);
}
}
return null;
}
protected Image renderImage(Diagram diagram) {
Assert.isNotNull(diagram);
Image renderImage = DiagramRenderUtil.renderToSWTImage(diagram);
Image resize = resize(renderImage, (int) (0.7071 * renderImage.getBounds().width),
(int) (0.7071 * renderImage.getBounds().height));
return resize;
}
}