diff --git a/.gitmodules b/.gitmodules index 654268b..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +0,0 @@ -[submodule "external/assimp"] - path = external/assimp - url = https://github.com/assimp/assimp.git -[submodule "external/spdlog"] - path = external/spdlog - url = https://github.com/gabime/spdlog.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 036843c..735fca4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,28 +58,19 @@ if (${ENABLE_COVERAGE}) list(APPEND LINKER_FLAGS gcov) endif () -option(BUILD_SHARED_LIBS "Build package with shared libraries." ON) -option(ASSIMP_NO_EXPORT "Disable Assimp's export functionality." ON) -option(ASSIMP_INSTALL "Disable this if you want to use assimp as a submodule." OFF) -option(ASSIMP_BUILD_ZLIB "Build your own zlib" OFF) -option(ASSIMP_BUILD_TESTS "If the test suite for Assimp is built in addition to the library." OFF) -option(ASSIMP_WARNINGS_AS_ERRORS "Treat all warnings as errors." OFF) -option(ASSIMP_INSTALL_PDB "Install MSVC debug files." OFF) -option(ASSIMP_INJECT_DEBUG_POSTFIX "Inject debug postfix in .a/.so/.dll lib names" OFF) -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - option(ASSIMP_INJECT_DEBUG_POSTFIX "Inject debug postfix in .a/.so/.dll lib names" ON) -else () - option(ASSIMP_INJECT_DEBUG_POSTFIX "Inject debug postfix in .a/.so/.dll lib names" OFF) -endif () -add_subdirectory(external/assimp EXCLUDE_FROM_ALL) - -option(SPDLOG_ENABLE_PCH "Build static or shared library using precompiled header to speed up compilation time" ON) -option(SPDLOG_BUILD_WARNINGS "Enable compiler warnings" ON) -option(SPDLOG_PREVENT_CHILD_FD "Prevent from child processes to inherit log file descriptors" ON) -option(SPDLOG_NO_THREAD_ID "prevent spdlog from querying the thread id on each log call if thread id is not needed" ON) -option(SPDLOG_NO_TLS "prevent spdlog from using thread local storage" ON) -option(SPDLOG_NO_ATOMIC_LEVELS "prevent spdlog from using of std::atomic log levels (use only if your code never modifies log levels concurrently" ON) -add_subdirectory(external/spdlog EXCLUDE_FROM_ALL) +fetchcontent_declare( + spdlog + GIT_REPOSITORY https://github.com/gabime/spdlog.git + GIT_TAG v1.17.0 + GIT_SHALLOW ON +) +set(SPDLOG_ENABLE_PCH ON) +set(SPDLOG_BUILD_WARNINGS ON) +set(SPDLOG_PREVENT_CHILD_FD ON) +set(SPDLOG_NO_THREAD_ID ON) +set(SPDLOG_NO_TLS ON) +set(SPDLOG_NO_ATOMIC_LEVELS ON) +fetchcontent_makeavailable(spdlog) add_executable(LearnGtk4 main.cpp hello_world.cpp @@ -88,15 +79,14 @@ add_executable(LearnGtk4 main.cpp app_win_2_back.hpp ) -set_target_properties(LearnGtk4 assimp spdlog_header_only PROPERTIES - CXX_STANDARD 17 +set_target_properties(LearnGtk4 spdlog_header_only PROPERTIES + CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION ON ) target_compile_definitions(LearnGtk4 PUBLIC $<$:_GLIBCXX_DEBUG>) -target_compile_definitions(assimp PUBLIC $<$:_GLIBCXX_DEBUG>) target_compile_options(LearnGtk4 PUBLIC ${COMPILE_FLAGS}) target_link_options(LearnGtk4 PUBLIC ${LINKER_OPTIONS}) -target_link_libraries(LearnGtk4 PkgConfig::GTKMM4 assimp spdlog_header_only BillySheet) +target_link_libraries(LearnGtk4 PkgConfig::GTKMM4 spdlog_header_only BillySheet) diff --git a/app_win_2_back.cpp b/app_win_2_back.cpp index aa743ed..1feca51 100644 --- a/app_win_2_back.cpp +++ b/app_win_2_back.cpp @@ -1,10 +1,16 @@ #include "app_win_2_back.hpp" #include "hello_world.hpp" + #include #include #include +#include + namespace gui_to_app { + namespace ranges = std::ranges; + namespace views = std::views; + AppWin2Back::AppWin2Back() : Gtk::Application("org.billy_adventures.character_sheet", Flags::HANDLES_OPEN) { Glib::set_application_name("Billy's character sheet"); } @@ -36,7 +42,7 @@ namespace gui_to_app { void AppWin2Back::on_activate() { Application::on_activate(); - app_builder = [this]() -> Glib::RefPtr { + app_builder = [this] -> Glib::RefPtr { try { return Gtk::Builder::create_from_file("window_ui.ui"); } catch (const std::exception &e) { @@ -73,7 +79,7 @@ namespace gui_to_app { 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 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 }, @@ -88,16 +94,12 @@ namespace gui_to_app { std::pair{ "rock_kit_switch", rock_kit_switch == nullptr }, std::pair{ "sack_switch", sack_switch == nullptr }, }; - std::vector local_test_result; - local_test_result.reserve(test_ptrs.size()); - std::for_each(test_ptrs.cbegin(), - test_ptrs.cend(), - [&local_test_result](const auto &a) { - if (a.second) { - local_test_result.emplace_back(a.first); - } - }); - return local_test_result; + + return ranges::to >( + test_ptrs + | views::filter([](const auto &a) { return a.second; }) + | views::keys + ); }(); if (!test_result.empty()) { spdlog::critical("Error occurred, at least one switch is not available. See logs below"); @@ -107,16 +109,15 @@ namespace gui_to_app { on_quit(); return; } + // TODO: interaction avec la CharacterSheet } void AppWin2Back::on_quit() noexcept { - auto windows = get_windows(); - for (auto *window: windows) { - if (window != nullptr) { - window->set_visible(false); - delete window; - } - } + ranges::for_each(get_windows() | views::filter([](const auto windows) { return windows != nullptr; }), + [](auto *window) { + window->set_visible(false); + delete window; + }); quit(); } } // gui_to_app diff --git a/external/assimp b/external/assimp deleted file mode 160000 index f6c6260..0000000 --- a/external/assimp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f6c62605c76001ac37f1d86da9922ef61e65501d diff --git a/external/spdlog b/external/spdlog deleted file mode 160000 index 27cb4c7..0000000 --- a/external/spdlog +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 27cb4c76708608465c413f6d0e6b8d99a4d84302 diff --git a/hello_world.cpp b/hello_world.cpp index 87dbeb3..43cdb38 100644 --- a/hello_world.cpp +++ b/hello_world.cpp @@ -3,5 +3,6 @@ namespace learn_gtkmm4 { HelloWorld::HelloWorld(BaseObjectType *cobject, const Glib::RefPtr &builder) : - Gtk::ApplicationWindow(cobject), m_builder(builder) {} -} // learn_gtkmm4 \ No newline at end of file + Gtk::ApplicationWindow(cobject), m_builder(builder) { + } +} // learn_gtkmm4 diff --git a/hello_world.hpp b/hello_world.hpp index f3ab9a8..ea2cfd0 100644 --- a/hello_world.hpp +++ b/hello_world.hpp @@ -7,7 +7,6 @@ namespace learn_gtkmm4 { - class HelloWorld final : public Gtk::ApplicationWindow { public: using Gtk::ApplicationWindow::BaseObjectType; @@ -19,7 +18,6 @@ namespace learn_gtkmm4 { protected: Glib::RefPtr m_builder; }; - } // learn_gtkmm4 #endif //LEARNGTK4_HELLO_WORLD_HPP diff --git a/main.cpp b/main.cpp index fe0d3eb..d267240 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,6 @@ #include "app_win_2_back.hpp" -int main(int argc, char *argv[]) { - auto app = gui_to_app::AppWin2Back::create(); +int main(const int argc, char *argv[]) { + const auto app = gui_to_app::AppWin2Back::create(); return app->run(argc, argv); }