diff --git a/src/main/java/frontend/HelloFX.java b/src/main/java/frontend/HelloFX.java index c55e7717..722548dd 100644 --- a/src/main/java/frontend/HelloFX.java +++ b/src/main/java/frontend/HelloFX.java @@ -16,7 +16,7 @@ public class HelloFX extends Application { public void start(Stage stage) throws IOException { FXMLLoader fxmlLoader = new FXMLLoader(HelloFX.class.getResource("main-view.fxml")); Parent root = fxmlLoader.load(); - Scene scene = new Scene(root, 640, 480); + Scene scene = new Scene(root, 680, 500); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); stage.setTitle("Restaurangbokningar"); stage.setScene(scene); diff --git a/src/main/java/frontend/controller/BookingController.java b/src/main/java/frontend/controller/BookingController.java index e115d51e..945f403f 100644 --- a/src/main/java/frontend/controller/BookingController.java +++ b/src/main/java/frontend/controller/BookingController.java @@ -3,6 +3,7 @@ import backend.entities.Booking; import backend.entities.Restaurant; import backend.services.BookingService; +import frontend.model.RestaurantHandler; import javafx.fxml.FXML; import javafx.scene.control.*; @@ -12,9 +13,7 @@ public class BookingController { private final BookingService bookingService = new BookingService(); - private Restaurant restaurant; - - @FXML private Label restaurantNameLabel; + private Restaurant restaurant = RestaurantHandler.getCurrentRestaurant(); @FXML private TextField firstNameField; @FXML private TextField lastNameField; @@ -28,12 +27,6 @@ public class BookingController { @FXML private Label statusLabel; - public void setRestaurant(Restaurant restaurant) { - this.restaurant = restaurant; - restaurantNameLabel.setText(restaurant.getName()); - } - - @FXML private void initialize() { @@ -82,4 +75,8 @@ private void BookTable() { statusLabel.setText(e.getMessage()); } } + +// public void setRestaurant(Restaurant restaurant) { +// this.restaurant = restaurant; +// } } diff --git a/src/main/java/frontend/controller/MainController.java b/src/main/java/frontend/controller/MainController.java index 398c549d..8de13f63 100644 --- a/src/main/java/frontend/controller/MainController.java +++ b/src/main/java/frontend/controller/MainController.java @@ -22,6 +22,8 @@ public class MainController { private TextField searchRestaurantField; @FXML private FlowPane restaurantContainer; + @FXML + private VBox mainArea; @FXML private void initialize() { @@ -43,7 +45,7 @@ public void handleRestaurantSearch(ActionEvent event){ private void displayRestaurants(List restaurants){ restaurantContainer.getChildren().clear(); for(Restaurant r : restaurants){ - RestaurantCard restaurantCard = new RestaurantCard(r, restaurantContainer); + RestaurantCard restaurantCard = new RestaurantCard(r, mainArea); restaurantContainer.getChildren().add(restaurantCard); } } diff --git a/src/main/java/frontend/controller/RestaurantController.java b/src/main/java/frontend/controller/RestaurantController.java index c0339123..8e4f3070 100644 --- a/src/main/java/frontend/controller/RestaurantController.java +++ b/src/main/java/frontend/controller/RestaurantController.java @@ -1,19 +1,36 @@ package frontend.controller; - import backend.entities.Restaurant; +import frontend.model.ImageHandler; import frontend.model.RestaurantHandler; import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; -import javafx.scene.control.Label; - public class RestaurantController { @FXML - private Pane restaurantRoot; - + private Pane restaurantPageRoot; @FXML private Label restaurantName; + @FXML + private Label restaurantAdress; + @FXML + private Label adressIcon; + @FXML + private Label categoryIcon; + @FXML + private Label restaurantCategory; + @FXML + private Label meanPriceIcon; + @FXML + private Label restaurantMeanPrice; + @FXML + private Label ratingIcon; + @FXML + private Label restaurantRating; + @FXML + private ImageView restaurantImage; private Restaurant restaurant; @@ -24,6 +41,22 @@ private void initialize() { if (restaurant != null) { restaurantName.setText(restaurant.getName()); } + + setRestaurantData(restaurant); + } + + private void setRestaurantData(Restaurant restaurant){ + restaurantName.setText(restaurant.getName()); + adressIcon.setText("📍"); + restaurantAdress.setText(restaurant.getAddress()); + categoryIcon.setText("🍴"); + restaurantCategory.setText(restaurant.getCategory()); + meanPriceIcon.setText("$"); + restaurantMeanPrice.setText(restaurant.getMeanPrice().toString() + " kr"); + ratingIcon.setText("⭐ "); + restaurantRating.setText(String.valueOf(restaurant.getRating())); + restaurantImage.setImage(ImageHandler.getRestaurantImage(restaurant)); + ImageHandler.scaleAndCropImage(restaurantImage, 350, 250); } } diff --git a/src/main/java/frontend/model/ImageHandler.java b/src/main/java/frontend/model/ImageHandler.java index e2bcb519..a54b6a07 100644 --- a/src/main/java/frontend/model/ImageHandler.java +++ b/src/main/java/frontend/model/ImageHandler.java @@ -1,16 +1,22 @@ package frontend.model; +import backend.entities.Restaurant; +import frontend.view.RestaurantCard; import javafx.geometry.Rectangle2D; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.shape.Rectangle; + +import java.util.Objects; public class ImageHandler { - public static void scaleAndCropImage(ImageView imageView, double targetHeight, double targetWidth){ + public static void scaleAndCropImage(ImageView imageView, double targetWidth, double targetHeight){ Image image = imageView.getImage(); double width = image.getWidth(); double height = image.getHeight(); + //Calculate ratio double ratio = Math.min(width / targetWidth, height / targetHeight); double viewWidth = targetWidth * ratio; double viewHeight = targetHeight * ratio; @@ -23,5 +29,19 @@ public static void scaleAndCropImage(ImageView imageView, double targetHeight, d imageView.setFitWidth(targetWidth); imageView.setFitHeight(targetHeight); imageView.setPreserveRatio(false); + imageView.setSmooth(true); + } + + public static Image getRestaurantImage(Restaurant restaurant) { + String imagePath = "/images/" + restaurant.getImagePath(); + try { + return new Image(Objects.requireNonNull(ImageHandler.class.getResourceAsStream(imagePath))); + } catch (Exception e) { + System.out.println("Could not find: " + imagePath); + e.printStackTrace(); + return null; + } } + } + diff --git a/src/main/java/frontend/view/RestaurantCard.java b/src/main/java/frontend/view/RestaurantCard.java index b4ccbcd9..8e968fbb 100644 --- a/src/main/java/frontend/view/RestaurantCard.java +++ b/src/main/java/frontend/view/RestaurantCard.java @@ -22,35 +22,22 @@ public RestaurantCard(Restaurant restaurant, Pane pane){ SceneHandler.switchScene(pane, "restaurant-view.fxml"); }); - setUpImage(restaurant); + ImageView view = new ImageView(); + view.setImage(ImageHandler.getRestaurantImage(restaurant)); + ImageHandler.scaleAndCropImage(view, 150, 100); + + //Rounds upper two corners of image, so it matches corners of VBox (container) + Rectangle clip = new Rectangle(); + clip.widthProperty().bind(view.fitWidthProperty()); + clip.heightProperty().bind(view.fitHeightProperty().add(50)); + clip.setArcWidth(30); + clip.setArcHeight(30); + + view.setClip(clip); + this.getChildren().add(view); setUpNameAndRating(restaurant); } - private void setUpImage(Restaurant restaurant){ - ImageView imageView = new ImageView(); - String imagePath = "/images/" + restaurant.getImagePath(); - - try{ - Image image = new Image(Objects.requireNonNull(RestaurantCard.class.getResourceAsStream(imagePath))); - imageView.setImage(image); - ImageHandler.scaleAndCropImage(imageView, 100, 150); - - //Rounds upper two corners of image, so it matches corners of VBox (container) - Rectangle clip = new Rectangle(); - clip.widthProperty().bind(imageView.fitWidthProperty()); - clip.heightProperty().bind(imageView.fitHeightProperty().add(50)); - clip.setArcWidth(30); - clip.setArcHeight(30); - - imageView.setClip(clip); - this.getChildren().add(imageView); - - } catch (Exception e) { - imageView.setImage(null); - System.out.println("Could not find: " + imagePath); - } - } - private void setUpNameAndRating(Restaurant restaurant){ HBox container = new HBox(); diff --git a/src/main/resources/frontend/application.css b/src/main/resources/frontend/application.css index 6ed7b73a..c981481b 100644 --- a/src/main/resources/frontend/application.css +++ b/src/main/resources/frontend/application.css @@ -3,6 +3,7 @@ -fx-font-size: 15; } +/*Restaurant Card*/ .restaurantBox{ -fx-background-color: white; -fx-background-radius: 15; @@ -11,16 +12,65 @@ /* Gives a small shadow behind the cards */ -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.1), 10, 0, 0, 4); } - .restaurantBox:hover{ -fx-scale-x: 1.15; -fx-scale-y: 1.15; -fx-cursor: hand; } - .restaurantBox .label{ -fx-padding: 10; -fx-font-family: "Agency FB"; -fx-font-size: 16; } +/*Restaurant Page*/ +.restaurantPage-Header{ + -fx-font-family: "Agency FB"; + -fx-font-size: 32px; + -fx-text-fill: #1a1a1a; + -fx-padding: 0 20 10 0; +} +.restaurantPage-Info{ + -fx-font-family: "Verdana"; + -fx-font-size: 12px; + -fx-text-fill: #1a1a1a; + -fx-padding: 8 10 7 5; +} +.restaurantPage-Icon{ + -fx-font-family: "Agency FB"; + -fx-font-size: 12px; + -fx-text-fill: #333333; + -fx-padding: 8 0 10 0; +} + +/*Booking Form*/ +.bookingForm-Header{ + -fx-font-family: "Agency FB"; + -fx-font-size: 20px; + -fx-padding: 0 0 10 0; +} +.bookingForm-Textfield{ + -fx-font-family: "Verdana"; + -fx-spacing: 10; +} +.bookingForm-Labels .label{ + -fx-font-family: "Verdana"; + -fx-padding: 15 0 10 0; +} +.bookingForm-Choice { + -fx-alignment: TOP_RIGHT; + -fx-padding: 10 0 10 0; + -fx-spacing: 15; +} +.bookingForm-ChoiceBox { + -fx-pref-width: 100px; + -fx-max-width: 100px; +} +.bookingForm-Button{ + -fx-alignment: center; + -fx-background-color: #4cbb17; + -fx-text-fill: #1a1a1a; +} + + + diff --git a/src/main/resources/frontend/booking-form.fxml b/src/main/resources/frontend/booking-form.fxml new file mode 100644 index 00000000..34a47f74 --- /dev/null +++ b/src/main/resources/frontend/booking-form.fxml @@ -0,0 +1,41 @@ + + + + + + + + + + + +