diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index 037a4a3a55..505d0f2cd0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -35,10 +35,8 @@ import java.awt.event.MouseWheelEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Objects; import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.List; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.InventoryID; @@ -64,14 +62,15 @@ import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; +import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyManager; -import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.input.MouseManager; import net.runelite.client.input.MouseWheelListener; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.banktags.tabs.BankSearch; import net.runelite.client.plugins.banktags.tabs.TabInterface; import net.runelite.client.plugins.banktags.tabs.TabSprites; import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; @@ -123,6 +122,9 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis @Inject private TabInterface tabInterface; + @Inject + private BankSearch bankSearch; + @Inject private KeyManager keyManager; @@ -285,7 +287,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis chatboxPanelManager.openTextInput(name + " tags:
(append " + VAR_TAG_SUFFIX + " for variation tag)") .value(initialValue) - .onDone((newTags) -> + .onDone((newValue) -> clientThread.invoke(() -> { // Split inputted tags to vartags (ending with *) and regular tags @@ -309,8 +311,8 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis if (isSearchOpen) { - tabInterface.doSearch(InputType.NONE, "", false); - tabInterface.doSearch(InputType.SEARCH, searchText, false); + bankSearch.reset(false); + bankSearch.search(InputType.SEARCH, searchText, false); } } else diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java new file mode 100644 index 0000000000..4aed474dae --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/BankSearch.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2018, Ron Young + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.client.plugins.banktags.tabs; + +import com.google.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.ScriptID; +import net.runelite.api.VarClientInt; +import net.runelite.api.VarClientStr; +import net.runelite.api.vars.InputType; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.callback.ClientThread; + +public class BankSearch +{ + // Widget indexes for searching + private static final int INNER_CONTAINER_IDX = 2; + private static final int SETTINGS_IDX = 4; + private static final int ITEM_CONTAINER_IDX = 7; + private static final int SCROLLBAR_IDX = 8; + private static final int BOTTOM_BAR_IDX = 9; + private static final int SEARCH_BUTTON_BACKGROUND_IDX = 15; + private static final int TITLE_BAR_IDX = 16; + private static final int ITEM_COUNT_IDX = 17; + private static final int TAB_BAR_IDX = 18; + private static final int INCINERATOR_IDX = 19; + private static final int INCINERATOR_CONFIRM_IDX = 20; + private static final int HIDDEN_WIDGET_IDX = 21; + + private final Client client; + private final ClientThread clientThread; + + @Inject + private BankSearch( + final Client client, + final ClientThread clientThread + ) + { + this.client = client; + this.clientThread = clientThread; + } + + public void search(InputType inputType, String search, Boolean closeInput) + { + clientThread.invoke(() -> + { + Widget bankContainer = client.getWidget(WidgetInfo.BANK_CONTAINER); + if (bankContainer == null || bankContainer.isHidden()) + { + return; + } + + Object[] widgetIds = bankContainer.getOnLoadListener(); + + // In case the widget ids array is incorrect, do not proceed + if (widgetIds == null || widgetIds.length < 21) + { + return; + } + // This ensures that any chatbox input (e.g from search) will not remain visible when + // selecting/changing tab + if (closeInput) + { + client.runScript(ScriptID.RESET_CHATBOX_INPUT); + } + + client.setVar(VarClientInt.INPUT_TYPE, inputType.getType()); + client.setVar(VarClientStr.INPUT_TEXT, search); + + client.runScript(ScriptID.BANK_LAYOUT, + WidgetInfo.BANK_CONTAINER.getId(), + widgetIds[INNER_CONTAINER_IDX], + widgetIds[SETTINGS_IDX], + widgetIds[ITEM_CONTAINER_IDX], + widgetIds[SCROLLBAR_IDX], + widgetIds[BOTTOM_BAR_IDX], + widgetIds[TITLE_BAR_IDX], + widgetIds[ITEM_COUNT_IDX], + widgetIds[SEARCH_BUTTON_BACKGROUND_IDX], + widgetIds[TAB_BAR_IDX], + widgetIds[INCINERATOR_IDX], + widgetIds[INCINERATOR_CONFIRM_IDX], + widgetIds[HIDDEN_WIDGET_IDX]); + }); + } + + public void reset(Boolean closeChat) + { + search(InputType.NONE, "", closeChat); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 2bf1653d9b..c0f6ead1c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -113,20 +113,6 @@ public class TabInterface private static final int MARGIN = 1; private static final int SCROLL_TICK = 500; - // Widget indexes for searching - private static final int INNER_CONTAINER_IDX = 2; - private static final int SETTINGS_IDX = 4; - private static final int ITEM_CONTAINER_IDX = 7; - private static final int SCROLLBAR_IDX = 8; - private static final int BOTTOM_BAR_IDX = 9; - private static final int SEARCH_BUTTON_BACKGROUND_IDX = 15; - private static final int TITLE_BAR_IDX = 16; - private static final int ITEM_COUNT_IDX = 17; - private static final int TAB_BAR_IDX = 18; - private static final int INCINERATOR_IDX = 19; - private static final int INCINERATOR_CONFIRM_IDX = 20; - private static final int HIDDEN_WIDGET_IDX = 21; - private final Client client; private final ClientThread clientThread; private final ItemManager itemManager; @@ -136,6 +122,7 @@ public class TabInterface private final ChatboxPanelManager chatboxPanelManager; private final BankTagsConfig config; private final Notifier notifier; + private final BankSearch bankSearch; private final Rectangle bounds = new Rectangle(); private final Rectangle canvasBounds = new Rectangle(); @@ -144,7 +131,6 @@ public class TabInterface private int currentTabIndex; private TagTab iconToSet = null; private Instant startScroll = Instant.now(); - private Object[] widgetIds; @Getter private Widget upButton; @@ -168,7 +154,8 @@ public class TabInterface final TabManager tabManager, final ChatboxPanelManager chatboxPanelManager, final BankTagsConfig config, - final Notifier notifier) + final Notifier notifier, + final BankSearch bankSearch) { this.client = client; this.clientThread = clientThread; @@ -179,6 +166,7 @@ public class TabInterface this.chatboxPanelManager = chatboxPanelManager; this.config = config; this.notifier = notifier; + this.bankSearch = bankSearch; } public boolean isActive() @@ -193,9 +181,6 @@ public class TabInterface return; } - Widget bankContainer = client.getWidget(WidgetInfo.BANK_CONTAINER); - widgetIds = bankContainer.getOnLoadListener(); - currentTabIndex = config.position(); parent = client.getWidget(WidgetInfo.BANK_CONTENT_CONTAINER); @@ -346,7 +331,7 @@ public class TabInterface if (tab.equals(activeTab)) { - resetSearch(); + bankSearch.reset(true); clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT)); } @@ -599,7 +584,7 @@ public class TabInterface final ItemComposition item = getItem(event.getActionParam()); final int itemId = item.getId(); tagManager.removeTag(itemId, activeTab.getTag()); - doSearch(InputType.SEARCH, TAG_SEARCH + activeTab.getTag()); + bankSearch.search(InputType.SEARCH, TAG_SEARCH + activeTab.getTag(), true); } else if (event.getMenuAction() == MenuAction.RUNELITE && ((event.getWidgetId() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() && event.getMenuOption().equals(TAG_INVENTORY)) @@ -682,11 +667,6 @@ public class TabInterface } } - private void resetSearch() - { - doSearch(InputType.NONE, ""); - } - private boolean isHidden() { Widget widget = client.getWidget(WidgetInfo.BANK_CONTAINER); @@ -729,7 +709,7 @@ public class TabInterface { if (activeTab != null && activeTab.getTag().equals(tag)) { - resetSearch(); + bankSearch.reset(true); } tabManager.remove(tag); @@ -926,48 +906,6 @@ public class TabInterface t.revalidate(); } - public void doSearch(InputType inputType, String search, Boolean closeInput) - { - // In case the widget ids array is incorrect, do not proceed - if (widgetIds == null || widgetIds.length < 21) - { - return; - } - - clientThread.invoke(() -> - { - // This ensures that any chatbox input (e.g from search) will not remain visible when - // selecting/changing tab - if (closeInput) - { - client.runScript(ScriptID.RESET_CHATBOX_INPUT); - } - - client.setVar(VarClientInt.INPUT_TYPE, inputType.getType()); - client.setVar(VarClientStr.INPUT_TEXT, search); - - client.runScript(ScriptID.BANK_LAYOUT, - WidgetInfo.BANK_CONTAINER.getId(), - widgetIds[INNER_CONTAINER_IDX], - widgetIds[SETTINGS_IDX], - widgetIds[ITEM_CONTAINER_IDX], - widgetIds[SCROLLBAR_IDX], - widgetIds[BOTTOM_BAR_IDX], - widgetIds[TITLE_BAR_IDX], - widgetIds[ITEM_COUNT_IDX], - widgetIds[SEARCH_BUTTON_BACKGROUND_IDX], - widgetIds[TAB_BAR_IDX], - widgetIds[INCINERATOR_IDX], - widgetIds[INCINERATOR_CONFIRM_IDX], - widgetIds[HIDDEN_WIDGET_IDX]); - }); - } - - - private void doSearch(InputType inputType, String search) - { - doSearch(inputType, search, true); - } private ItemComposition getItem(int idx) { @@ -978,7 +916,7 @@ public class TabInterface private void openTag(String tag) { - doSearch(InputType.SEARCH, tag); + bankSearch.search(InputType.SEARCH, tag, true); activateTab(tabManager.find(tag.substring(TAG_SEARCH.length()))); // When tab is selected with search window open, the search window closes but the search button