/** * Called when a component changed location within the layout * * @param event The drag and drop event */ @Override protected void handleComponentReordering(DragAndDropEvent event) { AbsoluteLayoutTargetDetails details = (AbsoluteLayoutTargetDetails) event.getTargetDetails(); DDAbsoluteLayout layout = (DDAbsoluteLayout) details.getTarget(); LayoutBoundTransferable transferable = (LayoutBoundTransferable) event.getTransferable(); Component component = transferable.getComponent(); // Get top-left pixel position int leftPixelPosition = details.getRelativeLeft(); int topPixelPosition = details.getRelativeTop(); ComponentPosition position = layout.getPosition(component); position.setLeft((float) leftPixelPosition, Sizeable.UNITS_PIXELS); position.setTop((float) topPixelPosition, Sizeable.UNITS_PIXELS); }
@SuppressWarnings("static-access") void reload() { Collection<?> children = folder == null ? DDTest6.get().tree1.rootItemIds() : DDTest6.get().tree1.getChildren(folder); if (children == null) { l.removeAllComponents(); return; } else { // make modifiable children = new HashSet<Object>(children); } Set<Component> removed = new HashSet<Component>(); for (Iterator<Component> componentIterator = l.getComponentIterator(); componentIterator.hasNext(); ) { FileIcon next = (FileIcon) componentIterator.next(); if (!children.contains(next.file)) { removed.add(next); } else { children.remove(next.file); } } for (Component component : removed) { l.removeComponent(component); } for (Object object : children) { FileIcon fileIcon = new FileIcon((File) object); l.addComponent(fileIcon); ComponentPosition position = l.getPosition(fileIcon); position.setTop(Float.valueOf((y++ / 5) % 5 * 100), UNITS_PIXELS); position.setLeft(Float.valueOf(x++ % 5 * 100), UNITS_PIXELS); } }
@Override @SuppressWarnings("static-access") public void drop(DragAndDropEvent dropEvent) { if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) { // update the position DragAndDropWrapper.WrapperTransferable transferable = (WrapperTransferable) dropEvent.getTransferable(); MouseEventDetails mouseDownEvent = transferable.getMouseDownEvent(); WrapperTargetDetails dropTargetDetails = (WrapperTargetDetails) dropEvent.getTargetDetails(); MouseEventDetails mouseEvent = dropTargetDetails.getMouseEvent(); int deltaX = mouseEvent.getClientX() - mouseDownEvent.getClientX(); int deltaY = mouseEvent.getClientY() - mouseDownEvent.getClientY(); ComponentPosition position = l.getPosition(transferable.getSourceComponent()); position.setTop(position.getTopValue() + deltaY, UNITS_PIXELS); position.setLeft(position.getLeftValue() + deltaX, UNITS_PIXELS); } else if (dropEvent.getTransferable().getSourceComponent() == tree1) { // dragged something from tree to the folder shown File draggedFile = (File) ((DataBoundTransferable) dropEvent.getTransferable()).getItemId(); DDTest6.get().setParent(draggedFile, folder); } else { // expecting this to be an html5 drag WrapperTransferable tr = (WrapperTransferable) dropEvent.getTransferable(); Html5File[] files2 = tr.getFiles(); if (files2 != null) { for (Html5File html5File : files2) { String fileName = html5File.getFileName(); // int bytes = html5File.getFileSize(); final ByteArrayOutputStream bas = new ByteArrayOutputStream(); StreamVariable streamVariable = new StreamVariable() { @Override public OutputStream getOutputStream() { return bas; } @Override public boolean listenProgress() { return false; } @Override public void onProgress(StreamingProgressEvent event) {} @Override public void streamingStarted(StreamingStartEvent event) {} @Override public void streamingFinished(StreamingEndEvent event) {} @Override public void streamingFailed(StreamingErrorEvent event) {} @Override public boolean isInterrupted() { return false; } }; html5File.setStreamVariable(streamVariable); File file = new File(fileName, bas); file.setType(html5File.getType()); // FF don't know csv if (fileName.endsWith(".csv")) { file.setType("text/csv"); } DDTest6.get().fs1.addBean(file); DDTest6.get().tree1.setChildrenAllowed(file, false); DDTest6.get().setParent(file, folder); } } } }