Skip to content
Snippets Groups Projects
Commit 02920fc6 authored by HSoreide's avatar HSoreide
Browse files

Factor out and improve hover effect of suggested recipe tiles

parent aaa3f025
No related branches found
No related tags found
2 merge requests!42Hs frontend recipes,!41Hs frontend recipes
package no.ntnu.idatt1002.demo.controller;
import javafx.animation.FadeTransition;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.event.ActionEvent;
import java.io.IOException;
......@@ -15,6 +17,7 @@ import java.util.ResourceBundle;
import java.util.stream.Collectors;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.util.Duration;
import no.ntnu.idatt1002.demo.data.recipes.FileHandler;
import no.ntnu.idatt1002.demo.data.recipes.FoodItem;
import no.ntnu.idatt1002.demo.data.recipes.IngredientsAtHand;
......@@ -23,7 +26,6 @@ public class AddIngredientController implements Initializable {
private ObservableList<String> ingredients;
private String[] ingredientsList;
private IngredientsAtHand ingredientsAtHand;
@FXML
private Button addBtn;
......@@ -37,21 +39,37 @@ public class AddIngredientController implements Initializable {
@FXML
private Button searchBtn;
@FXML
private Label status;
private String statusText = "Added: ";
@FXML
void addToFridge(ActionEvent event) throws IOException {
String item = listView.getSelectionModel().getSelectedItem();
if(item != null) {
ingredientsAtHand.addIngredient(FoodItem.valueOf(item.replace(" ", "_").toUpperCase()));
IngredientsAtHand ingredientsAtHand = FileHandler.readIngredientsAtHand("Fridge");
FoodItem item = FoodItem.valueOf(listView.getSelectionModel().getSelectedItem().replace(" ", "_").toUpperCase());
assert ingredientsAtHand != null;
if(!ingredientsAtHand.atHand(item)) {
ingredientsAtHand.addIngredient(item);
FileHandler.writeIngredientsAtHand(ingredientsAtHand, "Fridge");
}
if(status.isVisible() && status.getText().isBlank()) {
statusText += String.format("%s", item.label);
} else if (status.isVisible()){
statusText += String.format(", %s", item.label);
}
status.setText(statusText); // Only if not already in list!!
}
}
@FXML
void search(ActionEvent event) {
void search() {
listView.getItems().clear();
listView.getItems().addAll(searchList(searchBar.getText(), ingredientsList));
listView.getItems().addAll(searchList(searchBar.getText(),
Arrays.stream(FoodItem.values()).toList().stream().map(value -> value.label).toArray(String[]::new))); // String[]
}
......@@ -63,23 +81,15 @@ public class AddIngredientController implements Initializable {
in.toLowerCase().contains(word.toLowerCase()));
}).collect(Collectors.toList());
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
ingredientsAtHand = FileHandler.readIngredientsAtHand("Fridge");
//TODO: Move into initializer? - Tidy up!
List<String> stringIngredients = Arrays.stream(FoodItem.values()).toList().stream().map(value -> value.label).toList();
int noLengthOfList = stringIngredients.size();
ingredientsList = stringIngredients.stream().toArray(String[] ::new);
ingredients = FXCollections.observableArrayList(stringIngredients);
// Fill list with ingredients
listView.setItems(ingredients);
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
listView.setItems(FXCollections.observableArrayList(Arrays.stream(FoodItem.values()).map(value -> value.label).toList()));
Platform.runLater(() -> searchBar.requestFocus());
status.setWrapText(true);
}
//TODO: Add label with status message that fades in 5 sec.
}
......@@ -8,7 +8,6 @@ import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import no.ntnu.idatt1002.demo.data.recipes.FileHandler;
......@@ -17,7 +16,6 @@ import no.ntnu.idatt1002.demo.data.recipes.RecipeRegister;
import java.io.IOException;
import java.net.URL;
import java.util.Optional;
import java.util.ResourceBundle;
public class RecipeTileController implements Initializable {
......
......@@ -73,7 +73,7 @@ public class SuggestRecipesController implements Initializable {
Optional<ButtonType> clickedButton = dialog.showAndWait();
if (clickedButton.isPresent() && clickedButton.get() == ButtonType.APPLY) {
if (clickedButton.isPresent() && clickedButton.get() == ButtonType.CLOSE) {
// Refresh ingredientsAtHand.
readIngredientsAtHand();
setRecipeTiles();
......@@ -84,9 +84,12 @@ public class SuggestRecipesController implements Initializable {
private void removeFromFridge(ActionEvent event) throws IOException {
String toRemove = fridgeList.getSelectionModel().getSelectedItem();
//TODO: If anything selected!
ingredientsAtHand.removeIngredient(FoodItem.valueOf(toRemove.replace(" ", "_").toUpperCase()));
storeIngredientsAtHand();
setRecipeTiles();
if(toRemove != null) {
ingredientsAtHand.removeIngredient(FoodItem.valueOf(toRemove.replace(" ", "_").toUpperCase()));
storeIngredientsAtHand();
setRecipeTiles();
}
}
......@@ -120,18 +123,7 @@ public class SuggestRecipesController implements Initializable {
currentRecipeTiles.set(counter, vBox);
}
vBox.setOnMouseEntered(event -> {
if(r.getMissingIngredients()==0) {
missingList.setText("");
} else {
missingList.setText("Missing: " + String.join(", ", r.getMissingList()));
}
});
vBox.setOnMouseExited(event -> {
missingList.setText("");
});
setHoverEffect(vBox, r);
recipeGrid.add(vBox, i, j);
......@@ -145,6 +137,25 @@ public class SuggestRecipesController implements Initializable {
}
private void setHoverEffect(VBox vBox, Recipe recipe) {
vBox.setOnMouseEntered(event -> {
if(recipe.getMissingIngredients()==0) {
missingList.setText("");
missingList.setVisible(false);
} else {
missingList.setText("Missing: " + String.join(", ", recipe.getMissingList()));
missingList.setVisible(true);
}
});
vBox.setOnMouseExited(event -> {
missingList.setText("");
missingList.setVisible(false);
});
}
@FXML
private void switchScene(ActionEvent event) throws IOException {
FXMLLoader loader = new FXMLLoader();
......@@ -183,6 +194,7 @@ public class SuggestRecipesController implements Initializable {
readIngredientsAtHand();
recipeRegister = FileHandler.readRecipeRegister("Recipes");
recipes = FXCollections.observableArrayList(recipeRegister.getRecipes());
missingList.setVisible(false);
// Get the number from FX-grid available?
setRecipeTiles();
......
WHEAT_FLOUR
EGG
VINEGAR
SPAGHETTI
PASTA
CREAM
TOMATO_PASTE
CHICKPEAS
SPRING_ROLL
YELLOW_CHEESE
POTATO
BELL_PEPPER
DRY_THYME
DRY_BASIL
PARMESAN
OLIVE_OIL
BUTTER
GARLIC_CLOVE
HAM
BROCCOLI
OIL
FRESH_BASIL
MINCED_MEAT
MILK
TOMATO
ORANGE
ONION
POTATO
WHEAT_FLOUR
SALSA_SAUCE
SALAD
SPINACH
CUCUMBER
SPRING_ROLL
SPAGHETTI
PASTA
CREAM
HONEY
CHILLI
EGG
OLIVE_OIL
HAM
SNAP_PEA
MACARONI
SALMON
......@@ -186,7 +186,7 @@ https://www.matprat.no/oppskrifter/familien/skinkepai/
# French Lamb Stew
# French Lam Stew
- LAM | 1 | KG
- BUTTER | 3 | TBS
......
......@@ -67,17 +67,15 @@
-fx-scale-y: 1.05;
-fx-scale-z: 1.05;
}
/*
.instructions-pane {
-fx-background-color:transparent;
}*/
/*.instructions-pane .viewport {
-fx-background-color: transparent;
}*/
.recipe-instructions {
-fx-font-size: 16;
-fx-font-style: italic;
-fx-spacing: 1.5;
}
.information-label {
-fx-background-color: rgba(255, 255, 255, 0.65);
-fx-text-fill: black;
-fx-border-radius: 20;
}
\ No newline at end of file
......@@ -5,14 +5,14 @@
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<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">
<DialogPane id="dialog-pane" expanded="true" 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>
<AnchorPane prefHeight="400.0" prefWidth="600.0">
<padding>
<Insets top="20.0" />
</padding>
<children>
<VBox layoutX="14.0" prefHeight="348.0" prefWidth="600.0">
<VBox prefHeight="406.0" prefWidth="614.0">
<children>
<HBox prefHeight="100.0" prefWidth="200.0" spacing="20.0">
<children>
......@@ -37,7 +37,7 @@
<Insets left="25.0" right="25.0" />
</VBox.margin>
</HBox>
<ListView id="list-cell" fx:id="listView" prefHeight="311.0" prefWidth="590.0" stylesheets="@../style.css">
<ListView id="list-cell" fx:id="listView" prefHeight="330.0" prefWidth="564.0" stylesheets="@../style.css">
<padding>
<Insets bottom="10.0" left="20.0" right="20.0" top="10.0" />
</padding>
......@@ -45,7 +45,7 @@
<Insets left="25.0" right="25.0" />
</VBox.margin>
</ListView>
<Pane prefHeight="81.0" prefWidth="600.0">
<Pane prefHeight="100.0" prefWidth="614.0">
<children>
<Button id="button-style" fx:id="addBtn" layoutX="275.0" layoutY="7.0" mnemonicParsing="false" onAction="#addToFridge" styleClass="button-style" stylesheets="@../style.css" text="ADD">
<font>
......@@ -54,6 +54,14 @@
</Button>
</children>
</Pane>
<Pane prefHeight="100.0" prefWidth="614.0">
<children>
<Label fx:id="status" layoutX="28.0" layoutY="6.0" prefHeight="44.0" prefWidth="558.0" textAlignment="CENTER" wrapText="true">
<font>
<Font size="14.0" />
</font></Label>
</children>
</Pane>
</children>
</VBox>
</children></AnchorPane>
......@@ -69,7 +77,6 @@
</Label>
</header>
<buttonTypes>
<ButtonType fx:constant="APPLY" />
<ButtonType fx:constant="CANCEL" />
<ButtonType fx:constant="CLOSE" />
</buttonTypes>
</DialogPane>
......@@ -57,10 +57,13 @@
<children>
<Pane layoutX="72.0" prefHeight="45.0" prefWidth="891.0">
<children>
<Label fx:id="missingList" prefHeight="43.0" prefWidth="847.0" text=" ">
<Label fx:id="missingList" styleClass="information-label" stylesheets="@../style.css">
<font>
<Font name="System Bold" size="14.0" />
</font></Label>
</font>
<padding>
<Insets left="20.0" right="20.0" />
</padding></Label>
</children>
</Pane>
</children></Pane>
......
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