You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-18 14:21:41 +00:00
Improve SceneTreeEditor usability
- Mark contextually relevant node - Remember/Clear selection as appropriate - Scroll to marked/selected node
This commit is contained in:
@@ -925,6 +925,27 @@ void SceneTreeEditor::_notification(int p_what) {
|
||||
|
||||
_update_tree();
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_VISIBILITY_CHANGED: {
|
||||
if (is_visible()) {
|
||||
TreeItem *item = nullptr;
|
||||
if (selected) {
|
||||
// Scroll to selected node.
|
||||
item = _find(tree->get_root(), selected->get_path());
|
||||
} else if (marked.size() == 1) {
|
||||
// Scroll to a single marked node.
|
||||
Node *marked_node = *marked.begin();
|
||||
if (marked_node) {
|
||||
item = _find(tree->get_root(), marked_node->get_path());
|
||||
}
|
||||
}
|
||||
|
||||
if (item) {
|
||||
// Must wait until tree is properly sized before scrolling.
|
||||
callable_mp(tree, &Tree::scroll_to_item).call_deferred(item, true);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1567,7 +1588,9 @@ SceneTreeEditor::~SceneTreeEditor() {
|
||||
|
||||
/******** DIALOG *********/
|
||||
|
||||
void SceneTreeDialog::popup_scenetree_dialog() {
|
||||
void SceneTreeDialog::popup_scenetree_dialog(Node *p_selected_node, Node *p_marked_node, bool p_marked_node_selectable, bool p_marked_node_children_selectable) {
|
||||
get_scene_tree()->set_marked(p_marked_node, p_marked_node_selectable, p_marked_node_children_selectable);
|
||||
get_scene_tree()->set_selected(p_selected_node);
|
||||
popup_centered_clamped(Size2(350, 700) * EDSCALE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user