Merge pull request #8354 from Quasindro/master
expand QuestListPlugin to be able to filter quests by any completion state…
This commit is contained in:
@@ -25,13 +25,6 @@
|
|||||||
package net.runelite.client.plugins.questlist;
|
package net.runelite.client.plugins.questlist;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -59,6 +52,13 @@ import net.runelite.client.game.chatbox.ChatboxTextInput;
|
|||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
name = "Quest List",
|
name = "Quest List",
|
||||||
@@ -69,17 +69,13 @@ public class QuestListPlugin extends Plugin
|
|||||||
private static final int ENTRY_PADDING = 8;
|
private static final int ENTRY_PADDING = 8;
|
||||||
private static final List<String> QUEST_HEADERS = ImmutableList.of("Free Quests", "Members' Quests", "Miniquests");
|
private static final List<String> QUEST_HEADERS = ImmutableList.of("Free Quests", "Members' Quests", "Miniquests");
|
||||||
|
|
||||||
private static final int SPRITE_SHOW_COMPLETED = SpriteID.OPTIONS_ZOOM_SLIDER_THUMB;
|
|
||||||
private static final int SPRITE_HIDE_COMPLETED = SpriteID.SQUARE_CHECK_BOX;
|
|
||||||
|
|
||||||
private static final String MENU_OPEN = "Open";
|
private static final String MENU_OPEN = "Open";
|
||||||
private static final String MENU_CLOSE = "Close";
|
private static final String MENU_CLOSE = "Close";
|
||||||
|
|
||||||
private static final String MENU_SHOW = "Show";
|
private static final String MENU_TOGGLE = "Toggle";
|
||||||
private static final String MENU_HIDE = "Hide";
|
|
||||||
|
|
||||||
private static final String MENU_SEARCH = "Search";
|
private static final String MENU_SEARCH = "Search";
|
||||||
private static final String MENU_COMPLETED = "Completed Quests";
|
private static final String MENU_SHOW = "Show";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Client client;
|
private Client client;
|
||||||
@@ -92,18 +88,18 @@ public class QuestListPlugin extends Plugin
|
|||||||
|
|
||||||
private ChatboxTextInput searchInput;
|
private ChatboxTextInput searchInput;
|
||||||
private Widget questSearchButton;
|
private Widget questSearchButton;
|
||||||
private Widget questHideCompletedButton;
|
private Widget questHideButton;
|
||||||
|
|
||||||
private EnumMap<QuestContainer, Collection<QuestWidget>> questSet;
|
private EnumMap<QuestContainer, Collection<QuestWidget>> questSet;
|
||||||
|
|
||||||
private boolean hideCompleted;
|
private QuestState currentFilterState;
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameStateChanged(GameStateChanged e)
|
public void onGameStateChanged(GameStateChanged e)
|
||||||
{
|
{
|
||||||
if (e.getGameState() == GameState.LOGGING_IN)
|
if (e.getGameState() == GameState.LOGGING_IN)
|
||||||
{
|
{
|
||||||
hideCompleted = false;
|
currentFilterState = QuestState.ALL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,19 +124,18 @@ public class QuestListPlugin extends Plugin
|
|||||||
questSearchButton.setName(MENU_SEARCH);
|
questSearchButton.setName(MENU_SEARCH);
|
||||||
questSearchButton.revalidate();
|
questSearchButton.revalidate();
|
||||||
|
|
||||||
questHideCompletedButton = header.createChild(-1, WidgetType.GRAPHIC);
|
questHideButton = header.createChild(-1, WidgetType.GRAPHIC);
|
||||||
redrawHideCompletedButton();
|
redrawHideButton();
|
||||||
|
|
||||||
questHideCompletedButton.setOriginalWidth(18);
|
questHideButton.setOriginalWidth(13);
|
||||||
questHideCompletedButton.setOriginalHeight(17);
|
questHideButton.setOriginalHeight(13);
|
||||||
questHideCompletedButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
|
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
|
||||||
questHideCompletedButton.setOriginalX(25);
|
questHideButton.setOriginalX(24);
|
||||||
questHideCompletedButton.setOriginalY(0);
|
questHideButton.setOriginalY(2);
|
||||||
questHideCompletedButton.setHasListener(true);
|
questHideButton.setHasListener(true);
|
||||||
questHideCompletedButton.setOnOpListener((JavaScriptCallback) e -> toggleHideCompleted());
|
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
|
||||||
questHideCompletedButton.setName(MENU_COMPLETED);
|
questHideButton.setAction(1, MENU_TOGGLE);
|
||||||
|
questHideButton.revalidate();
|
||||||
questHideCompletedButton.revalidate();
|
|
||||||
|
|
||||||
questSet = new EnumMap<>(QuestContainer.class);
|
questSet = new EnumMap<>(QuestContainer.class);
|
||||||
|
|
||||||
@@ -173,19 +168,22 @@ public class QuestListPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleHideCompleted()
|
private void toggleHidden()
|
||||||
{
|
{
|
||||||
hideCompleted = !hideCompleted;
|
QuestState[] questStates = QuestState.values();
|
||||||
redrawHideCompletedButton();
|
int nextState = (currentFilterState.ordinal() + 1) % questStates.length;
|
||||||
|
currentFilterState = questStates[nextState];
|
||||||
|
|
||||||
|
redrawHideButton();
|
||||||
|
|
||||||
updateFilter();
|
updateFilter();
|
||||||
client.playSoundEffect(SoundEffectID.UI_BOOP);
|
client.playSoundEffect(SoundEffectID.UI_BOOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void redrawHideCompletedButton()
|
private void redrawHideButton()
|
||||||
{
|
{
|
||||||
questHideCompletedButton.setSpriteId(hideCompleted ? SPRITE_HIDE_COMPLETED : SPRITE_SHOW_COMPLETED);
|
questHideButton.setSpriteId(currentFilterState.getSpriteId());
|
||||||
questHideCompletedButton.setAction(1, hideCompleted ? MENU_SHOW : MENU_HIDE);
|
questHideButton.setName(MENU_SHOW + " " + currentFilterState.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOnQuestTab()
|
private boolean isOnQuestTab()
|
||||||
@@ -324,9 +322,17 @@ public class QuestListPlugin extends Plugin
|
|||||||
Widget quest = questInfo.getQuest();
|
Widget quest = questInfo.getQuest();
|
||||||
QuestState questState = QuestState.getByColor(quest.getTextColor());
|
QuestState questState = QuestState.getByColor(quest.getTextColor());
|
||||||
|
|
||||||
boolean hidden = !(filter.isEmpty()
|
boolean hidden;
|
||||||
|| questInfo.getTitle().contains(filter))
|
if (!filter.isEmpty())
|
||||||
|| (filter.isEmpty() && hideCompleted && questState == QuestState.COMPLETE);
|
{
|
||||||
|
// If searching, show result regardless of filtered state
|
||||||
|
hidden = !questInfo.getTitle().contains(filter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Otherwise hide if it doesn't match the filter state
|
||||||
|
hidden = currentFilterState != QuestState.ALL && questState != currentFilterState;
|
||||||
|
}
|
||||||
|
|
||||||
quest.setHidden(hidden);
|
quest.setHidden(hidden);
|
||||||
quest.setOriginalY(y);
|
quest.setOriginalY(y);
|
||||||
@@ -356,9 +362,14 @@ public class QuestListPlugin extends Plugin
|
|||||||
@Getter
|
@Getter
|
||||||
private enum QuestState
|
private enum QuestState
|
||||||
{
|
{
|
||||||
NOT_STARTED(0xff0000), IN_PROGRESS(0xffff00), COMPLETE(0xdc10d);
|
NOT_STARTED(0xff0000, "Not started", SpriteID.MINIMAP_ORB_HITPOINTS),
|
||||||
|
IN_PROGRESS(0xffff00, "In progress", SpriteID.MINIMAP_ORB_HITPOINTS_DISEASE),
|
||||||
|
COMPLETE(0xdc10d, "Completed", SpriteID.MINIMAP_ORB_HITPOINTS_POISON),
|
||||||
|
ALL(0, "All", SpriteID.MINIMAP_ORB_PRAYER);
|
||||||
|
|
||||||
private final int color;
|
private final int color;
|
||||||
|
private final String name;
|
||||||
|
private final int spriteId;
|
||||||
|
|
||||||
static QuestState getByColor(int color)
|
static QuestState getByColor(int color)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user