1
0
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:
RedMser
2023-11-26 16:44:18 +01:00
parent 29b3d9e9e5
commit 9cd30208d6
9 changed files with 50 additions and 19 deletions

View File

@@ -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);
}