package fr.lteconsulting.hexa.client.ui.uploadjs;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
public class DropTarget extends Composite
{
public interface Callback
{
void onDragEnter();
void onDragLeave();
void onDropFiles( FilesList files );
}
public static DropTarget create( Widget w, Callback callback )
{
if( !canDropZone( w.getElement() ) )
return null;
return new DropTarget( w, callback );
}
private DropTarget( Widget w, Callback callback )
{
initWidget( w );
initDropZone( getElement(), callback );
}
private static native boolean canDropZone( Element test )
/*-{
return !! test.addEventListener;
}-*/;
private native void initDropZone( Element dropzone, Callback callback )
/*-{
if( ! dropzone.addEventListener )
return;
dropzone.addEventListener( "dragenter", function(event)
{
event.preventDefault();
callback.@fr.lteconsulting.hexa.client.ui.uploadjs.DropTarget.Callback::onDragEnter()();
}, true );
dropzone.addEventListener( "dragover", function(event)
{
event.preventDefault();
callback.@fr.lteconsulting.hexa.client.ui.uploadjs.DropTarget.Callback::onDragEnter()();
}, true );
dropzone.addEventListener( "dragleave", function(event)
{
event.preventDefault();
callback.@fr.lteconsulting.hexa.client.ui.uploadjs.DropTarget.Callback::onDragLeave()();
}, true );
dropzone.addEventListener( "drop", function(event)
{
event.preventDefault();
var allTheFiles = event.dataTransfer.files;
//$wnd.droppedFiles = allTheFiles;
callback.@fr.lteconsulting.hexa.client.ui.uploadjs.DropTarget.Callback::onDropFiles(Lfr/lteconsulting/hexa/client/ui/uploadjs/FilesList;)( allTheFiles );
}, true);
}-*/;
}