package net.filebot.ui.transfer;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import javax.swing.JComponent;
import javax.swing.TransferHandler;
public class DefaultTransferHandler extends TransferHandler {
private TransferablePolicy transferablePolicy;
private TransferableExportHandler exportHandler;
private ClipboardHandler clipboardHandler;
private boolean dragging = false;
public DefaultTransferHandler(TransferablePolicy transferablePolicy, TransferableExportHandler exportHandler) {
this(transferablePolicy, exportHandler, new DefaultClipboardHandler());
}
public DefaultTransferHandler(TransferablePolicy transferablePolicy, TransferableExportHandler exportHandler, ClipboardHandler clipboardHandler) {
this.transferablePolicy = transferablePolicy;
this.exportHandler = exportHandler;
this.clipboardHandler = clipboardHandler;
}
@Override
public boolean canImport(TransferSupport support) {
// show "drop allowed" cursor when dragging even though drop is not allowed
if (dragging)
return true;
if (transferablePolicy != null)
return transferablePolicy.canImport(support);
return false;
}
@Override
public boolean importData(TransferSupport support) {
if (dragging)
return false;
if (!canImport(support))
return false;
return transferablePolicy.importData(support);
}
@Override
protected void exportDone(JComponent source, Transferable data, int action) {
dragging = false;
if (data == null)
return;
if (exportHandler != null)
exportHandler.exportDone(source, data, action);
}
@Override
public int getSourceActions(JComponent c) {
if (exportHandler != null)
return exportHandler.getSourceActions(c);
return NONE;
}
@Override
protected Transferable createTransferable(JComponent c) {
dragging = true;
if (exportHandler != null)
return exportHandler.createTransferable(c);
return null;
}
@Override
public void exportToClipboard(JComponent comp, Clipboard clip, int action) throws IllegalStateException {
if (clipboardHandler != null)
clipboardHandler.exportToClipboard(comp, clip, action);
}
public TransferablePolicy getTransferablePolicy() {
return transferablePolicy;
}
public void setTransferablePolicy(TransferablePolicy transferablePolicy) {
this.transferablePolicy = transferablePolicy;
}
public TransferableExportHandler getExportHandler() {
return exportHandler;
}
public void setExportHandler(TransferableExportHandler exportHandler) {
this.exportHandler = exportHandler;
}
public ClipboardHandler getClipboardHandler() {
return clipboardHandler;
}
public void setClipboardHandler(ClipboardHandler clipboardHandler) {
this.clipboardHandler = clipboardHandler;
}
}