package de.yogularm.minecraft.itemfinder.gui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.nio.file.Path;
import java.util.List;
import java.util.Observable;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import de.yogularm.minecraft.itemfinder.region.World;
public class WorldSelector extends Observable {
private JPanel component;
private JList<World> list;
private DefaultListModel<World> model;
private World lastSelection;
public WorldSelector() {
initUI();
}
public Component getComponent() {
return component;
}
public void setWorlds(List<World> worlds) {
model.clear();
for (World world : worlds) {
model.addElement(world);
}
checkChanged();
}
public World getSelectedWorld() {
return list.getSelectedValue();
}
private void initUI() {
model = new DefaultListModel<>();
list = new JList<>(model);
list.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
checkChanged();
}
});
JButton browseButton = new JButton("Browse...");
browseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
browseForDir();
}
});
component = new JPanel(new BorderLayout(10, 10));
component.add(new JScrollPane(list), BorderLayout.CENTER);
component.add(browseButton, BorderLayout.SOUTH);
}
private void checkChanged() {
if (lastSelection != getSelectedWorld()) {
lastSelection = getSelectedWorld();
setChanged();
notifyObservers();
}
}
private void browseForDir() {
JFileChooser dialog = new JFileChooser();
dialog.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
dialog.setDialogTitle("Select your minecraft save directory");
if (dialog.showOpenDialog(component) == JFileChooser.APPROVE_OPTION) {
Path path = dialog.getSelectedFile().toPath();
model.addElement(new World(path, "Manually added"));
list.setSelectedIndex(model.size() - 1);
}
}
}