Browse Source

Improve search and display in the editor property/method selector

- Use postfix notation for types in the method selector
  (for consistency with the editor help).
- Perform a case-insensitive match and replace spaces with underscores
  in the search string.
- Fix extraneous space after the `void` return type.

(cherry picked from commit 4390a9d628aeac7fac19d152316c22dd208ba3f7)
Hugo Locurcio 5 years ago
parent
commit
9e28bee01f
1 changed files with 22 additions and 17 deletions
  1. 22 17
      editor/property_selector.cpp

+ 22 - 17
editor/property_selector.cpp

@@ -87,6 +87,9 @@ void PropertySelector::_update_search() {
 
 	TreeItem *root = search_options->create_item();
 
+	// Allow using spaces in place of underscores in the search string (makes the search more fault-tolerant).
+	const String search_text = search_box->get_text().replace(" ", "_");
+
 	if (properties) {
 
 		List<PropertyInfo> props;
@@ -172,7 +175,7 @@ void PropertySelector::_update_search() {
 			if (!(E->get().usage & PROPERTY_USAGE_EDITOR) && !(E->get().usage & PROPERTY_USAGE_SCRIPT_VARIABLE))
 				continue;
 
-			if (search_box->get_text() != String() && E->get().name.find(search_box->get_text()) == -1)
+			if (search_box->get_text() != String() && E->get().name.findn(search_text) == -1)
 				continue;
 
 			if (type_filter.size() && type_filter.find(E->get().type) == -1)
@@ -183,7 +186,7 @@ void PropertySelector::_update_search() {
 			item->set_metadata(0, E->get().name);
 			item->set_icon(0, type_icons[E->get().type]);
 
-			if (!found && search_box->get_text() != String() && E->get().name.find(search_box->get_text()) != -1) {
+			if (!found && search_box->get_text() != String() && E->get().name.findn(search_text) != -1) {
 				item->select(0);
 				found = true;
 			}
@@ -258,7 +261,7 @@ void PropertySelector::_update_search() {
 			if (!virtuals_only && (E->get().flags & METHOD_FLAG_VIRTUAL))
 				continue;
 
-			if (search_box->get_text() != String() && name.find(search_box->get_text()) == -1)
+			if (search_box->get_text() != String() && name.findn(search_text) == -1)
 				continue;
 
 			TreeItem *item = search_options->create_item(category ? category : root);
@@ -269,30 +272,32 @@ void PropertySelector::_update_search() {
 			if (mi.name.find(":") != -1) {
 				desc = mi.name.get_slice(":", 1) + " ";
 				mi.name = mi.name.get_slice(":", 0);
-			} else if (mi.return_val.type != Variant::NIL)
+			} else if (mi.return_val.type != Variant::NIL) {
 				desc = Variant::get_type_name(mi.return_val.type);
-			else
-				desc = "void ";
+			} else {
+				desc = "void";
+			}
 
-			desc += " " + mi.name + " ( ";
+			desc += vformat(" %s(", mi.name);
 
 			for (int i = 0; i < mi.arguments.size(); i++) {
 
 				if (i > 0)
 					desc += ", ";
 
-				if (mi.arguments[i].type == Variant::NIL)
-					desc += "var ";
-				else if (mi.arguments[i].name.find(":") != -1) {
-					desc += mi.arguments[i].name.get_slice(":", 1) + " ";
-					mi.arguments[i].name = mi.arguments[i].name.get_slice(":", 0);
-				} else
-					desc += Variant::get_type_name(mi.arguments[i].type) + " ";
-
 				desc += mi.arguments[i].name;
+
+				if (mi.arguments[i].type == Variant::NIL) {
+					desc += ": Variant";
+				} else if (mi.arguments[i].name.find(":") != -1) {
+					desc += vformat(": %s", mi.arguments[i].name.get_slice(":", 1));
+					mi.arguments[i].name = mi.arguments[i].name.get_slice(":", 0);
+				} else {
+					desc += vformat(": %s", Variant::get_type_name(mi.arguments[i].type));
+				}
 			}
 
-			desc += " )";
+			desc += ")";
 
 			if (E->get().flags & METHOD_FLAG_CONST)
 				desc += " const";
@@ -304,7 +309,7 @@ void PropertySelector::_update_search() {
 			item->set_metadata(0, name);
 			item->set_selectable(0, true);
 
-			if (!found && search_box->get_text() != String() && name.find(search_box->get_text()) != -1) {
+			if (!found && search_box->get_text() != String() && name.findn(search_text) != -1) {
 				item->select(0);
 				found = true;
 			}