From 59caa6bcac15af1ef9af3fc945c139f7df51d216 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 14 Jan 2019 19:52:53 -0500 Subject: [PATCH] Add support for Configuration overlay menus --- .../java/net/runelite/api/MenuAction.java | 4 +++ .../client/plugins/config/ConfigPanel.java | 12 +++++++ .../client/plugins/config/ConfigPlugin.java | 34 +++++++++++++++++++ .../client/plugins/config/PluginListItem.java | 11 ++++++ .../client/ui/overlay/OverlayManager.java | 2 ++ 5 files changed, 63 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/MenuAction.java b/runelite-api/src/main/java/net/runelite/api/MenuAction.java index 09eaec6f8b..cafbbe7706 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuAction.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuAction.java @@ -264,6 +264,10 @@ public enum MenuAction * Menu action injected by runelite for overlay menu items. */ RUNELITE_OVERLAY(1501), + /** + * Menu action for configuring runelite overlays. + */ + RUNELITE_OVERLAY_CONFIG(1502), FOLLOW(2046), TRADE(2047), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index d2b0624301..c98a03f1b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -656,6 +656,18 @@ public class ConfigPanel extends PluginPanel configManager.setConfiguration(RUNELITE_GROUP_NAME, PINNED_PLUGINS_CONFIG_KEY, value); } + void openConfigurationPanel(String configGroup) + { + for (PluginListItem pluginListItem : pluginList) + { + if (pluginListItem.getName().equals(configGroup)) + { + openGroupConfigPanel(pluginListItem, pluginListItem.getConfig(), pluginListItem.getConfigDescriptor()); + break; + } + } + } + @Override public void onActivate() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java index 0335f062fd..2004675a05 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPlugin.java @@ -28,16 +28,21 @@ import java.awt.image.BufferedImage; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import javax.swing.SwingUtilities; +import net.runelite.api.MenuAction; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.events.PluginChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginManager; import net.runelite.client.ui.ClientToolbar; +import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.NavigationButton; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.util.ImageUtil; @PluginDescriptor( @@ -47,6 +52,9 @@ import net.runelite.client.util.ImageUtil; ) public class ConfigPlugin extends Plugin { + @Inject + private ClientUI clientUI; + @Inject private ClientToolbar clientToolbar; @@ -96,4 +104,30 @@ public class ConfigPlugin extends Plugin { SwingUtilities.invokeLater(configPanel::refreshPluginList); } + + @Subscribe + public void onOverlayMenuClicked(OverlayMenuClicked overlayMenuClicked) + { + OverlayMenuEntry overlayMenuEntry = overlayMenuClicked.getEntry(); + if (overlayMenuEntry.getMenuAction() == MenuAction.RUNELITE_OVERLAY_CONFIG) + { + Overlay overlay = overlayMenuClicked.getOverlay(); + Plugin plugin = overlay.getPlugin(); + if (plugin == null) + { + return; + } + + // Expand config panel for plugin + PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class); + SwingUtilities.invokeLater(() -> + { + if (!navButton.isSelected()) + { + navButton.getOnSelect().run(); + } + configPanel.openConfigurationPanel(descriptor.name()); + }); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java index e79dfda8e8..64b97a6ab8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/PluginListItem.java @@ -36,6 +36,7 @@ import javax.annotation.Nullable; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; +import lombok.AccessLevel; import lombok.Getter; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigDescriptor; @@ -63,6 +64,14 @@ class PluginListItem extends JPanel @Nullable private final Plugin plugin; + @Nullable + @Getter(AccessLevel.PACKAGE) + private final Config config; + + @Nullable + @Getter(AccessLevel.PACKAGE) + private final ConfigDescriptor configDescriptor; + @Getter private final String name; @@ -132,6 +141,8 @@ class PluginListItem extends JPanel { this.configPanel = configPanel; this.plugin = plugin; + this.config = config; + this.configDescriptor = configDescriptor; this.name = name; this.description = description; Collections.addAll(keywords, name.toLowerCase().split(" ")); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index af07a188d7..173e31aa4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -55,6 +55,8 @@ import net.runelite.client.events.PluginChanged; @Singleton public class OverlayManager { + public static final String OPTION_CONFIGURE = "Configure"; + private static final String OVERLAY_CONFIG_PREFERRED_LOCATION = "_preferredLocation"; private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition"; private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize";