From 8851393c6d9d103b1eee7809337efa93f3946aa3 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 12 May 2026 17:24:00 +0200 Subject: [PATCH 1/9] Feat: Updated View structure to use enums for easier usage. --- .../g40/mappe/view/ViewController.java | 15 +- .../idatt2003/g40/mappe/view/ViewData.java | 8 +- .../idatt2003/g40/mappe/view/ViewElement.java | 60 +++- .../idatt2003/g40/mappe/view/ViewEnum.java | 26 ++ .../idatt2003/g40/mappe/view/ViewManager.java | 12 +- .../mappe/view/mainmenu/MainMenuActions.java | 7 + .../view/mainmenu/MainMenuController.java | 25 +- .../g40/mappe/view/mainmenu/MainMenuView.java | 35 +- .../mappe/view/playgame/PlayGameActions.java | 6 + .../view/playgame/PlayGameController.java | 69 ++-- .../g40/mappe/view/playgame/PlayGameView.java | 16 +- .../mappe/view/settings/SettingsActions.java | 8 + .../view/settings/SettingsController.java | 57 ++- .../g40/mappe/view/settings/SettingsView.java | 326 +++++++++--------- .../mappe/service/event/EventManagerTest.java | 3 +- .../g40/mappe/view/ViewControllerTest.java | 12 +- .../g40/mappe/view/ViewManagerTest.java | 15 +- 17 files changed, 364 insertions(+), 336 deletions(-) create mode 100644 src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewEnum.java create mode 100644 src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/mainmenu/MainMenuActions.java create mode 100644 src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/playgame/PlayGameActions.java create mode 100644 src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/settings/SettingsActions.java diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewController.java index 61fb506..3284e51 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewController.java @@ -3,6 +3,7 @@ import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventData; import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager; import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventPublisher; +import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventType; /** * Handles logic and event publishing for {@link ViewElement} objects. @@ -18,7 +19,7 @@ * @see EventManager * */ -public abstract class ViewController> +public abstract class ViewController> implements EventPublisher { /** @@ -26,6 +27,7 @@ public abstract class ViewController> * */ private final T1 viewElement; + /** * The {@link EventManager} object to send events to. * @@ -84,4 +86,15 @@ public final void invoke(final EventData data, final EventManager eventManager) { eventManager.invokeEvent(data); } + + /** + * Basic method for invoking an event to change to a specific view. + * + * @param viewName the view to set to. + * */ + protected void changeScene(final ViewEnum viewName) { + ViewData viewData = new ViewData(viewName); + EventData eventData = new EventData(EventType.SCENE_CHANGE, viewData); + invoke(eventData, eventManager); + } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewData.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewData.java index 33fca3c..5f66e88 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewData.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewData.java @@ -17,7 +17,7 @@ public class ViewData { * Name of the scene. * */ - private final String sceneName; + private final ViewEnum sceneName; /** * Constructor. @@ -26,8 +26,8 @@ public class ViewData { * * @throws IllegalArgumentException if sceneName is empty or null. */ - public ViewData(final String sceneName) throws IllegalArgumentException { - if (Validator.NOT_EMPTY.isValid(sceneName)) { + public ViewData(final ViewEnum sceneName) throws IllegalArgumentException { + if (Validator.NOT_EMPTY.isValid(sceneName.toString())) { this.sceneName = sceneName; } else { throw new IllegalArgumentException(Validator.NOT_EMPTY.getErrorMessage()); @@ -40,7 +40,7 @@ public ViewData(final String sceneName) throws IllegalArgumentException { * @return scene name. * */ - public String getSceneName() { + public ViewEnum getSceneName() { return sceneName; } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewElement.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewElement.java index aa0f941..a0b0f1c 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewElement.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewElement.java @@ -1,7 +1,8 @@ package edu.ntnu.idi.idatt2003.g40.mappe.view; import edu.ntnu.idi.idatt2003.g40.mappe.utils.Validator; -import java.util.ArrayList; +import java.util.EnumMap; +import java.util.Map; import javafx.scene.control.Button; import javafx.scene.layout.Pane; @@ -12,15 +13,16 @@ *

Extends {@link Pane}

* * @param the type of pane this view element represents. + * @param an enum representing all interactable actions found in the view. * */ -public abstract class ViewElement { +public abstract class ViewElement> { /** * List of buttons in this view. * */ - private final ArrayList