project(CTKWidgets)

#
# See CTK/CMake/ctkMacroBuildLib.cmake for details
#

set(KIT_export_directive "CTK_WIDGETS_EXPORT")

#
# Add the libraries QtTesting
#
if(CTK_USE_QTTESTING)
  find_package(QtTesting REQUIRED)
  include_directories(
    ${QtTesting_INCLUDE_DIRS}
    ${CMAKE_BINARY_DIR} # For ctkConfig.h
    )
endif()

# Source files
set(KIT_SRCS
  ctkActionsWidget.cpp
  ctkActionsWidget.h
  ctkAddRemoveComboBox.cpp
  ctkAddRemoveComboBox.h
  ctkAxesWidget.cpp
  ctkAxesWidget.h
  ctkBasePopupWidget.cpp
  ctkBasePopupWidget.h
  ctkBasePopupWidget_p.h
  ctkButtonGroup.cpp
  ctkButtonGroup.h
  ctkCheckableComboBox.cpp
  ctkCheckableComboBox.h
  ctkCheckableHeaderView.cpp
  ctkCheckableHeaderView.h
  ctkCheckBox.cpp
  ctkCheckBox.h
  ctkCheckBoxPixmaps.cpp
  ctkCheckBoxPixmaps.h
  ctkCheckablePushButton.cpp
  ctkCheckablePushButton.h
  ctkComboBox.cpp
  ctkComboBox.h
  ctkCompleter.cpp
  ctkCompleter.h
  ctkCollapsibleButton.cpp
  ctkCollapsibleButton.h
  ctkCollapsibleGroupBox.cpp
  ctkCollapsibleGroupBox.h
  ctkColorDialog.cpp
  ctkColorDialog.h
  ctkColorPickerButton.cpp
  ctkColorPickerButton.h
  ctkConsole.cpp
  ctkConsole.h
  ctkConsole_p.h
  ctkCoordinatesWidget.cpp
  ctkCoordinatesWidget.h
  ctkCrosshairLabel.cpp
  ctkCrosshairLabel.h
  ctkDateRangeWidget.cpp
  ctkDateRangeWidget.h
  ctkDirectoryButton.cpp
  ctkDirectoryButton.h
  ctkDoubleRangeSlider.cpp
  ctkDoubleRangeSlider.h
  ctkDoubleSlider.cpp
  ctkDoubleSlider.h
  ctkDynamicSpacer.cpp
  ctkDynamicSpacer.h
  ctkErrorLogStatusMessageHandler.cpp
  ctkErrorLogStatusMessageHandler.h
  ctkErrorLogWidget.cpp
  ctkErrorLogWidget.h
  ctkExpandButton.cpp
  ctkExpandButton.h
  ctkFileDialog.cpp
  ctkFileDialog.h
  ctkFittedTextBrowser.cpp
  ctkFittedTextBrowser.h
  ctkFlatProxyModel.cpp
  ctkFlatProxyModel.h
  ctkFlowLayout.cpp
  ctkFlowLayout.h
  ctkFontButton.cpp
  ctkFontButton.h
  ctkIconEnginePlugin.cpp
  ctkIconEnginePlugin.h
  ctkLanguageComboBox.cpp
  ctkLanguageComboBox.h
  ctkLayoutManager.cpp
  ctkLayoutManager.h
  ctkMaterialPropertyPreviewLabel.cpp
  ctkMaterialPropertyPreviewLabel.h
  ctkMaterialPropertyWidget.cpp
  ctkMaterialPropertyWidget.h
  ctkMatrixWidget.cpp
  ctkMatrixWidget.h
  ctkMenuButton.cpp
  ctkMenuButton.h
  ctkMenuComboBox.cpp
  ctkMenuComboBox.h
  ctkMenuComboBox_p.h
  ctkMessageBox.cpp
  ctkMessageBox.h
  ctkModalityWidget.cpp
  ctkModalityWidget.h
  ctkPathLineEdit.cpp
  ctkPathLineEdit.h
  ctkPathListButtonsWidget.cpp
  ctkPathListButtonsWidget.h
  ctkPathListButtonsWidget_p.h
  ctkPathListWidget.cpp
  ctkPathListWidget.h
  ctkPixmapIconEngine.cpp
  ctkPixmapIconEngine.h
  ctkPopupWidget.cpp
  ctkPopupWidget.h
  ctkPopupWidget_p.h
  ctkQImageView.cpp
  ctkQImageView.h
  ctkRangeSlider.cpp
  ctkRangeSlider.h
  ctkRangeWidget.cpp
  ctkRangeWidget.h
  ctkScreenshotDialog.cpp
  ctkScreenshotDialog.h
  ctkScreenshotDialog_p.h
  ctkSearchBox.cpp
  ctkSearchBox.h
  ctkSettings.cpp
  ctkSettings.h
  ctkSettingsDialog.cpp
  ctkSettingsDialog.h
  ctkSettingsPanel.cpp
  ctkSettingsPanel.h
  ctkSignalMapper.cpp
  ctkSignalMapper.h
  ctkSimpleLayoutManager.cpp
  ctkSimpleLayoutManager.h
  ctkSliderWidget.cpp
  ctkSliderWidget.h
  ctkTestApplication.cpp
  ctkTestApplication.h
  ctkThumbnailLabel.cpp
  ctkThumbnailLabel.h
  ctkThumbnailListWidget.cpp
  ctkThumbnailListWidget.h
  ctkThumbnailListWidget_p.h
  ctkToolTipTrapper.cpp
  ctkToolTipTrapper.h
  ctkTransferFunctionBarsItem.cpp
  ctkTransferFunctionBarsItem.h
  ctkTransferFunctionControlPointsItem.cpp
  ctkTransferFunctionControlPointsItem.h
  ctkTransferFunctionGradientItem.cpp
  ctkTransferFunctionGradientItem.h
  ctkTransferFunctionItem.cpp
  ctkTransferFunctionItem.h
  ctkTransferFunctionScene.cpp
  ctkTransferFunctionScene.h
  ctkTransferFunctionView.cpp
  ctkTransferFunctionView.h
  ctkTreeComboBox.cpp
  ctkTreeComboBox.h
  ctkWidgetsUtils.cpp
  ctkWidgetsUtils.h
  ctkWorkflowAbstractPagedWidget.cpp
  ctkWorkflowAbstractPagedWidget.h
  ctkWorkflowButtonBoxWidget.cpp
  ctkWorkflowButtonBoxWidget.h
  ctkWorkflowGroupBox.cpp
  ctkWorkflowGroupBox.h
  ctkWorkflowStackedWidget.cpp
  ctkWorkflowStackedWidget.h
  ctkWorkflowTabWidget.cpp
  ctkWorkflowTabWidget.h
  ctkWorkflowWidget.cpp
  ctkWorkflowWidget.h
  ctkWorkflowWidgetStep.cpp
  ctkWorkflowWidgetStep_p.h
  ctkWorkflowWidgetStep.h
  )

# Headers that should run through moc
set(KIT_MOC_SRCS
  ctkActionsWidget.h
  ctkAxesWidget.h
  ctkAddRemoveComboBox.h
  ctkBasePopupWidget.h
  ctkBasePopupWidget_p.h
  ctkButtonGroup.h
  ctkCheckableComboBox.h
  ctkCheckableHeaderView.h
  ctkCheckablePushButton.h
  ctkCheckBox.h
  ctkCheckBoxPixmaps.h
  ctkComboBox.h
  ctkCompleter.h
  ctkCollapsibleButton.h
  ctkCollapsibleGroupBox.h
  ctkColorDialog.h
  ctkColorPickerButton.h
  ctkConsole.h
  ctkConsole_p.h
  ctkCoordinatesWidget.h
  ctkCrosshairLabel.h
  ctkDateRangeWidget.h
  ctkDirectoryButton.h
  ctkDoubleRangeSlider.h
  ctkDoubleSlider.h
  ctkDynamicSpacer.h
  ctkErrorLogWidget.h
  ctkErrorLogStatusMessageHandler.h
  ctkExpandButton.h
  ctkFileDialog.h
  ctkFittedTextBrowser.h
  ctkFlatProxyModel.h
  ctkFlowLayout.h
  ctkFontButton.h
  ctkIconEnginePlugin.h
  ctkLanguageComboBox.h
  ctkLayoutManager.h
  ctkMaterialPropertyPreviewLabel.h
  ctkMaterialPropertyWidget.h
  ctkMatrixWidget.h
  ctkMenuButton.h
  ctkMenuComboBox.h
  ctkMenuComboBox_p.h
  ctkMessageBox.h
  ctkModalityWidget.h
  ctkPathLineEdit.h
  ctkPathListButtonsWidget.h
  ctkPathListButtonsWidget_p.h
  ctkPopupWidget.h
  ctkPopupWidget_p.h
  ctkQImageView.h
  ctkRangeSlider.h
  ctkRangeWidget.h
  ctkScreenshotDialog.h
  ctkScreenshotDialog_p.h
  ctkSearchBox.h
  ctkSettings.h
  ctkSettingsDialog.h
  ctkSettingsPanel.h
  ctkSignalMapper.h
  ctkSimpleLayoutManager.h
  ctkSliderWidget.h
  ctkTestApplication.h
  ctkThumbnailLabel.h
  ctkThumbnailListWidget.h
  ctkToolTipTrapper.h
  ctkTransferFunctionBarsItem.h
  ctkTransferFunctionControlPointsItem.h
  ctkTransferFunctionGradientItem.h
  ctkTransferFunctionItem.h
  ctkTransferFunctionScene.h
  ctkTransferFunctionView.h
  ctkTreeComboBox.h
  ctkWorkflowAbstractPagedWidget.h
  ctkWorkflowButtonBoxWidget.h
  ctkWorkflowGroupBox.h
  ctkWorkflowStackedWidget.h
  ctkWorkflowTabWidget.h
  ctkWorkflowWidget.h
  ctkWorkflowWidgetStep.h
  ctkWorkflowWidgetStep_p.h
  )

