From a6ae805607851fed453c40757eec06abeac55d20 Mon Sep 17 00:00:00 2001 From: chrombread Date: Sat, 8 Nov 2025 11:13:19 -0800 Subject: [PATCH] tooltip override for TextFieldWidget --- .../cleanroommc/modularui/test/TestTile.java | 1 + .../widgets/textfield/TextFieldWidget.java | 94 ++++++++++++++++++- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/cleanroommc/modularui/test/TestTile.java b/src/main/java/com/cleanroommc/modularui/test/TestTile.java index f41ff6348..ca01dcb8a 100644 --- a/src/main/java/com/cleanroommc/modularui/test/TestTile.java +++ b/src/main/java/com/cleanroommc/modularui/test/TestTile.java @@ -269,6 +269,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager syncManager, UI //.flex(flex -> flex.left(3)) // ? .overlay(IKey.str("Button 2"))) .child(new TextFieldWidget() + .addTooltipLine("this tooltip is overridden") .size(60, 18) .setTextAlignment(Alignment.Center) .value(SyncHandlers.string(() -> this.value, val -> this.value = val)) diff --git a/src/main/java/com/cleanroommc/modularui/widgets/textfield/TextFieldWidget.java b/src/main/java/com/cleanroommc/modularui/widgets/textfield/TextFieldWidget.java index d72b05519..c3fc45276 100644 --- a/src/main/java/com/cleanroommc/modularui/widgets/textfield/TextFieldWidget.java +++ b/src/main/java/com/cleanroommc/modularui/widgets/textfield/TextFieldWidget.java @@ -1,8 +1,11 @@ package com.cleanroommc.modularui.widgets.textfield; import com.cleanroommc.modularui.ModularUI; +import com.cleanroommc.modularui.api.drawable.IDrawable; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.drawable.ITextLine; import com.cleanroommc.modularui.api.value.IStringValue; +import com.cleanroommc.modularui.screen.RichTooltip; import com.cleanroommc.modularui.screen.viewport.ModularGuiContext; import com.cleanroommc.modularui.utils.MathUtils; import com.cleanroommc.modularui.utils.ParseResult; @@ -13,6 +16,7 @@ import org.jetbrains.annotations.NotNull; import java.text.ParsePosition; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import java.util.regex.Pattern; @@ -27,6 +31,7 @@ public class TextFieldWidget extends BaseTextFieldWidget { private boolean numbers = false; private String mathFailMessage = null; private double defaultNumber = 0; + private boolean tooltipOverride = false; public double parse(String num) { ParseResult result = MathUtils.parseExpression(num, this.defaultNumber, true); @@ -49,8 +54,10 @@ public void onInit() { this.stringValue = new StringValue(""); } setText(this.stringValue.getStringValue()); - if (!hasTooltip()) { + if (!hasTooltip() && !tooltipOverride) { tooltipBuilder(tooltip -> tooltip.addLine(IKey.str(getText()))); + // set back to false so this won't get triggered + tooltipOverride = false; } } @@ -80,7 +87,7 @@ public void onUpdate() { @Override public void drawForeground(ModularGuiContext context) { - if (hasTooltip() && getScrollData().isScrollBarActive(getScrollArea()) && isHoveringFor(getTooltip().getShowUpTimer())) { + if (hasTooltip() && (tooltipOverride || getScrollData().isScrollBarActive(getScrollArea())) && isHoveringFor(getTooltip().getShowUpTimer())) { getTooltip().draw(getContext()); } } @@ -208,4 +215,87 @@ public TextFieldWidget value(IStringValue stringValue) { setValue(stringValue); return this; } + + /** + * Normally, Tooltips on text field widgets are used to display the contents of the widget when the scrollbar is active + * This value is an override, that allows the methods provided by {@link com.cleanroommc.modularui.api.widget.ITooltip} to be used + * Every method that adds a tooltip from ITooltip is overridden to enable the tooltipOverride + * @param value - sets the tooltip override on or off + */ + public TextFieldWidget setTooltipOverride(boolean value) { + this.tooltipOverride = value; + return this; + } + @Override + public TextFieldWidget tooltipBuilder(Consumer tooltipBuilder) { + tooltipOverride = true; + return super.tooltipBuilder(tooltipBuilder); + } + + @Override + public TextFieldWidget tooltip(RichTooltip tooltip) { + tooltipOverride = true; + return super.tooltip(tooltip); + } + + @Override + public TextFieldWidget tooltip(Consumer tooltipConsumer) { + tooltipOverride = true; + return super.tooltip(tooltipConsumer); + } + + @Override + public @NotNull RichTooltip tooltip() { + tooltipOverride = true; + return super.tooltip(); + } + + @Override + public TextFieldWidget tooltipDynamic(Consumer tooltipBuilder) { + tooltipOverride = true; + return super.tooltipDynamic(tooltipBuilder); + } + + @Override + public TextFieldWidget addTooltipDrawableLines(Iterable lines) { + tooltipOverride = true; + return super.addTooltipDrawableLines(lines); + } + + @Override + public TextFieldWidget addTooltipElement(String s) { + tooltipOverride = true; + return super.addTooltipElement(s); + } + + @Override + public TextFieldWidget addTooltipElement(IDrawable drawable) { + tooltipOverride = true; + return super.addTooltipElement(drawable); + } + + @Override + public TextFieldWidget addTooltipLine(String line) { + tooltipOverride = true; + return super.addTooltipLine(line); + } + + @Override + public TextFieldWidget addTooltipLine(ITextLine line) { + tooltipOverride = true; + + return super.addTooltipLine(line); + } + + @Override + public TextFieldWidget addTooltipLine(IDrawable drawable) { + tooltipOverride = true; + return super.addTooltipLine(drawable); + } + + @Override + public TextFieldWidget addTooltipStringLines(Iterable lines) { + tooltipOverride = true; + return super.addTooltipStringLines(lines); + } }