package net.filebot.ui.rename;
import static java.util.Collections.*;
import static net.filebot.util.ui.SwingUI.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import ca.odell.glazedlists.EventList;
import net.filebot.ResourceManager;
import net.filebot.ui.FileBotList;
import net.filebot.ui.transfer.LoadAction;
import net.filebot.util.ui.ActionPopup;
import net.filebot.util.ui.PrototypeCellValueUpdater;
import net.miginfocom.swing.MigLayout;
class RenameList<E> extends FileBotList<E> {
private JPanel buttonPanel;
public RenameList(EventList<E> model) {
// replace default model with given model
setModel(model);
// disable multi-selection for the sake of simplicity
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// need a fixed cell size for high performance scrolling
list.setFixedCellHeight(28);
list.getModel().addListDataListener(new PrototypeCellValueUpdater(list, ""));
list.addMouseListener(dndReorderMouseAdapter);
list.addMouseMotionListener(dndReorderMouseAdapter);
getRemoveAction().setEnabled(true);
buttonPanel = new JPanel(new MigLayout("insets 1.2mm, nogrid, novisualpadding, fill", "align center"));
buttonPanel.add(createImageButton(downAction), "gap 10px, sgy button");
buttonPanel.add(createImageButton(upAction), "gap 0, sgy button");
buttonPanel.add(createLoadButton(), "gap 10px, sgy button");
add(buttonPanel, BorderLayout.SOUTH);
listScrollPane.getViewport().setBackground(list.getBackground());
}
public JPanel getButtonPanel() {
return buttonPanel;
}
private JButton createLoadButton() {
ActionPopup actionPopup = new ActionPopup("Load Files", ResourceManager.getIcon("action.load"));
actionPopup.add(newAction("Select Folders", ResourceManager.getIcon("tree.closed"), evt -> {
loadAction.actionPerformed(new ActionEvent(evt.getSource(), evt.getID(), evt.getActionCommand(), 0));
}));
actionPopup.add(newAction("Select Files", ResourceManager.getIcon("file.generic"), evt -> {
loadAction.actionPerformed(new ActionEvent(evt.getSource(), evt.getID(), evt.getActionCommand(), ActionEvent.SHIFT_MASK));
}));
JButton button = new JButton(loadAction);
button.setComponentPopupMenu(actionPopup);
return button;
}
private final LoadAction loadAction = new LoadAction(this::getTransferablePolicy);
private final Action upAction = newAction("Align Up", ResourceManager.getIcon("action.up"), evt -> {
int index = getListComponent().getSelectedIndex();
if (index > 0) {
swap(model, index, index - 1);
getListComponent().setSelectedIndex(index - 1);
}
});
private final Action downAction = newAction("Align Down", ResourceManager.getIcon("action.down"), evt -> {
int index = getListComponent().getSelectedIndex();
if (index < model.size() - 1) {
swap(model, index, index + 1);
getListComponent().setSelectedIndex(index + 1);
}
});
private final MouseAdapter dndReorderMouseAdapter = new MouseAdapter() {
private int lastIndex = -1;
@Override
public void mousePressed(MouseEvent m) {
lastIndex = getListComponent().getSelectedIndex();
}
@Override
public void mouseDragged(MouseEvent m) {
int currentIndex = getListComponent().getSelectedIndex();
if (currentIndex != lastIndex && lastIndex >= 0 && currentIndex >= 0) {
swap(model, lastIndex, currentIndex);
lastIndex = currentIndex;
}
}
};
}