diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index dde9fa6478c5376d8d14e7ba44448e1642251c03..f3f434f50447c73577d67fdb21460933fcb5ea93 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java @@ -42,7 +42,7 @@ public class PlayPadImpl implements PlayPad { private Application.Parameters parameters; - private List<WindowListener<IMainViewController>> mainViewListeners = new ArrayList<>(); + private List<MainWindowListener> mainViewListeners = new ArrayList<>(); private List<SettingsListener> settingsListeners = new ArrayList<>(); private List<PadListener> padListeners = new ArrayList<>(); private List<GlobalListener> globalListeners = new ArrayList<>(); @@ -68,11 +68,11 @@ public class PlayPadImpl implements PlayPad { } @Override - public void addMainViewListener(WindowListener<IMainViewController> listener) { + public void addMainViewListener(MainWindowListener listener) { mainViewListeners.add(listener); } - public List<WindowListener<IMainViewController>> getMainViewListeners() { + public List<MainWindowListener> getMainViewListeners() { return mainViewListeners; } @@ -199,7 +199,7 @@ public class PlayPadImpl implements PlayPad { initializer.submit(new LocalizationLoadingTask()); initializer.submit(new GlobalSettingsLoadingTask()); - initializer.submit(new KeyboardMappingLoadingTask()); + initializer.submit(new KeyboardDefaultMappingTask()); initializer.submit(new ServiceInitializationTask()); @@ -215,6 +215,7 @@ public class PlayPadImpl implements PlayPad { initializer.submit(new NativeAppInitializerTask()); initializer.submit(new PluginLoadingTask()); initializer.submit(new ProjectsLoadingTask()); + initializer.submit(new KeyboardLoadingMappingTask()); initializer.submit(new CheckUpdateTask()); diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java index 1257e23887cf5a1b017f15fda6d39215e1fe5fa9..83735e21ac0f46412f97377344554a679c6faa03 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java @@ -9,15 +9,16 @@ import de.tobias.playpad.Strings; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.page.Page; import de.tobias.playpad.settings.GlobalSettings; -import de.tobias.playpad.settings.keys.Key; import de.tobias.playpad.viewcontroller.dialog.PathMatchDialog; import javafx.beans.binding.Bindings; import javafx.beans.binding.StringBinding; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; -import javafx.scene.control.*; -import javafx.scene.input.KeyCombination; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.Menu; +import javafx.scene.control.Slider; import javafx.scene.layout.HBox; import java.util.ResourceBundle; @@ -102,13 +103,6 @@ public abstract class BasicMenuToolbarViewController extends MenuToolbarViewCont } } - protected void setKeyBindingForMenu(MenuItem menuItem, Key key) { - if (key != null && !key.getKeyCode().isEmpty()) { - KeyCombination keyCode = KeyCombination.valueOf(key.getKeyCode()); - menuItem.setAccelerator(keyCode); - } - } - @Override public void setOpenProject(Project project) { this.openProject = project; diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java index fa81a08137aebcb2f2d416b27451fb7f55f39f88..bfe085df774bc312a05ea1e770f06d10c348f115 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -24,6 +24,7 @@ import de.tobias.playpad.design.ModernDesignSizeHelper; import de.tobias.playpad.design.modern.model.ModernGlobalDesign; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.view.IPadView; +import de.tobias.playpad.plugin.MainWindowListener; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.profile.ProfileListener; import de.tobias.playpad.profile.ProfileSettings; @@ -774,6 +775,9 @@ public class MainViewController extends NVC implements IMainViewController, Noti if (menuToolbarViewController != null) { menuToolbarViewController.loadKeybinding(keys); } + + // Plugin Hook + PlayPadPlugin.getInstance().getMainViewListeners().forEach(MainWindowListener::loadMenuKeyBinding); } } diff --git a/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardMappingLoadingTask.scala b/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardDefaultMappingTask.scala similarity index 83% rename from PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardMappingLoadingTask.scala rename to PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardDefaultMappingTask.scala index 017254453a4a018bf6da34a213fb7719536b486f..cf64b19a2b485a981beb5db98b2f17d19dfa2587 100644 --- a/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardMappingLoadingTask.scala +++ b/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardDefaultMappingTask.scala @@ -1,11 +1,12 @@ package de.tobias.playpad.initialize + import de.thecodelabs.utils.application import de.thecodelabs.utils.application.container.PathType import de.thecodelabs.utils.util.Localization import de.tobias.playpad.PlayPadImpl import de.tobias.playpad.settings.GlobalSettings -class KeyboardMappingLoadingTask extends PlayPadInitializeTask { +class KeyboardDefaultMappingTask extends PlayPadInitializeTask { override def name(): String = "Keyboard Mapping" override def run(app: application.App, instance: PlayPadImpl): Unit = { @@ -13,6 +14,5 @@ class KeyboardMappingLoadingTask extends PlayPadInitializeTask { val globalSettings = instance.getGlobalSettings globalSettings.getKeyCollection.loadDefaultFromFile("components/Keys.xml", Localization.getBundle) - globalSettings.getKeyCollection.load(globalSettingsPath) } } diff --git a/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardLoadingMappingTask.scala b/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardLoadingMappingTask.scala new file mode 100644 index 0000000000000000000000000000000000000000..13c7e127085cbef5613d89956159f85b1d157f5c --- /dev/null +++ b/PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardLoadingMappingTask.scala @@ -0,0 +1,17 @@ +package de.tobias.playpad.initialize + +import de.thecodelabs.utils.application +import de.thecodelabs.utils.application.container.PathType +import de.tobias.playpad.PlayPadImpl +import de.tobias.playpad.settings.GlobalSettings + +class KeyboardLoadingMappingTask extends PlayPadInitializeTask { + override def name(): String = "Keyboard Mapping" + + override def run(app: application.App, instance: PlayPadImpl): Unit = { + val globalSettingsPath = app.getPath(PathType.CONFIGURATION, GlobalSettings.FILE_NAME) + val globalSettings = instance.getGlobalSettings + + globalSettings.getKeyCollection.load(globalSettingsPath) + } +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java b/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java index 7b146c297a9bba0b44a37e25599213c06327fbf2..64506fc1abff045fb02b7457ddbaa9a92e7c0172 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/PlayPad.java @@ -3,9 +3,9 @@ package de.tobias.playpad; import de.thecodelabs.utils.ui.NVC; import de.thecodelabs.versionizer.service.UpdateService; import de.tobias.playpad.plugin.GlobalListener; +import de.tobias.playpad.plugin.MainWindowListener; import de.tobias.playpad.plugin.PadListener; import de.tobias.playpad.plugin.SettingsListener; -import de.tobias.playpad.plugin.WindowListener; import de.tobias.playpad.profile.ProfileNotFoundException; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectNotFoundException; @@ -34,7 +34,9 @@ public interface PlayPad { * @param listener MainView Listener * @since 2.0.0 */ - void addMainViewListener(WindowListener<IMainViewController> listener); + void addMainViewListener(MainWindowListener listener); + + List<MainWindowListener> getMainViewListeners(); /** * Fügt einen Settings Listener hinzu. diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/MainWindowListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/MainWindowListener.java new file mode 100644 index 0000000000000000000000000000000000000000..ed330ccf0418863959b60738f6010d162d03e286 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/MainWindowListener.java @@ -0,0 +1,9 @@ +package de.tobias.playpad.plugin; + +import de.tobias.playpad.viewcontroller.main.IMainViewController; + +public interface MainWindowListener extends WindowListener<IMainViewController> { + + default void loadMenuKeyBinding() { + } +} diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/WindowListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/WindowListener.java index e9174ce96e30403264522567240754bc680f599f..a45045f7b4562db014b7a39a32a99f0c04872a8f 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/WindowListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/WindowListener.java @@ -4,7 +4,7 @@ public interface WindowListener<T> { void onInit(T t); - default void onClose(T t) { + default void onDeinit(T t) { } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/Key.java b/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/Key.java index 90791abbbf97c8224e93b0a71219cbd2b8fbe63d..b35139b5d7b4d8875ccdfa49d43a328f057ca1ee 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/Key.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/Key.java @@ -130,6 +130,9 @@ public class Key implements Displayable { */ @Override public String toString() { + if (key == null) { + return ""; + } if (!getKeyCode().isEmpty()) try { return KeyCombination.valueOf(getKeyCode()).getDisplayText(); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/KeyCollectionEntry.java b/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/KeyCollectionEntry.java index f401475a34b185374fa963b5734e58c8a0e0d490..edde590a0bfdef5cafcd8d9d09fc0e09348bd249 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/KeyCollectionEntry.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/settings/keys/KeyCollectionEntry.java @@ -6,7 +6,7 @@ package de.tobias.playpad.settings.keys; * @author tobias * @since 6.0.0 */ -class KeyCollectionEntry { +public class KeyCollectionEntry { private final String name; private Key key; diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java b/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java index f4130144d24a629d7b79b048f00eabca7c654068..53e53c759b44d1faed8da6b5ee671a4444992d7e 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java @@ -3,11 +3,13 @@ package de.tobias.playpad.viewcontroller.main; import de.thecodelabs.utils.ui.NVC; import de.tobias.playpad.profile.ProfileSettings; import de.tobias.playpad.project.Project; +import de.tobias.playpad.settings.keys.Key; import de.tobias.playpad.settings.keys.KeyCollection; import de.tobias.playpad.view.main.MenuType; import javafx.scene.Node; import javafx.scene.control.MenuItem; import javafx.scene.control.Slider; +import javafx.scene.input.KeyCombination; import java.util.ResourceBundle; @@ -149,6 +151,13 @@ public abstract class MenuToolbarViewController extends NVC { */ public abstract void loadKeybinding(KeyCollection keys); + public void setKeyBindingForMenu(MenuItem menuItem, Key key) { + if (key != null && !key.getKeyCode().isEmpty()) { + KeyCombination keyCode = KeyCombination.valueOf(key.getKeyCode()); + menuItem.setAccelerator(keyCode); + } + } + /** * Setzt eine Refernce des aktuellen Projectes auf den ViewController. * diff --git a/PlayWallPlugins/PlayWallPluginAwake/src/main/java/de/tobias/playpad/awakeplugin/AwakePluginImpl.java b/PlayWallPlugins/PlayWallPluginAwake/src/main/java/de/tobias/playpad/awakeplugin/AwakePluginImpl.java index 86279c00f5d4a588c9c50b7a921acae11a879985..aa546a3218fa87200ddeb5090f9b0e7328200391 100644 --- a/PlayWallPlugins/PlayWallPluginAwake/src/main/java/de/tobias/playpad/awakeplugin/AwakePluginImpl.java +++ b/PlayWallPlugins/PlayWallPluginAwake/src/main/java/de/tobias/playpad/awakeplugin/AwakePluginImpl.java @@ -8,10 +8,10 @@ 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.MainWindowListener; import de.tobias.playpad.plugin.Module; import de.tobias.playpad.plugin.PlayPadPluginStub; import de.tobias.playpad.plugin.SettingsListener; -import de.tobias.playpad.plugin.WindowListener; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.view.main.MenuType; import de.tobias.playpad.viewcontroller.main.IMainViewController; @@ -26,7 +26,7 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; @SuppressWarnings("unused") -public class AwakePluginImpl implements PlayPadPluginStub, PluginArtifact, WindowListener<IMainViewController>, EventHandler<ActionEvent>, SettingsListener { +public class AwakePluginImpl implements PlayPadPluginStub, PluginArtifact, MainWindowListener, EventHandler<ActionEvent>, SettingsListener { private Module module; diff --git a/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java b/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java index 95863b33ae8b771ecf677e9230a870ed52157911..6ff24f83ac9122fa073da85a772a97ff6be76307 100644 --- a/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java +++ b/PlayWallPlugins/PlayWallPluginEqualizer/src/main/java/de/tobias/playpad/equalizerplugin/impl/EqualizerPluginImpl.java @@ -12,10 +12,10 @@ import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.play.Equalizeable; +import de.tobias.playpad.plugin.MainWindowListener; import de.tobias.playpad.plugin.Module; import de.tobias.playpad.plugin.PadListener; import de.tobias.playpad.plugin.PlayPadPluginStub; -import de.tobias.playpad.plugin.WindowListener; import de.tobias.playpad.view.main.MenuType; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.event.ActionEvent; @@ -28,7 +28,8 @@ import org.dom4j.DocumentException; import java.io.IOException; -public class EqualizerPluginImpl implements PlayPadPluginStub, PluginArtifact, WindowListener<IMainViewController>, EventHandler<ActionEvent>, PadListener { +@SuppressWarnings("unused") +public class EqualizerPluginImpl implements PlayPadPluginStub, PluginArtifact, MainWindowListener, EventHandler<ActionEvent>, PadListener { private Module module; 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 fab822a2958148d5e80d6a24fffbb831f8d98771..278ec6c4523045ae4784801f2b38d254efc57e0d 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 @@ -12,18 +12,31 @@ 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; +import de.tobias.playpad.settings.keys.Key; +import de.tobias.playpad.settings.keys.KeyCollectionEntry; +import de.tobias.playpad.settings.keys.KeyConflictException; @SuppressWarnings("unused") public class PlayoutLogPlugin implements PlayPadPluginStub, PluginArtifact { private Module module; + public static final String KEY_COLLECTION_PLAYOUT = "playoutlog"; + @Override public void startup(PluginDescriptor descriptor) { Localization.addResourceBundle("lang/playoutlog", getClass().getClassLoader()); module = new Module(descriptor.getName(), descriptor.getArtifactId()); + // Register Key Mapping + KeyCollectionEntry keyCollectionEntry = new KeyCollectionEntry("Playout Log", new Key(KEY_COLLECTION_PLAYOUT)); + try { + PlayPadPlugin.getInstance().getGlobalSettings().getKeyCollection().register(keyCollectionEntry); + } catch (KeyConflictException e) { + Logger.error(e); + } + PlayoutLogStatusIconListener playoutLogStatusIconListener = new PlayoutLogStatusIconListener(); PlayPadPlugin.getInstance().addMainViewListener(new MainViewControllerListener()); diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/MainViewControllerListener.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/MainViewControllerListener.java index acf8d58b5ec0edcbc7b6a258d8bcc731e7fce75c..25925457e94eb9cbe3a89c2d1d0f32fdac06c50d 100644 --- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/MainViewControllerListener.java +++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/MainViewControllerListener.java @@ -2,13 +2,17 @@ package de.tobias.playpad.plugin.playout.viewcontroller; import de.thecodelabs.utils.ui.NVCStage; import de.thecodelabs.utils.util.Localization; -import de.tobias.playpad.plugin.WindowListener; +import de.tobias.playpad.PlayPadPlugin; +import de.tobias.playpad.plugin.MainWindowListener; +import de.tobias.playpad.plugin.playout.PlayoutLogPlugin; import de.tobias.playpad.plugin.playout.Strings; +import de.tobias.playpad.settings.keys.KeyCollection; import de.tobias.playpad.view.main.MenuType; import de.tobias.playpad.viewcontroller.main.IMainViewController; +import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; import javafx.scene.control.MenuItem; -public class MainViewControllerListener implements WindowListener<IMainViewController> { +public class MainViewControllerListener implements MainWindowListener { private MenuItem menuItem; @Override @@ -27,6 +31,16 @@ public class MainViewControllerListener implements WindowListener<IMainViewContr } newToolbar.addMenuItem(menuItem, MenuType.EXTENSION); + loadMenuKeyBinding(); }); } + + @Override + public void loadMenuKeyBinding() { + final KeyCollection keyCollection = PlayPadPlugin.getInstance().getGlobalSettings().getKeyCollection(); + final MenuToolbarViewController menuToolbarController = PlayPadPlugin.getInstance().getMainViewController().getMenuToolbarController(); + menuToolbarController.setKeyBindingForMenu(menuItem, keyCollection.getKey(PlayoutLogPlugin.KEY_COLLECTION_PLAYOUT)); + + menuItem.setDisable(false); + } } 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 index 577d0a4c1c1ebd3a1814abf76610f278ea11bff5..45dbe8146c216b3185b387e38b0540d677784127 100644 --- 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 @@ -2,12 +2,12 @@ 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.MainWindowListener; 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> { +public class PlayoutLogStatusIconListener implements LogSessionListener, MainWindowListener { private FontIcon logIcon; @Override