/* * 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.client.ui.tokenpanel; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.List; import javax.swing.JComponent; import javax.swing.JList; import javax.swing.TransferHandler; import com.t3.model.Token; import com.t3.transferable.T3TokenTransferData; /** * @author jgorrell * @version $Revision$ $Date$ $Author$ */ public class TokenPanelTransferHandler extends TransferHandler { /*--------------------------------------------------------------------------------------------- * Constructor *-------------------------------------------------------------------------------------------*/ /** * Create the transfer handler for the passed display component. * * @param displayComponent Create the handler for this component. */ public TokenPanelTransferHandler(JComponent displayComponent) { if (displayComponent instanceof JList) ((JList)displayComponent).setDragEnabled(true); displayComponent.setTransferHandler(this); } /*--------------------------------------------------------------------------------------------- * Overridden TransferHandler methods *-------------------------------------------------------------------------------------------*/ /** * @see javax.swing.TransferHandler#canImport(javax.swing.JComponent, java.awt.datatransfer.DataFlavor[]) */ @Override public boolean canImport(JComponent aComp, DataFlavor[] aTransferFlavors) { return false; } /** * @see javax.swing.TransferHandler#importData(javax.swing.JComponent, java.awt.datatransfer.Transferable) */ @Override public boolean importData(JComponent aComp, Transferable aT) { return false; } /** * @see javax.swing.TransferHandler#getSourceActions(javax.swing.JComponent) */ @Override public int getSourceActions(JComponent aC) { return TransferHandler.COPY; } /** * @see javax.swing.TransferHandler#createTransferable(javax.swing.JComponent) */ @Override protected Transferable createTransferable(JComponent aC) { if (aC instanceof JList) { List<Token> selectedValues = ((JList<Token>)aC).getSelectedValuesList(); return new TokenPanelTransferable(selectedValues); } // endif return null; } } /** * Used to transfer the selected tokens from the token panel. * * @author jgorrell * @version $Revision$ $Date$ $Author$ */ class TokenPanelTransferable implements Transferable { /** * The array of tokens read from the token panel when the transferable was created */ private List<Token> tokens; /** * Create the transferable for the given tokens. * * @param theTokens Tokens being transfered. Uses object array since that is what is * provided by the list. */ TokenPanelTransferable(List<Token> theTokens) { tokens = theTokens; } /** * @see java.awt.datatransfer.Transferable#getTransferData(java.awt.datatransfer.DataFlavor) */ @Override public T3TokenTransferData getTransferData(DataFlavor aFlavor) throws UnsupportedFlavorException, IOException { if (!isDataFlavorSupported(aFlavor)) throw new UnsupportedFlavorException(aFlavor); T3TokenTransferData tokenList = new T3TokenTransferData(); for (Token t:tokens) tokenList.add(t.toTransferData()); return tokenList; } /** * @see java.awt.datatransfer.Transferable#getTransferDataFlavors() */ @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { T3TokenTransferData.MAP_TOOL_TOKEN_LIST_FLAVOR }; } /** * @see java.awt.datatransfer.Transferable#isDataFlavorSupported(java.awt.datatransfer.DataFlavor) */ @Override public boolean isDataFlavorSupported(DataFlavor aFlavor) { return T3TokenTransferData.MAP_TOOL_TOKEN_LIST_FLAVOR.equals(aFlavor); } }