diff --git a/javadoc/no/ntnu/idatt1002/demo/MyApp.html b/javadoc/no/ntnu/idatt1002/demo/MyApp.html index 14f844d22f3184ac952d2988d1021e3db1ad1b58..dd8d81de49f194f79515b2cfff7d951d2fb1a010 100644 --- a/javadoc/no/ntnu/idatt1002/demo/MyApp.html +++ b/javadoc/no/ntnu/idatt1002/demo/MyApp.html @@ -88,7 +88,7 @@ loadScripts(document, 'script');</script> <h1 title="Class MyApp" class="title">Class MyApp</h1> </div> <div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a> -<div class="inheritance">no.ntnu.idatt1002.demo.MyApp</div> +<div class="inheritance">no.ntnu.idatt1002.demo.view.MyApp</div> </div> <section class="class-description" id="class-description"> <hr> diff --git a/javadoc/no/ntnu/idatt1002/demo/class-use/MyApp.html b/javadoc/no/ntnu/idatt1002/demo/class-use/MyApp.html index 4adb36b01f52cf9f0cdadfd3cbc3c703dc5da2f2..03126e52d417253d41cbf991d258038a6026da19 100644 --- a/javadoc/no/ntnu/idatt1002/demo/class-use/MyApp.html +++ b/javadoc/no/ntnu/idatt1002/demo/class-use/MyApp.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <!-- Generated by javadoc (19) on Thu Feb 02 10:19:17 CET 2023 --> -<title>Uses of Class no.ntnu.idatt1002.demo.MyApp (demo 1.0-SNAPSHOT API)</title> +<title>Uses of Class no.ntnu.idatt1002.demo.view.MyApp (demo 1.0-SNAPSHOT API)</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="dc.created" content="2023-02-02"> @@ -50,9 +50,9 @@ loadScripts(document, 'script');</script> <div class="flex-content"> <main role="main"> <div class="header"> -<h1 title="Uses of Class no.ntnu.idatt1002.demo.MyApp" class="title">Uses of Class<br>no.ntnu.idatt1002.demo.MyApp</h1> +<h1 title="Uses of Class no.ntnu.idatt1002.demo.view.MyApp" class="title">Uses of Class<br>no.ntnu.idatt1002.demo.view.MyApp</h1> </div> -No usage of no.ntnu.idatt1002.demo.MyApp</main> +No usage of no.ntnu.idatt1002.demo.view.MyApp</main> <footer role="contentinfo"> <hr> <p class="legal-copy"><small>Copyright © 2023. All rights reserved.</small></p> diff --git a/pom.xml b/pom.xml index 454e08c12b85f37e49b785ea36d3e5e9e8e4a768..e60349b91d2981bb74468c723a55e5f0760f2a39 100644 --- a/pom.xml +++ b/pom.xml @@ -152,7 +152,7 @@ <archive> <manifest> <mainClass> - no.ntnu.idatt1002.demo.MyApp + no.ntnu.idatt1002.demo.view.MyApp </mainClass> </manifest> </archive> @@ -172,7 +172,7 @@ <!-- Default configuration for running with: mvn clean javafx:run --> <id>default-cli</id> <configuration> - <mainClass>no.ntnu.idatt1002.demo/no.ntnu.idatt1002.demo.MyApp</mainClass> + <mainClass>no.ntnu.idatt1002.demo/no.ntnu.idatt1002.demo.view.MyApp</mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/SceneController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/SceneController.java new file mode 100644 index 0000000000000000000000000000000000000000..fdc282265c2ba338ede7629d6e5e7551a3dfdede --- /dev/null +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/SceneController.java @@ -0,0 +1,135 @@ +package no.ntnu.idatt1002.demo.controller; + +import java.awt.event.InputEvent; +import java.io.IOException; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Modality; +import javafx.stage.Stage; + +public class SceneController /*implements Initializable*/ { + + private Stage stage; + private Scene scene; + private Parent root; + + /*@FXML + private Button add; + + @FXML + private ComboBox<?> show; + + @FXML + private TableColumn<Expense, Double> amount; + + @FXML + private TableColumn<Expense, ExpenseCategory> category; + + @FXML + private TableColumn<Expense, String> date; + + @FXML + private TableColumn<Expense, String> description; + + @FXML + private TableView<Expense> expenseTableView; + + ObservableList<Expense> expenses = FXCollections.observableArrayList( + new Expense("", 1000.00, true, ExpenseCategory.FOOD, "1/1/23") + ); + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + amount.setCellValueFactory(new PropertyValueFactory<Expense, Double>("amount")); + category.setCellValueFactory(new PropertyValueFactory<Expense, ExpenseCategory>("category")); + date.setCellValueFactory(new PropertyValueFactory<Expense, String>("date")); + description.setCellValueFactory(new PropertyValueFactory<Expense, String>("description")); + + expenseTableView.setItems(expenses); + }*/ + + public void switchStartMenu(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/FirstMenu.fxml")); + root = loader.load(); + stage = (Stage)((Node)event.getSource()).getScene().getWindow(); + scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + public void switchNewBudget(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/NewBudget.fxml")); + Parent root = loader.load(); + stage = (Stage)((Node)event.getSource()).getScene().getWindow(); + scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + public void switchIncome(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/Income.fxml")); + Parent root = loader.load(); + stage = (Stage)((Node)event.getSource()).getScene().getWindow(); + scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + public void switchExpenses(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/Expenses.fxml")); + Parent root = loader.load(); + stage = (Stage)((Node)event.getSource()).getScene().getWindow(); + scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + public void switchOverview(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/Overview.fxml")); + Parent root = loader.load(); + stage = (Stage)((Node)event.getSource()).getScene().getWindow(); + scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + public void addExpense(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/addExpense.fxml")); + Scene newScene = new Scene(loader.load()); + Stage newStage = new Stage(); + newStage.setScene(newScene); + newStage.setResizable(false); + newStage.initModality(Modality.APPLICATION_MODAL); + + newStage.show(); + } + public void addIncome(ActionEvent event) throws IOException { + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/addIncome.fxml")); + Scene newScene = new Scene(loader.load()); + Stage newStage = new Stage(); + newStage.setScene(newScene); + newStage.setResizable(false); + newStage.initModality(Modality.APPLICATION_MODAL); + + newStage.show(); + } + + public void underProgress(ActionEvent event) throws IOException{ + FXMLLoader loader = new FXMLLoader(SceneController.class.getResource("/view/underProgress.fxml")); + Scene newScene = new Scene(loader.load()); + Stage newStage = new Stage(); + newStage.setScene(newScene); + newStage.setResizable(false); + newStage.initModality(Modality.APPLICATION_MODAL); + + newStage.show(); + } + public void closeButton(ActionEvent actionEvent) { + final Node source = (Node) actionEvent.getSource(); + final Stage stage = (Stage) source.getScene().getWindow(); + stage.close();; + } +} diff --git a/src/main/java/no/ntnu/idatt1002/demo/view/App.java b/src/main/java/no/ntnu/idatt1002/demo/view/App.java new file mode 100644 index 0000000000000000000000000000000000000000..91586aac95fe94e6f494429e275f87f11130f5c3 --- /dev/null +++ b/src/main/java/no/ntnu/idatt1002/demo/view/App.java @@ -0,0 +1,7 @@ +package no.ntnu.idatt1002.demo.view; + +public class App { + public static void main(String[] args) { + MyApp.main(args); + } +} \ No newline at end of file diff --git a/src/main/java/no/ntnu/idatt1002/demo/view/ExpenseDialog.java b/src/main/java/no/ntnu/idatt1002/demo/view/ExpenseDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..76df851c669e85bc522a5cf9bfaefe70258e9efd --- /dev/null +++ b/src/main/java/no/ntnu/idatt1002/demo/view/ExpenseDialog.java @@ -0,0 +1,167 @@ +package no.ntnu.idatt1002.demo.view; + +import javafx.geometry.Insets; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.GridPane; +import no.ntnu.idatt1002.demo.data.Expense; + +public class ExpenseDialog extends Dialog<Expense> { + + public enum Mode { + NEW, EDIT + } + + //private final Mode mode; + + /* + package edu.ntnu.idatt2001.mvc.contacts.views; + +import edu.ntnu.idatt2001.mvc.contacts.model.Contact; +import javafx.geometry.Insets; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.GridPane; + + public class ContactDetailsDialog extends Dialog<Contact> { + + + public enum Mode { + NEW, EDIT, INFO + } + + + private final Mode mode; + + private Contact existingContact = null; + public ContactDetailsDialog() { + super(); + this.mode = Mode.NEW; + // Create the content of the dialog + createContent(); + + } + + public ContactDetailsDialog(Contact contact, boolean editable) { + super(); + if (editable) { + this.mode = Mode.EDIT; + } else { + this.mode = Mode.INFO; + } + this.existingContact = contact; + // Create the content of the dialog + createContent(); + } + + + private void createContent() { + // Set title depending upon mode... + switch (this.mode) { + case EDIT: + setTitle("Contact Details - Edit"); + break; + + case NEW: + setTitle("Contact Details - Add"); + break; + + case INFO: + setTitle("Contact Details"); + break; + + default: + setTitle("Contact Details - UNKNOWN MODE..."); + break; + + } + + // Set the button types. + getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + + GridPane grid = new GridPane(); + grid.setHgap(10); + grid.setVgap(10); + grid.setPadding(new Insets(20, 150, 10, 10)); + + TextField name = new TextField(); + name.setPromptText("Name"); + + TextField address = new TextField(); + address.setPromptText("Address"); + + TextField phoneNumber = new TextField(); + phoneNumber.setPromptText("Phone number"); + + // Fill inn data from the provided Newspaper, if not null. + if ((mode == Mode.EDIT) || (mode == Mode.INFO)) { + name.setText(existingContact.getName()); + address.setText(existingContact.getAddress()); + phoneNumber.setText(existingContact.getPhone()); + // Set to non-editable if Mode.INFO + if (mode == Mode.INFO) { + name.setEditable(false); + address.setEditable(false); + phoneNumber.setEditable(false); + } + } + + grid.add(new Label("Name:"), 0, 0); + grid.add(name, 1, 0); + grid.add(new Label("Address:"), 0, 1); + grid.add(address, 1, 1); + grid.add(new Label("Phone number:"), 0, 2); + grid.add(phoneNumber, 1, 2); + + getDialogPane().setContent(grid); + + // Convert the result to ContactDetails-instance when the OK button is clicked. + // Check out: + // https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Dialog.html#setResultConverter-javafx.util.Callback- + // and: https://docs.oracle.com/javase/8/javafx/api/javafx/util/Callback.html + setResultConverter((ButtonType button) -> { + Contact result = null; + if (button == ButtonType.OK) { + + if (mode == Mode.NEW) { + result = new Contact(name.getText(), phoneNumber.getText(), address.getText()); + } else if (mode == Mode.EDIT) { + existingContact.setName(name.getText()); + existingContact.setAddress(address.getText()); + existingContact.setPhone(phoneNumber.getText()); + + result = existingContact; + } + } + return result; + }); + } + } + + + + public ExpenseDialog() { + super(); + this.mode = Mode.NEW; + // Create the content of the dialog + createContent(); + } + + + public ExpenseDialog(Expense expense, boolean editable) { + super(); + if (editable) { + this.mode = Mode.EDIT; + } else { + this.mode = Mode.INFO; + } + this. = contact; + // Create the content of the dialog + createContent(); + }*/ + +} diff --git a/src/main/java/no/ntnu/idatt1002/demo/view/MyApp.java b/src/main/java/no/ntnu/idatt1002/demo/view/MyApp.java new file mode 100644 index 0000000000000000000000000000000000000000..171e4e68702e7fe81de7206e458f8315e824b6ba --- /dev/null +++ b/src/main/java/no/ntnu/idatt1002/demo/view/MyApp.java @@ -0,0 +1,25 @@ +package no.ntnu.idatt1002.demo.view; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.stage.Stage; +import javafx.scene.Parent; +import javafx.scene.Scene; + +import java.io.IOException; + +public class MyApp extends Application { + + @Override + public void start(Stage stage) throws IOException { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/FirstMenu.fxml")); + Parent root = loader.load(); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} \ No newline at end of file diff --git a/src/main/java/no/ntnu/idatt1002/demo/view/NewBudget.java b/src/main/java/no/ntnu/idatt1002/demo/view/NewBudget.java new file mode 100644 index 0000000000000000000000000000000000000000..2844313e33642897ff58d598a5b62e2e162c073d --- /dev/null +++ b/src/main/java/no/ntnu/idatt1002/demo/view/NewBudget.java @@ -0,0 +1,42 @@ +package no.ntnu.idatt1002.demo.view; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextArea; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import javafx.scene.text.Font; +import javafx.scene.text.FontPosture; +import javafx.scene.text.FontWeight; +import javafx.stage.Stage; + +import java.io.FileInputStream; +import java.io.IOException; + +public class NewBudget { + + private static StackPane root; + public static Pane getRoot() throws IOException { + + TextArea income = new TextArea(); + TextArea income2 = new TextArea(); + income.setMaxSize(200, 20); + income2.setMaxSize(200, 20); + VBox inputs = new VBox(); + inputs.getChildren().addAll(income, income2); + inputs.setAlignment(Pos.CENTER); + inputs.setSpacing(100); + + + return root; + } + +} + diff --git a/src/main/resources/Images/add_expense.png b/src/main/resources/Images/add_expense.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0773f42c667ed370652c4b5e75cb993a0bf2cf Binary files /dev/null and b/src/main/resources/Images/add_expense.png differ diff --git a/src/main/resources/Images/backgroundMini.jpg b/src/main/resources/Images/backgroundMini.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d67d659fd817307112ddf542096c0b5ecdb014f9 Binary files /dev/null and b/src/main/resources/Images/backgroundMini.jpg differ diff --git a/src/main/resources/Images/budgetbuddycover.jpeg b/src/main/resources/Images/budgetbuddycover.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..75e7f244e9d27b0416904cef73a52d3d88111f20 Binary files /dev/null and b/src/main/resources/Images/budgetbuddycover.jpeg differ diff --git a/src/main/resources/Images/monthly_budget_overview.fxml b/src/main/resources/Images/monthly_budget_overview.fxml new file mode 100644 index 0000000000000000000000000000000000000000..edf79ef2993e2d3d1ee0e2ece9bd551130c34f54 --- /dev/null +++ b/src/main/resources/Images/monthly_budget_overview.fxml @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.Cursor?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.DatePicker?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.ProgressBar?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Region?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.text.Font?> +<?import javafx.scene.text.Text?> + + +<AnchorPane xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1"> + <children> + <ImageView fitHeight="400.0" fitWidth="600.0" pickOnBounds="true"> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + </ImageView> + <BorderPane prefHeight="400.0" prefWidth="600.0" AnchorPane.topAnchor="0.0"> + <center> + <GridPane gridLinesVisible="true" BorderPane.alignment="CENTER"> + <columnConstraints> + <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 minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <HBox prefHeight="68.0" prefWidth="574.0" GridPane.columnSpan="2"> + <children> + <Region prefHeight="108.0" prefWidth="270.0" /> + <Label text="Label" /> + <Region prefHeight="108.0" prefWidth="100.0" /> + <DatePicker /> + </children> + </HBox> + <AnchorPane GridPane.columnSpan="2" GridPane.rowIndex="1"> + <children> + <ProgressBar layoutX="9.0" layoutY="41.0" prefHeight="18.0" prefWidth="554.0" progress="0.37" /> + </children> + </AnchorPane> + <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="50.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <children> + <Button contentDisplay="TOP" mnemonicParsing="false" prefHeight="125.0" prefWidth="125.0" text="Food"> + <graphic> + <ImageView fitHeight="63.0" fitWidth="87.0" pickOnBounds="true"> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + <image> + <Image url="@pizzaslice.png" /> + </image> + </ImageView> + </graphic> + </Button> + <Button contentDisplay="TOP" mnemonicParsing="false" prefHeight="125.0" prefWidth="125.0" text="Add expense"> + <graphic> + <ImageView fitHeight="79.0" fitWidth="87.0" pickOnBounds="true"> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + <image> + <Image url="@add_expense.png" /> + </image> + </ImageView> + </graphic> + </Button> + <Button contentDisplay="TOP" mnemonicParsing="false" prefHeight="125.0" prefWidth="125.0" text="Overview"> + <graphic> + <ImageView fitHeight="63.0" fitWidth="87.0" pickOnBounds="true"> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + <image> + <Image url="@overview_stonks.png" /> + </image> + </ImageView> + </graphic> + </Button> + </children> + </HBox> + </children> + </GridPane> + </center> + <bottom> + <Region prefHeight="8.0" prefWidth="600.0" BorderPane.alignment="CENTER" /> + </bottom> + <left> + <Region prefHeight="287.0" prefWidth="14.0" BorderPane.alignment="CENTER" /> + </left> + <right> + <Region prefHeight="287.0" prefWidth="12.0" BorderPane.alignment="CENTER" /> + </right> + <top> + <HBox BorderPane.alignment="CENTER"> + <children> + <Button mnemonicParsing="false" onAction="#switchIncome" text="Return "> + <opaqueInsets> + <Insets left="100.0" /> + </opaqueInsets> + <HBox.margin> + <Insets left="10.0" top="10.0" /> + </HBox.margin> + </Button> + <Region prefHeight="70.0" prefWidth="103.0" /> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="BUDGET FEBRUARY" textAlignment="CENTER"> + <HBox.margin> + <Insets /> + </HBox.margin> + <font> + <Font size="30.0" /> + </font> + </Text> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + </HBox> + </top> + </BorderPane> + </children> +</AnchorPane> diff --git a/src/main/resources/Images/overview_stonks.png b/src/main/resources/Images/overview_stonks.png new file mode 100644 index 0000000000000000000000000000000000000000..b9cbdc6e52faf7102423b713a3e72152375f5f59 Binary files /dev/null and b/src/main/resources/Images/overview_stonks.png differ diff --git a/src/main/resources/Images/pizzaslice.png b/src/main/resources/Images/pizzaslice.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab7c2818c2abe9a91e263d18c57b19ed7c66101 Binary files /dev/null and b/src/main/resources/Images/pizzaslice.png differ diff --git a/src/main/resources/Images/underProgress.png b/src/main/resources/Images/underProgress.png new file mode 100644 index 0000000000000000000000000000000000000000..74a260f5f282404981802a61eb99c830318a8880 Binary files /dev/null and b/src/main/resources/Images/underProgress.png differ diff --git a/src/main/resources/view/AddExpense.fxml b/src/main/resources/view/AddExpense.fxml new file mode 100644 index 0000000000000000000000000000000000000000..097992b0c7320fa41a777df6abb7036ab8274662 --- /dev/null +++ b/src/main/resources/view/AddExpense.fxml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.RowConstraints?> + +<GridPane hgap="10.0" vgap="10.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="95.0" minWidth="10.0" prefWidth="11.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="189.0" minWidth="10.0" prefWidth="189.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <padding> + <Insets bottom="10.0" left="10.0" top="20.0" /> + </padding> + <children> + <Label text="Date:" /> + <Label text="Amount:" GridPane.rowIndex="1" /> + <Label text="Description:" GridPane.rowIndex="2" /> + <Label text="Category" GridPane.rowIndex="3"> + <GridPane.margin> + <Insets /> + </GridPane.margin> + </Label> + <TextField promptText="Date" GridPane.columnIndex="1" GridPane.columnSpan="2" /> + <TextField promptText="Amount" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="1" /> + <TextField promptText="Description (optional)" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="2" /> + <ComboBox prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="3"> + <GridPane.margin> + <Insets /> + </GridPane.margin> + </ComboBox> + <Button mnemonicParsing="false" onAction="#closeButton" text="Cancel" GridPane.columnIndex="3" GridPane.rowIndex="4"> + <GridPane.margin> + <Insets left="75.0" /> + </GridPane.margin> + </Button> + <Button mnemonicParsing="false" onAction="#closeButton" text="Button" GridPane.columnIndex="3" GridPane.rowIndex="4"> + <GridPane.margin> + <Insets left="130.0" /> + </GridPane.margin> + </Button> + </children> +</GridPane> diff --git a/src/main/resources/view/AddIncome.fxml b/src/main/resources/view/AddIncome.fxml new file mode 100644 index 0000000000000000000000000000000000000000..097992b0c7320fa41a777df6abb7036ab8274662 --- /dev/null +++ b/src/main/resources/view/AddIncome.fxml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.RowConstraints?> + +<GridPane hgap="10.0" vgap="10.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="95.0" minWidth="10.0" prefWidth="11.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="189.0" minWidth="10.0" prefWidth="189.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <padding> + <Insets bottom="10.0" left="10.0" top="20.0" /> + </padding> + <children> + <Label text="Date:" /> + <Label text="Amount:" GridPane.rowIndex="1" /> + <Label text="Description:" GridPane.rowIndex="2" /> + <Label text="Category" GridPane.rowIndex="3"> + <GridPane.margin> + <Insets /> + </GridPane.margin> + </Label> + <TextField promptText="Date" GridPane.columnIndex="1" GridPane.columnSpan="2" /> + <TextField promptText="Amount" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="1" /> + <TextField promptText="Description (optional)" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="2" /> + <ComboBox prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="3"> + <GridPane.margin> + <Insets /> + </GridPane.margin> + </ComboBox> + <Button mnemonicParsing="false" onAction="#closeButton" text="Cancel" GridPane.columnIndex="3" GridPane.rowIndex="4"> + <GridPane.margin> + <Insets left="75.0" /> + </GridPane.margin> + </Button> + <Button mnemonicParsing="false" onAction="#closeButton" text="Button" GridPane.columnIndex="3" GridPane.rowIndex="4"> + <GridPane.margin> + <Insets left="130.0" /> + </GridPane.margin> + </Button> + </children> +</GridPane> diff --git a/src/main/resources/view/Expenses.fxml b/src/main/resources/view/Expenses.fxml new file mode 100644 index 0000000000000000000000000000000000000000..041a55504552a6d638ef7f7bc0d860e889029ec9 --- /dev/null +++ b/src/main/resources/view/Expenses.fxml @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.Cursor?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.control.TableColumn?> +<?import javafx.scene.control.TableView?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Region?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> +<?import javafx.scene.text.Text?> + +<AnchorPane xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <children> + <ImageView fitHeight="400.0" fitWidth="600.0" pickOnBounds="true"> + <image> + <Image url="@../Images/backgroundMini.jpg" /> + </image> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + </ImageView> + <BorderPane prefHeight="400.0" prefWidth="593.0"> + <top> + <HBox BorderPane.alignment="CENTER"> + <children> + <Button mnemonicParsing="false" onAction="#switchIncome" text="Return "> + <opaqueInsets> + <Insets left="100.0" /> + </opaqueInsets> + <HBox.margin> + <Insets left="10.0" top="10.0" /> + </HBox.margin> + </Button> + <Region prefHeight="70.0" prefWidth="141.0" /> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Expenses" textAlignment="CENTER"> + <HBox.margin> + <Insets /> + </HBox.margin> + <font> + <Font size="48.0" /> + </font> + </Text> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + </HBox> + </top> + <center> + <GridPane BorderPane.alignment="CENTER"> + <BorderPane.margin> + <Insets bottom="40.0" left="40.0" right="40.0" /> + </BorderPane.margin> + <columnConstraints> + <ColumnConstraints hgrow="ALWAYS" maxWidth="485.3333231608073" minWidth="10.0" prefWidth="427.33335367838544" /> + <ColumnConstraints hgrow="ALWAYS" maxWidth="111.33333333333331" minWidth="10.0" prefWidth="92.66664632161456" /> + </columnConstraints> + <rowConstraints> + <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> + <children> + <Button fx:id="add" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#addExpense" text="Add" textAlignment="CENTER" /> + <Button fx:id="add1" alignment="TOP_CENTER" mnemonicParsing="false" text="Edit" textAlignment="CENTER" /> + <Button fx:id="add11" alignment="TOP_CENTER" mnemonicParsing="false" text="Delete" textAlignment="CENTER" /> + </children> + <opaqueInsets> + <Insets /> + </opaqueInsets> + <padding> + <Insets bottom="5.0" /> + </padding> + </HBox> + <VBox alignment="BOTTOM_LEFT" prefHeight="200.0" prefWidth="100.0" spacing="5.0" GridPane.columnIndex="1"> + <children> + <ComboBox fx:id="show" prefWidth="150.0" promptText="Show"> + <opaqueInsets> + <Insets /> + </opaqueInsets> + <VBox.margin> + <Insets bottom="5.0" /> + </VBox.margin> + </ComboBox> + </children> + </VBox> + <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <children> + <Button mnemonicParsing="false" onAction="#switchOverview" text="Overview"> + <HBox.margin> + <Insets right="5.0" /> + </HBox.margin></Button> + <Button mnemonicParsing="false" onAction="#switchIncome" text="Income" /> + <Button disable="true" mnemonicParsing="false" text="Expenses" /> + <Button disable="true" mnemonicParsing="false" text="Savings" /> + <Button mnemonicParsing="false" onAction="#switchOverview" text="Next"> + <HBox.margin> + <Insets left="170.0" /> + </HBox.margin></Button> + </children> + <padding> + <Insets top="10.0" /> + </padding> + </HBox> + <TableView fx:id="expenseTableView" prefHeight="260.0" prefWidth="485.0" GridPane.columnSpan="2" GridPane.rowIndex="1"> + <columns> + <TableColumn fx:id="date" prefWidth="75.0" text="Date" /> + <TableColumn fx:id="amount" prefWidth="75.0" text="Amount" /> + <TableColumn fx:id="category" prefWidth="75.0" text="Category" /> + <TableColumn fx:id="description" prefWidth="75.0" text="Description" /> + </columns> + <columnResizePolicy> + <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> + </columnResizePolicy> + </TableView> + </children> + </GridPane> + </center> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + <left> + <Region prefHeight="357.0" prefWidth="25.0" BorderPane.alignment="CENTER" /> + </left> + <right> + <Region prefHeight="357.0" prefWidth="0.0" BorderPane.alignment="CENTER" /> + </right> + <bottom> + <Region prefHeight="0.0" prefWidth="600.0" BorderPane.alignment="CENTER" /> + </bottom> + </BorderPane> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> +</AnchorPane> diff --git a/src/main/resources/view/FirstMenu.fxml b/src/main/resources/view/FirstMenu.fxml new file mode 100644 index 0000000000000000000000000000000000000000..e8fe27a4d37df4c39247f7cf3741559d814495e8 --- /dev/null +++ b/src/main/resources/view/FirstMenu.fxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.text.Font?> + +<AnchorPane maxHeight="600" maxWidth="607.0" minHeight="406.0" minWidth="600" prefHeight="406.0" prefWidth="607.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <ImageView fitHeight="412.0" fitWidth="614.0" layoutX="-7.0" layoutY="-6.0" pickOnBounds="true" smooth="false"> + <Image url="@../Images/backgroundMini.jpg" /> + </ImageView> + <Label alignment="CENTER" contentDisplay="CENTER" layoutX="73.0" layoutY="113.0" lineSpacing="1.0" text="Welcome to BudgetBuddy!" textAlignment="CENTER" textOverrun="LEADING_ELLIPSIS" wrapText="true"> + <font> + <Font name="Verdana" size="34.0" /> + </font> + </Label> + <Label ellipsisString="" layoutX="147.0" layoutY="171.0" lineSpacing="1.0" text="Please choose one of the options:" textAlignment="CENTER"> + <font> + <Font name="Verdana" size="18.0" /> + </font> + </Label> + <Button layoutX="69.0" layoutY="212.0" mnemonicParsing="false" onAction="#switchIncome" text="New Budget"> + <font> + <Font size="24.0" /> + </font> + </Button> + <Button layoutX="380.0" layoutY="212.0" mnemonicParsing="false" onAction="#underProgress" text="Old Budget"> + <font> + <Font size="24.0" /> + </font> + </Button> +</AnchorPane> diff --git a/src/main/resources/view/Income.fxml b/src/main/resources/view/Income.fxml new file mode 100644 index 0000000000000000000000000000000000000000..4a4b9e7ba892ccfec2e1644f2ac01699bae7834d --- /dev/null +++ b/src/main/resources/view/Income.fxml @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.Cursor?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.control.TableColumn?> +<?import javafx.scene.control.TableView?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Region?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> +<?import javafx.scene.text.Text?> + +<AnchorPane xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <children> + <ImageView fitHeight="400.0" fitWidth="600.0" pickOnBounds="true"> + <image> + <Image url="@../Images/backgroundMini.jpg" /> + </image> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + </ImageView> + <BorderPane prefHeight="400.0" prefWidth="593.0"> + <top> + <HBox BorderPane.alignment="CENTER"> + <children> + <Button cancelButton="true" mnemonicParsing="false" onAction="#switchStartMenu" text="Return "> + <opaqueInsets> + <Insets left="100.0" /> + </opaqueInsets> + <HBox.margin> + <Insets left="10.0" top="10.0" /> + </HBox.margin> + </Button> + <Region prefHeight="70.0" prefWidth="141.0" /> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Income" textAlignment="CENTER" translateX="30.0"> + <HBox.margin> + <Insets /> + </HBox.margin> + <font> + <Font size="48.0" /> + </font> + </Text> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + </HBox> + </top> + <center> + <GridPane BorderPane.alignment="CENTER"> + <BorderPane.margin> + <Insets bottom="40.0" left="40.0" right="40.0" /> + </BorderPane.margin> + <columnConstraints> + <ColumnConstraints hgrow="ALWAYS" maxWidth="485.3333231608073" minWidth="10.0" prefWidth="427.33335367838544" /> + <ColumnConstraints hgrow="ALWAYS" maxWidth="111.33333333333331" minWidth="10.0" prefWidth="92.66664632161456" /> + </columnConstraints> + <rowConstraints> + <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> + <children> + <Button fx:id="add" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#addIncome" text="Add" textAlignment="CENTER" /> + <Button fx:id="add1" alignment="TOP_CENTER" mnemonicParsing="false" text="Edit" textAlignment="CENTER" /> + <Button fx:id="add11" alignment="TOP_CENTER" mnemonicParsing="false" text="Delete" textAlignment="CENTER" /> + </children> + <opaqueInsets> + <Insets /> + </opaqueInsets> + <padding> + <Insets bottom="5.0" /> + </padding> + </HBox> + <VBox alignment="BOTTOM_LEFT" prefHeight="200.0" prefWidth="100.0" spacing="5.0" GridPane.columnIndex="1"> + <children> + <ComboBox fx:id="show" prefWidth="150.0" promptText="Show"> + <opaqueInsets> + <Insets /> + </opaqueInsets> + <VBox.margin> + <Insets bottom="5.0" /> + </VBox.margin> + </ComboBox> + </children> + </VBox> + <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <children> + <Button mnemonicParsing="false" onAction="#switchOverview" text="Overview"> + <HBox.margin> + <Insets right="5.0" /> + </HBox.margin></Button> + <Button disable="true" mnemonicParsing="false" onAction="#switchIncome" text="Income" textFill="#4d1616" /> + <Button mnemonicParsing="false" onAction="#switchExpenses" text="Expenses" /> + <Button disable="true" mnemonicParsing="false" text="Savings" /> + <Button mnemonicParsing="false" onAction="#switchExpenses" text="Next"> + <HBox.margin> + <Insets left="170.0" /> + </HBox.margin></Button> + </children> + <padding> + <Insets top="10.0" /> + </padding> + </HBox> + <TableView fx:id="expenseTableView" prefHeight="260.0" prefWidth="485.0" GridPane.columnSpan="2" GridPane.rowIndex="1"> + <columns> + <TableColumn fx:id="date" prefWidth="75.0" text="Date" /> + <TableColumn fx:id="amount" prefWidth="75.0" text="Amount" /> + <TableColumn fx:id="category" prefWidth="75.0" text="Category" /> + <TableColumn fx:id="description" prefWidth="75.0" text="Description" /> + </columns> + <columnResizePolicy> + <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> + </columnResizePolicy> + </TableView> + </children> + </GridPane> + </center> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + <left> + <Region prefHeight="357.0" prefWidth="25.0" BorderPane.alignment="CENTER" /> + </left> + <right> + <Region prefHeight="357.0" prefWidth="0.0" BorderPane.alignment="CENTER" /> + </right> + <bottom> + <Region prefHeight="0.0" prefWidth="600.0" BorderPane.alignment="CENTER" /> + </bottom> + </BorderPane> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> +</AnchorPane> diff --git a/src/main/resources/view/Overview.fxml b/src/main/resources/view/Overview.fxml new file mode 100644 index 0000000000000000000000000000000000000000..dc81039bbe9391dd63e3fc1afe7e469cb01cca37 --- /dev/null +++ b/src/main/resources/view/Overview.fxml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.Cursor?> +<?import javafx.scene.chart.PieChart?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.control.ListView?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Region?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> +<?import javafx.scene.text.Text?> + +<AnchorPane xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <children> + <ImageView fitHeight="400.0" fitWidth="600.0" pickOnBounds="true"> + <image> + <Image url="@../Images/backgroundMini.jpg" /> + </image> + <cursor> + <Cursor fx:constant="DEFAULT" /> + </cursor> + </ImageView> + <BorderPane prefHeight="400.0" prefWidth="593.0"> + <top> + <HBox BorderPane.alignment="CENTER"> + <children> + <Button cancelButton="true" mnemonicParsing="false" onAction="#switchExpenses" text="Return "> + <opaqueInsets> + <Insets left="100.0" /> + </opaqueInsets> + <HBox.margin> + <Insets left="10.0" top="10.0" /> + </HBox.margin> + </Button> + <Region prefHeight="70.0" prefWidth="141.0" /> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Overview" textAlignment="CENTER" translateX="-5.0"> + <HBox.margin> + <Insets /> + </HBox.margin> + <font> + <Font size="48.0" /> + </font> + </Text> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + </HBox> + </top> + <center> + <GridPane BorderPane.alignment="CENTER"> + <BorderPane.margin> + <Insets bottom="40.0" left="40.0" right="40.0" /> + </BorderPane.margin> + <columnConstraints> + <ColumnConstraints hgrow="ALWAYS" maxWidth="485.3333231608073" minWidth="10.0" prefWidth="236.5" /> + <ColumnConstraints hgrow="ALWAYS" maxWidth="253.0" minWidth="10.0" prefWidth="252.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="26.5" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="239.5" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> + <opaqueInsets> + <Insets /> + </opaqueInsets> + <padding> + <Insets bottom="5.0" /> + </padding> + <children> + <ComboBox fx:id="show" prefHeight="26.0" prefWidth="240.0" promptText="Show"> + <opaqueInsets> + <Insets /> + </opaqueInsets> + </ComboBox> + </children> + </HBox> + <VBox alignment="BOTTOM_LEFT" prefHeight="200.0" prefWidth="100.0" spacing="5.0" GridPane.columnIndex="1" /> + <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <children> + <Button disable="true" mnemonicParsing="false" text="Overview"> + <HBox.margin> + <Insets right="5.0" /> + </HBox.margin></Button> + <Button mnemonicParsing="false" onAction="#switchIncome" text="Income" textFill="#4d1616" /> + <Button mnemonicParsing="false" onAction="#switchExpenses" text="Expenses" /> + <Button disable="true" mnemonicParsing="false" text="Savings" /> + <Button defaultButton="true" mnemonicParsing="false" onAction="#switchExpenses" text="Next"> + <HBox.margin> + <Insets left="170.0" /> + </HBox.margin></Button> + </children> + <padding> + <Insets top="10.0" /> + </padding> + </HBox> + <PieChart GridPane.columnIndex="1" GridPane.rowIndex="1" /> + <ListView prefHeight="200.0" prefWidth="270.0" GridPane.rowIndex="1" /> + </children> + </GridPane> + </center> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> + <left> + <Region prefHeight="357.0" prefWidth="25.0" BorderPane.alignment="CENTER" /> + </left> + <right> + <Region prefHeight="357.0" prefWidth="0.0" BorderPane.alignment="CENTER" /> + </right> + <bottom> + <Region prefHeight="0.0" prefWidth="600.0" BorderPane.alignment="CENTER" /> + </bottom> + </BorderPane> + </children> + <opaqueInsets> + <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> + </opaqueInsets> +</AnchorPane> diff --git a/src/main/resources/view/underProgress.fxml b/src/main/resources/view/underProgress.fxml new file mode 100644 index 0000000000000000000000000000000000000000..ec5bf55f00cae55d1dbf4094ecaf9e0365e2aab3 --- /dev/null +++ b/src/main/resources/view/underProgress.fxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.image.Image?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> + + +<AnchorPane prefHeight="172.0" prefWidth="340.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.SceneController"> + <children> + <ImageView fitHeight="310.0" fitWidth="476.0" layoutX="-5.0" pickOnBounds="true" preserveRatio="true"> + <image> + <Image url="@../Images/underProgress.png" /> + </image> + </ImageView> + <Button layoutX="195.0" layoutY="178.0" mnemonicParsing="false" onAction="#closeButton" text="Understood" /> + <TextField layoutX="41.0" layoutY="112.0" prefHeight="26.0" prefWidth="390.0" text="Sorry, but this part of the app is still under construction."> + <opaqueInsets> + <Insets /> + </opaqueInsets> + </TextField> + <TextField alignment="CENTER" layoutX="41.0" layoutY="65.0" prefHeight="26.0" prefWidth="390.0" text="Alert!"> + <opaqueInsets> + <Insets /> + </opaqueInsets> + </TextField> + <TextField layoutX="41.0" layoutY="138.0" prefHeight="26.0" prefWidth="390.0" text="Thank you for your patience."> + <opaqueInsets> + <Insets /> + </opaqueInsets> + </TextField> + </children> +</AnchorPane>