From f9d380b5667f41cdcd732b2b1cb7dc8f36d474a5 Mon Sep 17 00:00:00 2001 From: tobias <tobias@thecodedev.de> Date: Tue, 10 Sep 2019 22:20:48 +0200 Subject: [PATCH] Add keyboard mapping for custom menu items; implement keyboard mapping for PlayOut Log menu item --- .../java/de/tobias/playpad/PlayPadImpl.java | 9 +++++---- .../main/BasicMenuToolbarViewController.java | 14 ++++---------- .../main/MainViewController.java | 4 ++++ ....scala => KeyboardDefaultMappingTask.scala} | 4 ++-- .../KeyboardLoadingMappingTask.scala | 17 +++++++++++++++++ .../main/java/de/tobias/playpad/PlayPad.java | 6 ++++-- .../playpad/plugin/MainWindowListener.java | 9 +++++++++ .../tobias/playpad/plugin/WindowListener.java | 2 +- .../de/tobias/playpad/settings/keys/Key.java | 3 +++ .../settings/keys/KeyCollectionEntry.java | 2 +- .../main/MenuToolbarViewController.java | 9 +++++++++ .../playpad/awakeplugin/AwakePluginImpl.java | 4 ++-- .../impl/EqualizerPluginImpl.java | 5 +++-- .../plugin/playout/PlayoutLogPlugin.java | 13 +++++++++++++ .../MainViewControllerListener.java | 18 ++++++++++++++++-- .../PlayoutLogStatusIconListener.java | 4 ++-- 16 files changed, 95 insertions(+), 28 deletions(-) rename PlayWall/src/main/scala/de/tobias/playpad/initialize/{KeyboardMappingLoadingTask.scala => KeyboardDefaultMappingTask.scala} (83%) create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/initialize/KeyboardLoadingMappingTask.scala create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/plugin/MainWindowListener.java diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index dde9fa64..f3f434f5 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 1257e238..83735e21 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 fa81a081..bfe085df 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 01725445..cf64b19a 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 00000000..13c7e127 --- /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 7b146c29..64506fc1 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 00000000..ed330ccf --- /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 e9174ce9..a45045f7 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 90791abb..b35139b5 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 f401475a..edde590a 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 f4130144..53e53c75 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 86279c00..aa546a32 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 95863b33..6ff24f83 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 fab822a2..278ec6c4 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 acf8d58b..25925457 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 577d0a4c..45dbe814 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 -- GitLab