mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 19:04:49 +00:00
Change language buttons added. Made UI update all text on language change
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.toop.app;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import org.toop.app.menu.MainMenu;
|
||||
import org.toop.app.menu.Menu;
|
||||
|
||||
@@ -15,8 +16,13 @@ import javafx.scene.text.Text;
|
||||
import javafx.stage.Stage;
|
||||
import org.toop.framework.asset.ResourceManager;
|
||||
import org.toop.framework.asset.resources.CssAsset;
|
||||
import org.toop.framework.asset.resources.LocalizationAsset;
|
||||
import org.toop.framework.audio.events.AudioEvents;
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
import org.toop.local.AppContext;
|
||||
import org.toop.local.LocalizationEvents;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public final class App extends Application {
|
||||
private static Stage stage;
|
||||
@@ -26,15 +32,19 @@ public final class App extends Application {
|
||||
private static int height;
|
||||
|
||||
private static boolean isQuitting;
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private final LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
|
||||
private static class QuitMenu extends Menu {
|
||||
public QuitMenu() {
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private final LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
public QuitMenu() {
|
||||
final Region background = createBackground("quit_background");
|
||||
|
||||
final Text sure = createText("Are you sure?");
|
||||
final Text sure = createText(loc.getString("quitMenuTextSure",currentLocale));
|
||||
|
||||
final Button yes = createButton("Yes", () -> { stage.close(); });
|
||||
final Button no = createButton("No", () -> { pop(); isQuitting = false; });
|
||||
final Button yes = createButton(loc.getString("quitMenuButtonYes",currentLocale), () -> { stage.close(); });
|
||||
final Button no = createButton(loc.getString("quitMenuButtonNo",currentLocale), () -> { pop(); isQuitting = false; });
|
||||
|
||||
final HBox buttons = new HBox(50, yes, no);
|
||||
buttons.setAlignment(Pos.CENTER);
|
||||
@@ -62,7 +72,7 @@ public final class App extends Application {
|
||||
final Scene scene = new Scene(root);
|
||||
scene.getStylesheets().add(((CssAsset) ResourceManager.get("app.css")).getUrl());
|
||||
|
||||
stage.setTitle("pism");
|
||||
stage.setTitle(loc.getString("windowTitle",currentLocale));
|
||||
stage.setMinWidth(1080);
|
||||
stage.setMinHeight(720);
|
||||
|
||||
@@ -89,7 +99,23 @@ public final class App extends Application {
|
||||
new EventFlow().addPostEvent(new AudioEvents.ChangeVolume(0.1)).asyncPostEvent();
|
||||
|
||||
App.isQuitting = false;
|
||||
}
|
||||
try {
|
||||
new EventFlow()
|
||||
.listen(this::handleChangeLanguage);
|
||||
|
||||
}catch (Exception e){
|
||||
System.out.println("Something went wrong while trying to change the language.");
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
|
||||
Platform.runLater(() -> {
|
||||
currentLocale = AppContext.getLocale();
|
||||
stage.setTitle(loc.getString("windowTitle",currentLocale));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public static void quitPopup() {
|
||||
isQuitting = true;
|
||||
@@ -102,7 +128,7 @@ public final class App extends Application {
|
||||
}
|
||||
|
||||
public static void push(Menu menu) {
|
||||
root.getChildren().addLast(menu.getPane());
|
||||
root.getChildren().addLast(menu.getPane());
|
||||
}
|
||||
|
||||
public static void pop() {
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.toop.app.menu;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import org.toop.framework.asset.ResourceManager;
|
||||
import org.toop.framework.asset.resources.LocalizationAsset;
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
import org.toop.local.AppContext;
|
||||
import org.toop.local.LocalizationEvents;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -10,5 +13,21 @@ public final class CreditsMenu extends Menu {
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
public CreditsMenu() {
|
||||
}
|
||||
try {
|
||||
new EventFlow()
|
||||
.listen(this::handleChangeLanguage);
|
||||
|
||||
}catch (Exception e){
|
||||
System.out.println("Something went wrong while trying to change the language.");
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
|
||||
Platform.runLater(() -> {
|
||||
currentLocale = AppContext.getLocale();
|
||||
//credits.setText(loc.getString("credits",currentLocale));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.toop.app.menu;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.scene.control.ComboBox;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.layout.HBox;
|
||||
@@ -7,27 +8,60 @@ import javafx.scene.layout.Region;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.layout.VBox;
|
||||
import org.toop.app.GameType;
|
||||
import org.toop.framework.asset.ResourceManager;
|
||||
import org.toop.framework.asset.resources.LocalizationAsset;
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
import org.toop.local.AppContext;
|
||||
import org.toop.local.LocalizationEvents;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class GameSelectMenu extends Menu {
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private final LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
|
||||
final ComboBox<String> selectedMode, selectedGame;
|
||||
final TextField serverIpField;
|
||||
|
||||
public GameSelectMenu(GameType type) {
|
||||
final Region background = createBackground();
|
||||
|
||||
final ComboBox<String> selectedGame = new ComboBox<>();
|
||||
selectedGame = new ComboBox<>();
|
||||
selectedGame.getItems().add(GameType.toName(GameType.TICTACTOE));
|
||||
selectedGame.getItems().add(GameType.toName(GameType.REVERSI));
|
||||
selectedGame.setValue(GameType.toName(type));
|
||||
|
||||
final ComboBox<String> selectedMode = new ComboBox<>();
|
||||
selectedMode = new ComboBox<>();
|
||||
selectedMode.getItems().add("Local");
|
||||
selectedMode.getItems().add("Online");
|
||||
selectedMode.setValue("Local");
|
||||
|
||||
final HBox selectedContainer = new HBox(10, selectedGame, selectedMode);
|
||||
|
||||
final TextField serverIpField = new TextField();
|
||||
serverIpField.setPromptText("Enter here your server ip address");
|
||||
serverIpField = new TextField();
|
||||
serverIpField.setPromptText(loc.getString("gameSelectMenuEnterIP",currentLocale));
|
||||
|
||||
VBox box = new VBox(selectedContainer, serverIpField);
|
||||
pane = new StackPane(background, box);
|
||||
}
|
||||
try {
|
||||
new EventFlow()
|
||||
.listen(this::handleChangeLanguage);
|
||||
|
||||
}catch (Exception e){
|
||||
System.out.println("Something went wrong while trying to change the language.");
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
|
||||
Platform.runLater(() -> {
|
||||
currentLocale = AppContext.getLocale();
|
||||
serverIpField.setPromptText(loc.getString("gameSelectMenuEnterIP",currentLocale));
|
||||
selectedGame.getItems().set(0, loc.getString("mainMenuSelectTicTacToe",currentLocale));
|
||||
selectedGame.getItems().set(1, loc.getString("mainMenuSelectReversi",currentLocale));
|
||||
selectedMode.getItems().set(0, loc.getString("gameSelectMenuLocal",currentLocale));
|
||||
selectedMode.getItems().set(1, loc.getString("gameSelectMenuOnline",currentLocale));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.toop.app.menu;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import org.toop.app.App;
|
||||
import org.toop.app.GameType;
|
||||
|
||||
@@ -7,14 +8,24 @@ import javafx.geometry.Pos;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.layout.*;
|
||||
import org.toop.app.menu.game.TicTacToeMenu;
|
||||
import org.toop.framework.asset.ResourceManager;
|
||||
import org.toop.framework.asset.resources.LocalizationAsset;
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
import org.toop.game.tictactoe.TicTacToe;
|
||||
import org.toop.local.AppContext;
|
||||
import org.toop.local.LocalizationEvents;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public final class MainMenu extends Menu {
|
||||
public MainMenu() {
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private final LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
private final Button tictactoe,reversi,credits,options,quit;
|
||||
public MainMenu() {
|
||||
final Region background = createBackground();
|
||||
|
||||
final Button tictactoe = createButton("Tic Tac Toe", () -> { App.activate(new TicTacToeMenu(new TicTacToe("player 1", true, "player 2", true))); });
|
||||
final Button reversi = createButton("Reversi", () -> { App.activate(new GameSelectMenu(GameType.REVERSI)); });
|
||||
tictactoe = createButton(loc.getString("mainMenuSelectTicTacToe",currentLocale), () -> { App.activate(new TicTacToeMenu(new TicTacToe("player 1", true, "player 2", true))); });
|
||||
reversi = createButton(loc.getString("mainMenuSelectReversi",currentLocale), () -> { App.activate(new GameSelectMenu(GameType.REVERSI)); });
|
||||
|
||||
final VBox gamesBox = new VBox(10, tictactoe, reversi);
|
||||
gamesBox.setAlignment(Pos.TOP_LEFT);
|
||||
@@ -22,9 +33,9 @@ public final class MainMenu extends Menu {
|
||||
gamesBox.setTranslateY(50);
|
||||
gamesBox.setTranslateX(25);
|
||||
|
||||
final Button credits = createButton("Credits", () -> { App.push(new CreditsMenu()); });
|
||||
final Button options = createButton("Options", () -> { App.push(new OptionsMenu()); });
|
||||
final Button quit = createButton("Quit", () -> { App.quitPopup(); });
|
||||
credits = createButton(loc.getString("mainMenuSelectCredits",currentLocale), () -> { App.push(new CreditsMenu()); });
|
||||
options = createButton(loc.getString("mainMenuSelectOptions",currentLocale), () -> { App.push(new OptionsMenu()); });
|
||||
quit = createButton(loc.getString("mainMenuSelectQuit",currentLocale), () -> { App.quitPopup(); });
|
||||
|
||||
final VBox controlBox = new VBox(10, credits, options, quit);
|
||||
controlBox.setAlignment(Pos.BOTTOM_LEFT);
|
||||
@@ -33,5 +44,25 @@ public final class MainMenu extends Menu {
|
||||
controlBox.setTranslateX(25);
|
||||
|
||||
pane = new StackPane(background, gamesBox, controlBox);
|
||||
}
|
||||
try {
|
||||
new EventFlow()
|
||||
.listen(this::handleChangeLanguage);
|
||||
|
||||
}catch (Exception e){
|
||||
System.out.println("Something went wrong while trying to change the language.");
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
|
||||
Platform.runLater(() -> {
|
||||
currentLocale = AppContext.getLocale();
|
||||
tictactoe.setText(loc.getString("mainMenuSelectTicTacToe",currentLocale));
|
||||
reversi.setText(loc.getString("mainMenuSelectReversi",currentLocale));
|
||||
credits.setText(loc.getString("mainMenuSelectCredits",currentLocale));
|
||||
options.setText(loc.getString("mainMenuSelectOptions",currentLocale));
|
||||
quit.setText(loc.getString("mainMenuSelectQuit",currentLocale));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,69 @@
|
||||
package org.toop.app.menu;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Region;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.text.Text;
|
||||
import org.toop.framework.asset.ResourceManager;
|
||||
import org.toop.framework.asset.resources.LocalizationAsset;
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
import org.toop.local.AppContext;
|
||||
import org.toop.local.LocalizationEvents;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public final class OptionsMenu extends Menu {
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
private final LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
private Text chooseLang;
|
||||
private Button english,dutch,german,french,italian,spanish,chinese;
|
||||
|
||||
public OptionsMenu() {
|
||||
}
|
||||
final Region background = createBackground("quit_background");
|
||||
|
||||
chooseLang = createText(loc.getString("languageChangeText",currentLocale));
|
||||
english = createButton(loc.getString("languageEnglish",currentLocale), () -> AppContext.setCurrentLocale(Locale.ENGLISH));
|
||||
dutch = createButton(loc.getString("languageDutch",currentLocale), () -> AppContext.setCurrentLocale(Locale.of("nl")));
|
||||
german = createButton(loc.getString("languageGerman",currentLocale), () -> AppContext.setCurrentLocale(Locale.of("de")));
|
||||
french = createButton(loc.getString("languageFrench",currentLocale), () -> AppContext.setCurrentLocale(Locale.of("fr")));
|
||||
italian = createButton(loc.getString("languageItalian",currentLocale), () -> AppContext.setCurrentLocale(Locale.of("it")));
|
||||
spanish = createButton(loc.getString("languageSpanish",currentLocale), () -> AppContext.setCurrentLocale(Locale.of("es")));
|
||||
chinese = createButton(loc.getString("languageChinese",currentLocale), () -> AppContext.setCurrentLocale(Locale.of("zh")));
|
||||
|
||||
final VBox buttons = new VBox(10, chooseLang, english,dutch,german,french,italian,spanish,chinese);
|
||||
|
||||
buttons.setAlignment(Pos.CENTER);
|
||||
buttons.getStyleClass().add("quit_box");
|
||||
buttons.setMaxWidth(300);
|
||||
buttons.setMaxHeight(600);
|
||||
pane = new StackPane(background, buttons);
|
||||
|
||||
try {
|
||||
new EventFlow()
|
||||
.listen(this::handleChangeLanguage);
|
||||
|
||||
}catch (Exception e){
|
||||
System.out.println("Something went wrong while trying to change the language.");
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
|
||||
Platform.runLater(() -> {
|
||||
currentLocale = AppContext.getLocale();
|
||||
chooseLang.setText(loc.getString("languageChangeText",currentLocale));
|
||||
english.setText(loc.getString("languageEnglish",currentLocale));
|
||||
dutch.setText(loc.getString("languageDutch",currentLocale));
|
||||
german.setText(loc.getString("languageGerman",currentLocale));
|
||||
french.setText(loc.getString("languageFrench",currentLocale));
|
||||
italian.setText(loc.getString("languageItalian",currentLocale));
|
||||
spanish.setText(loc.getString("languageSpanish",currentLocale));
|
||||
chinese.setText(loc.getString("languageChinese",currentLocale));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.toop.app.menu.game;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.canvas.Canvas;
|
||||
import javafx.scene.canvas.GraphicsContext;
|
||||
@@ -12,6 +13,13 @@ import javafx.scene.text.Text;
|
||||
import org.toop.app.App;
|
||||
import org.toop.app.menu.MainMenu;
|
||||
import org.toop.app.menu.Menu;
|
||||
import org.toop.framework.asset.ResourceManager;
|
||||
import org.toop.framework.asset.resources.LocalizationAsset;
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
import org.toop.local.AppContext;
|
||||
import org.toop.local.LocalizationEvents;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public abstract class GameMenu extends Menu {
|
||||
protected final class Cell {
|
||||
@@ -46,7 +54,11 @@ public abstract class GameMenu extends Menu {
|
||||
|
||||
protected final Cell[] cells;
|
||||
|
||||
private Locale currentLocale = AppContext.getLocale();
|
||||
private final LocalizationAsset loc = ResourceManager.get("localization.properties");
|
||||
private final Button hint,back;
|
||||
protected GameMenu(int rows, int columns, int gapSize) {
|
||||
|
||||
final int size = Math.min(App.getWidth(), App.getHeight()) / 5 * 4;
|
||||
|
||||
final Canvas canvas = new Canvas(size, size);
|
||||
@@ -87,13 +99,30 @@ public abstract class GameMenu extends Menu {
|
||||
playersContainer.setPickOnBounds(false);
|
||||
playersContainer.setTranslateY(50);
|
||||
|
||||
final Button hint = createButton("Hint", () -> {});
|
||||
final Button back = createButton("Back", () -> { App.activate(new MainMenu()); });
|
||||
hint = createButton(loc.getString("gameMenuHint",currentLocale), () -> {});
|
||||
back = createButton(loc.getString("gameMenuBack",currentLocale), () -> { App.activate(new MainMenu()); });
|
||||
|
||||
final VBox controlContainer = new VBox(hint, back);
|
||||
StackPane.setAlignment(controlContainer, Pos.BOTTOM_LEFT);
|
||||
controlContainer.setPickOnBounds(false);
|
||||
|
||||
pane = new StackPane(background, canvas, playersContainer, controlContainer);
|
||||
}
|
||||
try {
|
||||
new EventFlow()
|
||||
.listen(this::handleChangeLanguage);
|
||||
|
||||
}catch (Exception e){
|
||||
System.out.println("Something went wrong while trying to change the language.");
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
private void handleChangeLanguage(LocalizationEvents.LanguageHasChanged event) {
|
||||
Platform.runLater(() -> {
|
||||
currentLocale = AppContext.getLocale();
|
||||
hint.setText(loc.getString("gameMenuHint",currentLocale));
|
||||
back.setText(loc.getString("gameMenuBack",currentLocale));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.toop.local;
|
||||
|
||||
import org.toop.framework.eventbus.EventFlow;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class AppContext {
|
||||
@@ -7,6 +9,7 @@ public class AppContext {
|
||||
|
||||
public static void setCurrentLocale(Locale locale) {
|
||||
currentLocale = locale;
|
||||
new EventFlow().addPostEvent(new LocalizationEvents.LanguageHasChanged(locale.getLanguage())).asyncPostEvent();
|
||||
}
|
||||
public static Locale getLocale() {
|
||||
return currentLocale;
|
||||
|
||||
9
app/src/main/java/org/toop/local/LocalizationEvents.java
Normal file
9
app/src/main/java/org/toop/local/LocalizationEvents.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package org.toop.local;
|
||||
|
||||
|
||||
import org.toop.framework.eventbus.events.EventWithoutSnowflake;
|
||||
import org.toop.framework.eventbus.events.EventsBase;
|
||||
|
||||
public class LocalizationEvents extends EventsBase {
|
||||
public record LanguageHasChanged(String language) implements EventWithoutSnowflake {}
|
||||
}
|
||||
Reference in New Issue
Block a user