From 1c29633110e39d51925616b15ca02dd6e1695b19 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Sat, 13 Nov 2021 17:38:21 +0000 Subject: [PATCH] Minesweeper: Turn difficulty menu into checkable actions This change makes use of checkable actions to specify the current selected difficulty for the game. --- Userland/Games/Minesweeper/main.cpp | 42 ++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/Userland/Games/Minesweeper/main.cpp b/Userland/Games/Minesweeper/main.cpp index 47bc685235..d91186db7e 100644 --- a/Userland/Games/Minesweeper/main.cpp +++ b/Userland/Games/Minesweeper/main.cpp @@ -8,6 +8,7 @@ #include "Field.h" #include #include +#include #include #include #include @@ -120,22 +121,43 @@ int main(int argc, char** argv) })); auto& difficulty_menu = window->add_menu("&Difficulty"); - difficulty_menu.add_action(GUI::Action::create("&Beginner", { Mod_Ctrl, Key_B }, [&](auto&) { + GUI::ActionGroup difficulty_actions; + difficulty_actions.set_exclusive(true); + + auto action = GUI::Action::create_checkable("&Beginner", { Mod_Ctrl, Key_B }, [&](auto&) { field.set_field_size(9, 9, 10); - })); - difficulty_menu.add_action(GUI::Action::create("&Intermediate", { Mod_Ctrl, Key_I }, [&](auto&) { + }); + action->set_checked(field.rows() == 9 && field.columns() == 9 && field.mine_count() == 10); + difficulty_menu.add_action(action); + difficulty_actions.add_action(action); + + action = GUI::Action::create_checkable("&Intermediate", { Mod_Ctrl, Key_I }, [&](auto&) { field.set_field_size(16, 16, 40); - })); - difficulty_menu.add_action(GUI::Action::create("&Expert", { Mod_Ctrl, Key_E }, [&](auto&) { + }); + action->set_checked(field.rows() == 16 && field.columns() == 16 && field.mine_count() == 40); + difficulty_menu.add_action(action); + difficulty_actions.add_action(action); + + action = GUI::Action::create_checkable("&Expert", { Mod_Ctrl, Key_E }, [&](auto&) { field.set_field_size(16, 30, 99); - })); - difficulty_menu.add_action(GUI::Action::create("&Madwoman", { Mod_Ctrl, Key_M }, [&](auto&) { + }); + action->set_checked(field.rows() == 16 && field.columns() == 30 && field.mine_count() == 99); + difficulty_menu.add_action(action); + difficulty_actions.add_action(action); + + action = GUI::Action::create_checkable("&Madwoman", { Mod_Ctrl, Key_M }, [&](auto&) { field.set_field_size(32, 60, 350); - })); + }); + action->set_checked(field.rows() == 32 && field.columns() == 60 && field.mine_count() == 350); + difficulty_menu.add_action(action); + difficulty_actions.add_action(action); + difficulty_menu.add_separator(); - difficulty_menu.add_action(GUI::Action::create("&Custom game...", { Mod_Ctrl, Key_C }, [&](auto&) { + action = GUI::Action::create_checkable("&Custom game...", { Mod_Ctrl, Key_C }, [&](auto&) { CustomGameDialog::show(window, field); - })); + }); + difficulty_menu.add_action(action); + difficulty_actions.add_action(action); auto& help_menu = window->add_menu("&Help"); help_menu.add_action(GUI::CommonActions::make_about_action("Minesweeper", app_icon, window));