project(QTPROPERTYBROWSER)

if (PACKAGING_NSIS)
    set(LIB_NAME library_qtpropertybrowser)
else()
    set(LIB_NAME library-qtpropertybrowser)
endif()

# 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 CEP_NAME STREQUAL "SDK")
  # if this tool is compiled independantly from CamiTK
  set(QTPROPERTYBROWSER_STANDALONE ON CACHE BOOL "ON only if QTPROPERTYBROWSER compiled outside CAMITK SDK")
  message(SEND_ERROR "Compilation of QTPROPERTYBROWSER outside CamiTK SDK not supported yet. Please contact us.")
endif()

find_package(Qt4 4.6.0 REQUIRED)

if(NOT QT4_FOUND)
  message(SEND_ERROR "Failed to find Qt 4.6 or greater. This is needed for qtpropertybrowser lib, 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)

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

camitk_library(SHARED
               SOURCES ${SRCS}
               TARGET_LINK_LIBRARIES ${QT_LIBRARIES}
               PUBLIC #install directly in lib (or bin for Windows).
               HEADERS_TO_INSTALL ${HEADERS_H} ${HEADERS_UPPERCASE} 
               CEP_NAME SDK
               DESCRIPTION "Allows displaying and editing Qt Meta Object properties. Used to display component properties. This library is required."
)