#include "app_win_2_back.hpp" #include "hello_world.hpp" #include #include #include namespace gui_to_app { AppWin2Back::AppWin2Back() : Gtk::Application("org.billy_adventures.character_sheet", Flags::HANDLES_OPEN) { Glib::set_application_name("Billy's character sheet"); } void AppWin2Back::on_startup() { Application::on_startup(); const auto menu_bar = []() -> Glib::RefPtr { try { const auto builder = Gtk::Builder::create_from_file("menu_bar.ui"); return builder->get_object("menu"); } catch (const std::exception &e) { spdlog::error("Error occurred while loader menu bar: {}", e.what()); return nullptr; } }(); if (!menu_bar) { spdlog::error("Error occured while loading menu bar's."); } else { set_menubar(menu_bar); add_action("quit", sigc::mem_fun(*this, &AppWin2Back::on_quit)); set_accel_for_action("app.quit", "q"); } } Glib::RefPtr AppWin2Back::create() { return Glib::make_refptr_for_instance(new AppWin2Back()); } void AppWin2Back::on_activate() { Application::on_activate(); const auto app_builder = [this]() -> Glib::RefPtr { try { return Gtk::Builder::create_from_file("window_ui.ui"); } catch (const std::exception &e) { spdlog::critical("Error occurred while loading Window's UI: {}", e.what()); quit(); return nullptr; } }(); if (!app_builder) { spdlog::critical("Error while loading UI"); quit(); return; } main_window = Gtk::Builder::get_widget_derived(app_builder, "main_window"); if (main_window != nullptr) { add_window(*main_window); main_window->set_show_menubar(true); main_window->set_visible(true); } else { spdlog::critical("Error while getting window from builder"); on_quit(); return; } sword_switch = app_builder->get_widget("sword_switch"); lance_switch = app_builder->get_widget("lance_switch"); morgen_switch = app_builder->get_widget("morgenstern_switch"); bow_switch = app_builder->get_widget("arc_switch"); chainmail_switch = app_builder->get_widget("chainmail_switch"); cookpot_switch = app_builder->get_widget("cookingpot_switch"); pamphlet_switch = app_builder->get_widget("pamphlet_tourist_switch"); medkit_switch = app_builder->get_widget("medkit_switch"); fourche_switch = app_builder->get_widget("fourche_switch"); dagger_switch = app_builder->get_widget("dagger_switch"); rock_kit_switch = app_builder->get_widget("rock_kit_switch"); sack_switch = app_builder->get_widget("sack_switch"); const auto test_result = [this]() -> std::vector { const std::array test_ptrs{ std::pair{ "sword_switch", sword_switch == nullptr }, std::pair{ "lance_switch", lance_switch == nullptr }, std::pair{ "morgen_switch", morgen_switch == nullptr }, std::pair{ "bow_switch", bow_switch == nullptr }, std::pair{ "chainmail_switch", chainmail_switch == nullptr }, std::pair{ "cookpot_switch", cookpot_switch == nullptr }, std::pair{ "pamphlet_switch", pamphlet_switch == nullptr }, std::pair{ "medkit_switch", medkit_switch == nullptr }, std::pair{ "fourche_switch", fourche_switch == nullptr }, std::pair{ "dagger_switch", dagger_switch == nullptr }, std::pair{ "rock_kit_switch", rock_kit_switch == nullptr }, std::pair{ "sack_switch", sack_switch == nullptr }, }; std::vector test_result; test_result.reserve(test_ptrs.size()); std::for_each(test_ptrs.cbegin(), test_ptrs.cend(), [&test_result](const auto &a) { if (a.second) { test_result.emplace_back(a.first); } }); return test_result; }(); if (!test_result.empty()) { spdlog::critical("Error occurred, at least one switch is not available. See logs below"); for (const auto result: test_result) { spdlog::critical(result); } on_quit(); return; } } void AppWin2Back::on_quit() noexcept { auto windows = get_windows(); for (auto *window: windows) { window->set_visible(false); delete window; } quit(); } } // gui_to_app