refactor: converted SelectSowDay popup to proper JFX Dialog
This commit is contained in:
@@ -5,7 +5,9 @@ import ch.zhaw.gartenverwaltung.bootstrap.AppLoader;
|
||||
import ch.zhaw.gartenverwaltung.bootstrap.ChangeViewEvent;
|
||||
import ch.zhaw.gartenverwaltung.bootstrap.Inject;
|
||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||
import ch.zhaw.gartenverwaltung.models.Garden;
|
||||
import ch.zhaw.gartenverwaltung.models.PlantListModel;
|
||||
import ch.zhaw.gartenverwaltung.models.PlantNotFoundException;
|
||||
import ch.zhaw.gartenverwaltung.types.HardinessZone;
|
||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||
import ch.zhaw.gartenverwaltung.types.Seasons;
|
||||
@@ -19,10 +21,10 @@ import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@@ -34,6 +36,8 @@ public class PlantsController {
|
||||
private PlantListModel plantListModel;
|
||||
@Inject
|
||||
private AppLoader appLoader;
|
||||
@Inject
|
||||
private Garden garden;
|
||||
|
||||
private Plant selectedPlant = null;
|
||||
private final HardinessZone DEFAULT_HARDINESS_ZONE = HardinessZone.ZONE_8A;
|
||||
@@ -71,15 +75,32 @@ public class PlantsController {
|
||||
@FXML
|
||||
void selectSowDate() throws IOException {
|
||||
Stage stage = new Stage();
|
||||
if (appLoader.loadSceneToStage("SelectSowDay.fxml", stage) instanceof SelectSowDayController controller) {
|
||||
controller.setSelectedPlant(selectedPlant);
|
||||
}
|
||||
Dialog<LocalDate> dateSelection = new Dialog<>();
|
||||
dateSelection.setTitle("Select Date");
|
||||
dateSelection.setHeaderText(String.format("Select Harvest/Sow Date for %s:", selectedPlant.name()));
|
||||
dateSelection.setResizable(false);
|
||||
|
||||
stage.initModality(Modality.APPLICATION_MODAL);
|
||||
stage.setResizable(false);
|
||||
stage.showAndWait();
|
||||
// TODO: change to dialog
|
||||
plantsRoot.fireEvent(new ChangeViewEvent(ChangeViewEvent.CHANGE_MAIN_VIEW, "MyGarden.fxml"));
|
||||
DialogPane dialogPane = dateSelection.getDialogPane();
|
||||
|
||||
ButtonType sowButton = new ButtonType("Save", ButtonBar.ButtonData.OK_DONE);
|
||||
dialogPane.getButtonTypes().addAll(sowButton, ButtonType.CANCEL);
|
||||
|
||||
if (appLoader.loadSceneToStage("SelectSowDay.fxml", stage) instanceof SelectSowDayController controller) {
|
||||
controller.initSaveButton((Button) dialogPane.lookupButton(sowButton));
|
||||
controller.setSelectedPlant(selectedPlant);
|
||||
dateSelection.setResultConverter(button -> button.equals(sowButton) ? controller.retrieveResult() : null);
|
||||
}
|
||||
dialogPane.setContent(stage.getScene().getRoot());
|
||||
|
||||
dateSelection.showAndWait()
|
||||
.ifPresent(date -> {
|
||||
try {
|
||||
garden.plantAsCrop(selectedPlant, date);
|
||||
} catch (IOException | HardinessZoneNotSetException | PlantNotFoundException e) {
|
||||
LOG.log(Level.SEVERE, "Couldn't save Crop", e);
|
||||
}
|
||||
plantsRoot.fireEvent(new ChangeViewEvent(ChangeViewEvent.CHANGE_MAIN_VIEW, "MyGarden.fxml"));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,7 +134,7 @@ public class PlantsController {
|
||||
}
|
||||
|
||||
/**
|
||||
* set text of list view to plant name
|
||||
* set text of list view to plant name
|
||||
*/
|
||||
private void setListCellFactory() {
|
||||
list_plants.setCellFactory(param -> new ListCell<>() {
|
||||
@@ -133,9 +154,10 @@ public class PlantsController {
|
||||
/**
|
||||
* get plant list according to param season and hardiness zone
|
||||
* fill list view with plant list
|
||||
*
|
||||
* @param season enum of seasons
|
||||
* @throws HardinessZoneNotSetException throws exception
|
||||
* @throws IOException throws exception
|
||||
* @throws IOException throws exception
|
||||
*/
|
||||
private void viewFilteredListBySeason(Seasons season) throws HardinessZoneNotSetException, IOException {
|
||||
clearListView();
|
||||
@@ -145,8 +167,9 @@ public class PlantsController {
|
||||
/**
|
||||
* get plant list filtered by search plant entry and hardiness zone
|
||||
* fill list view with plant list
|
||||
*
|
||||
* @throws HardinessZoneNotSetException throws exception when no hardiness zone is defined
|
||||
* @throws IOException throws exception
|
||||
* @throws IOException throws exception
|
||||
*/
|
||||
private void viewFilteredListBySearch() throws HardinessZoneNotSetException, IOException {
|
||||
search_plants.textProperty().addListener((observable, oldValue, newValue) -> {
|
||||
@@ -191,7 +214,7 @@ public class PlantsController {
|
||||
for (HardinessZone zone : HardinessZone.values()) {
|
||||
RadioButton radioButton = new RadioButton(zone.name());
|
||||
radioButton.setToggleGroup(hardinessGroup);
|
||||
radioButton.setPadding(new Insets(0,0,10,0));
|
||||
radioButton.setPadding(new Insets(0, 0, 10, 0));
|
||||
if (zone.equals(DEFAULT_HARDINESS_ZONE)) {
|
||||
radioButton.setSelected(true);
|
||||
}
|
||||
@@ -213,7 +236,7 @@ public class PlantsController {
|
||||
for (Seasons season : Seasons.values()) {
|
||||
RadioButton radioButton = new RadioButton(season.getName());
|
||||
radioButton.setToggleGroup(seasonGroup);
|
||||
radioButton.setPadding(new Insets(0,0,10,0));
|
||||
radioButton.setPadding(new Insets(0, 0, 10, 0));
|
||||
if (season.equals(Seasons.AllSEASONS)) {
|
||||
radioButton.setSelected(true);
|
||||
}
|
||||
@@ -247,12 +270,12 @@ public class PlantsController {
|
||||
Image img = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
img_plant.setImage(img);
|
||||
list_plants.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
|
||||
if(newValue != null) {
|
||||
if (newValue != null) {
|
||||
selectedPlant = newValue;
|
||||
description_plant.setText(selectedPlant.description());
|
||||
selectSowDay_button.setDisable(false);
|
||||
Image img1;
|
||||
if(selectedPlant.image() != null) {
|
||||
if (selectedPlant.image() != null) {
|
||||
img1 = selectedPlant.image();
|
||||
} else {
|
||||
img1 = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
|
||||
Reference in New Issue
Block a user