From 043623d61438c83d877ea787925558e4a79a514d Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Sun, 1 Oct 2023 16:16:03 +0200 Subject: [PATCH] #190 - Add option to mark a pad as "play overlay" to exclude this pad from the "one-pad-mode" play restriction --- .../option/pad/PlayerPadTabViewController.java | 6 ++++++ .../src/main/resources/lang/ui_de.properties | 2 ++ .../resources/view/option/pad/PlayerTab.fxml | 16 ++++++++++++++++ .../java/de/tobias/playpad/pad/PadSettings.java | 14 ++++++++++++++ .../playpad/pad/PadSettingsSerializer.java | 4 ++++ .../pad/listener/PadStatusControlListener.java | 3 ++- 6 files changed, 44 insertions(+), 1 deletion(-) diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlayerPadTabViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlayerPadTabViewController.java index 11d394f6..ed283f8d 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlayerPadTabViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlayerPadTabViewController.java @@ -17,6 +17,8 @@ import javafx.util.Duration; public class PlayerPadTabViewController extends PadSettingsTabViewController { + @FXML + private CheckBox playOverlayEnableCheckBox; @FXML private CheckBox customFadeCheckBox; @FXML @@ -48,6 +50,8 @@ public class PlayerPadTabViewController extends PadSettingsTabViewController { warningFeedbackViewController = WarningFeedbackViewController.newViewControllerForPad(); warningFeedbackContainer.getChildren().add(warningFeedbackViewController.getParent()); + playOverlayEnableCheckBox.selectedProperty().addListener((observable, oldValue, newValue) -> pad.getPadSettings().setPlayOverlay(newValue)); + customFadeCheckBox.selectedProperty().addListener((a, b, c) -> { fadeContainer.setDisable(!c); @@ -103,6 +107,8 @@ public class PlayerPadTabViewController extends PadSettingsTabViewController { public void loadSettings(Pad pad) { PadSettings padSettings = pad.getPadSettings(); + playOverlayEnableCheckBox.setSelected(padSettings.isPlayOverlay()); + if (padSettings.isCustomFade()) fadeViewController.setFadeSettings(padSettings.getFade()); diff --git a/PlayWall/src/main/resources/lang/ui_de.properties b/PlayWall/src/main/resources/lang/ui_de.properties index d90e1e09..062aace8 100755 --- a/PlayWall/src/main/resources/lang/ui_de.properties +++ b/PlayWall/src/main/resources/lang/ui_de.properties @@ -132,6 +132,8 @@ padSettings.gen.label.timeDisplay=Zeitanzeige: padSettings.gen.checkbox.customSettings=Eigene Einstellungen padSettings.label.loop=Wiederholen: padSettings.button.finish=Fertig +padSettings.player.label.playOverlay=Play Overlay: +padSettings.player.label.playOverlay.description=Mit dieser Einstellung darf diese Kachel zus\u00E4tzlich zu einer bereits laufenden wiedergegeben werden, wenn der Modus "Mehrere Kacheln wiedergaben" deakitiviert ist. padSettings.player.label.warning=Warnhinweise: padSettings.player.label.cueIn=Intro Dauer (in s): padSettings.player.label.fade=Ein-/Ausblenden: diff --git a/PlayWall/src/main/resources/view/option/pad/PlayerTab.fxml b/PlayWall/src/main/resources/view/option/pad/PlayerTab.fxml index 9f5771e5..ec40e056 100644 --- a/PlayWall/src/main/resources/view/option/pad/PlayerTab.fxml +++ b/PlayWall/src/main/resources/view/option/pad/PlayerTab.fxml @@ -5,6 +5,22 @@ <?import javafx.scene.layout.*?> <VBox spacing="14.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1"> <children> + <VBox spacing="14.0"> + <children> + <HBox layoutX="14.0" layoutY="139.0" spacing="14.0"> + <children> + <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%padSettings.player.label.playOverlay" textAlignment="RIGHT" /> + <CheckBox fx:id="playOverlayEnableCheckBox" mnemonicParsing="false" text="%settings.checkbox.activate" /> + </children> + </HBox> + <Label text="%padSettings.player.label.playOverlay.description" wrapText="true"> + <VBox.margin> + <Insets left="164.0" /> + </VBox.margin> + </Label> + </children> + </VBox> + <Separator prefWidth="200.0" /> <VBox spacing="14.0"> <children> <HBox layoutX="14.0" layoutY="253.0" spacing="14.0"> diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java index f857d094..3b3d449b 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettings.java @@ -30,6 +30,7 @@ public class PadSettings { private DoubleProperty volumeProperty = new SimpleDoubleProperty(1.0); private DoubleProperty speedProperty = new SimpleDoubleProperty(1.0); private BooleanProperty loopProperty = new SimpleBooleanProperty(false); + private BooleanProperty playOverlayProperty = new SimpleBooleanProperty(false); private ObjectProperty<TimeMode> timeModeProperty = new SimpleObjectProperty<>(); private ObjectProperty<FadeSettings> fadeProperty = new SimpleObjectProperty<>(); private ObjectProperty<Duration> warningProperty = new SimpleObjectProperty<>(); @@ -100,6 +101,18 @@ public class PadSettings { return loopProperty; } + public boolean isPlayOverlay() { + return playOverlayProperty.get(); + } + + public void setPlayOverlay(boolean playOverlay) { + playOverlayProperty.set(playOverlay); + } + + public BooleanProperty playOverlayProperty() { + return playOverlayProperty; + } + public boolean isCustomTimeMode() { return timeModeProperty.isNotNull().get(); } @@ -242,6 +255,7 @@ public class PadSettings { clone.volumeProperty = new SimpleDoubleProperty(getVolume()); clone.loopProperty = new SimpleBooleanProperty(isLoop()); + clone.playOverlayProperty = new SimpleBooleanProperty(isPlayOverlay()); if (isCustomTimeMode()) clone.timeModeProperty = new SimpleObjectProperty<>(getTimeMode()); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java index fdaaff85..adf5c3e4 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/PadSettingsSerializer.java @@ -21,6 +21,7 @@ public class PadSettingsSerializer { private static final String VOLUME_ELEMENT = "Volume"; private static final String LOOP_ELEMENT = "Loop"; + private static final String PLAY_OVERLAY_ELEMENT = "PlayOverlay"; private static final String TIME_MODE_ELEMENT = "TimeMode"; private static final String FADE_ELEMENT = "Fade"; private static final String WARNING_ELEMENT = "Warning"; @@ -47,6 +48,8 @@ public class PadSettingsSerializer { padSettings.setVolume(Double.parseDouble(settingsElement.element(VOLUME_ELEMENT).getStringValue())); if (settingsElement.element(LOOP_ELEMENT) != null) padSettings.setLoop(Boolean.parseBoolean(settingsElement.element(LOOP_ELEMENT).getStringValue())); + if (settingsElement.element(PLAY_OVERLAY_ELEMENT) != null) + padSettings.setPlayOverlay(Boolean.parseBoolean(settingsElement.element(PLAY_OVERLAY_ELEMENT).getStringValue())); if (settingsElement.element(TIME_MODE_ELEMENT) != null) padSettings.setTimeMode(TimeMode.valueOf(settingsElement.element(TIME_MODE_ELEMENT).getStringValue())); if (settingsElement.element(FADE_ELEMENT) != null) @@ -108,6 +111,7 @@ public class PadSettingsSerializer { settingsElement.addElement(VOLUME_ELEMENT).addText(String.valueOf(padSettings.getVolume())); settingsElement.addElement(LOOP_ELEMENT).addText(String.valueOf(padSettings.isLoop())); + settingsElement.addElement(PLAY_OVERLAY_ELEMENT).addText(String.valueOf(padSettings.isPlayOverlay())); if (padSettings.isCustomTimeMode()) settingsElement.addElement(TIME_MODE_ELEMENT).addText(String.valueOf(padSettings.getTimeMode())); if (padSettings.isCustomWarning()) diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java index a791354a..28bb500f 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/PadStatusControlListener.java @@ -43,7 +43,8 @@ public class PadStatusControlListener implements ChangeListener<PadStatus> { pad.getProject().updateActivePlayerProperty(); // bei Single Pad Playing wird das alte Pad beendet. - if (!profileSettings.isMultiplePlayer()) { + // Und wenn das neu abzuspielende Pad nicht im Modus "PlayOverlay" ist. + if (!profileSettings.isMultiplePlayer() && !pad.getPadSettings().isPlayOverlay()) { if (currentPlayingPad != null && currentPlayingPad != pad) { if (currentPlayingPad.isPlay() || currentPlayingPad.isPaused()) { currentPlayingPad.stop(); -- GitLab