# set visibility to hidden to hide symbols, unlesss they're exporeted manually in the code
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_KEYWORDS -fno-exceptions")

if(USE_QT4)
    set(QTX_INCLUDE_DIRS ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTDBUS_DIR})
    set(QTX_LIBRARIES ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDBUS_LIBRARY})
else()
    set(QTX_INCLUDE_DIRS "")
    set(QTX_LIBRARIES Qt5::Widgets Qt5::X11Extras)
endif()

include_directories(
  ${QTX_INCLUDE_DIRS}
  ${GLIB_INCLUDE_DIRS}
  ${OPENBOX_INCLUDE_DIRS}
  ${CMAKE_CURRENT_BINARY_DIR}
)

set(obconf-qt_SRCS
  obconf-qt.cpp
  maindialog.cpp
  appearance.cpp
  windows.cpp
  mouse.cpp
  moveresize.cpp
  margins.cpp
  desktops.cpp
  dock.cpp
  tree.cpp
  archive.cpp
  theme.cpp
  fontbutton.cpp
)

set(obconf-qt_UIS
  obconf.ui
)

if(USE_QT4)
  qt4_wrap_ui(obconf-qt_UI_H ${obconf-qt_UIS})
else()
  qt5_wrap_ui(obconf-qt_UI_H ${obconf-qt_UIS})
endif()

# The ui code generated by Qt uic contains QMetaObject::connectSlotsByName()
# but we don't want that. Fix it with sed.
add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ui_obconf_fixed.h
  COMMAND ${SED_PROGRAM}
  ARGS "/connectSlotsByName/d" ${obconf-qt_UI_H} > ${CMAKE_CURRENT_BINARY_DIR}/ui_obconf_fixed.h
  # DEPENDS
  MAIN_DEPENDENCY ${obconf-qt_UI_H}
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  COMMENT "Fixing generated ui code"
  VERBATIM
)

# add translation for obconf-qt
option (UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF)

set(TRANSLATION_TEMPLATE "translations/obconf-qt.ts")
file(GLOB TS_FILES translations/obconf-qt_*.ts)

if(USE_QT4)
  if (UPDATE_TRANSLATIONS)
    qt4_create_translation(QMS_FILES
      ${obconf-qt_SRCS}
      ${obconf-qt_UI_H}
      ${TRANSLATION_TEMPLATE}
      OPTIONS -locations absolute)
    qt4_create_translation(QMS_FILES
      ${obconf-qt_SRCS}
      ${obconf-qt_UI_H}
      ${TS_FILES}
      OPTIONS -locations absolute)
  else (UPDATE_TRANSLATIONS)
    qt4_add_translation(QM_FILES ${TS_FILES})
  endif (UPDATE_TRANSLATIONS)
else(USE_QT4) # use qt4
  if (UPDATE_TRANSLATIONS)
    qt5_create_translation(QMS_FILES
      ${obconf-qt_SRCS}
      ${obconf-qt_UI_H}
      ${TRANSLATION_TEMPLATE}
      OPTIONS -locations absolute)
    qt5_create_translation(QM_FILES
      ${obconf-qt_SRCS}
      ${obconf-qt_UI_H}
      ${TS_FILES}
      OPTIONS -locations absolute)
  else (UPDATE_TRANSLATIONS)
    qt5_add_translation(QM_FILES ${TS_FILES})
  endif (UPDATE_TRANSLATIONS)
endif(USE_QT4)

if(UPDATE_TRANSLATIONS)
    add_custom_target(update_obconf-qt_translations ALL DEPENDS ${QMS})
endif()

# install a desktop entry file
include(LXQtTranslateDesktop)
lxqt_translate_desktop(DESKTOP_FILES
    TRANSLATION_DIR "translations"
    SOURCES obconf-qt.desktop.in
)
install(FILES ${DESKTOP_FILES} DESTINATION share/applications)

install(FILES ${QM_FILES} DESTINATION share/obconf-qt/translations)
# prevent the generated files from being deleted during make clean
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM true)

add_executable(obconf-qt
  ${obconf-qt_SRCS}
  ${obconf-qt_UI_H}
  ${QM_FILES}
  ${DESKTOP_FILES}
)

add_definitions(
  -DPACKAGE_DATA_DIR="${CMAKE_INSTALL_FULL_DATAROOTDIR}/obconf-qt"
  -DPIXMAPS_DIR="${CMAKE_INSTALL_FULL_DATAROOTDIR}/pixmaps"
  -DTHEME_DIR="${CMAKE_INSTALL_FULL_DATAROOTDIR}/openbox/themes"
)

target_link_libraries(obconf-qt
  ${QTX_LIBRARIES}
  ${GLIB_LIBRARIES}
  ${OPENBOX_LIBRARIES}
)

install(TARGETS obconf-qt RUNTIME DESTINATION bin)
