Skip to content
Snippets Groups Projects
Commit 31450f2c authored by Tobias Ullerich's avatar Tobias Ullerich
Browse files

Show current playing playlist item in pad

parent 49005ff9
No related branches found
No related tags found
No related merge requests found
......@@ -11,7 +11,7 @@ import de.tobias.playpad.plugin.content.ContentPluginMain
import de.tobias.playpad.plugin.content.settings.PlayerInstance
import de.tobias.playpad.volume.VolumeManager
import javafx.application.Platform
import javafx.beans.property.{ReadOnlyObjectProperty, SimpleObjectProperty}
import javafx.beans.property._
import javafx.scene.media.{Media, MediaPlayer}
import javafx.util.Duration
......@@ -24,13 +24,12 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
def play(): Unit = {
_durationProperty.bind(mediaPlayer.totalDurationProperty())
_positionProperty.bind(mediaPlayer.currentTimeProperty())
mediaPlayer.seek(Duration.ZERO)
ContentPluginMain.playerViewController.showMediaPlayer(getPad.getPadIndex, mediaPlayer, getSelectedZones)
mediaPlayer.seek(Duration.ZERO)
mediaPlayer.play()
currentRunningIndex = mediaPlayers.indexOf(this)
currentRunningIndexProperty.set(mediaPlayers.indexOf(this))
val controller = getPad.getController
if (controller != null) {
......@@ -49,9 +48,11 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
def next(): Unit = {
stop()
currentRunningIndex = mediaPlayers.indexOf(this)
if (currentRunningIndex + 1 < mediaPlayers.length) {
mediaPlayers(currentRunningIndex + 1).play()
val index = mediaPlayers.indexOf(this)
currentRunningIndexProperty.set(index)
if (index + 1 < mediaPlayers.length) {
mediaPlayers(index + 1).play()
} else if (getPad.getPadSettings.isLoop) {
mediaPlayers.head.play()
} else {
......@@ -73,7 +74,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
}
private var mediaPlayers: ListBuffer[MediaPlayerContainer] = ListBuffer.empty
private var currentRunningIndex: Int = -1
private val currentRunningIndexProperty: IntegerProperty = new SimpleIntegerProperty(-1)
private val _durationProperty = new SimpleObjectProperty[Duration]
private val _positionProperty = new SimpleObjectProperty[Duration]
......@@ -83,11 +84,13 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
override def getType: String = `type`
override def currentPlayingMediaIndex(): Int = currentRunningIndex
override def currentPlayingMediaIndex: Int = currentRunningIndexProperty.get()
def currentPlayingMediaIndexProperty(): ReadOnlyIntegerProperty = currentRunningIndexProperty
override def play(): Unit = {
if (isPause) {
mediaPlayers(currentRunningIndex).resume()
mediaPlayers(currentPlayingMediaIndex).resume()
} else {
ContentPluginMain.playerViewController.addActivePadToList(getPad.getPadIndex)
......@@ -100,17 +103,17 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
override def pause(): Unit = {
isPause = true
mediaPlayers(currentRunningIndex).pause()
mediaPlayers(currentPlayingMediaIndex).pause()
}
override def next(): Unit = {
mediaPlayers(currentRunningIndex).next()
mediaPlayers(currentPlayingMediaIndex).next()
}
override def stop(): Boolean = {
isPause = false
mediaPlayers(currentRunningIndex).stop()
currentRunningIndex = -1
mediaPlayers(currentPlayingMediaIndex).stop()
currentRunningIndexProperty.set(-1)
ContentPluginMain.playerViewController.removeActivePadFromList(getPad.getPadIndex)
......@@ -132,7 +135,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
showingLastFrame = false
if (getPad.isEof) {
mediaPlayers(currentRunningIndex).next()
mediaPlayers(currentPlayingMediaIndex).next()
return
}
......
......@@ -3,7 +3,6 @@ package de.tobias.playpad.plugin.content.pad
import de.thecodelabs.utils.ui.icon.{FontIcon, MaterialDesignIcon}
import de.tobias.playpad.pad.Pad
import de.tobias.playpad.pad.content.{PadContent, PadContentFactory}
import de.tobias.playpad.pad.preview.PadTextPreview
import de.tobias.playpad.pad.view.IPadContentView
import de.tobias.playpad.viewcontroller.PadSettingsTabViewController
import javafx.scene.Node
......@@ -13,7 +12,7 @@ class ContentPlayerPadContentFactory(val `type`: String) extends PadContentFacto
override def newInstance(pad: Pad): PadContent = new ContentPlayerPadContent(pad, getType)
override def getPadContentPreview(pad: Pad, parentNode: Pane): IPadContentView = new PadTextPreview(pad, parentNode)
override def getPadContentPreview(pad: Pad, parentNode: Pane): IPadContentView = new ContentPlayerPadPreview(pad, parentNode)
override def getSettingsViewController(pad: Pad): PadSettingsTabViewController = new ContentPlayerPadContentSettingsViewController(pad)
......
package de.tobias.playpad.plugin.content.pad
import de.tobias.playpad.pad.Pad
import de.tobias.playpad.pad.view.IPadContentView
import javafx.beans.binding.Bindings
import javafx.collections.ListChangeListener
import javafx.geometry.{Insets, Pos}
import javafx.scene.Node
import javafx.scene.control.Label
import javafx.scene.layout.{Pane, Priority, VBox}
import javafx.scene.text.TextAlignment
class ContentPlayerPadPreview(pad: Pad, parent: Pane) extends VBox with IPadContentView {
val nameLabel: Label = new Label()
val subTitleLabel: Label = new Label()
setupLabel(nameLabel)
setupLabel(subTitleLabel)
getChildren.addAll(nameLabel, subTitleLabel)
setSpacing(3)
setPadding(new Insets(7))
getStyleClass.addListener(new ListChangeListener[String] {
override def onChanged(c: ListChangeListener.Change[_ <: String]): Unit = {
while (c.next()) {
if (c.wasRemoved()) {
nameLabel.getStyleClass.removeAll(c.getRemoved)
subTitleLabel.getStyleClass.removeAll(c.getRemoved)
}
if (c.wasAdded()) {
nameLabel.getStyleClass.addAll(c.getAddedSubList)
subTitleLabel.getStyleClass.addAll(c.getAddedSubList)
}
}
}
})
nameLabel.textProperty.bind(pad.nameProperty)
pad.getContent match {
case content: ContentPlayerPadContent =>
subTitleLabel.textProperty().bind(Bindings.createStringBinding(() => {
if (content.currentPlayingMediaIndex < 0) {
""
} else {
pad.getPaths.get(content.currentPlayingMediaIndex).getFileName
}
}, content.currentPlayingMediaIndexProperty()))
case _ =>
}
private def setupLabel(label: Label): Unit = {
label.setWrapText(true)
label.setAlignment(Pos.CENTER)
label.setTextAlignment(TextAlignment.CENTER)
label.prefWidthProperty.bind(parent.widthProperty)
label.setMaxHeight(Double.MaxValue)
VBox.setVgrow(label, Priority.ALWAYS)
}
override def getNode: Node = this
override def deInit(): Unit = {
nameLabel.textProperty().unbind()
subTitleLabel.textProperty().unbind()
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment