1 package org.simantics.diagram.profile;
\r
3 import java.awt.geom.AffineTransform;
\r
5 import org.simantics.datatypes.literal.Vec2d;
\r
6 import org.simantics.scenegraph.INode;
\r
7 import org.simantics.scenegraph.g2d.IG2DNode;
\r
8 import org.simantics.scenegraph.g2d.nodes.SingleElementNode;
\r
9 import org.simantics.scenegraph.profile.EvaluationContext;
\r
10 import org.simantics.scenegraph.profile.common.ProfileVariables;
\r
11 import org.simantics.scenegraph.utils.NodeUtil;
\r
14 * @author Antti Villberg
\r
15 * @author Tuukka Lehtonen
\r
17 public abstract class IconButtonStyleBase<T extends IconButtonResult> extends StyleBase<T> {
\r
19 abstract protected String getNodePrefix();
\r
20 abstract protected Class<?> getNodeClass();
\r
22 private AffineTransform translateAndScaleIfNeeded(AffineTransform tr, Vec2d offset, boolean relativeTransform) {
\r
23 if(relativeTransform) {
\r
24 if(!offset.isZero()) {
\r
25 tr = new AffineTransform(tr);
\r
26 tr.translate(offset.x, offset.y);
\r
29 Vec2d translation = new Vec2d(tr.getTranslateX()+offset.x, tr.getTranslateY()+offset.y);
\r
30 tr = new AffineTransform();
\r
31 tr.translate(translation.x, translation.y);
\r
36 private AffineTransform getSymbolTransform(INode node, Vec2d offset, boolean relativeTransform) {
\r
37 if(node instanceof SingleElementNode) {
\r
38 SingleElementNode s = (SingleElementNode)node;
\r
39 INode symbol = NodeUtil.findChildByPrefix(s, "composite_image");
\r
40 return translateAndScaleIfNeeded(symbol != null ? ((IG2DNode)symbol).getTransform() : new AffineTransform(), offset, relativeTransform);
\r
46 public void applyStyleForNode(EvaluationContext observer, INode node, T result) {
\r
48 if (result == null) {
\r
49 ProfileVariables.denyChildren(node, getNodePrefix());
\r
53 IconButtonState state = result.getState();
\r
54 IconButtonConfiguration config = state.getConfiguration();
\r
56 if (config.getOffset() == null) {
\r
57 ProfileVariables.denyChild(node, getNodePrefix() + config.getId());
\r
61 @SuppressWarnings("unchecked")
\r
62 IconButtonNode iconNode = ProfileVariables.claimChild(node, "", getNodePrefix() + config.getId(), (Class<IconButtonNode>)getNodeClass(), observer);
\r
64 iconNode.setZIndex( Integer.MAX_VALUE );
\r
65 iconNode.setTransform( getSymbolTransform(node, config.getOffset(), config.getRelativeTransform()));
\r
67 iconNode.setData(result);
\r
72 protected void cleanupStyleForNode(EvaluationContext observer, INode node) {
\r
73 ProfileVariables.denyChildren(node, getNodePrefix());
\r