diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2020-07-03 13:20:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-03 13:20:52 +0200 |
commit | de33cdecb51d1ddca2a164105a4816eb345acdd8 (patch) | |
tree | 9bd8d344244013f7c316fe1d35b8a196ff22c345 | |
parent | b5fa2634d448cec8fc1c2d7ab481f9750f790323 (diff) | |
parent | ab0fe13efb9b29cac9cbd46f768979baf177af38 (diff) |
Merge pull request #40065 from rileylyman/script_drag_drop
Allow script editor scripts to be drag-dropped onto resource properties
-rw-r--r-- | editor/editor_properties.cpp | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 23db6ebb4e..8f9c92ea15 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -2983,8 +2983,16 @@ bool EditorPropertyResource::_is_drop_valid(const Dictionary &p_drag_data) const String allowed_type = base_type; Dictionary drag_data = p_drag_data; - if (drag_data.has("type") && String(drag_data["type"]) == "resource") { - Ref<Resource> res = drag_data["resource"]; + + Ref<Resource> res; + if (drag_data.has("type") && String(drag_data["type"]) == "script_list_element") { + ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(drag_data["script_list_element"]); + res = se->get_edited_resource(); + } else if (drag_data.has("type") && String(drag_data["type"]) == "resource") { + res = drag_data["resource"]; + } + + if (res.is_valid()) { for (int i = 0; i < allowed_type.get_slice_count(","); i++) { String at = allowed_type.get_slice(",", i).strip_edges(); if (res.is_valid() && ClassDB::is_parent_class(res->get_class(), at)) { @@ -3022,13 +3030,19 @@ void EditorPropertyResource::drop_data_fw(const Point2 &p_point, const Variant & ERR_FAIL_COND(!_is_drop_valid(p_data)); Dictionary drag_data = p_data; - if (drag_data.has("type") && String(drag_data["type"]) == "resource") { - Ref<Resource> res = drag_data["resource"]; - if (res.is_valid()) { - emit_changed(get_edited_property(), res); - update_property(); - return; - } + + Ref<Resource> res; + if (drag_data.has("type") && String(drag_data["type"]) == "script_list_element") { + ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(drag_data["script_list_element"]); + res = se->get_edited_resource(); + } else if (drag_data.has("type") && String(drag_data["type"]) == "resource") { + res = drag_data["resource"]; + } + + if (res.is_valid()) { + emit_changed(get_edited_property(), res); + update_property(); + return; } if (drag_data.has("type") && String(drag_data["type"]) == "files") { @@ -3036,9 +3050,9 @@ void EditorPropertyResource::drop_data_fw(const Point2 &p_point, const Variant & if (files.size() == 1) { String file = files[0]; - RES res = ResourceLoader::load(file); - if (res.is_valid()) { - emit_changed(get_edited_property(), res); + RES file_res = ResourceLoader::load(file); + if (file_res.is_valid()) { + emit_changed(get_edited_property(), file_res); update_property(); return; } |