From f1ead906fd2368dee99e28a907424da1999abce0 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 22 Jun 2022 01:05:04 +0800 Subject: Retain expand state --- .../widget/entrylist/EntryListSearchManager.java | 18 ++++++------ .../entry/type/collapsed/CollapsedStack.java | 9 +++--- .../collapsed/CollapsibleEntryRegistryImpl.java | 34 ++++++++++++++++++---- 3 files changed, 42 insertions(+), 19 deletions(-) (limited to 'runtime/src/main/java') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java index c1b094c02..55e7b8a62 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListSearchManager.java @@ -92,10 +92,10 @@ public class EntryListSearchManager { private List | CollapsedStack*/ Object> collapse(List> stacks) { CollapsibleEntryRegistryImpl collapsibleRegistry = (CollapsibleEntryRegistryImpl) CollapsibleEntryRegistry.getInstance(); - Map matchers = new HashMap<>(); + Map entries = new HashMap<>(); - for (CollapsibleEntryRegistryImpl.Matcher matcher : collapsibleRegistry.getMatchers()) { - matchers.put(matcher, null); + for (CollapsibleEntryRegistryImpl.Entry entry : collapsibleRegistry.getEntries()) { + entries.put(entry, null); } List | CollapsedStack*/ Object> list = new ArrayList<>(); @@ -104,17 +104,17 @@ public class EntryListSearchManager { long hashExact = EntryStacks.hashExact(stack); boolean matchedAny = false; - for (Map.Entry entry : matchers.entrySet()) { - CollapsibleEntryRegistryImpl.Matcher matcher = entry.getKey(); + for (Map.Entry mapEntry : entries.entrySet()) { + CollapsibleEntryRegistryImpl.Entry entry = mapEntry.getKey(); - if (matcher.matches(stack, hashExact)) { - CollapsedStack collapsed = entry.getValue(); + if (entry.getMatcher().matches(stack, hashExact)) { + CollapsedStack collapsed = mapEntry.getValue(); if (collapsed == null) { List> ingredient = new ArrayList<>(); ingredient.add(stack); - collapsed = new CollapsedStack(ingredient); - entry.setValue(collapsed); + collapsed = new CollapsedStack(ingredient, entry); + mapEntry.setValue(collapsed); list.add(collapsed); } else { collapsed.getIngredient().add(stack); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsedStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsedStack.java index 7aa7670ef..a34febbec 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsedStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsedStack.java @@ -29,10 +29,11 @@ import java.util.List; public class CollapsedStack { private final List> ingredient; - private boolean expanded; + private final CollapsibleEntryRegistryImpl.Entry entry; - public CollapsedStack(List> ingredient) { + public CollapsedStack(List> ingredient, CollapsibleEntryRegistryImpl.Entry entry) { this.ingredient = ingredient; + this.entry = entry; } public List> getIngredient() { @@ -40,10 +41,10 @@ public class CollapsedStack { } public boolean isExpanded() { - return expanded; + return entry.isExpanded(); } public void setExpanded(boolean expanded) { - this.expanded = expanded; + this.entry.setExpanded(expanded); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java index 338c1a8a4..8a7028ffa 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/collapsed/CollapsibleEntryRegistryImpl.java @@ -36,23 +36,23 @@ import java.util.Objects; import java.util.function.Predicate; public class CollapsibleEntryRegistryImpl implements CollapsibleEntryRegistry { - private final List matchers = new ArrayList<>(); + private final List entries = new ArrayList<>(); @Override public void group(List> stacks) { Objects.requireNonNull(stacks, "stacks"); - this.matchers.add(new ListMatcher(stacks)); + this.entries.add(new Entry(new ListMatcher(stacks))); } @Override public void group(Predicate> predicate) { Objects.requireNonNull(predicate, "predicate"); - this.matchers.add((stack, hashExact) -> ((Predicate>) predicate).test(stack)); + this.entries.add(new Entry((stack, hashExact) -> ((Predicate>) predicate).test(stack))); } @Override public void startReload() { - this.matchers.clear(); + this.entries.clear(); } @Override @@ -60,10 +60,32 @@ public class CollapsibleEntryRegistryImpl implements CollapsibleEntryRegistry { plugin.registerCollapsibleEntries(this); } - public List getMatchers() { - return matchers; + public List getEntries() { + return entries; } + public static class Entry { + private final Matcher matcher; + private boolean expanded; + + public Entry(Matcher matcher) { + this.matcher = matcher; + } + + public Matcher getMatcher() { + return matcher; + } + + public boolean isExpanded() { + return expanded; + } + + public void setExpanded(boolean expanded) { + this.expanded = expanded; + } + } + + @FunctionalInterface public interface Matcher { boolean matches(EntryStack stack, long hashExact); -- cgit