diff --git a/Libraries/LibGUI/TreeView.cpp b/Libraries/LibGUI/TreeView.cpp index 028b478ed3..fc79ba0742 100644 --- a/Libraries/LibGUI/TreeView.cpp +++ b/Libraries/LibGUI/TreeView.cpp @@ -125,6 +125,23 @@ void TreeView::set_open_state_of_all_in_subtree(const ModelIndex& root, bool ope } } +void TreeView::expand_all_parents_of(const ModelIndex& index) +{ + if (!model()) + return; + + auto current = index; + while (current.is_valid()) { + ensure_metadata_for_index(current).open = true; + if (on_toggle) + on_toggle(current, true); + current = current.parent(); + } + update_column_sizes(); + update_content_size(); + update(); +} + void TreeView::expand_tree(const ModelIndex& root) { if (!model()) diff --git a/Libraries/LibGUI/TreeView.h b/Libraries/LibGUI/TreeView.h index 3b3f049370..d8e81dc431 100644 --- a/Libraries/LibGUI/TreeView.h +++ b/Libraries/LibGUI/TreeView.h @@ -44,6 +44,8 @@ public: void expand_tree(const ModelIndex& root = {}); void collapse_tree(const ModelIndex& root = {}); + void expand_all_parents_of(const ModelIndex&); + Function on_toggle; protected: