/*
* 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.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.TransferHandler;
import com.t3.model.initiative.InitiativeList;
import com.t3.model.initiative.InitiativeList.TokenInitiative;
/**
* This is the transfer handler for the list in the {@link InitiativePanel}.
*
* @author Jay
*/
public class InitiativeTransferHandler extends TransferHandler {
/*---------------------------------------------------------------------------------------------
* Instance Variables
*-------------------------------------------------------------------------------------------*/
/**
* Model containing all of the tokens in this initiative.
*/
private InitiativePanel panel;
/*---------------------------------------------------------------------------------------------
* Class Variables
*-------------------------------------------------------------------------------------------*/
/**
* Logger instance for this class.
*/
static final Logger LOGGER = Logger.getLogger(InitiativeTransferHandler.class.getName());
/*---------------------------------------------------------------------------------------------
* Constructors
*-------------------------------------------------------------------------------------------*/
/**
* Create a handler for the passed panel
*
* @param aPanel The panel supported by this handler.
*/
public InitiativeTransferHandler(InitiativePanel aPanel) {
panel = aPanel;
}
/*---------------------------------------------------------------------------------------------
* Overridden TransferHandler methods
*-------------------------------------------------------------------------------------------*/
/**
* @see javax.swing.TransferHandler#canImport(javax.swing.JComponent, java.awt.datatransfer.DataFlavor[])
*/
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
for (int i = 0; i < transferFlavors.length; i++)
if (InitiativeTransferable.INIT_TOKEN_FLAVOR.equals(transferFlavors[i])) return true;
return false;
}
/**
* @see javax.swing.TransferHandler#importData(javax.swing.JComponent, java.awt.datatransfer.Transferable)
*/
@Override
public boolean importData(JComponent comp, Transferable t) {
try {
if (!t.isDataFlavorSupported(InitiativeTransferable.INIT_TOKEN_FLAVOR)) return false;
// Get the token and it's current position
InitiativeList list = panel.getList();
InitiativeTransferable data = (InitiativeTransferable)t.getTransferData(InitiativeTransferable.INIT_TOKEN_FLAVOR);
JList displayList = (JList)comp;
int newIndex = displayList.getSelectedIndex();
if (newIndex == -1) newIndex = list.getSize() - 1;
if (newIndex > data.getInititiave()) newIndex++;
list.moveToken(data.getInititiave(), newIndex);
return true;
} catch (UnsupportedFlavorException e) {
LOGGER.log(Level.WARNING, "Should not happen, I've already checked to make sure it is valid", e);
} catch (IOException e) {
LOGGER.log(Level.WARNING, "Rat bastards changed valid types after I started reading data", e);
} // entry
return false;
}
/**
* @see javax.swing.TransferHandler#getSourceActions(javax.swing.JComponent)
*/
@Override
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
/**
* @see javax.swing.TransferHandler#createTransferable(javax.swing.JComponent)
*/
@Override
protected Transferable createTransferable(JComponent c) {
JList displayList = (JList)c;
TokenInitiative ti = (TokenInitiative)displayList.getSelectedValue();
if (ti == null || ti.getId() == null) return null;
return new InitiativeTransferable(ti.getId(), panel.getList().indexOf(ti));
}
}