From c7660d9750b617186b85d17c57e0f0ab4b0ca16d Mon Sep 17 00:00:00 2001 From: Lara Blersch <lb210@hdm-stuttgart.de> Date: Fri, 9 Jun 2023 08:19:09 +0200 Subject: [PATCH] recipe-view and controller almost finished, ingredients and categories missing --- src/main/java/mi/hdm/TastyPages.java | 4 +- .../hdm/controllers/MainPageController.java | 2 +- .../hdm/controllers/RecipeViewController.java | 50 +++++++++++++++++-- src/main/java/mi/hdm/controllers/View.java | 3 +- .../java/mi/hdm/filesystem/FileManager.java | 1 - src/main/resources/fxml/recipe-view.fxml | 22 ++++---- 6 files changed, 63 insertions(+), 19 deletions(-) diff --git a/src/main/java/mi/hdm/TastyPages.java b/src/main/java/mi/hdm/TastyPages.java index c088745..e3c02c6 100644 --- a/src/main/java/mi/hdm/TastyPages.java +++ b/src/main/java/mi/hdm/TastyPages.java @@ -83,8 +83,8 @@ public class TastyPages { String name = "Something"; //ingredientManager.getAllIngredients().forEach((k, v) -> System.out.println(k + " : " + v)); Map<RecipeComponent, Integer> ingredients = Map.of(ingredientManager.getIngredient("i1401213838").get(), 5); - String description = "10-Minuten-Rezept"; - List<String> preparation = List.of("Put it in a pan and heat it."); + String description = "10-Minute-Recipe"; + List<String> preparation = List.of("Put it in a pan and heat it.", "Now enjoy!"); List<Category> categories = List.of(category); Recipe recipe1 = new Recipe(name, ingredients, description, preparation, categories, 10); recipeManager.addRecipe(recipe1); diff --git a/src/main/java/mi/hdm/controllers/MainPageController.java b/src/main/java/mi/hdm/controllers/MainPageController.java index 3f1a667..a654d0d 100644 --- a/src/main/java/mi/hdm/controllers/MainPageController.java +++ b/src/main/java/mi/hdm/controllers/MainPageController.java @@ -57,7 +57,7 @@ public class MainPageController extends BaseController { for (Recipe recipe : recipes) { RecipeVbox recipeVbox = new RecipeVbox(recipe, categoryManager); - recipeVbox.setOnMouseClicked(mouseEvent -> changeScene(View.RECIPE_VIEW, recipeVbox.getAssociatedRecipe())); //TODO: this needs to display the recipe view + recipeVbox.setOnMouseClicked(mouseEvent -> changeScene(View.RECIPE_VIEW, recipeVbox.getAssociatedRecipe())); currentRecipesInGUI.add(recipeVbox); } recipeTilePane.getChildren().addAll(currentRecipesInGUI); //... and add the new ones diff --git a/src/main/java/mi/hdm/controllers/RecipeViewController.java b/src/main/java/mi/hdm/controllers/RecipeViewController.java index 56c40f3..ce60131 100644 --- a/src/main/java/mi/hdm/controllers/RecipeViewController.java +++ b/src/main/java/mi/hdm/controllers/RecipeViewController.java @@ -2,30 +2,48 @@ package mi.hdm.controllers; import javafx.fxml.FXML; import javafx.scene.control.Label; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import mi.hdm.recipes.Recipe; +import mi.hdm.recipes.RecipeManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.ArrayList; +import java.util.List; + public class RecipeViewController extends BaseController { private static final Logger log = LogManager.getLogger(RecipeViewController.class); + private final Recipe recipe; + private RecipeManager recipeManager; @FXML private AnchorPane parent; - // @FXML - //private Label recipeDescription; @FXML private Label recipeName; @FXML + private Label recipeDescription; + @FXML + private Label recipePreparation; + @FXML + private TableView recipeIngredients; + @FXML + private TableColumn measurement; + @FXML + private TableColumn ingredient; + @FXML private ImageView recipeImage; - public RecipeViewController(Recipe recipe) { + public RecipeViewController(Recipe recipe, RecipeManager recipeManager) { this.recipe = recipe; + this.recipeManager = recipeManager; } @FXML @@ -43,12 +61,34 @@ public class RecipeViewController extends BaseController { loadHeader(parent); recipeName.setText(recipe.getName()); - //recipeDescription.setText(recipe.getDescription()); - //TODO: display recipe description, preparation and ingredients + recipeDescription.setText(recipe.getDescription()); + recipePreparation.setText(String.join("\n", recipe.getPreparation())); + //TODO: display ingredients, this way does not work + measurement.setCellValueFactory(new PropertyValueFactory<String, String>("Measurement")); + ingredient.setCellValueFactory(new PropertyValueFactory<String, String>("Ingredient")); + recipeIngredients.getItems().setAll(recipe.getIngredients()); //idea for solution from: https://stackoverflow.com/questions/22710053/how-can-i-show-an-image-using-the-imageview-component-in-javafx-and-fxml log.debug("Trying to load image for recipe from '{}'", recipe.getImageURL()); Image image = new Image(recipe.getImageURL().toString()); recipeImage.setImage(image); } + + /*private List<String> parseIngredientsToList() { + List<String> ingredientList = new ArrayList<>(); + + return ingredientList; + }*/ + + @FXML + public void handleEditRecipe() { + log.info("User is trying to edit recipe"); + changeScene(View.RECIPE_CREATOR); + } + @FXML + public void handleDeleteRecipe() { + log.info("User is trying to delete recipe"); + recipeManager.deleteRecipe(recipe); + changeSceneToMain(); + } } diff --git a/src/main/java/mi/hdm/controllers/View.java b/src/main/java/mi/hdm/controllers/View.java index 286a981..6f1fbbe 100644 --- a/src/main/java/mi/hdm/controllers/View.java +++ b/src/main/java/mi/hdm/controllers/View.java @@ -5,6 +5,7 @@ import javafx.scene.Parent; import mi.hdm.GuiController; import mi.hdm.TastyPages; import mi.hdm.recipes.Recipe; +import mi.hdm.recipes.RecipeManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -42,7 +43,7 @@ public enum View { case RECIPE_VIEW -> loader.setControllerFactory((callback) -> { if (args != null && args.length == 1 && args[0] instanceof Recipe recipe) { - return new RecipeViewController(recipe); + return new RecipeViewController(recipe, model.getRecipeManager()); } else { throw new InvalidParameterException(); } diff --git a/src/main/java/mi/hdm/filesystem/FileManager.java b/src/main/java/mi/hdm/filesystem/FileManager.java index 0db3c46..1f9b9cb 100644 --- a/src/main/java/mi/hdm/filesystem/FileManager.java +++ b/src/main/java/mi/hdm/filesystem/FileManager.java @@ -305,7 +305,6 @@ public class FileManager { public static String getAbsolutePathFromResourceFolder(String p) { try { - //TODO: check if this only works for classes or also for images (.png/ .jpeg) URL resourceUrl = FileManager.class.getResource(p); assert resourceUrl != null; Path path = Paths.get(resourceUrl.toURI()); diff --git a/src/main/resources/fxml/recipe-view.fxml b/src/main/resources/fxml/recipe-view.fxml index e401335..7c68651 100644 --- a/src/main/resources/fxml/recipe-view.fxml +++ b/src/main/resources/fxml/recipe-view.fxml @@ -12,11 +12,11 @@ <padding> <Insets bottom="16.0" left="16.0" right="16.0" /> </padding> - <GridPane prefHeight="40.0" prefWidth="840.0"> + <GridPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="40.0" prefWidth="840.0"> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" maxWidth="609.5914306640625" minWidth="10.0" prefWidth="607.0957641601562" /> - <ColumnConstraints hgrow="SOMETIMES" maxWidth="274.7779541015625" minWidth="10.0" prefWidth="40.40423583984375" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="609.5914306640625" minWidth="10.0" prefWidth="585.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="274.7779541015625" minWidth="10.0" prefWidth="110.5" /> </columnConstraints> <rowConstraints> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> @@ -49,12 +49,12 @@ <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> - <Button fx:id="recipeDelete" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Delete" textAlignment="CENTER" textFill="#d91c1c"> + <Button fx:id="recipeDelete" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#handleDeleteRecipe" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Delete" textAlignment="CENTER" textFill="#d91c1c"> <font> <Font name="System Bold" size="17.0" /> </font> </Button> - <Button fx:id="recipeDelete" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Edit" textAlignment="CENTER" textFill="#d91c1c" GridPane.columnIndex="1"> + <Button fx:id="editButton" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#handleEditRecipe" prefHeight="41.0" prefWidth="159.0" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: d91c1c; -fx-border-radius: 5; -fx-border-width: 4;" text="Edit" textAlignment="CENTER" textFill="#d91c1c" GridPane.columnIndex="1"> <font> <Font name="System Bold" size="17.0" /> </font> @@ -68,9 +68,9 @@ <VBox.margin> <Insets bottom="10.0" top="10.0" /> </VBox.margin></ListView> - <ScrollPane prefHeight="244.0" prefWidth="393.0" style="-fx-border-color: D91C1C; -fx-border-width: 4; -fx-border-radius: 10; -fx-background-color: transparent;"> + <ScrollPane fitToHeight="true" fitToWidth="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="244.0" prefWidth="393.0" style="-fx-border-color: D91C1C; -fx-border-width: 4; -fx-border-radius: 10; -fx-background-color: transparent;"> <content> - <Label fx:id="recipePreparation" alignment="TOP_LEFT" contentDisplay="CENTER" lineSpacing="1.5" prefHeight="372.0" prefWidth="393.0" style="-fx-background-color: transparent;" text=" sjdfjakjfkj j kasdjfkasjdkf aorjfaksdjf alösjfailjskdf aöiejraö skjdfoakdjfpoeaijf alskjdf aroijf oajdfo oerajfija oaeijr oaiejrüoj oaejf üoaijer fjüaroifj üeorj ojeaüroit oijetiüfj üeor" wrapText="true"> + <Label fx:id="recipePreparation" alignment="TOP_LEFT" contentDisplay="CENTER" lineSpacing="1.5" prefHeight="372.0" prefWidth="393.0" style="-fx-background-color: transparent;" text="Recipe Preparation" wrapText="true"> <font> <Font name="Inter Regular" size="12.0" /> </font> @@ -97,14 +97,18 @@ <VBox.margin> <Insets bottom="10.0" /> </VBox.margin></Pane> + <Label fx:id="recipeDescription" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="52.0" prefWidth="338.0" style="-fx-border-radius: 10; -fx-background-color: transparent; -fx-border-color: d91c1c; -fx-border-width: 4;" text="Recipe Description"> + <padding> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </padding></Label> <Pane layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: transparent; -fx-border-color: d91c1c; -fx-border-radius: 10; -fx-border-width: 4;"> <children> <ScrollBar layoutX="317.0" layoutY="5.0" orientation="VERTICAL" prefHeight="190.0" prefWidth="14.0" /> <TableView fx:id="recipeIngredients" layoutY="-1.0" prefHeight="200.0" prefWidth="321.0" style="-fx-background-color: transparent;"> <columns> - <TableColumn editable="false" prefWidth="91.0" text="C1" /> - <TableColumn editable="false" prefWidth="229.0" text="C2" /> + <TableColumn fx:id="measurement" editable="false" prefWidth="91.0" text="C1" /> + <TableColumn fx:id="ingredient" editable="false" prefWidth="229.0" text="C2" /> </columns> <padding> <Insets bottom="4.0" left="4.0" right="4.0" top="4.0" /> -- GitLab