summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Koteroff <vortex@verona.im>2017-11-24 09:09:51 +0300
committerDmitry Koteroff <vortex@verona.im>2017-11-24 14:08:44 +0300
commitaa20a84aa909673ca0957f6a454789d4c3e8e62f (patch)
treef9850aeb03c28aec5cb8d42805560031c1a4eb8d
parent6086252f66ac185b97b0580352383e4b068b9fe5 (diff)
Implemented a collapse/expand all feature request for Inspector (issue #9427) via popup of "Object properties" button.
Editor Settings->Interface->Editor: added "Expand All Properties" option. Off by default. Cosmetics fixes due to @Reduz notes.
-rw-r--r--editor/editor_node.cpp26
-rw-r--r--editor/editor_node.h6
-rw-r--r--editor/property_editor.cpp27
-rw-r--r--editor/property_editor.h15
4 files changed, 71 insertions, 3 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index a32ade3b71..991f09acaf 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -1392,6 +1392,14 @@ void EditorNode::_property_editor_back() {
_edit_current();
}
+void EditorNode::_menu_collapseall() {
+ property_editor->collapse_all_parent_nodes();
+}
+
+void EditorNode::_menu_expandall() {
+ property_editor->expand_all_parent_nodes();
+}
+
void EditorNode::_save_default_environment() {
Ref<Environment> fallback = get_tree()->get_root()->get_world()->get_fallback_environment();
@@ -1466,6 +1474,7 @@ void EditorNode::_edit_current() {
object_menu->set_disabled(true);
bool capitalize = bool(EDITOR_DEF("interface/editor/capitalize_properties", true));
+ bool expandall = bool(EDITOR_DEF("interface/editor/expand_all_properties", true));
bool is_resource = current_obj->is_class("Resource");
bool is_node = current_obj->is_class("Node");
resource_save_button->set_disabled(!is_resource);
@@ -1537,6 +1546,10 @@ void EditorNode::_edit_current() {
property_editor->set_enable_capitalize_paths(capitalize);
}
+ if (property_editor->is_expand_all_properties_enabled() != expandall) {
+ property_editor->set_use_folding(expandall == false);
+ }
+
/* Take care of PLUGIN EDITOR */
EditorPlugin *main_plugin = editor_data.get_editor(current_obj);
@@ -1596,6 +1609,9 @@ void EditorNode::_edit_current() {
PopupMenu *p = object_menu->get_popup();
p->clear();
+ p->add_shortcut(ED_SHORTCUT("property_editor/expand_all", TTR("Expand all properties")), EXPAND_ALL);
+ p->add_shortcut(ED_SHORTCUT("property_editor/collapse_all", TTR("Collapse all properties")), COLLAPSE_ALL);
+ p->add_separator();
p->add_shortcut(ED_SHORTCUT("property_editor/copy_params", TTR("Copy Params")), OBJECT_COPY_PARAMS);
p->add_shortcut(ED_SHORTCUT("property_editor/paste_params", TTR("Paste Params")), OBJECT_PASTE_PARAMS);
p->add_separator();
@@ -2226,6 +2242,14 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
_set_editing_top_editors(current);
} break;
+ case COLLAPSE_ALL: {
+ _menu_collapseall();
+
+ } break;
+ case EXPAND_ALL: {
+ _menu_expandall();
+
+ } break;
case RUN_PLAY: {
_menu_option_confirm(RUN_STOP, true);
_run(false);
@@ -5376,11 +5400,11 @@ EditorNode::EditorNode() {
property_editor = memnew(PropertyEditor);
property_editor->set_autoclear(true);
property_editor->set_show_categories(true);
- property_editor->set_use_folding(true);
property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL);
property_editor->set_use_doc_hints(true);
property_editor->set_hide_script(false);
property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/editor/capitalize_properties", true)));
+ property_editor->set_use_folding(bool(EDITOR_DEF("interface/editor/expand_all_properties", false)) == false);
property_editor->hide_top_label();
property_editor->register_text_enter(search_box);
diff --git a/editor/editor_node.h b/editor/editor_node.h
index a2b4a0a049..05e5af7e78 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -153,6 +153,9 @@ private:
OBJECT_REQUEST_HELP,
RUN_PLAY,
+ COLLAPSE_ALL,
+ EXPAND_ALL,
+
RUN_STOP,
RUN_PLAY_SCENE,
RUN_PLAY_NATIVE,
@@ -426,6 +429,9 @@ private:
void _property_editor_forward();
void _property_editor_back();
+ void _menu_collapseall();
+ void _menu_expandall();
+
void _select_history(int p_idx);
void _prepare_history();
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index bc7d8f4b14..73a5049916 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -2668,7 +2668,12 @@ TreeItem *PropertyEditor::get_parent_node(String p_path, HashMap<String, TreeIte
if (use_folding) {
if (!obj->editor_is_section_unfolded(p_path)) {
updating_folding = true;
- item->set_collapsed(true);
+ if (folding_behaviour == FB_COLLAPSEALL)
+ item->set_collapsed(true);
+ else if (folding_behaviour == FB_EXPANDALL)
+ item->set_collapsed(false);
+ else
+ item->set_collapsed(true);
updating_folding = false;
}
item->set_metadata(0, p_path);
@@ -4207,12 +4212,31 @@ void PropertyEditor::set_subsection_selectable(bool p_selectable) {
update_tree();
}
+bool PropertyEditor::is_expand_all_properties_enabled() const {
+
+ return (use_folding == false);
+}
+
void PropertyEditor::set_use_folding(bool p_enable) {
use_folding = p_enable;
tree->set_hide_folding(false);
}
+void PropertyEditor::collapse_all_parent_nodes() {
+
+ folding_behaviour = FB_COLLAPSEALL;
+ update_tree();
+ folding_behaviour = FB_UNDEFINED;
+}
+
+void PropertyEditor::expand_all_parent_nodes() {
+
+ folding_behaviour = FB_EXPANDALL;
+ update_tree();
+ folding_behaviour = FB_UNDEFINED;
+}
+
PropertyEditor::PropertyEditor() {
_prop_edited = "property_edited";
@@ -4285,6 +4309,7 @@ PropertyEditor::PropertyEditor() {
subsection_selectable = false;
property_selectable = false;
show_type_icons = false; // maybe one day will return.
+ folding_behaviour = FB_UNDEFINED;
}
PropertyEditor::~PropertyEditor() {
diff --git a/editor/property_editor.h b/editor/property_editor.h
index e69ca8bcd5..299e8d3cd7 100644
--- a/editor/property_editor.h
+++ b/editor/property_editor.h
@@ -1,4 +1,4 @@
-/*************************************************************************/
+/*************************************************************************/
/* property_editor.h */
/*************************************************************************/
/* This file is part of: */
@@ -206,6 +206,14 @@ class PropertyEditor : public Control {
bool updating_folding;
+ enum FOLDING_BEHAVIOUR {
+ FB_UNDEFINED,
+ FB_COLLAPSEALL,
+ FB_EXPANDALL,
+ FB_EXPANDALL_FORCE
+ };
+ FOLDING_BEHAVIOUR folding_behaviour;
+
HashMap<String, String> pending;
String selected_property;
@@ -304,6 +312,11 @@ public:
void set_property_selectable(bool p_selectable);
void set_use_folding(bool p_enable);
+
+ bool is_expand_all_properties_enabled() const;
+
+ void collapse_all_parent_nodes();
+ void expand_all_parent_nodes();
PropertyEditor();
~PropertyEditor();
};