Skip to content
Snippets Groups Projects
Commit 6041aed0 authored by HSoreide's avatar HSoreide
Browse files

View for showing selected recipe in detail working with dynamic list of ingredients

parent 55b50fe8
No related branches found
No related tags found
2 merge requests!42Hs frontend recipes,!41Hs frontend recipes
...@@ -3,23 +3,15 @@ package no.ntnu.idatt1002.demo.controller; ...@@ -3,23 +3,15 @@ package no.ntnu.idatt1002.demo.controller;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.DialogPane;
import javafx.scene.control.ListView; import javafx.scene.control.ListView;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import no.ntnu.idatt1002.demo.data.recipes.FileHandler; import no.ntnu.idatt1002.demo.data.recipes.FileHandler;
......
package no.ntnu.idatt1002.demo.controller;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import no.ntnu.idatt1002.demo.data.recipes.RecipeIngredient;
import java.net.URL;
import java.util.ResourceBundle;
public class IngredientTileController implements Initializable {
@FXML
private Label text;
@FXML
private Pane ingredientPane;
public void setData(RecipeIngredient ingredient) {
StringBuilder sb = new StringBuilder();
sb.append("# ").append(ingredient.getFoodType().label.substring(0,1).toUpperCase())
.append(ingredient.getFoodType().label.substring(1));
sb.append(" ").append(ingredient.getAmount()).append(" ").append(ingredient.getUnit().label);
System.out.println(sb);
text.setText(String.valueOf(sb));
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
}
}
...@@ -6,15 +6,11 @@ import javafx.event.ActionEvent; ...@@ -6,15 +6,11 @@ import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
...@@ -23,9 +19,6 @@ import no.ntnu.idatt1002.demo.data.recipes.*; ...@@ -23,9 +19,6 @@ import no.ntnu.idatt1002.demo.data.recipes.*;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
public class RecipeController implements Initializable { public class RecipeController implements Initializable {
...@@ -40,37 +33,43 @@ public class RecipeController implements Initializable { ...@@ -40,37 +33,43 @@ public class RecipeController implements Initializable {
private Button goBackBtn; private Button goBackBtn;
@FXML @FXML
private VBox ingredientPane; private VBox ingredientList;
@FXML @FXML
private ObservableList<RecipeIngredient> ingredients; private ObservableList<RecipeIngredient> ingredients;
@FXML
private Pane ingredientPane;
private Recipe recipe;
public void setData(Recipe recipe) { public void setData(Recipe recipeOfInterest) {
recipe = recipeOfInterest;
recipeName.setText(recipe.getName()); recipeName.setText(recipe.getName());
instructions.setText(recipe.getInstructions()); instructions.setText(recipe.getInstructions());
ingredients = FXCollections.observableArrayList(recipe.getIngredientList()); ingredients = FXCollections.observableArrayList(recipe.getIngredientList());
setIngredientTiles(); setIngredientTiles();
} }
private void setIngredientTiles() { private void setIngredientTiles() {
for(RecipeIngredient ri : ingredients) { for(RecipeIngredient ri : ingredients) {
FXMLLoader loader = new FXMLLoader(); FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/IngredientTile.fxml"));
loader.setLocation(getClass().getResource("/view/IngredientTile.fxml"));
try { try {
Pane pane = loader.load(); Pane pane = loader.load();
IngredientTileController ingredientTileController = loader.getController(); IngredientTileController ingredientTileController = loader.getController(); //Todo: is null
ingredientTileController.setData(ri); ingredientTileController.setData(ri);
ingredientPane.getChildren().add(pane); ingredientList.getChildren().add(pane);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
...@@ -92,6 +91,7 @@ public class RecipeController implements Initializable { ...@@ -92,6 +91,7 @@ public class RecipeController implements Initializable {
@Override @Override
public void initialize(URL url, ResourceBundle resourceBundle) { public void initialize(URL url, ResourceBundle resourceBundle) {
// ingredients = FXCollections.observableArrayList(recipe.getIngredientList());
} }
......
...@@ -66,8 +66,6 @@ public class SuggestRecipesController implements Initializable { ...@@ -66,8 +66,6 @@ public class SuggestRecipesController implements Initializable {
loader.setLocation(getClass().getResource("/view/AddIngredient.fxml")); loader.setLocation(getClass().getResource("/view/AddIngredient.fxml"));
DialogPane addIngredientPane = loader.load(); DialogPane addIngredientPane = loader.load();
//AddIngredientController addIngredientController = loader.getController();
Dialog<ButtonType> dialog = new Dialog<>(); Dialog<ButtonType> dialog = new Dialog<>();
dialog.setDialogPane(addIngredientPane); dialog.setDialogPane(addIngredientPane);
dialog.setTitle("Add ingredient to fridge"); dialog.setTitle("Add ingredient to fridge");
...@@ -139,9 +137,6 @@ public class SuggestRecipesController implements Initializable { ...@@ -139,9 +137,6 @@ public class SuggestRecipesController implements Initializable {
RecipeTileController recipeTileController = loader.getController(); RecipeTileController recipeTileController = loader.getController();
recipeTileController.setData(r); recipeTileController.setData(r);
if (currentRecipeTiles.size() < recipes.size()) { if (currentRecipeTiles.size() < recipes.size()) {
currentRecipeTiles.add(vBox); currentRecipeTiles.add(vBox);
} else { } else {
...@@ -180,10 +175,8 @@ public class SuggestRecipesController implements Initializable { ...@@ -180,10 +175,8 @@ public class SuggestRecipesController implements Initializable {
// If no ingredients at hand file exsists, add one and let it be empty. //TODO // If no ingredients at hand file exsists, add one and let it be empty. //TODO
ingredientsAtHand = FileHandler.readIngredientsAtHand("Fridge"); ingredientsAtHand = FileHandler.readIngredientsAtHand("Fridge");
/*fridge = FXCollections.observableArrayList(ingredientsAtHand.getIngredientsAtHand());*/
fridge = FXCollections.observableArrayList(ingredientsAtHand.getIngredientsAtHand().stream().map(foodItem -> foodItem.label).toList()); fridge = FXCollections.observableArrayList(ingredientsAtHand.getIngredientsAtHand().stream().map(foodItem -> foodItem.label).toList());
List<String> fridgeLabels = fridge; List<String> fridgeLabels = fridge;
/*List<String> fridgeLabels = fridge.stream().map(foodItem -> foodItem.label).toList();*/
fridgeList.setItems(fridge); fridgeList.setItems(fridge);
recipeRegister = FileHandler.readRecipeRegister("Recipes"); recipeRegister = FileHandler.readRecipeRegister("Recipes");
......
...@@ -11,9 +11,10 @@ import java.util.Objects; ...@@ -11,9 +11,10 @@ import java.util.Objects;
public class Recipe { public class Recipe {
private String name = ""; private String name = "";
private List<RecipeIngredient> ingredientList = new ArrayList<>(); private final List<RecipeIngredient> ingredientList = new ArrayList<>();
private String instructions = ""; private String instructions = "";
private int missingIngredients; private int missingIngredients;
private ArrayList<String> missingList = new ArrayList<>();
public Recipe(String name, String description ) { public Recipe(String name, String description ) {
if(name.isBlank() | description.isBlank()) { if(name.isBlank() | description.isBlank()) {
...@@ -99,6 +100,11 @@ public class Recipe { ...@@ -99,6 +100,11 @@ public class Recipe {
int notMissing = (int) ingredientList.stream().filter((inRecipe) -> ingredientsAtHand.atHand(inRecipe.getFoodType())).count(); int notMissing = (int) ingredientList.stream().filter((inRecipe) -> ingredientsAtHand.atHand(inRecipe.getFoodType())).count();
ingredientList.forEach((inRecipe) -> { ingredientList.forEach((inRecipe) -> {
inRecipe.setAtHand(ingredientsAtHand.atHand(inRecipe.getFoodType())); inRecipe.setAtHand(ingredientsAtHand.atHand(inRecipe.getFoodType()));
if(!ingredientsAtHand.atHand(inRecipe.getFoodType())) {
missingList.add(inRecipe.getFoodType().label);
}
}); });
missingIngredients = ingredientList.size()-notMissing; missingIngredients = ingredientList.size()-notMissing;
} }
...@@ -110,6 +116,22 @@ public class Recipe { ...@@ -110,6 +116,22 @@ public class Recipe {
return missingIngredients; return missingIngredients;
} }
public ArrayList<String> getMissingList() {
return missingList;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(this.name).append("\n");
this.getIngredientList().forEach((ingredient) -> {
sb.append(ingredient).append("\n");
});
sb.append(this.getInstructions());
return String.valueOf(sb);
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
......
...@@ -67,5 +67,10 @@ ...@@ -67,5 +67,10 @@
.recipe-instructions { .recipe-instructions {
-fx-font-size: 16; -fx-font-size: 16;
-fx-font-style: italic; -fx-font-style: italic;
}
.ingredient:hover {
-fx-scale-x: 1.05;
-fx-scale-y: 1.05;
-fx-scale-z: 1.05;
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?> <?import javafx.scene.text.*?>
<DialogPane xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.AddIngredientController"> <DialogPane id="dialog-pane" prefHeight="524.0" prefWidth="614.0" stylesheets="@../style.css" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.AddIngredientController">
<content> <content>
<AnchorPane prefHeight="400.0" prefWidth="600.0"> <AnchorPane prefHeight="400.0" prefWidth="600.0">
<padding> <padding>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<Insets /> <Insets />
</HBox.margin> </HBox.margin>
</TextField> </TextField>
<Button fx:id="searchBtn" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#search" text="Search" textAlignment="CENTER"> <Button id="button-style" fx:id="searchBtn" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#search" styleClass="button-style" stylesheets="@../style.css" text="Search" textAlignment="CENTER">
<font> <font>
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<Insets left="25.0" right="25.0" /> <Insets left="25.0" right="25.0" />
</VBox.margin> </VBox.margin>
</HBox> </HBox>
<ListView fx:id="listView" prefHeight="311.0" prefWidth="590.0"> <ListView id="list-cell" fx:id="listView" prefHeight="311.0" prefWidth="590.0" stylesheets="@../style.css">
<padding> <padding>
<Insets bottom="10.0" left="20.0" right="20.0" top="10.0" /> <Insets bottom="10.0" left="20.0" right="20.0" top="10.0" />
</padding> </padding>
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
</ListView> </ListView>
<Pane prefHeight="81.0" prefWidth="600.0"> <Pane prefHeight="81.0" prefWidth="600.0">
<children> <children>
<Button fx:id="addBtn" defaultButton="true" layoutX="275.0" layoutY="7.0" mnemonicParsing="false" onAction="#addToFridge" text="ADD"> <Button id="button-style" fx:id="addBtn" defaultButton="true" layoutX="275.0" layoutY="7.0" mnemonicParsing="false" onAction="#addToFridge" styleClass="button-style" stylesheets="@../style.css" text="ADD">
<font> <font>
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
......
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<Pane fx:id="ingredientPane" styleClass="ingredient" stylesheets="@../style.css" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.IngredientTileController">
<children>
<Label fx:id="text" prefHeight="40.0" prefWidth="250.0" text="Ingredient">
<font>
<Font name="System Italic" size="14.0" />
</font>
<padding>
<Insets left="15.0" />
</padding>
</Label>
</children>
</Pane>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
...@@ -17,7 +18,7 @@ ...@@ -17,7 +18,7 @@
<children> <children>
<Pane prefHeight="200.0" prefWidth="200.0"> <Pane prefHeight="200.0" prefWidth="200.0">
<children> <children>
<Button fx:id="goBackBtn" layoutX="76.0" layoutY="30.0" mnemonicParsing="false" onAction="#goBack" text="Go Back"> <Button id="button-stye" fx:id="goBackBtn" layoutX="76.0" layoutY="30.0" mnemonicParsing="false" onAction="#goBack" styleClass="button-style" stylesheets="@../style.css" text="Go Back">
<font> <font>
<Font size="14.0" /> <Font size="14.0" />
</font></Button> </font></Button>
...@@ -38,17 +39,34 @@ ...@@ -38,17 +39,34 @@
<center> <center>
<HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER"> <HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children> <children>
<VBox fx:id="ingredientPane" prefHeight="457.0" prefWidth="265.0" /> <ScrollPane prefHeight="457.0" prefWidth="271.0" stylesheets="@../style.css">
<Pane prefHeight="457.0" prefWidth="582.0"> <content>
<AnchorPane prefHeight="449.0" prefWidth="262.0" styleClass="ingredient-pane" stylesheets="@../style.css">
<children>
<VBox fx:id="ingredientList" prefHeight="438.0" prefWidth="262.0" styleClass="ingredient-list" stylesheets="@../style.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets left="15.0" top="20.0" />
</padding></VBox>
</children>
</AnchorPane>
</content>
</ScrollPane>
<Pane id="recipe-instructions" prefHeight="457.0" prefWidth="582.0" stylesheets="@../style.css">
<children> <children>
<Text fx:id="instrucctions" layoutX="14.0" layoutY="47.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Instructions" wrappingWidth="531.7294921875" /> <Text fx:id="instructions" layoutX="14.0" layoutY="47.0" strokeType="OUTSIDE" strokeWidth="0.0" styleClass="recipe-instructions" text="Instructions" wrappingWidth="531.7294921875" />
</children> </children>
<opaqueInsets>
<Insets />
</opaqueInsets>
<HBox.margin>
<Insets left="20.0" />
</HBox.margin>
</Pane> </Pane>
</children> </children>
</HBox> </HBox>
</center> </center>
<left> <left>
<Pane fx:id="instructions" prefHeight="493.0" prefWidth="148.0" BorderPane.alignment="CENTER" /> <Pane prefHeight="457.0" prefWidth="75.0" BorderPane.alignment="CENTER" />
</left> </left>
<bottom> <bottom>
<Pane prefHeight="102.0" prefWidth="1130.0" BorderPane.alignment="CENTER" /> <Pane prefHeight="102.0" prefWidth="1130.0" BorderPane.alignment="CENTER" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment