/** * upcall from native code via implemented class (do) */ protected final void dragDropFinished(final boolean success, final int operations, final int x, final int y) { DragSourceEvent event = new DragSourceDropEvent(getDragSourceContext(), operations & sourceActions, success, x, y); EventDispatcher dispatcher = new EventDispatcher(DISPATCH_FINISH, event); SunToolkit.invokeLaterOnAppContext( SunToolkit.targetToAppContext(getComponent()), dispatcher); startSecondaryEventLoop(); setNativeContext(0); dragImage = null; dragImageOffset = null; }
EventDispatcher(int dispatchType, DragSourceEvent event) { switch (dispatchType) { case DISPATCH_ENTER: case DISPATCH_MOTION: case DISPATCH_CHANGED: case DISPATCH_MOUSE_MOVED: if (!(event instanceof DragSourceDragEvent)) { throw new IllegalArgumentException("Event: " + event); } break; case DISPATCH_EXIT: break; case DISPATCH_FINISH: if (!(event instanceof DragSourceDropEvent)) { throw new IllegalArgumentException("Event: " + event); } break; default: throw new IllegalArgumentException("Dispatch type: " + dispatchType); } this.dispatchType = dispatchType; this.event = event; }
ImageDragSource() { formats = retrieveFormatsToTest(); passedArray = new boolean[formats.length]; final DragSourceListener dsl = new DragSourceAdapter() { public void dragDropEnd(DragSourceDropEvent e) { System.err.println("Drop was successful=" + e.getDropSuccess()); notifyTransferSuccess(e.getDropSuccess()); if (++fi < formats.length) { leaveFormat(formats[fi]); } } }; new DragSource().createDefaultDragGestureRecognizer(frame, DnDConstants.ACTION_COPY, dge -> dge.startDrag(null, new ImageSelection(image), dsl)); leaveFormat(formats[fi]); }
protected void endDrag(DragSourceDropEvent e) { if(draggingComponent!=null) { Point p = e.getLocation(); SwingUtilities.convertPointFromScreen(p, this); if(contains(p)==false) { //adding this extra ability to commit changes //makes sure if you simply drag an element //off the toolbar: it gets recorded. setContents(getContents(new Point(-1000,-1000))); } } draggingComponent = null; /** TODO: is there some way when a drop ends if it IS * accepted to NOT show the image slide back to its original * location? For example: * 1. Open this demo app * 2. Click "Customize" * 3. Drag a component off the toolbar in the window * into nothingness. * Note the *image* slides back to where it came from, because * this is how the OS shows the drag was not accepted. But * even though it was not accepted by any other entity: * the drag was successful, and showing that sliding image is * incorrect. */ }
public void run() { switch (type) { case DRAG_ENTER: context.dragEnter(newDragSourceDragEvent()); break; case DRAG_OVER: context.dragOver(newDragSourceDragEvent()); break; case DRAG_ACTION_CHANGED: context.dropActionChanged(newDragSourceDragEvent()); break; case DRAG_MOUSE_MOVED: context.dragMouseMoved(newDragSourceDragEvent()); break; case DRAG_EXIT: context.dragExit(new DragSourceEvent(context, x, y)); break; case DRAG_DROP_END: context.dragExit(new DragSourceDropEvent( context, userAction, success, x, y)); break; } }
@Override public void dragDropEnd(DragSourceDropEvent dsde) { // boolean dropSuccess = dsde.getDropSuccess(); // if(dropSuccess) // { // if(dsde.getDropAction() == FileTransferHandler.MOVE) // { // for(MyFile file : files) // { // updateModel(file, FileTransferDialog.MODEL_ACTION_REMOVE); // } // } // } super.dragDropEnd(dsde); }
/** * as the operation completes */ @Override public void dragDropEnd(DragSourceDropEvent dsde) { DragSourceContext dsc = dsde.getDragSourceContext(); JComponent c = (JComponent) dsc.getComponent(); if (dsde.getDropSuccess()) { ((AbstractPatchedTransferHandler) c.getTransferHandler()).exportDone(c, dsc.getTransferable(), dsde.getDropAction()); } else { ((AbstractPatchedTransferHandler) c.getTransferHandler()).exportDone(c, dsc.getTransferable(), NONE); } c.setAutoscrolls(scrolls); fireDragEnded(); }
/** * {@inheritDoc} */ public void dragDropEnd(DragSourceDropEvent dsde) { DragSourceContext dsc = dsde.getDragSourceContext(); JComponent c = (JComponent)dsc.getComponent(); if (dsde.getDropSuccess()) { ((DefaultTransferHandler)c.getTransferHandler()).exportDone(c, dsc.getTransferable(), dsde.getDropAction()); } else { ((DefaultTransferHandler)c.getTransferHandler()).exportDone(c, null, NONE); } c.setAutoscrolls(scrolls); }
public void run() { DragSourceContext dragSourceContext = SunDragSourceContextPeer.this.getDragSourceContext(); try { switch (dispatchType) { case DISPATCH_ENTER: dragSourceContext.dragEnter((DragSourceDragEvent)event); break; case DISPATCH_MOTION: dragSourceContext.dragOver((DragSourceDragEvent)event); break; case DISPATCH_CHANGED: dragSourceContext.dropActionChanged((DragSourceDragEvent)event); break; case DISPATCH_EXIT: dragSourceContext.dragExit(event); break; case DISPATCH_MOUSE_MOVED: dragSourceContext.dragMouseMoved((DragSourceDragEvent)event); break; case DISPATCH_FINISH: try { dragSourceContext.dragDropEnd((DragSourceDropEvent)event); } finally { SunDragSourceContextPeer.this.cleanup(); } break; default: throw new IllegalStateException("Dispatch type: " + dispatchType); } } finally { SunDragSourceContextPeer.this.quitSecondaryEventLoop(); } }
/** * */ protected void installDragGestureHandler() { DragGestureListener dragGestureListener = new DragGestureListener() { public void dragGestureRecognized(DragGestureEvent e) { if (graphComponent.isDragEnabled() && first != null) { final TransferHandler th = graphComponent.getTransferHandler(); if (th instanceof mxGraphTransferHandler) { final mxGraphTransferable t = (mxGraphTransferable) ((mxGraphTransferHandler) th) .createTransferable(graphComponent); if (t != null) { e.startDrag(null, mxSwingConstants.EMPTY_IMAGE, new Point(), t, new DragSourceAdapter() { /** * */ public void dragDropEnd(DragSourceDropEvent dsde) { ((mxGraphTransferHandler) th).exportDone(graphComponent, t, TransferHandler.NONE); first = null; } }); } } } } }; DragSource dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer(graphComponent.getGraphControl(), (isCloneEnabled()) ? DnDConstants.ACTION_COPY_OR_MOVE : DnDConstants.ACTION_MOVE, dragGestureListener); }