diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..002da1d --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Main.java \ No newline at end of file diff --git a/src/main/java/workshop/Controller.java b/src/main/java/workshop/Controller.java index 070b56f..5855ecb 100644 --- a/src/main/java/workshop/Controller.java +++ b/src/main/java/workshop/Controller.java @@ -2,40 +2,96 @@ package workshop; import javafx.fxml.FXML; import javafx.scene.control.Label; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; +import javafx.scene.Scene; public class Controller { @FXML private Label titleLabel; @FXML private Button themeToggle; + // price labels for the optional runtime updates + @FXML private Label basicPriceLabel; + @FXML private Label proPriceLabel; + @FXML private Label enterprisePriceLabel; + private boolean isDark = true; - // TODO: (Optional:For Practice) Create initialize function and use it to set prices during runtime. + + private int basicPrice = 9; + private int proPrice = 29; + private int enterprisePrice = 99; - // TODO: (Optional:For Practice) Make the plan price go 1 dollar up each time user clicks on the shop button. + @FXML + public void initialize() { + updatePriceLabels(); + } + + private void updatePriceLabels() { + if (basicPriceLabel != null) basicPriceLabel.setText("$" + basicPrice + "/mo"); + if (proPriceLabel != null) proPriceLabel.setText("$" + proPrice + "/mo"); + if (enterprisePriceLabel != null) enterprisePriceLabel.setText("$" + enterprisePrice + "/mo"); + } + @FXML private void buyBasic() { - // TODO: Call showAlert() with a message indicating the user entered the payment gateway + // (Optional practice) Make the plan price go 1 dollar up each time user clicks + basicPrice++; + updatePriceLabels(); + + // show message indicating the user entered the payment + showAlert("Redirecting to the Basic Plan payment gateway... Total due: $" + (basicPrice - 1)); } @FXML private void buyPro() { - // TODO: Call showAlert() with a message indicating the user entered the payment gateway + // Make the plan price go 1 dollar up each time user clicks + proPrice++; + updatePriceLabels(); + + showAlert("Redirecting to the Pro Plan payment gateway... Total due: $" + (proPrice - 1)); } @FXML private void buyEnterprise() { - // TODO: Call showAlert() with a message indicating the user entered the payment gateway + + enterprisePrice++; + updatePriceLabels(); + + showAlert("Redirecting to the Enterprise Plan payment gateway... Total due: $" + (enterprisePrice - 1)); } @FXML private void toggleTheme() { - // TODO: Toggle the isDark flag. If dark, switch to style.css and set button text to "Switch to Light Mode" - // TODO: If light, switch to light.css and set button text to "Switch to Dark Mode" + // Get the current scene via one of the injected UI nodes + Scene scene = themeToggle.getScene(); + if (scene == null) return; + + // Clear existing stylesheets to avoid stacking conflicts + scene.getStylesheets().clear(); + + + isDark = !isDark; + + if (isDark) { + // Switch to style.css and set button text to "Switch to Light Mode" + scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); + themeToggle.setText("Switch to Light Mode"); + } else { + // Switch to light.css and set button text to "Switch to Dark Mode" + scene.getStylesheets().add(getClass().getResource("light.css").toExternalForm()); + themeToggle.setText("Switch to Dark Mode"); + } } private void showAlert(String message) { - // TODO: Create a new Alert of type INFORMATION with the given message and display it + // Create a new Alert of type INFORMATION with the given message and display it + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle("Payment Gateway"); + alert.setHeaderText(null); + alert.setContentText(message); + alert.showAndWait(); } -} +} \ No newline at end of file diff --git a/src/main/java/workshop/Launcher.java b/src/main/java/workshop/Launcher.java index 0f82aeb..b4c5737 100644 --- a/src/main/java/workshop/Launcher.java +++ b/src/main/java/workshop/Launcher.java @@ -2,8 +2,13 @@ package workshop; import javafx.application.Application; +/** + * @author Hesam Ghazi + * Student Number: 403222015 + */ + public class Launcher { public static void main(String[] args) { - // TODO: Launch the JavaFX application by calling Application.launch(Main.class) + Application.launch(Main.class, args); } -} +} \ No newline at end of file diff --git a/src/main/java/workshop/Main.java b/src/main/java/workshop/Main.java index d6cd3fd..6c4de0d 100644 --- a/src/main/java/workshop/Main.java +++ b/src/main/java/workshop/Main.java @@ -1,13 +1,21 @@ package workshop; import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) throws Exception { - // TODO: Load the FXML file using FXMLLoader.load() and get the Parent root - // TODO: Create a Scene with the root (width=750, height=450) and add the stylesheet "style.css" - // TODO: Set the stage title to "Pricing Plans", set the scene, and call stage.show() + + Parent root = FXMLLoader.load(getClass().getResource("pricing.fxml")); + Scene scene = new Scene(root, 750, 450); + scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); + + stage.setTitle("Pricing Plans"); + stage.setScene(scene); + stage.show(); } -} +} \ No newline at end of file diff --git a/src/main/resources/workshop/pricing.fxml b/src/main/resources/workshop/pricing.fxml index a9b03f8..d043d27 100644 --- a/src/main/resources/workshop/pricing.fxml +++ b/src/main/resources/workshop/pricing.fxml @@ -17,23 +17,23 @@