diff --git a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java index d7ebadfc7f1e14ae7e77ffa5cad5ae4d618f71e5..ffd70e7b8b949a039aeb21718fdd335de4193f16 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java +++ b/PlayWall/src/main/java/de/tobias/playpad/design/ModernDesignAnimator.java @@ -1,7 +1,7 @@ package de.tobias.playpad.design; import de.tobias.playpad.pad.view.IPadView; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.util.FadeableColor; import de.tobias.playpad.view.PseudoClasses; import javafx.animation.KeyFrame; @@ -23,7 +23,7 @@ public class ModernDesignAnimator { private static HashMap<Integer, Timeline> timelines = new HashMap<>(); - public static void animateFade(IPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) { + public static void animateFade(AbstractPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) { ObjectProperty<FadeableColor> backgroundColor = new SimpleObjectProperty<>(); Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), new KeyValue(backgroundColor, startColor)), @@ -32,7 +32,7 @@ public class ModernDesignAnimator { animate(padViewController, timeline, backgroundColor); } - public static void animateWarn(IPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) { + public static void animateWarn(AbstractPadViewController padViewController, FadeableColor startColor, FadeableColor endColor, Duration duration) { ObjectProperty<FadeableColor> backgroundColor = new SimpleObjectProperty<>(); Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), new KeyValue(backgroundColor, startColor)), @@ -45,7 +45,7 @@ public class ModernDesignAnimator { animate(padViewController, timeline, backgroundColor); } - private static void animate(IPadViewController padViewController, Timeline timeline, ObjectProperty<FadeableColor> objectProperty) { + private static void animate(AbstractPadViewController padViewController, Timeline timeline, ObjectProperty<FadeableColor> objectProperty) { int index = padViewController.getPad().getPosition(); if (timelines.containsKey(index)) { @@ -68,7 +68,7 @@ public class ModernDesignAnimator { timelines.put(index, timeline); } - public static void stopAnimation(IPadViewController controller) { + public static void stopAnimation(AbstractPadViewController controller) { int index = controller.getPad().getPosition(); if (timelines.containsKey(index)) { @@ -76,7 +76,7 @@ public class ModernDesignAnimator { } } - public static void warnFlash(IPadViewController controller) { + public static void warnFlash(AbstractPadViewController controller) { final IPadView view = controller.getView(); try { while (!Thread.interrupted()) { 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 137d20bb6cfa6f92dd108741cfdce2878bc7d41b..e1489f3445343db9ef7b1b3a46be0e6030a8f690 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 @@ -18,7 +18,7 @@ import de.tobias.playpad.pad.content.Playlistable; import de.tobias.playpad.pad.content.play.Pauseable; import de.tobias.playpad.pad.view.IPadContentView; import de.tobias.playpad.pad.view.IPadView; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.project.page.PadIndex; import de.tobias.playpad.registry.NoSuchComponentException; @@ -171,7 +171,7 @@ public class DesktopPadView implements IPadView { } @Override - public IPadViewController getViewController() { + public AbstractPadViewController getViewController() { return controller; } @@ -332,7 +332,7 @@ public class DesktopPadView implements IPadView { setContentView(null); } - Label getPlaylistLabel() { + public Label getPlaylistLabel() { return playlistLabel; } 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 9ca4d6625e8a5e0f9864d1710118b5de97a74818..0bd8aab676d73a3bd10ec39b37c7f27e69c7af19 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 @@ -13,7 +13,7 @@ import de.tobias.playpad.pad.content.Playlistable; import de.tobias.playpad.pad.content.play.Durationable; import de.tobias.playpad.pad.listener.*; import de.tobias.playpad.pad.view.IPadView; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.profile.ProfileSettings; import de.tobias.playpad.registry.NoSuchComponentException; @@ -21,14 +21,13 @@ 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; import javafx.stage.Stage; import javafx.util.Duration; -public class DesktopPadViewController implements IPadViewController, EventHandler<ActionEvent> { +public class DesktopPadViewController extends AbstractPadViewController implements EventHandler<ActionEvent> { public static final String OPEN_FOLDER = "openFolder"; private static final String DURATION_FORMAT = "%d:%02d"; @@ -86,19 +85,7 @@ public class DesktopPadViewController implements IPadViewController, EventHandle 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())); - } + updatePlaylistLabelBinding(pad); // Update Listener padContentListener.setPad(pad); 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 e5c35e1a609bbbcd8f170ef81bf421851bb1c790..3c220b8ba255b641ea8355d2cc818418e90e1a5f 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 @@ -14,7 +14,7 @@ import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.PadContentFactory; import de.tobias.playpad.pad.view.IPadContentView; import de.tobias.playpad.pad.view.IPadView; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.project.page.PadIndex; import de.tobias.playpad.registry.NoSuchComponentException; @@ -149,7 +149,7 @@ public class TouchPadView implements IPadView { } @Override - public IPadViewController getViewController() { + public AbstractPadViewController getViewController() { return controller; } @@ -260,7 +260,7 @@ public class TouchPadView implements IPadView { setContentView(null); } - Label getPlaylistLabel() { + public Label getPlaylistLabel() { return playlistLabel; } 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 8b2b590a9ec12866261547f2c0c442a0057607f6..c43b9679075c400a0e949b80e2b9ab64e28d4f50 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 @@ -4,14 +4,12 @@ import de.thecodelabs.logger.Logger; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.TimeMode; -import de.tobias.playpad.pad.content.Playlistable; import de.tobias.playpad.pad.content.play.Durationable; import de.tobias.playpad.pad.listener.*; import de.tobias.playpad.pad.view.IPadView; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; 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; @@ -20,7 +18,7 @@ import javafx.scene.input.MouseEvent; import javafx.scene.input.TouchEvent; import javafx.util.Duration; -public class TouchPadViewController implements IPadViewController, EventHandler<Event> { +public class TouchPadViewController extends AbstractPadViewController implements EventHandler<Event> { protected static final String CURRENT_PAGE_BUTTON = "current-page-button"; private static final String DURATION_FORMAT = "%d:%02d"; @@ -72,20 +70,7 @@ 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())); - } - + updatePlaylistLabelBinding(pad); // Update Listener padContentListener.setPad(pad); diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java index 0b88a71ca642f337b7c892cf68bc04d3a2efc9ab..20c58f70592345eadb08fc634bcf34a7824951ec 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadContentListener.java @@ -3,16 +3,16 @@ package de.tobias.playpad.pad.listener; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.play.Durationable; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; public class PadContentListener implements ChangeListener<PadContent> { private Pad pad; - private IPadViewController controller; + private final AbstractPadViewController controller; - public PadContentListener(IPadViewController controller) { + public PadContentListener(AbstractPadViewController controller) { this.controller = controller; } @@ -49,5 +49,7 @@ public class PadContentListener implements ChangeListener<PadContent> { } else { controller.getView().setPlaybarVisible(false); } + + controller.updatePlaylistLabelBinding(pad); } } diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java index ce208522f99ec464cbe6996109ad0a4b3c9210d5..a364fed1a5f5f6996c4885374d1b8acd70faa936 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadDurationListener.java @@ -1,15 +1,15 @@ package de.tobias.playpad.pad.listener; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.util.Duration; public class PadDurationListener implements ChangeListener<Duration> { - private IPadViewController controller; + private AbstractPadViewController controller; - public PadDurationListener(IPadViewController controller) { + public PadDurationListener(AbstractPadViewController controller) { this.controller = controller; } diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java index 702951b06dab11e634e5c4aec827a06c98638f4e..e94995dda657050904571c0d88dec486b4d62dfa 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadLockedListener.java @@ -1,14 +1,14 @@ package de.tobias.playpad.pad.listener; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; public class PadLockedListener implements ChangeListener<Boolean> { - private IPadViewController controller; + private AbstractPadViewController controller; - public PadLockedListener(IPadViewController controller) { + public PadLockedListener(AbstractPadViewController controller) { this.controller = controller; } diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java index 579fe5a9dfb6fbac7a207b2f67b09cfce5c74800..5326b5f914229d7a4e1b9499bb44c01234d00ecf 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadPositionListener.java @@ -13,7 +13,7 @@ import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.play.Durationable; import de.tobias.playpad.pad.fade.Fadeable; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.profile.Profile; import javafx.beans.value.ObservableValue; import javafx.util.Duration; @@ -21,9 +21,9 @@ import javafx.util.Duration; public class PadPositionListener implements Runnable, IPadPositionListener { private Pad pad; - private IPadViewController controller; + private AbstractPadViewController controller; - public PadPositionListener(IPadViewController controller) { + public PadPositionListener(AbstractPadViewController controller) { this.controller = controller; } diff --git a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java index bda5270de706c8c4ecfece808faaa2780eb11170..061cc894962680419298d76f8b326c825afb6770 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/pad/listener/PadStatusListener.java @@ -3,16 +3,16 @@ package de.tobias.playpad.pad.listener; import de.thecodelabs.midi.Mapping; import de.tobias.playpad.action.actions.CartAction; import de.tobias.playpad.pad.PadStatus; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.view.PseudoClasses; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; public class PadStatusListener implements ChangeListener<PadStatus> { - private IPadViewController controller; + private AbstractPadViewController controller; - public PadStatusListener(IPadViewController controller) { + public PadStatusListener(AbstractPadViewController controller) { this.controller = controller; } diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala index aec4ccf9145de83e3b41e86038504f1dbf585ea9..b639f9099419bd956a0b420216f9c01568b2c679 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala @@ -4,7 +4,7 @@ import de.thecodelabs.utils.application.ApplicationUtils import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign} import de.tobias.playpad.design.modern.{ModernCartDesignHandler, ModernColor} import de.tobias.playpad.pad.content.play.Durationable -import de.tobias.playpad.pad.viewcontroller.IPadViewController +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController import de.tobias.playpad.util.Minifier import de.tobias.playpad.view.PseudoClasses import javafx.util.Duration @@ -47,7 +47,7 @@ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler { expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String]) } - override def handleWarning(design: ModernCartDesign, controller: IPadViewController, warning: Duration, globalDesign: ModernGlobalDesign): Unit = { + override def handleWarning(design: ModernCartDesign, controller: AbstractPadViewController, warning: Duration, globalDesign: ModernGlobalDesign): Unit = { if (globalDesign.isWarnAnimation) { val playColor = design.getPlayColor val backgroundColor = design.getBackgroundColor @@ -71,5 +71,5 @@ class ModernCartDesignHandlerImpl extends ModernCartDesignHandler { } } - override def stopWarning(design: ModernCartDesign, controller: IPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) + override def stopWarning(design: ModernCartDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) } diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala index ca1ade7277a8ba8e726e3d3b1844575ea2b47f0b..3eea45b74878a931b801b72ea341ce13375be7d2 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala @@ -1,14 +1,11 @@ package de.tobias.playpad.design -import java.nio.file.Files -import java.util.function.Consumer - import de.thecodelabs.utils.application.ApplicationUtils import de.thecodelabs.utils.application.container.PathType import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign} import de.tobias.playpad.design.modern.{ModernColor, ModernGlobalDesignHandler} import de.tobias.playpad.pad.content.play.Durationable -import de.tobias.playpad.pad.viewcontroller.IPadViewController +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController import de.tobias.playpad.project.Project import de.tobias.playpad.util.Minifier import de.tobias.playpad.view.{ColorPickerView, PseudoClasses} @@ -22,6 +19,8 @@ import org.springframework.expression.common.TemplateParserContext import org.springframework.expression.spel.standard.SpelExpressionParser import org.springframework.expression.spel.support.StandardEvaluationContext +import java.nio.file.Files +import java.util.function.Consumer import scala.jdk.CollectionConverters._ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with ColorModeHandler { @@ -93,7 +92,7 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String]) } - override def handleWarning(design: ModernGlobalDesign, controller: IPadViewController, warning: Duration): Unit = { + override def handleWarning(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = { if (design.isWarnAnimation) { warnAnimation(design, controller, warning) } else { @@ -101,7 +100,7 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color } } - private def warnAnimation(design: ModernGlobalDesign, controller: IPadViewController, warning: Duration): Unit = { + private def warnAnimation(design: ModernGlobalDesign, controller: AbstractPadViewController, warning: Duration): Unit = { val stopColor = if (design.isFlatDesign) design.getBackgroundColor.toFlatFadeableColor else design.getBackgroundColor.toFadeableColor val playColor = if (design.isFlatDesign) design.getPlayColor.toFlatFadeableColor else design.getPlayColor.toFadeableColor @@ -118,7 +117,7 @@ class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with Color ModernDesignAnimator.animateWarn(controller, playColor, stopColor, duration) } - override def stopWarning(design: ModernGlobalDesign, controller: IPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) + override def stopWarning(design: ModernGlobalDesign, controller: AbstractPadViewController): Unit = ModernDesignAnimator.stopAnimation(controller) override def getColorInterface(onSelection: Consumer[DisplayableColor]) = new ColorPickerView(null, ModernColor.values.asInstanceOf[Array[DisplayableColor]], onSelection) diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java index 0f34344711461d7ef8a26a175053fc2be731f27b..200ead1fd6e412137370b6393167bb1092adc90d 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernCartDesignHandler.java @@ -2,7 +2,7 @@ package de.tobias.playpad.design.modern; import de.tobias.playpad.design.modern.model.ModernCartDesign; import de.tobias.playpad.design.modern.model.ModernGlobalDesign; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import javafx.util.Duration; public interface ModernCartDesignHandler { @@ -12,9 +12,9 @@ public interface ModernCartDesignHandler { /* * Wird in einem neuen Thread aufgerufen */ - void handleWarning(ModernCartDesign design, IPadViewController controller, Duration warning, ModernGlobalDesign globalDesign); + void handleWarning(ModernCartDesign design, AbstractPadViewController controller, Duration warning, ModernGlobalDesign globalDesign); - default void stopWarning(ModernCartDesign design, IPadViewController controller) { + default void stopWarning(ModernCartDesign design, AbstractPadViewController controller) { } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java index 1c6930dd44d0737bfce2454d18f96ba131652aff..bca1e4aa9cee672852326f41dffe582e115f10e4 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/design/modern/ModernGlobalDesignHandler.java @@ -1,7 +1,7 @@ package de.tobias.playpad.design.modern; import de.tobias.playpad.design.modern.model.ModernGlobalDesign; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.project.Project; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.stage.Stage; @@ -16,8 +16,8 @@ public interface ModernGlobalDesignHandler { /* * Wird in einem neuen Thread aufgerufen */ - void handleWarning(ModernGlobalDesign design, IPadViewController controller, Duration warning); + void handleWarning(ModernGlobalDesign design, AbstractPadViewController controller, Duration warning); - default void stopWarning(ModernGlobalDesign design, IPadViewController controller) { + default void stopWarning(ModernGlobalDesign design, AbstractPadViewController controller) { } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java index 618e0530d051cf4ce6434f5d504ebe4c5e6801e8..cbefe4d2a0c9c95ce5607e7bcd510b7311212ea9 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/Pad.java @@ -13,7 +13,7 @@ import de.tobias.playpad.pad.listener.trigger.PadTriggerContentListener; import de.tobias.playpad.pad.listener.trigger.PadTriggerDurationListener; import de.tobias.playpad.pad.listener.trigger.PadTriggerStatusListener; import de.tobias.playpad.pad.mediapath.MediaPath; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectSettings; import de.tobias.playpad.project.page.PadIndex; @@ -78,7 +78,7 @@ public class Pad { // Utils private transient boolean eof; - private transient IPadViewController controller; + private transient AbstractPadViewController controller; private transient Project project; private transient PadUpdateListener padListener; @@ -574,11 +574,11 @@ public class Pad { return controller != null; } - public IPadViewController getController() { + public AbstractPadViewController getController() { return controller; } - public void setController(IPadViewController controller) { + public void setController(AbstractPadViewController controller) { this.controller = controller; } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java index 51c6ae1b2d7450bf0cd0c191d822bc7f43be7beb..fd2be672d536176e22eb2a1097acca69a666be8e 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/view/IPadView.java @@ -1,9 +1,10 @@ package de.tobias.playpad.pad.view; import de.tobias.playpad.pad.Pad; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.project.page.PadIndex; import javafx.css.PseudoClass; +import javafx.scene.control.Label; import javafx.scene.layout.Pane; /** @@ -33,7 +34,7 @@ public interface IPadView { * * @return ViewController des Pad */ - IPadViewController getViewController(); + AbstractPadViewController getViewController(); /** * Gibt das oberste GUI Element des Pads zurück, welche im MainView verwendet wird. @@ -106,6 +107,8 @@ public interface IPadView { */ void setPlaybarVisible(boolean visible); + Label getPlaylistLabel(); + /** * Fügt die Standart Elemente der PadView hinzu. Die GUI Element sind Abhängig vom Pad, und welchen Content es hat. * diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java new file mode 100644 index 0000000000000000000000000000000000000000..e1cbb5372b4768424ceae0a0f1cee17adf0a6527 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java @@ -0,0 +1,71 @@ +package de.tobias.playpad.pad.viewcontroller; + +import de.tobias.playpad.pad.Pad; +import de.tobias.playpad.pad.content.Playlistable; +import de.tobias.playpad.pad.listener.IPadPositionListener; +import de.tobias.playpad.pad.view.IPadView; +import javafx.beans.binding.Bindings; +import javafx.beans.value.ChangeListener; +import javafx.util.Duration; + +/** + * Schnittstellen um mit einem PadViewController zu kommunizieren. + * + * @author tobias + * @since 5.1.0 + */ +public abstract class AbstractPadViewController { + + /** + * Gibt das Pad zurück, welches er verwaltet. (Das Datenmodel) + * + * @return Pad + */ + public abstract Pad getPad(); + + /** + * Gibt die View des Controllers zurück. + * + * @return View + */ + public abstract IPadView getView(); + + /** + * Setzt ein Pad für ein View. Hier werden die Datein mittels ViewController der View bekannt gemacht. + * + * @param pad Neues Pad + */ + public abstract void setupPad(Pad pad); + + /** + * Entfertn des Verbundene Pad von der View. + */ + public abstract void removePad(); + + public abstract void updateTimeLabel(); + + public abstract void updateButtonDisable(); + + public abstract IPadPositionListener getPadPositionListener(); + + public abstract ChangeListener<Duration> getPadDurationListener(); + + public void updatePlaylistLabelBinding(Pad pad) { + if (pad.getContent() instanceof Playlistable) { + final Playlistable content = (Playlistable) pad.getContent(); + getView().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())); + } else { + getView().getPlaylistLabel().textProperty().unbind(); + getView().getPlaylistLabel().setText(""); + } + } +} 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 deleted file mode 100644 index 6c010518809856910286625e81179040dfcb5c13..0000000000000000000000000000000000000000 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java +++ /dev/null @@ -1,50 +0,0 @@ -package de.tobias.playpad.pad.viewcontroller; - -import de.tobias.playpad.pad.Pad; -import de.tobias.playpad.pad.listener.IPadPositionListener; -import de.tobias.playpad.pad.view.IPadView; -import javafx.beans.value.ChangeListener; -import javafx.util.Duration; - -/** - * Schnittstellen um mit einem PadViewController zu kommunizieren. - * - * @author tobias - * @since 5.1.0 - */ -public interface IPadViewController { - - /** - * Gibt das Pad zurück, welches er verwaltet. (Das Datenmodel) - * - * @return Pad - */ - Pad getPad(); - - /** - * Gibt die View des Controllers zurück. - * - * @return View - */ - IPadView getView(); - - /** - * Setzt ein Pad für ein View. Hier werden die Datein mittels ViewController der View bekannt gemacht. - * - * @param pad Neues Pad - */ - void setupPad(Pad pad); - - /** - * Entfertn des Verbundene Pad von der View. - */ - void removePad(); - - void updateTimeLabel(); - - void updateButtonDisable(); - - IPadPositionListener getPadPositionListener(); - - ChangeListener<Duration> getPadDurationListener(); -} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java index f7cf7399636ec98235da323c9e75f1c23a0631f1..88039dcb374505f9f913fc81b4d72d5c20fdfd63 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/view/main/MainLayoutFactory.java @@ -1,7 +1,7 @@ package de.tobias.playpad.view.main; import de.tobias.playpad.pad.view.IPadView; -import de.tobias.playpad.pad.viewcontroller.IPadViewController; +import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController; import de.tobias.playpad.registry.Component; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; @@ -31,7 +31,7 @@ public abstract class MainLayoutFactory extends Component { * * @return Pad * @see IPadView notwendige Methoden für ein Pad - * @see IPadViewController ViewController zum Pad + * @see AbstractPadViewController ViewController zum Pad */ public abstract IPadView createPadView();