summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editor/editor_node.cpp6
-rw-r--r--editor/editor_node.h2
-rw-r--r--editor/editor_properties.cpp48
-rw-r--r--editor/editor_properties.h3
-rw-r--r--editor/editor_resource_preview.h18
5 files changed, 55 insertions, 22 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 83fb7ade40..a29b50185c 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -1460,7 +1460,7 @@ void EditorNode::edit_item(Object *p_object) {
_set_editing_top_editors(p_object);
_display_top_editors(true);
} else {
- _hide_top_editors();
+ hide_top_editors();
}
}
@@ -1498,7 +1498,7 @@ void EditorNode::_save_default_environment() {
}
}
-void EditorNode::_hide_top_editors() {
+void EditorNode::hide_top_editors() {
_display_top_editors(false);
@@ -1675,7 +1675,7 @@ void EditorNode::_edit_current() {
} else if (!editor_plugins_over->get_plugins_list().empty()) {
- _hide_top_editors();
+ hide_top_editors();
}
}
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 192dc649e9..267c70c773 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -452,7 +452,6 @@ private:
void _instance_request(const Vector<String> &p_files);
- void _hide_top_editors();
void _display_top_editors(bool p_display);
void _set_top_editors(Vector<EditorPlugin *> p_editor_plugins_over);
void _set_editing_top_editors(Object *p_current_object);
@@ -677,6 +676,7 @@ public:
void edit_item(Object *p_object);
void edit_item_resource(RES p_resource);
bool item_has_editor(Object *p_object);
+ void hide_top_editors();
void open_request(const String &p_path);
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index a07cffb078..7068ff3d76 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -2443,6 +2443,38 @@ void EditorPropertyResource::_open_editor_pressed() {
}
}
+void EditorPropertyResource::_fold_other_editors(Object *p_self) {
+
+ if (this == p_self) {
+ return;
+ }
+
+ RES res = get_edited_object()->get(get_edited_property());
+
+ if (!res.is_valid())
+ return;
+ bool use_editor = false;
+ for (int i = 0; i < EditorNode::get_singleton()->get_editor_data().get_editor_plugin_count(); i++) {
+ EditorPlugin *ep = EditorNode::get_singleton()->get_editor_data().get_editor_plugin(i);
+ if (ep->handles(res.ptr())) {
+ use_editor = true;
+ }
+ }
+
+ if (!use_editor)
+ return;
+ bool unfolded = get_edited_object()->editor_is_section_unfolded(get_edited_property());
+
+ if (unfolded) {
+ //refold
+ assign->set_pressed(false);
+ get_edited_object()->editor_set_section_unfold(get_edited_property(), false);
+ update_property();
+ }
+
+ opened_editor = false;
+}
+
void EditorPropertyResource::update_property() {
RES res = get_edited_object()->get(get_edited_property());
@@ -2487,12 +2519,20 @@ void EditorPropertyResource::update_property() {
}
if (use_editor) {
+ //open editor directly and hide other open of these
+ _open_editor_pressed();
+ if (is_inside_tree()) {
+ get_tree()->call_deferred("call_group", "_editor_resource_properties", "_fold_other_editors", this);
+ }
+ opened_editor = true;
+ /*
Button *open_in_editor = memnew(Button);
open_in_editor->set_text(TTR("Open Editor"));
open_in_editor->set_icon(get_icon("Edit", "EditorIcons"));
sub_inspector_vbox->add_child(open_in_editor);
open_in_editor->connect("pressed", this, "_open_editor_pressed");
open_in_editor->set_h_size_flags(SIZE_SHRINK_CENTER);
+ */
}
}
@@ -2506,6 +2546,10 @@ void EditorPropertyResource::update_property() {
memdelete(sub_inspector_vbox);
sub_inspector = NULL;
sub_inspector_vbox = NULL;
+ if (opened_editor) {
+ EditorNode::get_singleton()->hide_top_editors();
+ opened_editor = false;
+ }
}
}
#endif
@@ -2726,10 +2770,12 @@ void EditorPropertyResource::_bind_methods() {
ClassDB::bind_method(D_METHOD("_button_draw"), &EditorPropertyResource::_button_draw);
ClassDB::bind_method(D_METHOD("_open_editor_pressed"), &EditorPropertyResource::_open_editor_pressed);
ClassDB::bind_method(D_METHOD("_button_input"), &EditorPropertyResource::_button_input);
+ ClassDB::bind_method(D_METHOD("_fold_other_editors"), &EditorPropertyResource::_fold_other_editors);
}
EditorPropertyResource::EditorPropertyResource() {
+ opened_editor = true;
sub_inspector = NULL;
sub_inspector_vbox = NULL;
use_sub_inspector = bool(EDITOR_GET("interface/inspector/open_resources_in_current_inspector"));
@@ -2766,6 +2812,8 @@ EditorPropertyResource::EditorPropertyResource() {
file = NULL;
scene_tree = NULL;
dropping = false;
+
+ add_to_group("_editor_resource_properties");
}
////////////// DEFAULT PLUGIN //////////////////////
diff --git a/editor/editor_properties.h b/editor/editor_properties.h
index df01ee83b5..574767890c 100644
--- a/editor/editor_properties.h
+++ b/editor/editor_properties.h
@@ -581,6 +581,9 @@ class EditorPropertyResource : public EditorProperty {
void _button_input(const Ref<InputEvent> &p_event);
void _open_editor_pressed();
+ void _fold_other_editors(Object *p_self);
+
+ bool opened_editor;
protected:
static void _bind_methods();
diff --git a/editor/editor_resource_preview.h b/editor/editor_resource_preview.h
index 703ba34e43..9b9223a818 100644
--- a/editor/editor_resource_preview.h
+++ b/editor/editor_resource_preview.h
@@ -36,24 +36,6 @@
#include "scene/main/node.h"
#include "scene/resources/texture.h"
-/* make previews for:
-*packdscene
-*wav
-*image
-*mesh
--font
-*script
-*material
--shader
--shader graph?
--navigation mesh
--collision?
--occluder polygon
--navigation polygon
--tileset
--curve and curve2D
-*/
-
class EditorResourcePreviewGenerator : public Reference {
GDCLASS(EditorResourcePreviewGenerator, Reference);