add_definitions(-DTRANSLATION_DOMAIN=\"kcm_keyboard\")

add_subdirectory(tastenbrett)

include_directories(${CMAKE_CURRENT_BINARY_DIR})

### kcm keyboard ###
kcmutils_add_qml_kcm(kcm_keyboard SOURCES kcmmain.cpp)

set( kcm_keyboard_PART_SRCS
    kcm_keyboard.cpp
    keyboard_config.cpp
    bindings.cpp
    flags.cpp
    tastenbrett.cpp
    layoutunit.cpp
    xkb_rules.cpp
    shortcuthelper.cpp
    xkboptionsmodel.cpp
    userlayoutmodel.cpp
    layoutsearchmodel.cpp
)

ecm_qt_declare_logging_category(kcm_keyboard_PART_SRCS
    HEADER debug.h
    IDENTIFIER KCM_KEYBOARD
    CATEGORY_NAME org.kde.kcm_keyboard
    DESCRIPTION "KCM and KDED for keyboard layouts"
    EXPORT kcm_keyboard
)

ecm_qt_install_logging_categories(
    EXPORT kcm_keyboard
    DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}"
)

kconfig_add_kcfg_files(kcm_keyboard_PART_SRCS workspace_options.kcfgc GENERATE_MOC)
kconfig_add_kcfg_files(kcm_keyboard_PART_SRCS keyboardsettings.kcfgc GENERATE_MOC)
kconfig_add_kcfg_files(kcm_keyboard_PART_SRCS keyboardmiscsettings.kcfgc GENERATE_MOC)

kcmutils_generate_module_data(kcm_keyboard
    MODULE_DATA_HEADER keyboardsettingsdata.h
    MODULE_DATA_CLASS_NAME KeyboardSettingsData
    SETTINGS_HEADERS workspace_options.h keyboardmiscsettings.h keyboardsettings.h
    SETTINGS_CLASSES WorkspaceOptions KeyboardMiscSettings KeyboardSettings
)

add_library(kcm_keyboard_static STATIC ${kcm_keyboard_PART_SRCS})
set_property(TARGET kcm_keyboard_static PROPERTY POSITION_INDEPENDENT_CODE ON)

qt_extract_metatypes(kcm_keyboard_static)

target_link_libraries(kcm_keyboard_static
    Qt::Concurrent
    Qt::Widgets
    Qt::Xml
    Qt::GuiPrivate
    KF6::KCMUtils
    KF6::GlobalAccel
    KF6::I18n
    KF6::WindowSystem
    KF6::XmlGui
    KF6::GuiAddons
    PkgConfig::XKBREGISTRY
)

target_link_libraries(kcm_keyboard kcm_keyboard_static)

# Declarative module
ecm_add_qml_module(kcm_keyboard_declarative
    URI "org.kde.plasma.private.kcm_keyboard"
    GENERATE_PLUGIN_SOURCE
    SOURCES
        keyboardmodel.cpp
        layoutmodel.cpp
        types.h
    DEPENDENCIES
        QtCore
)

target_link_libraries(kcm_keyboard_declarative PRIVATE kcm_keyboard_static)

ecm_finalize_qml_module(kcm_keyboard_declarative)

# Unit tests
if(BUILD_TESTING)
    add_subdirectory( tests )
endif()

add_dependencies(kcm_keyboard tastenbrett)

install(FILES keyboardsettings.kcfg keyboardmiscsettings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR})
