From bcb36b89c7b025d8c89673a016de4b834ac956d2 Mon Sep 17 00:00:00 2001 From: David Guler Date: Wed, 23 Nov 2022 21:55:35 +0100 Subject: [PATCH 1/2] feature: added tutorial window --- .../gartenverwaltung/MainFXMLController.java | 40 +++-- .../gartenverwaltung/TutorialController.java | 55 +++++++ .../ch/zhaw/gartenverwaltung/MainFXML.fxml | 2 +- .../ch/zhaw/gartenverwaltung/Tutorial.fxml | 148 ++++++++++++++++-- 4 files changed, 215 insertions(+), 30 deletions(-) diff --git a/src/main/java/ch/zhaw/gartenverwaltung/MainFXMLController.java b/src/main/java/ch/zhaw/gartenverwaltung/MainFXMLController.java index 2cc05d3..33a67c5 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/MainFXMLController.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/MainFXMLController.java @@ -11,6 +11,9 @@ import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.stage.WindowEvent; import java.io.IOException; import java.util.logging.Level; @@ -40,6 +43,9 @@ public class MainFXMLController { @FXML private Button tutorial_button; + private final Stage tutorialModal = new Stage(); + + /** * go to home pane */ @@ -95,11 +101,23 @@ public class MainFXMLController { } /** - * go to Tutorial pane + * Show the tutorial window */ - public void goToTutorial() { - showPaneAsMainView("Tutorial.fxml"); - styleChangeButton(tutorial_button); + public void showTutorial() { + if (!tutorialModal.isShowing()) { + if (tutorialModal.getScene() == null) { + try { + appLoader.loadSceneToStage("Tutorial.fxml", tutorialModal); + tutorialModal.initModality(Modality.NONE); + tutorialModal.setResizable(false); + tutorialModal.sizeToScene(); + } catch (IOException e) { + LOG.log(Level.SEVERE, "Could not load Tutorial"); + } + } + tutorialModal.show(); + } + tutorialModal.requestFocus(); } /** @@ -132,7 +150,6 @@ public class MainFXMLController { appLoader.loadAndCacheFxml("MyGarden.fxml"); appLoader.loadAndCacheFxml("MySchedule.fxml"); appLoader.loadAndCacheFxml("Plants.fxml"); - appLoader.loadAndCacheFxml("Tutorial.fxml"); } private void styleChangeButton(Button button) { @@ -153,12 +170,14 @@ public class MainFXMLController { } catch (IOException e) { LOG.log(Level.SEVERE, "Failed to load FXML-Pane!", e); } + mainPane.getScene().getWindow().setOnCloseRequest(this::closeWindowHandler); 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()); + tutorial_button.visibleProperty().bind(Settings.getInstance().getShowTutorialProperty()); + } + + private void closeWindowHandler(WindowEvent windowEvent) { + tutorialModal.close(); } /** @@ -173,7 +192,4 @@ public class MainFXMLController { imageView.setPreserveRatio(true); button.setGraphic(imageView); } - - } - diff --git a/src/main/java/ch/zhaw/gartenverwaltung/TutorialController.java b/src/main/java/ch/zhaw/gartenverwaltung/TutorialController.java index aa02930..a1de10b 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/TutorialController.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/TutorialController.java @@ -1,6 +1,61 @@ package ch.zhaw.gartenverwaltung; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + public class TutorialController { + @FXML + public Button previousPageButton; + @FXML + public Button nextPageButton; + @FXML + public StackPane tourPages; + public ImageView imgAddNewPlant; + public ImageView imgTaskList; + public ImageView imgSelectDate; + + private int page = 0; + + @FXML + public void initialize() { + switchViews(); + setButtonAbilities(); + + Image placeholder = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png"))); + imgAddNewPlant.setImage(placeholder); + imgSelectDate.setImage(placeholder); + imgTaskList.setImage(placeholder); + } + + public void viewNextPage() { + page++; + switchViews(); + setButtonAbilities(); + } + public void viewPreviousPage() { + page--; + switchViews(); + setButtonAbilities(); + } + + private void setButtonAbilities() { + previousPageButton.setDisable(page <= 0); + nextPageButton.setDisable(page >= tourPages.getChildren().size() - 1); + } + + private void switchViews() { + tourPages.getChildren().forEach(node -> node.setOpacity(0)); + tourPages.getChildren().get(page).setOpacity(1); + } + + public void closeTutorial() { + Stage root = (Stage) tourPages.getScene().getWindow(); + root.close(); + } } diff --git a/src/main/resources/ch/zhaw/gartenverwaltung/MainFXML.fxml b/src/main/resources/ch/zhaw/gartenverwaltung/MainFXML.fxml index ddca3e3..74a6e34 100644 --- a/src/main/resources/ch/zhaw/gartenverwaltung/MainFXML.fxml +++ b/src/main/resources/ch/zhaw/gartenverwaltung/MainFXML.fxml @@ -12,7 +12,7 @@