project(QTPROPERTYBROWSER)

# For last version of this code see
# http://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtpropertybrowser

cmake_minimum_required(VERSION 2.6)

# Is this tool is compiled inside or outside CAMITK (as a standalone)?
if (NOT CAMITK_SOURCE_DIR)
  # if this tool is compiled independantly from CamiTK
  set(QTPROPERTYBROWSER_STANDALONE ON CACHE BOOL "ON only if QTPROPERTYBROWSER compiled outside CAMITK")
  message(SEND_ERROR "Compilation of QTPROPERTYBROWSER outside CamiTK not implemented yet. Please contact authors")
endif()

set(QT_MIN_VERSION "4.6.0")
FIND_PACKAGE(Qt4 REQUIRED)

if(NOT QT4_FOUND)
  message(SEND_ERROR "Failed to find Qt 4.6 or greater. This is needed for qtpropertybrowser tool, and therefore for CamiTK.")
endif()

include(${QT_USE_FILE})

set(qtpropertyeditor_SRCS
  src/qtpropertybrowser.cpp
  src/qtpropertymanager.cpp
  src/qteditorfactory.cpp
  src/qtvariantproperty.cpp
  src/qttreepropertybrowser.cpp
  src/qtbuttonpropertybrowser.cpp
  src/qtgroupboxpropertybrowser.cpp
  src/qtpropertybrowserutils.cpp
)

include_directories(${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}/src
  ${QTPROPERTYBROWSER_SOURCE_DIR}/src
  ${QT_INCLUDE_DIR}
)

qt4_generate_moc(
  src/qtpropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowser.cpp
)
qt4_generate_moc(
  src/qtpropertymanager.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertymanager.cpp
)
qt4_generate_moc(
  src/qteditorfactory.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qteditorfactory.cpp
)
qt4_generate_moc(
  src/qtvariantproperty.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtvariantproperty.cpp
)
qt4_generate_moc(
  src/qttreepropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qttreepropertybrowser.cpp
)
qt4_generate_moc(
  src/qtbuttonpropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtbuttonpropertybrowser.cpp
)
qt4_generate_moc(
  src/qtgroupboxpropertybrowser.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtgroupboxpropertybrowser.cpp
)
qt4_generate_moc(
  src/qtpropertymanager.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qtpropertymanager.moc
)
qt4_generate_moc(
  src/qteditorfactory.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qteditorfactory.moc
)
qt4_generate_moc(
  src/qttreepropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qttreepropertybrowser.moc
)

set(
  qtpropertyeditor_HEADERS_ONLY_MOC
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertymanager.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qteditorfactory.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtvariantproperty.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qttreepropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtbuttonpropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtgroupboxpropertybrowser.cpp
  ${CMAKE_CURRENT_BINARY_DIR}/qtpropertymanager.moc
  ${CMAKE_CURRENT_BINARY_DIR}/qteditorfactory.moc
  ${CMAKE_CURRENT_BINARY_DIR}/qttreepropertybrowser.moc
)

set_source_files_properties(
  ${qtpropertyeditor_HEADERS_ONLY_MOC}
  PROPERTIES
    HEADER_FILE_ONLY true
)

qt4_generate_moc(
  src/qtpropertybrowserutils_p.h
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowserutils_p.cpp
)

set(
  qtpropertyeditor_HEADERS_MOC
  ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowserutils_p.cpp
)

set(
  qtpropertyeditor_MOC
  ${qtpropertyeditor_HEADERS_MOC}
  ${qtpropertyeditor_HEADERS_ONLY_MOC}
)

qt4_add_resources(
  qtpropertyeditor_RESOURCES
  src/qtpropertybrowser.qrc
)

qt4_add_resources(RESOURCE_SRCS src/qtpropertybrowser.qrc)

set(SRCS   ${extension_MOC}
  ${qtpropertyeditor_MOC}
  ${qtpropertyeditor_SRCS}
  ${qtpropertyeditor_RESOURCES}
)

add_definitions(-DCOMPILE_QTPROPERTYBROWSER)

camitk_tool(SHARED
  SOURCES ${SRCS}
  TARGET_LINK_LIBRARIES ${QT_LIBRARIES}
)

# take all the headers for installation
file(GLOB HEADERS_H "src/*.h")
file(GLOB HEADERS_UPPERCASE "src/Qt*")

#--------------
# installation
#--------------
export_headers(${HEADERS_H} ${HEADERS_UPPERCASE} COMPONENT qtpropertybrowser)

# lib installation
install(TARGETS qtpropertybrowser
	RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}
        COMPONENT qtpropertybrowser
)
