X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2FIconButtonStyleBase.java;h=4055e8d4aa5ad47fef14bba55cac542d4894c801;hp=04d5a500557a029be35e6c96f97d8d5a6c635423;hb=9588536ba156584e804329920ae85563e6ef0984;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/IconButtonStyleBase.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/IconButtonStyleBase.java index 04d5a5005..4055e8d4a 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/IconButtonStyleBase.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/IconButtonStyleBase.java @@ -1,76 +1,84 @@ -package org.simantics.diagram.profile; - -import java.awt.geom.AffineTransform; - -import org.simantics.datatypes.literal.Vec2d; -import org.simantics.scenegraph.INode; -import org.simantics.scenegraph.g2d.IG2DNode; -import org.simantics.scenegraph.g2d.nodes.SingleElementNode; -import org.simantics.scenegraph.profile.EvaluationContext; -import org.simantics.scenegraph.profile.common.ProfileVariables; -import org.simantics.scenegraph.utils.NodeUtil; - -/** - * @author Antti Villberg - * @author Tuukka Lehtonen - */ -public abstract class IconButtonStyleBase extends StyleBase { - - abstract protected String getNodePrefix(); - abstract protected Class getNodeClass(); - - private AffineTransform translateAndScaleIfNeeded(AffineTransform tr, Vec2d offset, boolean relativeTransform) { - if(relativeTransform) { - if(!offset.isZero()) { - tr = new AffineTransform(tr); - tr.translate(offset.x, offset.y); - } - } else { - Vec2d translation = new Vec2d(tr.getTranslateX()+offset.x, tr.getTranslateY()+offset.y); - tr = new AffineTransform(); - tr.translate(translation.x, translation.y); - } - return tr; - } - - private AffineTransform getSymbolTransform(INode node, Vec2d offset, boolean relativeTransform) { - if(node instanceof SingleElementNode) { - SingleElementNode s = (SingleElementNode)node; - INode symbol = NodeUtil.findChildByPrefix(s, "composite_image"); - return translateAndScaleIfNeeded(symbol != null ? ((IG2DNode)symbol).getTransform() : new AffineTransform(), offset, relativeTransform); - } - return null; - } - - @Override - public void applyStyleForNode(EvaluationContext observer, INode node, T result) { - - if (result == null) { - ProfileVariables.denyChildren(node, getNodePrefix()); - return; - } - - IconButtonState state = result.getState(); - IconButtonConfiguration config = state.getConfiguration(); - - if (config.getOffset() == null) { - ProfileVariables.denyChild(node, getNodePrefix() + config.getId()); - return; - } - - @SuppressWarnings("unchecked") - IconButtonNode iconNode = ProfileVariables.claimChild(node, "", getNodePrefix() + config.getId(), (Class)getNodeClass(), observer); - - iconNode.setZIndex( Integer.MAX_VALUE ); - iconNode.setTransform( getSymbolTransform(node, config.getOffset(), config.getRelativeTransform())); - - iconNode.setData(result); - - } - - @Override - protected void cleanupStyleForNode(EvaluationContext observer, INode node) { - ProfileVariables.denyChildren(node, getNodePrefix()); - } - -} +package org.simantics.diagram.profile; + +import java.awt.geom.AffineTransform; + +import org.simantics.datatypes.literal.Vec2d; +import org.simantics.scenegraph.INode; +import org.simantics.scenegraph.g2d.IG2DNode; +import org.simantics.scenegraph.g2d.nodes.SingleElementNode; +import org.simantics.scenegraph.profile.EvaluationContext; +import org.simantics.scenegraph.profile.common.ProfileVariables; +import org.simantics.scenegraph.utils.NodeUtil; + +/** + * @author Antti Villberg + * @author Tuukka Lehtonen + */ +public abstract class IconButtonStyleBase extends StyleBase { + + abstract protected String getNodePrefix(); + abstract protected Class getNodeClass(); + + public IconButtonStyleBase(Object identity) { + super(identity); + } + + public IconButtonStyleBase() { + super(); + } + + private AffineTransform translateAndScaleIfNeeded(AffineTransform tr, Vec2d offset, boolean relativeTransform) { + if(relativeTransform) { + if(!offset.isZero()) { + tr = new AffineTransform(tr); + tr.translate(offset.x, offset.y); + } + } else { + Vec2d translation = new Vec2d(tr.getTranslateX()+offset.x, tr.getTranslateY()+offset.y); + tr = new AffineTransform(); + tr.translate(translation.x, translation.y); + } + return tr; + } + + private AffineTransform getSymbolTransform(INode node, Vec2d offset, boolean relativeTransform) { + if(node instanceof SingleElementNode) { + SingleElementNode s = (SingleElementNode)node; + INode symbol = NodeUtil.findChildByPrefix(s, "composite_image"); + return translateAndScaleIfNeeded(symbol != null ? ((IG2DNode)symbol).getTransform() : new AffineTransform(), offset, relativeTransform); + } + return null; + } + + @Override + public void applyStyleForNode(EvaluationContext observer, INode node, T result) { + + if (result == null) { + ProfileVariables.denyChildren(node, getNodePrefix()); + return; + } + + IconButtonState state = result.getState(); + IconButtonConfiguration config = state.getConfiguration(); + + if (config.getOffset() == null) { + ProfileVariables.denyChild(node, getNodePrefix() + config.getId()); + return; + } + + @SuppressWarnings("unchecked") + IconButtonNode iconNode = ProfileVariables.claimChild(node, "", getNodePrefix() + config.getId(), (Class)getNodeClass(), observer); + + iconNode.setZIndex( Integer.MAX_VALUE ); + iconNode.setTransform( getSymbolTransform(node, config.getOffset(), config.getRelativeTransform())); + + iconNode.setData(result); + + } + + @Override + protected void cleanupStyleForNode(EvaluationContext observer, INode node) { + ProfileVariables.denyChildren(node, getNodePrefix()); + } + +}