From 7df335e99140085a7e6bca630d3dd8dc7cf927aa Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Tue, 1 Dec 2020 16:18:40 +0100 Subject: [PATCH] Bind playlist properties to pad view --- .../layout/desktop/pad/DesktopPadView.java | 12 ++----- .../desktop/pad/DesktopPadViewController.java | 27 ++++++++++------ .../layout/touch/pad/TouchPadView.java | 12 ++----- .../touch/pad/TouchPadViewController.java | 31 ++++++++++++------- .../playpad/pad/content/Playlistable.java | 6 +++- .../viewcontroller/IPadViewController.java | 2 -- .../pad/ContentPlayerMediaContainer.scala | 6 ---- .../content/pad/ContentPlayerPadContent.scala | 24 ++++++-------- .../content/pad/ContentPlayerPadPreview.scala | 2 +- 9 files changed, 56 insertions(+), 66 deletions(-) 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 427a3a67..5649427c 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 34f7d484..631b9873 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 b390fa08..e5c35e1a 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 25e198f8..8b2b590a 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 e615cf3e..ffb6d4ba 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 ae380a90..6c010518 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 74f74fae..3c298dcb 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 389edd18..7cad96f1 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 b3abf9d8..1b5b96dc 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 _ => } -- GitLab