1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-10 13:00:37 +00:00

Make tool menu plugins use Callables for callback

This commit is contained in:
kobewi
2020-12-16 00:04:21 +01:00
parent 92d4deedaa
commit 889f5e44ef
7 changed files with 15 additions and 38 deletions

View File

@@ -2743,16 +2743,13 @@ void EditorNode::_tool_menu_option(int p_idx) {
} break;
case TOOLS_CUSTOM: {
if (tool_menu->get_item_submenu(p_idx) == "") {
Array params = tool_menu->get_item_metadata(p_idx);
Object *handler = ObjectDB::get_instance(params[0]);
String callback = params[1];
Variant *ud = &params[2];
Callable callback = tool_menu->get_item_metadata(p_idx);
Callable::CallError ce;
Variant result;
callback.call(nullptr, 0, result, ce);
handler->call(callback, (const Variant **)&ud, 1, ce);
if (ce.error != Callable::CallError::CALL_OK) {
String err = Variant::get_call_error_text(handler, callback, (const Variant **)&ud, 1, ce);
String err = Variant::get_callable_error_text(callback, nullptr, 0, ce);
ERR_PRINT("Error calling function from tool menu: " + err);
}
} // else it's a submenu so don't do anything.
@@ -5086,17 +5083,10 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String> &p_paths, Control *
return drag_data;
}
void EditorNode::add_tool_menu_item(const String &p_name, Object *p_handler, const String &p_callback, const Variant &p_ud) {
ERR_FAIL_NULL(p_handler);
void EditorNode::add_tool_menu_item(const String &p_name, const Callable &p_callback) {
int idx = tool_menu->get_item_count();
tool_menu->add_item(p_name, TOOLS_CUSTOM);
Array parameters;
parameters.push_back(p_handler->get_instance_id());
parameters.push_back(p_callback);
parameters.push_back(p_ud);
tool_menu->set_item_metadata(idx, parameters);
tool_menu->set_item_metadata(idx, p_callback);
}
void EditorNode::add_tool_submenu_item(const String &p_name, PopupMenu *p_submenu) {