From 69b5a7de71a5da5e6912ad61592d953cf2e0011d Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Sat, 14 Jan 2017 23:24:58 +0100 Subject: [PATCH] Make Volume Singelton, Code improvments, fixed live counter bug --- .../src/de/tobias/playpad/PlayPadImpl.java | 6 ++-- .../desktop/pad/DesktopPadDragListener.java | 8 ++--- .../desktop/pad/DesktopPadViewController.java | 2 +- .../playpad/pad/content/AudioContent.java | 6 ++-- .../src/de/tobias/playpad/pad/Pad.java | 31 +++++----------- .../tobias/playpad/pad/PadStatusListener.java | 12 ++++--- .../de/tobias/playpad/project/Project.java | 35 +++++-------------- .../tobias/playpad/volume/VolumeManager.java | 12 ++++++- .../mediaplugin/video/VideoContent.java | 3 +- 9 files changed, 47 insertions(+), 68 deletions(-) diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java index 0e787f8e..fa918c27 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java @@ -37,6 +37,7 @@ import de.tobias.playpad.viewcontroller.main.MainViewController; import de.tobias.playpad.viewcontroller.option.IProfileSettingsViewController; import de.tobias.playpad.volume.GlobalVolume; import de.tobias.playpad.volume.PadVolume; +import de.tobias.playpad.volume.VolumeManager; import de.tobias.updater.client.Updatable; import de.tobias.updater.client.UpdateRegistery; import de.tobias.utils.application.App; @@ -278,8 +279,9 @@ public class PlayPadImpl implements PlayPad { } // Volume Management - Pad.getVolumeManager().addFilter(new GlobalVolume()); - Pad.getVolumeManager().addFilter(new PadVolume()); + VolumeManager volumeManager = VolumeManager.getInstance(); + volumeManager.addFilter(new GlobalVolume()); + volumeManager.addFilter(new PadVolume()); // Mapper BaseMapperOverviewViewController.setInstance(new MapperOverviewViewController()); diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java index 4d366155..254371b6 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java @@ -57,13 +57,13 @@ public class DesktopPadDragListener implements EventHandler<DragEvent> { } public void addListener() { - this.padView.setOnDragOver(event -> dragOver(event)); + this.padView.setOnDragOver(this::dragOver); this.padView.setOnDragExited(event -> dragExited()); - this.padView.setOnDragDropped(event -> dragDropped(event)); - this.padView.setOnDragDetected(event -> dragDetacted(event)); + this.padView.setOnDragDropped(this::dragDropped); + this.padView.setOnDragDetected(this::dragDetacted); } - public void removeListener() { + void removeListener() { this.padView.setOnDragOver(null); this.padView.setOnDragExited(null); this.padView.setOnDragDropped(null); diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java index 2bc58a61..c7b506c3 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java @@ -57,7 +57,7 @@ public class DesktopPadViewController implements IPadViewController, EventHandle private static DesktopMainLayoutFactory connect; - public DesktopPadViewController(DesktopPadView padView, DesktopMainLayoutFactory connect) { + DesktopPadViewController(DesktopPadView padView, DesktopMainLayoutFactory connect) { this.padView = padView; if (DesktopPadViewController.connect != connect) // Set once diff --git a/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java b/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java index da672b21..61b76027 100644 --- a/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java +++ b/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java @@ -73,7 +73,7 @@ public class AudioContent extends PadContent implements Pauseable, Durationable, @Override public void updateVolume() { - double volume = Pad.getVolumeManager().computeVolume(getPad()); + double volume = VolumeManager.getInstance().computeVolume(getPad()); audioHandler.setVolume(volume); } @@ -129,9 +129,7 @@ public class AudioContent extends PadContent implements Pauseable, Durationable, @Override public void onFadeLevelChange(double level) { Pad pad = getPad(); - VolumeManager manager = Pad.getVolumeManager(); - - audioHandler.setVolume(level * manager.computeVolume(pad)); + audioHandler.setVolume(level * VolumeManager.getInstance().computeVolume(pad)); } @Override diff --git a/PlayWallCore/src/de/tobias/playpad/pad/Pad.java b/PlayWallCore/src/de/tobias/playpad/pad/Pad.java index a7e340fc..116fea6b 100644 --- a/PlayWallCore/src/de/tobias/playpad/pad/Pad.java +++ b/PlayWallCore/src/de/tobias/playpad/pad/Pad.java @@ -1,8 +1,5 @@ package de.tobias.playpad.pad; -import java.nio.file.Path; -import java.util.UUID; - import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.play.Pauseable; import de.tobias.playpad.pad.listener.trigger.PadTriggerContentListener; @@ -12,22 +9,15 @@ import de.tobias.playpad.pad.viewcontroller.IPadViewController; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.page.PadIndex; import de.tobias.playpad.registry.NoSuchComponentException; -import de.tobias.playpad.volume.VolumeManager; -import javafx.beans.property.IntegerProperty; -import javafx.beans.property.ObjectProperty; -import javafx.beans.property.ReadOnlyIntegerProperty; -import javafx.beans.property.SimpleIntegerProperty; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; +import javafx.beans.property.*; -public class Pad implements Cloneable { - - private static final VolumeManager volumeManager; +import java.nio.file.Path; +import java.util.UUID; - static { - volumeManager = new VolumeManager(); - } +/** + * Container for Media (PadContent). It represents a slot on a page. + */ +public class Pad implements Cloneable { // Verwaltung private UUID uuid; @@ -177,7 +167,7 @@ public class Pad implements Cloneable { return; } } - // Pause nur wenn Pause möglich + // Only set pause if pad supports pause if (status == PadStatus.PAUSE && !(getContent() instanceof Pauseable)) { return; } @@ -293,11 +283,6 @@ public class Pad implements Cloneable { return (indexProperty.get() + 1) + " - " + nameProperty.get(); } - // Volume Manager - public static VolumeManager getVolumeManager() { - return volumeManager; - } - // Clone @Override public Pad clone() throws CloneNotSupportedException { diff --git a/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java b/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java index f0d64105..2e924c49 100644 --- a/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java +++ b/PlayWallCore/src/de/tobias/playpad/pad/PadStatusListener.java @@ -18,7 +18,7 @@ public class PadStatusListener implements ChangeListener<PadStatus> { // Utils für Single Pad Playing private static Pad currentPlayingPad; // Nur wenn ProfileSettings.isMultiplePlayer == false - public PadStatusListener(Pad pad) { + PadStatusListener(Pad pad) { this.pad = pad; } @@ -30,7 +30,8 @@ public class PadStatusListener implements ChangeListener<PadStatus> { if (newValue == PadStatus.PLAY) { if (pad.getContent() != null) { PlayPadPlugin.getImplementation().getPadListener().forEach(listener -> listener.onPlay(pad)); - pad.getProject().increaseActivePlayers(); + + pad.getProject().updateActivePlayerProperty(); // bei Single Pad Playing wird das alte Pad beendet. if (!profileSettings.isMultiplePlayer()) { @@ -65,7 +66,7 @@ public class PadStatusListener implements ChangeListener<PadStatus> { } else if (newValue == PadStatus.STOP) { if (pad.getContent() != null) { PlayPadPlugin.getImplementation().getPadListener().forEach(listener -> listener.onStop(pad)); - pad.getProject().dereaseActivePlayers(); + pad.getProject().updateActivePlayerProperty(); if (pad.getContent() instanceof Fadeable && !pad.isEof() && padSettings.getFade().isFadeOutStop()) { // Fade nur wenn Pad // nicht am ende ist @@ -73,11 +74,14 @@ public class PadStatusListener implements ChangeListener<PadStatus> { { pad.getContent().stop(); pad.setStatus(PadStatus.READY); + pad.getProject().updateActivePlayerProperty(); }); } else { boolean shouldBeReady = pad.getContent().stop(); - if (shouldBeReady) + if (shouldBeReady) { pad.setStatus(PadStatus.READY); + pad.getProject().updateActivePlayerProperty(); + } } } } diff --git a/PlayWallCore/src/de/tobias/playpad/project/Project.java b/PlayWallCore/src/de/tobias/playpad/project/Project.java index 100a296d..8fb4da8c 100644 --- a/PlayWallCore/src/de/tobias/playpad/project/Project.java +++ b/PlayWallCore/src/de/tobias/playpad/project/Project.java @@ -56,20 +56,20 @@ public class Project { private final ProjectReference projectReference; private ProjectSettings settings; + private IntegerProperty activePlayerProperty; /** * Liste mit den aktuellen Laufzeitfehlern. */ private transient ObservableList<PadException> exceptions; - private transient IntegerProperty activePlayers; public Project(ProjectReference ref) { this.projectReference = ref; this.pages = new ArrayList<>(); this.settings = new ProjectSettings(); + this.activePlayerProperty = new SimpleIntegerProperty(); this.exceptions = FXCollections.observableArrayList(); - this.activePlayers = new SimpleIntegerProperty(); } public ProjectSettings getSettings() { @@ -80,14 +80,6 @@ public class Project { return projectReference; } - public long getPlayedPlayers() { - return getPads().stream().filter(p -> p.getStatus() == PadStatus.PLAY || p.getStatus() == PadStatus.PAUSE).count(); - } - - public boolean hasPlayedPlayers() { - return getPlayedPlayers() != 0; - } - public Pad getPad(int x, int y, int page) { return getPage(page).getPad(x, y); } @@ -222,24 +214,19 @@ public class Project { } public int getActivePlayers() { - return activePlayers.get(); + return (int) getPads().stream().filter(p -> p.getStatus() == PadStatus.PLAY || p.getStatus() == PadStatus.PAUSE).count(); } public boolean hasActivePlayers() { return getActivePlayers() > 0; } - public void increaseActivePlayers() { - activePlayers.set(getActivePlayers() + 1); + public IntegerProperty activePlayerProperty() { + return activePlayerProperty; } - public void dereaseActivePlayers() { - if (activePlayers.greaterThan(0).get()) - activePlayers.set(getActivePlayers() - 1); - } - - public ReadOnlyIntegerProperty activePlayerProperty() { - return activePlayers; + public void updateActivePlayerProperty() { + activePlayerProperty.set(getActivePlayers()); } // Exceptions @@ -257,13 +244,7 @@ public class Project { Platform.runLater(() -> removeExceptions(pad)); return; } - Iterator<PadException> i = exceptions.iterator(); - while (i.hasNext()) { - PadException exception = i.next(); - if (exception.getPad().equals(pad)) { - i.remove(); - } - } + exceptions.removeIf(exception -> exception.getPad().equals(pad)); } public void removeException(PadException exception) { diff --git a/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java b/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java index 8a809d40..5e3ef1ea 100644 --- a/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java +++ b/PlayWallCore/src/de/tobias/playpad/volume/VolumeManager.java @@ -7,9 +7,19 @@ import de.tobias.playpad.pad.Pad; public class VolumeManager { + private static final VolumeManager instance; + + static { + instance = new VolumeManager(); + } + + public static VolumeManager getInstance() { + return instance; + } + private List<VolumeFilter> filters; - public VolumeManager() { + private VolumeManager() { this.filters = new ArrayList<>(); } diff --git a/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java b/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java index d975de94..589aa599 100644 --- a/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java +++ b/PluginMedia/src/de/tobias/playpad/mediaplugin/video/VideoContent.java @@ -70,8 +70,7 @@ public class VideoContent extends PadContent implements Pauseable, Durationable @Override public void updateVolume() { if (player != null) { - VolumeManager manager = Pad.getVolumeManager(); - double volume = manager.computeVolume(getPad()); + double volume = VolumeManager.getInstance().computeVolume(getPad()); player.setVolume(volume); } } -- GitLab