runelite-client: convert nav panel to a toolbar

This commit is contained in:
Adam
2017-07-23 12:00:27 -04:00
parent 9a5a7a44f9
commit f9b68bc3bd
9 changed files with 108 additions and 85 deletions

View File

@@ -41,7 +41,7 @@ import net.runelite.client.events.SessionOpen;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.ClientUI;
import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.NavigationPanel; import net.runelite.client.ui.PluginToolbar;
import net.runelite.client.util.RunnableExceptionLogger; import net.runelite.client.util.RunnableExceptionLogger;
import net.runelite.http.api.account.AccountClient; import net.runelite.http.api.account.AccountClient;
import net.runelite.http.api.account.OAuthResponse; import net.runelite.http.api.account.OAuthResponse;
@@ -76,7 +76,7 @@ public class AccountPlugin extends Plugin
loginButton.getButton().addActionListener(this::loginClick); loginButton.getButton().addActionListener(this::loginClick);
logoutButton.getButton().addActionListener(this::logoutClick); logoutButton.getButton().addActionListener(this::logoutClick);
ui.getNavigationPanel().addNavigation(loginButton); ui.getPluginToolbar().addNavigation(loginButton);
} }
@Override @Override
@@ -111,7 +111,7 @@ public class AccountPlugin extends Plugin
runelite.deleteSession(); // delete saved session file runelite.deleteSession(); // delete saved session file
// Replace logout nav button with login // Replace logout nav button with login
NavigationPanel navigationPanel = ui.getNavigationPanel(); PluginToolbar navigationPanel = ui.getPluginToolbar();
navigationPanel.removeNavigation(logoutButton); navigationPanel.removeNavigation(logoutButton);
navigationPanel.addNavigation(loginButton); navigationPanel.addNavigation(loginButton);
} }
@@ -199,7 +199,7 @@ public class AccountPlugin extends Plugin
private void replaceLoginWithLogout() private void replaceLoginWithLogout()
{ {
// Replace login nav button with logout // Replace login nav button with logout
NavigationPanel navigationPanel = ui.getNavigationPanel(); PluginToolbar navigationPanel = ui.getPluginToolbar();
navigationPanel.removeNavigation(loginButton); navigationPanel.removeNavigation(loginButton);
navigationPanel.addNavigation(logoutButton); navigationPanel.addNavigation(logoutButton);
} }

View File

@@ -34,16 +34,25 @@ import java.awt.event.FocusListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import javax.swing.*; import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import net.runelite.client.config.ConfigDescriptor; import net.runelite.client.config.ConfigDescriptor;
import net.runelite.client.config.ConfigItemDescriptor; import net.runelite.client.config.ConfigItemDescriptor;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.PluginPanel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -68,12 +77,6 @@ public class ConfigPanel extends PluginPanel
setVisible(true); setVisible(true);
} }
@Override
public boolean equals(Object other)
{
return other.getClass() == this.getClass();
}
public void init() public void init()
{ {
add(createConfigPanel(), BorderLayout.NORTH); add(createConfigPanel(), BorderLayout.NORTH);

View File

@@ -24,7 +24,6 @@
*/ */
package net.runelite.client.plugins.config; package net.runelite.client.plugins.config;
import java.awt.event.ActionEvent;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
@@ -46,14 +45,12 @@ public class ConfigPlugin extends Plugin
@Override @Override
protected void startUp() throws Exception protected void startUp() throws Exception
{ {
navButton = new NavigationButton("Configuration"); navButton = new NavigationButton("Configuration", this::buildPanel);
navButton.getButton().addActionListener(this::setPluginPanel);
ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("config_icon.png"))); ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("config_icon.png")));
navButton.getButton().setIcon(icon); navButton.getButton().setIcon(icon);
ui.getNavigationPanel().addNavigation(navButton); ui.getPluginToolbar().addNavigation(navButton);
} }
@Override @Override
@@ -61,12 +58,11 @@ public class ConfigPlugin extends Plugin
{ {
} }
private void setPluginPanel(ActionEvent ae) private ConfigPanel buildPanel()
{ {
ConfigPanel panel = new ConfigPanel(); ConfigPanel panel = new ConfigPanel();
panel.init(); panel.init();
return panel;
ui.expand(panel);
} }
} }

View File

@@ -26,7 +26,6 @@ package net.runelite.client.plugins.devtools;
import java.awt.Font; import java.awt.Font;
import java.awt.GraphicsEnvironment; import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
@@ -62,14 +61,12 @@ public class DevTools extends Plugin
protected void startUp() throws Exception protected void startUp() throws Exception
{ {
panel = new DevToolsPanel(this); panel = new DevToolsPanel(this);
navButton = new NavigationButton("DevTools"); navButton = new NavigationButton("DevTools", () -> panel);
navButton.getButton().addActionListener(this::setPluginPanel);
ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("devtools_icon.png"))); ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("devtools_icon.png")));
navButton.getButton().setIcon(icon); navButton.getButton().setIcon(icon);
ui.getNavigationPanel().addNavigation(navButton); ui.getPluginToolbar().addNavigation(navButton);
font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/runescape.ttf")); font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/runescape.ttf"));
@@ -89,11 +86,6 @@ public class DevTools extends Plugin
return overlay; return overlay;
} }
private void setPluginPanel(ActionEvent e)
{
ui.expand(panel);
}
Font getFont() Font getFont()
{ {
return font; return font;

View File

@@ -25,7 +25,6 @@
package net.runelite.client.plugins.hiscore; package net.runelite.client.plugins.hiscore;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import java.awt.event.ActionEvent;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
@@ -52,15 +51,13 @@ public class Hiscore extends Plugin
@Override @Override
protected void startUp() throws Exception protected void startUp() throws Exception
{ {
navButton = new NavigationButton("Hiscore"); navButton = new NavigationButton("Hiscore", () -> hiscorePanel);
hiscorePanel = new HiscorePanel(runeLite); hiscorePanel = new HiscorePanel(runeLite);
navButton.getButton().addActionListener(this::setPluginPanel);
ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("hiscore.gif"))); ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("hiscore.gif")));
navButton.getButton().setIcon(icon); navButton.getButton().setIcon(icon);
ui.getNavigationPanel().addNavigation(navButton); ui.getPluginToolbar().addNavigation(navButton);
runeLite.getMenuManager().addPlayerMenuItem(LOOKUP); runeLite.getMenuManager().addPlayerMenuItem(LOOKUP);
} }
@@ -70,11 +67,6 @@ public class Hiscore extends Plugin
{ {
} }
private void setPluginPanel(ActionEvent e)
{
ui.expand(hiscorePanel);
}
@Subscribe @Subscribe
public void onLookupMenuClicked(PlayerMenuOptionClicked event) public void onLookupMenuClicked(PlayerMenuOptionClicked event)
{ {

View File

@@ -36,7 +36,6 @@ import net.runelite.client.ui.ClientUI;
import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.NavigationButton;
import java.awt.Font; import java.awt.Font;
import java.awt.GraphicsEnvironment; import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import net.runelite.client.task.Schedule; import net.runelite.client.task.Schedule;
@@ -55,13 +54,11 @@ public class XPTracker extends Plugin
@Override @Override
protected void startUp() throws Exception protected void startUp() throws Exception
{ {
navButton = new NavigationButton("XP Tracker"); navButton = new NavigationButton("XP Tracker", () -> xpPanel);
xpPanel = new XPPanel(runeLite, this); xpPanel = new XPPanel(runeLite, this);
navButton.getButton().addActionListener(this::setPluginPanel);
navButton.getButton().setText("XP"); navButton.getButton().setText("XP");
ui.getNavigationPanel().addNavigation(navButton); ui.getPluginToolbar().addNavigation(navButton);
Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/runescape.ttf")); Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/runescape.ttf"));
font = font.deriveFont(Font.BOLD, 16); font = font.deriveFont(Font.BOLD, 16);
@@ -74,11 +71,6 @@ public class XPTracker extends Plugin
{ {
} }
private void setPluginPanel(ActionEvent e)
{
ui.expand(xpPanel);
}
@Subscribe @Subscribe
public void onGameStateChanged(GameStateChanged event) public void onGameStateChanged(GameStateChanged event)
{ {

View File

@@ -29,7 +29,6 @@ import java.awt.Dimension;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.io.IOException; import java.io.IOException;
import java.util.Objects;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
@@ -51,7 +50,7 @@ public final class ClientUI extends JFrame
private JPanel container; private JPanel container;
private JPanel navContainer; private JPanel navContainer;
private ClientPanel panel; private ClientPanel panel;
private NavigationPanel navigationPanel; private PluginToolbar pluginToolbar;
private PluginPanel pluginPanel; private PluginPanel pluginPanel;
public ClientUI() public ClientUI()
@@ -102,38 +101,36 @@ public final class ClientUI extends JFrame
navContainer.setLayout(new BorderLayout(0, 0)); navContainer.setLayout(new BorderLayout(0, 0));
container.add(navContainer, BorderLayout.EAST); container.add(navContainer, BorderLayout.EAST);
navigationPanel = new NavigationPanel(); pluginToolbar = new PluginToolbar(this);
navContainer.add(navigationPanel, BorderLayout.EAST); navContainer.add(pluginToolbar, BorderLayout.EAST);
add(container); add(container);
} }
public void expand(PluginPanel panel) void expand(PluginPanel panel)
{ {
if (Objects.equals(pluginPanel, panel)) if (pluginPanel != null)
{ {
navContainer.remove(1); navContainer.remove(1);
container.validate(); container.validate();
this.setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
if (this.getWidth() == EXPANDED_WIDTH)
{
this.setSize(PANEL_WIDTH, PANEL_HEIGHT);
}
pluginPanel = null;
} }
else
{
if (pluginPanel != null)
{
navContainer.remove(1);
container.validate();
}
pluginPanel = panel; pluginPanel = panel;
navContainer.add(pluginPanel, BorderLayout.WEST); navContainer.add(pluginPanel, BorderLayout.WEST);
container.validate(); container.validate();
this.setMinimumSize(new Dimension(EXPANDED_WIDTH, PANEL_HEIGHT)); this.setMinimumSize(new Dimension(EXPANDED_WIDTH, PANEL_HEIGHT));
}
void contract()
{
navContainer.remove(1);
container.validate();
this.setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
if (this.getWidth() == EXPANDED_WIDTH)
{
this.setSize(PANEL_WIDTH, PANEL_HEIGHT);
} }
pluginPanel = null;
} }
private void checkExit() private void checkExit()
@@ -153,9 +150,9 @@ public final class ClientUI extends JFrame
} }
} }
public NavigationPanel getNavigationPanel() public PluginToolbar getPluginToolbar()
{ {
return navigationPanel; return pluginToolbar;
} }
public PluginPanel getPluginPanel() public PluginPanel getPluginPanel()

