/**
* This file is part of JSkat.
*
* JSkat is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JSkat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with JSkat. If not, see <http://www.gnu.org/licenses/>.
*/
package org.jskat.gui.javafx;
import org.jskat.control.JSkatEventBus;
import org.jskat.control.JSkatMaster;
import org.jskat.control.command.general.ShowAboutInformationCommand;
import org.jskat.control.command.general.ShowHelpCommand;
import org.jskat.control.command.general.ShowLicenseCommand;
import org.jskat.control.command.general.ShowPreferencesCommand;
import org.jskat.control.command.skatseries.CreateSkatSeriesCommand;
import org.jskat.control.command.skatseries.ReplayGameCommand;
import org.jskat.control.command.table.NextReplayMoveCommand;
import org.jskat.data.JSkatApplicationData;
import org.jskat.gui.img.JSkatGraphicRepository;
import org.jskat.gui.img.JSkatGraphicRepository.Icon;
import org.jskat.gui.img.JSkatGraphicRepository.IconSize;
import org.jskat.util.JSkatResourceBundle;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;
/**
* Factory for building the menu for JSkat.
*/
public final class JSkatMenuFactory {
/**
* Builds the menu.
*
* @return Menu for JSkat
*/
public static MenuBar build() {
JSkatResourceBundle strings = JSkatResourceBundle.INSTANCE;
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu(strings.getString("file"));
MenuItem loadSeriesMenuItem = new MenuItem(strings.getString("load_series"));
loadSeriesMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.LOAD, IconSize.SMALL));
MenuItem saveSeriesMenuItem = new MenuItem(strings.getString("save_series"));
saveSeriesMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.SAVE, IconSize.SMALL));
MenuItem saveSeriesAsMenuItem = new MenuItem(strings.getString("save_series_as"));
saveSeriesAsMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.SAVE_AS, IconSize.SMALL));
MenuItem exitJSkatMenuItem = new MenuItem(strings.getString("exit_jskat"));
exitJSkatMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.EXIT, IconSize.SMALL));
exitJSkatMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.exitJSkat());
fileMenu.getItems().addAll(loadSeriesMenuItem, saveSeriesMenuItem, saveSeriesAsMenuItem,
new SeparatorMenuItem(), exitJSkatMenuItem);
Menu skatTableMenu = new Menu(strings.getString("skat_table"));
MenuItem playOnLocalTable = new MenuItem(strings.getString("play_on_local_table")); //$NON-NLS-1$
playOnLocalTable.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.TABLE, IconSize.SMALL));
playOnLocalTable.setOnAction(actionEvent -> JSkatMaster.INSTANCE.createTable());
MenuItem startSkatSeriesMenuItem = new MenuItem(strings.getString("start_series")); //$NON-NLS-1$
startSkatSeriesMenuItem.setOnAction(actionEvent -> JSkatEventBus.INSTANCE.post(new CreateSkatSeriesCommand()));
startSkatSeriesMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.PLAY, IconSize.SMALL));
MenuItem replayGameMenuItem = new MenuItem(strings.getString("replay_game"));
replayGameMenuItem.setOnAction(actionEvent -> JSkatEventBus.TABLE_EVENT_BUSSES
.get(JSkatApplicationData.INSTANCE.getActiveTable()).post(new ReplayGameCommand()));
replayGameMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.FIRST, IconSize.SMALL));
MenuItem nextReplayMoveMenuItem = new MenuItem(strings.getString("next_replay_move"));
nextReplayMoveMenuItem.setOnAction(actionEvent -> JSkatEventBus.TABLE_EVENT_BUSSES
.get(JSkatApplicationData.INSTANCE.getActiveTable()).post(new NextReplayMoveCommand()));
nextReplayMoveMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.NEXT, IconSize.SMALL));
skatTableMenu.getItems().addAll(playOnLocalTable, new SeparatorMenuItem(), startSkatSeriesMenuItem,
new SeparatorMenuItem(), replayGameMenuItem, nextReplayMoveMenuItem);
Menu neuralNetworksMenu = new Menu(strings.getString("neural_networks"));
MenuItem loadNeuralNetworksMenuItem = new MenuItem(strings.getString("load_nn"));
loadNeuralNetworksMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.LOAD, IconSize.SMALL));
loadNeuralNetworksMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.loadNeuralNetworks());
MenuItem saveNeuralNetworksMenuItem = new MenuItem(strings.getString("save_nn"));
saveNeuralNetworksMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.SAVE, IconSize.SMALL));
saveNeuralNetworksMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.saveNeuralNetworks());
MenuItem resetNeuralNetworksMenuItem = new MenuItem(strings.getString("reset_nn"));
resetNeuralNetworksMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.resetNeuralNetworks());
resetNeuralNetworksMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.UNDO, IconSize.SMALL));
MenuItem trainNeuralNetworksMenuItem = new MenuItem(strings.getString("train_nn"));
trainNeuralNetworksMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.trainNeuralNetworks());
trainNeuralNetworksMenuItem
.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.TRAIN_NN, IconSize.SMALL));
MenuItem stopTrainNeuralNetworksMenuItem = new MenuItem(strings.getString("stop_train_nn"));
stopTrainNeuralNetworksMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.stopTrainNeuralNetworks());
stopTrainNeuralNetworksMenuItem
.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.PAUSE, IconSize.SMALL));
neuralNetworksMenu.getItems().addAll(loadNeuralNetworksMenuItem, saveNeuralNetworksMenuItem,
new SeparatorMenuItem(), resetNeuralNetworksMenuItem, trainNeuralNetworksMenuItem,
stopTrainNeuralNetworksMenuItem);
Menu issMenu = new Menu(strings.getString("iss"));
MenuItem playOnIssMenuItem = new MenuItem(strings.getString("play_on_iss"));
playOnIssMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.getIssController().showISSLoginPanel());
playOnIssMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.CONNECT_ISS, IconSize.SMALL));
MenuItem createNewTableOnIssMenuItem = new MenuItem(strings.getString("new_table"));
createNewTableOnIssMenuItem
.setOnAction(actionEvent -> JSkatMaster.INSTANCE.getIssController().requestTableCreation());
createNewTableOnIssMenuItem
.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.TABLE, IconSize.SMALL));
MenuItem invitePlayerMenuItem = new MenuItem(strings.getString("invite"));
invitePlayerMenuItem.setOnAction(actionEvent -> JSkatMaster.INSTANCE.invitePlayer());
invitePlayerMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.INVITE, IconSize.SMALL));
issMenu.getItems().addAll(playOnIssMenuItem, new SeparatorMenuItem(), createNewTableOnIssMenuItem,
invitePlayerMenuItem);
Menu extrasMenu = new Menu(strings.getString("extras"));
MenuItem preferencesMenuItem = new MenuItem(strings.getString("preferences"));
preferencesMenuItem.setOnAction(actionEvent -> JSkatEventBus.INSTANCE.post(new ShowPreferencesCommand()));
preferencesMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.PREFERENCES, IconSize.SMALL));
extrasMenu.getItems().addAll(preferencesMenuItem);
Menu helpMenu = new Menu(strings.getString("help"));
MenuItem helpMenuItem = new MenuItem(strings.getString("help"));
helpMenuItem.setOnAction(actionEvent -> JSkatEventBus.INSTANCE.post(new ShowHelpCommand()));
helpMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.HELP, IconSize.SMALL));
MenuItem licenseMenuItem = new MenuItem(strings.getString("license"));
licenseMenuItem.setOnAction(actionEvent -> JSkatEventBus.INSTANCE.post(new ShowLicenseCommand()));
licenseMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.LICENSE, IconSize.SMALL));
MenuItem aboutMenuItem = new MenuItem(strings.getString("about"));
aboutMenuItem.setOnAction(actionEvent -> JSkatEventBus.INSTANCE.post(new ShowAboutInformationCommand()));
aboutMenuItem.setGraphic(JSkatGraphicRepository.INSTANCE.getImageView(Icon.ABOUT, IconSize.SMALL));
helpMenu.getItems().addAll(helpMenuItem, new SeparatorMenuItem(), licenseMenuItem, aboutMenuItem);
menuBar.getMenus().addAll(fileMenu, skatTableMenu, neuralNetworksMenu, issMenu, extrasMenu, helpMenu);
return menuBar;
}
}