180 lines
5.2 KiB
Java
180 lines
5.2 KiB
Java
package ch.zhaw.gartenverwaltung;
|
|
|
|
import ch.zhaw.gartenverwaltung.bootstrap.AfterInject;
|
|
import ch.zhaw.gartenverwaltung.bootstrap.AppLoader;
|
|
import ch.zhaw.gartenverwaltung.bootstrap.ChangeViewEvent;
|
|
import ch.zhaw.gartenverwaltung.bootstrap.Inject;
|
|
import javafx.event.EventHandler;
|
|
import javafx.fxml.FXML;
|
|
import javafx.scene.control.*;
|
|
import javafx.scene.image.Image;
|
|
import javafx.scene.image.ImageView;
|
|
import javafx.scene.layout.AnchorPane;
|
|
import javafx.scene.layout.Pane;
|
|
|
|
import java.io.IOException;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
public class MainFXMLController {
|
|
private static final Logger LOG = Logger.getLogger(MainFXMLController.class.getName());
|
|
|
|
@Inject
|
|
AppLoader appLoader;
|
|
|
|
@FXML
|
|
private Button home_button;
|
|
|
|
@FXML
|
|
private AnchorPane mainPane;
|
|
|
|
@FXML
|
|
private Button myGarden_button;
|
|
|
|
@FXML
|
|
private Button mySchedule_button;
|
|
|
|
@FXML
|
|
private Button settings_button;
|
|
|
|
@FXML
|
|
private Button tutorial_button;
|
|
|
|
/**
|
|
* go to home pane
|
|
*/
|
|
@FXML
|
|
void goToHome() {
|
|
showPaneAsMainView("Home.fxml");
|
|
styleChangeButton(home_button);
|
|
}
|
|
|
|
/**
|
|
* go to my garden pane
|
|
*/
|
|
@FXML
|
|
void goToMyPlants() {
|
|
showPaneAsMainView("MyGarden.fxml");
|
|
styleChangeButton(myGarden_button);
|
|
}
|
|
|
|
/**
|
|
* go to the schedule pane
|
|
*/
|
|
@FXML
|
|
void goToMySchedule() {
|
|
showPaneAsMainView("MySchedule.fxml");
|
|
styleChangeButton(mySchedule_button);
|
|
}
|
|
|
|
/**
|
|
* open dialog of the settings
|
|
* @throws IOException exception
|
|
*/
|
|
@FXML
|
|
public void openSettings() throws IOException {
|
|
Dialog<ButtonType> dialog = new Dialog<>();
|
|
dialog.setTitle("Settings");
|
|
dialog.setHeaderText("Settings");
|
|
dialog.setResizable(false);
|
|
|
|
DialogPane dialogPane = dialog.getDialogPane();
|
|
|
|
ButtonType saveSettings = new ButtonType("Save", ButtonBar.ButtonData.OK_DONE);
|
|
dialogPane.getButtonTypes().addAll(saveSettings, ButtonType.CANCEL);
|
|
|
|
if (appLoader.loadPaneToDialog("Settings.fxml", dialogPane) instanceof SettingsController controller) {
|
|
|
|
dialog.showAndWait()
|
|
.ifPresent(button -> {
|
|
if (button.equals(saveSettings)) {
|
|
controller.saveSettings();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* go to Tutorial pane
|
|
*/
|
|
public void goToTutorial() {
|
|
showPaneAsMainView("Tutorial.fxml");
|
|
styleChangeButton(tutorial_button);
|
|
}
|
|
|
|
/**
|
|
* Updates the mainPane with the selected fxml file.
|
|
* set HGrow and VGrow to parent AnchorPane.
|
|
* Sends MainController to other Controllers.
|
|
* @param fxmlFile string of fxml file
|
|
*/
|
|
public void showPaneAsMainView(String fxmlFile) {
|
|
try {
|
|
Pane anchorPane = appLoader.loadPane(fxmlFile);
|
|
mainPane.getChildren().setAll(anchorPane);
|
|
anchorPane.prefWidthProperty().bind(mainPane.widthProperty());
|
|
anchorPane.prefHeightProperty().bind(mainPane.heightProperty());
|
|
|
|
anchorPane.removeEventHandler(ChangeViewEvent.CHANGE_MAIN_VIEW, changeMainViewHandler);
|
|
anchorPane.addEventHandler(ChangeViewEvent.CHANGE_MAIN_VIEW, changeMainViewHandler);
|
|
} catch (IOException e) {
|
|
LOG.log(Level.SEVERE, "Could not load pane.", e);
|
|
}
|
|
}
|
|
|
|
private final EventHandler<ChangeViewEvent> changeMainViewHandler = (ChangeViewEvent event) -> showPaneAsMainView(event.view());
|
|
|
|
/**
|
|
* preload all menu bar panes
|
|
* @throws IOException exception
|
|
*/
|
|
private void preloadPanes() throws IOException {
|
|
appLoader.loadAndCacheFxml("MyGarden.fxml");
|
|
appLoader.loadAndCacheFxml("MySchedule.fxml");
|
|
appLoader.loadAndCacheFxml("Plants.fxml");
|
|
appLoader.loadAndCacheFxml("Tutorial.fxml");
|
|
}
|
|
|
|
private void styleChangeButton(Button button) {
|
|
//ToDo changeStyle of the menu buttons
|
|
}
|
|
|
|
/**
|
|
* loads the default FXML File
|
|
* {@inheritDoc}
|
|
*/
|
|
@AfterInject
|
|
@SuppressWarnings("unused")
|
|
public void init() {
|
|
try {
|
|
preloadPanes();
|
|
showPaneAsMainView("MyGarden.fxml");
|
|
styleChangeButton(myGarden_button);
|
|
} catch (IOException e) {
|
|
LOG.log(Level.SEVERE, "Failed to load FXML-Pane!", e);
|
|
}
|
|
setIconToButton(home_button, "homeIcon.png");
|
|
setIconToButton(settings_button, "settingsIcon.png");
|
|
Settings.getInstance().getShowTutorialProperty().addListener((observable, oldValue, newValue) -> {
|
|
tutorial_button.setVisible(newValue);
|
|
});
|
|
tutorial_button.setVisible(Settings.getInstance().getShowTutorial());
|
|
}
|
|
|
|
/**
|
|
* adds icon to given button
|
|
* @param button the button which get the icon
|
|
* @param iconFileName file name of icon
|
|
*/
|
|
private void setIconToButton(Button button, String iconFileName) {
|
|
Image img = new Image(String.valueOf(getClass().getResource("icons/" + iconFileName)));
|
|
ImageView imageView = new ImageView(img);
|
|
imageView.setFitHeight(20);
|
|
imageView.setPreserveRatio(true);
|
|
button.setGraphic(imageView);
|
|
}
|
|
|
|
|
|
}
|
|
|