summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2010-03-11 15:56:16 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2010-03-11 15:56:16 +0000
commit7da4b810a4445b3bd14d26aa89ae0547d056b5e8 (patch)
treeaa78326fbff822123bb6469ca2e76765d7d2f626
parent77a45238fababd776e2a0ac828838aff160a3d73 (diff)
downloadvaadin-framework-7da4b810a4445b3bd14d26aa89ae0547d056b5e8.tar.gz
vaadin-framework-7da4b810a4445b3bd14d26aa89ae0547d056b5e8.zip
Skeletons for html5 File API in DD
svn changeset:11800/svn branch:6.3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java12
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java51
-rw-r--r--src/com/vaadin/ui/DragAndDropWrapper.java45
3 files changed, 108 insertions, 0 deletions
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<String, Object> variables) {
+ super.changeVariables(source, variables);
+
+ Set<String> keySet = variables.keySet();
+ for (String string : keySet) {
+ // TODO get files
+ }
+ }
}