From 57f497c1404fab7bd195913bc5b03aee66b43509 Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Fri, 4 Dec 2020 17:17:07 +0100 Subject: [PATCH] Make IPadViewController to abstract class AbstractPadViewController, update playlist binding on pad content change --- .../playpad/design/ModernDesignAnimator.java | 12 ++-- .../layout/desktop/pad/DesktopPadView.java | 6 +- .../desktop/pad/DesktopPadViewController.java | 19 +---- .../layout/touch/pad/TouchPadView.java | 6 +- .../touch/pad/TouchPadViewController.java | 21 +----- .../pad/listener/PadContentListener.java | 8 ++- .../pad/listener/PadDurationListener.java | 6 +- .../pad/listener/PadLockedListener.java | 6 +- .../pad/listener/PadPositionListener.java | 6 +- .../pad/listener/PadStatusListener.java | 6 +- .../design/ModernCartDesignHandlerImpl.scala | 6 +- .../ModernGlobalDesignHandlerImpl.scala | 13 ++-- .../modern/ModernCartDesignHandler.java | 6 +- .../modern/ModernGlobalDesignHandler.java | 6 +- .../main/java/de/tobias/playpad/pad/Pad.java | 8 +-- .../de/tobias/playpad/pad/view/IPadView.java | 7 +- .../AbstractPadViewController.java | 71 +++++++++++++++++++ .../viewcontroller/IPadViewController.java | 50 ------------- .../playpad/view/main/MainLayoutFactory.java | 4 +- 19 files changed, 132 insertions(+), 135 deletions(-) create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/AbstractPadViewController.java delete mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/pad/viewcontroller/IPadViewController.java 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 d7ebadfc..ffd70e7b 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 137d20bb..e1489f34 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 9ca4d662..0bd8aab6 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 e5c35e1a..3c220b8b 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 8b2b590a..c43b9679 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 0b88a71c..20c58f70 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 ce208522..a364fed1 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 702951b0..e94995dd 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 579fe5a9..5326b5f9 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 bda5270d..061cc894 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 aec4ccf9..b639f909 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 ca1ade72..3eea45b7 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 0f343447..200ead1f 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 1c6930dd..bca1e4aa 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 618e0530..cbefe4d2 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 51c6ae1b..fd2be672 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 00000000..e1cbb537 --- /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 6c010518..00000000 --- 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 f7cf7399..88039dcb 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(); -- GitLab