1 19 20 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget; 21 22 import java.awt.Point ; 23 import org.netbeans.api.visual.action.WidgetAction; 24 import org.netbeans.api.visual.widget.Widget; 25 26 30 public class DnDAction extends WidgetAction.Adapter { 31 32 33 private DnDHandler currentHandler = null; 34 private long lastId = Long.MIN_VALUE; 35 private long dragEnterTime = -1; 36 37 public DnDAction() { 38 39 } 40 41 @Override 42 public WidgetAction.State dragExit(Widget widget, 43 WidgetAction.WidgetDropTargetEvent event) 44 { 45 if (isEventProcessed(event.getEventID())) { 46 return WidgetAction.State.REJECTED; 47 } 48 49 ((PartnerScene) widget.getScene()).getDragOverLayer().resetLayer(); 51 52 if (currentHandler != null) { 53 currentHandler.dragExit(); 54 currentHandler = null; 55 } 56 57 return WidgetAction.State.REJECTED; 58 } 59 60 61 @Override 62 public WidgetAction.State dragOver(Widget widget, 63 WidgetAction.WidgetDropTargetDragEvent event) 64 { 65 if (isEventProcessed(event.getEventID())) { 66 return WidgetAction.State.REJECTED; 67 } 68 69 Point scenePoint = widget.convertLocalToScene(event.getPoint()); 70 71 ((PartnerScene)widget.getScene()).getDragOverLayer().dragOver(scenePoint, event); 73 74 boolean isEventHandled = false; 75 if (widget == currentHandler) { 76 if (dragEnterTime >= 0) { 77 if (System.currentTimeMillis() - dragEnterTime 78 >= EXPAND_TIMEOUT) 79 { 80 currentHandler.expandForDragAndDrop(); 81 dragEnterTime = -1; 82 } 83 } 84 isEventHandled = currentHandler.dragOver(scenePoint, event); 85 } else if (widget instanceof DnDHandler) { 86 if (currentHandler != null) { 87 currentHandler.dragExit(); 88 } 89 90 currentHandler = (DnDHandler) widget; 91 if (currentHandler.isCollapsed()) { 92 dragEnterTime = System.currentTimeMillis(); 93 } else { 94 dragEnterTime = -1; 95 } 96 97 isEventHandled = currentHandler.dragOver(scenePoint, event); 98 } else if (currentHandler != null) { 99 currentHandler.dragExit(); 100 currentHandler = null; 101 dragEnterTime = -1; 102 } 103 if (isEventHandled) { 104 event.acceptDrag(event.getDropAction()); 105 return WidgetAction.State.CONSUMED; 106 } 107 108 event.rejectDrag(); 109 return WidgetAction.State.REJECTED; 110 } 111 112 113 @Override 114 public WidgetAction.State dragEnter(Widget widget, 115 WidgetAction.WidgetDropTargetDragEvent event) 116 { 117 return dragOver(widget, event); 118 } 119 120 121 @Override 122 public WidgetAction.State drop(Widget widget, 123 WidgetAction.WidgetDropTargetDropEvent event) 124 { 125 if (isEventProcessed(event.getEventID())) { 126 return WidgetAction.State.REJECTED; 127 } 128 129 Point scenePoint = widget.convertLocalToScene(event.getPoint()); 130 ((PartnerScene)widget.getScene()).getDragOverLayer().resetLayer(); 132 133 boolean isEventHandled = false; 134 if (currentHandler != null) { 135 isEventHandled = currentHandler.drop(scenePoint, event); 136 currentHandler = null; 137 } 138 139 if (isEventHandled) { 140 event.acceptDrop(event.getDropAction()); 141 return WidgetAction.State.CONSUMED; 142 } 143 144 event.rejectDrop(); 145 return WidgetAction.State.REJECTED; 146 } 147 148 149 private boolean isEventProcessed(long eventId) 150 { 151 if (eventId != lastId) { 152 lastId = eventId; 153 return false; 154 } 155 156 return true; 157 } 158 159 private static final long EXPAND_TIMEOUT = 1500; 160 } 161 | Popular Tags |