From 7da4b810a4445b3bd14d26aa89ae0547d056b5e8 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Thu, 11 Mar 2010 15:56:16 +0000 Subject: [PATCH] Skeletons for html5 File API in DD svn changeset:11800/svn branch:6.3 --- .../gwt/client/ui/dd/VHtml5DragEvent.java | 12 +++++ .../terminal/gwt/client/ui/dd/VHtml5File.java | 51 +++++++++++++++++++ src/com/vaadin/ui/DragAndDropWrapper.java | 45 ++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java index 41a01d50a7..9d5bafc2b7 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java +++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java @@ -9,6 +9,7 @@ import com.google.gwt.dom.client.NativeEvent; /** * Helper class to access html5 style drag events. * + * TODO Gears support ? */ public class VHtml5DragEvent extends NativeEvent { protected VHtml5DragEvent() { @@ -50,4 +51,15 @@ public class VHtml5DragEvent extends NativeEvent { /*-{ return this.dataTransfer.effectAllowed; }-*/; + + public final native int getFileCount() + /*-{ + return this.dataTransfer.files ? this.dataTransfer.files.length : 0; + }-*/; + + public final native VHtml5File getFile(int fileIndex) + /*-{ + return this.dataTransfer.files[i]; + }-*/; + } diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java new file mode 100644 index 0000000000..59ce7464f0 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java @@ -0,0 +1,51 @@ +package com.vaadin.terminal.gwt.client.ui.dd; + +import com.google.gwt.core.client.JavaScriptObject; + +/** + * Wrapper for html5 File object. + * + * TODO gear support? + */ +public class VHtml5File extends JavaScriptObject { + + protected VHtml5File() { + }; + + public native final String getName() + /*-{ + return name; + }-*/; + + public native final String getType() + /*-{ + return type; + }-*/; + + public native final int getSize() + /*-{ + return size; + }-*/; + + public native final void readAsBinary(final Callback callback) + /*-{ + var r = new FileReader(); + r.onloadend = function(v) { + callback@com.vaadin.terminal.gwt.client.ui.dd.VHtml5File.Callback::handleFile(Lcom/google/gwt/core/client/JavaScriptObject)(v); + }; + r.readAsBinary(this); + }-*/; + + public native final void readAsDataUrl(final Callback callback) + /*-{ + var r = new FileReader(); + r.onloadend = function(v) { + callback@com.vaadin.terminal.gwt.client.ui.dd.VHtml5File.Callback::handleFile(Lcom/google/gwt/core/client/JavaScriptObject)(v); + }; + r.readAsDataURL(this); + }-*/; + + public interface Callback { + public void handleFile(JavaScriptObject object); + } +} diff --git a/src/com/vaadin/ui/DragAndDropWrapper.java b/src/com/vaadin/ui/DragAndDropWrapper.java index 848e728bae..3274b60b47 100644 --- a/src/com/vaadin/ui/DragAndDropWrapper.java +++ b/src/com/vaadin/ui/DragAndDropWrapper.java @@ -4,6 +4,7 @@ package com.vaadin.ui; import java.util.Map; +import java.util.Set; import com.vaadin.event.Transferable; import com.vaadin.event.TransferableImpl; @@ -18,6 +19,7 @@ import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.ui.VDragAndDropWrapper; import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation; import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation; +import com.vaadin.ui.Upload.Receiver; @ClientWidget(VDragAndDropWrapper.class) public class DragAndDropWrapper extends CustomComponent implements DropTarget, @@ -48,6 +50,39 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget, return MouseEventDetails.deSerialize((String) getData("mouseDown")); } + public Html5File[] getFiles() { + // TODO Auto-generated method stub + return null; + } + + public class Html5File { + + public String getFileName() { + // TODO Auto-generated method stub + return null; + } + + // public int getFileSize() { + // // TODO Auto-generated method stub + // return 0; + // } + + /** + * HTML5 drags are read from client disk with a callback. This and + * possibly long transfer time forces us to receive dragged file + * contents with a callback. + * + * @param receiver + * the callback that returns stream where the + * implementation writes the file contents as it arrives. + */ + public void receive(Receiver receiver) { + // TODO Auto-generated method stub + + } + + } + } public class WrapperDropDetails extends DropTargetDetailsImpl { @@ -159,4 +194,14 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget, public DragStartMode getDragStartMode() { return dragStartMode; } + + @Override + public void changeVariables(Object source, Map variables) { + super.changeVariables(source, variables); + + Set keySet = variables.keySet(); + for (String string : keySet) { + // TODO get files + } + } } -- 2.39.5