diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java index 427a3a678265c1423d55deb0730d72740bdd1424..5649427cc95ccc565a1754c26337e5f9affbf37e 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java @@ -331,16 +331,8 @@ public class DesktopPadView implements IPadView { setContentView(null); } - void clearPlaylistLabel() { - playlistLabel.setText(""); - } - - void setPlaylistIndex(int current, int count) { - if (current < 0) { - playlistLabel.setText("- / " + count); - } else { - playlistLabel.setText((current + 1) + " / " + count); - } + Label getPlaylistLabel() { + return playlistLabel; } @Override diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java index 34f7d484a23ad7b15eddbafddd9a61ae36bfa6bf..631b98730cf0002aee6a39c6b87d708bc06f6d8c 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java @@ -21,6 +21,7 @@ import de.tobias.playpad.settings.GlobalSettings; import de.tobias.playpad.view.FileDragOptionView; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.option.pad.PadSettingsViewController; +import javafx.beans.binding.Bindings; import javafx.beans.value.ChangeListener; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -85,7 +86,19 @@ public class DesktopPadViewController implements IPadViewController, EventHandle padView.loopLabelVisibleProperty().bind(pad.getPadSettings().loopProperty()); padView.setTriggerLabelActive(pad.getPadSettings().hasTriggerItems()); - updatePlaylistLabel(); + if (pad.getContent() instanceof Playlistable) { + final Playlistable content = (Playlistable) pad.getContent(); + padView.getPlaylistLabel().textProperty().bind(Bindings.createStringBinding(() -> { + final int currentPlayingMediaIndex = content.getCurrentPlayingMediaIndex(); + final int totalCount = pad.getPaths().size(); + + if (currentPlayingMediaIndex < 0) { + return "- / " + totalCount; + } else { + return (currentPlayingMediaIndex + 1) + " / " + totalCount; + } + }, content.currentPlayingMediaIndexProperty(), pad.getPaths())); + } // Update Listener padContentListener.setPad(pad); @@ -118,9 +131,11 @@ public class DesktopPadViewController implements IPadViewController, EventHandle padView.clearPreviewContentView(); padView.clearTimeLabel(); padView.setTriggerLabelActive(false); - padView.clearPlaylistLabel(); padView.loopLabelVisibleProperty().unbind(); + padView.getPlaylistLabel().textProperty().unbind(); + padView.getPlaylistLabel().setText(""); + // Remove Bindings & Listener pad.contentProperty().removeListener(padContentListener); pad.statusProperty().removeListener(padStatusListener); @@ -348,14 +363,6 @@ public class DesktopPadViewController implements IPadViewController, EventHandle } } - public void updatePlaylistLabel() { - if (pad.getContent() instanceof Playlistable) { - padView.setPlaylistIndex(((Playlistable) pad.getContent()).currentPlayingMediaIndex(), pad.getPaths().size()); - } else { - padView.clearPlaylistLabel(); - } - } - @Override public IPadPositionListener getPadPositionListener() { return padPositionListener; diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java index b390fa0876fe36e39cbbb05236b0799586ad666b..e5c35e1a609bbbcd8f170ef81bf421851bb1c790 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadView.java @@ -260,16 +260,8 @@ public class TouchPadView implements IPadView { setContentView(null); } - void clearPlaylistLabel() { - playlistLabel.setText(""); - } - - void setPlaylistIndex(int current, int count) { - if (current < 0) { - playlistLabel.setText("- / " + count); - } else { - playlistLabel.setText((current + 1) + " / " + count); - } + Label getPlaylistLabel() { + return playlistLabel; } @Override diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java index 25e198f8a982cdb5e6001270384e70e7dbad7f16..8b2b590a9ec12866261547f2c0c442a0057607f6 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/touch/pad/TouchPadViewController.java @@ -11,6 +11,7 @@ import de.tobias.playpad.pad.view.IPadView; import de.tobias.playpad.pad.viewcontroller.IPadViewController; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.profile.ProfileSettings; +import javafx.beans.binding.Bindings; import javafx.beans.value.ChangeListener; import javafx.event.Event; import javafx.event.EventHandler; @@ -71,11 +72,26 @@ public class TouchPadViewController implements IPadViewController, EventHandler< padView.loopLabelVisibleProperty().bind(pad.getPadSettings().loopProperty()); padView.setTriggerLabelActive(pad.getPadSettings().hasTriggerItems()); + if (pad.getContent() instanceof Playlistable) { + final Playlistable content = (Playlistable) pad.getContent(); + padView.getPlaylistLabel().textProperty().bind(Bindings.createStringBinding(() -> { + final int currentPlayingMediaIndex = content.getCurrentPlayingMediaIndex(); + final int totalCount = pad.getPaths().size(); + + if (currentPlayingMediaIndex < 0) { + return "- / " + totalCount; + } else { + return (currentPlayingMediaIndex + 1) + " / " + totalCount; + } + }, content.currentPlayingMediaIndexProperty(), pad.getPaths())); + } + + // Update Listener padContentListener.setPad(pad); padPositionListener.setPad(pad); - // Pad Content Chnage + // Pad Content Change pad.contentProperty().addListener(padContentListener); // Pad Status Change pad.statusProperty().addListener(padStatusListener); @@ -98,7 +114,9 @@ public class TouchPadViewController implements IPadViewController, EventHandler< padView.clearIndex(); padView.clearPreviewContent(); padView.clearTime(); - padView.clearPlaylistLabel(); + + padView.getPlaylistLabel().textProperty().unbind(); + padView.getPlaylistLabel().setText(""); padView.setTriggerLabelActive(false); @@ -211,15 +229,6 @@ public class TouchPadViewController implements IPadViewController, EventHandler< // Not needed in touch mode } - @Override - public void updatePlaylistLabel() { - if (pad.getContent() instanceof Playlistable) { - padView.setPlaylistIndex(((Playlistable) pad.getContent()).currentPlayingMediaIndex(), pad.getPaths().size()); - } else { - padView.clearPlaylistLabel(); - } - } - @Override public IPadPositionListener getPadPositionListener() { return padPositionListener; diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java index e615cf3e611624c68d0aaa98f7b489426966b8db..ffb6d4bac7b00ef75514650396fb8fca8bc9447c 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java @@ -1,7 +1,11 @@ package de.tobias.playpad.pad.content; +import javafx.beans.property.IntegerProperty; + public interface Playlistable { - int currentPlayingMediaIndex(); + int getCurrentPlayingMediaIndex(); + + IntegerProperty currentPlayingMediaIndexProperty(); void next(); } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java index ae380a9031edee86ce8aba32173f91837f290dc9..6c010518809856910286625e81179040dfcb5c13 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java @@ -44,8 +44,6 @@ public interface IPadViewController { void updateButtonDisable(); - void updatePlaylistLabel(); - IPadPositionListener getPadPositionListener(); ChangeListener<Duration> getPadDurationListener(); diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala index 74f74faeaae3aeebd6aa042d8f79bec473472042..3c298dcbfb2fcf167ef3d682cf03bb71c3d6c9da 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala @@ -17,13 +17,7 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, val path mediaPlayer.play() content.getPad.setEof(false) - content.currentPlayingMediaIndexProperty().set(content.getMediaPlayers.indexOf(this)) - - val controller = content.getPad.getController - if (controller != null) { - controller.updatePlaylistLabel() - } } def resume(): Unit = { diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala index 389edd1821acd6119f34f96c4dab1c0de247e539..7cad96f1626dc75b2fc8a3d2e562edd5fb798c67 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala @@ -35,17 +35,17 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte private var isPause: Boolean = false private val fadeController = new LinearFadeController(value => { - if (currentPlayingMediaIndex >= 0) { + if (getCurrentPlayingMediaIndex >= 0) { ContentPluginMain.playerViewController - .setFadeValue(mediaPlayers(currentPlayingMediaIndex).mediaPlayer, getSelectedZones, value) + .setFadeValue(mediaPlayers(getCurrentPlayingMediaIndex).mediaPlayer, getSelectedZones, value) } }) override def getType: String = `type` - override def currentPlayingMediaIndex: Int = currentRunningIndexProperty.get() + override def getCurrentPlayingMediaIndex: Int = currentRunningIndexProperty.get() - def currentPlayingMediaIndexProperty(): IntegerProperty = currentRunningIndexProperty + override def currentPlayingMediaIndexProperty(): IntegerProperty = currentRunningIndexProperty def getMediaPlayers: ObservableList[ContentPlayerMediaContainer] = mediaPlayers @@ -55,7 +55,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte override def play(): Unit = { if (isPause) { - mediaPlayers(currentPlayingMediaIndex).resume() + mediaPlayers(getCurrentPlayingMediaIndex).resume() } else { ContentPluginMain.playerViewController.addActivePadToList(getPad.getPadIndex, getSelectedZones) @@ -68,25 +68,19 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte override def pause(): Unit = { isPause = true - mediaPlayers(currentPlayingMediaIndex).pause() + mediaPlayers(getCurrentPlayingMediaIndex).pause() } override def next(): Unit = { - mediaPlayers(currentPlayingMediaIndex).next() + mediaPlayers(getCurrentPlayingMediaIndex).next() } override def stop(): Boolean = { isPause = false - mediaPlayers(currentPlayingMediaIndex).stop() + mediaPlayers(getCurrentPlayingMediaIndex).stop() currentRunningIndexProperty.set(-1) ContentPluginMain.playerViewController.removeActivePadFromList(getPad.getPadIndex, getSelectedZones) - - val controller = getPad.getController - if (controller != null) { - controller.updatePlaylistLabel() - } - true } @@ -107,7 +101,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte showingLastFrame = false if (getPad.isEof) { - mediaPlayers(currentPlayingMediaIndex).next() + mediaPlayers(getCurrentPlayingMediaIndex).next() return } } diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadPreview.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadPreview.scala index b3abf9d81ca2385f5c27bc762f5e40d85253d9c4..1b5b96dcfcc9293bda8b7bde021d845db62937de 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadPreview.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadPreview.scala @@ -43,7 +43,7 @@ class ContentPlayerPadPreview(pad: Pad, parent: Pane) extends VBox with IPadCont pad.getContent match { case content: ContentPlayerPadContent => subTitleLabel.textProperty().bind(Bindings.createStringBinding(() => { - if (content.currentPlayingMediaIndex < 0) "" else PathUtils.getFilenameWithoutExtension(pad.getPaths.get(content.currentPlayingMediaIndex).getPath.getFileName) + if (content.getCurrentPlayingMediaIndex < 0) "" else PathUtils.getFilenameWithoutExtension(pad.getPaths.get(content.getCurrentPlayingMediaIndex).getPath.getFileName) }, content.currentPlayingMediaIndexProperty())) case _ => }