View File

@@ -24,18 +24,31 @@
*/ */
package net.runelite.client.ui; package net.runelite.client.ui;
import java.util.function.Supplier;
import javax.swing.JButton; import javax.swing.JButton;
public class NavigationButton public class NavigationButton
{ {
private final JButton button = new JButton(); private final JButton button = new JButton();
private final Supplier<PluginPanel> panelSupplier;
public NavigationButton(String name) public NavigationButton(String name)
{ {
this.panelSupplier = null;
}
public NavigationButton(String name, Supplier<PluginPanel> panelSupplier)
{
this.panelSupplier = panelSupplier;
} }
public JButton getButton() public JButton getButton()
{ {
return button; return button;
} }
public Supplier<PluginPanel> getPanelSupplier()
{
return panelSupplier;
}
} }

View File

@@ -27,27 +27,36 @@ package net.runelite.client.ui;
import java.awt.Dimension; import java.awt.Dimension;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.swing.JPanel; import java.util.function.Supplier;
import javax.swing.JToolBar;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class NavigationPanel extends JPanel public class PluginToolbar extends JToolBar
{ {
private static final Logger logger = LoggerFactory.getLogger(NavigationPanel.class); private static final Logger logger = LoggerFactory.getLogger(PluginToolbar.class);
public static final int PANEL_WIDTH = 24, PANEL_HEIGHT = 503; public static final int TOOLBAR_WIDTH = 36, TOOLBAR_BEIGHT = 503;
private final ClientUI ui;
private final List<NavigationButton> buttons = new ArrayList<>(); private final List<NavigationButton> buttons = new ArrayList<>();
public NavigationPanel() private NavigationButton current;
public PluginToolbar(ClientUI ui)
{ {
setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); super(JToolBar.VERTICAL);
setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); this.ui = ui;
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setSize(new Dimension(TOOLBAR_WIDTH, TOOLBAR_BEIGHT));
setMinimumSize(new Dimension(TOOLBAR_WIDTH, TOOLBAR_BEIGHT));
setPreferredSize(new Dimension(TOOLBAR_WIDTH, TOOLBAR_BEIGHT));
} }
public void addNavigation(NavigationButton button) public void addNavigation(NavigationButton button)
{ {
button.getButton().addActionListener((ae) -> onClick(button));
buttons.add(button); buttons.add(button);
add(button.getButton()); add(button.getButton());
revalidate(); revalidate();
@@ -59,4 +68,33 @@ public class NavigationPanel extends JPanel
remove(button.getButton()); remove(button.getButton());
revalidate(); revalidate();
} }
private void onClick(NavigationButton button)
{
Supplier<PluginPanel> panelSupplier = button.getPanelSupplier();
if (panelSupplier == null)
{
return;
}
if (current != null)
{
current.getButton().setSelected(false);
}
if (current == button)
{
ui.contract();
current = null;
}
else
{
PluginPanel pluginPanel = panelSupplier.get();
ui.expand(pluginPanel);
current = button;
current.getButton().setSelected(true);
}
}
} }