QT4_GENERATE_MOCS(
  ctkPathListWidget.h
)

# UI files
set(KIT_UI_FORMS
  Resources/UI/ctkAddRemoveComboBox.ui
  Resources/UI/ctkRangeWidget.ui
  Resources/UI/ctkDateRangeWidget.ui
  Resources/UI/ctkErrorLogWidget.ui
  Resources/UI/ctkMaterialPropertyWidget.ui
  Resources/UI/ctkModalityWidget.ui
  Resources/UI/ctkPathListButtonsWidget.ui
  Resources/UI/ctkScreenshotDialog.ui
  Resources/UI/ctkSettingsDialog.ui
  Resources/UI/ctkSliderWidget.ui
  Resources/UI/ctkThumbnailLabel.ui
  Resources/UI/ctkThumbnailListWidget.ui
  Resources/UI/ctkWorkflowGroupBox.ui
  )

# Resources
set(KIT_resources
  Resources/ctkWidgets.qrc
  )

# Target libraries - See CMake/ctkFunctionGetTargetLibraries.cmake
# The following macro will read the target libraries from the file 'target_libraries.cmake'
ctkFunctionGetTargetLibraries(KIT_target_libraries)

# A player and a translator must be added for custom Qt widgets
if(CTK_USE_QTTESTING)
  list(APPEND KIT_SRCS
    ctkAxesWidgetEventPlayer.cpp
    ctkAxesWidgetEventPlayer.h
    ctkAxesWidgetEventTranslator.cpp
    ctkAxesWidgetEventTranslator.h
    ctkCheckableComboBoxEventPlayer.cpp
    ctkCheckableComboBoxEventPlayer.h
    ctkCheckableComboBoxEventTranslator.cpp
    ctkCheckableComboBoxEventTranslator.h
    ctkCheckableHeaderViewEventPlayer.cpp
    ctkCheckableHeaderViewEventPlayer.h
    ctkCheckableHeaderViewEventTranslator.cpp
    ctkCheckableHeaderViewEventTranslator.h
    ctkConsoleEventPlayer.cpp
    ctkConsoleEventPlayer.h
    ctkConsoleEventTranslator.cpp
    ctkConsoleEventTranslator.h
    ctkDoubleRangeSliderEventPlayer.cpp
    ctkDoubleRangeSliderEventPlayer.h
    ctkDoubleRangeSliderEventTranslator.cpp
    ctkDoubleRangeSliderEventTranslator.h
    ctkFileDialogEventPlayer.cpp
    ctkFileDialogEventPlayer.h
    ctkFileDialogEventTranslator.cpp
    ctkFileDialogEventTranslator.h
    ctkFontButtonEventPlayer.cpp
    ctkFontButtonEventPlayer.h
    ctkFontButtonEventTranslator.cpp
    ctkFontButtonEventTranslator.h
    ctkMatrixWidgetEventPlayer.cpp
    ctkMatrixWidgetEventPlayer.h
    ctkMatrixWidgetEventTranslator.cpp
    ctkMatrixWidgetEventTranslator.h
    ctkMenuComboBoxEventPlayer.cpp
    ctkMenuComboBoxEventPlayer.h
    ctkMenuComboBoxEventTranslator.cpp
    ctkMenuComboBoxEventTranslator.h
    ctkPathLineEditEventPlayer.cpp
    ctkPathLineEditEventPlayer.h
    ctkPathLineEditEventTranslator.cpp
    ctkPathLineEditEventTranslator.h
    ctkPopupWidgetEventPlayer.cpp
    ctkPopupWidgetEventPlayer.h
    ctkPopupWidgetEventTranslator.cpp
    ctkPopupWidgetEventTranslator.h
    ctkRangeSliderEventPlayer.cpp
    ctkRangeSliderEventPlayer.h
    ctkRangeSliderEventTranslator.cpp
    ctkRangeSliderEventTranslator.h
    ctkTreeComboBoxEventPlayer.cpp
    ctkTreeComboBoxEventPlayer.h
    ctkTreeComboBoxEventTranslator.cpp
    ctkTreeComboBoxEventTranslator.h
    )
  list(APPEND KIT_MOC_SRCS
    ctkAxesWidgetEventPlayer.h
    ctkAxesWidgetEventTranslator.h
    ctkCheckableComboBoxEventPlayer.h
    ctkCheckableComboBoxEventTranslator.h
    ctkCheckableHeaderViewEventPlayer.h
    ctkCheckableHeaderViewEventTranslator.h
    ctkConsoleEventPlayer.h
    ctkConsoleEventTranslator.h
    ctkDoubleRangeSliderEventPlayer.h
    ctkDoubleRangeSliderEventTranslator.h
    ctkFileDialogEventPlayer.h
    ctkFileDialogEventTranslator.h
    ctkFontButtonEventPlayer.h
    ctkFontButtonEventTranslator.h
    ctkMatrixWidgetEventPlayer.h
    ctkMatrixWidgetEventTranslator.h
    ctkMenuComboBoxEventPlayer.h
    ctkMenuComboBoxEventTranslator.h
    ctkPathLineEditEventPlayer.h
    ctkPathLineEditEventTranslator.h
    ctkPopupWidgetEventPlayer.h
    ctkPopupWidgetEventTranslator.h
    ctkRangeSliderEventPlayer.h
    ctkRangeSliderEventTranslator.h
    ctkTreeComboBoxEventPlayer.h
    ctkTreeComboBoxEventTranslator.h
    )
  list(APPEND KIT_target_libraries QtTesting)
endif()

ctkMacroBuildLib(
  NAME ${PROJECT_NAME}
  EXPORT_DIRECTIVE ${KIT_export_directive}
  SRCS ${KIT_SRCS}
  MOC_SRCS ${KIT_MOC_SRCS}
  UI_FORMS ${KIT_UI_FORMS}
  TARGET_LIBRARIES ${KIT_target_libraries}
  RESOURCES ${KIT_resources}
  LIBRARY_TYPE ${CTK_LIBRARY_MODE}
  )

if(CTK_WRAP_PYTHONQT_FULL OR CTK_WRAP_PYTHONQT_LIGHT)
  ctkMacroBuildLibWrapper(
    TARGET ${PROJECT_NAME}
    SRCS ${KIT_SRCS}
    WRAPPER_LIBRARY_TYPE ${CTK_LIBRARY_MODE}
    )
endif()

# Plugins
if(CTK_BUILD_QTDESIGNER_PLUGINS)
  add_subdirectory(Plugins)
endif()

# Testing
if(BUILD_TESTING)
  add_subdirectory(Testing)
endif()
