diff options
author | Andreas Kling <kling@serenityos.org> | 2020-09-18 18:38:27 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-18 21:29:01 +0200 |
commit | 3bccd99fe969ae0db3867cee0fb762d11171c5b8 (patch) | |
tree | 38ac3ec9a021c5a975b3faa453c501eb19c9ca25 /Libraries/LibGUI | |
parent | 76ae47c6ed0594329b67c7d45892b474be82b97e (diff) | |
download | serenity-3bccd99fe969ae0db3867cee0fb762d11171c5b8.zip |
LibGUI: Add TreeView::expand_all_parents_of(ModelIndex)
This does exactly what it sounds like. :^)
Diffstat (limited to 'Libraries/LibGUI')
-rw-r--r-- | Libraries/LibGUI/TreeView.cpp | 17 | ||||
-rw-r--r-- | Libraries/LibGUI/TreeView.h | 2 |
2 files changed, 19 insertions, 0 deletions
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<void(const ModelIndex&, const bool)> on_toggle; protected: |