Add support for popups to navigation button

- Add support for popup map to navigation button
- Re-add popup to ScreenshotPlugin

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-03-09 11:58:05 +01:00
parent f1d5c4ef72
commit 9a54c75113
4 changed files with 55 additions and 0 deletions

View File

@@ -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);

View File

@@ -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
.<String, Runnable>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);

View File

@@ -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);
});

View File

@@ -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<PluginPanel> panel;
/**
* Map of key-value pairs for setting the popup menu
*/
private Map<String, Runnable> popup;
}