![JAR search and dependency download from the Maven repository](/logo.png)
rwt.widgets.DropTarget.js Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2014, 2015 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
namespace( "rwt.widgets" );
(function() {
var callWithElement = rwt.widgets.util.WidgetUtil.callWithElement;
rwt.widgets.DropTarget = function( control, operations ) {
this.control = control;
this.actions = rwt.remote.DNDSupport.getInstance()._operationsToActions( operations );
rwt.remote.DNDSupport.getInstance().registerDropTarget( this );
this._onDragEvent = rwt.util.Functions.bind( this._onDragEvent, this );
};
rwt.widgets.DropTarget.prototype = {
dispose : function() {
rwt.remote.DNDSupport.getInstance().deregisterDropTarget( this );
},
setTransfer : function( transferTypes ) {
rwt.remote.DNDSupport.getInstance().setDropTargetTransferTypes( this.control, transferTypes );
},
changeFeedback : function( feedback, flags ) {
rwt.remote.DNDSupport.getInstance().setFeedback( this.control, feedback, flags );
},
changeDetail : function( detail ) {
rwt.remote.DNDSupport.getInstance().setOperationOverwrite( this.control, detail );
},
changeDataType : function( dataType ) {
rwt.remote.DNDSupport.getInstance().setDataType( this.control, dataType );
},
setFileDropEnabled : function( enabled ) {
if( rwt.client.Client.supportsFileDrop() ) {
var listener = this._onDragEvent;
callWithElement( this.control, function( element ) {
if( enabled ) {
element.addEventListener( "dragenter", listener, false );
element.addEventListener( "dragover", listener, false );
element.addEventListener( "drop", listener, false );
} else {
element.removeEventListener( "dragenter", listener, false );
element.removeEventListener( "dragover", listener, false );
element.removeEventListener( "drop", listener, false );
}
} );
}
},
_onDragEvent : function( event ) {
try {
if( this._isDraggingFiles( event ) ) {
// NOTE: Feedback effects are currenlty only respected by webkit, will ignore for now
rwt.event.EventHandlerUtil.stopDomEvent( event );
event.stopPropagation();
if( event.type === "drop" ) {
this._sendDropAccept( event );
}
}
} catch( ex ) {
rwt.runtime.ErrorHandler.processJavaScriptError( ex );
}
},
_sendDropAccept : function( event ) {
var remoteObject = rwt.remote.Connection.getInstance().getRemoteObject( this );
remoteObject.notify( "DropAccept", {
"x" : Math.round( event.pageX ),
"y" : Math.round( event.pageY ),
"time" : rwt.remote.EventUtil.eventTimestamp(),
"operation" : "move",
"feedback" : 0,
"files" : this._getFiles( event )
} );
},
_isDraggingFiles : function( event ) {
var types = event.dataTransfer.types;
return types.indexOf ? ( types.indexOf( "Files" ) !== -1 ) : types.contains( "Files" );
},
_getFiles : function( event ) {
var fileUploader = rwt.client.FileUploader.getInstance();
var files = event.dataTransfer.files;
var result = {};
for( var i = 0; i < files.length; i++ ) {
var file = files.item( i );
var fileId = fileUploader.addFile( file );
result[ fileId ] = {
"type" : file.type,
"size" : file.size,
"name" : file.name
};
}
return result;
}
};
}());
© 2015 - 2025 Weber Informatics LLC | Privacy Policy