*******************************************************************************/
package org.simantics.scenegraph.g2d.events;
-import java.awt.Component;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragSourceDragEvent;
-import java.awt.dnd.DragSourceDropEvent;
-import java.awt.dnd.DragSourceEvent;
-import java.awt.dnd.DragSourceListener;
-import java.awt.event.InputEvent;
-import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import org.simantics.scenegraph.g2d.IG2DNode;
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent;
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin;
-import org.simantics.scenegraph.g2d.events.adapter.AWTMouseEventAdapter;
import org.simantics.scenegraph.g2d.events.command.CommandEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Delivers events (mouse, key, focus, command, time) to scene graph nodes that
*/
public class NodeEventHandler implements IEventHandler {
+ private static final Logger LOGGER = LoggerFactory.getLogger(NodeEventHandler.class);
+
private static final boolean DEBUG_EVENTS = false;
private static final boolean DEBUG_HANDLER_SORT = false;
*/
protected G2DSceneGraph sg;
- /**
- * For proper initiation of native DnD operations within this AWT-based
- * scenegraph system.
- */
- protected DragSource ds = new DragSource();
-
public NodeEventHandler(G2DSceneGraph sg) {
this.sg = sg;
}
return sort;
}
- public void setRootPane(Component rootPane) {
- final DragSourceListener dsl = new DragSourceListener() {
- @Override
- public void dropActionChanged(DragSourceDragEvent dsde) {
- }
- @Override
- public void dragOver(DragSourceDragEvent dsde) {
- }
- @Override
- public void dragExit(DragSourceEvent dse) {
- }
- @Override
- public void dragEnter(DragSourceDragEvent dsde) {
- }
- @Override
- public void dragDropEnd(DragSourceDropEvent dsde) {
- }
- };
- DragGestureListener dgl = new DragGestureListener() {
- @Override
- public void dragGestureRecognized(DragGestureEvent dge) {
- InputEvent ie = dge.getTriggerEvent();
- if (ie instanceof java.awt.event.MouseEvent) {
- java.awt.event.MouseEvent e = (java.awt.event.MouseEvent) ie;
- Point2D controlPos = AWTMouseEventAdapter.getControlPosition(e);
- MouseDragBegin event = new MouseDragBegin(NodeEventHandler.this,
- e.getWhen(), 0,
- AWTMouseEventAdapter.getButtonStatus(e),
- AWTMouseEventAdapter.getStateMask(e),
- AWTMouseEventAdapter.getMouseButton(e),
- // TODO: fix canvas position if necessary
- new Point2D.Double(),
- controlPos,
- controlPos,
- AWTMouseEventAdapter.getScreenPosition(e));
-
- // Send MouseDragBegin to the scenegraph and see
- // if anyone sets event.transferable to start DnD.
- handleMouseDragBeginEvent(event, EventTypes.MouseDragBegin);
- if (event.transferable != null) {
- ds.startDrag(dge, null, event.transferable, dsl);
- if (DEBUG_EVENTS)
- debug("dragGestureRecognized: startDrag " + event.transferable);
- }
- }
- }
- };
- ds.createDefaultDragGestureRecognizer(
- rootPane,
- DnDConstants.ACTION_COPY_OR_MOVE | DnDConstants.ACTION_LINK,
- dgl);
- ds.addDragSourceListener(dsl);
- }
-
public boolean mousePressed(MouseButtonPressedEvent event) {
G2DFocusManager.INSTANCE.clearFocus();
try {