/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Icy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.clipboard; import java.awt.Toolkit; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Clipboard object (used for easy internal Copy/Paste operation). * * @author Stephane */ public class Clipboard { public interface ClipboardListener { public void clipboardChanged(); } private final static java.awt.datatransfer.Clipboard systemClipboard = Toolkit.getDefaultToolkit() .getSystemClipboard(); private final static List<ClipboardListener> listeners = new ArrayList<Clipboard.ClipboardListener>(); public static final String TYPE_ROILIST = "RoiList"; public static final String TYPE_ROILINKLIST = "RoiLinkList"; public static final String TYPE_SEQUENCE = "Sequence"; // Object should be BufferedImage public static final String TYPE_IMAGE = "Image"; private static String type = ""; private static Object object = null; /** * Clears the clipboard. */ public static void clear() { type = ""; object = null; } /** * Returns true if the specified type match the current type stored in Clipboard */ public static boolean isType(String t) { return type.equals(t); } /** * Returns the type of stored object. */ public static String getType() { return type; } /** * Returns object actually stored in the clipboard. */ public static Object get() { return object; } /** * Returns object actually stored in the clipboard if it has the specified type.<br> * Returns <code>null</code> otherwise. */ public static Object get(String type) { if (Clipboard.type.equals(type)) return object; return null; } /** * Puts an object in the clipboard.<br> * * @param type * object type (should not be null). * @param object * object to save in clipboard. */ public static void put(String type, Object object) { if (type == null) throw new IllegalArgumentException("Clipboard.put(type, object): type cannot be null !"); Clipboard.type = type; Clipboard.object = object; // notify change fireChangedEvent(); } /** * Returns if current content of the system clipboard contains specified type of data. * * @param type * the requested <code>DataFlavor</code> for the contents * @see java.awt.datatransfer.Clipboard#isDataFlavorAvailable(DataFlavor) */ public static boolean hasTypeSystem(DataFlavor type) { return systemClipboard.isDataFlavorAvailable(type); } /** * Returns all type of content available in the system clipboard. * * @see java.awt.datatransfer.Clipboard#getAvailableDataFlavors() */ public static DataFlavor[] getAllTypeSystem() { return systemClipboard.getAvailableDataFlavors(); } /** * Gets an object from the system clipboard. * * @param type * the requested <code>DataFlavor</code> for the contents * @throws IOException * @throws UnsupportedFlavorException * @see java.awt.datatransfer.Clipboard#getData(DataFlavor) */ public static Object getSystem(DataFlavor type) throws UnsupportedFlavorException, IOException { if (hasTypeSystem(type)) return systemClipboard.getData(type); return null; } /** * Clears content of system clipboard. */ public static void clearSystem() { systemClipboard.setContents(new TransferableNull(), null); } /** * Puts an object in the system clipboard. * * @param contents * the transferable object representing the * clipboard content * @param owner * the object which owns the clipboard content * @see java.awt.datatransfer.Clipboard#setContents(Transferable, ClipboardOwner) */ public static void putSystem(Transferable contents, ClipboardOwner owner) { systemClipboard.setContents(contents, owner); } public static void addListener(ClipboardListener listener) { if (!listeners.contains(listener)) listeners.add(listener); } public static void removeListener(ClipboardListener listener) { listeners.remove(listener); } public static void fireChangedEvent() { for (ClipboardListener l : listeners) l.clipboardChanged(); } }