-package org.simantics.diagram.profile;\r
-\r
-import java.awt.geom.AffineTransform;\r
-\r
-import org.simantics.datatypes.literal.Vec2d;\r
-import org.simantics.scenegraph.INode;\r
-import org.simantics.scenegraph.g2d.IG2DNode;\r
-import org.simantics.scenegraph.g2d.nodes.SingleElementNode;\r
-import org.simantics.scenegraph.profile.EvaluationContext;\r
-import org.simantics.scenegraph.profile.common.ProfileVariables;\r
-import org.simantics.scenegraph.utils.NodeUtil;\r
-\r
-/**\r
- * @author Antti Villberg\r
- * @author Tuukka Lehtonen\r
- */\r
-public abstract class IconButtonStyleBase<T extends IconButtonResult> extends StyleBase<T> {\r
-\r
- abstract protected String getNodePrefix();\r
- abstract protected Class<?> getNodeClass();\r
- \r
- private AffineTransform translateAndScaleIfNeeded(AffineTransform tr, Vec2d offset, boolean relativeTransform) {\r
- if(relativeTransform) {\r
- if(!offset.isZero()) {\r
- tr = new AffineTransform(tr);\r
- tr.translate(offset.x, offset.y);\r
- }\r
- } else {\r
- Vec2d translation = new Vec2d(tr.getTranslateX()+offset.x, tr.getTranslateY()+offset.y);\r
- tr = new AffineTransform();\r
- tr.translate(translation.x, translation.y);\r
- }\r
- return tr;\r
- }\r
- \r
- private AffineTransform getSymbolTransform(INode node, Vec2d offset, boolean relativeTransform) {\r
- if(node instanceof SingleElementNode) {\r
- SingleElementNode s = (SingleElementNode)node;\r
- INode symbol = NodeUtil.findChildByPrefix(s, "composite_image"); \r
- return translateAndScaleIfNeeded(symbol != null ? ((IG2DNode)symbol).getTransform() : new AffineTransform(), offset, relativeTransform);\r
- }\r
- return null;\r
- }\r
- \r
- @Override\r
- public void applyStyleForNode(EvaluationContext observer, INode node, T result) {\r
-\r
- if (result == null) {\r
- ProfileVariables.denyChildren(node, getNodePrefix());\r
- return;\r
- }\r
-\r
- IconButtonState state = result.getState();\r
- IconButtonConfiguration config = state.getConfiguration(); \r
- \r
- if (config.getOffset() == null) {\r
- ProfileVariables.denyChild(node, getNodePrefix() + config.getId());\r
- return;\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- IconButtonNode iconNode = ProfileVariables.claimChild(node, "", getNodePrefix() + config.getId(), (Class<IconButtonNode>)getNodeClass(), observer);\r
-\r
- iconNode.setZIndex( Integer.MAX_VALUE );\r
- iconNode.setTransform( getSymbolTransform(node, config.getOffset(), config.getRelativeTransform()));\r
-\r
- iconNode.setData(result);\r
- \r
- }\r
-\r
- @Override\r
- protected void cleanupStyleForNode(EvaluationContext observer, INode node) {\r
- ProfileVariables.denyChildren(node, getNodePrefix());\r
- }\r
-\r
-}\r
+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<T extends IconButtonResult> extends StyleBase<T> {
+
+ 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<IconButtonNode>)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());
+ }
+
+}