package dev.kske.chess.ui; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import dev.kske.chess.game.Game; /** * Project: Chess
* File: MenuBar.java
* Created: 16.07.2019
* Author: Kai S. K. Engelbart */ public class MenuBar extends JMenuBar { private static final long serialVersionUID = -7221583703531248228L; private final MainWindow mainWindow; public MenuBar(MainWindow mainWindow) { this.mainWindow = mainWindow; initGameMenu(); initEngineMenu(); initToolsMenu(); } private void initGameMenu() { JMenu gameMenu = new JMenu("Game"); JMenuItem newGameMenuItem = new JMenuItem("New Game"); newGameMenuItem.addActionListener((evt) -> { GameConfigurationDialog.show((whiteName, blackName) -> { GamePane gamePane = mainWindow.addGamePane(); Game game = new Game(gamePane.getBoardPane(), whiteName, blackName); gamePane.setGame(game); game.start(); }); }); gameMenu.add(newGameMenuItem); add(gameMenu); newGameMenuItem.doClick(); } private void initEngineMenu() { JMenu engineMenu = new JMenu("Engine"); JMenuItem addEngineMenuItem = new JMenuItem("Add engine"); addEngineMenuItem.addActionListener((evt) -> { String enginePath = JOptionPane.showInputDialog(getParent(), "Enter the path to a UCI-compatible chess engine:", "Engine selection", JOptionPane.QUESTION_MESSAGE); if (enginePath != null) EngineUtil.addEngine(enginePath); }); JMenuItem showInfoMenuItem = new JMenuItem("Show engine info"); engineMenu.add(addEngineMenuItem); engineMenu.add(showInfoMenuItem); add(engineMenu); } private void initToolsMenu() { JMenu toolsMenu = new JMenu("Tools"); JMenuItem exportFENMenuItem = new JMenuItem("Export board to FEN"); exportFENMenuItem.addActionListener((evt) -> { final String fen = mainWindow.getSelectedGamePane().getGame().getBoard().toFEN(); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(fen), null); JOptionPane.showMessageDialog(mainWindow, String.format("FEN-string copied to clipboard!%n%s", fen)); }); toolsMenu.add(exportFENMenuItem); JMenuItem loadFromFENMenuItem = new JMenuItem("Load board from FEN"); loadFromFENMenuItem.addActionListener((evt) -> { final GamePane gamePane = mainWindow.addGamePane(); final String fen = JOptionPane.showInputDialog("Enter a FEN string: "); GameConfigurationDialog.show((whiteName, blackName) -> { final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, fen); gamePane.setGame(game); game.start(); }); }); toolsMenu.add(loadFromFENMenuItem); add(toolsMenu); } }