|
@@ -351,51 +351,64 @@ void PropertySelector::_item_selected() {
|
|
String class_type;
|
|
String class_type;
|
|
if (type != Variant::NIL) {
|
|
if (type != Variant::NIL) {
|
|
class_type = Variant::get_type_name(type);
|
|
class_type = Variant::get_type_name(type);
|
|
-
|
|
|
|
- } else {
|
|
|
|
|
|
+ } else if (base_type != String()) {
|
|
class_type = base_type;
|
|
class_type = base_type;
|
|
|
|
+ } else if (instance) {
|
|
|
|
+ class_type = instance->get_class();
|
|
}
|
|
}
|
|
|
|
|
|
DocTools *dd = EditorHelp::get_doc_data();
|
|
DocTools *dd = EditorHelp::get_doc_data();
|
|
String text;
|
|
String text;
|
|
-
|
|
|
|
if (properties) {
|
|
if (properties) {
|
|
- String at_class = class_type;
|
|
|
|
-
|
|
|
|
- while (at_class != String()) {
|
|
|
|
- Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(at_class);
|
|
|
|
|
|
+ while (class_type != String()) {
|
|
|
|
+ Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(class_type);
|
|
if (E) {
|
|
if (E) {
|
|
for (int i = 0; i < E->get().properties.size(); i++) {
|
|
for (int i = 0; i < E->get().properties.size(); i++) {
|
|
if (E->get().properties[i].name == name) {
|
|
if (E->get().properties[i].name == name) {
|
|
text = DTR(E->get().properties[i].description);
|
|
text = DTR(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 {
|
|
} else {
|
|
- String at_class = class_type;
|
|
|
|
-
|
|
|
|
- while (at_class != String()) {
|
|
|
|
- Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(at_class);
|
|
|
|
|
|
+ while (class_type != String()) {
|
|
|
|
+ Map<String, DocData::ClassDoc>::Element *E = dd->class_list.find(class_type);
|
|
if (E) {
|
|
if (E) {
|
|
for (int i = 0; i < E->get().methods.size(); i++) {
|
|
for (int i = 0; i < E->get().methods.size(); i++) {
|
|
if (E->get().methods[i].name == name) {
|
|
if (E->get().methods[i].name == name) {
|
|
text = DTR(E->get().methods[i].description);
|
|
text = DTR(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;
|
|
|
|
|
|
+ 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));
|
|
}
|
|
}
|
|
-
|
|
|
|
- help_bit->set_text(text);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void PropertySelector::_hide_requested() {
|
|
void PropertySelector::_hide_requested() {
|