From a86cf39ca5de718ea615390d6e65fe3d594494f8 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 9 Nov 2023 17:22:25 +0800 Subject: Return to the first page of the collapsed group --- .../gui/widget/entrylist/CollapsingEntryListWidget.java | 2 +- .../client/gui/widget/entrylist/EntryListStackEntry.java | 15 +++++++++++++++ .../gui/widget/entrylist/PaginatedEntryListWidget.java | 5 ++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/CollapsingEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/CollapsingEntryListWidget.java index 79729c036..c4094c069 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/CollapsingEntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/CollapsingEntryListWidget.java @@ -67,7 +67,7 @@ public abstract class CollapsingEntryListWidget extends EntryListWidget { super.updateEntriesPosition(); } - private void updateStacks() { + public void updateStacks() { lastUpdatedCount = updatedCount; List | List>*/ Object> stacks = new ArrayList<>((int) (collapsedStacks.size() * 1.5)); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java index 729dbb834..9d00e85cb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListStackEntry.java @@ -163,6 +163,21 @@ public class EntryListStackEntry extends DisplayedEntryWidget { if (collapsedStack != null && button == 0 && Screen.hasAltDown()) { parent.updatedCount++; collapsedStack.setExpanded(!collapsedStack.isExpanded()); + parent.updateStacks(); + + if (!collapsedStack.isExpanded() && parent instanceof PaginatedEntryListWidget paginatedList) { + List stacks = parent.getStacks(); + + for (int i = 0; i < stacks.size(); i++) { + CollapsedStack stack = parent.getCollapsedStackIndexed().get(i); + + if (stack == collapsedStack) { + paginatedList.setPage(Mth.clamp(i / paginatedList.getEntryWidgets().size(), 0, paginatedList.getTotalPages() - 1)); + break; + } + } + } + parent.updateEntriesPosition(); Widgets.produceClickSound(); return true; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java index b1852766f..9e54d023c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java @@ -135,12 +135,11 @@ public class PaginatedEntryListWidget extends CollapsingEntryListWidget { } page = Math.max(Math.min(page, getTotalPages() - 1), 0); int skip = Math.max(0, page * entries.size()); - List | List>*/ Object> subList = stacks.stream().skip(skip).limit(Math.max(0, entries.size() - Math.max(0, -page * entries.size()))).toList(); + List | List>*/ Object> subList = stacks.subList(skip, Math.min(stacks.size(), skip + entries.size())); Int2ObjectMap indexedCollapsedStack = getCollapsedStackIndexed(); Set collapsedStacks = new LinkedHashSet<>(); for (int i = 0; i < subList.size(); i++) { - /*EntryStack | List>*/ - Object stack = subList.get(i); + /*EntryStack | List>*/ Object stack = subList.get(i); EntryListStackEntry entry = entries.get(i + Math.max(0, -page * entries.size())); entry.clearStacks(); -- cgit