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.ImageIcon;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.LayoutStyle; import javax.swing.LayoutStyle;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent;
@@ -234,6 +236,20 @@ public class InfoPanel extends PluginPanel
button.addActionListener(e -> event.getButton().getOnClick().run()); 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())); event.getButton().setOnSelect(() -> button.setSelected(event.getButton().isSelected()));
titleBar.addComponent(event.getButton(), button); titleBar.addComponent(event.getButton(), button);

View File

@@ -25,9 +25,11 @@
package net.runelite.client.plugins.screenshot; package net.runelite.client.plugins.screenshot;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.awt.Color; import java.awt.Color;
import java.awt.Desktop;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Toolkit; import java.awt.Toolkit;
@@ -153,6 +155,21 @@ public class ScreenshotPlugin extends Plugin
.onClick(() -> takeScreenshot( .onClick(() -> takeScreenshot(
TIME_FORMAT.format(new Date()), TIME_FORMAT.format(new Date()),
client.getLocalPlayer() != null)) 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(); .build();
titleToolbar.addNavigation(titleBarButton); titleToolbar.addNavigation(titleBarButton);

View File

@@ -49,7 +49,9 @@ import javax.swing.ImageIcon;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRootPane; import javax.swing.JRootPane;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import lombok.Getter; import lombok.Getter;
@@ -274,6 +276,20 @@ public class ClientUI
button.addActionListener(e -> event.getButton().getOnClick().run()); 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())); event.getButton().setOnSelect(() -> button.setSelected(event.getButton().isSelected()));
titleToolbar.addComponent(event.getButton(), button); titleToolbar.addComponent(event.getButton(), button);
}); });

View File

@@ -26,6 +26,7 @@
package net.runelite.client.ui; package net.runelite.client.ui;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@@ -73,4 +74,9 @@ public class NavigationButton
* Supplier for plugin panel, used when expanding and contracting sidebar. * Supplier for plugin panel, used when expanding and contracting sidebar.
*/ */
private Supplier<PluginPanel> panel; private Supplier<PluginPanel> panel;
/**
* Map of key-value pairs for setting the popup menu
*/
private Map<String, Runnable> popup;
} }