From 62e2b71ece4768302de69ea32a1b885d56533de2 Mon Sep 17 00:00:00 2001 From: michiel301b Date: Wed, 15 Oct 2025 22:58:25 +0200 Subject: [PATCH 01/12] begin van audio display --- .../toop/app/view/displays/SongDisplay.java | 66 +++++++++++++++++++ .../org/toop/app/view/views/MainView.java | 10 ++- .../resources/assets/style/high-contrast.css | 29 ++++++++ app/src/main/resources/assets/style/light.css | 29 ++++++++ .../toop/framework/audio/MusicManager.java | 1 - 5 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/toop/app/view/displays/SongDisplay.java diff --git a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java new file mode 100644 index 0000000..071d775 --- /dev/null +++ b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java @@ -0,0 +1,66 @@ +package org.toop.app.view.displays; + +import javafx.application.Platform; +import javafx.scene.control.ProgressBar; +import javafx.scene.layout.VBox; +import org.toop.app.App; +import org.toop.app.view.View; +import org.toop.framework.audio.AudioEventListener; +import org.toop.framework.resource.ResourceManager; +import org.toop.framework.resource.resources.MusicAsset; +import org.toop.local.AppContext; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.text.Text; +import org.toop.framework.audio.MusicManager; + +import java.util.ArrayList; +import java.util.List; + +public class SongDisplay extends VBox { + + private final Text songTitle; + private final ProgressBar progressBar; + private final Text progressText; + private MusicManager manager; + + public SongDisplay() { + + setAlignment(Pos.CENTER); + getStyleClass().add("song-display"); + + songTitle = new Text("song playing"); + songTitle.getStyleClass().add("song-title"); + + progressBar = new ProgressBar(0); + progressBar.getStyleClass().add("progress-bar"); + + progressText = new Text("THIS IS AN EXAMPLE CUZ BAS DIDNT DECIDE TO MAKE EVENTS"); + progressText.getStyleClass().add("progress-text"); + + getChildren().addAll(songTitle, progressBar, progressText); + + setMusicManager(); + } + + public void updateTheSong(String title, double progress) { + songTitle.setText(title); + progressBar.setProgress(progress); + } + + public String getPlayingSong() { + return manager.getCurrentTrack().getName(); + } + + public void setMusicManager() { + List tracks = ResourceManager.getAllOfTypeAndRemoveWrapper(MusicAsset.class); + this.manager = new MusicManager<>(tracks); + + String song = getPlayingSong(); + Platform.runLater(() -> songTitle.setText(song)); + } +} + + + + diff --git a/app/src/main/java/org/toop/app/view/views/MainView.java b/app/src/main/java/org/toop/app/view/views/MainView.java index 93f9207..02c8085 100644 --- a/app/src/main/java/org/toop/app/view/views/MainView.java +++ b/app/src/main/java/org/toop/app/view/views/MainView.java @@ -4,7 +4,7 @@ import org.toop.app.App; import org.toop.app.view.View; import org.toop.app.view.ViewStack; import org.toop.local.AppContext; - +import org.toop.app.view.displays.SongDisplay; import javafx.geometry.Pos; import javafx.scene.control.Button; @@ -35,6 +35,14 @@ public final class MainView extends View { quitButton.setText(AppContext.getString("quit")); quitButton.setOnAction(_ -> { App.startQuit(); }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(vboxFill( localButton, diff --git a/app/src/main/resources/assets/style/high-contrast.css b/app/src/main/resources/assets/style/high-contrast.css index 244b203..bc90ddc 100644 --- a/app/src/main/resources/assets/style/high-contrast.css +++ b/app/src/main/resources/assets/style/high-contrast.css @@ -12,6 +12,35 @@ -fx-effect: dropshadow(gaussian, #1f6a22ff, 10, 0, 0, 3); } +.song-display { + -fx-background-color: rgba(30, 60, 30, 0.85); + -fx-background-radius: 10px; + -fx-padding: 8 12 8 12; + -fx-spacing: 6px; + -fx-alignment: center; + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 6, 0.5, 0, 2); + -fx-min-width: 220px; + -fx-max-width: 260px; +} + +.song-title { + -fx-font-size: 14px; + -fx-font-weight: bold; + -fx-text-fill: white; +} + +.progress-bar { + -fx-pref-width: 200px; + -fx-pref-height: 6px; + -fx-accent: #ff4d4d; + -fx-background-color: rgba(255, 255, 255, 0.15); + -fx-background-radius: 4px; +} + +.progress-text { + -fx-font-size: 11px; + -fx-text-fill: white; +} .button { -fx-background-color: linear-gradient(to bottom, #1b7a1b, #2da32d); -fx-background-radius: 8; diff --git a/app/src/main/resources/assets/style/light.css b/app/src/main/resources/assets/style/light.css index c959d0d..3b749e6 100644 --- a/app/src/main/resources/assets/style/light.css +++ b/app/src/main/resources/assets/style/light.css @@ -12,6 +12,35 @@ -fx-effect: dropshadow(gaussian, #a0c4b088, 6, 0, 0, 2); } +.song-display { + -fx-background-color: rgba(20, 20, 20, 0.75); + -fx-background-radius: 10px; + -fx-padding: 8 12 8 12; + -fx-spacing: 6px; + -fx-alignment: center; + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 6, 0.5, 0, 2); + -fx-min-width: 220px; + -fx-max-width: 260px; +} + +.song-title { + -fx-font-size: 14px; + -fx-font-weight: bold; + -fx-text-fill: white; +} + +.progress-bar { + -fx-pref-width: 200px; + -fx-pref-height: 6px; + -fx-accent: #4dd0e1; /* bright cyan progress color */ + -fx-background-color: rgba(255, 255, 255, 0.15); + -fx-background-radius: 4px; +} + +.progress-text { + -fx-font-size: 11px; + -fx-text-fill: #cccccc; +} .button { -fx-background-color: linear-gradient(to bottom, #7ac27a, #90d090); -fx-background-radius: 8; diff --git a/framework/src/main/java/org/toop/framework/audio/MusicManager.java b/framework/src/main/java/org/toop/framework/audio/MusicManager.java index ea20e8e..b99d44e 100644 --- a/framework/src/main/java/org/toop/framework/audio/MusicManager.java +++ b/framework/src/main/java/org/toop/framework/audio/MusicManager.java @@ -114,7 +114,6 @@ public class MusicManager implements org.toop.framework } }); } - @Override public void stop() { if (!playing) return; From 69bc55dc26b3bf830660427ac8822927e9589e3a Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:21:00 +0200 Subject: [PATCH 02/12] Polling music event, fires every 1 second --- .../toop/framework/audio/MusicManager.java | 24 ++++++++++++++++++- .../framework/audio/events/AudioEvents.java | 2 ++ .../resource/resources/MusicAsset.java | 17 +++++++++++++ .../resource/resources/SoundEffectAsset.java | 11 +++++++++ .../resource/types/AudioResource.java | 2 ++ 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/framework/src/main/java/org/toop/framework/audio/MusicManager.java b/framework/src/main/java/org/toop/framework/audio/MusicManager.java index b99d44e..4770930 100644 --- a/framework/src/main/java/org/toop/framework/audio/MusicManager.java +++ b/framework/src/main/java/org/toop/framework/audio/MusicManager.java @@ -2,12 +2,18 @@ package org.toop.framework.audio; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.dispatch.interfaces.Dispatcher; import org.toop.framework.dispatch.JavaFXDispatcher; import org.toop.annotations.TestsOnly; +import org.toop.framework.eventbus.EventFlow; +import org.toop.framework.eventbus.GlobalEventBus; import org.toop.framework.resource.types.AudioResource; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; public class MusicManager implements org.toop.framework.audio.interfaces.MusicManager { private static final Logger logger = LogManager.getLogger(MusicManager.class); @@ -93,19 +99,32 @@ public class MusicManager implements org.toop.framework current.play(); setTrackRunnable(current); - }); } private void setTrackRunnable(T track) { + + + ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); + + Runnable currentMusicTask = new Runnable() { + @Override + public void run() { + GlobalEventBus.post(new AudioEvents.PlayingMusic(track.getName(), track.currentPosition(), track.duration())); + scheduler.schedule(this, 1, TimeUnit.SECONDS); + } + }; + track.setOnEnd(() -> { playingIndex++; + scheduler.shutdown(); playCurrentTrack(); }); track.setOnError(() -> { logger.error("Error playing track: {}", track); backgroundMusic.remove(track); + scheduler.shutdown(); if (!backgroundMusic.isEmpty()) { playCurrentTrack(); @@ -113,7 +132,10 @@ public class MusicManager implements org.toop.framework playing = false; } }); + + scheduler.schedule(currentMusicTask, 0, TimeUnit.MILLISECONDS); } + @Override public void stop() { if (!playing) return; diff --git a/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java b/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java index 530b5be..3a4222b 100644 --- a/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java +++ b/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java @@ -18,6 +18,8 @@ public class AudioEvents extends EventsBase { /** Start background music. */ public record StartBackgroundMusic() implements GenericEvent {} + public record PlayingMusic(String name, long currentPosition, long duration) implements GenericEvent {} + /** Change volume, choose type with {@link VolumeControl}. */ public record ChangeVolume(double newVolume, VolumeControl controlType) implements GenericEvent {} diff --git a/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java index 31e580f..005a0d9 100644 --- a/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java +++ b/framework/src/main/java/org/toop/framework/resource/resources/MusicAsset.java @@ -82,4 +82,21 @@ public class MusicAsset extends BaseResource implements LoadableResource, AudioR public void stop() { getMediaPlayer().stop(); } + + @Override + public long duration() { + if (mediaPlayer != null) { + return (long) this.mediaPlayer.getTotalDuration().toSeconds(); // Why is this a double? TODO: Fix cast + } + return 0; + } + + @Override + public long currentPosition() { + if (mediaPlayer != null) { + return (long) this.mediaPlayer.getCurrentTime().toSeconds(); // Same here. TODO: Fix cast + } + return 0; + } + } diff --git a/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java index df1f637..8fae992 100644 --- a/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java +++ b/framework/src/main/java/org/toop/framework/resource/resources/SoundEffectAsset.java @@ -144,4 +144,15 @@ public class SoundEffectAsset extends BaseResource implements LoadableResource, if (this.clip.isRunning()) this.clip.stop(); } + @Override + public long duration() { + return 0; // TODO + } + + @Override + public long currentPosition() { + return 0; // TODO + } + + } diff --git a/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java b/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java index d5d4e89..d001aa8 100644 --- a/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java +++ b/framework/src/main/java/org/toop/framework/resource/types/AudioResource.java @@ -5,6 +5,8 @@ public interface AudioResource { void updateVolume(double volume); void play(); void stop(); + long duration(); + long currentPosition(); void setOnEnd(Runnable run); void setOnError(Runnable run); } From 977e9bb102d7e65a32340a4c4e8baf35ca499c75 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:24:21 +0200 Subject: [PATCH 03/12] Updated test. --- .../org/toop/framework/audio/MusicManagerTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java b/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java index 0cd0535..106c48e 100644 --- a/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java +++ b/framework/src/test/java/org/toop/framework/audio/MusicManagerTest.java @@ -49,6 +49,16 @@ class MockAudioResource extends BaseResource implements AudioResource { stopped = true; } + @Override + public long duration() { + return 0; + } + + @Override + public long currentPosition() { + return 0; + } + @Override public void setOnEnd(Runnable callback) { onEnd = callback; From 545e830b3c852bf2c83eda4948a9b4a3166f8826 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:54:17 +0200 Subject: [PATCH 04/12] Updated timings --- .../main/java/org/toop/framework/audio/MusicManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/org/toop/framework/audio/MusicManager.java b/framework/src/main/java/org/toop/framework/audio/MusicManager.java index 4770930..85033b9 100644 --- a/framework/src/main/java/org/toop/framework/audio/MusicManager.java +++ b/framework/src/main/java/org/toop/framework/audio/MusicManager.java @@ -116,15 +116,15 @@ public class MusicManager implements org.toop.framework }; track.setOnEnd(() -> { - playingIndex++; scheduler.shutdown(); + playingIndex++; playCurrentTrack(); }); track.setOnError(() -> { + scheduler.shutdown(); logger.error("Error playing track: {}", track); backgroundMusic.remove(track); - scheduler.shutdown(); if (!backgroundMusic.isEmpty()) { playCurrentTrack(); @@ -133,7 +133,7 @@ public class MusicManager implements org.toop.framework } }); - scheduler.schedule(currentMusicTask, 0, TimeUnit.MILLISECONDS); + scheduler.schedule(currentMusicTask, 1, TimeUnit.SECONDS); } @Override From f44c3932dc974335ac4ea0e284a36eb8e307d0bb Mon Sep 17 00:00:00 2001 From: michiel301b Date: Thu, 16 Oct 2025 00:45:29 +0200 Subject: [PATCH 05/12] Basis Audio Display toegevoegd + standaard CSS toegevoegd Kan nu zien hoe lang de song duurt, hoe lang ie al bezig is met draaien en de titel (-.mp3) --- .../toop/app/view/displays/SongDisplay.java | 72 ++++++++++++------- .../toop/app/view/views/ChallengeView.java | 9 +++ .../org/toop/app/view/views/CreditsView.java | 9 +++ .../org/toop/app/view/views/GameView.java | 9 +++ .../app/view/views/LocalMultiplayerView.java | 9 +++ .../org/toop/app/view/views/LocalView.java | 9 +++ .../org/toop/app/view/views/MainView.java | 1 - .../org/toop/app/view/views/OnlineView.java | 8 +++ .../org/toop/app/view/views/OptionsView.java | 9 +++ .../org/toop/app/view/views/ServerView.java | 9 +++ app/src/main/resources/assets/style/dark.css | 28 ++++++++ .../resources/assets/style/high-contrast.css | 9 ++- app/src/main/resources/assets/style/light.css | 13 ++-- .../framework/audio/events/AudioEvents.java | 1 + 14 files changed, 156 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java index 071d775..d1bb14d 100644 --- a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java +++ b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java @@ -3,64 +3,84 @@ package org.toop.app.view.displays; import javafx.application.Platform; import javafx.scene.control.ProgressBar; import javafx.scene.layout.VBox; -import org.toop.app.App; -import org.toop.app.view.View; -import org.toop.framework.audio.AudioEventListener; -import org.toop.framework.resource.ResourceManager; -import org.toop.framework.resource.resources.MusicAsset; -import org.toop.local.AppContext; +import javafx.scene.paint.Color; +import org.toop.framework.audio.events.AudioEvents; +import org.toop.framework.eventbus.EventFlow; import javafx.geometry.Pos; -import javafx.scene.control.Button; import javafx.scene.text.Text; -import org.toop.framework.audio.MusicManager; - -import java.util.ArrayList; -import java.util.List; public class SongDisplay extends VBox { private final Text songTitle; private final ProgressBar progressBar; private final Text progressText; - private MusicManager manager; public SongDisplay() { + new EventFlow() + .listen(this::updateTheSong); + + //TODO ADD NICER CSS setAlignment(Pos.CENTER); getStyleClass().add("song-display"); + + // TODO ADD GOOD SONG TITLES WITH ARTISTS DISPLAYED songTitle = new Text("song playing"); + songTitle.setFill(Color.WHITE); songTitle.getStyleClass().add("song-title"); progressBar = new ProgressBar(0); progressBar.getStyleClass().add("progress-bar"); - progressText = new Text("THIS IS AN EXAMPLE CUZ BAS DIDNT DECIDE TO MAKE EVENTS"); + progressText = new Text("0:00/0:00"); + progressText.setFill(Color.WHITE); progressText.getStyleClass().add("progress-text"); + //TODO ADD SKIP BUTTON + getChildren().addAll(songTitle, progressBar, progressText); - - setMusicManager(); } - public void updateTheSong(String title, double progress) { - songTitle.setText(title); - progressBar.setProgress(progress); + private void updateTheSong(AudioEvents.PlayingMusic event) { + Platform.runLater(() -> { + String text = event.name(); + text = text.substring(0, text.length() - 4); + songTitle.setText(text); + double currentPos = event.currentPosition(); + double duration = event.duration(); + if (currentPos / duration > 0.05) { + double progress = currentPos / duration; + progressBar.setProgress(progress); + } + else if (currentPos / duration < 0.05) { + progressBar.setProgress(0.05); + } + progressText.setText(getTimeString(event.currentPosition(), event.duration())); + }); } - public String getPlayingSong() { - return manager.getCurrentTrack().getName(); - } + private String getTimeString(long position, long duration) { + long positionMinutes = position / 60; + long durationMinutes = duration / 60; + long positionSeconds = position % 60; + long durationSeconds = duration % 60; + String positionSecondsStr = String.valueOf(positionSeconds); + String durationSecondsStr = String.valueOf(durationSeconds); - public void setMusicManager() { - List tracks = ResourceManager.getAllOfTypeAndRemoveWrapper(MusicAsset.class); - this.manager = new MusicManager<>(tracks); + if (positionSeconds < 10) { + positionSecondsStr = "0" + positionSeconds; + } + if (durationSeconds < 10) { + durationSecondsStr = "0" + durationSeconds; + } - String song = getPlayingSong(); - Platform.runLater(() -> songTitle.setText(song)); + String time = positionMinutes + ":" + positionSecondsStr + " / " + durationMinutes + ":" + durationSecondsStr; + return time; } } + diff --git a/app/src/main/java/org/toop/app/view/views/ChallengeView.java b/app/src/main/java/org/toop/app/view/views/ChallengeView.java index f5ee907..55b526f 100644 --- a/app/src/main/java/org/toop/app/view/views/ChallengeView.java +++ b/app/src/main/java/org/toop/app/view/views/ChallengeView.java @@ -4,6 +4,7 @@ import org.toop.app.GameInformation; import org.toop.app.Server; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -95,6 +96,14 @@ public final class ChallengeView extends View { nodes.add(vbox(computerDifficultyText, computerDifficultySlider)); } + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(hboxFill( vboxFill( diff --git a/app/src/main/java/org/toop/app/view/views/CreditsView.java b/app/src/main/java/org/toop/app/view/views/CreditsView.java index 84da377..3f02ef8 100644 --- a/app/src/main/java/org/toop/app/view/views/CreditsView.java +++ b/app/src/main/java/org/toop/app/view/views/CreditsView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.App; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.animation.KeyFrame; @@ -46,6 +47,14 @@ public final class CreditsView extends View { final Text openglHeader = header(); openglHeader.setText(AppContext.getString("opengl") + ": Omar"); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit("credits-fit", vboxFill("credits-container", "credits-container", vbox("credits-spacer-top", ""), diff --git a/app/src/main/java/org/toop/app/view/views/GameView.java b/app/src/main/java/org/toop/app/view/views/GameView.java index 3834159..0ea669b 100644 --- a/app/src/main/java/org/toop/app/view/views/GameView.java +++ b/app/src/main/java/org/toop/app/view/views/GameView.java @@ -2,6 +2,7 @@ package org.toop.app.view.views; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -85,6 +86,14 @@ public final class GameView extends View { forfeitButton = null; } + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + if (onMessage != null) { chatListView = new ListView(); diff --git a/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java b/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java index a4e72d9..88c9e84 100644 --- a/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java +++ b/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java @@ -5,6 +5,7 @@ import org.toop.app.game.ReversiGame; import org.toop.app.game.TicTacToeGame; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -48,6 +49,14 @@ public final class LocalMultiplayerView extends View { } }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(vboxFill( hbox( diff --git a/app/src/main/java/org/toop/app/view/views/LocalView.java b/app/src/main/java/org/toop/app/view/views/LocalView.java index 2089e5c..550bdb9 100644 --- a/app/src/main/java/org/toop/app/view/views/LocalView.java +++ b/app/src/main/java/org/toop/app/view/views/LocalView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.GameInformation; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -34,6 +35,14 @@ public final class LocalView extends View { backButton.setText(AppContext.getString("back")); backButton.setOnAction(_ -> { ViewStack.push(new MainView()); }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.BOTTOM_LEFT, vboxFill( backButton diff --git a/app/src/main/java/org/toop/app/view/views/MainView.java b/app/src/main/java/org/toop/app/view/views/MainView.java index 02c8085..10fa0fc 100644 --- a/app/src/main/java/org/toop/app/view/views/MainView.java +++ b/app/src/main/java/org/toop/app/view/views/MainView.java @@ -37,7 +37,6 @@ public final class MainView extends View { final SongDisplay songdisplay = new SongDisplay(); - add(Pos.BOTTOM_RIGHT, fit(vboxFill( songdisplay diff --git a/app/src/main/java/org/toop/app/view/views/OnlineView.java b/app/src/main/java/org/toop/app/view/views/OnlineView.java index 2c5b783..3d7750d 100644 --- a/app/src/main/java/org/toop/app/view/views/OnlineView.java +++ b/app/src/main/java/org/toop/app/view/views/OnlineView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.Server; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -44,6 +45,13 @@ public class OnlineView extends View { new Server(serverIPInput.getText(), serverPortInput.getText(), playerNameInput.getText()); }); + final SongDisplay songdisplay = new SongDisplay(); + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(vboxFill( serverInformationHeader, diff --git a/app/src/main/java/org/toop/app/view/views/OptionsView.java b/app/src/main/java/org/toop/app/view/views/OptionsView.java index 3b8eaaa..d4af353 100644 --- a/app/src/main/java/org/toop/app/view/views/OptionsView.java +++ b/app/src/main/java/org/toop/app/view/views/OptionsView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.App; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.framework.audio.VolumeControl; import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.eventbus.EventFlow; @@ -99,6 +100,14 @@ public final class OptionsView extends View { backButton.setText(AppContext.getString("back")); backButton.setOnAction(_ -> { ViewStack.pop(); }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.BOTTOM_LEFT, vboxFill( backButton diff --git a/app/src/main/java/org/toop/app/view/views/ServerView.java b/app/src/main/java/org/toop/app/view/views/ServerView.java index 36614eb..c819c14 100644 --- a/app/src/main/java/org/toop/app/view/views/ServerView.java +++ b/app/src/main/java/org/toop/app/view/views/ServerView.java @@ -2,6 +2,7 @@ package org.toop.app.view.views; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.application.Platform; @@ -53,6 +54,14 @@ public final class ServerView extends View { listView = new ListView