mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 18:28:12 +00:00
MasterWord: Display messages in a statusbar
In the "inspiration" for this game, messages are displayed on top of the game area in case an invalid guess is inputted. After a few seconds, they disappear. In a similar fashion, a statusbar is created on the game window and similar messages are outputted there.
This commit is contained in:
parent
d3588a9a2b
commit
cc5ea3aa4c
5 changed files with 94 additions and 19 deletions
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "WordGame.h"
|
||||
#include <AK/URL.h>
|
||||
#include <Games/MasterWord/MasterWordGML.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
|
@ -16,6 +17,7 @@
|
|||
#include <LibGUI/InputBox.h>
|
||||
#include <LibGUI/Menubar.h>
|
||||
#include <LibGUI/MessageBox.h>
|
||||
#include <LibGUI/Statusbar.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibMain/Main.h>
|
||||
|
||||
|
@ -44,20 +46,24 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
window->set_title("MasterWord");
|
||||
window->set_resizable(false);
|
||||
|
||||
auto game = TRY(window->try_set_main_widget<WordGame>());
|
||||
auto main_widget = TRY(window->try_set_main_widget<GUI::Widget>());
|
||||
main_widget->load_from_gml(master_word_gml);
|
||||
auto& game = *main_widget->find_descendant_of_type_named<MasterWord::WordGame>("word_game");
|
||||
auto& statusbar = *main_widget->find_descendant_of_type_named<GUI::Statusbar>("statusbar");
|
||||
|
||||
auto use_system_theme = Config::read_bool("MasterWord"sv, ""sv, "use_system_theme"sv, false);
|
||||
game->set_use_system_theme(use_system_theme);
|
||||
game.set_use_system_theme(use_system_theme);
|
||||
|
||||
auto shortest_word = game->shortest_word();
|
||||
auto longest_word = game->longest_word();
|
||||
auto shortest_word = game.shortest_word();
|
||||
auto longest_word = game.longest_word();
|
||||
|
||||
window->resize(game->game_size());
|
||||
window->resize(game.game_size());
|
||||
window->set_focused_widget(&game);
|
||||
|
||||
auto game_menu = TRY(window->try_add_menu("&Game"));
|
||||
|
||||
TRY(game_menu->try_add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
|
||||
game->reset();
|
||||
game.reset();
|
||||
})));
|
||||
|
||||
TRY(game_menu->try_add_separator());
|
||||
|
@ -79,8 +85,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
|
||||
word_length = maybe_word_length.value();
|
||||
Config::write_i32("MasterWord"sv, ""sv, "word_length"sv, word_length);
|
||||
game->set_word_length(word_length);
|
||||
window->resize(game->game_size());
|
||||
game.set_word_length(word_length);
|
||||
window->resize(game.game_size());
|
||||
}
|
||||
})));
|
||||
TRY(settings_menu->try_add_action(GUI::Action::create("Set &Number Of Guesses", [&](auto&) {
|
||||
|
@ -95,22 +101,22 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
|
||||
max_guesses = maybe_max_guesses.value();
|
||||
Config::write_i32("MasterWord"sv, ""sv, "max_guesses"sv, max_guesses);
|
||||
game->set_max_guesses(max_guesses);
|
||||
window->resize(game->game_size());
|
||||
game.set_max_guesses(max_guesses);
|
||||
window->resize(game.game_size());
|
||||
}
|
||||
})));
|
||||
|
||||
auto toggle_check_guesses = GUI::Action::create_checkable("Check &Guesses in dictionary", [&](auto& action) {
|
||||
auto checked = action.is_checked();
|
||||
game->set_check_guesses_in_dictionary(checked);
|
||||
game.set_check_guesses_in_dictionary(checked);
|
||||
Config::write_bool("MasterWord"sv, ""sv, "check_guesses_in_dictionary"sv, checked);
|
||||
});
|
||||
toggle_check_guesses->set_checked(game->is_checking_guesses());
|
||||
toggle_check_guesses->set_checked(game.is_checking_guesses());
|
||||
TRY(settings_menu->try_add_action(toggle_check_guesses));
|
||||
|
||||
auto theme_menu = TRY(window->try_add_menu("&Theme"));
|
||||
auto system_theme_action = GUI::Action::create("&System", [&](auto&) {
|
||||
game->set_use_system_theme(true);
|
||||
game.set_use_system_theme(true);
|
||||
Config::write_bool("MasterWord"sv, ""sv, "use_system_theme"sv, true);
|
||||
});
|
||||
system_theme_action->set_checkable(true);
|
||||
|
@ -118,7 +124,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
TRY(theme_menu->try_add_action(system_theme_action));
|
||||
|
||||
auto wordle_theme_action = GUI::Action::create("&Wordle", [&](auto&) {
|
||||
game->set_use_system_theme(false);
|
||||
game.set_use_system_theme(false);
|
||||
Config::write_bool("MasterWord"sv, ""sv, "use_system_theme"sv, false);
|
||||
});
|
||||
wordle_theme_action->set_checkable(true);
|
||||
|
@ -138,6 +144,13 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
})));
|
||||
TRY(help_menu->try_add_action(GUI::CommonActions::make_about_action("MasterWord", app_icon, window)));
|
||||
|
||||
game.on_message = [&](auto message) {
|
||||
if (!message.has_value())
|
||||
statusbar.set_text("");
|
||||
else
|
||||
statusbar.set_text(*message);
|
||||
};
|
||||
|
||||
window->show();
|
||||
|
||||
window->set_icon(app_icon.bitmap_for_size(16));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue