mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 10:37:34 +00:00
SpaceAnalyzer: Do not reset the path to '/' after a refresh
Clicking analyze or deleting a file would always cause the tree view in the widget to reset back to viewing the root. This was changed to stay in the directory currently being viewed
This commit is contained in:
parent
c045ae1a96
commit
33ea96912a
3 changed files with 26 additions and 6 deletions
|
@ -357,11 +357,27 @@ void TreeMapWidget::context_menu_event(GUI::ContextMenuEvent& context_menu_event
|
|||
on_context_menu_request(context_menu_event);
|
||||
}
|
||||
|
||||
void TreeMapWidget::recalculate_path_for_new_tree()
|
||||
{
|
||||
TreeNode const* current = &m_tree->root();
|
||||
size_t new_path_length = 0;
|
||||
for (auto& segment : m_path) {
|
||||
auto maybe_child = current->child_with_name(segment);
|
||||
if (!maybe_child.has_value())
|
||||
break;
|
||||
new_path_length++;
|
||||
current = &maybe_child.release_value();
|
||||
}
|
||||
m_path.shrink(new_path_length);
|
||||
if (new_path_length < m_viewpoint)
|
||||
m_viewpoint = new_path_length - 1;
|
||||
}
|
||||
|
||||
void TreeMapWidget::set_tree(RefPtr<Tree> tree)
|
||||
{
|
||||
m_tree = tree;
|
||||
m_path.clear();
|
||||
m_viewpoint = 0;
|
||||
recalculate_path_for_new_tree();
|
||||
|
||||
if (on_path_change) {
|
||||
on_path_change();
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ private:
|
|||
void lay_out_children(TreeNode const&, Gfx::IntRect const&, int depth, Function);
|
||||
void paint_cell_frame(GUI::Painter&, TreeNode const&, Gfx::IntRect const&, Gfx::IntRect const&, int depth, HasLabel has_label) const;
|
||||
Vector<DeprecatedString> path_to_position(Gfx::IntPoint);
|
||||
void recalculate_path_for_new_tree();
|
||||
|
||||
RefPtr<Tree> m_tree;
|
||||
Vector<DeprecatedString> m_path;
|
||||
|
|
|
@ -183,7 +183,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
|
||||
auto& file_menu = window->add_menu("&File");
|
||||
file_menu.add_action(GUI::Action::create("&Analyze", [&](auto&) {
|
||||
if (auto result = analyze(tree, treemapwidget, statusbar); result.is_error()) {
|
||||
// FIXME: Just modify the tree in memory instead of traversing the entire file system
|
||||
// FIXME: Dispose of the old tree
|
||||
auto new_tree = adopt_ref(*new Tree(""));
|
||||
if (auto result = analyze(new_tree, treemapwidget, statusbar); result.is_error()) {
|
||||
GUI::MessageBox::show_error(window, DeprecatedString::formatted("{}", result.error()));
|
||||
}
|
||||
}));
|
||||
|
@ -237,9 +240,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: Refreshing data always causes resetting the viewport back to "/".
|
||||
// It would be great if we found a way to preserve viewport across refreshes.
|
||||
if (auto result = analyze(tree, treemapwidget, statusbar); result.is_error()) {
|
||||
// FIXME: Dispose of the old tree
|
||||
auto new_tree = adopt_ref(*new Tree(""));
|
||||
if (auto result = analyze(new_tree, treemapwidget, statusbar); result.is_error()) {
|
||||
GUI::MessageBox::show_error(window, DeprecatedString::formatted("{}", result.error()));
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue