X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fnodes%2FSingleElementNode.java;h=c6a8b950e0e8a6f22218bb70d0637fc2c45360cd;hp=dc40036a7ff794c19dc0a62a34c1cebef715334b;hb=bf75fd9740858140eac90c18f0bca0aea3893248;hpb=21f879fcd72d7749836fb64375094ef29573fe8c diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java index dc40036a7..c6a8b950e 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java @@ -14,20 +14,35 @@ package org.simantics.scenegraph.g2d.nodes; import java.awt.AlphaComposite; import java.awt.Composite; import java.awt.Graphics2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import org.simantics.scenegraph.g2d.IG2DNode; +import org.simantics.scenegraph.g2d.events.EventTypes; +import org.simantics.scenegraph.g2d.events.MouseEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; import org.simantics.scenegraph.utils.InitValueSupport; +import org.simantics.scenegraph.utils.NodeUtil; public class SingleElementNode extends TransformNode implements InitValueSupport { - /** - * - */ + private static final long serialVersionUID = -4982578347433716440L; + private TransferableProvider transferableProvider; protected Composite composite; protected Boolean visible = Boolean.TRUE; protected Boolean hidden = Boolean.FALSE; + public void setTransferableProvider(TransferableProvider transferableProvider) { + if (transferableProvider != this.transferableProvider) { + if (this.transferableProvider != null) + removeEventHandler(this); + if (transferableProvider != null) + addEventHandler(this); + this.transferableProvider = transferableProvider; + } + } + @Override public boolean validate() { return visible && !hidden; @@ -97,34 +112,6 @@ public class SingleElementNode extends TransformNode implements InitValueSupport return sb.toString(); } -// private INode findChild(String key) { -// -// INode result = getNode(key); -// if(result != null) return result; -// -// for(Map.Entry entry : children.entrySet()) { -// -// if(!(entry.getValue() instanceof SingleElementNode)) { -// if(entry.getKey().startsWith(key)) return entry.getValue(); -// } -// -// } -// -// for(IG2DNode node : getNodes()) { -// -// if(node instanceof SingleElementNode) { -// -// result = ((SingleElementNode)node).findChild(key); -// if(result != null) return result; -// -// } -// -// } -// -// return null; -// -// } - protected Composite alphaComposite = null; @PropertySetter("alpha") @@ -133,26 +120,6 @@ public class SingleElementNode extends TransformNode implements InitValueSupport this.alphaComposite = alphaComposite; } -// public void setValue(String key, Object value) { -// -// if ("alpha".equals(key)) { -// Float val = Float.parseFloat((String)value); -// alphaComposite = AlphaComposite.getInstance(AlphaComposite. SRC_OVER, val); -// } else { -// -// String[] parts = key.split("\\."); -// if(parts.length != 2) return; -// -// INode child = findChild(parts[0]); -// -// if(child == null) return; -// -//// child.setValue(parts[1], value); -// -// } -// -// } - @Override public void initValues() { alphaComposite = null; @@ -163,4 +130,43 @@ public class SingleElementNode extends TransformNode implements InitValueSupport } } + @Override + public void cleanup() { + if (transferableProvider != null) { + removeEventHandler(this); + transferableProvider = null; + } + super.cleanup(); + } + + protected boolean isDragStartEvent(MouseEvent e) { + return e.isControlDown(); + } + + protected boolean hitTest(MouseEvent event) { + Rectangle2D bounds = super.getBoundsInLocal(false); + if (bounds == null) + return false; + Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); + double x = localPos.getX(); + double y = localPos.getY(); + boolean hit = bounds.contains(x, y); + return hit; + } + + @Override + protected boolean mouseDragged(MouseDragBegin e) { + if (transferableProvider == null + || !isDragStartEvent(e) + || !hitTest(e)) + return false; + e.transferable = transferableProvider.create(); + return e.transferable != null; + } + + @Override + public int getEventMask() { + return EventTypes.MouseDragBeginMask; + } + }