]> source.dussan.org Git - vaadin-framework.git/commitdiff
Skeletons for html5 File API in DD
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 11 Mar 2010 15:56:16 +0000 (15:56 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 11 Mar 2010 15:56:16 +0000 (15:56 +0000)
svn changeset:11800/svn branch:6.3

src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java
src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java [new file with mode: 0644]
src/com/vaadin/ui/DragAndDropWrapper.java

index 41a01d50a7a50590fb787137a4af99669bab4f48..9d5bafc2b77763d01f760943f261fb4da6c06098 100644 (file)
@@ -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 (file)
index 0000000..59ce746
--- /dev/null
@@ -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);
+    }
+}
index 848e728bae3804b11a8de6ab17a1e5be9abaa5cd..3274b60b478709842cdddd6b229fa85a6e781732 100644 (file)
@@ -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<String, Object> variables) {
+        super.changeVariables(source, variables);
+
+        Set<String> keySet = variables.keySet();
+        for (String string : keySet) {
+            // TODO get files
+        }
+    }
 }