1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:17:44 +00:00

GameOfLife: Use the same play/pause action in the menu and toolbar

This prevents the menu and toolbar action state getting out of sync,
which could happen previously. The menu item also now shows the
appropriate icon rather than a checkbox.
This commit is contained in:
Tim Ledbetter 2023-09-14 21:50:53 +01:00 committed by Andreas Kling
parent ccab5ddf9b
commit 3c9dee5d5a

View file

@ -100,12 +100,11 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto paused_icon = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/pause.png"sv));
auto play_icon = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/play.png"sv));
auto toggle_running_action = GUI::Action::create("&Toggle Running", { Mod_None, Key_Return }, *play_icon, [&](GUI::Action&) {
auto play_pause_action = GUI::Action::create("&Play", { Mod_None, Key_Return }, *play_icon, [&](GUI::Action&) {
board_widget->set_running(!board_widget->is_running());
});
toggle_running_action->set_checkable(true);
auto& toggle_running_toolbar_button = main_toolbar.add_action(toggle_running_action);
main_toolbar.add_action(play_pause_action);
auto run_one_generation_action = GUI::Action::create("Run &Next Generation", { Mod_Ctrl, Key_Equal }, TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/go-forward.png"sv)), [&](const GUI::Action&) {
statusbar.set_text(click_tip);
@ -138,7 +137,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
game_menu->add_action(clear_board_action);
game_menu->add_action(randomize_cells_action);
game_menu->add_separator();
game_menu->add_action(toggle_running_action);
game_menu->add_action(play_pause_action);
game_menu->add_action(run_one_generation_action);
game_menu->add_separator();
game_menu->add_action(GUI::CommonActions::make_quit_action([](auto&) {
@ -155,11 +154,13 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
board_widget->on_running_state_change = [&]() {
if (board_widget->is_running()) {
statusbar.set_text("Running..."_string);
toggle_running_toolbar_button.set_icon(*paused_icon);
play_pause_action->set_icon(paused_icon);
play_pause_action->set_text("&Pause");
main_widget->set_override_cursor(Gfx::StandardCursor::None);
} else {
statusbar.set_text(click_tip);
toggle_running_toolbar_button.set_icon(*play_icon);
play_pause_action->set_icon(play_icon);
play_pause_action->set_text("&Play");
main_widget->set_override_cursor(Gfx::StandardCursor::Drag);
}
@ -177,7 +178,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
};
board_widget->on_stall = [&] {
toggle_running_action->activate();
play_pause_action->activate();
statusbar.set_text("Stalled..."_string);
};