Browse Source

Merge pull request #86777 from Mickeon/autocomplete-classdb

Add autocompletion for ClassDB & AudioServer
Rémi Verschelde 1 year ago
parent
commit
0618bff394
4 changed files with 45 additions and 0 deletions
  1. 24 0
      core/core_bind.cpp
  2. 4 0
      core/core_bind.h
  3. 13 0
      servers/audio_server.cpp
  4. 4 0
      servers/audio_server.h

+ 24 - 0
core/core_bind.cpp

@@ -1519,6 +1519,30 @@ bool ClassDB::is_class_enabled(const StringName &p_class) const {
 	return ::ClassDB::is_class_enabled(p_class);
 	return ::ClassDB::is_class_enabled(p_class);
 }
 }
 
 
+#ifdef TOOLS_ENABLED
+void ClassDB::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const {
+	const String pf = p_function;
+	bool first_argument_is_class = false;
+	if (p_idx == 0) {
+		first_argument_is_class = (pf == "get_inheriters_from_class" || pf == "get_parent_class" ||
+				pf == "class_exists" || pf == "can_instantiate" || pf == "instantiate" ||
+				pf == "class_has_signal" || pf == "class_get_signal" || pf == "class_get_signal_list" ||
+				pf == "class_get_property_list" || pf == "class_get_property" || pf == "class_set_property" ||
+				pf == "class_has_method" || pf == "class_get_method_list" ||
+				pf == "class_get_integer_constant_list" || pf == "class_has_integer_constant" || pf == "class_get_integer_constant" ||
+				pf == "class_has_enum" || pf == "class_get_enum_list" || pf == "class_get_enum_constants" || pf == "class_get_integer_constant_enum" ||
+				pf == "is_class_enabled");
+	}
+	if (first_argument_is_class || pf == "is_parent_class") {
+		for (const String &E : get_class_list()) {
+			r_options->push_back(E.quote());
+		}
+	}
+
+	Object::get_argument_options(p_function, p_idx, r_options);
+}
+#endif
+
 void ClassDB::_bind_methods() {
 void ClassDB::_bind_methods() {
 	::ClassDB::bind_method(D_METHOD("get_class_list"), &ClassDB::get_class_list);
 	::ClassDB::bind_method(D_METHOD("get_class_list"), &ClassDB::get_class_list);
 	::ClassDB::bind_method(D_METHOD("get_inheriters_from_class", "class"), &ClassDB::get_inheriters_from_class);
 	::ClassDB::bind_method(D_METHOD("get_inheriters_from_class", "class"), &ClassDB::get_inheriters_from_class);

+ 4 - 0
core/core_bind.h

@@ -460,6 +460,10 @@ public:
 
 
 	bool is_class_enabled(const StringName &p_class) const;
 	bool is_class_enabled(const StringName &p_class) const;
 
 
+#ifdef TOOLS_ENABLED
+	virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override;
+#endif
+
 	ClassDB() {}
 	ClassDB() {}
 	~ClassDB() {}
 	~ClassDB() {}
 };
 };

+ 13 - 0
servers/audio_server.cpp

@@ -1692,6 +1692,19 @@ void AudioServer::set_enable_tagging_used_audio_streams(bool p_enable) {
 	tag_used_audio_streams = p_enable;
 	tag_used_audio_streams = p_enable;
 }
 }
 
 
+#ifdef TOOLS_ENABLED
+void AudioServer::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const {
+	const String pf = p_function;
+	if ((p_idx == 0 && pf == "get_bus_index") || (p_idx == 1 && pf == "set_bus_send")) {
+		for (const AudioServer::Bus *E : buses) {
+			r_options->push_back(String(E->name).quote());
+		}
+	}
+
+	Object::get_argument_options(p_function, p_idx, r_options);
+}
+#endif
+
 void AudioServer::_bind_methods() {
 void AudioServer::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("set_bus_count", "amount"), &AudioServer::set_bus_count);
 	ClassDB::bind_method(D_METHOD("set_bus_count", "amount"), &AudioServer::set_bus_count);
 	ClassDB::bind_method(D_METHOD("get_bus_count"), &AudioServer::get_bus_count);
 	ClassDB::bind_method(D_METHOD("get_bus_count"), &AudioServer::get_bus_count);

+ 4 - 0
servers/audio_server.h

@@ -436,6 +436,10 @@ public:
 
 
 	void set_enable_tagging_used_audio_streams(bool p_enable);
 	void set_enable_tagging_used_audio_streams(bool p_enable);
 
 
+#ifdef TOOLS_ENABLED
+	virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override;
+#endif
+
 	AudioServer();
 	AudioServer();
 	virtual ~AudioServer();
 	virtual ~AudioServer();
 };
 };