/******************************************************************************* * Copyright (c) 2016 Weasis Team and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.core.ui.editor.image; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.image.RenderedImage; import javax.media.jai.PlanarImage; import javax.swing.JComponent; import javax.swing.TransferHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.weasis.core.api.gui.Image2DViewer; import org.weasis.core.api.image.SimpleOpManager; import org.weasis.core.api.image.ZoomOp; public class ImageTransferHandler extends TransferHandler implements Transferable { private static final long serialVersionUID = 7716040872158831560L; private static final Logger LOGGER = LoggerFactory.getLogger(ImageTransferHandler.class); private static final DataFlavor[] flavors = { DataFlavor.imageFlavor }; private SimpleOpManager disOp; @Override public int getSourceActions(JComponent c) { return TransferHandler.COPY; } @Override public boolean canImport(JComponent comp, DataFlavor flavor[]) { return false; } @Override public Transferable createTransferable(JComponent comp) { // Clear disOp = null; // TODO make only one export function with a dialog to choose to disable zoom (real size), add graphics, // anonymize and other default remove annotations if (comp instanceof Image2DViewer) { Image2DViewer<?> view2DPane = (Image2DViewer<?>) comp; RenderedImage src = view2DPane.getSourceImage(); if (src != null) { SimpleOpManager opManager = view2DPane.getImageLayer().getDisplayOpManager().copy(); opManager.removeImageOperationAction(opManager.getNode(ZoomOp.OP_NAME)); opManager.setFirstNode(src); disOp = opManager; return this; } } return null; } @Override public boolean importData(JComponent comp, Transferable t) { return false; } @Override public Object getTransferData(DataFlavor flavor) { if (isDataFlavorSupported(flavor)) { RenderedImage result = disOp.process(); if (result instanceof PlanarImage) { return ((PlanarImage) result).getAsBufferedImage(); } } return null; } @Override public DataFlavor[] getTransferDataFlavors() { return flavors; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.imageFlavor); } }