diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-12-18 20:24:23 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-04-16 00:38:17 +0900 |
| commit | e6687c01b254bf903d4895aa0bb631b1679d465c (patch) | |
| tree | bc94913c98326dfcf4e8ef0e474419bb81698596 /runtime/src/main/java/me | |
| parent | 8f8db7a604a86d17b88a621a18656e0791d87aeb (diff) | |
| download | RoughlyEnoughItems-e6687c01b254bf903d4895aa0bb631b1679d465c.tar.gz RoughlyEnoughItems-e6687c01b254bf903d4895aa0bb631b1679d465c.tar.bz2 RoughlyEnoughItems-e6687c01b254bf903d4895aa0bb631b1679d465c.zip | |
Close #913
Diffstat (limited to 'runtime/src/main/java/me')
4 files changed, 33 insertions, 8 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java index 47f84a7c4..2ef46744b 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java @@ -60,6 +60,7 @@ import java.util.Map; @ApiStatus.Internal @Config(name = "roughlyenoughitems/config") @Environment(EnvType.CLIENT) +@SuppressWarnings("FieldMayBeFinal") public class ConfigObjectImpl implements ConfigObject, ConfigData { @ConfigEntry.Category("basics") @ConfigEntry.Gui.TransitiveObject @DontApplyFieldName public Basics basics = new Basics(); @@ -140,6 +141,15 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { } @Override + public boolean isHidingEntryPanelIfIdle() { + return appearance.hideEntryPanelIfIdle; + } + + public void setHidingEntryPanelIfIdle(boolean hideEntryPanelIfIdle) { + appearance.hideEntryPanelIfIdle = hideEntryPanelIfIdle; + } + + @Override public boolean shouldAppendModNames() { return advanced.tooltips.appendModNames; } @@ -625,6 +635,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Comment("Declares the appearance of recipe's border.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) private RecipeBorderType recipeBorder = RecipeBorderType.DEFAULT; @Comment("Declares whether entry panel is scrolled.") private boolean scrollingEntryListWidget = false; + @Comment("Declares whether entry panel should be invisible when not searching") private boolean hideEntryPanelIfIdle = false; public static class Layout { @Comment("Declares the position of the search field.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java index a4926f524..d9e3f2531 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java @@ -28,6 +28,7 @@ import dev.architectury.platform.Platform; import dev.architectury.utils.value.BooleanValue; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; @@ -113,6 +114,13 @@ public class CraftableFilterButtonWidget { entries.add(new SubMenuEntry(Component.translatable("text.rei.config.menu.search_field.input_method"), createInputMethodEntries(access, applicableInputMethods))); } + entries.add(ToggleMenuEntry.of(new TranslatableComponent("text.rei.config.menu.search_field.hide_entry_panel_idle"), + config::isHidingEntryPanelIfIdle, + hideEntryPanelIfIdle -> { + config.setHidingEntryPanelIfIdle(hideEntryPanelIfIdle); + REIRuntime.getInstance().getOverlay().orElseThrow().queueReloadSearch(); + })); + return entries; } 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 0b1bf2662..50fd71d78 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 @@ -32,6 +32,7 @@ import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.config.EntryPanelOrdering; import me.shedaniel.rei.api.client.registry.entry.CollapsibleEntryRegistry; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; +import me.shedaniel.rei.api.client.search.SearchFilter; import me.shedaniel.rei.api.client.view.Views; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; @@ -67,7 +68,7 @@ public class EntryListSearchManager { public static final EntryListSearchManager INSTANCE = new EntryListSearchManager(); - private final AsyncSearchManager searchManager = new AsyncSearchManager(((EntryRegistryImpl) EntryRegistry.getInstance())::getPreFilteredComplexList, () -> { + private final AsyncSearchManager searchManager = new AsyncSearchManager(EntryListSearchManager::getAllEntriesContextually, () -> { boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled(); LongSet workingItems = checkCraftable ? new LongOpenHashSet() : null; if (checkCraftable) { @@ -78,6 +79,14 @@ public class EntryListSearchManager { return checkCraftable ? stack -> workingItems.contains(stack.hashExact()) : stack -> true; }, HashedEntryStackWrapper::normalize); + private static List<EntryStack<?>> getAllEntriesContextually(SearchFilter filter) { + if (ConfigObject.getInstance().isHidingEntryPanelIfIdle() && filter.getFilter().isEmpty()) { + return List.of(); + } + + return EntryRegistry.getInstance().getPreFilteredList(); + } + public void update(String searchTerm, boolean ignoreLastSearch, Consumer<List</*EntryStack<?> | CollapsedStack*/ Object>> update) { Stopwatch stopwatch = Stopwatch.createStarted(); if (ignoreLastSearch) searchManager.markDirty(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java index 8d1f6f056..381831c42 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java @@ -41,21 +41,18 @@ import java.util.List; import java.util.Map; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.BiConsumer; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.function.UnaryOperator; +import java.util.function.*; public class AsyncSearchManager { private static final ExecutorService EXECUTOR_SERVICE = new ThreadCreator("REI-AsyncSearchManager").asService(Math.min(3, Runtime.getRuntime().availableProcessors())); - private final Supplier<List<? extends HashedEntryStackWrapper>> stacksProvider; + private final Function<SearchFilter, List<? extends HashedEntryStackWrapper>> stacksProvider; private final Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier; private final UnaryOperator<HashedEntryStackWrapper> transformer; private volatile Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last; public volatile ExecutorTuple executor; public volatile SearchFilter filter; - public AsyncSearchManager(Supplier<List<? extends HashedEntryStackWrapper>> stacksProvider, Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier, UnaryOperator<HashedEntryStackWrapper> transformer) { + public AsyncSearchManager(Function<SearchFilter, List<? extends HashedEntryStackWrapper>> stacksProvider, Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier, UnaryOperator<HashedEntryStackWrapper> transformer) { this.stacksProvider = stacksProvider; this.additionalPredicateSupplier = additionalPredicateSupplier; this.transformer = transformer; @@ -123,7 +120,7 @@ public class AsyncSearchManager { Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last; last = this.last; return get(this.filter, this.additionalPredicateSupplier.get(), this.transformer, - this.stacksProvider.get(), last, this, executor, steps) + this.stacksProvider.apply(filter), last, this, executor, steps) .thenApply(entry -> { this.last = entry; return entry; |
