/**
* Helper class to access html5 style drag events.
*
+ * TODO Gears support ?
*/
public class VHtml5DragEvent extends NativeEvent {
protected VHtml5DragEvent() {
/*-{
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];
+ }-*/;
+
}
--- /dev/null
+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);
+ }
+}
package com.vaadin.ui;
import java.util.Map;
+import java.util.Set;
import com.vaadin.event.Transferable;
import com.vaadin.event.TransferableImpl;
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,
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 {
public DragStartMode getDragStartMode() {
return dragStartMode;
}
+
+ @Override
+ public void changeVariables(Object source, Map<String, Object> variables) {
+ super.changeVariables(source, variables);
+
+ Set<String> keySet = variables.keySet();
+ for (String string : keySet) {
+ // TODO get files
+ }
+ }
}