Merge pull request #8354 from Quasindro/master

expand QuestListPlugin to be able to filter quests by any completion state…
This commit is contained in:
Adam
2019-04-02 09:02:46 -04:00
committed by GitHub

View File

@@ -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)
{ {