package de.zigapeda.flowspring.gui.dnd;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.DefaultListModel;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListSelectionModel;
import javax.swing.TransferHandler;
import de.zigapeda.flowspring.data.PlaylistTrack;
public class PlaylistTransferHandler extends TransferHandler {
/**
*
*/
private static final long serialVersionUID = -1004955125717203527L;
private JList<PlaylistTrack> list;
public PlaylistTransferHandler(JList<PlaylistTrack> list) {
this.list = list;
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean importData(TransferSupport support) {
try {
PlaylistTrack plt = (PlaylistTrack) support.getTransferable().getTransferData(PlaylistTrack.DATAFLAVOR);
DefaultListModel<PlaylistTrack> playlistmodel = (DefaultListModel<PlaylistTrack>) this.list.getModel();
int insertAt = this.list.getDropLocation().getIndex();
int indexInList = playlistmodel.indexOf(plt);
if(indexInList != -1) {
if(indexInList < insertAt) {
insertAt--;
}
playlistmodel.removeElement(plt);
}
playlistmodel.insertElementAt(plt, insertAt);
ListSelectionModel sm = this.list.getSelectionModel();
sm.setSelectionInterval(insertAt, insertAt);
return true;
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public boolean importData(JComponent comp, Transferable t) {
System.out.println(2);
return false;
}
public boolean canImport(TransferSupport support) {
for(DataFlavor f: support.getDataFlavors()) {
if(f.equals(PlaylistTrack.DATAFLAVOR)) {
return true;
}
}
return false;
}
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
System.out.println(4);
return false;
}
protected Transferable createTransferable(JComponent c) {
if(this.list.getSelectedIndex() != -1) {
return this.list.getSelectedValue();
}
return null;
}
}