diff options
| -rw-r--r-- | .vscode/settings.json | 5 | ||||
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | app/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | cmake/Modules/GlibCompileSchemas.cmake | 44 | ||||
| -rw-r--r-- | core/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | core/include/turns/core/settings.hpp | 21 | ||||
| -rw-r--r-- | core/schemas/ch.arknet.Turns.gschema.xml (renamed from app/ch.arknet.Turns.gschema.xml) | 0 | ||||
| -rw-r--r-- | core/src/settings.cpp | 28 | ||||
| -rw-r--r-- | ui/src/windows/tracker.cpp | 5 |
9 files changed, 117 insertions, 9 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index ccee2f6..9338cfa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,7 +15,7 @@ ], "editor.tabSize": 2, - + "cSpell.language": "en,de", @@ -29,7 +29,8 @@ "cmake.configureArgs": [ "-DCMAKE_EXPORT_COMPILE_COMMANDS=YES", "-DCMAKE_INSTALL_PREFIX=${env:HOME}/.local", - "-DTURNS_USE_INSTALLED_TRANSLATIONS=OFF" + "-DTURNS_USE_INSTALLED_TRANSLATIONS=OFF", + "-DTURNS_USE_INSTALLED_SCHEMA_FILES=OFF" ], "C_Cpp.autoAddFileAssociations": false, diff --git a/CMakeLists.txt b/CMakeLists.txt index b660a86..5f894ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ include("Cambalache") include("CheckIPOSupported") include("EnableCoverage") include("GlibCompileResources") +include("GlibCompileSchemas") include("GNUInstallDirs") find_package("Gettext" REQUIRED) @@ -38,6 +39,7 @@ set(LIBADWAITA_MINIMUM_VERSION "1.5") # Build options option(TURNS_USE_INSTALLED_TRANSLATIONS "Use the installed translation files" ON) +option(TURNS_USE_INSTALLED_SCHEMA_FILES "Use the installed schema files" ON) # Dependencies diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 9a94702..da6d90f 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -43,8 +43,3 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/turns.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/mime/packages" ) - -install(FILES - "ch.arknet.Turns.gschema.xml" - DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glib-2.0/schemas" -) diff --git a/cmake/Modules/GlibCompileSchemas.cmake b/cmake/Modules/GlibCompileSchemas.cmake new file mode 100644 index 0000000..1595e36 --- /dev/null +++ b/cmake/Modules/GlibCompileSchemas.cmake @@ -0,0 +1,44 @@ +find_program(GLIB_COMPILE_SCHEMAS_BIN + NAMES "glib-compile-schemas" + REQUIRED +) + +function(target_add_glib_schemas TARGET) + set(SINGLE_VALUE_ARGS "SCHEMA_DIR") + cmake_parse_arguments( + PARSE_ARGV 1 + "" + "${OPTIONS}" + "${SINGLE_VALUE_ARGS}" + "${MULTI_VALUE_ARGS}" + ) + + if(NOT TARGET "${TARGET}") + message(FATAL_ERROR "Target '${TARGET}' does not exist") + endif() + + if(NOT IS_ABSOLUTE "${_SCHEMA_DIR}") + get_filename_component(_SCHEMA_DIR "${_SCHEMA_DIR}" REALPATH) + endif() + + if(NOT IS_DIRECTORY "${_SCHEMA_DIR}") + message(FATAL_ERROR "Directory '${_SCHEMA_DIR}' does not exists") + endif() + + file(GLOB SCHAMA_FILES CONFIGURE_DEPENDS "${_SCHEMA_DIR}/*.gschema.xml") + + add_custom_command(TARGET "${TARGET}" + PRE_BUILD + BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/glib-2.0/schemas/gschemas.compiled" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMAND "${GLIB_COMPILE_SCHEMAS_BIN}" + ARGS + "--targetdir=${CMAKE_CURRENT_BINARY_DIR}/glib-2.0/schemas" + "--strict" + "${_SCHEMA_DIR}" + VERBATIM + COMMENT "Compiling gsettings schemas" + DEPENDS + ${SCHEMA_FILES} + ) +endfunction() diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 9b6390c..5ec88e4 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -4,6 +4,7 @@ add_library("core" "src/disposition.cpp" "src/init.cpp" "src/participant.cpp" + "src/settings.cpp" "src/turn_order.cpp" ) @@ -16,6 +17,12 @@ target_compile_options("core" PUBLIC "$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic-errors>" ) +if(NOT TURNS_USE_INSTALLED_SCHEMA_FILES) + target_compile_definitions("core" PUBLIC + "TURNS_SETTINGS_SCHEMA_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"" + ) +endif() + target_include_directories("core" PUBLIC "include" ) @@ -26,8 +33,17 @@ target_link_libraries("core" PUBLIC "nlohmann_json::nlohmann_json" ) +target_add_glib_schemas("core" + SCHEMA_DIR "schemas" +) + enable_coverage("core") +install(FILES + "schemas/ch.arknet.Turns.gschema.xml" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glib-2.0/schemas" +) + # Tests add_executable("core-tests" diff --git a/core/include/turns/core/settings.hpp b/core/include/turns/core/settings.hpp new file mode 100644 index 0000000..3e21a47 --- /dev/null +++ b/core/include/turns/core/settings.hpp @@ -0,0 +1,21 @@ +#ifndef TURNS_CORE_SETTINGS_HPP +#define TURNS_CORE_SETTINGS_HPP + +#include <glibmm/refptr.h> + +#include <giomm/settings.h> + +namespace turns::core +{ + namespace key + { + auto constexpr disposition_friendly_color = "disposition-friendly-color"; + auto constexpr disposition_hostile_color = "disposition-hostile-color"; + auto constexpr disposition_secret_color = "disposition-secret-color"; + auto constexpr skip_defeated = "skip-defeated"; + } // namespace key + + auto get_settings() -> Glib::RefPtr<Gio::Settings>; +} // namespace turns::core + +#endif
\ No newline at end of file diff --git a/app/ch.arknet.Turns.gschema.xml b/core/schemas/ch.arknet.Turns.gschema.xml index d764608..d764608 100644 --- a/app/ch.arknet.Turns.gschema.xml +++ b/core/schemas/ch.arknet.Turns.gschema.xml diff --git a/core/src/settings.cpp b/core/src/settings.cpp new file mode 100644 index 0000000..c98e5eb --- /dev/null +++ b/core/src/settings.cpp @@ -0,0 +1,28 @@ +#include "turns/core/settings.hpp" + +#include <glibmm/refptr.h> +#include <glibmm/wrap.h> + +#include <giomm/settings.h> +#include <giomm/settingsschemasource.h> + +#include <gio/gsettings.h> + +namespace turns::core +{ + + auto get_settings() -> Glib::RefPtr<Gio::Settings> + { + auto constexpr schema_id = "ch.arknet.Turns"; + +#ifdef TURNS_SETTINGS_SCHEMA_DIR + auto source = Gio::SettingsSchemaSource::create(TURNS_SETTINGS_SCHEMA_DIR "/glib-2.0/schemas", true); + auto schema = source->lookup(schema_id, true); + auto settings = g_settings_new_full(Glib::unwrap(schema), nullptr, nullptr); + return Glib::wrap(settings); +#else + return Gio::Settings::create(schema); +#endif + } + +} // namespace turns::core diff --git a/ui/src/windows/tracker.cpp b/ui/src/windows/tracker.cpp index e087eb0..b38b9da 100644 --- a/ui/src/windows/tracker.cpp +++ b/ui/src/windows/tracker.cpp @@ -2,9 +2,9 @@ #include "turns/adw/toast.hpp" #include "turns/adw/toastoverlay.hpp" +#include "turns/core/settings.hpp" #include "turns/core/turn_order.hpp" #include "turns/lang/messages.hpp" -#include "turns/ui/widgets/preferences.hpp" #include "turns/ui/widgets/turn_order_view.hpp" #include <sigc++/adaptors/bind.h> @@ -18,6 +18,7 @@ #include <glibmm/varianttype.h> #include <glibmm/wrap.h> +#include <giomm/file.h> #include <giomm/liststore.h> #include <giomm/settings.h> @@ -55,7 +56,7 @@ namespace turns::ui::windows , m_title{builder->get_widget<Gtk::Widget>("title")} , m_turn_order{core::turn_order::create()} , m_turn_order_view{Gtk::make_managed<widgets::turn_order_view>(m_turn_order)} - , m_settings{Gio::Settings::create("ch.arknet.Turns")} + , m_settings{turns::core::get_settings()} , m_subtitle{m_title, "subtitle"} , m_css{Gtk::CssProvider::create()} { |
