X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=kona%2Fsrc%2Forg%2Ffeistymeow%2Fdragdrop%2FDragonTransferHandler.java;fp=kona%2Fsrc%2Forg%2Ffeistymeow%2Fdragdrop%2FDragonTransferHandler.java;h=40833b589b096428c3bce17cf8beba3e64df3493;hb=67d3d9a5e40685d3898f34a3651944c8a0c3e2ca;hp=0000000000000000000000000000000000000000;hpb=2d9bf2a5bf795aabd3498d96e5b005c18889002d;p=feisty_meow.git diff --git a/kona/src/org/feistymeow/dragdrop/DragonTransferHandler.java b/kona/src/org/feistymeow/dragdrop/DragonTransferHandler.java new file mode 100755 index 00000000..40833b58 --- /dev/null +++ b/kona/src/org/feistymeow/dragdrop/DragonTransferHandler.java @@ -0,0 +1,88 @@ +package org.feistymeow.dragdrop; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.util.List; + +import javax.swing.JComponent; +import javax.swing.TransferHandler; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A transfer handler that can be extended and used to inter-operate with DragonDropManager. This + * object is not strictly necessary to use, but it can help if one has not already implemented one's + * own transfer handler. + * + * @author Chris Koeritz + * @copyright Copyright (c) 2012-$now By University of Virginia + * @license This file is free software; you can modify and redistribute it under the terms of the + * Apache License v2.0: http://www.apache.org/licenses/LICENSE-2.0 + */ +@SuppressWarnings("serial") +public class DragonTransferHandler extends TransferHandler +{ + static private Log logger = LogFactory.getLog(DragonTransferHandler.class); + IDragonDropDataProvider c_provider; + + public DragonTransferHandler(IDragonDropDataProvider provider) + { + c_provider = provider; + } + + @Override + public boolean canImport(TransferSupport support) + { + if (support == null) return false; + if (!support.isDrop()) + return false; // we don't support cut&paste here. + logger.debug("canImport: base just saying okay."); + return true; + } + + @Override + protected Transferable createTransferable(JComponent c) + { + logger.debug("createTransferable: at base, returning ListTransferable."); + return new ListTransferable(c_provider.provideDragList()); + } + + @Override + protected void exportDone(JComponent source, Transferable data, int action) + { + logger.debug("exportDone: base got event for component " + source.toString()); + } + + @Override + public int getSourceActions(JComponent c) + { + return COPY; + } + + @Override + public boolean importData(TransferSupport support) + { + if (support == null) return false; + logger.debug("importData: at base..."); + + if (support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { + logger.debug("importing data with java files flavor"); + List files = ListTransferable.extractData(support.getTransferable()); + if ((files != null) && (files.size() != 0)) { + c_provider.consumeDropList(files, support.getDropLocation().getDropPoint()); + return true; + } + } else if (support.isDataFlavorSupported(ListTransferable.getURIListFlavor1()) + || support.isDataFlavorSupported(ListTransferable.getURIListFlavor2())) { + logger.debug("importing data with uri list flavor"); + List files = ListTransferable.extractData(support.getTransferable()); + if ((files != null) && (files.size() != 0)) { + c_provider.consumeDropList(files, support.getDropLocation().getDropPoint()); + return true; + } + } + logger.warn("passing importData request to superclass, which will probably fail."); + return super.importData(support); + } +}