banktags: Remove tab separators from tag tabs

This commit is contained in:
trimbe
2020-07-20 23:42:27 -07:00
committed by Jordan Atwood
parent cb4b7d42ea
commit e8d4ff38cb
5 changed files with 111 additions and 0 deletions

View File

@@ -284,4 +284,13 @@ public final class ScriptID
*/
@ScriptArguments(integer = 4, string = 1)
public static final int XPDROPS_SETDROPSIZE = 996;
/**
* Main layout script for the bank
* <ul>
* <li>int (WidgetID) * 17, various widgets making up the bank interface</li>
* </ul>
*/
@ScriptArguments(integer = 17)
public static final int BANKMAIN_BUILD = 277;
}

View File

@@ -259,6 +259,7 @@ public class WidgetID
static final int CONTENT_CONTAINER = 9;
static final int TAB_CONTAINER = 10;
static final int ITEM_CONTAINER = 12;
static final int SCROLLBAR = 13;
static final int SEARCH_BUTTON_BACKGROUND = 39;
static final int DEPOSIT_INVENTORY = 41;
static final int DEPOSIT_EQUIPMENT = 43;

View File

@@ -146,6 +146,7 @@ public enum WidgetInfo
BANK_ITEM_COUNT_TOP(WidgetID.BANK_GROUP_ID, WidgetID.Bank.ITEM_COUNT_TOP),
BANK_ITEM_COUNT_BAR(WidgetID.BANK_GROUP_ID, WidgetID.Bank.ITEM_COUNT_BAR),
BANK_ITEM_COUNT_BOTTOM(WidgetID.BANK_GROUP_ID, WidgetID.Bank.ITEM_COUNT_BOTTOM),
BANK_SCROLLBAR(WidgetID.BANK_GROUP_ID, WidgetID.Bank.SCROLLBAR),
BANK_PIN_CONTAINER(WidgetID.BANK_PIN_GROUP_ID, WidgetID.BankPin.CONTAINER),
BANK_SETTINGS_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.SETTINGS_BUTTON),
BANK_TUTORIAL_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.TUTORIAL_BUTTON),

View File

@@ -53,6 +53,17 @@ public interface BankTagsConfig extends Config
return true;
}
@ConfigItem(
keyName = "removeTabSeparators",
name = "Remove tab separators",
description = "Remove the tab separators normally present in tag tabs",
position = 3
)
default boolean removeSeparators()
{
return false;
}
@ConfigItem(
keyName = "position",
name = "",

View File

@@ -26,6 +26,7 @@
*/
package net.runelite.client.plugins.banktags;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.primitives.Shorts;
import com.google.inject.Provides;
@@ -33,6 +34,7 @@ import java.awt.event.MouseWheelEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
@@ -48,6 +50,8 @@ import net.runelite.api.ItemContainer;
import net.runelite.api.KeyCode;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
import net.runelite.api.ScriptID;
import net.runelite.api.SpriteID;
import net.runelite.api.VarClientInt;
import net.runelite.api.VarClientStr;
import net.runelite.api.events.DraggingWidgetChanged;
@@ -56,6 +60,7 @@ import net.runelite.api.events.GrandExchangeSearched;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.ScriptPostFired;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.vars.InputType;
import net.runelite.api.widgets.Widget;
@@ -96,6 +101,10 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener
public static final String ICON_SEARCH = "icon_";
public static final String TAG_TABS_CONFIG = "tagtabs";
public static final String VAR_TAG_SUFFIX = "*";
private static final int ITEMS_PER_ROW = 8;
private static final int ITEM_VERTICAL_SPACING = 36;
private static final int ITEM_HORIZONTAL_SPACING = 48;
private static final int ITEM_ROW_START = 51;
private static final int MAX_RESULT_COUNT = 250;
@@ -450,6 +459,86 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener
}
}
private boolean isSearching()
{
return client.getVar(VarClientInt.INPUT_TYPE) == InputType.SEARCH.getType()
|| (client.getVar(VarClientInt.INPUT_TYPE) <= 0
&& !Strings.isNullOrEmpty(client.getVar(VarClientStr.INPUT_TEXT)));
}
@Subscribe
public void onScriptPostFired(ScriptPostFired event)
{
if (event.getScriptId() != ScriptID.BANKMAIN_BUILD || !config.removeSeparators())
{
return;
}
// allow time for the tab interface to become active
clientThread.invokeLater(() ->
{
if (!isSearching() || !tabInterface.isActive())
{
return;
}
Widget itemContainer = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER);
if (itemContainer == null)
{
return;
}
int items = 0;
Widget[] containerChildren = itemContainer.getDynamicChildren();
// sort the child array as the items are not in the displayed order
Arrays.sort(containerChildren, Comparator.comparing(Widget::getOriginalY)
.thenComparing(Widget::getOriginalX));
for (Widget child : containerChildren)
{
if (child.getItemId() != -1 && !child.isHidden())
{
// calculate correct item position as if this was a normal tab
int adjYOffset = (items / ITEMS_PER_ROW) * ITEM_VERTICAL_SPACING;
int adjXOffset = (items % ITEMS_PER_ROW) * ITEM_HORIZONTAL_SPACING + ITEM_ROW_START;
if (child.getOriginalY() != adjYOffset)
{
child.setOriginalY(adjYOffset);
child.revalidate();
}
if (child.getOriginalX() != adjXOffset)
{
child.setOriginalX(adjXOffset);
child.revalidate();
}
items++;
}
// separator line or tab text
if (child.getSpriteId() == SpriteID.RESIZEABLE_MODE_SIDE_PANEL_BACKGROUND
|| child.getText().contains("Tab"))
{
child.setHidden(true);
}
}
int itemContainerHeight = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER).getHeight();
// add a second row of height here to allow users to scroll down when the last row is partially visible
int adjustedScrollHeight = (items / ITEMS_PER_ROW) * ITEM_VERTICAL_SPACING + ITEM_VERTICAL_SPACING;
itemContainer.setScrollHeight(Math.max(adjustedScrollHeight, itemContainerHeight));
client.runScript(ScriptID.UPDATE_SCROLLBAR,
WidgetInfo.BANK_SCROLLBAR.getId(),
WidgetInfo.BANK_ITEM_CONTAINER.getId(),
0);
});
}
@Subscribe
public void onGameTick(GameTick event)
{