SpaceAnalyzer: Consolidate the node context menus

Instead of having two separate context menus and popping up either the
"file" or "directory" one depending on the selected node, we now have a
single context menu and update it (before popping it up) to show the
context-appropriate actions.

This is achieved by simply updating the visibility of the actions.

This takes care of one TODO! :^)
This commit is contained in:
Andreas Kling 2022-12-07 21:25:49 +01:00
parent 49f5767789
commit a3a5d2b27d

View file

@ -391,15 +391,12 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
GUI::MessageBox::show_error(window, DeprecatedString::formatted("{}", result.error())); GUI::MessageBox::show_error(window, DeprecatedString::formatted("{}", result.error()));
} }
}); });
// TODO: Both these menus could've been implemented as one, but it's impossible to change action text after it's shown once.
auto folder_node_context_menu = GUI::Menu::construct(); auto context_menu = GUI::Menu::construct();
folder_node_context_menu->add_action(*open_folder_action); context_menu->add_action(*open_folder_action);
folder_node_context_menu->add_action(*copy_path_action); context_menu->add_action(*open_containing_folder_action);
folder_node_context_menu->add_action(*delete_action); context_menu->add_action(*copy_path_action);
auto file_node_context_menu = GUI::Menu::construct(); context_menu->add_action(*delete_action);
file_node_context_menu->add_action(*open_containing_folder_action);
file_node_context_menu->add_action(*copy_path_action);
file_node_context_menu->add_action(*delete_action);
// Configure event handlers. // Configure event handlers.
breadcrumbbar.on_segment_click = [&](size_t index) { breadcrumbbar.on_segment_click = [&](size_t index) {
@ -438,10 +435,13 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
return; return;
delete_action->set_enabled(is_removable(selected_node_path)); delete_action->set_enabled(is_removable(selected_node_path));
if (Core::File::is_directory(selected_node_path)) { if (Core::File::is_directory(selected_node_path)) {
folder_node_context_menu->popup(event.screen_position()); open_folder_action->set_visible(true);
open_containing_folder_action->set_visible(false);
} else { } else {
file_node_context_menu->popup(event.screen_position()); open_folder_action->set_visible(false);
open_containing_folder_action->set_visible(true);
} }
context_menu->popup(event.screen_position());
}; };
// At startup automatically do an analysis of root. // At startup automatically do an analysis of root.