Automate switching between languages

This commit is contained in:
2021-02-23 00:46:43 +01:00
parent 1860d4c57f
commit 4e24363e63
14 changed files with 418 additions and 74 deletions

View File

@@ -5,11 +5,16 @@ import java.net.URL;
import java.util.ResourceBundle;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import app.events.LanguageChangedEvent;
import app.model.Model;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.MenuBar;
import javafx.scene.control.RadioMenuItem;
import javafx.scene.control.ToggleGroup;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
@@ -17,11 +22,13 @@ import javafx.stage.Stage;
public class MenubarController implements Initializable, Controller {
private EventBus eventBus;
private Model model;
@FXML
private MenuBar menubar;
@FXML
private ToggleGroup languageToggleGroup;
@FXML
public String handleOpenFile() {
FileChooser fc = new FileChooser();
@@ -76,12 +83,27 @@ public class MenubarController implements Initializable, Controller {
}
/**
* Links the controller to the global model
*
* @param model The model to be linked
* Handles the event where the language was change from the menu.
*/
public void setModel(Model model) {
this.model = model;
@FXML
private void handleLanguageChange(ActionEvent event) {
this.eventBus.post(
new LanguageChangedEvent(
((RadioMenuItem) event.getSource()).getText()));
}
/**
* Updates menubuttons whenever the language is changed
*/
@Subscribe
private void handle(LanguageChangedEvent event) {
this.languageToggleGroup
.getToggles()
.stream()
.map(RadioMenuItem.class::cast)
.filter(t -> t.getId().equals("toggle" + event.getLanguage()))
.findFirst()
.orElseThrow()
.setSelected(true);
}
}