SystemMonitor: Add an action to pause updates

This commit is contained in:
Tim Ledbetter
2024-01-13 22:25:56 +00:00
parent 5cb1d2a63e
commit 4091d7fc05

View File

@@ -313,7 +313,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
process_model->update();
i32 frequency = Config::read_i32("SystemMonitor"sv, "Monitor"sv, "Frequency"sv, 3);
if (frequency != 1 && frequency != 3 && frequency != 5) {
if (frequency != 0 && frequency != 1 && frequency != 3 && frequency != 5) {
frequency = 3;
Config::write_i32("SystemMonitor"sv, "Monitor"sv, "Frequency"sv, frequency);
}
@@ -334,7 +334,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
};
update_stats();
auto& refresh_timer = window->add<Core::Timer>(frequency * 1000, move(update_stats));
refresh_timer.start();
if (frequency > 0)
refresh_timer.start();
auto selected_id = [&](ProcessModel::Column column) -> pid_t {
if (process_table_view.selection().is_empty())
@@ -453,9 +454,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
frequency_action_group.set_exclusive(true);
auto make_frequency_action = [&](int seconds) -> ErrorOr<void> {
auto action = GUI::Action::create_checkable(ByteString::formatted("&{} Sec", seconds), [&refresh_timer, seconds](auto&) {
auto action = GUI::Action::create_checkable(ByteString::formatted("&{} Sec", seconds), [&window, &refresh_timer, seconds](auto&) {
Config::write_i32("SystemMonitor"sv, "Monitor"sv, "Frequency"sv, seconds);
refresh_timer.restart(seconds * 1000);
window->set_title("System Monitor");
});
action->set_status_tip(TRY(String::formatted("Refresh every {} seconds", seconds)));
action->set_checked(frequency == seconds);
@@ -473,6 +475,16 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
window->set_fullscreen(!window->is_fullscreen());
}));
auto pause_action = GUI::Action::create_checkable("&Paused", [&window, &refresh_timer](auto&) {
Config::write_i32("SystemMonitor"sv, "Monitor"sv, "Frequency"sv, 0);
window->set_title("System Monitor - Paused");
refresh_timer.stop();
});
pause_action->set_status_tip("Pause updates"_string);
pause_action->set_checked(frequency == 0);
frequency_action_group.add_action(*pause_action);
frequency_menu->add_action(*pause_action);
auto help_menu = window->add_menu("&Help"_string);
help_menu->add_action(GUI::CommonActions::make_command_palette_action(window));
help_menu->add_action(GUI::CommonActions::make_about_action("System Monitor"_string, app_icon, window));