# --- Find modules

FIND_PACKAGE (
  Qt6
  COMPONENTS
    Widgets
    Svg
  REQUIRED )
FIND_PACKAGE ( ALSA REQUIRED )

# TODO: FIND_PACKAGE
SET ( UDEV_LIBRARIES udev )


# --- Configure files

INCLUDE ( CheckIncludeFiles )
CONFIGURE_FILE (
  ${SHARED_SRC_DIR}/qastools_config.hpp.cmake
  ${CMAKE_CURRENT_BINARY_DIR}/qastools_config.hpp )


# --- Sources

SET ( SRC_GUI
  ${SHARED_SRC_DIR}/qsnd/alsa.cpp
  ${SHARED_SRC_DIR}/qsnd/alsa_config_watcher.cpp
  ${SHARED_SRC_DIR}/qsnd/event_types.cpp
  ${SHARED_SRC_DIR}/qsnd/ctl_address_argument.cpp
  ${SHARED_SRC_DIR}/qsnd/ctl_address.cpp
  ${SHARED_SRC_DIR}/qsnd/card_info.cpp
  ${SHARED_SRC_DIR}/qsnd/cards_db.cpp
  ${SHARED_SRC_DIR}/qsnd/cards_model.cpp
  ${SHARED_SRC_DIR}/qsnd/hctl/elem.cpp
  ${SHARED_SRC_DIR}/qsnd/hctl/elem_group.cpp
  ${SHARED_SRC_DIR}/qsnd/hctl/info_db.cpp
  ${SHARED_SRC_DIR}/qsnd/hctl/mixer.cpp
  ${SHARED_SRC_DIR}/qsnd/mixers_model.cpp
  ${SHARED_SRC_DIR}/qsnd/udev_device_lookout.cpp

  ${SHARED_SRC_DIR}/dpe/image_allocator.cpp
  ${SHARED_SRC_DIR}/dpe/image.cpp
  ${SHARED_SRC_DIR}/dpe/image_request.cpp
  ${SHARED_SRC_DIR}/dpe/image_set.cpp
  ${SHARED_SRC_DIR}/dpe/image_set_group.cpp
  ${SHARED_SRC_DIR}/dpe/image_set_meta.cpp
  ${SHARED_SRC_DIR}/dpe/image_set_state.cpp
  ${SHARED_SRC_DIR}/dpe/is_buffer.cpp
  ${SHARED_SRC_DIR}/dpe/is_buffer_handle.cpp
  ${SHARED_SRC_DIR}/dpe/painter.cpp
  ${SHARED_SRC_DIR}/dpe/painter_simple.cpp
  ${SHARED_SRC_DIR}/dpe/painter_thread.cpp
  ${SHARED_SRC_DIR}/dpe/painter_thread_shared.cpp
  ${SHARED_SRC_DIR}/dpe/paint_job.cpp

  ${SHARED_SRC_DIR}/wdg/label_width.cpp
  ${SHARED_SRC_DIR}/wdg/label_elide.cpp
  ${SHARED_SRC_DIR}/wdg/tree_view_kv.cpp
  ${SHARED_SRC_DIR}/wdg/text_browser.cpp
  ${SHARED_SRC_DIR}/wdg/scroll_area_horizontal.cpp
  ${SHARED_SRC_DIR}/wdg/scroll_area_vertical.cpp
  ${SHARED_SRC_DIR}/wdg/color_methods.cpp
  ${SHARED_SRC_DIR}/wdg/cubic_curve.cpp
  ${SHARED_SRC_DIR}/wdg/uint_mapper.cpp
  ${SHARED_SRC_DIR}/wdg/ds/imaging.cpp
  ${SHARED_SRC_DIR}/wdg/ds/painter/slider_bevelled.cpp
  ${SHARED_SRC_DIR}/wdg/ds/painter/switch_circle.cpp
  ${SHARED_SRC_DIR}/wdg/ds/painter/switch_svg.cpp
  ${SHARED_SRC_DIR}/wdg/ds/slider.cpp
  ${SHARED_SRC_DIR}/wdg/ds/slider_meta_bg.cpp
  ${SHARED_SRC_DIR}/wdg/ds/switch.cpp
  ${SHARED_SRC_DIR}/wdg/event_types.cpp
  ${SHARED_SRC_DIR}/wdg/pass_events.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/column.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/group.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/proxy.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/enum.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/slider.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/style.cpp
  ${SHARED_SRC_DIR}/wdg/pad_proxy/switch.cpp
  ${SHARED_SRC_DIR}/wdg/pad_focus_info.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/equal_columns/column.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/equal_columns/group.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/equal_columns/index.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/equal_columns/layout.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/equal_columns/row.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/equal_columns/weights.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/pad.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/data.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/data_column.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/data_group.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/footer.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/header.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/header_data.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/header_label.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/layout.cpp
  ${SHARED_SRC_DIR}/wdg/sliders_pad/style.cpp
  ${SHARED_SRC_DIR}/wdg/style_db.cpp

  ${SHARED_SRC_DIR}/mwdg/event_types.cpp
  ${SHARED_SRC_DIR}/mwdg/inputs_setup.cpp
  ${SHARED_SRC_DIR}/mwdg/mixer_device_setup.cpp
  ${SHARED_SRC_DIR}/mwdg/mixer_style_db.cpp
  ${SHARED_SRC_DIR}/mwdg/mixers_delegate.cpp
  ${SHARED_SRC_DIR}/mwdg/mixers_view.cpp
  ${SHARED_SRC_DIR}/mwdg/slider_status_widget.cpp
  ${SHARED_SRC_DIR}/mwdg/user_device_input.cpp

  ${SHARED_SRC_DIR}/views/view_utility.cpp
  ${SHARED_SRC_DIR}/views/message_widget.cpp
  ${SHARED_SRC_DIR}/views/view_base_setup.cpp
  ${SHARED_SRC_DIR}/views/view_base.cpp
  ${SHARED_SRC_DIR}/views/device_selection_view_setup.cpp
  ${SHARED_SRC_DIR}/views/device_selection_view.cpp
  ${SHARED_SRC_DIR}/views/basic_dialog.cpp
  ${SHARED_SRC_DIR}/views/multi_page_dialog.cpp
  ${SHARED_SRC_DIR}/views/info_dialog.cpp

  ${SHARED_SRC_DIR}/license_texts.cpp

  mwdg/hctl/mixer.cpp
  mwdg/hctl/edit/bool.cpp
  mwdg/hctl/edit/enum.cpp
  mwdg/hctl/edit/int.cpp
  mwdg/hctl/edit/unsupported.cpp
  mwdg/hctl/editor.cpp
  mwdg/hctl/editor_data.cpp
  mwdg/hctl/int_proxy/group.cpp
  mwdg/hctl/int_proxy/column.cpp
  mwdg/hctl/int_proxy/slider.cpp
  mwdg/hctl/proxy/group.cpp
  mwdg/hctl/proxy/proxy.cpp
  mwdg/hctl/proxy/enum.cpp
  mwdg/hctl/proxy/switch.cpp
  mwdg/hctl/slider_status_widget.cpp
  mwdg/hctl/table_model.cpp
  mwdg/hctl/tree_model.cpp

  views/mixer_hctl_setup.cpp
  views/mixer_hctl.cpp

  info_texts.cpp
  init_globals.cpp
  main_window_setup.cpp
  main_window.cpp
  desktop_items.cpp
  main.cpp
)


# --- Compiler flags

SET ( CMAKE_CXX_STANDARD 17 )
SET ( CMAKE_CXX_STANDARD_REQUIRED ON )
SET ( CMAKE_CXX_EXTENSIONS OFF )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wunused -Wall" )
SET ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -fno-inline" )
SET ( CMAKE_CXX_FLAGS_RELEASE "-O2 ${CMAKE_CXX_FLAGS_RELEASE}" )


# --- Include directories

INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_SOURCE_DIR} )
INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR} )
INCLUDE_DIRECTORIES ( ${SHARED_INC_DIR} )
INCLUDE_DIRECTORIES ( ${ALSA_INCLUDE_DIRS} )


# --- Executable

ADD_EXECUTABLE ( ${PROGRAM_NAME}
  ${SRC_GUI}
  ${SRC_GUI_MOC}
)
SET_TARGET_PROPERTIES ( ${PROGRAM_NAME} PROPERTIES AUTOMOC ON )
TARGET_LINK_LIBRARIES ( ${PROGRAM_NAME}
  Qt6::Widgets
  Qt6::Svg
  ${ALSA_LIBRARIES}
  ${UDEV_LIBRARIES}
)


# --- Installation

INSTALL (
  TARGETS ${PROGRAM_NAME} RUNTIME
  DESTINATION ${INSTALL_DIR_BIN} )
