diff --git a/app_win_2_back.cpp b/app_win_2_back.cpp index 0ad2952..7d80cae 100644 --- a/app_win_2_back.cpp +++ b/app_win_2_back.cpp @@ -4,9 +4,7 @@ #include #include -#include -#include - +#include #include #include @@ -17,7 +15,6 @@ namespace gui_to_app { AppWin2Back::AppWin2Back() : Gtk::Application("org.billy_adventures.character_sheet", Flags::HANDLES_OPEN) { Glib::set_application_name("Billy's character sheet"); - selection_buttons.reserve(signal_handlers.size()); } void AppWin2Back::on_startup() { @@ -44,42 +41,45 @@ namespace gui_to_app { return Glib::make_refptr_for_instance(new AppWin2Back()); } - void AppWin2Back::SwitchSignalHelper::signal_handler() noexcept { - if (switch_ != nullptr && !on_stack) { - if (switch_->get_active()) { - if (!app.insert_obj(obj)) { - on_stack = true; - switch_->set_active(false); - } - } else { - if (!app.erase_obj(obj)) { - on_stack = true; - switch_->set_active(true); - spdlog::warn( - "Erasing object {} was not successful", - character::BillyObjects::billy_object_to_string(obj).data() - ); - } - } - } - if (on_stack) { - on_stack = false; - } - } + void AppWin2Back::on_activate() { + Application::on_activate(); - bool AppWin2Back::switches_procedure() { - sword_switch = app_builder->get_widget("sword_button"); - lance_switch = app_builder->get_widget("lance_button"); - morgen_switch = app_builder->get_widget("morgenstern_button"); - bow_switch = app_builder->get_widget("arc_button"); - chainmail_switch = app_builder->get_widget("chainmail_button"); - cookpot_switch = app_builder->get_widget("cookingpot_button"); - pamphlet_switch = app_builder->get_widget("pamphlet_tourist_button"); - medkit_switch = app_builder->get_widget("medkit_button"); - fourche_switch = app_builder->get_widget("fourche_button"); - dagger_switch = app_builder->get_widget("dagger_button"); - rock_kit_switch = app_builder->get_widget("rock_kit_button"); - sack_switch = app_builder->get_widget("sack_button"); + 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 = ranges::to >( std::array{ @@ -106,9 +106,9 @@ namespace gui_to_app { spdlog::critical(result); } on_quit(); - return true; + return; } - + // TODO: interaction avec la CharacterSheet ranges::for_each(views::zip(std::array{ sword_switch, lance_switch, @@ -124,53 +124,13 @@ namespace gui_to_app { sack_switch, }, signal_handlers), - [this](const std::tuple &vals) { + [](const std::tuple &vals) { const auto &[switch_val, signal_handle] = vals; signal_handle.switch_ = switch_val; - selection_buttons.emplace(switch_val); - switch_val->signal_toggled().connect( + switch_val->signal_state_set().connect( sigc::mem_fun(signal_handle, &SwitchSignalHelper::signal_handler), false); }); - return false; - } - - void AppWin2Back::on_activate() { - Application::on_activate(); - - app_builder = [] -> 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()); - 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; - } - if (switches_procedure()) { - return; - } - debug_button = app_builder->get_widget("debug_button"); - hab_base = app_builder->get_widget("habilete_label_base"); - hab_carac = app_builder->get_widget("habilete_label_carac"); - hab_mat = app_builder->get_widget("habilete_label_materiel"); - hab_total = app_builder->get_widget("habilete_label_total"); - - debug_button->signal_clicked().connect(sigc::mem_fun(*this, &AppWin2Back::debug_button_clicked), false); } void AppWin2Back::on_quit() noexcept { @@ -185,19 +145,4 @@ namespace gui_to_app { bool AppWin2Back::switch_signal_handler(const bool flag, const character::billyEnums &obj) noexcept { return flag ? gestionnaire.insert_object(sheet, obj) : !gestionnaire.erase_object(sheet, obj); } - - void AppWin2Back::debug_button_clicked() const noexcept { - spdlog::info("Display objects"); - for (const auto &obj: sheet.get_objects() | views::values) { - spdlog::info("Object: {}", obj->to_string()); - } - } - - bool AppWin2Back::insert_obj(const character::billyEnums &obj) noexcept { - return gestionnaire.insert_object(sheet, obj); - } - - bool AppWin2Back::erase_obj(const character::billyEnums &obj) noexcept { - return gestionnaire.erase_object(sheet, obj); - } } // gui_to_app diff --git a/app_win_2_back.hpp b/app_win_2_back.hpp index b0f30d5..7f950dd 100644 --- a/app_win_2_back.hpp +++ b/app_win_2_back.hpp @@ -5,10 +5,10 @@ #include #include -#include #include #include +#include namespace learn_gtkmm4 { class HelloWorld; @@ -16,8 +16,7 @@ namespace learn_gtkmm4 { namespace Gtk { class Builder; - class Label; - class Button; + class Switch; } namespace gui_to_app { @@ -35,60 +34,39 @@ namespace gui_to_app { void on_activate() final; private: - using selection_button = Gtk::CheckButton; - using buttons_obj_container = std::unordered_set; - - struct SwitchSignalHelper { AppWin2Back &app; const character::billyEnums obj; - selection_button *switch_{ nullptr }; - bool on_stack{ false }; + Gtk::Switch *switch_{ nullptr }; - void signal_handler() noexcept; + [[nodiscard]] bool signal_handler(const bool flag) const noexcept { + switch_->set_state(app.switch_signal_handler(flag, obj)); + return true; + } }; friend struct SwitchSignalHelper; - /*! - * - * @return true: failed, false: success - */ - bool switches_procedure(); - void on_quit() noexcept; bool switch_signal_handler(bool flag, const character::billyEnums &obj) noexcept; - void debug_button_clicked() const noexcept; - - bool insert_obj(const character::billyEnums &obj) noexcept; - - bool erase_obj(const character::billyEnums &obj) noexcept; - Glib::RefPtr app_builder; learn_gtkmm4::HelloWorld *main_window{ nullptr }; - selection_button *sword_switch{ nullptr }; - selection_button *lance_switch{ nullptr }; - selection_button *morgen_switch{ nullptr }; - selection_button *bow_switch{ nullptr }; + Gtk::Switch *sword_switch{ nullptr }; + Gtk::Switch *lance_switch{ nullptr }; + Gtk::Switch *morgen_switch{ nullptr }; + Gtk::Switch *bow_switch{ nullptr }; - selection_button *chainmail_switch{ nullptr }; - selection_button *cookpot_switch{ nullptr }; - selection_button *pamphlet_switch{ nullptr }; - selection_button *medkit_switch{ nullptr }; + Gtk::Switch *chainmail_switch{ nullptr }; + Gtk::Switch *cookpot_switch{ nullptr }; + Gtk::Switch *pamphlet_switch{ nullptr }; + Gtk::Switch *medkit_switch{ nullptr }; - selection_button *fourche_switch{ nullptr }; - selection_button *dagger_switch{ nullptr }; - selection_button *rock_kit_switch{ nullptr }; - selection_button *sack_switch{ nullptr }; - - Gtk::Label *hab_base{ nullptr }; - Gtk::Label *hab_carac{ nullptr }; - Gtk::Label *hab_mat{ nullptr }; - Gtk::Label *hab_total{ nullptr }; - - Gtk::Button *debug_button{ nullptr }; + Gtk::Switch *fourche_switch{ nullptr }; + Gtk::Switch *dagger_switch{ nullptr }; + Gtk::Switch *rock_kit_switch{ nullptr }; + Gtk::Switch *sack_switch{ nullptr }; std::array signal_handlers{ SwitchSignalHelper{ .app = *this, .obj = character::weapons::Sword }, @@ -107,8 +85,6 @@ namespace gui_to_app { SwitchSignalHelper{ .app = *this, .obj = character::tools::SackOfGrain }, }; - buttons_obj_container selection_buttons; - character::BillyObjects gestionnaire{}; character::CharacterSheet sheet{}; }; diff --git a/window_ui.ui b/window_ui.ui index c6cf1fd..dae0b80 100644 --- a/window_ui.ui +++ b/window_ui.ui @@ -1,7 +1,5 @@ - - + - 500 @@ -19,7 +17,7 @@ center - HABILETÉ + HABILETÉ 0 0 @@ -53,7 +51,7 @@ start - Carac. + Carac. 0 1 @@ -72,7 +70,7 @@ start - Matériel + Matériel 0 2 @@ -124,7 +122,7 @@ center - ENDURANCE + ENDURANCE 0 0 @@ -158,7 +156,7 @@ start - Carac. + Carac. 0 1 @@ -177,7 +175,7 @@ start - Matériel + Matériel 0 2 @@ -231,7 +229,7 @@ 1 center - MATÉRIEL + MATÉRIEL 0 0 @@ -244,7 +242,7 @@ - Armes + Armes @@ -256,13 +254,13 @@ fill - Épée + Épée - + end - True + 1 @@ -275,13 +273,13 @@ - Lance + Lance - + end - True + 1 @@ -294,13 +292,13 @@ - Morgenstern + Morgenstern - + end - True + 1 @@ -313,13 +311,13 @@ - Arc + Arc - + end - True + 1 @@ -330,7 +328,7 @@ - Équipements + Équipements @@ -341,13 +339,13 @@ - Cote de maille + Cote de maille - + end - True + 1 @@ -360,13 +358,13 @@ - Faitout cuisine + Faitout cuisine - + end - True + 1 @@ -379,13 +377,13 @@ - Guide touristique + Guide touristique - + end - True + 1 @@ -398,13 +396,13 @@ - Trousse de soin + Trousse de soin - + end - True + 1 @@ -415,7 +413,7 @@ - Outils + Outils @@ -426,13 +424,13 @@ - Fourche + Fourche - + end - True + 1 @@ -445,13 +443,13 @@ - Dague + Dague - + end - True + 1 @@ -464,13 +462,13 @@ - Kit d'escalade + Kit d'escalade - + end - True + 1 @@ -483,13 +481,13 @@ - Bourse de graines + Bourse de graines - + end - True + 1 @@ -514,7 +512,7 @@ center - ADRESSE + ADRESSE 0 0 @@ -548,7 +546,7 @@ start - Carac. + Carac. 0 1 @@ -567,7 +565,7 @@ start - Matériel + Matériel 0 2 @@ -619,7 +617,7 @@ center - CHANCE + CHANCE 0 0 @@ -653,7 +651,7 @@ start - Carac. + Carac. 0 1 @@ -672,7 +670,7 @@ start - Matériel + Matériel 0 2 @@ -719,12 +717,6 @@ - - - center - Print Sheet - - @@ -735,7 +727,7 @@ 1 center - STAT. SECONDAIRES + STAT. SECONDAIRES center 0 @@ -755,7 +747,7 @@ center - Dégâts + Dégâts 0 0 @@ -785,7 +777,7 @@ center - Armure + Armure 0 0 @@ -813,7 +805,7 @@ - Critique + Critique 0 0