Browse Source

Skeletons for html5 File API in DD

svn changeset:11800/svn branch:6.3
tags/6.7.0.beta1
Matti Tahvonen 14 years ago
parent
commit
7da4b810a4

+ 12
- 0
src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5DragEvent.java View 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];
}-*/;

}

+ 51
- 0
src/com/vaadin/terminal/gwt/client/ui/dd/VHtml5File.java View File

@@ -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);
}
}

+ 45
- 0
src/com/vaadin/ui/DragAndDropWrapper.java View 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
}
}
}

Loading…
Cancel
Save