diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/SelectBudgetController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/SelectBudgetController.java index d744fe85668aad490f789aa662ba47df0478eeaa..4c59fc1e42683d0f6a2d25c57f74de9234c31248 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/SelectBudgetController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/SelectBudgetController.java @@ -4,16 +4,21 @@ import java.io.IOException; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; +import javafx.event.Event; import javafx.fxml.FXML; import javafx.scene.Node; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Budget.BudgetRegister; import no.ntnu.idatt1002.demo.data.Budget.FileHandlingBudgetArchive; import no.ntnu.idatt1002.demo.data.Budget.FileHandlingSelectedBudget; +import no.ntnu.idatt1002.demo.data.Economics.ExpenseCategory; /** * Class for selecting a budget from the archive. @@ -34,10 +39,14 @@ public class SelectBudgetController { private BudgetRegister budgetRegister; - private ObservableList<String> budgetList; - + /** + * Initializes the view when it is loaded. Prepares the view by adding event filters, + * instantiating the budget register and setting the list view. + * @throws IOException + */ @FXML public void initialize() throws IOException { + //Prevent users from choosing nothing okBtn.addEventFilter( ActionEvent.ACTION, event -> { if (budgetListView.getSelectionModel().getSelectedItem() == null) { @@ -46,6 +55,7 @@ public class SelectBudgetController { } }); + //Load budget register from file. try { if (FileHandlingBudgetArchive.isBudgetRegisterEmpty("budgets/Archive")) { budgetRegister = new BudgetRegister(); @@ -56,32 +66,68 @@ public class SelectBudgetController { ioe.printStackTrace(); } System.out.println("budget register is: " + budgetRegister); - budgetList = FXCollections.observableList(budgetRegister.getBudgetNames()); + ObservableList<String> budgetList = FXCollections.observableList( + budgetRegister.getBudgetNames()); budgetListView.setItems(budgetList); + //Double clicking the entry also chooses it budgetListView.setOnMouseClicked(mouseEvent-> { if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){ if(mouseEvent.getClickCount() == 2){ - System.out.println("Double clicked"); + selectBudget(mouseEvent); } } }); } + /** + * Selects the budget in the budget list view and stores this value as + * the currently selected budget. + + * @param event Double mouseclick or a click on the ok button. + */ @FXML - public void selectBudget(ActionEvent event) throws IOException { - String name = budgetListView.getSelectionModel().getSelectedItem(); - FileHandlingSelectedBudget.updateSelectedBudget(name, "budgets/SelectedBudget"); + public void selectBudget(Event event) { + try { + String name = budgetListView.getSelectionModel().getSelectedItem(); + FileHandlingSelectedBudget.updateSelectedBudget(name, "budgets/SelectedBudget"); + } catch(IOException ioe) { + showErrorDialogBox(ioe.getMessage(), ioe.getMessage(), ioe.getMessage()); + } final Node source = (Node) event.getSource(); ((Stage) source.getScene().getWindow()).close(); } + /** + * Closes the dialog box and clears the currently selected budget. + + * @param event Button press on cancel button + */ @FXML - public void exitWindow(ActionEvent event) throws IOException { - FileHandlingSelectedBudget.clearSelectedBudget("budgets/SelectedBudget"); + public void exitWindow(ActionEvent event) { + try { + FileHandlingSelectedBudget.clearSelectedBudget("budgets/SelectedBudget"); + } catch (IOException ioe) { + showErrorDialogBox(ioe.getMessage(), ioe.getMessage(), ioe.getMessage()); + } final Node source = (Node) event.getSource(); ((Stage) source.getScene().getWindow()).close(); } + + /** + * Displays an error message dialog box with a customizable title, header and content. + + * @param title The dialog title. + * @param header The dialog header. + * @param content The dialog content. + */ + public void showErrorDialogBox(String title, String header, String content) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle(title); + alert.setHeaderText(header); + alert.setContentText(content); + alert.showAndWait(); + } }