You've already forked godot
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user