package no.ntnu.idatt1002.demo.controller; import java.io.IOException; import java.time.LocalDate; import javafx.collections.FXCollections; 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.scene.control.Button; import javafx.scene.control.DatePicker; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Budget.FileHandlingBudget; import no.ntnu.idatt1002.demo.data.Budget.GeneralBudget; import no.ntnu.idatt1002.demo.data.Economics.ExpenseRegister; import no.ntnu.idatt1002.demo.data.Economics.IncomeRegister; public class MainMenu { @FXML private Label balanceLbl; @FXML private ProgressBar bookBar; @FXML private Label bookLbl; @FXML private Button budgetBtn; @FXML private ProgressBar clothesBar; @FXML private Label clothesLbl; @FXML private DatePicker date; @FXML private Button expenseBtn; @FXML private ProgressBar foodBar; @FXML private Button foodBtn; @FXML private Label foodLbl; @FXML private Button incomeBtn; @FXML private ProgressBar mainBar; @FXML private ProgressBar otherBar; @FXML private Label otherLbl; @FXML private Button returnBtn; @FXML private Label title; @FXML private Label usageLbl; @FXML private AnchorPane root; @FXML private Label daysLeftLbl; GeneralBudget generalBudget; ExpenseRegister expenseRegister; IncomeRegister incomeRegister; @FXML public void initialize() throws IOException { //TODO NEED TO SET STATUSBAR VALUES //Initialize all controllers initializeControllers(); double incomeSum = incomeRegister.getTotalSum(); double expenseSum = expenseRegister.getTotalSum(); //Set progress mainBar.setProgress(expenseSum/incomeSum); //Displaying month title.setText("BUDGET " + (LocalDate.now().getMonth())); double balance = incomeSum - expenseSum; //Set balance balanceLbl.setText("Balance: " + (balance)); //Displaying how much of the monthly budget has been spent. usageLbl.setText("Used " + expenseSum + " out of " + 1000); if (balance < 0) { balanceLbl.setTextFill(Color.RED); } //Make calendar uneditable formatDatePicker(); daysLeftLbl.setText("Days left: 31"); //date.restrict } /** * Method for initializing all controllers in order to load all necessary data for this screen. * Made this a separate method in order to make initialize() less cluttered. * @throws IOException If there is an error with reading the files. */ private void initializeControllers() throws IOException { //Instantiate income controller and register IncomeController incomeController = new IncomeController(); incomeRegister = incomeController.loadIncomeDataFromFile("Income"); //Instantiate expense controller and register ExpensesController expensesController = new ExpensesController(); expenseRegister = expensesController.loadExpenseDataFromFile("Expense"); //Instantiate budget controller and register BudgetController budgetController = new BudgetController(); generalBudget = budgetController.loadBudgetDataFromFile("Budget"); } /** * Method for disabling the date picker, yet having its opacity at max. */ private void formatDatePicker() { date.setValue(LocalDate.now()); date.setDisable(true); date.setStyle("-fx-opacity: 1"); date.getEditor().setStyle("-fx-opacity: 1"); } @FXML private void switchScene(ActionEvent event) throws IOException { FXMLLoader loader = new FXMLLoader(); if (event.getSource() == foodBtn) { System.out.println("Food button pressed"); } else if (event.getSource() == expenseBtn) { loader.setLocation(getClass().getResource("/view/IncomeAndExpenses.fxml")); } else if (event.getSource() == incomeBtn) { loader.setLocation(getClass().getResource("/view/IncomeAndExpenses.fxml")); } else if (event.getSource() == budgetBtn) { loader.setLocation(getClass().getResource("/view/BudgetNewest.fxml")); } else if (event.getSource() == returnBtn) { loader.setLocation(getClass().getResource("/view/FirstMenu.fxml")); } Parent root = loader.load(); Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); } }