Make plugins work with new title toolbar
- Change info panel to support new hooks - Change plugins to use NavigationButton for adding buttons to titleToolbar Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -25,22 +25,20 @@
|
|||||||
package net.runelite.client.plugins.account;
|
package net.runelite.client.plugins.account;
|
||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.events.SessionClose;
|
import net.runelite.api.events.SessionClose;
|
||||||
|
import net.runelite.api.events.SessionOpen;
|
||||||
import net.runelite.client.account.AccountSession;
|
import net.runelite.client.account.AccountSession;
|
||||||
import net.runelite.client.account.SessionManager;
|
import net.runelite.client.account.SessionManager;
|
||||||
import net.runelite.api.events.SessionOpen;
|
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.NavigationButton;
|
||||||
import net.runelite.client.ui.TitleToolbar;
|
import net.runelite.client.ui.TitleToolbar;
|
||||||
import net.runelite.client.util.RunnableExceptionLogger;
|
import net.runelite.client.util.RunnableExceptionLogger;
|
||||||
|
|
||||||
@@ -55,13 +53,13 @@ public class AccountPlugin extends Plugin
|
|||||||
private SessionManager sessionManager;
|
private SessionManager sessionManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClientUI ui;
|
private TitleToolbar titleToolbar;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ScheduledExecutorService executor;
|
private ScheduledExecutorService executor;
|
||||||
|
|
||||||
private JButton loginButton;
|
private NavigationButton loginButton;
|
||||||
private JButton logoutButton;
|
private NavigationButton logoutButton;
|
||||||
|
|
||||||
private static final BufferedImage LOGIN_IMAGE, LOGOUT_IMAGE;
|
private static final BufferedImage LOGIN_IMAGE, LOGOUT_IMAGE;
|
||||||
|
|
||||||
@@ -84,47 +82,45 @@ public class AccountPlugin extends Plugin
|
|||||||
@Override
|
@Override
|
||||||
protected void startUp() throws Exception
|
protected void startUp() throws Exception
|
||||||
{
|
{
|
||||||
loginButton = new JButton();
|
loginButton = NavigationButton.builder()
|
||||||
loginButton.setToolTipText("Login");
|
.icon(LOGIN_IMAGE)
|
||||||
loginButton.addActionListener(this::loginClick);
|
.tooltip("Login")
|
||||||
|
.onClick(this::loginClick)
|
||||||
|
.build();
|
||||||
|
|
||||||
logoutButton = new JButton();
|
logoutButton = NavigationButton.builder()
|
||||||
logoutButton.setToolTipText("Logout");
|
.icon(LOGOUT_IMAGE)
|
||||||
logoutButton.addActionListener(this::logoutClick);
|
.tooltip("Logout")
|
||||||
|
.onClick(this::logoutClick)
|
||||||
|
.build();
|
||||||
|
|
||||||
addAndRemoveButtons();
|
addAndRemoveButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addAndRemoveButtons()
|
private void addAndRemoveButtons()
|
||||||
{
|
{
|
||||||
TitleToolbar tb = ui.getTitleToolbar();
|
titleToolbar.removeNavigation(loginButton);
|
||||||
tb.remove(loginButton);
|
titleToolbar.removeNavigation(logoutButton);
|
||||||
tb.remove(logoutButton);
|
titleToolbar.addNavigation(sessionManager.getAccountSession() == null
|
||||||
if (sessionManager.getAccountSession() == null)
|
? loginButton
|
||||||
{
|
: logoutButton);
|
||||||
tb.addButton(loginButton, LOGIN_IMAGE, LOGIN_IMAGE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tb.addButton(logoutButton, LOGOUT_IMAGE, LOGOUT_IMAGE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void shutDown() throws Exception
|
protected void shutDown() throws Exception
|
||||||
{
|
{
|
||||||
ui.getTitleToolbar().remove(loginButton);
|
titleToolbar.removeNavigation(loginButton);
|
||||||
ui.getTitleToolbar().remove(logoutButton);
|
titleToolbar.removeNavigation(logoutButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loginClick(ActionEvent ae)
|
private void loginClick()
|
||||||
{
|
{
|
||||||
executor.execute(RunnableExceptionLogger.wrap(sessionManager::login));
|
executor.execute(RunnableExceptionLogger.wrap(sessionManager::login));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logoutClick(ActionEvent ae)
|
private void logoutClick()
|
||||||
{
|
{
|
||||||
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(ui,
|
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(null,
|
||||||
"Are you sure you want to logout?", "Logout Confirmation",
|
"Are you sure you want to logout?", "Logout Confirmation",
|
||||||
JOptionPane.YES_NO_OPTION))
|
JOptionPane.YES_NO_OPTION))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,15 +26,16 @@ package net.runelite.client.plugins.info;
|
|||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import java.awt.Font;
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.awt.Font;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.GroupLayout;
|
import javax.swing.GroupLayout;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.JButton;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
|
||||||
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;
|
||||||
@@ -46,22 +47,28 @@ import net.runelite.client.RuneLiteProperties;
|
|||||||
import net.runelite.client.account.SessionManager;
|
import net.runelite.client.account.SessionManager;
|
||||||
import net.runelite.client.config.RuneLiteConfig;
|
import net.runelite.client.config.RuneLiteConfig;
|
||||||
import net.runelite.client.events.ClientUILoaded;
|
import net.runelite.client.events.ClientUILoaded;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.events.TitleToolbarButtonAdded;
|
||||||
|
import net.runelite.client.events.TitleToolbarButtonRemoved;
|
||||||
|
import net.runelite.client.ui.ClientTitleToolbar;
|
||||||
import net.runelite.client.ui.FontManager;
|
import net.runelite.client.ui.FontManager;
|
||||||
import net.runelite.client.ui.PluginPanel;
|
import net.runelite.client.ui.PluginPanel;
|
||||||
|
import net.runelite.client.ui.TitleToolbar;
|
||||||
import net.runelite.client.util.RunnableExceptionLogger;
|
import net.runelite.client.util.RunnableExceptionLogger;
|
||||||
|
import net.runelite.client.util.SwingUtil;
|
||||||
|
import org.pushingpixels.substance.internal.SubstanceSynapse;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class InfoPanel extends PluginPanel
|
public class InfoPanel extends PluginPanel
|
||||||
{
|
{
|
||||||
private final static String RUNELITE_LOGIN = "https://runelite_login/";
|
private static final int TITLEBAR_SIZE = 23;
|
||||||
|
private static final String RUNELITE_LOGIN = "https://runelite_login/";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Nullable
|
@Nullable
|
||||||
private Client client;
|
private Client client;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClientUI clientUI;
|
private TitleToolbar titleToolbar;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private RuneLiteConfig runeliteConfig;
|
private RuneLiteConfig runeliteConfig;
|
||||||
@@ -79,9 +86,7 @@ public class InfoPanel extends PluginPanel
|
|||||||
private ScheduledExecutorService executor;
|
private ScheduledExecutorService executor;
|
||||||
|
|
||||||
private final GroupLayout layout = new GroupLayout(this);
|
private final GroupLayout layout = new GroupLayout(this);
|
||||||
|
private final ClientTitleToolbar titleBar = new ClientTitleToolbar();
|
||||||
private final JPanel toolbarPanelPlaceholder = new JPanel();
|
|
||||||
|
|
||||||
private final JLabel usernameHeader = new JLabel();
|
private final JLabel usernameHeader = new JLabel();
|
||||||
private final JRichTextPane username = new JRichTextPane();
|
private final JRichTextPane username = new JRichTextPane();
|
||||||
|
|
||||||
@@ -90,8 +95,7 @@ public class InfoPanel extends PluginPanel
|
|||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
|
|
||||||
final Font smallFont = FontManager.getRunescapeSmallFont();
|
final Font smallFont = FontManager.getRunescapeSmallFont();
|
||||||
|
titleBar.setVisible(false);
|
||||||
toolbarPanelPlaceholder.setVisible(false);
|
|
||||||
|
|
||||||
final JLabel runeliteVersionHeader = new JLabel("RuneLite version");
|
final JLabel runeliteVersionHeader = new JLabel("RuneLite version");
|
||||||
runeliteVersionHeader.setFont(smallFont);
|
runeliteVersionHeader.setFont(smallFont);
|
||||||
@@ -132,7 +136,7 @@ public class InfoPanel extends PluginPanel
|
|||||||
setBorder(BorderFactory.createEmptyBorder(2, 6, 6, 6));
|
setBorder(BorderFactory.createEmptyBorder(2, 6, 6, 6));
|
||||||
|
|
||||||
layout.setVerticalGroup(layout.createSequentialGroup()
|
layout.setVerticalGroup(layout.createSequentialGroup()
|
||||||
.addComponent(toolbarPanelPlaceholder)
|
.addComponent(titleBar)
|
||||||
.addGap(3)
|
.addGap(3)
|
||||||
.addGroup(layout.createParallelGroup()
|
.addGroup(layout.createParallelGroup()
|
||||||
.addComponent(runeliteVersionHeader)
|
.addComponent(runeliteVersionHeader)
|
||||||
@@ -152,16 +156,15 @@ public class InfoPanel extends PluginPanel
|
|||||||
layout.setHorizontalGroup(layout.createParallelGroup()
|
layout.setHorizontalGroup(layout.createParallelGroup()
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(toolbarPanelPlaceholder)
|
.addComponent(titleBar))
|
||||||
).addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(runeliteVersionHeader)
|
.addComponent(runeliteVersionHeader)
|
||||||
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(runescapeVersionHeader)
|
.addComponent(runescapeVersionHeader))
|
||||||
).addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(runeliteVersion)
|
.addComponent(runeliteVersion)
|
||||||
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(runescapeVersion)
|
.addComponent(runescapeVersion))
|
||||||
)
|
|
||||||
.addComponent(usernameHeader)
|
.addComponent(usernameHeader)
|
||||||
.addComponent(username)
|
.addComponent(username)
|
||||||
.addComponent(issueLink)
|
.addComponent(issueLink)
|
||||||
@@ -178,24 +181,12 @@ public class InfoPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
private void onClientUILoaded(ClientUILoaded e)
|
public void onClientUILoaded(ClientUILoaded e)
|
||||||
{
|
{
|
||||||
// Add the title toolbar to the infopanel if the custom chrome is disabled
|
// Add the title toolbar to the infopanel if the custom chrome is disabled
|
||||||
if (!runeliteConfig.enableCustomChrome())
|
if (!runeliteConfig.enableCustomChrome())
|
||||||
{
|
{
|
||||||
try
|
titleBar.setVisible(true);
|
||||||
{
|
|
||||||
SwingUtilities.invokeAndWait(() ->
|
|
||||||
{
|
|
||||||
JPanel toolbar = clientUI.getTitleToolbar();
|
|
||||||
layout.replace(toolbarPanelPlaceholder, toolbar);
|
|
||||||
toolbar.revalidate();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (InterruptedException | InvocationTargetException ex)
|
|
||||||
{
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,8 +203,58 @@ public class InfoPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
private void onSessionClose(SessionClose e)
|
public void onSessionClose(SessionClose e)
|
||||||
{
|
{
|
||||||
setNotLoggedIn();
|
setNotLoggedIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onTitleToolbarButtonAdded(TitleToolbarButtonAdded event)
|
||||||
|
{
|
||||||
|
if (runeliteConfig.enableCustomChrome())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SwingUtilities.invokeLater(() ->
|
||||||
|
{
|
||||||
|
|
||||||
|
final int iconSize = TITLEBAR_SIZE - 6;
|
||||||
|
final BufferedImage scaledImage = SwingUtil.resizeImage(event.getButton().getIcon(), iconSize, iconSize);
|
||||||
|
|
||||||
|
final JButton button = new JButton();
|
||||||
|
button.putClientProperty(SubstanceSynapse.FLAT_LOOK, Boolean.TRUE);
|
||||||
|
button.setName(event.getButton().getName());
|
||||||
|
button.setToolTipText(event.getButton().getTooltip());
|
||||||
|
button.setIcon(new ImageIcon(scaledImage));
|
||||||
|
button.setRolloverIcon(new ImageIcon(SwingUtil.createInvertedImage(scaledImage)));
|
||||||
|
|
||||||
|
if (event.getButton().getOnClick() != null)
|
||||||
|
{
|
||||||
|
button.addActionListener(e -> event.getButton().getOnClick().run());
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getButton().setOnSelect(() -> button.setSelected(event.getButton().isSelected()));
|
||||||
|
|
||||||
|
titleBar.addComponent(event.getButton(), button);
|
||||||
|
titleBar.revalidate();
|
||||||
|
titleBar.repaint();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onTitleToolbarButtonRemoved(TitleToolbarButtonRemoved event)
|
||||||
|
{
|
||||||
|
if (runeliteConfig.enableCustomChrome())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SwingUtilities.invokeLater(() ->
|
||||||
|
{
|
||||||
|
titleBar.removeComponent(event.getButton());
|
||||||
|
titleBar.revalidate();
|
||||||
|
titleBar.repaint();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,15 +28,12 @@ import com.google.common.annotations.VisibleForTesting;
|
|||||||
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;
|
||||||
import java.awt.TrayIcon;
|
import java.awt.TrayIcon;
|
||||||
import java.awt.datatransfer.Clipboard;
|
import java.awt.datatransfer.Clipboard;
|
||||||
import java.awt.datatransfer.StringSelection;
|
import java.awt.datatransfer.StringSelection;
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -51,10 +48,6 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JMenuItem;
|
|
||||||
import javax.swing.JPopupMenu;
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
@@ -79,6 +72,8 @@ import net.runelite.client.plugins.screenshot.imgur.ImageUploadRequest;
|
|||||||
import net.runelite.client.plugins.screenshot.imgur.ImageUploadResponse;
|
import net.runelite.client.plugins.screenshot.imgur.ImageUploadResponse;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.ClientUI;
|
||||||
import net.runelite.client.ui.FontManager;
|
import net.runelite.client.ui.FontManager;
|
||||||
|
import net.runelite.client.ui.NavigationButton;
|
||||||
|
import net.runelite.client.ui.TitleToolbar;
|
||||||
import net.runelite.client.ui.overlay.OverlayRenderer;
|
import net.runelite.client.ui.overlay.OverlayRenderer;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
import net.runelite.http.api.RuneLiteAPI;
|
import net.runelite.http.api.RuneLiteAPI;
|
||||||
@@ -124,13 +119,16 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private ClientUI clientUi;
|
private ClientUI clientUi;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private TitleToolbar titleToolbar;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private OverlayRenderer overlayRenderer;
|
private OverlayRenderer overlayRenderer;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ScheduledExecutorService executor;
|
private ScheduledExecutorService executor;
|
||||||
|
|
||||||
private JButton titleBarButton;
|
private NavigationButton titleBarButton;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
ScreenshotConfig getConfig(ConfigManager configManager)
|
ScreenshotConfig getConfig(ConfigManager configManager)
|
||||||
@@ -140,66 +138,24 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void startUp() throws Exception
|
protected void startUp() throws Exception
|
||||||
{
|
|
||||||
addButtonToTitleBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void shutDown() throws Exception
|
|
||||||
{
|
|
||||||
removeButtonFromTitlebar();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addButtonToTitleBar()
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BufferedImage iconImage;
|
BufferedImage iconImage;
|
||||||
BufferedImage invertedIconImage;
|
|
||||||
synchronized (ImageIO.class)
|
synchronized (ImageIO.class)
|
||||||
{
|
{
|
||||||
iconImage = ImageIO.read(ScreenshotPlugin.class.getResourceAsStream("screenshot.png"));
|
iconImage = ImageIO.read(ScreenshotPlugin.class.getResourceAsStream("screenshot.png"));
|
||||||
invertedIconImage = ImageIO.read(ScreenshotPlugin.class.getResourceAsStream("screenshot_inverted.png"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SwingUtilities.invokeLater(() ->
|
titleBarButton = NavigationButton.builder()
|
||||||
{
|
.tooltip("Take screenshot")
|
||||||
titleBarButton = new JButton();
|
.icon(iconImage)
|
||||||
titleBarButton.setToolTipText("Take screenshot");
|
.onClick(() -> takeScreenshot(
|
||||||
titleBarButton.addMouseListener(new MouseAdapter()
|
TIME_FORMAT.format(new Date()),
|
||||||
{
|
client.getLocalPlayer() != null))
|
||||||
@Override
|
.build();
|
||||||
public void mouseClicked(MouseEvent e)
|
|
||||||
{
|
|
||||||
super.mouseClicked(e);
|
|
||||||
|
|
||||||
if (SwingUtilities.isLeftMouseButton(e))
|
titleToolbar.addNavigation(titleBarButton);
|
||||||
{
|
|
||||||
takeScreenshot(TIME_FORMAT.format(new Date()), client.getLocalPlayer() != null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
JPopupMenu popupMenu = new JPopupMenu();
|
|
||||||
|
|
||||||
JMenuItem folderItem = new JMenuItem("Open screenshot folder...");
|
|
||||||
folderItem.addActionListener(e ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Desktop.getDesktop().open(RuneLite.SCREENSHOT_DIR);
|
|
||||||
}
|
|
||||||
catch (IOException ex)
|
|
||||||
{
|
|
||||||
log.warn("Error opening screenshot directory", ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
popupMenu.add(folderItem);
|
|
||||||
|
|
||||||
titleBarButton.setComponentPopupMenu(popupMenu);
|
|
||||||
|
|
||||||
clientUi.getTitleToolbar().addButton(titleBarButton, iconImage, invertedIconImage);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
@@ -207,12 +163,10 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeButtonFromTitlebar()
|
@Override
|
||||||
|
protected void shutDown() throws Exception
|
||||||
{
|
{
|
||||||
SwingUtilities.invokeLater(() ->
|
titleToolbar.removeNavigation(titleBarButton);
|
||||||
{
|
|
||||||
clientUi.getTitleToolbar().remove(titleBarButton);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|||||||
Reference in New Issue
Block a user