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