diff --git a/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java b/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java index 6dd2841..16acd3a 100644 --- a/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java +++ b/client/src/main/java/client/scenes/FoodpalApplicationCtrl.java @@ -2,10 +2,8 @@ package client.scenes; import java.io.IOException; -import java.io.InputStream; import java.util.Collections; import java.util.List; -import java.util.Locale; import client.exception.UpdateException; import client.scenes.recipe.IngredientListCtrl; @@ -18,7 +16,6 @@ import client.utils.ServerUtils; import commons.Recipe; import jakarta.inject.Inject; -import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Button; @@ -27,13 +24,10 @@ import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextField; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.Font; -import javafx.util.StringConverter; public class FoodpalApplicationCtrl implements LocaleAware { private final ServerUtils server; @@ -141,44 +135,7 @@ public class FoodpalApplicationCtrl implements LocaleAware { @Override public void initializeComponents() { // TODO Reduce code duplication?? - langSelectMenu.getItems().setAll("en", "pl", "nl"); - langSelectMenu.setConverter(new StringConverter() { - @Override - public String toString(String s) { - if (s == null) { - return ""; - } - return getLocaleString("lang." + s + ".display"); - } - @Override - public String fromString(String s) { - return s; - } - }); - langSelectMenu.setCellFactory(list -> new ListCell<>() { - @Override - protected void updateItem(String item, boolean empty) { - final int IMAGE_HEIGHT = 32; - final int HBOX_SPACING = 10; - super.updateItem(item, empty); - if (item == null || empty) { - setText(null); - setGraphic(null); - } else { - InputStream imageStream = getClass().getResourceAsStream("/flag_" + item + ".png"); - if (imageStream == null) { - setGraphic(new HBox(new Label(getLocaleString("lang." + item + ".display")))); - return; - } - Image img = new Image(imageStream); - ImageView imageView = new ImageView(img); - imageView.setFitHeight(IMAGE_HEIGHT); - imageView.setFitWidth(IMAGE_HEIGHT); - setGraphic(new HBox(HBOX_SPACING, imageView, new Label(getLocaleString("lang." + item + ".display")))); - } - } - }); initStepsIngredientsList(); initRecipeList(); refresh(); @@ -331,15 +288,6 @@ public class FoodpalApplicationCtrl implements LocaleAware { edit.requestFocus(); } - - // Language buttons - @FXML - private void switchLocale(ActionEvent event) { - System.out.println("switching"); - String lang = langSelectMenu.getSelectionModel().getSelectedItem(); - localeManager.setLocale(Locale.of(lang)); - } - @FXML private void makePrintable() { System.out.println("Recipe printed"); diff --git a/client/src/main/java/client/scenes/LangSelectMenuCtrl.java b/client/src/main/java/client/scenes/LangSelectMenuCtrl.java new file mode 100644 index 0000000..1df3e54 --- /dev/null +++ b/client/src/main/java/client/scenes/LangSelectMenuCtrl.java @@ -0,0 +1,100 @@ +package client.scenes; + +import client.utils.LocaleAware; +import client.utils.LocaleManager; +import com.google.inject.Inject; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; +import javafx.scene.control.ListCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.util.StringConverter; + +import java.io.InputStream; +import java.util.Locale; + +/** + * The language selection menu controller. + * This needs to implement {@link LocaleAware LocaleAware} so that the + * getLocaleString(String) function is available. + */ +public class LangSelectMenuCtrl implements LocaleAware { + public ComboBox langSelectMenu; + private final LocaleManager manager; + + @Inject + public LangSelectMenuCtrl(LocaleManager manager) { + this.manager = manager; + } + + /** + * Switches the locale of the application depending on which button the user selects in the list. + * @param event The action event triggered by the user. + */ + @FXML + private void switchLocale(ActionEvent event) { + String lang = langSelectMenu.getSelectionModel().getSelectedItem(); + manager.setLocale(Locale.of(lang)); + } + + @Override + public void initializeComponents() { + langSelectMenu.getItems().setAll("en", "pl", "nl"); + langSelectMenu.setConverter(new StringConverter() { + @Override + public String toString(String s) { + if (s == null) { + return ""; + } + return getLocaleString("lang." + s + ".display"); + } + + @Override + public String fromString(String s) { + return s; + } + }); + langSelectMenu.setCellFactory(list -> new ListCell<>() { + @Override + protected void updateItem(String item, boolean empty) { + final int IMAGE_HEIGHT = 32; + final int HBOX_SPACING = 10; + super.updateItem(item, empty); + if (item == null || empty) { + setText(null); + setGraphic(null); + return; + } + InputStream imageStream = getClass().getResourceAsStream("/flag_" + item + ".png"); + if (imageStream == null) { + setGraphic(new HBox(new Label(getLocaleString("lang." + item + ".display")))); + return; + } + Image img = new Image(imageStream); + ImageView imageView = new ImageView(img); + imageView.setFitHeight(IMAGE_HEIGHT); + imageView.setFitWidth(IMAGE_HEIGHT); + setGraphic( + new HBox( + HBOX_SPACING, + imageView, + new Label(getLocaleString("lang." + item + ".display")) + ) + ); + } + }); + } + + @Override + public void updateText() { + // doesn't do anything; the text doesn't need to be updated. + } + + @Override + public LocaleManager getLocaleManager() { + return manager; + } +} diff --git a/client/src/main/resources/client/scenes/FoodpalApplication.fxml b/client/src/main/resources/client/scenes/FoodpalApplication.fxml index a621046..b9edd58 100644 --- a/client/src/main/resources/client/scenes/FoodpalApplication.fxml +++ b/client/src/main/resources/client/scenes/FoodpalApplication.fxml @@ -38,8 +38,7 @@ - - +