diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java index 76c1a7bdbd..a90f2a73c3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java @@ -36,6 +36,8 @@ import javax.swing.GroupLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; import javax.swing.LayoutStyle; import javax.swing.SwingUtilities; import javax.swing.event.HyperlinkEvent; @@ -234,6 +236,20 @@ public class InfoPanel extends PluginPanel button.addActionListener(e -> event.getButton().getOnClick().run()); } + if (event.getButton().getPopup() != null) + { + final JPopupMenu popupMenu = new JPopupMenu(); + + event.getButton().getPopup().forEach((name, callback) -> + { + final JMenuItem menuItem = new JMenuItem(name); + menuItem.addActionListener((e) -> callback.run()); + popupMenu.add(menuItem); + }); + + button.setComponentPopupMenu(popupMenu); + } + event.getButton().setOnSelect(() -> button.setSelected(event.getButton().isSelected())); titleBar.addComponent(event.getButton(), button); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java index d8f37c9556..ab776dbb93 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java @@ -25,9 +25,11 @@ package net.runelite.client.plugins.screenshot; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableMap; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.Color; +import java.awt.Desktop; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Toolkit; @@ -153,6 +155,21 @@ public class ScreenshotPlugin extends Plugin .onClick(() -> takeScreenshot( TIME_FORMAT.format(new Date()), client.getLocalPlayer() != null)) + .popup(ImmutableMap + .builder() + .put("Open screenshot folder...", () -> + { + try + { + Desktop.getDesktop().open(RuneLite.SCREENSHOT_DIR); + } + catch (IOException ex) + { + log.warn("Error opening screenshot dir", ex); + + } + }) + .build()) .build(); titleToolbar.addNavigation(titleBarButton); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index d9b518849b..6053663f59 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -49,7 +49,9 @@ import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; +import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; import javax.swing.JRootPane; import javax.swing.SwingUtilities; import lombok.Getter; @@ -274,6 +276,20 @@ public class ClientUI button.addActionListener(e -> event.getButton().getOnClick().run()); } + if (event.getButton().getPopup() != null) + { + final JPopupMenu popupMenu = new JPopupMenu(); + + event.getButton().getPopup().forEach((name, callback) -> + { + final JMenuItem menuItem = new JMenuItem(name); + menuItem.addActionListener((e) -> callback.run()); + popupMenu.add(menuItem); + }); + + button.setComponentPopupMenu(popupMenu); + } + event.getButton().setOnSelect(() -> button.setSelected(event.getButton().isSelected())); titleToolbar.addComponent(event.getButton(), button); }); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/NavigationButton.java b/runelite-client/src/main/java/net/runelite/client/ui/NavigationButton.java index 8ebb330b48..608f365455 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/NavigationButton.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/NavigationButton.java @@ -26,6 +26,7 @@ package net.runelite.client.ui; import java.awt.image.BufferedImage; +import java.util.Map; import java.util.function.Supplier; import lombok.Builder; import lombok.Data; @@ -73,4 +74,9 @@ public class NavigationButton * Supplier for plugin panel, used when expanding and contracting sidebar. */ private Supplier panel; + + /** + * Map of key-value pairs for setting the popup menu + */ + private Map popup; }