summaryrefslogtreecommitdiffstats
path: root/editor/editor_resource_picker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/editor_resource_picker.cpp')
-rw-r--r--editor/editor_resource_picker.cpp69
1 files changed, 39 insertions, 30 deletions
diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp
index eee589489d..50820ac12f 100644
--- a/editor/editor_resource_picker.cpp
+++ b/editor/editor_resource_picker.cpp
@@ -102,7 +102,7 @@ void EditorResourcePicker::_update_resource_preview(const String &p_path, const
}
if (p_preview.is_valid()) {
- preview_rect->set_offset(SIDE_LEFT, assign_button->get_icon()->get_width() + assign_button->get_theme_stylebox(SNAME("normal"))->get_content_margin(SIDE_LEFT) + get_theme_constant(SNAME("h_separation"), SNAME("Button")));
+ preview_rect->set_offset(SIDE_LEFT, assign_button->get_icon()->get_width() + assign_button->get_theme_stylebox(CoreStringName(normal))->get_content_margin(SIDE_LEFT) + get_theme_constant(SNAME("h_separation"), SNAME("Button")));
// Resource-specific stretching.
if (Ref<GradientTexture1D>(edited_resource).is_valid() || Ref<Gradient>(edited_resource).is_valid()) {
@@ -488,8 +488,8 @@ void EditorResourcePicker::set_create_options(Object *p_menu_node) {
if (!base_type.is_empty()) {
int idx = 0;
- HashSet<StringName> allowed_types;
- _get_allowed_types(false, &allowed_types);
+ _ensure_allowed_types();
+ HashSet<StringName> allowed_types = allowed_types_without_convert;
for (const StringName &E : allowed_types) {
const String &t = E;
@@ -593,23 +593,29 @@ static void _add_allowed_type(const StringName &p_type, HashSet<StringName> *p_v
}
}
-void EditorResourcePicker::_get_allowed_types(bool p_with_convert, HashSet<StringName> *p_vector) const {
+void EditorResourcePicker::_ensure_allowed_types() const {
+ if (!allowed_types_without_convert.is_empty()) {
+ return;
+ }
+
Vector<String> allowed_types = base_type.split(",");
int size = allowed_types.size();
for (int i = 0; i < size; i++) {
- String base = allowed_types[i].strip_edges();
+ const String base = allowed_types[i].strip_edges();
+ _add_allowed_type(base, &allowed_types_without_convert);
+ }
- _add_allowed_type(base, p_vector);
+ allowed_types_with_convert = HashSet<StringName>(allowed_types_without_convert);
- if (p_with_convert) {
- if (base == "BaseMaterial3D") {
- p_vector->insert("Texture2D");
- } else if (base == "ShaderMaterial") {
- p_vector->insert("Shader");
- } else if (base == "Texture2D") {
- p_vector->insert("Image");
- }
+ for (int i = 0; i < size; i++) {
+ const String base = allowed_types[i].strip_edges();
+ if (base == "BaseMaterial3D") {
+ allowed_types_with_convert.insert("Texture2D");
+ } else if (base == "ShaderMaterial") {
+ allowed_types_with_convert.insert("Shader");
+ } else if (base == "Texture2D") {
+ allowed_types_with_convert.insert("Image");
}
}
}
@@ -645,8 +651,8 @@ bool EditorResourcePicker::_is_drop_valid(const Dictionary &p_drag_data) const {
}
}
- HashSet<StringName> allowed_types;
- _get_allowed_types(true, &allowed_types);
+ _ensure_allowed_types();
+ HashSet<StringName> allowed_types = allowed_types_with_convert;
if (res.is_valid()) {
String res_type = _get_resource_type(res);
@@ -713,8 +719,8 @@ void EditorResourcePicker::drop_data_fw(const Point2 &p_point, const Variant &p_
}
if (dropped_resource.is_valid()) {
- HashSet<StringName> allowed_types;
- _get_allowed_types(false, &allowed_types);
+ _ensure_allowed_types();
+ HashSet<StringName> allowed_types = allowed_types_without_convert;
String res_type = _get_resource_type(dropped_resource);
@@ -835,8 +841,8 @@ void EditorResourcePicker::set_base_type(const String &p_base_type) {
// There is a possibility that the new base type is conflicting with the existing value.
// Keep the value, but warn the user that there is a potential mistake.
if (!base_type.is_empty() && edited_resource.is_valid()) {
- HashSet<StringName> allowed_types;
- _get_allowed_types(true, &allowed_types);
+ _ensure_allowed_types();
+ HashSet<StringName> allowed_types = allowed_types_with_convert;
StringName custom_class;
bool is_custom = false;
@@ -857,8 +863,8 @@ String EditorResourcePicker::get_base_type() const {
}
Vector<String> EditorResourcePicker::get_allowed_types() const {
- HashSet<StringName> allowed_types;
- _get_allowed_types(false, &allowed_types);
+ _ensure_allowed_types();
+ HashSet<StringName> allowed_types = allowed_types_without_convert;
Vector<String> types;
types.resize(allowed_types.size());
@@ -881,8 +887,8 @@ void EditorResourcePicker::set_edited_resource(Ref<Resource> p_resource) {
}
if (!base_type.is_empty()) {
- HashSet<StringName> allowed_types;
- _get_allowed_types(true, &allowed_types);
+ _ensure_allowed_types();
+ HashSet<StringName> allowed_types = allowed_types_with_convert;
StringName custom_class;
bool is_custom = false;
@@ -896,7 +902,10 @@ void EditorResourcePicker::set_edited_resource(Ref<Resource> p_resource) {
ERR_FAIL_MSG(vformat("Failed to set a resource of the type '%s' because this EditorResourcePicker only accepts '%s' and its derivatives.", class_str, base_type));
}
}
+ set_edited_resource_no_check(p_resource);
+}
+void EditorResourcePicker::set_edited_resource_no_check(Ref<Resource> p_resource) {
edited_resource = p_resource;
_update_resource();
}
@@ -1034,9 +1043,9 @@ EditorResourcePicker::EditorResourcePicker(bool p_hide_assign_button_controls) {
assign_button->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
SET_DRAG_FORWARDING_GCD(assign_button, EditorResourcePicker);
add_child(assign_button);
- assign_button->connect("pressed", callable_mp(this, &EditorResourcePicker::_resource_selected));
- assign_button->connect("draw", callable_mp(this, &EditorResourcePicker::_button_draw));
- assign_button->connect("gui_input", callable_mp(this, &EditorResourcePicker::_button_input));
+ assign_button->connect(SceneStringName(pressed), callable_mp(this, &EditorResourcePicker::_resource_selected));
+ assign_button->connect(SceneStringName(draw), callable_mp(this, &EditorResourcePicker::_button_draw));
+ assign_button->connect(SceneStringName(gui_input), callable_mp(this, &EditorResourcePicker::_button_input));
if (!p_hide_assign_button_controls) {
preview_rect = memnew(TextureRect);
@@ -1052,9 +1061,9 @@ EditorResourcePicker::EditorResourcePicker(bool p_hide_assign_button_controls) {
edit_button = memnew(Button);
edit_button->set_flat(true);
edit_button->set_toggle_mode(true);
- edit_button->connect("pressed", callable_mp(this, &EditorResourcePicker::_update_menu));
+ edit_button->connect(SceneStringName(pressed), callable_mp(this, &EditorResourcePicker::_update_menu));
add_child(edit_button);
- edit_button->connect("gui_input", callable_mp(this, &EditorResourcePicker::_button_input));
+ edit_button->connect(SceneStringName(gui_input), callable_mp(this, &EditorResourcePicker::_button_input));
add_theme_constant_override("separation", 0);
}
@@ -1323,7 +1332,7 @@ EditorAudioStreamPicker::EditorAudioStreamPicker() :
stream_preview_rect->set_offset(SIDE_BOTTOM, -1);
stream_preview_rect->set_offset(SIDE_RIGHT, -1);
stream_preview_rect->set_mouse_filter(MOUSE_FILTER_IGNORE);
- stream_preview_rect->connect("draw", callable_mp(this, &EditorAudioStreamPicker::_preview_draw));
+ stream_preview_rect->connect(SceneStringName(draw), callable_mp(this, &EditorAudioStreamPicker::_preview_draw));
get_assign_button()->add_child(stream_preview_rect);
get_assign_button()->move_child(stream_preview_rect, 0);