From f2fba7a84b7fcea14bedb9b1516988473304ba5d Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Tue, 26 May 2026 11:08:01 +0200 Subject: [PATCH 1/2] Now u can't shrink the view smaller then content --- .../ntnu/idi/idatt2003/g40/mappe/Main.java | 384 +++++++++--------- .../g40/mappe/utils/ConfigValues.java | 28 +- 2 files changed, 213 insertions(+), 199 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java index 348cf5c..1fd5382 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java @@ -59,198 +59,202 @@ /** * Main class. * - *

Extends {@link Application}

+ *

+ * Extends {@link Application} + *

* - *

Launches the javafx thread and starts the program.

- * */ + *

+ * Launches the javafx thread and starts the program. + *

+ */ public class Main extends Application { - /** - * Active {@link Exchange} object. - * */ - private Exchange exchange; - - /** - * Active {@link Player} object. - * */ - private Player player; - - /** - * Main method, launches the start javafx method. - * - * @param args standard Java parameter. - * */ - public static void main(final String[] args) { - launch(args); - } - - @Override - public void start(final Stage stage) throws Exception { - Scene scene = new Scene(new Pane()); - scene.getStylesheets() - .add(Objects.requireNonNull(getClass().getResource("/styles.css")).toExternalForm()); - Font.loadFont(getClass().getResourceAsStream("/Fonts/Aptos.ttf"), 16); - stage.setScene(scene); - stage.setWidth(ConfigValues.VIEWPORT_WIDTH.getValue()); - stage.setHeight(ConfigValues.VIEWPORT_HEIGHT.getValue()); - - ThemeManager.getInstance().registerScene(scene); - - EventManager eventManager = new EventManager(); - ViewManager viewManager = new ViewManager(stage, eventManager); - - // Loads a default file in case of misreading (fallback) - StockFileManager fileManager = new StockFileManager("src/main/resources/sp500.csv"); - StockFileParser fileParser = new StockFileParser(); - List stocksInFile = fileParser.getStocksFromStrings(fileManager.readFile()); - - exchange = new Exchange("Exchange", stocksInFile); - player = new Player("Player 1", new BigDecimal("10000")); - - GameStateLoader gameStateLoader = new GameStateLoader( - player, exchange, stocksInFile, eventManager); - - MainMenuView mainMenuView = new MainMenuView(); - new MainMenuController(mainMenuView, eventManager); - - PlayGameView playGameView = new PlayGameView(); - SaveGameService saveGameService = new SaveGameService(); - PlayGameController playGameController = - new PlayGameController(playGameView, eventManager, saveGameService); - playGameController.refresh(); - - CreateGameView createGameView = new CreateGameView(); - CreateGameController createGameController = - new CreateGameController(createGameView, eventManager, saveGameService); - createGameController.setOnSaveCreated(playGameController::refresh); - - SettingsView settingsView = new SettingsView(); - new SettingsController(settingsView, eventManager); - - SummaryView summaryView = new SummaryView(); - SummaryController summaryController = - new SummaryController(summaryView, eventManager, exchange, player); - - TopBarView topBarView = new TopBarView(summaryView); - TopBarController topBarController = new TopBarController(topBarView, eventManager); - - TopBarView topBarView2 = new TopBarView(); - new TopBarController(topBarView2, eventManager); - - DashBoardView dashBoardView = new DashBoardView(); - DashBoardController dashBoardController = - new DashBoardController(dashBoardView, eventManager, player, exchange, stocksInFile); - - StatsView statsView = new StatsView(); - StatsController statsController = - new StatsController(statsView, eventManager, player, exchange); - - MarketView marketView = new MarketView(); - MarketController marketController = - new MarketController(marketView, eventManager, player, exchange, stocksInFile); - - InGameView inGameView = new InGameView(topBarView, dashBoardView.getRootPane()); - InGameController inGameController = new InGameController(inGameView, eventManager); - - TransactionsView transactionsView = new TransactionsView(); - TransactionsController transactionsController = new TransactionsController( - transactionsView, eventManager, player.getTransactionArchive()); - - ClickerGame clickerGame = new ClickerGame(); - FindStockGame findStockGame = new FindStockGame( - stocksInFile.stream().map(Stock::getSymbol).toList() - ); - TimeInputsGame timeInputsGame = new TimeInputsGame(); - - GameEngineView gameEngineView = new GameEngineView(); - GameEngineController gameEngineController = new GameEngineController( - gameEngineView, eventManager, stocksInFile.getFirst() - ); - - MiniGamesView miniGamesView = new MiniGamesView(); - MiniGamesController miniGamesController = - new MiniGamesController( - miniGamesView, eventManager, stocksInFile.getFirst(), gameEngineView, - gameEngineController, clickerGame, inGameView, findStockGame, timeInputsGame - ); - - // Adds a generic event subscriber to the event manager - // that handles STATE_RESET events. These events are - // triggered when a new save file is loaded. - // We define this implementation here, because - // this class has the highest level overview of the application. - eventManager.addSubscriber(new EventSubscriber() { - @Override - public void handleEvent(final EventData eventData) { - if (eventData.data() instanceof SaveGame) { - - if (createGameController.getExchange() != null && createGameController.getPlayer() != null) { - gameStateLoader.setExchange(createGameController.getExchange()); - - exchange = createGameController.getExchange(); - player = createGameController.getPlayer(); - } else { - exchange = gameStateLoader.getExchange(); - player = gameStateLoader.getPlayer(); - } - - List dynamicStocks = exchange.getStocks(); - - // Updates the various UI components that - // depend on an exchange, player, or list of stocks. - findStockGame.updateStockPool(dynamicStocks.stream().map(Stock::getSymbol).toList()); - summaryController.handleContextUpdate(Main.this.exchange, Main.this.player); - dashBoardController.handleStockPoolUpdate(dynamicStocks); - statsController.handleContextUpdate(Main.this.exchange, Main.this.player); - marketController.handleStockPoolUpdate(Main.this.exchange, Main.this.player, dynamicStocks); - - if (!dynamicStocks.isEmpty()) { - miniGamesController.setActiveStock(dynamicStocks.getFirst()); - } + /** + * Active {@link Exchange} object. + */ + private Exchange exchange; + + /** + * Active {@link Player} object. + */ + private Player player; + + /** + * Main method, launches the start javafx method. + * + * @param args standard Java parameter. + */ + public static void main(final String[] args) { + launch(args); + } + + @Override + public void start(final Stage stage) throws Exception { + Scene scene = new Scene(new Pane()); + scene.getStylesheets() + .add(Objects.requireNonNull(getClass().getResource("/styles.css")).toExternalForm()); + Font.loadFont(getClass().getResourceAsStream("/Fonts/Aptos.ttf"), 16); + stage.setScene(scene); + stage.setWidth(ConfigValues.VIEWPORT_WIDTH.getValue()); + stage.setHeight(ConfigValues.VIEWPORT_HEIGHT.getValue()); + stage.setMinWidth(ConfigValues.MIN_VIEWPORT_WIDTH.getValue()); + stage.setMinHeight(ConfigValues.MIN_VIEWPORT_HEIGHT.getValue()); + + ThemeManager.getInstance().registerScene(scene); + + EventManager eventManager = new EventManager(); + ViewManager viewManager = new ViewManager(stage, eventManager); + + // Loads a default file in case of misreading (fallback) + StockFileManager fileManager = new StockFileManager("src/main/resources/sp500.csv"); + StockFileParser fileParser = new StockFileParser(); + List stocksInFile = fileParser.getStocksFromStrings(fileManager.readFile()); + + exchange = new Exchange("Exchange", stocksInFile); + player = new Player("Player 1", new BigDecimal("10000")); + + GameStateLoader gameStateLoader = new GameStateLoader( + player, exchange, stocksInFile, eventManager); + + MainMenuView mainMenuView = new MainMenuView(); + new MainMenuController(mainMenuView, eventManager); + + PlayGameView playGameView = new PlayGameView(); + SaveGameService saveGameService = new SaveGameService(); + PlayGameController playGameController = new PlayGameController(playGameView, eventManager, + saveGameService); + playGameController.refresh(); + + CreateGameView createGameView = new CreateGameView(); + CreateGameController createGameController = new CreateGameController(createGameView, eventManager, + saveGameService); + createGameController.setOnSaveCreated(playGameController::refresh); + + SettingsView settingsView = new SettingsView(); + new SettingsController(settingsView, eventManager); + + SummaryView summaryView = new SummaryView(); + SummaryController summaryController = new SummaryController(summaryView, eventManager, exchange, + player); + + TopBarView topBarView = new TopBarView(summaryView); + TopBarController topBarController = new TopBarController(topBarView, eventManager); + + TopBarView topBarView2 = new TopBarView(); + new TopBarController(topBarView2, eventManager); + + DashBoardView dashBoardView = new DashBoardView(); + DashBoardController dashBoardController = new DashBoardController(dashBoardView, eventManager, player, + exchange, stocksInFile); + + StatsView statsView = new StatsView(); + StatsController statsController = new StatsController(statsView, eventManager, player, exchange); + + MarketView marketView = new MarketView(); + MarketController marketController = new MarketController(marketView, eventManager, player, exchange, + stocksInFile); + + InGameView inGameView = new InGameView(topBarView, dashBoardView.getRootPane()); + InGameController inGameController = new InGameController(inGameView, eventManager); + + TransactionsView transactionsView = new TransactionsView(); + TransactionsController transactionsController = new TransactionsController( + transactionsView, eventManager, player.getTransactionArchive()); + + ClickerGame clickerGame = new ClickerGame(); + FindStockGame findStockGame = new FindStockGame( + stocksInFile.stream().map(Stock::getSymbol).toList()); + TimeInputsGame timeInputsGame = new TimeInputsGame(); + + GameEngineView gameEngineView = new GameEngineView(); + GameEngineController gameEngineController = new GameEngineController( + gameEngineView, eventManager, stocksInFile.getFirst()); + + MiniGamesView miniGamesView = new MiniGamesView(); + MiniGamesController miniGamesController = new MiniGamesController( + miniGamesView, eventManager, stocksInFile.getFirst(), gameEngineView, + gameEngineController, clickerGame, inGameView, findStockGame, timeInputsGame); + + // Adds a generic event subscriber to the event manager + // that handles STATE_RESET events. These events are + // triggered when a new save file is loaded. + // We define this implementation here, because + // this class has the highest level overview of the application. + eventManager.addSubscriber(new EventSubscriber() { + @Override + public void handleEvent(final EventData eventData) { + if (eventData.data() instanceof SaveGame) { + + if (createGameController.getExchange() != null + && createGameController.getPlayer() != null) { + gameStateLoader.setExchange(createGameController.getExchange()); + + exchange = createGameController.getExchange(); + player = createGameController.getPlayer(); + } else { + exchange = gameStateLoader.getExchange(); + player = gameStateLoader.getPlayer(); + } + + List dynamicStocks = exchange.getStocks(); + + // Updates the various UI components that + // depend on an exchange, player, or list of stocks. + findStockGame.updateStockPool( + dynamicStocks.stream().map(Stock::getSymbol).toList()); + summaryController.handleContextUpdate(Main.this.exchange, Main.this.player); + dashBoardController.handleStockPoolUpdate(dynamicStocks); + statsController.handleContextUpdate(Main.this.exchange, Main.this.player); + marketController.handleStockPoolUpdate(Main.this.exchange, Main.this.player, + dynamicStocks); + + if (!dynamicStocks.isEmpty()) { + miniGamesController.setActiveStock(dynamicStocks.getFirst()); + } + } + } + }, EventType.STATE_RESET); + + topBarController.setMarketIntegration( + inGameView::changeCenterView, dashBoardView.getRootPane(), marketView.getRootPane(), + statsView.getRootPane(), transactionsView.getRootPane(), + transactionsController::refresh, + miniGamesView.getRootPane()); + + InGameSettingsView inGameSettingsView = new InGameSettingsView(); + InGameSettingsController inGameSettingsController = new InGameSettingsController(inGameSettingsView, + eventManager, inGameView); + topBarController.setSettingsAction(inGameSettingsController::show); + + topBarController.setOnQuitToMainMenu(() -> { + System.out.println("[auto-save] Quit triggered, attempting snapshot..."); + SaveGame snapshot = gameStateLoader.snapshotActiveSave(); + if (snapshot == null) { + System.out.println("[auto-save] No active save - nothing to write."); + return; + } + try { + saveGameService.saveGame(snapshot); + System.out.println("[auto-save] Wrote save '" + snapshot.getName() + "' to disk."); + } catch (Exception e) { + System.err.println("[auto-save] Failed: " + e.getMessage()); + } + }); + + viewManager.addView(mainMenuView); + viewManager.addView(playGameView); + viewManager.addView(createGameView); + viewManager.addView(settingsView); + viewManager.addView(inGameView); + viewManager.setScene(mainMenuView); + + inGameController.addwidget(WidgetEnum.DASHBOARD, dashBoardView.getRootPane()); + inGameController.addwidget(WidgetEnum.MARKET, marketView.getRootPane()); + inGameController.addwidget(WidgetEnum.MINIGAMES_OVERVIEW, miniGamesView.getRootPane()); + inGameController.addwidget(WidgetEnum.MINIGAMES_ENGINE, gameEngineView.getRootPane()); + inGameController.addwidget(WidgetEnum.STATS, statsView.getRootPane()); + inGameController.addwidget(WidgetEnum.TRANSACTIONS, transactionsView.getRootPane()); + + stage.show(); } - } - }, EventType.STATE_RESET); - - topBarController.setMarketIntegration( - inGameView::changeCenterView, dashBoardView.getRootPane(), marketView.getRootPane(), - statsView.getRootPane(), transactionsView.getRootPane(), transactionsController::refresh, - miniGamesView.getRootPane() - ); - - InGameSettingsView inGameSettingsView = new InGameSettingsView(); - InGameSettingsController inGameSettingsController = - new InGameSettingsController(inGameSettingsView, eventManager, inGameView); - topBarController.setSettingsAction(inGameSettingsController::show); - - topBarController.setOnQuitToMainMenu(() -> { - System.out.println("[auto-save] Quit triggered, attempting snapshot..."); - SaveGame snapshot = gameStateLoader.snapshotActiveSave(); - if (snapshot == null) { - System.out.println("[auto-save] No active save - nothing to write."); - return; - } - try { - saveGameService.saveGame(snapshot); - System.out.println("[auto-save] Wrote save '" + snapshot.getName() + "' to disk."); - } catch (Exception e) { - System.err.println("[auto-save] Failed: " + e.getMessage()); - } - }); - - viewManager.addView(mainMenuView); - viewManager.addView(playGameView); - viewManager.addView(createGameView); - viewManager.addView(settingsView); - viewManager.addView(inGameView); - viewManager.setScene(mainMenuView); - - inGameController.addwidget(WidgetEnum.DASHBOARD, dashBoardView.getRootPane()); - inGameController.addwidget(WidgetEnum.MARKET, marketView.getRootPane()); - inGameController.addwidget(WidgetEnum.MINIGAMES_OVERVIEW, miniGamesView.getRootPane()); - inGameController.addwidget(WidgetEnum.MINIGAMES_ENGINE, gameEngineView.getRootPane()); - inGameController.addwidget(WidgetEnum.STATS, statsView.getRootPane()); - inGameController.addwidget(WidgetEnum.TRANSACTIONS, transactionsView.getRootPane()); - - stage.show(); - } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java index 6034df8..e2ebb5b 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java @@ -2,28 +2,38 @@ /** * Enum containing configuration values for the application. - * */ + */ public enum ConfigValues { /** * Standard viewport width. - * */ - VIEWPORT_WIDTH(600), + */ + VIEWPORT_WIDTH(1400), /** * Standard viewport height. - * */ - VIEWPORT_HEIGHT(600); + */ + VIEWPORT_HEIGHT(800), + + /** + * Minimum viewport width. The window cannot be resized smaller than this. + */ + MIN_VIEWPORT_WIDTH(1400), + + /** + * Minimum viewport height. The window cannot be resized smaller than this. + */ + MIN_VIEWPORT_HEIGHT(800); /** * Integer parameter of a config value. - * */ + */ private final int value; /** * Constructor. * * @param value the value to assign this configuration. - * */ + */ ConfigValues(final int value) { this.value = value; } @@ -32,8 +42,8 @@ public enum ConfigValues { * Getter method for value. * * @return value of the configuration. - * */ + */ public int getValue() { return value; } -} +} \ No newline at end of file From b98c3bb74021e77c200af8958a2a6c2d0879b0cc Mon Sep 17 00:00:00 2001 From: = Date: Tue, 26 May 2026 15:06:11 +0200 Subject: [PATCH 2/2] Fix: Tweak config values --- .../idi/idatt2003/g40/mappe/utils/ConfigValues.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java index e2ebb5b..504e90e 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java @@ -7,22 +7,22 @@ public enum ConfigValues { /** * Standard viewport width. */ - VIEWPORT_WIDTH(1400), + VIEWPORT_WIDTH(800), /** * Standard viewport height. */ - VIEWPORT_HEIGHT(800), + VIEWPORT_HEIGHT(700), /** * Minimum viewport width. The window cannot be resized smaller than this. */ - MIN_VIEWPORT_WIDTH(1400), + MIN_VIEWPORT_WIDTH(800), /** * Minimum viewport height. The window cannot be resized smaller than this. */ - MIN_VIEWPORT_HEIGHT(800); + MIN_VIEWPORT_HEIGHT(700); /** * Integer parameter of a config value. @@ -46,4 +46,4 @@ public enum ConfigValues { public int getValue() { return value; } -} \ No newline at end of file +}