1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-07 12:30:27 +00:00

Contextualized Scene Tree menu

-Added context menu to Scene Tree Dock
-Removed Buttons
-Added a filter to search for nods more easily in the dock
This commit is contained in:
Juan Linietsky
2016-05-16 12:23:40 -03:00
parent 6cf4f20590
commit f9d615ee87
8 changed files with 129 additions and 11 deletions

View File

@@ -210,10 +210,10 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item,int p_column,int p_id)
}
}
void SceneTreeEditor::_add_nodes(Node *p_node,TreeItem *p_parent) {
bool SceneTreeEditor::_add_nodes(Node *p_node,TreeItem *p_parent) {
if (!p_node)
return;
return false;
// only owned nodes are editable, since nodes can create their own (manually owned) child nodes,
// which the editor needs not to know about.
@@ -227,7 +227,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node,TreeItem *p_parent) {
part_of_subscene=true;
//allow
} else {
return;
return false;
}
} else {
part_of_subscene = p_node!=get_scene_node() && get_scene_node()->get_scene_inherited_state().is_valid() && get_scene_node()->get_scene_inherited_state()->find_node_by_path(get_scene_node()->get_path_to(p_node))>=0;
@@ -345,10 +345,23 @@ void SceneTreeEditor::_add_nodes(Node *p_node,TreeItem *p_parent) {
item->set_as_cursor(0);
}
bool keep= ( filter==String() || String(p_node->get_name()).find(filter)!=-1 );
for (int i=0;i<p_node->get_child_count();i++) {
_add_nodes(p_node->get_child(i),item);
bool child_keep = _add_nodes(p_node->get_child(i),item);
keep = keep || child_keep;
}
if (!keep) {
memdelete(item);
return false;
} else {
return true;
}
}
@@ -700,6 +713,18 @@ void SceneTreeEditor::set_marked(Node *p_marked,bool p_selectable,bool p_childre
}
void SceneTreeEditor::set_filter(const String& p_filter) {
filter=p_filter;
_update_tree();
}
String SceneTreeEditor::get_filter() const {
return filter;
}
void SceneTreeEditor::set_display_foreign_nodes(bool p_display) {
display_foreign=p_display;
@@ -837,6 +862,9 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2& p_point,const Variant& p_da
if (!can_rename)
return false; //not editable tree
if (filter!=String())
return false; //can't rearrange tree with filter turned on
Dictionary d=p_data;
if (!d.has("type"))
@@ -913,6 +941,8 @@ void SceneTreeEditor::_rmb_select(const Vector2& p_pos) {
emit_signal("rmb_pressed",tree->get_global_transform().xform(p_pos));
}
void SceneTreeEditor::_bind_methods() {
ObjectTypeDB::bind_method("_tree_changed",&SceneTreeEditor::_tree_changed);
@@ -982,9 +1012,11 @@ SceneTreeEditor::SceneTreeEditor(bool p_label,bool p_can_rename, bool p_can_open
add_child( tree );
tree->set_drag_forwarding(this);
if (p_can_rename)
if (p_can_rename) {
tree->set_allow_rmb_select(true);
tree->connect("item_rmb_selected",this,"_rmb_select");
tree->connect("item_rmb_selected",this,"_rmb_select");
tree->connect("empty_tree_rmb_selected",this,"_rmb_select");
}
tree->connect("cell_selected", this,"_selected_changed");
tree->connect("item_edited", this,"_renamed",varray(),CONNECT_DEFERRED);