package com.vividsolutions.jump.workbench.ui.plugin.clipboard;
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.IOException;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import com.vividsolutions.jts.util.Assert;
import com.vividsolutions.jump.I18N;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.plugin.EnableCheck;
import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.ui.images.famfam.IconLoaderFamFam;
import com.vividsolutions.jump.workbench.ui.plugin.ExportImagePlugIn;
public class CopyImagePlugIn extends ExportImagePlugIn {
public boolean execute(PlugInContext context) throws Exception {
Transferable transferable = createTransferable(context);
if (transferable == null) {
context.getWorkbenchFrame()
.warnUser(I18N.get("ui.plugin.clipboard.CopyImagePlugIn.could-not-copy-the-image-for-some-reason"));
return false;
}
Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(transferable, new DummyClipboardOwner());
return true;
}
public static final ImageIcon ICON = IconLoaderFamFam.icon("image_copy.gif");
private Transferable createTransferable(final PlugInContext context) {
return new AbstractTransferable(
new DataFlavor[]{DataFlavor.imageFlavor}) {
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
Assert.isTrue(flavor == DataFlavor.imageFlavor);
return image(context.getLayerViewPanel());
}
};
}
public static MultiEnableCheck createEnableCheck(
WorkbenchContext workbenchContext) {
EnableCheckFactory checkFactory = new EnableCheckFactory(
workbenchContext);
return new MultiEnableCheck()
.add(checkFactory
.createWindowWithLayerViewPanelMustBeActiveCheck()).add(new EnableCheck() {
public String check(JComponent component) {
//Need Java 1.4's ability to auto-convert DataFlavor.imageFlavor to
//the native image format for the platform
//(see http://access1.sun.com/tutorials/Swing_Tutorial/Dnd-Merlin-Tutorial/3.html).
//[Jon Aquino 11/6/2003]
return !java14OrNewer()
? I18N.get("ui.plugin.clipboard.CopyImagePlugIn.this-feature-requires-Java-1.4-or-newer")
: null;
}
});
}
}