diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index d555c157b3fb9430975499dbb622e79b44289ec1..dde9fa6478c5376d8d14e7ba44448e1642251c03 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java @@ -179,11 +179,13 @@ public class PlayPadImpl implements PlayPad { if (mainViewController == null) { mainViewController = new MainViewController(e -> { mainViewController.openProject(currentProject); - globalListeners.forEach(l -> l.projectOpened(currentProject)); + mainViewListeners.forEach(l -> l.onInit(mainViewController)); + if (onLoaded != null) { onLoaded.accept(e); } - mainViewListeners.forEach(l -> l.onInit(mainViewController)); + + globalListeners.forEach(l -> l.projectOpened(currentProject)); Platform.setImplicitExit(true); }); } else { diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java index 2b4baeef880ee3600d71118ad867885aea688975..fab822a2958148d5e80d6a24fffbb831f8d98771 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java @@ -11,6 +11,7 @@ import de.tobias.playpad.plugin.PlayPadPluginStub; import de.tobias.playpad.plugin.playout.log.LogSeasons; import de.tobias.playpad.plugin.playout.log.listener.PadPlayLogListener; import de.tobias.playpad.plugin.playout.viewcontroller.MainViewControllerListener; +import de.tobias.playpad.plugin.playout.viewcontroller.PlayoutLogStatusIconListener; @SuppressWarnings("unused") public class PlayoutLogPlugin implements PlayPadPluginStub, PluginArtifact { @@ -23,10 +24,16 @@ public class PlayoutLogPlugin implements PlayPadPluginStub, PluginArtifact { module = new Module(descriptor.getName(), descriptor.getArtifactId()); + PlayoutLogStatusIconListener playoutLogStatusIconListener = new PlayoutLogStatusIconListener(); + PlayPadPlugin.getInstance().addMainViewListener(new MainViewControllerListener()); + PlayPadPlugin.getInstance().addMainViewListener(playoutLogStatusIconListener); + PlayPadPlugin.getInstance().addGlobalListener(new ProjectListener()); PlayPadPlugin.getInstance().addPadListener(new PadPlayLogListener()); + LogSeasons.addListener(playoutLogStatusIconListener); + PlayOutLogInitializer.init(); Logger.debug("Enable Playout Log Plugin"); diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java index 45a0784490e5f87e100e58f42629df10867375db..0b8ff4dc4ced7a915d39b3616e77b23e923c4662 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java @@ -2,27 +2,36 @@ package de.tobias.playpad.plugin.playout.log; import de.tobias.playpad.plugin.playout.log.storage.LogSeasonStorageHandler; +import java.util.ArrayList; import java.util.List; public class LogSeasons { - private static LogSeason INSTANCE; + private static LogSeason currentLogSession; private static LogSeasonStorageHandler storageHandler; - public static LogSeason getInstance() { - return INSTANCE; + private static List<LogSessionListener> listeners = new ArrayList<>(); + + private LogSeasons() { + + } + + public static LogSeason getCurrentSession() { + return currentLogSession; } public static LogSeason createLogSeason(String name, int columns, int rows) { - INSTANCE = new LogSeason(name, columns, rows); + currentLogSession = new LogSeason(name, columns, rows); // Save LogSeasonStorageHandler storageHandler = LogSeasons.getStorageHandler(); if (storageHandler != null) { - storageHandler.addLogSeason(INSTANCE); + storageHandler.addLogSeason(currentLogSession); } - return INSTANCE; + listeners.forEach(l -> l.playoutLogStarted(currentLogSession)); + + return currentLogSession; } public static LogSeasonStorageHandler getStorageHandler() { @@ -34,7 +43,8 @@ public class LogSeasons { } public static void stop() { - INSTANCE = null; + listeners.forEach(l -> l.playoutLogStopped(currentLogSession)); + currentLogSession = null; } public static List<LogSeason> getAllLogSeasonsLazy() { @@ -43,9 +53,21 @@ public class LogSeasons { public static void deleteSession(int id) { getStorageHandler().deleteSession(id); - }; + } public static LogSeason getLogSeason(int id) { return getStorageHandler().getLogSeason(id); } + + /* + Listener + */ + + public static void addListener(LogSessionListener logSessionListener) { + listeners.add(logSessionListener); + } + + public static void removeListener(LogSessionListener logSessionListener) { + listeners.remove(logSessionListener); + } } diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSessionListener.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSessionListener.java new file mode 100644 index 0000000000000000000000000000000000000000..8054cccec40ce925b933d52f690ee87fdc11de69 --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSessionListener.java @@ -0,0 +1,8 @@ +package de.tobias.playpad.plugin.playout.log; + +public interface LogSessionListener +{ + void playoutLogStarted(LogSeason logSeason); + + void playoutLogStopped(LogSeason logSeason); +} diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java index a21ee0b8c060fb4069169bbb8ceb9b780c9359e6..05ce0b71bd3f45bcb790fdf0f8fae52ccd1b6354 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/listener/PadPlayLogListener.java @@ -16,7 +16,7 @@ public class PadPlayLogListener implements PadListener { @Override public void onStatusChange(Pad pad, PadStatus newValue) { if (newValue == PadStatus.PLAY) { - LogSeason instance = LogSeasons.getInstance(); + LogSeason instance = LogSeasons.getCurrentSession(); if (instance != null) { instance.getLogItems().stream().filter(item -> item.getUuid().equals(pad.getPaths().get(0).getId())).forEach(item -> { PlayOutItem playoutItem = new PlayOutItem(item.getUuid(), instance, System.currentTimeMillis()); @@ -29,7 +29,7 @@ public class PadPlayLogListener implements PadListener { @Override public void onMediaPathChanged(Pad pad, ListChangeListener.Change<? extends MediaPath> value) { - LogSeason instance = LogSeasons.getInstance(); + LogSeason instance = LogSeasons.getCurrentSession(); if (instance != null) { while (value.next()) { if (value.wasAdded()) { diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogStatusIconListener.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogStatusIconListener.java new file mode 100644 index 0000000000000000000000000000000000000000..577d0a4c1c1ebd3a1814abf76610f278ea11bff5 --- /dev/null +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogStatusIconListener.java @@ -0,0 +1,34 @@ +package de.tobias.playpad.plugin.playout.viewcontroller; + +import de.thecodelabs.utils.ui.icon.FontAwesomeType; +import de.thecodelabs.utils.ui.icon.FontIcon; +import de.tobias.playpad.plugin.WindowListener; +import de.tobias.playpad.plugin.playout.log.LogSeason; +import de.tobias.playpad.plugin.playout.log.LogSessionListener; +import de.tobias.playpad.viewcontroller.main.IMainViewController; + +public class PlayoutLogStatusIconListener implements LogSessionListener, WindowListener<IMainViewController> { + private FontIcon logIcon; + + @Override + public void playoutLogStarted(LogSeason logSeason) { + logIcon.setVisible(true); + } + + @Override + public void playoutLogStopped(LogSeason logSeason) { + logIcon.setVisible(false); + } + + @Override + public void onInit(IMainViewController mainViewControllerListener) { + // LogIcon + logIcon = new FontIcon(FontAwesomeType.LIST); + mainViewControllerListener.performLayoutDependedAction((oldToolbar, newToolbar) -> { + if (oldToolbar != null) { + oldToolbar.removeToolbarItem(logIcon); + } + newToolbar.addToolbarItem(logIcon); + }); + } +} diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java index 1c48c973b6274b6edc0d508e825ff9f6b71089f7..427edbe10f7cb9ec19b54bf013266c9d14dd907a 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java @@ -5,8 +5,6 @@ import de.thecodelabs.logger.Logger; import de.thecodelabs.storage.proxy.SettingsProxy; import de.thecodelabs.utils.ui.NVC; import de.thecodelabs.utils.ui.NVCStage; -import de.thecodelabs.utils.ui.icon.FontAwesomeType; -import de.thecodelabs.utils.ui.icon.FontIcon; import de.thecodelabs.utils.util.Localization; import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.plugin.playout.Strings; @@ -16,7 +14,6 @@ import de.tobias.playpad.plugin.playout.log.LogSeasons; import de.tobias.playpad.plugin.playout.storage.PlayoutLogSettings; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectSettings; -import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -49,8 +46,6 @@ public class PlayoutLogViewController extends NVC { @FXML private CheckBox autoStartCheckbox; - private FontIcon logIcon; - public PlayoutLogViewController(Window owner) { load("view/dialog", "PlayoutLogDialog", Localization.getBundle()); @@ -64,13 +59,10 @@ public class PlayoutLogViewController extends NVC { public void init() { logList.getItems().setAll(LogSeasons.getAllLogSeasonsLazy()); - // LogIcon - logIcon = new FontIcon(FontAwesomeType.LIST); - - if (LogSeasons.getInstance() != null) { // Running + if (LogSeasons.getCurrentSession() != null) { // Running startButton.setText(Localization.getString(Strings.PLAYOUT_LOG_DIALOG_BUTTON_STOP)); nameTextField.setDisable(true); - nameTextField.setText(LogSeasons.getInstance().getName()); + nameTextField.setText(LogSeasons.getCurrentSession().getName()); } else { startButton.setText(Localization.getString(Strings.PLAYOUT_LOG_DIALOG_BUTTON_START)); nameTextField.setDisable(false); @@ -96,9 +88,7 @@ public class PlayoutLogViewController extends NVC { @FXML private void startButtonHandler(ActionEvent event) { - final MenuToolbarViewController controller = PlayPadPlugin.getInstance().getMainViewController().getMenuToolbarController(); - - if (LogSeasons.getInstance() == null) { // Start + if (LogSeasons.getCurrentSession() == null) { // Start if (nameTextField.getText().isEmpty()) { return; } @@ -109,12 +99,10 @@ public class PlayoutLogViewController extends NVC { LogSeason logSeason = LogSeasons.createLogSeason(nameTextField.getText(), settings.getColumns(), settings.getRows()); logSeason.createProjectSnapshot(currentProject); - controller.addToolbarItem(logIcon); startButton.setText(Localization.getString(Strings.PLAYOUT_LOG_DIALOG_BUTTON_STOP)); nameTextField.setDisable(false); } else { // Stop LogSeasons.stop(); - controller.removeToolbarItem(logIcon); startButton.setText(Localization.getString(Strings.PLAYOUT_LOG_DIALOG_BUTTON_START)); nameTextField.setDisable(false); }