From f20a2d3da7bc6070f7edf7db1f448f0ac9d1a072 Mon Sep 17 00:00:00 2001 From: Michael Alexsander Date: Sun, 8 Aug 2021 18:49:43 -0300 Subject: [PATCH] Make property description in the animation editor actually show it (cherry picked from commit bea868f750cc833b83b237738c5d23accfb50977) --- editor/property_selector.cpp | 52 +++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 39f71fb744c..cd7540a3e8c 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -344,54 +344,64 @@ void PropertySelector::_item_selected() { String class_type; if (type != Variant::NIL) { class_type = Variant::get_type_name(type); - - } else { + } else if (base_type != String()) { class_type = base_type; + } else if (instance) { + class_type = instance->get_class(); } DocData *dd = EditorHelp::get_doc_data(); String text; - if (properties) { - - String at_class = class_type; - - while (at_class != String()) { - - Map::Element *E = dd->class_list.find(at_class); + while (class_type != String()) { + Map::Element *E = dd->class_list.find(class_type); if (E) { for (int i = 0; i < E->get().properties.size(); i++) { if (E->get().properties[i].name == name) { text = E->get().properties[i].description; + break; } } } - at_class = ClassDB::get_parent_class(at_class); + if (text != String()) { + break; + } + + // The property may be from a parent class, keep looking. + class_type = ClassDB::get_parent_class(class_type); } } else { - - String at_class = class_type; - - while (at_class != String()) { - - Map::Element *E = dd->class_list.find(at_class); + while (class_type != String()) { + Map::Element *E = dd->class_list.find(class_type); if (E) { for (int i = 0; i < E->get().methods.size(); i++) { if (E->get().methods[i].name == name) { text = E->get().methods[i].description; + break; } } } - at_class = ClassDB::get_parent_class(at_class); + if (text != String()) { + break; + } + + // The method may be from a parent class, keep looking. + class_type = ClassDB::get_parent_class(class_type); } } - if (text == String()) - return; - - help_bit->set_text(text); + if (text != String()) { + // Display both property name and description, since the help bit may be displayed + // far away from the location (especially if the dialog was resized to be taller). + help_bit->set_text(vformat("[b]%s[/b]: %s", name, text)); + help_bit->get_rich_text()->set_self_modulate(Color(1, 1, 1, 1)); + } else { + // Use nested `vformat()` as translators shouldn't interfere with BBCode tags. + help_bit->set_text(vformat(TTR("No description available for %s."), vformat("[b]%s[/b]", name))); + help_bit->get_rich_text()->set_self_modulate(Color(1, 1, 1, 0.5)); + } } void PropertySelector::_notification(int p_what) {