#-----------------------------------------------------------------------------
#
# Copyright (C) 2012 - 2017  Florian Pose <fp@igh-essen.com>
#               2022         Bjarne von Horn <vh at igh dot de>
#
# This file is part of the data logging service (DLS).
#
# DLS is free software: you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# DLS is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
# more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with the DLS. If not, see <http://www.gnu.org/licenses/>.
#
#-----------------------------------------------------------------------------

set(DlsWidgets_PUBLIC_HEADERS
    DlsWidgets/export.h
    DlsWidgets/DlsTypes.h
    DlsWidgets/Graph.h
    DlsWidgets/Layer.h
    DlsWidgets/Model.h
    DlsWidgets/Scale.h
    DlsWidgets/Section.h
    DlsWidgets/Translator.h
    DlsWidgets/ValueScale.h
)

# copy resource file to build dir and compile translation files
set(TS_FILES DlsWidgets_de.ts DlsWidgets_fr.ts)
configure_file(DlsWidgetsTs.qrc "${CMAKE_CURRENT_BINARY_DIR}" COPYONLY)
qt5_add_translation(QM_FILES ${TS_FILES})

add_library(DlsWidgets
    Channel.cpp
    ColorDelegate.cpp
    DatePickerDialog.cpp
    Dir.cpp
    ExportDialog.cpp
    FilterDialog.cpp
    Graph.cpp
    Job.cpp
    Layer.cpp
    Model.cpp
    Node.cpp
    Scale.cpp
    Section.cpp
    SectionDialog.cpp
    SectionModel.cpp
    Translator.cpp
    ValueScale.cpp

    Channel.h
    ColorDelegate.h
    DatePickerDialog.h
    Dir.h
    ExportDialog.h
    FilterDialog.h
    Job.h
    Node.h
    SectionDialog.h
    SectionModel.h

    DatePickerDialog.ui
    ExportDialog.ui
    FilterDialog.ui
    SectionDialog.ui

    DlsWidgets.qrc
    "${CMAKE_CURRENT_BINARY_DIR}/DlsWidgetsTs.qrc"

    ${QM_FILES}
    ${DlsWidgets_PUBLIC_HEADERS}
)

set_target_properties(DlsWidgets PROPERTIES
    AUTOUIC ON
    AUTOMOC ON
    AUTORCC ON
    PUBLIC_HEADER "${DlsWidgets_PUBLIC_HEADERS}"
)

target_link_libraries(DlsWidgets
    PUBLIC dls
    PUBLIC Qt5::Svg Qt5::Widgets Qt5::Core Qt5::Xml
    PRIVATE Qt5::PrintSupport "${PCRE_LIBRARIES}"
)

target_compile_options(DlsWidgets PRIVATE -Wall)

target_include_directories(DlsWidgets
    PUBLIC
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
        "$<INSTALL_INTERFACE:include>"
    PRIVATE
        "${PCRE_INCLUDE_DIRS}"
)

if (DLS_DESIGNER)
    add_library(DlsWidgetsPlugin SHARED
        Plugin.cpp
        WidgetCollection.cpp
        Plugin.h
        WidgetCollection.h
    )
    set_target_properties(DlsWidgetsPlugin PROPERTIES
        AUTOMOC ON
    )
    target_link_libraries(DlsWidgetsPlugin PRIVATE Qt5::Designer DlsWidgets)
endif()

## install target and headers

install(TARGETS DlsWidgets
    EXPORT DlsWidgetsTargets
    ARCHIVE DESTINATION       "${CMAKE_INSTALL_LIBDIR}"
    LIBRARY DESTINATION       "${CMAKE_INSTALL_LIBDIR}"
    RUNTIME DESTINATION       "${CMAKE_INSTALL_BINDIR}"
    PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/DlsWidgets"
)

if (DLS_DESIGNER)
    # Call qmake to query the plugin installation directory.
    get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake LOCATION)
    execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS
        OUTPUT_VARIABLE QT_INSTALL_PLUGINS OUTPUT_STRIP_TRAILING_WHITESPACE
    )

    # Install the library in QtDesigner plugin directory
    install(TARGETS DlsWidgetsPlugin
        LIBRARY DESTINATION "${QT_INSTALL_PLUGINS}/designer"
        RUNTIME DESTINATION "${QT_INSTALL_PLUGINS}/designer"
    )
endif()

set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/DlsWidgets")
configure_package_config_file(Config.cmake.in
        "${CMAKE_CURRENT_BINARY_DIR}/DlsWidgetsConfig.cmake"
    INSTALL_DESTINATION ${ConfigPackageLocation}
)
write_basic_package_version_file(
        "${CMAKE_CURRENT_BINARY_DIR}/DlsWidgetsConfigVersion.cmake"
    COMPATIBILITY SameMajorVersion
)

install(EXPORT DlsWidgetsTargets
    NAMESPACE EtherLab::
    FILE DlsWidgetsTargets.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DlsWidgets
)
install(FILES
        ${CMAKE_CURRENT_BINARY_DIR}/DlsWidgetsConfig.cmake
        ${CMAKE_CURRENT_BINARY_DIR}/DlsWidgetsConfigVersion.cmake
    DESTINATION ${ConfigPackageLocation}
)
export(EXPORT DlsWidgetsTargets
    FILE "${CMAKE_CURRENT_BINARY_DIR}/DlsWidgetsTargets.cmake"
    NAMESPACE EtherLab::
)
