diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
index 9e4807d214..2af2c1bd92 100644
--- a/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
+++ b/runelite-api/src/main/java/net/runelite/api/ScriptEvent.java
@@ -24,6 +24,8 @@
*/
package net.runelite.api;
+import net.runelite.api.widgets.Widget;
+
public interface ScriptEvent
{
int MOUSE_X = -2147483647;
@@ -35,5 +37,28 @@ public interface ScriptEvent
int WIDGET_TARGET_INDEX = -2147483641;
int KEY_CODE = -2147483640;
int KEY_CHAR = -2147483639;
- String NAME = "event_opbase";
+ String NAME = "event_opbase";
+
+ /**
+ * Gets the widget of the event.
+ *
+ * @return the widget
+ * @see net.runelite.api.widgets.Widget
+ */
+ Widget getSource();
+
+ /**
+ * Gets the menu index of the event
+ *
+ * @return the index
+ */
+ int getOp();
+
+ /**
+ * Gets the target of the menu option
+ *
+ * @return the target
+ * @see net.runelite.api.events.MenuOptionClicked
+ */
+ String getOpbase();
}
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 3b54331496..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,7 +35,6 @@ 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 javax.inject.Inject;
@@ -46,6 +45,7 @@ import net.runelite.api.ItemComposition;
import net.runelite.api.ItemContainer;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
+import net.runelite.api.VarClientInt;
import net.runelite.api.VarClientStr;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.DraggingWidgetChanged;
@@ -55,13 +55,14 @@ import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.WidgetLoaded;
+import net.runelite.api.vars.InputType;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager;
-import net.runelite.client.game.ChatboxInputManager;
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.input.MouseManager;
@@ -69,6 +70,7 @@ 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;
@@ -85,7 +87,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
public static final Joiner JOINER = Joiner.on(",").skipNulls();
public static final String CONFIG_GROUP = "banktags";
public static final String TAG_SEARCH = "tag:";
- public static final String EDIT_TAGS_MENU_OPTION = "Edit-tags";
+ private static final String EDIT_TAGS_MENU_OPTION = "Edit-tags";
public static final String ICON_SEARCH = "icon_";
public static final String VAR_TAG_SUFFIX = "*";
@@ -106,7 +108,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
private ClientThread clientThread;
@Inject
- private ChatboxInputManager chatboxInputManager;
+ private ChatboxPanelManager chatboxPanelManager;
@Inject
private MouseManager mouseManager;
@@ -120,6 +122,9 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
@Inject
private TabInterface tabInterface;
+ @Inject
+ private BankSearch bankSearch;
+
@Inject
private KeyManager keyManager;
@@ -276,33 +281,39 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis
.map(i -> i + "*")
.forEach(tags::add);
- // Create initial value string
+ boolean isSearchOpen = client.getVar(VarClientInt.INPUT_TYPE) == InputType.SEARCH.getType();
+ String searchText = client.getVar(VarClientStr.INPUT_TEXT);
String initialValue = JOINER.join(tags);
- chatboxInputManager.openInputWindow(name + " tags:
(append " + VAR_TAG_SUFFIX + " for variation tag)", initialValue, (newValue) ->
+ chatboxPanelManager.openTextInput(name + " tags:
(append " + VAR_TAG_SUFFIX + " for variation tag)")
+ .value(initialValue)
+ .onDone((newValue) ->
+ clientThread.invoke(() ->
+ {
+ // Split inputted tags to vartags (ending with *) and regular tags
+ final Collection newTags = new ArrayList<>(SPLITTER.splitToList(newValue.toLowerCase()));
+ final Collection newVarTags = new ArrayList<>(newTags).stream().filter(s -> s.endsWith(VAR_TAG_SUFFIX)).map(s ->
+ {
+ newTags.remove(s);
+ return s.substring(0, s.length() - VAR_TAG_SUFFIX.length());
+ }).collect(Collectors.toList());
+
+ // And save them
+ tagManager.setTagString(itemId, JOINER.join(newTags), false);
+ tagManager.setTagString(itemId, JOINER.join(newVarTags), true);
+
+ // Check both previous and current tags in case the tag got removed in new tags or in case
+ // the tag got added in new tags
+ tabInterface.updateTabIfActive(SPLITTER.splitToList(initialValue.toLowerCase().replaceAll(Pattern.quote(VAR_TAG_SUFFIX), "")));
+ tabInterface.updateTabIfActive(SPLITTER.splitToList(newValue.toLowerCase().replaceAll(Pattern.quote(VAR_TAG_SUFFIX), "")));
+ }))
+ .build();
+
+ if (isSearchOpen)
{
- if (!Objects.equals(newValue, client.getVar(VarClientStr.INPUT_TEXT)))
- {
- return;
- }
-
- // Split inputted tags to vartags (ending with *) and regular tags
- final Collection newTags = new ArrayList<>(SPLITTER.splitToList(newValue.toLowerCase()));
- final Collection newVarTags = new ArrayList<>(newTags).stream().filter(s -> s.endsWith(VAR_TAG_SUFFIX)).map(s ->
- {
- newTags.remove(s);
- return s.substring(0, s.length() - VAR_TAG_SUFFIX.length());
- }).collect(Collectors.toList());
-
- // And save them
- tagManager.setTagString(itemId, JOINER.join(newTags), false);
- tagManager.setTagString(itemId, JOINER.join(newVarTags), true);
-
- // Check both previous and current tags in case the tag got removed in new tags or in case
- // the tag got added in new tags
- tabInterface.updateTabIfActive(SPLITTER.splitToList(initialValue.toLowerCase().replaceAll(Pattern.quote(VAR_TAG_SUFFIX), "")));
- tabInterface.updateTabIfActive(SPLITTER.splitToList(newValue.toLowerCase().replaceAll(Pattern.quote(VAR_TAG_SUFFIX), "")));
- });
+ 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/MenuIndexes.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/MenuIndexes.java
new file mode 100644
index 0000000000..afa8f6e276
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/MenuIndexes.java
@@ -0,0 +1,43 @@
+/*
+ * 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;
+
+class MenuIndexes
+{
+ static class NewTab
+ {
+ static final int NEW_TAB = 2;
+ static final int IMPORT_TAB = 3;
+ }
+
+ static class Tab
+ {
+ static final int OPEN_TAG = 2;
+ static final int CHANGE_ICON = 3;
+ static final int DELETE_TAB = 4;
+ static final int EXPORT_TAB = 5;
+ }
+}
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 0152f1c5fa..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
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.banktags.tabs;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Runnables;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.Toolkit;
@@ -56,6 +57,7 @@ import net.runelite.api.ItemContainer;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
import net.runelite.api.Point;
+import net.runelite.api.ScriptEvent;
import net.runelite.api.ScriptID;
import net.runelite.api.SoundEffectID;
import net.runelite.api.SpriteID;
@@ -67,14 +69,15 @@ import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.vars.InputType;
import net.runelite.api.widgets.ItemQuantityMode;
+import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetConfig;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.Notifier;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager;
-import net.runelite.client.game.ChatboxInputManager;
import net.runelite.client.game.ItemManager;
+import net.runelite.client.game.chatbox.ChatboxPanelManager;
import net.runelite.client.plugins.banktags.BankTagsConfig;
import net.runelite.client.plugins.banktags.BankTagsPlugin;
import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP;
@@ -83,6 +86,8 @@ import static net.runelite.client.plugins.banktags.BankTagsPlugin.SPLITTER;
import static net.runelite.client.plugins.banktags.BankTagsPlugin.TAG_SEARCH;
import static net.runelite.client.plugins.banktags.BankTagsPlugin.VAR_TAG_SUFFIX;
import net.runelite.client.plugins.banktags.TagManager;
+import static net.runelite.client.plugins.banktags.tabs.MenuIndexes.NewTab;
+import static net.runelite.client.plugins.banktags.tabs.MenuIndexes.Tab;
import net.runelite.client.ui.JagexColors;
import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.Text;
@@ -108,29 +113,16 @@ 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;
private final ConfigManager configManager;
private final TagManager tagManager;
private final TabManager tabManager;
- private final ChatboxInputManager chatboxInputManager;
+ 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();
@@ -139,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;
@@ -161,9 +152,10 @@ public class TabInterface
final ConfigManager configManager,
final TagManager tagManager,
final TabManager tabManager,
- final ChatboxInputManager chatboxInputManager,
+ final ChatboxPanelManager chatboxPanelManager,
final BankTagsConfig config,
- final Notifier notifier)
+ final Notifier notifier,
+ final BankSearch bankSearch)
{
this.client = client;
this.clientThread = clientThread;
@@ -171,9 +163,10 @@ public class TabInterface
this.configManager = configManager;
this.tagManager = tagManager;
this.tabManager = tabManager;
- this.chatboxInputManager = chatboxInputManager;
+ this.chatboxPanelManager = chatboxPanelManager;
this.config = config;
this.notifier = notifier;
+ this.bankSearch = bankSearch;
}
public boolean isActive()
@@ -188,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);
@@ -201,16 +191,19 @@ public class TabInterface
int clickmask = upButton.getClickMask();
clickmask |= WidgetConfig.DRAG;
upButton.setClickMask(clickmask);
+ upButton.setOnOpListener((JavaScriptCallback) (event) -> scrollTab(-1));
downButton = createGraphic("", TabSprites.DOWN_ARROW.getSpriteId(), -1, TAB_WIDTH, BUTTON_HEIGHT, bounds.x, 0, true);
downButton.setAction(1, SCROLL_DOWN);
clickmask = downButton.getClickMask();
clickmask |= WidgetConfig.DRAG;
downButton.setClickMask(clickmask);
+ downButton.setOnOpListener((JavaScriptCallback) (event) -> scrollTab(1));
newTab = createGraphic("", TabSprites.NEW_TAB.getSpriteId(), -1, TAB_WIDTH, 39, bounds.x, 0, true);
newTab.setAction(1, NEW_TAB);
newTab.setAction(2, IMPORT_TAB);
+ newTab.setOnOpListener((JavaScriptCallback) this::handleNewTab);
tabManager.clear();
tabManager.getAllTabs().forEach(this::loadTab);
@@ -223,6 +216,167 @@ public class TabInterface
}
}
+ private void handleDeposit(MenuOptionClicked event, Boolean inventory)
+ {
+ ItemContainer container = client.getItemContainer(inventory ? InventoryID.INVENTORY : InventoryID.EQUIPMENT);
+
+ if (container == null)
+ {
+ return;
+ }
+
+ List items = Arrays.stream(container.getItems())
+ .filter(Objects::nonNull)
+ .map(Item::getId)
+ .filter(id -> id != -1)
+ .collect(Collectors.toList());
+
+ if (!Strings.isNullOrEmpty(event.getMenuTarget()))
+ {
+ if (activeTab != null && Text.removeTags(event.getMenuTarget()).equals(activeTab.getTag()))
+ {
+ for (Integer item : items)
+ {
+ tagManager.addTag(item, activeTab.getTag(), false);
+ }
+
+ openTag(TAG_SEARCH + activeTab.getTag());
+ }
+
+ return;
+ }
+
+ chatboxPanelManager.openTextInput((inventory ? "Inventory " : "Equipment ") + " tags:")
+ .onDone((newTags) ->
+ clientThread.invoke(() ->
+ {
+ final List tags = SPLITTER.splitToList(newTags.toLowerCase());
+
+ for (Integer item : items)
+ {
+ tagManager.addTags(item, tags, false);
+ }
+
+ updateTabIfActive(tags);
+ }))
+ .build();
+ }
+
+ private void handleNewTab(ScriptEvent event)
+ {
+ switch (event.getOp())
+ {
+ case NewTab.NEW_TAB:
+ chatboxPanelManager.openTextInput("Tag name")
+ .onDone((tagName) -> clientThread.invoke(() ->
+ {
+ if (!Strings.isNullOrEmpty(tagName))
+ {
+ loadTab(tagName);
+ tabManager.save();
+ scrollTab(0);
+ }
+ }))
+ .build();
+ break;
+ case NewTab.IMPORT_TAB:
+
+ try
+ {
+ final String dataString = Toolkit
+ .getDefaultToolkit()
+ .getSystemClipboard()
+ .getData(DataFlavor.stringFlavor)
+ .toString()
+ .trim();
+
+ final Iterator dataIter = BankTagsPlugin.SPLITTER.split(dataString).iterator();
+ final String name = dataIter.next();
+ final String icon = dataIter.next();
+ configManager.setConfiguration(CONFIG_GROUP, ICON_SEARCH + name, icon);
+
+ while (dataIter.hasNext())
+ {
+ final int itemId = Integer.valueOf(dataIter.next());
+ tagManager.addTag(itemId, name, itemId < 0);
+ }
+
+ loadTab(name);
+ tabManager.save();
+ scrollTab(0);
+
+ if (activeTab != null && name.equals(activeTab.getTag()))
+ {
+ openTag(TAG_SEARCH + activeTab.getTag());
+ }
+
+ notifier.notify("Tag tab " + name + " has been imported from your clipboard!");
+ }
+ catch (UnsupportedFlavorException | NoSuchElementException | IOException | NumberFormatException ex)
+ {
+ notifier.notify("Failed to import tag tab from clipboard, invalid format.");
+ }
+ }
+ }
+
+ private void handleTagTab(ScriptEvent event)
+ {
+ switch (event.getOp())
+ {
+ case Tab.OPEN_TAG:
+ client.setVarbitValue(client.getVarps(), Varbits.CURRENT_BANK_TAB.getId(), 0);
+ Widget clicked = event.getSource();
+
+ TagTab tab = tabManager.find(Text.removeTags(clicked.getName()));
+
+ if (tab.equals(activeTab))
+ {
+ bankSearch.reset(true);
+
+ clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT));
+ }
+ else
+ {
+ openTag(TAG_SEARCH + Text.removeTags(clicked.getName()));
+ }
+
+ client.playSoundEffect(SoundEffectID.UI_BOOP);
+ break;
+ case Tab.CHANGE_ICON:
+ iconToSet = tabManager.find(Text.removeTags(event.getOpbase()));
+ break;
+ case Tab.DELETE_TAB:
+ String target = Text.standardize(event.getOpbase());
+ chatboxPanelManager.openTextMenuInput("Delete " + target)
+ .option("1. Tab and tag from all items", () ->
+ clientThread.invoke(() ->
+ {
+ tagManager.removeTag(target);
+ deleteTab(target);
+ })
+ )
+ .option("2. Only tab", () -> clientThread.invoke(() -> deleteTab(target)))
+ .option("3. Cancel", Runnables::doNothing)
+ .build();
+ break;
+ case Tab.EXPORT_TAB:
+ final List data = new ArrayList<>();
+ final TagTab tagTab = tabManager.find(Text.removeTags(event.getOpbase()));
+ data.add(tagTab.getTag());
+ data.add(String.valueOf(tagTab.getIconItemId()));
+
+ for (Integer item : tagManager.getItemsForTag(tagTab.getTag()))
+ {
+ data.add(String.valueOf(item));
+ }
+
+ final StringSelection stringSelection = new StringSelection(BankTagsPlugin.JOINER.join(data));
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
+ notifier.notify("Tag tab " + tagTab.getTag() + " has been copied to your clipboard!");
+ break;
+ }
+ }
+
public void destroy()
{
activeTab = null;
@@ -430,189 +584,13 @@ 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.getMenuOption().equals(TAG_INVENTORY) || event.getMenuOption().equals(TAG_GEAR)))
+ && ((event.getWidgetId() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() && event.getMenuOption().equals(TAG_INVENTORY))
+ || (event.getWidgetId() == WidgetInfo.BANK_DEPOSIT_EQUIPMENT.getId() && event.getMenuOption().equals(TAG_GEAR))))
{
- event.consume();
- boolean inventory = event.getMenuOption().equals(TAG_INVENTORY);
- ItemContainer container = client.getItemContainer(inventory ? InventoryID.INVENTORY : InventoryID.EQUIPMENT);
-
- if (container == null)
- {
- return;
- }
-
- List items = Arrays.stream(container.getItems())
- .filter(Objects::nonNull)
- .map(Item::getId)
- .filter(id -> id != -1)
- .collect(Collectors.toList());
-
- if (!Strings.isNullOrEmpty(event.getMenuTarget()))
- {
- if (activeTab != null && Text.removeTags(event.getMenuTarget()).equals(activeTab.getTag()))
- {
- for (Integer item : items)
- {
- tagManager.addTag(item, activeTab.getTag(), false);
- }
-
- openTag(TAG_SEARCH + activeTab.getTag());
- }
- }
- else
- {
- chatboxInputManager.openInputWindow((inventory ? "Inventory " : "Equipment ") + "tags:", "", (newTags) ->
- {
- if (!Objects.equals(newTags, client.getVar(VarClientStr.INPUT_TEXT)) || Strings.isNullOrEmpty(newTags))
- {
- return;
- }
-
- final List tags = SPLITTER.splitToList(newTags.toLowerCase());
-
- for (Integer item : items)
- {
- tagManager.addTags(item, tags, false);
- }
-
- updateTabIfActive(tags);
- });
- }
- }
- else
- {
- switch (event.getMenuOption())
- {
- case SCROLL_UP:
- event.consume();
- scrollTab(-1);
- break;
- case SCROLL_DOWN:
- event.consume();
- scrollTab(1);
- break;
- case CHANGE_ICON:
- event.consume();
- iconToSet = tabManager.find(Text.removeTags(event.getMenuTarget()));
- break;
- case VIEW_TAB:
- event.consume();
- client.setVarbitValue(client.getVarps(), Varbits.CURRENT_BANK_TAB.getId(), 0);
- Widget[] children = parent.getDynamicChildren();
- Widget clicked = children[event.getActionParam()];
-
- TagTab tab = tabManager.find(Text.removeTags(clicked.getName()));
-
- if (tab.equals(activeTab))
- {
- resetSearch();
-
- clientThread.invokeLater(() -> client.runScript(ScriptID.RESET_CHATBOX_INPUT));
- }
- else
- {
- openTag(TAG_SEARCH + Text.removeTags(clicked.getName()));
- }
-
- client.playSoundEffect(SoundEffectID.UI_BOOP);
-
- break;
- case NEW_TAB:
- event.consume();
- chatboxInputManager.openInputWindow("Tag Name", "", (tagName) ->
- {
- if (!Strings.isNullOrEmpty(tagName))
- {
- loadTab(tagName);
- tabManager.save();
- scrollTab(0);
- }
- });
- break;
- case REMOVE_TAB:
- event.consume();
- String target = Text.standardize(event.getMenuTarget());
-
- // TODO: Replace this number input selection with actual in-game select input
- chatboxInputManager.openInputWindow(
- "1. Delete tab " + target + " and tag from all items
" +
- "2. Delete tab " + target + "
" +
- "3. Cancel", "", (response) ->
- {
- switch (response)
- {
- case "1":
- tagManager.removeTag(target);
- if (activeTab != null && activeTab.getTag().equals(target))
- {
- resetSearch();
- }
- case "2":
- deleteTab(target);
- break;
- default:
- break;
- }
- });
- break;
- case EXPORT_TAB:
- event.consume();
- final List data = new ArrayList<>();
- final TagTab tagTab = tabManager.find(Text.removeTags(event.getMenuTarget()));
- data.add(tagTab.getTag());
- data.add(String.valueOf(tagTab.getIconItemId()));
-
- for (Integer item : tagManager.getItemsForTag(tagTab.getTag()))
- {
- data.add(String.valueOf(item));
- }
-
- final StringSelection stringSelection = new StringSelection(BankTagsPlugin.JOINER.join(data));
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
- notifier.notify("Tag tab " + tagTab.getTag() + " has been copied to your clipboard!");
- break;
- case IMPORT_TAB:
- event.consume();
-
- try
- {
- final String dataString = Toolkit
- .getDefaultToolkit()
- .getSystemClipboard()
- .getData(DataFlavor.stringFlavor)
- .toString()
- .trim();
-
- final Iterator dataIter = BankTagsPlugin.SPLITTER.split(dataString).iterator();
- final String name = dataIter.next();
- final String icon = dataIter.next();
- configManager.setConfiguration(CONFIG_GROUP, ICON_SEARCH + name, icon);
-
- while (dataIter.hasNext())
- {
- final int itemId = Integer.valueOf(dataIter.next());
- tagManager.addTag(itemId, name, itemId < 0);
- }
-
- loadTab(name);
- tabManager.save();
- scrollTab(0);
-
- if (activeTab != null && name.equals(activeTab.getTag()))
- {
- openTag(TAG_SEARCH + activeTab.getTag());
- }
-
- notifier.notify("Tag tab " + name + " has been imported from your clipboard!");
- }
- catch (UnsupportedFlavorException | NoSuchElementException | IOException | NumberFormatException ex)
- {
- notifier.notify("Failed to import tag tab from clipboard, invalid format.");
- }
- }
+ handleDeposit(event, event.getWidgetId() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId());
}
}
@@ -689,11 +667,6 @@ public class TabInterface
}
}
- private void resetSearch()
- {
- doSearch(InputType.NONE, "");
- }
-
private boolean isHidden()
{
Widget widget = client.getWidget(WidgetInfo.BANK_CONTAINER);
@@ -711,6 +684,7 @@ public class TabInterface
btn.setAction(2, CHANGE_ICON);
btn.setAction(3, REMOVE_TAB);
btn.setAction(4, EXPORT_TAB);
+ btn.setOnOpListener((JavaScriptCallback) this::handleTagTab);
tagTab.setBackground(btn);
}
@@ -735,7 +709,7 @@ public class TabInterface
{
if (activeTab != null && activeTab.getTag().equals(tag))
{
- resetSearch();
+ bankSearch.reset(true);
}
tabManager.remove(tag);
@@ -932,39 +906,6 @@ public class TabInterface
t.revalidate();
}
- private void doSearch(InputType inputType, String search)
- {
- // In case the widget ids array is incorrect, do not proceed
- if (widgetIds == null || widgetIds.length < 21)
- {
- return;
- }
-
- clientThread.invokeLater(() ->
- {
- // This ensures that any chatbox input (e.g from search) will not remain visible when
- // selecting/changing tab
- 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 ItemComposition getItem(int idx)
{
@@ -975,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
diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSScriptEvent.java b/runescape-api/src/main/java/net/runelite/rs/api/RSScriptEvent.java
index 273818c2d9..a2f293b417 100644
--- a/runescape-api/src/main/java/net/runelite/rs/api/RSScriptEvent.java
+++ b/runescape-api/src/main/java/net/runelite/rs/api/RSScriptEvent.java
@@ -25,6 +25,7 @@
package net.runelite.rs.api;
import net.runelite.api.ScriptEvent;
+import net.runelite.api.widgets.Widget;
import net.runelite.mapping.Import;
public interface RSScriptEvent extends ScriptEvent
@@ -34,4 +35,13 @@ public interface RSScriptEvent extends ScriptEvent
@Import("params")
void setArguments(Object[] args);
+
+ @Import("source")
+ Widget getSource();
+
+ @Import("op")
+ int getOp();
+
+ @Import("opbase")
+ String getOpbase();
}