Merge pull request #76231 from Calinou/inspector-text-show-tooltip

Show String properties' text in a tooltip in the inspector
This commit is contained in:
Thaddeus Crews 2024-12-05 14:12:09 -06:00
commit 09cbe05485
No known key found for this signature in database
GPG key ID: 62181B86FE9E5D84
3 changed files with 18 additions and 0 deletions

View file

@ -69,6 +69,12 @@ bool EditorInspector::_property_path_matches(const String &p_property_path, cons
return false;
}
String EditorProperty::get_tooltip_string(const String &p_string) const {
// Trim to 100 characters to prevent the tooltip from being too long.
constexpr int TOOLTIP_MAX_LENGTH = 100;
return p_string.left(TOOLTIP_MAX_LENGTH).strip_edges() + String((p_string.length() > TOOLTIP_MAX_LENGTH) ? "..." : "");
}
Size2 EditorProperty::get_minimum_size() const {
Size2 ms;
Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Tree"));

View file

@ -160,6 +160,8 @@ protected:
public:
void emit_changed(const StringName &p_property, const Variant &p_value, const StringName &p_field = StringName(), bool p_changing = false);
String get_tooltip_string(const String &p_string) const;
virtual Size2 get_minimum_size() const override;
void set_label(const String &p_label);

View file

@ -91,6 +91,10 @@ void EditorPropertyText::_text_changed(const String &p_string) {
return;
}
// Set tooltip so that the full text is displayed in a tooltip if hovered.
// This is useful when using a narrow inspector, as the text can be trimmed otherwise.
text->set_tooltip_text(get_tooltip_string(text->get_text()));
if (string_name) {
emit_changed(get_edited_property(), StringName(p_string));
} else {
@ -104,6 +108,7 @@ void EditorPropertyText::update_property() {
if (text->get_text() != s) {
int caret = text->get_caret_column();
text->set_text(s);
text->set_tooltip_text(get_tooltip_string(s));
text->set_caret_column(caret);
}
text->set_editable(!is_read_only());
@ -150,10 +155,14 @@ void EditorPropertyMultilineText::_set_read_only(bool p_read_only) {
void EditorPropertyMultilineText::_big_text_changed() {
text->set_text(big_text->get_text());
// Set tooltip so that the full text is displayed in a tooltip if hovered.
// This is useful when using a narrow inspector, as the text can be trimmed otherwise.
text->set_tooltip_text(get_tooltip_string(big_text->get_text()));
emit_changed(get_edited_property(), big_text->get_text(), "", true);
}
void EditorPropertyMultilineText::_text_changed() {
text->set_tooltip_text(get_tooltip_string(text->get_text()));
emit_changed(get_edited_property(), text->get_text(), "", true);
}
@ -182,6 +191,7 @@ void EditorPropertyMultilineText::update_property() {
String t = get_edited_property_value();
if (text->get_text() != t) {
text->set_text(t);
text->set_tooltip_text(get_tooltip_string(t));
if (big_text && big_text->is_visible_in_tree()) {
big_text->set_text(t);
}