1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 10:17:35 +00:00

GameOfLife: TRY() all the things in serenity_main() :^)

This commit is contained in:
Pedro Pereira 2021-11-27 01:21:10 +00:00 committed by Andreas Kling
parent 2f5f53d1cf
commit ee3b14fc38

View file

@ -45,41 +45,41 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
window->set_double_buffering_enabled(false); window->set_double_buffering_enabled(false);
window->set_title("Game Of Life"); window->set_title("Game Of Life");
auto& main_widget = window->set_main_widget<GUI::Widget>(); auto main_widget = TRY(window->try_set_main_widget<GUI::Widget>());
main_widget.load_from_gml(game_of_life_gml); main_widget->load_from_gml(game_of_life_gml);
main_widget.set_fill_with_background_color(true); main_widget->set_fill_with_background_color(true);
auto& main_toolbar = *main_widget.find_descendant_of_type_named<GUI::Toolbar>("toolbar"); auto& main_toolbar = *main_widget->find_descendant_of_type_named<GUI::Toolbar>("toolbar");
main_toolbar.layout()->set_margins({ 0, 6 }); main_toolbar.layout()->set_margins({ 0, 6 });
auto& board_widget_container = *main_widget.find_descendant_of_type_named<GUI::Widget>("board_widget_container"); auto& board_widget_container = *main_widget->find_descendant_of_type_named<GUI::Widget>("board_widget_container");
auto& board_layout = board_widget_container.set_layout<GUI::VerticalBoxLayout>(); auto board_layout = TRY(board_widget_container.try_set_layout<GUI::VerticalBoxLayout>());
board_layout.set_spacing(0); board_layout->set_spacing(0);
auto& board_widget = board_widget_container.add<BoardWidget>(board_rows, board_columns); auto board_widget = TRY(board_widget_container.try_add<BoardWidget>(board_rows, board_columns));
board_widget.randomize_cells(); board_widget->randomize_cells();
auto& statusbar = *main_widget.find_descendant_of_type_named<GUI::Statusbar>("statusbar"); auto& statusbar = *main_widget->find_descendant_of_type_named<GUI::Statusbar>("statusbar");
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
auto& columns_spinbox = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("columns_spinbox"); auto& columns_spinbox = *main_widget->find_descendant_of_type_named<GUI::SpinBox>("columns_spinbox");
auto& rows_spinbox = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("rows_spinbox"); auto& rows_spinbox = *main_widget->find_descendant_of_type_named<GUI::SpinBox>("rows_spinbox");
columns_spinbox.set_value(board_columns); columns_spinbox.set_value(board_columns);
rows_spinbox.set_value(board_rows); rows_spinbox.set_value(board_rows);
auto size_changed_function = [&] { auto size_changed_function = [&] {
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
board_widget.resize_board(rows_spinbox.value(), columns_spinbox.value()); board_widget->resize_board(rows_spinbox.value(), columns_spinbox.value());
board_widget.update(); board_widget->update();
}; };
rows_spinbox.on_change = [&](auto) { size_changed_function(); }; rows_spinbox.on_change = [&](auto) { size_changed_function(); };
columns_spinbox.on_change = [&](auto) { size_changed_function(); }; columns_spinbox.on_change = [&](auto) { size_changed_function(); };
auto& interval_spinbox = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("interval_spinbox"); auto& interval_spinbox = *main_widget->find_descendant_of_type_named<GUI::SpinBox>("interval_spinbox");
interval_spinbox.on_change = [&](auto value) { interval_spinbox.on_change = [&](auto value) {
board_widget.set_running_timer_interval(value); board_widget->set_running_timer_interval(value);
}; };
interval_spinbox.set_value(150); interval_spinbox.set_value(150);
@ -88,88 +88,88 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
auto play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png").release_value_but_fixme_should_propagate_errors(); auto play_icon = Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png").release_value_but_fixme_should_propagate_errors();
auto toggle_running_action = GUI::Action::create("&Toggle Running", { Mod_None, Key_Return }, *play_icon, [&](GUI::Action&) { auto toggle_running_action = GUI::Action::create("&Toggle Running", { Mod_None, Key_Return }, *play_icon, [&](GUI::Action&) {
board_widget.set_running(!board_widget.is_running()); board_widget->set_running(!board_widget->is_running());
}); });
toggle_running_action->set_checkable(true); toggle_running_action->set_checkable(true);
auto& toggle_running_toolbar_button = main_toolbar.add_action(toggle_running_action); auto toggle_running_toolbar_button = TRY(main_toolbar.try_add_action(toggle_running_action));
auto run_one_generation_action = GUI::Action::create("Run &Next Generation", { Mod_Ctrl, Key_Equal }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) { auto run_one_generation_action = GUI::Action::create("Run &Next Generation", { Mod_Ctrl, Key_Equal }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/go-forward.png").release_value_but_fixme_should_propagate_errors(), [&](const GUI::Action&) {
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
board_widget.run_generation(); board_widget->run_generation();
}); });
main_toolbar.add_action(run_one_generation_action); TRY(main_toolbar.try_add_action(run_one_generation_action));
auto clear_board_action = GUI::Action::create("&Clear board", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { auto clear_board_action = GUI::Action::create("&Clear board", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
board_widget.clear_cells(); board_widget->clear_cells();
board_widget.update(); board_widget->update();
}); });
main_toolbar.add_action(clear_board_action); TRY(main_toolbar.try_add_action(clear_board_action));
auto randomize_cells_action = GUI::Action::create("&Randomize board", { Mod_Ctrl, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { auto randomize_cells_action = GUI::Action::create("&Randomize board", { Mod_Ctrl, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
board_widget.randomize_cells(); board_widget->randomize_cells();
board_widget.update(); board_widget->update();
}); });
main_toolbar.add_action(randomize_cells_action); TRY(main_toolbar.try_add_action(randomize_cells_action));
auto rotate_pattern_action = GUI::Action::create("&Rotate pattern", { 0, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/redo.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { auto rotate_pattern_action = GUI::Action::create("&Rotate pattern", { 0, Key_R }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/redo.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
board_widget.selected_pattern()->rotate_clockwise(); board_widget->selected_pattern()->rotate_clockwise();
}); });
rotate_pattern_action->set_enabled(false); rotate_pattern_action->set_enabled(false);
main_toolbar.add_action(rotate_pattern_action); TRY(main_toolbar.try_add_action(rotate_pattern_action));
auto& game_menu = window->add_menu("&Game"); auto game_menu = TRY(window->try_add_menu("&Game"));
game_menu.add_action(clear_board_action); TRY(game_menu->try_add_action(clear_board_action));
game_menu.add_action(randomize_cells_action); TRY(game_menu->try_add_action(randomize_cells_action));
game_menu.add_separator(); TRY(game_menu->try_add_separator());
game_menu.add_action(toggle_running_action); TRY(game_menu->try_add_action(toggle_running_action));
game_menu.add_action(run_one_generation_action); TRY(game_menu->try_add_action(run_one_generation_action));
game_menu.add_separator(); TRY(game_menu->try_add_separator());
game_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) { TRY(game_menu->try_add_action(GUI::CommonActions::make_quit_action([](auto&) {
GUI::Application::the()->quit(); GUI::Application::the()->quit();
})); })));
auto& help_menu = window->add_menu("&Help"); auto help_menu = TRY(window->try_add_menu("&Help"));
help_menu.add_action(GUI::CommonActions::make_about_action("Game Of Life", app_icon, window)); TRY(help_menu->try_add_action(GUI::CommonActions::make_about_action("Game Of Life", app_icon, window)));
board_widget.on_running_state_change = [&]() { board_widget->on_running_state_change = [&]() {
if (board_widget.is_running()) { if (board_widget->is_running()) {
statusbar.set_text("Running..."); statusbar.set_text("Running...");
toggle_running_toolbar_button.set_icon(*paused_icon); toggle_running_toolbar_button->set_icon(*paused_icon);
main_widget.set_override_cursor(Gfx::StandardCursor::None); main_widget->set_override_cursor(Gfx::StandardCursor::None);
} else { } else {
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
toggle_running_toolbar_button.set_icon(*play_icon); toggle_running_toolbar_button->set_icon(*play_icon);
main_widget.set_override_cursor(Gfx::StandardCursor::Drag); main_widget->set_override_cursor(Gfx::StandardCursor::Drag);
} }
interval_spinbox.set_value(board_widget.running_timer_interval()); interval_spinbox.set_value(board_widget->running_timer_interval());
rows_spinbox.set_enabled(!board_widget.is_running()); rows_spinbox.set_enabled(!board_widget->is_running());
columns_spinbox.set_enabled(!board_widget.is_running()); columns_spinbox.set_enabled(!board_widget->is_running());
interval_spinbox.set_enabled(!board_widget.is_running()); interval_spinbox.set_enabled(!board_widget->is_running());
run_one_generation_action->set_enabled(!board_widget.is_running()); run_one_generation_action->set_enabled(!board_widget->is_running());
clear_board_action->set_enabled(!board_widget.is_running()); clear_board_action->set_enabled(!board_widget->is_running());
randomize_cells_action->set_enabled(!board_widget.is_running()); randomize_cells_action->set_enabled(!board_widget->is_running());
board_widget.update(); board_widget->update();
}; };
board_widget.on_stall = [&] { board_widget->on_stall = [&] {
toggle_running_action->activate(); toggle_running_action->activate();
statusbar.set_text("Stalled..."); statusbar.set_text("Stalled...");
}; };
board_widget.on_cell_toggled = [&](auto, auto, auto) { board_widget->on_cell_toggled = [&](auto, auto, auto) {
statusbar.set_text(click_tip); statusbar.set_text(click_tip);
}; };
board_widget.on_pattern_selection_state_change = [&] { board_widget->on_pattern_selection_state_change = [&] {
rotate_pattern_action->set_enabled(board_widget.selected_pattern() != nullptr); rotate_pattern_action->set_enabled(board_widget->selected_pattern() != nullptr);
}; };
window->resize(500, 420); window->resize(500, 420);