# SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
# SPDX-License-Identifier: GPL-3.0-only

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_AUTORCC ON)
SET(CMAKE_AUTOUIC ON)

FIND_PACKAGE(Qt6 COMPONENTS Core Gui Widgets Charts DBus Concurrent REQUIRED)

QT_ADD_RESOURCES(APP_RESOURCES resources/resources.qrc)

ADD_EXECUTABLE(jfjoch_viewer jfjoch_viewer.cpp JFJochViewerWindow.cpp JFJochViewerWindow.h
        JFJochViewerMenu.cpp
        JFJochViewerMenu.h
        image_viewer/JFJochDiffractionImage.cpp
        image_viewer/JFJochDiffractionImage.h
        image_viewer/JFJochSimpleImage.cpp
        image_viewer/JFJochSimpleImage.h
        JFJochImageReadingWorker.cpp
        JFJochImageReadingWorker.h
        JFJochViewerDatasetInfo.cpp
        JFJochViewerDatasetInfo.h
        JFJochViewerSidePanel.cpp
        JFJochViewerSidePanel.h
        widgets/TitleLabel.cpp
        widgets/TitleLabel.h
        charts/JFJochDatasetInfoChartView.cpp
        charts/JFJochDatasetInfoChartView.h
        widgets/JFJochViewerImageStatistics.cpp
        widgets/JFJochViewerImageStatistics.h
        charts/JFJochSimpleChartView.cpp
        charts/JFJochSimpleChartView.h
        JFJochViewerStatusBar.cpp
        JFJochViewerStatusBar.h
        windows/JFJochViewerImageListWindow.cpp
        windows/JFJochViewerImageListWindow.h
        dbus/JFJochViewerAdaptor.h
        dbus/JFJochViewerAdaptor.cpp
        widgets/NumericComboBox.cpp
        widgets/NumericComboBox.h
        windows/JFJochViewerMetadataWindow.cpp
        windows/JFJochViewerMetadataWindow.h
        windows/JFJochViewerProcessingWindow.cpp
        windows/JFJochViewerProcessingWindow.h
        widgets/NumberLineEdit.cpp
        widgets/NumberLineEdit.h
        widgets/SliderPlusBox.cpp
        widgets/SliderPlusBox.h
        widgets/JFJochViewerSidePanelChart.cpp
        widgets/JFJochViewerSidePanelChart.h
        windows/JFJochViewerSpotListWindow.cpp
        windows/JFJochViewerSpotListWindow.h
        image_viewer/JFJochAzIntImage.cpp
        image_viewer/JFJochAzIntImage.h
        windows/JFJochViewerReflectionListWindow.cpp
        windows/JFJochViewerReflectionListWindow.h
        widgets/JFJochViewerImageROIStatistics.cpp
        widgets/JFJochViewerImageROIStatistics.h
        widgets/JFJochViewerImageROIStatistics_Box.cpp
        widgets/JFJochViewerImageROIStatistics_Box.h
        widgets/JFJochViewerImageROIStatistics_Circle.cpp
        widgets/JFJochViewerImageROIStatistics_Circle.h
        toolbar/JFJochViewerToolbarImage.cpp
        toolbar/JFJochViewerToolbarImage.h
        toolbar/JFJochViewerToolbarDisplay.cpp
        toolbar/JFJochViewerToolbarDisplay.h
        SimpleImage.h
        windows/JFJochCalibrationWindow.cpp
        windows/JFJochCalibrationWindow.h
        windows/JFJochHelperWindow.cpp
        windows/JFJochHelperWindow.h
        image_viewer/JFJochImage.cpp
        image_viewer/JFJochImage.h
        windows/JFJochAzIntWindow.cpp
        windows/JFJochAzIntWindow.h
        windows/JFJoch2DAzintImageWindow.cpp
        windows/JFJoch2DAzintImageWindow.h
        widgets/JFJochViewerROIResult.cpp
        widgets/JFJochViewerROIResult.h
        widgets/ResolutionRingWidget.cpp
        widgets/ResolutionRingWidget.h
        image_viewer/JFJochGridScanImage.cpp
        image_viewer/JFJochGridScanImage.h
        widgets/PowderCalibrationWidget.cpp
        widgets/PowderCalibrationWidget.h
        ${APP_RESOURCES}
)

TARGET_LINK_LIBRARIES(jfjoch_viewer Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Charts Qt6::DBus Qt6::Concurrent
        JFJochReader JFJochLogger JFJochCommon JFJochWriter JFJochImageAnalysis)
INSTALL(TARGETS jfjoch_viewer RUNTIME COMPONENT viewer)

INSTALL(
        FILES ${CMAKE_CURRENT_SOURCE_DIR}/dbus/ch.psi.jfjoch_viewer.service
        DESTINATION share/dbus-1/services
        COMPONENT viewer
)

INSTALL(
        FILES resources/jfjoch.png
        DESTINATION share/pixmaps
        COMPONENT viewer
)

INSTALL(
        FILES jfjoch_viewer.desktop
        DESTINATION share/applications
        COMPONENT viewer
)

qt_import_plugins(jfjoch_viewer INCLUDE Qt::QXcbIntegrationPlugin)

IF(HAS_FFTW3_H AND FFTWF_LIBRARY)
    TARGET_LINK_LIBRARIES(jfjoch_viewer ${FFTWF_LIBRARY})
    MESSAGE(STATUS "FFT single-precision library found: ${FFTWF_LIBRARY}")
ELSE()
    MESSAGE(WARNING "FFTW disabled")
ENDIF()