Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void onClick(double mouseX, double mouseY) {

@Override
protected boolean onKeyPress(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) {
if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER || keyCode == GLFW.GLFW_KEY_SPACE) {
this.onPress();
this.playDownSound();
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@
import dev.lambdaurora.spruceui.background.Background;
import dev.lambdaurora.spruceui.background.EmptyBackground;
import dev.lambdaurora.spruceui.navigation.NavigationDirection;
import dev.lambdaurora.spruceui.widget.AbstractSpruceWidget;
import dev.lambdaurora.spruceui.widget.SpruceSeparatorWidget;
import dev.lambdaurora.spruceui.widget.SpruceWidget;
import dev.lambdaurora.spruceui.widget.WithBackground;
import dev.lambdaurora.spruceui.widget.*;
import dev.lambdaurora.spruceui.widget.container.AbstractSpruceParentWidget;
import dev.lambdaurora.spruceui.widget.container.SpruceEntryListWidget;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.screen.narration.NarrationPart;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.OrderedText;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import org.jetbrains.annotations.Nullable;

import java.util.List;
Expand Down Expand Up @@ -161,14 +161,46 @@ protected void renderWidget(MatrixStack matrices, int mouseX, int mouseY, float
this.list.getCurrentTab().container.render(matrices, mouseX, mouseY, delta);
}



/* Narration */

@Override
public void appendNarrations(NarrationMessageBuilder builder) {
this.getList()
.children()
.stream()
.filter(AbstractSpruceWidget::isMouseHovered)
.findFirst()
.ifPresentOrElse(
hoveredEntry -> {
hoveredEntry.appendNarrations(builder.nextMessage());
this.appendPositionNarrations(builder, hoveredEntry);
}, () -> {
var currentTab = this.list.getCurrentTab();
if (currentTab != null) {
currentTab.appendNarrations(builder.nextMessage());
this.appendPositionNarrations(builder, currentTab);
}
}
);
builder.put(NarrationPart.USAGE, new TranslatableText("narration.selection.usage"));
}

protected void appendPositionNarrations(NarrationMessageBuilder builder, Entry hoveredEntry) {
builder.put(NarrationPart.POSITION, new TranslatableText("narrator.position.list", list.children().indexOf(hoveredEntry) + 1, list.children().size()));
}

public static abstract class Entry extends SpruceEntryListWidget.Entry implements WithBackground {
protected final SideTabList parent;
private final Text title;
private final Text description;
private Background background = EmptyBackground.EMPTY_BACKGROUND;

protected Entry(SideTabList parent, Text title) {
protected Entry(SideTabList parent, Text title, Text description) {
this.parent = parent;
this.title = title;
this.description = description;
}

@Override
Expand All @@ -185,6 +217,16 @@ public Text getTitle() {
return this.title;
}

/**
* Returns the description of this entry.
*
* @return the description
*/
public Text getDescription() {
return this.description;
}


@Override
public Background getBackground() {
return this.background;
Expand All @@ -195,6 +237,16 @@ public void setBackground(Background background) {
this.background = background;
}

/* Narration */

@Override
public void appendNarrations(NarrationMessageBuilder builder) {
builder.put(NarrationPart.TITLE, this.getTitle());
if (this.getDescription() != null) {
builder.put(NarrationPart.HINT, this.getDescription());
}
}

/* Rendering */

@Override
Expand All @@ -210,7 +262,7 @@ public static class TabEntry extends Entry {
private boolean selected;

protected TabEntry(SideTabList parent, Text title, @Nullable Text description, AbstractSpruceWidget container) {
super(parent, title);
super(parent, title, description);
this.title = this.client.textRenderer.wrapLines(title, this.parent.getWidth() - 18);
if (description == null) this.description = null;
else this.description = this.client.textRenderer.wrapLines(description, this.parent.getWidth() - 18);
Expand Down Expand Up @@ -301,7 +353,7 @@ public static class SeparatorEntry extends Entry {
private final SpruceSeparatorWidget separatorWidget;

protected SeparatorEntry(SideTabList parent, Text title) {
super(parent, title);
super(parent, title, null);
this.separatorWidget = new SpruceSeparatorWidget(Position.of(this, 0, 2), this.getWidth(), title) {
@Override
public int getWidth() {
Expand Down