From 26c0b435f78746d22a3e0f597f9330d94153e55b Mon Sep 17 00:00:00 2001 From: 4rg0n Date: Wed, 18 Sep 2024 19:36:58 +0200 Subject: [PATCH] add search to room sounds table; sort room sounds by name; --- .../argon/sos/mod/sdk/ui/ColumnRow.java | 22 ++++++++++++++----- mod/pom.xml | 2 +- .../argon/sos/moreoptions/ui/UiMapper.java | 18 +++++++++------ .../moreoptions/ui/tab/sounds/SoundsTab.java | 17 +++++++------- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/mod-sdk/src/main/java/com/github/argon/sos/mod/sdk/ui/ColumnRow.java b/mod-sdk/src/main/java/com/github/argon/sos/mod/sdk/ui/ColumnRow.java index 64f371c6..d6e1de95 100644 --- a/mod-sdk/src/main/java/com/github/argon/sos/mod/sdk/ui/ColumnRow.java +++ b/mod-sdk/src/main/java/com/github/argon/sos/mod/sdk/ui/ColumnRow.java @@ -8,6 +8,7 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import snake2d.SPRITE_RENDERER; import snake2d.util.color.COLOR; @@ -15,10 +16,7 @@ import snake2d.util.gui.GuiSection; import snake2d.util.gui.renderable.RENDEROBJ; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.function.Consumer; import java.util.function.Supplier; @@ -30,7 +28,8 @@ public class ColumnRow extends Section implements Searchable, Valuable, - Toggleable + Toggleable, + Comparable> { /** * Used to identify the row @@ -133,6 +132,14 @@ public class ColumnRow extends Section implements @Accessors(fluent = true, chain = false) private Consumer valueConsumer; + /** + * For sorting rows in a list via their values by a defined behavior + */ + @Setter + @Builder.Default + @Accessors(fluent = true, chain = false) + private Comparator comparator = (value1, value2) -> 0; + /** * What shall happen when you doubleclick the row. */ @@ -326,6 +333,11 @@ public ColumnRowBuilder column(RENDEROBJ column) { } } + @Override + public int compareTo(@NotNull ColumnRow row) { + return comparator.compare(this.value, row.getValue()); + } + @Override public String toString() { return "ColumnRow{" + diff --git a/mod/pom.xml b/mod/pom.xml index b0951b5c..cbed8b24 100644 --- a/mod/pom.xml +++ b/mod/pom.xml @@ -9,7 +9,7 @@ local - 3.0.3 + 3.1.0 sos-mod-more-options diff --git a/mod/src/main/java/com/github/argon/sos/moreoptions/ui/UiMapper.java b/mod/src/main/java/com/github/argon/sos/moreoptions/ui/UiMapper.java index f423bc69..b9935422 100644 --- a/mod/src/main/java/com/github/argon/sos/moreoptions/ui/UiMapper.java +++ b/mod/src/main/java/com/github/argon/sos/moreoptions/ui/UiMapper.java @@ -106,31 +106,35 @@ public static Map> toBoosterPanelEntriesCategori .collect(groupingBy(entry -> entry.getCat().name.toString())); } - public List> toRoomSoundLabeledColumnRows(Map elements) { + public List> toRoomSoundLabeledColumnRows(Map elements) { return elements.entrySet().stream() - .sorted(Map.Entry.comparingByKey()) .map(entry -> { String key = entry.getKey(); Element element = entry.getValue(); String name = key; SPRITE sprite = SPRITES.icons().m.clear_structure; - Optional bySound = gameApis.rooms().getBySound(key); + Optional room = gameApis.rooms().getBySound(key); - if (bySound.isPresent()) { - name = bySound.get().info.name.toString(); - sprite = bySound.get().iconBig().medium; + if (room.isPresent()) { + name = room.get().info.name.toString(); + sprite = room.get().iconBig().medium; } // label with element - return ColumnRow.builder() + return ColumnRow.builder() + .key(key) + .value(name) .column(Label.builder() .name(name) .build()) .column(UiUtil.toRender(sprite)) .column(element) + .searchTerm(name) + .comparator(String::compareTo) .build(); }) + .sorted() .collect(Collectors.toList()); } } diff --git a/mod/src/main/java/com/github/argon/sos/moreoptions/ui/tab/sounds/SoundsTab.java b/mod/src/main/java/com/github/argon/sos/moreoptions/ui/tab/sounds/SoundsTab.java index 0b336b1f..2014ac5c 100644 --- a/mod/src/main/java/com/github/argon/sos/moreoptions/ui/tab/sounds/SoundsTab.java +++ b/mod/src/main/java/com/github/argon/sos/moreoptions/ui/tab/sounds/SoundsTab.java @@ -25,7 +25,7 @@ public class SoundsTab extends AbstractConfigTab { private static final Logger log = Loggers.getLogger(SoundsTab.class); private final static I18nTranslator i18n = ModModule.i18n().get(SoundsTab.class); - private final Map ambienceSoundSliders; + private final Map soundSliders; public SoundsTab( String title, SoundsConfig soundsConfig, @@ -34,7 +34,7 @@ public SoundsTab( int availableHeight ) { super(title, defaultConfig, availableWidth, availableHeight); - this.ambienceSoundSliders = UiMapper.toSliders(soundsConfig.getAmbience()); + this.soundSliders = UiMapper.toSliders(soundsConfig.getAmbience()); GHeader ambienceSoundsHeader = new GHeader(i18n.t("SoundsTab.header.ambienceSounds.name")); ambienceSoundsHeader.hoverInfoSet(i18n.d("SoundsTab.header.ambienceSounds.desc")); @@ -42,11 +42,11 @@ public SoundsTab( GHeader roomSoundsHeader = new GHeader(i18n.t("SoundsTab.header.roomSounds.name")); roomSoundsHeader.hoverInfoSet(i18n.d("SoundsTab.header.roomSounds.desc")); - Map ambience = ambienceSoundSliders.entrySet().stream() + Map ambience = soundSliders.entrySet().stream() .filter(stringSliderEntry -> !stringSliderEntry.getKey().contains("ROOM_")) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - Map room = ambienceSoundSliders.entrySet().stream() + Map room = soundSliders.entrySet().stream() .filter(stringSliderEntry -> stringSliderEntry.getKey().contains("ROOM_")) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); @@ -69,12 +69,13 @@ public SoundsTab( Layout.vertical(tableHeight) .addDownC(20, roomSoundsHeader) - .addDownC(5, new VerticalLayout.Scalable(150, height -> Table.builder() + .addDownC(5, new VerticalLayout.Scalable(150, height -> Table.builder() .rows(ModModule.uiMapper().toRoomSoundLabeledColumnRows(room)) .rowPadding(5) .columnMargin(5) .highlight(true) .scrollable(true) + .displaySearch(true) .backgroundColor(COLOR.WHITE10) .displayHeight(height) .build())) @@ -89,7 +90,7 @@ public SoundsConfig getValue() { } public Map getSoundsAmbienceConfig() { - return ambienceSoundSliders.entrySet().stream() + return soundSliders.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, tab -> Range.fromSlider(tab.getValue()))); @@ -100,8 +101,8 @@ public void setValue(SoundsConfig soundsConfig) { log.trace("Applying UI sounds config %s", soundsConfig); soundsConfig.getAmbience().forEach((key, range) -> { - if (ambienceSoundSliders.containsKey(key)) { - ambienceSoundSliders.get(key).setValue(range.getValue()); + if (soundSliders.containsKey(key)) { + soundSliders.get(key).setValue(range.getValue()); } else { log.warn("No slider with key %s found in UI", key); }