From 579d35b2945319417b11e3deaa86a85524f0e620 Mon Sep 17 00:00:00 2001 From: Jeremy Plsek Date: Sat, 14 Apr 2018 22:01:00 -0400 Subject: [PATCH] geplugin: replace default action when pressing alt Since clicking while holding alt searches the GE, update the default action so the player can discover that the functionality exists. --- .../GrandExchangeInputListener.java | 28 ++++++++- .../grandexchange/GrandExchangePlugin.java | 59 +++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java index a95c770d59..6626366ae8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeInputListener.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.grandexchange; +import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import javax.inject.Inject; import javax.swing.SwingUtilities; @@ -35,9 +36,10 @@ import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetItem; import net.runelite.client.game.ItemManager; +import net.runelite.client.input.KeyListener; import net.runelite.client.input.MouseListener; -public class GrandExchangeInputListener extends MouseListener +public class GrandExchangeInputListener extends MouseListener implements KeyListener { private final Client client; private final GrandExchangePlugin plugin; @@ -142,4 +144,28 @@ public class GrandExchangeInputListener extends MouseListener plugin.getPanel().getSearchPanel().priceLookup(itemComposition.getName()); }); } + + @Override + public void keyTyped(KeyEvent e) + { + + } + + @Override + public void keyPressed(KeyEvent e) + { + if (e.isAltDown()) + { + plugin.setHotKeyPressed(true); + } + } + + @Override + public void keyReleased(KeyEvent e) + { + if (!e.isAltDown()) + { + plugin.setHotKeyPressed(false); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index e3f4bdf926..1c10fbcd7d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -36,13 +36,21 @@ import javax.inject.Inject; import javax.swing.SwingUtilities; import lombok.AccessLevel; import lombok.Getter; +import lombok.Setter; import net.runelite.api.Client; +import net.runelite.api.GameState; import net.runelite.api.GrandExchangeOffer; import net.runelite.api.ItemComposition; +import net.runelite.api.MenuEntry; import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GrandExchangeOfferChanged; +import net.runelite.api.events.MenuEntryAdded; +import net.runelite.api.widgets.WidgetID; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; +import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -60,6 +68,10 @@ public class GrandExchangePlugin extends Plugin @Getter(AccessLevel.PACKAGE) private GrandExchangePanel panel; + @Getter(AccessLevel.PACKAGE) + @Setter(AccessLevel.PACKAGE) + private boolean hotKeyPressed; + @Inject private GrandExchangeInputListener inputListener; @@ -69,6 +81,9 @@ public class GrandExchangePlugin extends Plugin @Inject private MouseManager mouseManager; + @Inject + private KeyManager keyManager; + @Inject private Client client; @@ -106,6 +121,7 @@ public class GrandExchangePlugin extends Plugin if (config.quickLookup()) { mouseManager.registerMouseListener(inputListener); + keyManager.registerKeyListener(inputListener); } } @@ -114,6 +130,7 @@ public class GrandExchangePlugin extends Plugin { pluginToolbar.removeNavigation(button); mouseManager.unregisterMouseListener(inputListener); + keyManager.unregisterKeyListener(inputListener); } @Subscribe @@ -126,10 +143,12 @@ public class GrandExchangePlugin extends Plugin if (config.quickLookup()) { mouseManager.registerMouseListener(inputListener); + keyManager.registerKeyListener(inputListener); } else { mouseManager.unregisterMouseListener(inputListener); + keyManager.unregisterKeyListener(inputListener); } } } @@ -144,4 +163,44 @@ public class GrandExchangePlugin extends Plugin BufferedImage itemImage = itemManager.getImage(offer.getItemId(), offer.getTotalQuantity(), shouldStack); SwingUtilities.invokeLater(() -> panel.updateOffer(offerItem, itemImage, offerEvent.getOffer(), offerEvent.getSlot())); } + + @Subscribe + public void onMenuEntryAdded(MenuEntryAdded event) + { + // At the moment, if the user disables quick lookup, the input listener gets disabled. Thus, isHotKeyPressed() + // should always return false when quick lookup is disabled. + // Replace the default option with "Search ..." when holding alt + if (client.getGameState() != GameState.LOGGED_IN || !hotKeyPressed) + { + return; + } + + final MenuEntry[] entries = client.getMenuEntries(); + final MenuEntry menuEntry = entries[entries.length - 1]; + final int widgetId = menuEntry.getParam1(); + final int groupId = WidgetInfo.TO_GROUP(widgetId); + + switch (groupId) + { + case WidgetID.BANK_GROUP_ID: + // Don't show for view tabs and such + if (WidgetInfo.TO_CHILD(widgetId) != WidgetInfo.BANK_ITEM_CONTAINER.getChildId()) + { + break; + } + case WidgetID.INVENTORY_GROUP_ID: + case WidgetID.BANK_INVENTORY_GROUP_ID: + menuEntry.setOption("Search Grand Exchange"); + client.setMenuEntries(entries); + } + } + + @Subscribe + public void onFocusChanged(FocusChanged focusChanged) + { + if (!focusChanged.isFocused()) + { + setHotKeyPressed(false); + } + } }