public static String[] convertTransferTypes( final Transfer[] transfer ) { List allTypes = new ArrayList(); for( int i = 0; i < transfer.length; i++ ) { TransferData[] supported = transfer[ i ].getSupportedTypes(); for( int j = 0; j < supported.length; j++ ) { allTypes.add( supported[ j ] ); } } String[] result = new String[ allTypes.size() ]; for( int i = 0; i < allTypes.size(); i++ ) { TransferData dataType = ( TransferData )allTypes.get( i ); result[ i ] = String.valueOf( dataType.type ); } return result; }
public static JsonArray convertTransferTypes( Transfer[] transfer ) { JsonArray array = new JsonArray(); for( int i = 0; i < transfer.length; i++ ) { TransferData[] supported = transfer[ i ].getSupportedTypes(); for( int j = 0; j < supported.length; j++ ) { array.add( Integer.toString( supported[ j ].type ) ); } } return array; }
static TransferData[] determineDataTypes( DragSource dragSource, DropTarget dropTarget ) { List<TransferData> supportedTypes = new ArrayList<>(); for( Transfer dropTargetTransfer : dropTarget.getTransfer() ) { TransferData[] dataTypes = dropTargetTransfer.getSupportedTypes(); for( TransferData dataType : dataTypes ) { if( dragSource == null || transfersSupport( dragSource.getTransfer(), dataType ) ) { supportedTypes.add( dataType ); } } } return supportedTypes.toArray( new TransferData[ 0 ] ); }
static TransferData[] determineDataTypes( final DragSource dragSource, final DropTarget dropTarget ) { java.util.List supportedTypes = new ArrayList(); Transfer[] dragSourceTransfers = dragSource.getTransfer(); Transfer[] dropTargetTransfers = dropTarget.getTransfer(); for( int i = 0; i < dragSourceTransfers.length; i++ ) { TransferData[] dataTypes = dragSourceTransfers[ i ].getSupportedTypes(); for( int j = 0; j < dropTargetTransfers.length; j++ ) { for( int k = 0; k < dataTypes.length; k++ ) { if( dropTargetTransfers[ j ].isSupportedType( dataTypes[ k ] ) ) { supportedTypes.add( dataTypes[ k ] ); } } } } TransferData[] result = new TransferData[ supportedTypes.size() ]; for( int i = 0; i < supportedTypes.size(); i++ ) { result[ i ] = ( TransferData )supportedTypes.get( i ); } return result; }
private int EnumFormatEtc(int dwDirection, int /*long*/ ppenumFormatetc) { // only allow getting of data - SetData is not currently supported if (dwDirection == COM.DATADIR_SET) return COM.E_NOTIMPL; // what types have been registered? TransferData[] allowedDataTypes = new TransferData[0]; for (int i = 0; i < transferAgents.length; i++){ Transfer transferAgent = transferAgents[i]; if (transferAgent != null) { TransferData[] formats = transferAgent.getSupportedTypes(); TransferData[] newAllowedDataTypes = new TransferData[allowedDataTypes.length + formats.length]; System.arraycopy(allowedDataTypes, 0, newAllowedDataTypes, 0, allowedDataTypes.length); System.arraycopy(formats, 0, newAllowedDataTypes, allowedDataTypes.length, formats.length); allowedDataTypes = newAllowedDataTypes; } } OleEnumFORMATETC enumFORMATETC = new OleEnumFORMATETC(); enumFORMATETC.AddRef(); FORMATETC[] formats = new FORMATETC[allowedDataTypes.length]; for (int i = 0; i < formats.length; i++){ formats[i] = allowedDataTypes[i].formatetc; } enumFORMATETC.setFormats(formats); OS.MoveMemory(ppenumFormatetc, new int /*long*/[] {enumFORMATETC.getAddress()}, OS.PTR_SIZEOF); return COM.S_OK; } /**
private int EnumFormatEtc(int dwDirection, int /*long*/ ppenumFormatetc) { // only allow getting of data - SetData is not currently supported if (dwDirection == COM.DATADIR_SET) return COM.E_NOTIMPL; // what types have been registered? TransferData[] allowedDataTypes = new TransferData[0]; for (int i = 0; i < transferAgents.length; i++){ TransferData[] formats = transferAgents[i].getSupportedTypes(); TransferData[] newAllowedDataTypes = new TransferData[allowedDataTypes.length + formats.length]; System.arraycopy(allowedDataTypes, 0, newAllowedDataTypes, 0, allowedDataTypes.length); System.arraycopy(formats, 0, newAllowedDataTypes, allowedDataTypes.length, formats.length); allowedDataTypes = newAllowedDataTypes; } OleEnumFORMATETC enumFORMATETC = new OleEnumFORMATETC(); enumFORMATETC.AddRef(); FORMATETC[] formats = new FORMATETC[allowedDataTypes.length + 1]; for (int i = 0; i < allowedDataTypes.length; i++){ formats[i] = allowedDataTypes[i].formatetc; } // include the drop effect format to specify a copy operation FORMATETC dropeffect = new FORMATETC(); dropeffect.cfFormat = CFSTR_PREFERREDDROPEFFECT; dropeffect.dwAspect = COM.DVASPECT_CONTENT; dropeffect.lindex = -1; dropeffect.tymed = COM.TYMED_HGLOBAL; formats[formats.length -1] = dropeffect; enumFORMATETC.setFormats(formats); OS.MoveMemory(ppenumFormatetc, new int /*long*/[] {enumFORMATETC.getAddress()}, OS.PTR_SIZEOF); return COM.S_OK; } private int GetData(int /*long*/ pFormatetc, int /*long*/ pmedium) {
IDataObject dataObject = new IDataObject(ppv[0]); try { TransferData[] allowed = transfer.getSupportedTypes(); for (int i = 0; i < allowed.length; i++) { if (dataObject.QueryGetData(allowed[i].formatetc) == COM.S_OK) {