package krasa.mavenrun.gui;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import javax.swing.*;
import com.intellij.ui.components.JBList;
/**
* @author Vojtech Krasa
*/
class MyListDropHandler extends TransferHandler {
JBList list;
public MyListDropHandler(JBList list) {
this.list = list;
}
public boolean canImport(TransferHandler.TransferSupport support) {
if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
return false;
}
JList.DropLocation dl = (JList.DropLocation) support.getDropLocation();
if (dl.getIndex() == -1) {
return false;
} else {
return true;
}
}
public boolean importData(TransferHandler.TransferSupport support) {
if (!canImport(support)) {
return false;
}
Transferable transferable = support.getTransferable();
String indexString;
try {
indexString = (String) transferable.getTransferData(DataFlavor.stringFlavor);
} catch (Exception e) {
return false;
}
int index = Integer.parseInt(indexString);
JList.DropLocation dl = (JList.DropLocation) support.getDropLocation();
int dropTargetIndex = dl.getIndex();
DefaultListModel model = (DefaultListModel) list.getModel();
Object elementAt = model.getElementAt(index);
model.insertElementAt(elementAt, dropTargetIndex);
model.remove(getActualRemoveIndex(index, dropTargetIndex));
int actualDropIndex = getActualDropIndex(index, dropTargetIndex);
list.getSelectionModel().setSelectionInterval(actualDropIndex, actualDropIndex);
// list.repaint();
return true;
}
private int getActualRemoveIndex(int index, int dropTargetIndex) {
int index1;
if (dropTargetIndex < index) {
index1 = index + 1;
} else {
index1 = index;
}
return index1;
}
private int getActualDropIndex(int index, int dropTargetIndex) {
int index1;
if (dropTargetIndex < index) {
index1 = dropTargetIndex;
} else {
index1 = dropTargetIndex - 1;
}
return index1;
}
}