]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java
Sync git svn branch with SVN repository r33269.
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / nodes / SingleElementNode.java
index dc40036a7ff794c19dc0a62a34c1cebef715334b..c6a8b950e0e8a6f22218bb70d0637fc2c45360cd 100644 (file)
@@ -14,20 +14,35 @@ package org.simantics.scenegraph.g2d.nodes;
 import java.awt.AlphaComposite;\r
 import java.awt.Composite;\r
 import java.awt.Graphics2D;\r
+import java.awt.geom.Point2D;\r
+import java.awt.geom.Rectangle2D;\r
 \r
 import org.simantics.scenegraph.g2d.IG2DNode;\r
+import org.simantics.scenegraph.g2d.events.EventTypes;\r
+import org.simantics.scenegraph.g2d.events.MouseEvent;\r
+import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin;\r
 import org.simantics.scenegraph.utils.InitValueSupport;\r
+import org.simantics.scenegraph.utils.NodeUtil;\r
 \r
 public class SingleElementNode extends TransformNode implements InitValueSupport {\r
-    /**\r
-     * \r
-     */\r
+\r
     private static final long serialVersionUID = -4982578347433716440L;\r
 \r
+    private TransferableProvider transferableProvider;\r
     protected Composite composite;\r
     protected Boolean visible = Boolean.TRUE;\r
     protected Boolean hidden = Boolean.FALSE;\r
 \r
+    public void setTransferableProvider(TransferableProvider transferableProvider) {\r
+        if (transferableProvider != this.transferableProvider) {\r
+            if (this.transferableProvider != null)\r
+                removeEventHandler(this);\r
+            if (transferableProvider != null)\r
+                addEventHandler(this);\r
+            this.transferableProvider = transferableProvider;\r
+        }\r
+    }\r
+\r
     @Override\r
     public boolean validate() {\r
         return visible && !hidden;\r
@@ -97,34 +112,6 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
         return sb.toString();\r
     }\r
 \r
-//    private INode findChild(String key) {\r
-//\r
-//     INode result = getNode(key);\r
-//     if(result != null) return result;\r
-//\r
-//     for(Map.Entry<String, IG2DNode> entry : children.entrySet()) {\r
-//\r
-//             if(!(entry.getValue() instanceof SingleElementNode)) {\r
-//                     if(entry.getKey().startsWith(key)) return entry.getValue();\r
-//             }\r
-//\r
-//     }\r
-//\r
-//     for(IG2DNode node : getNodes()) {\r
-//\r
-//             if(node instanceof SingleElementNode) {\r
-//\r
-//                     result = ((SingleElementNode)node).findChild(key);\r
-//                     if(result != null) return result;\r
-//\r
-//             }\r
-//\r
-//     }\r
-//\r
-//     return null;\r
-//\r
-//    }\r
-\r
     protected Composite alphaComposite = null;\r
 \r
     @PropertySetter("alpha")\r
@@ -133,26 +120,6 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
         this.alphaComposite = alphaComposite;\r
     }\r
 \r
-//    public void setValue(String key, Object value) {\r
-//\r
-//        if ("alpha".equals(key)) {\r
-//             Float val = Float.parseFloat((String)value);\r
-//             alphaComposite = AlphaComposite.getInstance(AlphaComposite. SRC_OVER, val);\r
-//        } else {\r
-//\r
-//             String[] parts = key.split("\\.");\r
-//             if(parts.length != 2) return;\r
-//\r
-//             INode child = findChild(parts[0]);\r
-//\r
-//             if(child == null) return;\r
-//\r
-////           child.setValue(parts[1], value);\r
-//\r
-//        }\r
-//\r
-//    }\r
-\r
     @Override\r
     public void initValues() {\r
         alphaComposite = null;\r
@@ -163,4 +130,43 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
         }\r
     }\r
 \r
+    @Override\r
+    public void cleanup() {\r
+        if (transferableProvider != null) {\r
+            removeEventHandler(this);\r
+            transferableProvider = null;\r
+        }\r
+        super.cleanup();\r
+    }\r
+\r
+    protected boolean isDragStartEvent(MouseEvent e) {\r
+        return e.isControlDown();\r
+    }\r
+\r
+    protected boolean hitTest(MouseEvent event) {\r
+        Rectangle2D bounds = super.getBoundsInLocal(false);\r
+        if (bounds == null)\r
+            return false;\r
+        Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double());\r
+        double x = localPos.getX();\r
+        double y = localPos.getY();\r
+        boolean hit = bounds.contains(x, y);\r
+        return hit;\r
+    }\r
+\r
+    @Override\r
+    protected boolean mouseDragged(MouseDragBegin e) {\r
+        if (transferableProvider == null\r
+                || !isDragStartEvent(e)\r
+                || !hitTest(e))\r
+            return false;\r
+        e.transferable = transferableProvider.create();\r
+        return e.transferable != null;\r
+    }\r
+\r
+    @Override\r
+    public int getEventMask() {\r
+        return EventTypes.MouseDragBeginMask;\r
+    }\r
+\r
 }\r