blob: ba9fc63d375c46410fabadd574a3f7ce98ada320 [file] [log] [blame]
package org.eclipse.swt.dnd;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved
*/
import org.eclipse.swt.internal.ole.win32.COM;
import org.eclipse.swt.internal.win32.TCHAR;
/**
* The class <code>Transfer</code> provides a mechanism for converting a Java object to a
* platform specific format that can be passed around in a Drag and Drop operation and vice versa.
*
* <p>You should only need to become familiar with this class if you are implementing
* a Transfer subclass and you are unable to subclass the ByteArrayTransfer class.</p>
*/
public abstract class Transfer {
/**
* Returns a list of the data types that can be transferred using this Transfer agent.
*
* <p>Only the data type fields of the TransferData Object are filled in.</p>
*
* @return a list of the data types that can be transferred using this Transfer agent
*/
abstract public TransferData[] getSupportedTypes();
/**
* Returns true if the transferData data type can be transferred using this Transfer agent.
*
* @param transferData a platform specific description of a data type; only the data type fields
* of the TransferData Object need to be filled in
*
* @return true if the transferData data type can be transferred using this Transfer agent
*/
abstract public boolean isSupportedType(TransferData transferData);
abstract protected int[] getTypeIds();
abstract protected String[] getTypeNames();
/**
* Converts a Java Object to a platform specific representation of the data.
* <p>
* On a successful conversion, the transferData.result field will be set as follows:
* <ul>
* <li>Windows: OLE.S_OK
* <li>Motif: 0
* </ul>
* If this transfer agent is unable to perform the conversion,
* the transferData.result field will be set to a failure value as follows:
* <ul>
* <li>Windows: OLE.DV_E_TYMED
* <li>Motif: 1
* </ul></p>
*
* @param object a Java Object containing the data to be transferred
*
* @param transferData an empty TransferData object; this object will be filled in on return
* with the platform specific representation of the data
*/
abstract protected void javaToNative (Object object, TransferData transferData);
/**
* Converts a platform specific representation of data to a Java Object.
*
* @param transferData the platform specific representation of the data that has been transferred
*
* @return a Java Object containing the transferred data if the conversion was successful;
* otherwise null
*/
abstract protected Object nativeToJava(TransferData transferData);
/**
* Registers a name for a data type and returns the associated unique identifier.
*
* <p>You may register the same type more than once, the same unique identifier will be returned if the
* type has been previously registered.</p>
*
* <p>Note: Do <b>not</b> call this method with pre-defined Clipboard Format types such as CF_TEXT
* or CF_BITMAP because the pre-defined value will not be returned</p>
*
* @param formatName the name of a data type
*
* @return the unique identifier associated with htis data type
*/
public static int registerType(String formatName){
// Look name up in the registry
// If name is not in registry, add it and return assigned value.
// If name already exists in registry, return its assigned value
TCHAR chFormatName = new TCHAR(0, formatName, true);
return COM.RegisterClipboardFormat(chFormatName);
}
}