diff --git a/src/main/java/mi/hdm/components/CategoryCheckBox.java b/src/main/java/mi/hdm/components/CategoryCheckBox.java index e35c5d06c0f1c5a5c4b02b69ac18acb3dd8a6c49..bec9a2e3afdbf62e0c13e522af55e13893efdf69 100644 --- a/src/main/java/mi/hdm/components/CategoryCheckBox.java +++ b/src/main/java/mi/hdm/components/CategoryCheckBox.java @@ -14,7 +14,6 @@ public class CategoryCheckBox extends CheckBox { super(category.getName()); this.category = category; - //TODO: set text color to white when background is below a certain brightness level this.setStyle( "-fx-background-color:" + category.getColourCode() + ";" + "-fx-padding: 4px;" + diff --git a/src/main/java/mi/hdm/components/IngredientLabel.java b/src/main/java/mi/hdm/components/IngredientLabel.java index 7cbf7da435e4f0fda13c737bab70d40587edc7c2..05d45d0eb7634f0ddf6b7dbd833c04717c4971bd 100644 --- a/src/main/java/mi/hdm/components/IngredientLabel.java +++ b/src/main/java/mi/hdm/components/IngredientLabel.java @@ -27,7 +27,6 @@ public class IngredientLabel extends HBox { } public RecipeComponent getComponent() { - //TODO: create a copy return component; } } diff --git a/src/main/java/mi/hdm/controllers/CategoryCreatorController.java b/src/main/java/mi/hdm/controllers/CategoryCreatorController.java index 8fc2d424e10c09198aab15786912f8b7ec03efd0..fee7fb8c8fc7165c909dc442bb114376a75bc98d 100644 --- a/src/main/java/mi/hdm/controllers/CategoryCreatorController.java +++ b/src/main/java/mi/hdm/controllers/CategoryCreatorController.java @@ -1,6 +1,7 @@ package mi.hdm.controllers; import javafx.fxml.FXML; +import javafx.scene.control.Alert; import javafx.scene.control.ColorPicker; import javafx.scene.control.TextField; import javafx.scene.layout.AnchorPane; @@ -41,7 +42,10 @@ public class CategoryCreatorController extends BaseController { log.info("Created new category '{}'.", name); changeScene(View.MAIN); } catch (InvalidCategoryException e) { - //TODO: display an error message + Alert a = new Alert(Alert.AlertType.ERROR); + a.setHeaderText("Error creating category"); + a.setContentText(e.getMessage()); + a.show(); log.error("Category '{}' was not created;", name); log.error(e.getMessage()); } diff --git a/src/main/java/mi/hdm/controllers/HeaderController.java b/src/main/java/mi/hdm/controllers/HeaderController.java index e42e972e2ade24154ec2da81178975ef3a120327..6ca581e169d92198b0c202165280c00514aea9ca 100644 --- a/src/main/java/mi/hdm/controllers/HeaderController.java +++ b/src/main/java/mi/hdm/controllers/HeaderController.java @@ -31,6 +31,7 @@ public class HeaderController extends BaseController { @FXML public void searchByQuery() { + changeScene(View.MAIN); String query = searchBox.getText(); log.debug("User submitted search box"); RecipeSearch recipeSearch = new RecipeSearch(recipeManager, ingredientManager); diff --git a/src/main/java/mi/hdm/controllers/IngredientCreatorController.java b/src/main/java/mi/hdm/controllers/IngredientCreatorController.java index 8a493dea99945ed2e04a936ac888dd5eabc36754..a7bfb17496383e49cdf63c2987a9ed39e1713656 100644 --- a/src/main/java/mi/hdm/controllers/IngredientCreatorController.java +++ b/src/main/java/mi/hdm/controllers/IngredientCreatorController.java @@ -1,6 +1,7 @@ package mi.hdm.controllers; import javafx.fxml.FXML; +import javafx.scene.control.Alert; import javafx.scene.control.ChoiceBox; import javafx.scene.control.TextField; import javafx.scene.layout.AnchorPane; @@ -54,10 +55,6 @@ public class IngredientCreatorController extends BaseController { @FXML public void submitCreateIngredient() { log.info("User submitted ingredient creation"); - if (!inputsAreValid()) { - log.error("Inputs are invalid"); - //TODO: display an error message to the user! - } try { Measurement selected = unitChoiceBox.getValue(); Measurement submittedMeasurement = selected == null ? Measurement.GRAM : selected; @@ -75,7 +72,17 @@ public class IngredientCreatorController extends BaseController { log.info("Ingredient '{}' was created and added to ingredient manager", ingredient.getName()); changeScene(View.MAIN); } catch (InvalidIngredientException e) { - //TODO: display error message in GUI + Alert a = new Alert(Alert.AlertType.ERROR); + a.setHeaderText("Error creating ingredient"); + a.setContentText(e.getMessage()); + a.show(); + log.error("Ingredient was not created:"); + log.error(e.getMessage()); + } catch (NumberFormatException e) { + Alert a = new Alert(Alert.AlertType.ERROR); + a.setHeaderText("Error creating ingredient"); + a.setContentText("One or more of your nutrition values are invalid. Make sure to enter it like this: '10.2'"); + a.show(); log.error("Ingredient was not created:"); log.error(e.getMessage()); } diff --git a/src/main/java/mi/hdm/controllers/RecipeCreatorController.java b/src/main/java/mi/hdm/controllers/RecipeCreatorController.java index d43c23ba9191bf053e0eb26ed674f191ff0624ce..663431af5db7f295869171260c746b8214101035 100644 --- a/src/main/java/mi/hdm/controllers/RecipeCreatorController.java +++ b/src/main/java/mi/hdm/controllers/RecipeCreatorController.java @@ -1,10 +1,7 @@ package mi.hdm.controllers; import javafx.fxml.FXML; -import javafx.scene.control.ScrollPane; -import javafx.scene.control.SplitPane; -import javafx.scene.control.TextArea; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; @@ -13,6 +10,7 @@ import mi.hdm.components.CategoryCheckBox; import mi.hdm.components.CategoryPreviewLabel; import mi.hdm.components.IngredientSearchResultLabel; import mi.hdm.components.SelectedIngredientLabel; +import mi.hdm.exceptions.InvalidRecipeException; import mi.hdm.recipes.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -162,12 +160,23 @@ public class RecipeCreatorController extends BaseController { String prepTime = prepTimeTextField.getText(); Integer preparationTimeMins = isInteger(prepTime) ? Integer.parseInt(prepTime) : null; - //TODO: display error messages in GUI try { recipe = new Recipe(name, ingredients, description, preparation, categories, preparationTimeMins); recipeManager.addRecipe(recipe); log.info("Recipe '{}' was created.", name); + changeScene(View.MAIN); + } catch (InvalidRecipeException e) { + Alert a = new Alert(Alert.AlertType.ERROR); + a.setHeaderText("Error creating recipe"); + a.setContentText(e.getMessage()); + a.show(); + log.error(e.getMessage()); + log.error("Recipe not created."); } catch (RuntimeException e) { + Alert a = new Alert(Alert.AlertType.ERROR); + a.setHeaderText("Error creating recipe"); + a.setContentText("Something went wrong when creating the recipe. Check all your inputs!"); + a.show(); log.error(e.getMessage()); log.error("Recipe not created."); } @@ -189,11 +198,6 @@ public class RecipeCreatorController extends BaseController { drawIngredientSearchResults(); } - private void displayError(String message) { - //TODO: implement error message when recipe creation fails - throw new RuntimeException("TODO!"); - } - @FXML public void changeSceneToHome() { changeScene(View.MAIN); diff --git a/src/main/java/mi/hdm/controllers/RecipeViewController.java b/src/main/java/mi/hdm/controllers/RecipeViewController.java index 613c6fbb519fa0629da27a7e417fc1cdca354ddc..10d77b9ecedcaa439461d0cbc8e32ebbf1131c84 100644 --- a/src/main/java/mi/hdm/controllers/RecipeViewController.java +++ b/src/main/java/mi/hdm/controllers/RecipeViewController.java @@ -17,7 +17,6 @@ import org.apache.logging.log4j.Logger; public class RecipeViewController extends BaseController { private static final Logger log = LogManager.getLogger(RecipeViewController.class); - private final Recipe recipe; private final RecipeManager recipeManager; private final IngredientManager ingredientManager; diff --git a/src/main/java/mi/hdm/controllers/ShoppingListViewController.java b/src/main/java/mi/hdm/controllers/ShoppingListViewController.java index 0a4a517cd056414e25932fb1893558ae240690a0..73ffb1eaabfb5ffe5524c6b90530a3038054bc30 100644 --- a/src/main/java/mi/hdm/controllers/ShoppingListViewController.java +++ b/src/main/java/mi/hdm/controllers/ShoppingListViewController.java @@ -78,7 +78,7 @@ public class ShoppingListViewController extends BaseController { @FXML public void handleRemoveBought() { - shoppingList.removeAllBought(); //TODO: this does not work but causes a lot of errors + shoppingList.removeAllBought(); displayShoppingList(); } @FXML diff --git a/src/main/java/mi/hdm/recipes/Ingredient.java b/src/main/java/mi/hdm/recipes/Ingredient.java index e6fcb13ad2437c6bf3f5c5909121bb7f855f6e2b..d0b522b9074c951c1f100c545808f7c2a7aaaf7a 100644 --- a/src/main/java/mi/hdm/recipes/Ingredient.java +++ b/src/main/java/mi/hdm/recipes/Ingredient.java @@ -12,7 +12,7 @@ public class Ingredient implements RecipeComponent { public Ingredient(Measurement unit, String name, NutritionTable nutritionTable) { if (name == null || name.equals("")) { - throw new InvalidIngredientException("Can not add ingredient with name " + name); + throw new InvalidIngredientException("Can not add ingredient with name '" + name + "'"); } if (nutritionTable == null) { throw new InvalidIngredientException("Can not add ingredient without Nutrition Table"); diff --git a/src/main/java/mi/hdm/recipes/RecipeManager.java b/src/main/java/mi/hdm/recipes/RecipeManager.java index 2dd8cb8978b611e2a49e57c399f68055c4d23862..8a1e3720f2e213aa859f5c8dd01311a423e5a760 100644 --- a/src/main/java/mi/hdm/recipes/RecipeManager.java +++ b/src/main/java/mi/hdm/recipes/RecipeManager.java @@ -10,7 +10,6 @@ import java.util.Map; import java.util.Optional; public class RecipeManager { - //TODO observable array list? private static final Logger log = LogManager.getLogger(RecipeManager.class); private final Map<String, Recipe> allRecipes; diff --git a/src/main/java/mi/hdm/recipes/RecipeSearch.java b/src/main/java/mi/hdm/recipes/RecipeSearch.java index db80412357f4ef682cb5657e8c1abd3b194c14f4..dc9005343b75af20cfa0ff46f384bd4f4e7577d4 100644 --- a/src/main/java/mi/hdm/recipes/RecipeSearch.java +++ b/src/main/java/mi/hdm/recipes/RecipeSearch.java @@ -7,13 +7,13 @@ import java.util.ArrayList; import java.util.List; public class RecipeSearch { - //TODO: lets make these methods static, no need to instantiate a new object every time private static final Logger log = LogManager.getLogger(RecipeSearch.class); private final RecipeManager recipeManager; private final IngredientManager ingredientManager; public RecipeSearch(RecipeManager recipeManager, IngredientManager ingredientManager) { + //TODO: dont use the managers as parameters, instead just take in some List<RecipeComponent> this.recipeManager = recipeManager; this.ingredientManager = ingredientManager; log.debug("RecipeSearch was instantiated with {} recipes and {} ingredients", recipeManager.getRecipes().size(), ingredientManager.getAllIngredients().size()); diff --git a/src/main/resources/fxml/Tasty_Pages_Main_Page.fxml b/src/main/resources/fxml/Tasty_Pages_Main_Page.fxml index 828354e9c42e19489dfaab2e890862517d0be21e..b1a7f412507105d1f98a97e6186ed135702021c8 100644 --- a/src/main/resources/fxml/Tasty_Pages_Main_Page.fxml +++ b/src/main/resources/fxml/Tasty_Pages_Main_Page.fxml @@ -1,44 +1,63 @@ <?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Insets?> -<?import javafx.scene.Cursor?> <?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.Cursor?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> -<?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.HBox?> -<?import javafx.scene.layout.Pane?> -<?import javafx.scene.layout.TilePane?> -<?import javafx.scene.layout.VBox?> - -<AnchorPane fx:id="parent" prefHeight="400.0" prefWidth="640.0" VBox.vgrow="ALWAYS" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mi.hdm.controllers.MainPageController"> - <VBox prefHeight="400.0" prefWidth="640.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> - <children> - <HBox fx:id="categories" prefWidth="640.0" spacing="8.0"> - <padding> - <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" /> - </padding> - </HBox> - <TilePane fx:id="recipeTilePane" hgap="8.0" prefHeight="400.0" prefTileHeight="250.0" prefTileWidth="180.0" prefWidth="640.0" vgap="8.0"> - <Pane prefHeight="250.0" prefWidth="180.0" style="-fx-background-color: dedede; -fx-background-radius: 15;"> - <Button contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleAddRecipe" prefHeight="250.0" prefWidth="180.0" style="-fx-background-color: transparent;" text="Button" textFill="TRANSPARENT"> - <graphic> - <ImageView fitHeight="67.0" fitWidth="64.0" pickOnBounds="true" preserveRatio="true"> - <Image url="@../images/Tasty_Pages_Plus_Icon.png" /> - </ImageView> - </graphic> - <cursor> - <Cursor fx:constant="HAND" /> - </cursor> - </Button> - </Pane> - <padding> - <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" /> - </padding> - </TilePane> - </children> - <padding> - <Insets top="30.0" /> - </padding> - </VBox> +<?import javafx.scene.layout.*?> +<?import javafx.scene.text.Font?> +<AnchorPane fx:id="parent" prefHeight="600.0" prefWidth="800.0" VBox.vgrow="ALWAYS" + xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" + fx:controller="mi.hdm.controllers.MainPageController"> + <BorderPane prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" + AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> + <center> + <VBox prefHeight="400.0" prefWidth="640.0" BorderPane.alignment="CENTER"> + <children> + <HBox fx:id="categories" prefWidth="640.0" spacing="8.0"> + <padding> + <Insets bottom="8.0" left="8.0" right="8.0" top="8.0"/> + </padding> + </HBox> + <TilePane fx:id="recipeTilePane" hgap="8.0" prefHeight="400.0" prefTileHeight="250.0" + prefTileWidth="180.0" prefWidth="640.0" vgap="8.0"> + <Pane prefHeight="250.0" prefWidth="180.0" + style="-fx-background-color: dedede; -fx-background-radius: 15;"> + <Button contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleAddRecipe" + prefHeight="250.0" prefWidth="180.0" style="-fx-background-color: transparent;" + text="Button" textFill="TRANSPARENT"> + <graphic> + <ImageView fitHeight="67.0" fitWidth="64.0" pickOnBounds="true" + preserveRatio="true"> + <Image url="@../images/Tasty_Pages_Plus_Icon.png"/> + </ImageView> + </graphic> + <cursor> + <Cursor fx:constant="HAND"/> + </cursor> + </Button> + </Pane> + <padding> + <Insets bottom="8.0" left="8.0" right="8.0" top="8.0"/> + </padding> + </TilePane> + </children> + </VBox> + </center> + <top> + <Label text="Tasty Pages" BorderPane.alignment="CENTER"> + <font> + <Font name="System Bold" size="24.0"/> + </font> + <BorderPane.margin> + <Insets top="10.0"/> + </BorderPane.margin> + </Label> + </top> + </BorderPane> + <padding> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/> + </padding> </AnchorPane> diff --git a/src/main/resources/fxml/recipe-creator.fxml b/src/main/resources/fxml/recipe-creator.fxml index 442d6c35ad663806deb63246a1a98262b8037610..05d38d477f7d651c7542c0dd8f894a41566db081 100644 --- a/src/main/resources/fxml/recipe-creator.fxml +++ b/src/main/resources/fxml/recipe-creator.fxml @@ -1,50 +1,36 @@ <?xml version="1.0" encoding="UTF-8"?> -<?import javafx.geometry.Insets?> +<?import javafx.geometry.*?> +<?import javafx.scene.control.*?> <?import javafx.scene.Cursor?> -<?import javafx.scene.control.Button?> -<?import javafx.scene.control.Label?> -<?import javafx.scene.control.ScrollPane?> -<?import javafx.scene.control.Separator?> -<?import javafx.scene.control.SplitPane?> -<?import javafx.scene.control.TextArea?> -<?import javafx.scene.control.TextField?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> -<?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.BorderPane?> -<?import javafx.scene.layout.FlowPane?> -<?import javafx.scene.layout.HBox?> -<?import javafx.scene.layout.VBox?> +<?import javafx.scene.layout.*?> <?import javafx.scene.text.Font?> - -<AnchorPane prefHeight="800" prefWidth="1200.0" style="-fx-background-color: ffffff;" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mi.hdm.controllers.RecipeCreatorController"> +<AnchorPane prefHeight="800" prefWidth="1200.0" style="-fx-background-color: ffffff;" + xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" + fx:controller="mi.hdm.controllers.RecipeCreatorController"> <padding> - <Insets bottom="10.0" left="10.0" right="10.0" /> + <Insets bottom="10.0" left="10.0" right="10.0"/> </padding> - <BorderPane fx:id="borderPane" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> - <top> - <ImageView fitHeight="40.0" fitWidth="200.0" onMouseClicked="#changeSceneToHome" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER_LEFT"> - <Image url="@../images/Tasty_Pages_Back_Arrow.png" /> - <cursor> - <Cursor fx:constant="HAND" /> - </cursor> - <BorderPane.margin> - <Insets top="5.0" /> - </BorderPane.margin> - </ImageView> - </top> + <BorderPane fx:id="borderPane" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" + AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <center> - <SplitPane fx:id="topSplitPane" dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0" style="-fx-box-border: transparent; -fx-padding: 0; -fx-split-pane-divider: transparent; -fx-background-color: transpartent;" styleClass=".split-pane-divider { -fx-padding: 0 ;}" BorderPane.alignment="CENTER"> - <AnchorPane minHeight="0.0" minWidth="300.0" prefHeight="160.0" prefWidth="100.0" style="-fx-background-color: ffffff;"> + <SplitPane fx:id="topSplitPane" dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0" + style="-fx-box-border: transparent; -fx-padding: 0; -fx-split-pane-divider: transparent; -fx-background-color: transparent;" + BorderPane.alignment="CENTER"> + <AnchorPane minHeight="0.0" minWidth="300.0" prefHeight="160.0" prefWidth="100.0" + style="-fx-background-color: ffffff;"> <padding> - <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/> </padding> - <VBox prefHeight="200.0" prefWidth="100.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> - <Label text="Recipe name" /> - <TextField fx:id="nameTextField" promptText="Enter a name for your recipe" style="-fx-background-color: eeeeee; -fx-background-radius: 5; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;"> + <VBox prefHeight="200.0" prefWidth="100.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" + AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> + <Label text="Recipe name"/> + <TextField fx:id="nameTextField" promptText="Enter a name for your recipe" + style="-fx-background-color: eeeeee; -fx-background-radius: 5; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;"> <VBox.margin> - <Insets bottom="5.0" /> + <Insets bottom="5.0"/> </VBox.margin> </TextField> <Label text="Recipe description" /> @@ -76,13 +62,18 @@ </TextArea> <Label text="Ingredients" /> <ScrollPane id="RecipeCreatorIngredients" fx:id="selectedIngredientsScrollPane" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: transparent; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-background-radius: 5; -fx-border-width: 4;" stylesheets="@../styles/GUI_extras.css" /> - <Button mnemonicParsing="false" onAction="#confirmCreateRecipe" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;" text="Create Recipe" textFill="#d91c1c"> + <Button mnemonicParsing="false" onAction="#confirmCreateRecipe" + style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;" + text="Create Recipe" textFill="#d91c1c"> <VBox.margin> - <Insets top="10.0" /> + <Insets top="10.0"/> </VBox.margin> - <font> - <Font name="System Bold" size="13.0" /> - </font> + <font> + <Font name="System Bold" size="13.0"/> + </font> + <cursor> + <Cursor fx:constant="HAND"/> + </cursor> </Button> </VBox> </AnchorPane> @@ -91,40 +82,92 @@ <padding> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </padding> - <VBox prefHeight="200.0" prefWidth="100.0" style="-fx-background-color: ffffff;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> - <Label text="Select categories" /> - <FlowPane fx:id="allCategories" prefHeight="129.0" prefWidth="566.0" style="-fx-background-color: eeeeee; -fx-background-radius: 5; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;" /> - <Separator prefWidth="200.0" /> + <VBox prefHeight="200.0" prefWidth="100.0" style="-fx-background-color: ffffff;" + AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" + AnchorPane.topAnchor="0.0"> + <Label text="Select categories"/> + <FlowPane fx:id="allCategories" hgap="5.0" prefHeight="129.0" prefWidth="566.0" + style="-fx-background-color: eeeeee; -fx-background-radius: 5; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;" + vgap="5.0"> + <padding> + <Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/> + </padding> + </FlowPane> + <Separator prefWidth="200.0"/> <Label text="Search for ingredients"> <VBox.margin> - <Insets top="10.0" /> + <Insets top="10.0"/> </VBox.margin> </Label> - <TextField fx:id="ingredientSearch" onInputMethodTextChanged="#searchIngredients" promptText="Type something..." style="-fx-background-color: eeeeee; -fx-background-radius: 5; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;"> + <TextField fx:id="ingredientSearch" onInputMethodTextChanged="#searchIngredients" + promptText="Type something..." + style="-fx-background-color: eeeeee; -fx-background-radius: 5; -fx-border-color: #D91C1C; -fx-border-radius: 5; -fx-border-width: 4;"> <VBox.margin> - <Insets bottom="5.0" top="5.0" /> + <Insets bottom="5.0" top="5.0"/> </VBox.margin> </TextField> - <ScrollPane fx:id="searchResultsPane" fitToHeight="true" maxHeight="1.7976931348623157E308" prefHeight="509.0" prefWidth="566.0" style="-fx-background-color: transparent; -fx-background-radius: 5; -fx-border-width: 4; -fx-border-color: D91C1C; -fx-border-radius: 5;" stylesheets="@../styles/GUI_extras.css" /> + <ScrollPane fx:id="searchResultsPane" fitToHeight="true" maxHeight="1.7976931348623157E308" + prefHeight="509.0" prefWidth="566.0" + style="-fx-background-color: transparent; -fx-background-radius: 5; -fx-border-width: 4; -fx-border-color: #D91C1C; -fx-border-radius: 5;" + stylesheets="@../styles/GUI_extras.css"/> <HBox alignment="TOP_CENTER" prefHeight="45.0" prefWidth="566.0" spacing="15.0"> - <Button accessibleRole="DECREMENT_BUTTON" mnemonicParsing="false" onAction="#decrementPageCounter" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4; -fx-padding: 5;" text="<< Previous" textFill="#d91c1c"> - <opaqueInsets> - <Insets /> - </opaqueInsets> - <HBox.margin> - <Insets top="12.0" /> - </HBox.margin></Button> - <Button accessibleRole="INCREMENT_BUTTON" mnemonicParsing="false" onAction="#incrementPageCounter" style="-fx-background-color: ffffff; -fx-control-inner-background: transparent; -fx-border-color: D91C1C; -fx-border-radius: 5; -fx-border-width: 4;" text="Next >>" textFill="#d91c1c"> - <font> - <Font name="System Bold" size="13.0" /> - </font> - <HBox.margin> - <Insets top="12.0" /> - </HBox.margin></Button> + <Button accessibleRole="DECREMENT_BUTTON" mnemonicParsing="false" + onAction="#decrementPageCounter" + style="-fx-background-color: #ffffff; -fx-control-inner-background: transparent; -fx-border-color: #D91C1C; -fx-border-radius: 5; -fx-border-width: 2; -fx-padding: 5;" + text="<< Previous" textFill="#d91c1c"> + <opaqueInsets> + <Insets/> + </opaqueInsets> + <HBox.margin> + <Insets top="12.0"/> + </HBox.margin> + <font> + <Font size="13.0"/> + </font> + </Button> + <Button accessibleRole="INCREMENT_BUTTON" mnemonicParsing="false" + onAction="#incrementPageCounter" + style="-fx-background-color: #ffffff; -fx-control-inner-background: transparent; -fx-border-color: #D91C1C; -fx-border-radius: 5; -fx-border-width: 2;" + text="Next >>" textFill="#d91c1c"> + <font> + <Font size="13.0"/> + </font> + <HBox.margin> + <Insets top="12.0"/> + </HBox.margin> + </Button> </HBox> </VBox> </AnchorPane> </SplitPane> </center> + <top> + <GridPane BorderPane.alignment="CENTER"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> + </rowConstraints> + <padding> + <Insets bottom="10.0" left="5.0" right="5.0" top="5.0"/> + </padding> + <ImageView fitHeight="40.0" fitWidth="200.0" onMouseClicked="#changeSceneToHome" pickOnBounds="true" + preserveRatio="true" GridPane.valignment="CENTER"> + <Image url="@../images/Tasty_Pages_Back_Arrow.png"/> + <cursor> + <Cursor fx:constant="HAND"/> + </cursor> + </ImageView> + <Label alignment="CENTER" contentDisplay="CENTER" prefHeight="17.0" prefWidth="1000.0" + text="Create a recipe" textAlignment="CENTER" GridPane.columnIndex="1"> + <font> + <Font name="System Bold" size="24.0"/> + </font> + </Label> + </GridPane> + </top> </BorderPane> </AnchorPane>