private void initListeners(HasAllDragAndDropHandlers dropZoneWidget) { removePreviousHandlers(dropZoneWidget); // final Handlers handlers = new Handlers(); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDropHandler(handlers)); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDragOverHandler(handlers)); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDragHandler(handlers)); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDragEndHandler(handlers)); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDragEnterHandler(handlers)); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDragLeaveHandler(handlers)); rememberHandlerRegistration(dropZoneWidget, dropZoneWidget.addDragStartHandler(handlers)); // to clean up on drop zone detach: if (dropZoneWidget instanceof HasAttachHandlers) { ((HasAttachHandlers) dropZoneWidget).addAttachHandler(handlers); } }
private <T extends HasAllDragAndDropHandlers & IsWidget> void set(String type, IsFlowPanel root, Property<T> current, T a) { // just to see one of them not be draggable if (a != view.a4() && a != view.l4()) { a.getIsElement().setAttribute("draggable", "true"); } binder.when(draggingOver(a)).is(true).set(view.style().bold()).on(a); binder.when(dragging(a)).is(true).set(current).to(a); a.addDragStartHandler(e -> e.setData("text", type)); a.addDragOverHandler(e -> e.preventDefault()); a.addDropHandler(e -> { if (type.equals(e.getData("text")) && current.get() != a) { GWT.log("Dropped " + current + " onto " + a); root.remove(current.get()); root.insert(current.get(), root.getWidgetIndex(a)); } e.preventDefault(); }); }