83 lines
2.8 KiB
Java
83 lines
2.8 KiB
Java
package dev.kske.chess.ui;
|
|
|
|
import java.awt.Component;
|
|
import java.awt.Font;
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.function.BiConsumer;
|
|
import java.util.function.Consumer;
|
|
|
|
import javax.swing.DefaultComboBoxModel;
|
|
import javax.swing.JComboBox;
|
|
import javax.swing.JFileChooser;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.filechooser.FileFilter;
|
|
|
|
import dev.kske.chess.io.EngineUtil;
|
|
|
|
/**
|
|
* Project: <strong>Chess</strong><br>
|
|
* File: <strong>DialogUtil.java</strong><br>
|
|
* Created: <strong>24.07.2019</strong><br>
|
|
* Author: <strong>Kai S. K. Engelbart</strong>
|
|
*/
|
|
public class DialogUtil {
|
|
|
|
private DialogUtil() {}
|
|
|
|
public static void showFileSelectionDialog(Component parent, Consumer<List<File>> action) {
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
|
|
fileChooser.setAcceptAllFileFilterUsed(false);
|
|
fileChooser.addChoosableFileFilter(new FileFilter() {
|
|
|
|
@Override
|
|
public boolean accept(File f) {
|
|
int dotIndex = f.getName().lastIndexOf('.');
|
|
if (dotIndex >= 0) {
|
|
String extension = f.getName().substring(dotIndex).toLowerCase();
|
|
return extension.equals(".fen") || extension.equals(".pgn");
|
|
} else return f.isDirectory();
|
|
}
|
|
|
|
@Override
|
|
public String getDescription() { return "FEN and PGN files"; }
|
|
});
|
|
if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) action.accept(Arrays.asList(fileChooser.getSelectedFile()));
|
|
}
|
|
|
|
public static void showGameConfigurationDialog(Component parent, BiConsumer<String, String> action) {
|
|
JPanel dialogPanel = new JPanel();
|
|
|
|
List<String> options = new ArrayList<>(Arrays.asList("Natural Player", "AI Player"));
|
|
EngineUtil.getEngineInfos().forEach(info -> options.add(info.name));
|
|
|
|
JLabel lblWhite = new JLabel("White:");
|
|
lblWhite.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
|
lblWhite.setBounds(10, 11, 49, 14);
|
|
dialogPanel.add(lblWhite);
|
|
|
|
JComboBox<Object> cbWhite = new JComboBox<>();
|
|
cbWhite.setModel(new DefaultComboBoxModel<Object>(options.toArray()));
|
|
cbWhite.setBounds(98, 9, 159, 22);
|
|
dialogPanel.add(cbWhite);
|
|
|
|
JLabel lblBlack = new JLabel("Black:");
|
|
lblBlack.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
|
lblBlack.setBounds(10, 38, 49, 14);
|
|
dialogPanel.add(lblBlack);
|
|
|
|
JComboBox<Object> cbBlack = new JComboBox<>();
|
|
cbBlack.setModel(new DefaultComboBoxModel<Object>(options.toArray()));
|
|
cbBlack.setBounds(98, 36, 159, 22);
|
|
dialogPanel.add(cbBlack);
|
|
|
|
JOptionPane.showMessageDialog(parent, dialogPanel, "Game configuration", JOptionPane.QUESTION_MESSAGE);
|
|
action.accept(options.get(cbWhite.getSelectedIndex()), options.get(cbBlack.getSelectedIndex()));
|
|
}
|
|
}
|