diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-06-22 01:05:04 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-05-29 21:04:47 +0800 |
| commit | 52e9609e7ac8e15bdca8ceaafe7160c1c8b7d6c7 (patch) | |
| tree | 63bf5bc73a5f3313c52cc951507d7dd2522e06cb /runtime/src/main/java | |
| parent | 883e500b6b1892d63fe7b9118f944d4f808e9a79 (diff) | |
| download | RoughlyEnoughItems-52e9609e7ac8e15bdca8ceaafe7160c1c8b7d6c7.tar.gz RoughlyEnoughItems-52e9609e7ac8e15bdca8ceaafe7160c1c8b7d6c7.tar.bz2 RoughlyEnoughItems-52e9609e7ac8e15bdca8ceaafe7160c1c8b7d6c7.zip | |
Retain expand state
Diffstat (limited to 'runtime/src/main/java')
3 files changed, 42 insertions, 19 deletions
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</*EntryStack<?> | CollapsedStack*/ Object> collapse(List<EntryStack<?>> stacks) { CollapsibleEntryRegistryImpl collapsibleRegistry = (CollapsibleEntryRegistryImpl) CollapsibleEntryRegistry.getInstance(); - Map<CollapsibleEntryRegistryImpl.Matcher, @Nullable CollapsedStack> matchers = new HashMap<>(); + Map<CollapsibleEntryRegistryImpl.Entry, @Nullable CollapsedStack> entries = new HashMap<>(); - for (CollapsibleEntryRegistryImpl.Matcher matcher : collapsibleRegistry.getMatchers()) { - matchers.put(matcher, null); + for (CollapsibleEntryRegistryImpl.Entry entry : collapsibleRegistry.getEntries()) { + entries.put(entry, null); } List</*EntryStack<?> | CollapsedStack*/ Object> list = new ArrayList<>(); @@ -104,17 +104,17 @@ public class EntryListSearchManager { long hashExact = EntryStacks.hashExact(stack); boolean matchedAny = false; - for (Map.Entry<CollapsibleEntryRegistryImpl.Matcher, @Nullable CollapsedStack> entry : matchers.entrySet()) { - CollapsibleEntryRegistryImpl.Matcher matcher = entry.getKey(); + for (Map.Entry<CollapsibleEntryRegistryImpl.Entry, @Nullable CollapsedStack> 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<EntryStack<?>> 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<EntryStack<?>> ingredient; - private boolean expanded; + private final CollapsibleEntryRegistryImpl.Entry entry; - public CollapsedStack(List<EntryStack<?>> ingredient) { + public CollapsedStack(List<EntryStack<?>> ingredient, CollapsibleEntryRegistryImpl.Entry entry) { this.ingredient = ingredient; + this.entry = entry; } public List<EntryStack<?>> 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<Matcher> matchers = new ArrayList<>(); + private final List<Entry> entries = new ArrayList<>(); @Override public <T> void group(List<? extends EntryStack<? extends T>> stacks) { Objects.requireNonNull(stacks, "stacks"); - this.matchers.add(new ListMatcher(stacks)); + this.entries.add(new Entry(new ListMatcher(stacks))); } @Override public void group(Predicate<? extends EntryStack<?>> predicate) { Objects.requireNonNull(predicate, "predicate"); - this.matchers.add((stack, hashExact) -> ((Predicate<EntryStack<?>>) predicate).test(stack)); + this.entries.add(new Entry((stack, hashExact) -> ((Predicate<EntryStack<?>>) 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<Matcher> getMatchers() { - return matchers; + public List<Entry> 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); |
