/*
* Copyright (c) 2014 tabletoptool.com team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* rptools.com team - initial implementation
* tabletoptool.com team - further development
*/
package com.t3.transferable;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import com.t3.image.ImageUtil;
public class ImageTransferableHandler extends TransferableHandler {
private enum Flavor {
image(new DataFlavor("image/x-java-image; class=java.awt.Image", "Image")),
url(new DataFlavor("text/plain; class=java.lang.String", "Image"));
DataFlavor flavor;
private Flavor(DataFlavor flavor) {
this.flavor = flavor;
}
public DataFlavor getFlavor() {
return flavor;
}
}
@Override
public Image getTransferObject(Transferable transferable) throws IOException, UnsupportedFlavorException {
if (transferable.isDataFlavorSupported(Flavor.image.getFlavor())) {
Image image = (Image) transferable.getTransferData(Flavor.image.getFlavor());
if (!(image instanceof BufferedImage)) {
image = ImageUtil.createCompatibleImage(image);
}
return image;
}
if (transferable.isDataFlavorSupported(Flavor.url.getFlavor())) {
String urlStr = (String) transferable.getTransferData(Flavor.url.getFlavor());
try {
URL url = new URL(urlStr);
Image image = null;
try {
image = ImageIO.read(url);
} catch (Exception e) {
// try the old fasioned way
image = Toolkit.getDefaultToolkit().getImage(url);
MediaTracker mt = new MediaTracker(new JPanel());
mt.addImage(image, 0);
try {
mt.waitForID(0);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
if (!(image instanceof BufferedImage)) {
image = ImageUtil.createCompatibleImage(image);
}
return image;
} catch (MalformedURLException mue) {
// TODO: this can probably be ignored
mue.printStackTrace();
}
}
if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
List<File> fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
return ImageUtil.getImage(fileList.get(0));
}
throw new UnsupportedFlavorException(null);
}
}