Sfoglia il codice sorgente

ENH: Major re-factoring - Added CMakeLists.txt and SuperBuild.cmake

DCMTK and KWStyle are also built using superbuild
Jean-Christophe Fillion-Robin 15 anni fa
parent
commit
f896c758cb
39 ha cambiato i file con 1382 aggiunte e 84 eliminazioni
  1. 101 0
      CMake/CTKBuildQtLibMacro.cmake
  2. 98 0
      CMake/CTKBuildQtPluginMacro.cmake
  3. 34 0
      CMake/CTKParseArgumentsMacro.cmake
  4. 33 0
      CMake/CTKSetupQt.cmake
  5. 83 0
      CMake/CTestCustom.cmake.in
  6. 4 0
      CMake/FindCTK.cmake
  7. 121 0
      CMakeLists.txt
  8. 7 0
      CTestConfig.cmake
  9. 0 0
      Libs/CTKExport.h
  10. 21 0
      Libs/CTKExport.h.in
  11. 53 0
      Libs/Core/CMakeLists.txt
  12. 0 0
      Libs/Core/qCTKPimpl.h
  13. 63 0
      Libs/Core/qCTKUtils.cxx
  14. 52 0
      Libs/Core/qCTKUtils.h
  15. 1 1
      Libs/DICOM/Applications/CMakeLists.txt
  16. 3 64
      Libs/DICOM/CMakeLists.txt
  17. 55 0
      Libs/DICOM/Core/CMakeLists.txt
  18. 0 0
      Libs/DICOM/Core/qCTKDCMTK.cxx
  19. 2 2
      Libs/DICOM/Base/qCTKDCMTK.h
  20. 7 11
      Libs/DICOM/Base/CMakeLists.txt
  21. 0 0
      Libs/DICOM/Widgets/Resources/UI/qCTKDCMTKListenerWidget.ui
  22. 0 0
      Libs/DICOM/Widgets/Resources/UI/qCTKDCMTKLocationWidget.ui
  23. 0 0
      Libs/DICOM/Widgets/Resources/UI/qCTKDCMTKQueryRetrieveWidget.ui
  24. 73 0
      Libs/DICOM/Widgets/qCTKDCMTKDICOMItemTreeModel.cxx
  25. 41 0
      Libs/DICOM/Widgets/qCTKDCMTKDICOMItemTreeModel.h
  26. 0 0
      Libs/DICOM/Widgets/qCTKDCMTKListenerWidget.cxx
  27. 2 2
      Libs/DICOM/Base/qCTKDCMTKListenerWidget.h
  28. 0 0
      Libs/DICOM/Widgets/qCTKDCMTKLocationWidget.cxx
  29. 2 2
      Libs/DICOM/Base/qCTKDCMTKLocationWidget.h
  30. 0 0
      Libs/DICOM/Widgets/qCTKDCMTKQueryRetrieveWidget.cxx
  31. 2 2
      Libs/DICOM/Base/qCTKDCMTKQueryRetrieveWidget.h
  32. 55 0
      Libs/Widgets/CMakeLists.txt
  33. 141 0
      Libs/Widgets/qCTKSettings.cxx
  34. 84 0
      Libs/Widgets/qCTKSettings.h
  35. 167 0
      SuperBuild.cmake
  36. 54 0
      Utilities/KWStyle/KWStyle.cmake
  37. 20 0
      Utilities/KWStyle/qCTK.kws.xml.in
  38. 3 0
      Utilities/KWStyle/qCTKFiles.txt.in
  39. 0 0
      Utilities/KWStyle/qCTKOverwrite.txt

+ 101 - 0
CMake/CTKBuildQtLibMacro.cmake

@@ -0,0 +1,101 @@
+
+#
+#
+#
+MACRO(ctk_build_qtlib)
+  CTK_PARSE_ARGUMENTS(MYQTLIB
+    "NAME;EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;TARGET_LIBRARIES;RESOURCES;LIBRARY_TYPE"
+    ""
+    ${ARGN}
+    )
+
+  # Sanity checks
+  IF(NOT DEFINED MYQTLIB_NAME)
+    MESSAGE(SEND_ERROR "NAME is mandatory")
+  ENDIF(NOT DEFINED MYQTLIB_NAME)
+  IF(NOT DEFINED MYQTLIB_EXPORT_DIRECTIVE)
+    MESSAGE(SEND_ERROR "EXPORT_DIRECTIVE is mandatory")
+  ENDIF(NOT DEFINED MYQTLIB_EXPORT_DIRECTIVE)
+  IF(NOT DEFINED MYQTLIB_LIBRARY_TYPE)
+    SET(MYQTLIB_LIBRARY_TYPE "SHARED")
+  ENDIF(NOT DEFINED MYQTLIB_LIBRARY_TYPE)
+
+  # Define library name
+  SET(lib_name ${MYQTLIB_NAME})
+
+  # --------------------------------------------------------------------------
+  # Include dirs
+  SET(my_includes
+    ${CTK_BASE_INCLUDE_DIRS}
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_BINARY_DIR}
+    ${MYQTLIB_INCLUDE_DIRECTORIES}
+    )  
+  SET(CTK_BASE_INCLUDE_DIRS ${my_includes} CACHE INTERNAL "CTK includes" FORCE)
+  INCLUDE_DIRECTORIES(
+    ${CTK_BASE_INCLUDE_DIRS}
+    
+    )  
+
+  SET(MY_LIBRARY_EXPORT_DIRECTIVE ${MYQTLIB_EXPORT_DIRECTIVE})
+  SET(MY_EXPORT_HEADER_PREFIX ${MYQTLIB_NAME})
+  SET(MY_LIBNAME ${lib_name})
+  
+  CONFIGURE_FILE(
+    ${CTK_SOURCE_DIR}/Libs/CTKExport.h.in
+    ${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h
+    )
+  SET(dynamicHeaders
+    "${dynamicHeaders};${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h")
+
+  QT4_WRAP_CPP(MYQTLIB_SRCS ${MYQTLIB_MOC_SRCS})
+  QT4_WRAP_UI(MYQTLIB_UI_CXX ${MYQTLIB_UI_FORMS})
+  SET(MYQTLIB_QRC_SRCS "")
+  IF(DEFINED MYQTLIB_RESOURCES)
+    QT4_ADD_RESOURCES(MYQTLIB_QRC_SRCS ${MYQTLIB_RESOURCES})
+  ENDIF(DEFINED MYQTLIB_RESOURCES)
+
+  SOURCE_GROUP("Resources" FILES
+    ${MYQTLIB_RESOURCES}
+    ${MYQTLIB_UI_FORMS}
+    )
+
+  SOURCE_GROUP("Generated" FILES
+    ${MYQTLIB_MOC_SRCS}
+    ${MYQTLIB_QRC_SRCS}
+    ${MYQTLIB_UI_CXX}
+    )
+  
+  ADD_LIBRARY(${lib_name} ${MYQTLIB_LIBRARY_TYPE}
+    ${MYQTLIB_SRCS}
+    ${MYQTLIB_UI_CXX}
+    ${MYQTLIB_QRC_SRCS}
+    )
+
+  # Install rules
+  IF(CTK_BUILD_SHARED_LIBS)
+    INSTALL(TARGETS ${lib_name}
+      RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR} COMPONENT Runtime
+      LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Runtime
+      ARCHIVE DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Development)
+  ENDIF(CTK_BUILD_SHARED_LIBS)
+  
+  SET(my_libs
+    ${MYQTLIB_TARGET_LIBRARIES}
+    )
+  TARGET_LINK_LIBRARIES(${lib_name} ${my_libs})
+
+  # Update CTK_BASE_LIBRARIES
+  SET(CTK_BASE_LIBRARIES ${my_libs} ${lib_name} CACHE INTERNAL "CTK libraries" FORCE)
+  
+  # Install headers
+  FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
+  INSTALL(FILES
+    ${headers}
+    ${dynamicHeaders}
+    DESTINATION ${CTK_INSTALL_INCLUDE_DIR} COMPONENT Development
+    )
+
+ENDMACRO(ctk_build_qtlib)
+
+

+ 98 - 0
CMake/CTKBuildQtPluginMacro.cmake

@@ -0,0 +1,98 @@
+
+#
+#
+#
+MACRO(ctk_build_qtplugin)
+  CTK_PARSE_ARGUMENTS(MYQTPLUGIN
+    "NAME;EXPORT_DIRECTIVE;SRCS;MOC_SRCS;UI_FORMS;INCLUDE_DIRECTORIES;TARGET_LIBRARIES;UI_RESOURCES;LIBRARY_TYPE"
+    ""
+    ${ARGN}
+    )
+
+  # Sanity checks
+  IF(NOT DEFINED MYQTPLUGIN_NAME)
+    MESSAGE(SEND_ERROR "NAME is mandatory")
+  ENDIF(NOT DEFINED MYQTPLUGIN_NAME)
+  IF(NOT DEFINED MYQTPLUGIN_EXPORT_DIRECTIVE)
+    MESSAGE(SEND_ERROR "EXPORT_DIRECTIVE is mandatory")
+  ENDIF(NOT DEFINED MYQTPLUGIN_EXPORT_DIRECTIVE)
+  IF(NOT DEFINED MYQTPLUGIN_LIBRARY_TYPE)
+    SET(MYQTLIB_LIBRARY_TYPE "SHARED")
+  ENDIF(NOT DEFINED MYQTPLUGIN_LIBRARY_TYPE)
+
+  # Define library name
+  SET(lib_name ${MYQTPLUGIN_NAME})
+
+  # --------------------------------------------------------------------------
+  # Include dirs
+  SET(my_includes
+    ${CTK_BASE_INCLUDE_DIRS}
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_BINARY_DIR}
+    ${MYQTPLUGIN_INCLUDE_DIRECTORIES}
+    )  
+  INCLUDE_DIRECTORIES(
+    ${my_includes}
+    )  
+ 
+  SET(MY_LIBRARY_EXPORT_DIRECTIVE ${MYQTPLUGIN_EXPORT_DIRECTIVE})
+  SET(MY_EXPORT_HEADER_PREFIX ${MYQTPLUGIN_NAME})
+  SET(MY_LIBNAME ${lib_name})
+  
+  CONFIGURE_FILE(
+    ${CTK_SOURCE_DIR}/Libs/CTKExport.h.in
+    ${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h
+    )
+  SET(dynamicHeaders
+    "${dynamicHeaders};${CMAKE_CURRENT_BINARY_DIR}/${MY_EXPORT_HEADER_PREFIX}Export.h")
+
+  QT4_WRAP_CPP(MYQTPLUGIN_SRCS ${MYQTPLUGIN_MOC_SRCS})
+  QT4_WRAP_UI(MYQTPLUGIN_UI_CXX ${MYQTPLUGIN_UI_FORMS})
+  SET(MYQTPLUGIN_QRC_SRCS "")
+  IF(DEFINED MYQTPLUGIN_UI_RESOURCES)
+    QT4_ADD_RESOURCES(MYQTPLUGIN_QRC_SRCS ${MYQTPLUGIN_UI_RESOURCES})
+  ENDIF(DEFINED MYQTPLUGIN_UI_RESOURCES)
+
+  SOURCE_GROUP("Resources" FILES
+    ${MYQTPLUGIN_UI_RESOURCES}
+    ${MYQTPLUGIN_UI_FORMS}
+    )
+
+  SOURCE_GROUP("Generated" FILES
+    ${MYQTPLUGIN_MOC_SRCS}
+    ${MYQTPLUGIN_QRC_SRCS}
+    ${MYQTPLUGIN_UI_CXX}
+    )
+  
+  ADD_LIBRARY(${lib_name} ${OV_LIBRARY_TYPE}
+    ${MYQTPLUGIN_SRCS}
+    ${MYQTPLUGIN_UI_CXX}
+    ${MYQTPLUGIN_QRC_SRCS}
+    )
+
+  # Note: The plugin may be installed in some other location ???
+  # Install rules
+  #IF(CTK_BUILD_SHARED_LIBS)
+  #  INSTALL(TARGETS ${lib_name}
+  #    RUNTIME DESTINATION ${CTK_INSTALL_BIN_DIR} COMPONENT Runtime
+  #    LIBRARY DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Runtime
+  #    ARCHIVE DESTINATION ${CTK_INSTALL_LIB_DIR} COMPONENT Development)
+  #ENDIF(CTK_BUILD_SHARED_LIBS)
+  
+  SET(my_libs
+    ${CTK_BASE_LIBRARIES}
+    ${MYQTPLUGIN_TARGET_LIBRARIES}
+    )
+  TARGET_LINK_LIBRARIES(${lib_name} ${my_libs})
+  
+  # Install headers
+  #FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
+  #INSTALL(FILES
+  #  ${headers}
+  #  ${dynamicHeaders}
+  #  DESTINATION ${CTK_INSTALL_INCLUDE_DIR} COMPONENT Development
+  #  )
+
+ENDMACRO(ctk_build_qtplugin)
+
+

+ 34 - 0
CMake/CTKParseArgumentsMacro.cmake

@@ -0,0 +1,34 @@
+
+#
+# See http://www.cmake.org/Wiki/CMakeMacroParseArguments
+#
+MACRO(CTK_PARSE_ARGUMENTS prefix arg_names option_names)
+  SET(DEFAULT_ARGS)
+  FOREACH(arg_name ${arg_names})
+    SET(${prefix}_${arg_name})
+  ENDFOREACH(arg_name)
+  FOREACH(option ${option_names})
+    SET(${prefix}_${option} FALSE)
+  ENDFOREACH(option)
+
+  SET(current_arg_name DEFAULT_ARGS)
+  SET(current_arg_list)
+  FOREACH(arg ${ARGN})
+    SET(larg_names ${arg_names})
+    LIST(FIND larg_names "${arg}" is_arg_name)
+    IF (is_arg_name GREATER -1)
+      SET(${prefix}_${current_arg_name} ${current_arg_list})
+      SET(current_arg_name ${arg})
+      SET(current_arg_list)
+    ELSE (is_arg_name GREATER -1)
+      SET(loption_names ${option_names})    
+      LIST(FIND loption_names "${arg}" is_option)
+      IF (is_option GREATER -1)
+        SET(${prefix}_${arg} TRUE)
+      ELSE (is_option GREATER -1)
+        SET(current_arg_list ${current_arg_list} ${arg})
+      ENDIF (is_option GREATER -1)
+    ENDIF (is_arg_name GREATER -1)
+  ENDFOREACH(arg)
+  SET(${prefix}_${current_arg_name} ${current_arg_list})
+ENDMACRO(CTK_PARSE_ARGUMENTS)

+ 33 - 0
CMake/CTKSetupQt.cmake

@@ -0,0 +1,33 @@
+#
+#  Check if VTK was configured with QT, 
+#  if so, use it, 
+#  otherwise, complain. 
+#
+
+
+MACRO(ctk_setup_qt)
+
+  IF(DEFINED CTK_QMAKE_EXECUTABLE)
+    SET(QT_QMAKE_EXECUTABLE ${CTK_QMAKE_EXECUTABLE})
+  ENDIF()
+
+  SET(minimum_required_qt_version "4.6")
+
+  FIND_PACKAGE(Qt4)
+  IF(QT4_FOUND)
+
+    IF(NOT "${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}" STREQUAL "${minimum_required_qt_version}")
+      MESSAGE(FATAL_ERROR "error: CTK requires Qt >= ${minimum_required_qt_version} -- you cannot use Qt ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}.")
+    ENDIF()
+
+    SET(QT_USE_QTNETWORK ON)
+    SET(QT_USE_QTSQL ON)
+    INCLUDE(${QT_USE_FILE})
+
+    SET(CTK_BASE_LIBRARIES ${CTK_BASE_LIBRARIES} ${QT_LIBRARIES} CACHE INTERNAL "CTK libraries" FORCE)
+    SET(CTK_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE})
+  ELSE(QT4_FOUND)
+    MESSAGE(FATAL_ERROR "error: Qt4 was not found on your system. You probably need to set the QT_QMAKE_EXECUTABLE variable")
+  ENDIF(QT4_FOUND)
+
+ENDMACRO(ctk_setup_qt)

+ 83 - 0
CMake/CTestCustom.cmake.in

@@ -0,0 +1,83 @@
+SET(CTEST_CUSTOM_COVERAGE_EXCLUDE
+  ${CTEST_CUSTOM_COVERAGE_EXCLUDE}
+
+  # Exclude try_compile sources from coverage results:
+  "/CMakeFiles/CMakeTmp/"
+
+  # Exclude files generated by the moc pre-compiler
+  ".*/moc_.*"
+
+  # Exclude files generated by the uic pre-compiler
+  ".*/ui_.*"
+
+  # Exclude files from the Testing directories
+  ".*/Testing/.*"
+ 
+  ".*/CMakeExternals/.*"
+  )
+
+# The following tests should not be run under valgrind
+SET(CTEST_CUSTOM_MEMCHECK_IGNORE
+  
+  )
+
+SET(CTEST_CUSTOM_ERROR_MATCH
+  ${CTEST_CUSTOM_ERROR_MATCH}
+  "CMake Error[ :]"
+  )
+
+SET(CTEST_CUSTOM_WARNING_MATCH
+  ${CTEST_CUSTOM_WARNING_MATCH}
+  "CMake Warning[ :]"
+  )
+
+SET(CTEST_CUSTOM_WARNING_EXCEPTION
+  ${CTEST_CUSTOM_WARNING_EXCEPTION}
+  # cmake suppressions
+  "CMake.*Utilities.cmcurl"
+  "CMake.*Source.kwsys.*warn_unused_result"
+  "CMake.*Source.*cm.*cxx"
+  "CMake.*Source.*cm.*h"
+
+  # kwstyle suppressions
+  "[Kk][Ww][Ss]tyle.*kws.*cxx"
+  "[Kk][Ww][Ss]tyle.*kws.*h"
+  "[Kk][Ww][Ss]tyle.*metaCommand.*cxx"
+
+  # vtk suppressions
+  "vtkfreetype"
+  "Utilities.vtktiff"
+  "VTK.*IO.vtkMySQLQuery.cxx"
+  "VTK.*Utilities.vtkexodus2"
+  "VTK.*Utilities.vtklibproj"
+  "VTK.*Utilities.vtksqlite"
+  "VTK.*Utilities.vtkmetaio"
+  "VTK.*warn_unused_result"
+  "VTK.*Filtering.*cxx"
+  "VTK.*IO.*cxx"
+  "VTK.*Infovis.*cxx"
+
+  # qt suppressions from vtk...
+  # Some VTK dashboards include building bits of Qt which produce lots of
+  # the following warnings when built with the MS compilers. Qt guys should
+  # fix their code. Until they do, keep the Qt chatter off the VTK dashboard
+  # results:
+  "include.[Qq]t([Cc]ore|[Gg]ui).*warning C4127: conditional expression is constant"
+  "[Qq]t.*h.*warning.*declaration of .* shadows a member of .this"
+  "[Qq]t.*h.*warning.*(copy constructor|assignment operator) could not be generated"  
+
+  # Suppress warning caused when QT 'foreach' loops are combined
+  ".*warning: declaration of '_container_' shadows a previous local"
+  
+  # PythonQt suppressions
+  "PythonQt.*src.*PythonQt.*(cpp|h)"
+  "include.PythonQt.PythonQt.*h"
+
+  # Suppressing warnings about duplicate libraries in Darwin
+  # At some point this may be addressed by CMake feature request: 
+  # http://public.kitware.com/Bug/view.php?id=10179
+  "ld: warning: duplicate dylib.*"
+  
+  # Visual studio spurious warnings...
+  "The following environment variables were not found"
+  )

+ 4 - 0
CMake/FindCTK.cmake

@@ -0,0 +1,4 @@
+# - Find CTK
+# This module can be used to find CTK
+
+# TODO

+ 121 - 0
CMakeLists.txt

@@ -0,0 +1,121 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+IF(COMMAND CMAKE_POLICY)
+  CMAKE_POLICY(SET CMP0003 NEW)
+ENDIF(COMMAND CMAKE_POLICY)
+
+PROJECT(CTK)
+
+# Default to shared library
+SET(CTK_LIBRARY_MODE "SHARED")
+SET(CTK_BUILD_SHARED_LIBS TRUE)
+
+#-----------------------------------------------------------------------------
+# Output directories.
+#
+IF(NOT LIBRARY_OUTPUT_PATH)
+  SET(LIBRARY_OUTPUT_PATH ${CTK_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all libraries.")
+ENDIF(NOT LIBRARY_OUTPUT_PATH)
+IF(NOT EXECUTABLE_OUTPUT_PATH)
+  SET(EXECUTABLE_OUTPUT_PATH ${CTK_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all executables.")
+ENDIF(NOT EXECUTABLE_OUTPUT_PATH)
+SET(CTK_LIBRARY_PATH ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
+SET(CTK_EXECUTABLE_PATH ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
+SET(CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH})
+
+#-----------------------------------------------------------------------------
+# Install directories, used for install rules.
+#
+SET(CTK_INSTALL_BIN_DIR "bin")
+SET(CTK_INSTALL_LIB_DIR "lib")
+SET(CTK_INSTALL_INCLUDE_DIR "include")
+SET(CTK_INSTALL_DOC_DIR "doc")
+
+#-----------------------------------------------------------------------------
+# Update CMake module path
+# 
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
+
+#-----------------------------------------------------------------------------
+# Clear CTK_BASE_INCLUDE_DIRS and CTK_BASE_LIBRARIES
+#
+SET(CTK_BASE_LIBRARIES CACHE INTERNAL "CTK libraries" FORCE)
+SET(CTK_BASE_INCLUDE_DIRS CACHE INTERNAL "CTK includes" FORCE)
+
+#-----------------------------------------------------------------------------
+# CMake Macro(s)
+# 
+INCLUDE(CMake/CTKParseArgumentsMacro.cmake)
+INCLUDE(CMake/CTKBuildQtLibMacro.cmake)
+INCLUDE(CMake/CTKBuildQtPluginMacro.cmake)
+INCLUDE(CMake/CTKSetupQt.cmake)
+
+#-----------------------------------------------------------------------------
+# Testing
+#
+OPTION(BUILD_TESTING "Test the project" ON)
+IF(BUILD_TESTING)
+  ENABLE_TESTING()
+  INCLUDE(CTest)
+  SET(CXX_TEST_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+  MARK_AS_ADVANCED(TCL_TCLSH DART_ROOT)
+    
+  # Setup file for setting custom ctest vars
+  CONFIGURE_FILE(
+    CMake/CTestCustom.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake
+    @ONLY
+    )
+ENDIF()
+
+#-----------------------------------------------------------------------------
+# QT
+#
+ctk_setup_qt()
+
+#-----------------------------------------------------------------------------
+# CTK Libraries
+#
+SET(ctk_libs
+  Core
+  Widgets
+  DICOM/Core
+  DICOM/Widgets)
+  
+#-----------------------------------------------------------------------------
+# To make options show up in both CTK-SuperBuild and CTK regular build, let's add them
+# before the SuperBuild script is included
+#
+
+# KWStyle
+OPTION(CTK_USE_KWSTYLE     "Enable sourcecode-based style tests." OFF)
+MARK_AS_ADVANCED(CTK_USE_KWSTYLE)
+
+# Build options
+FOREACH(lib ${ctk_libs})
+  OPTION(CTK_USE_${lib} "Enable ${lib} Support." ON)
+ENDFOREACH()
+
+#-----------------------------------------------------------------------------
+# Superbuild is used by default
+#
+OPTION(CTK_SUPERBUILD "Build CTK and the projects it depends on via SuperBuild.cmake." ON)
+MARK_AS_ADVANCED(CTK_SUPERBUILD)
+
+IF(CTK_SUPERBUILD)
+  INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/SuperBuild.cmake")
+  RETURN()
+ENDIF()
+
+#-----------------------------------------------------------------------------
+# Add subdirectories
+#
+FOREACH(lib ${ctk_libs})
+  IF (CTK_USE_${lib})
+    ADD_SUBDIRECTORY(Libs/${lib})
+  ENDIF()
+ENDFOREACH()
+
+#-----------------------------------------------------------------------------
+# Style Checking configuration
+#
+INCLUDE(Utilities/KWStyle/KWStyle.cmake)

+ 7 - 0
CTestConfig.cmake

@@ -0,0 +1,7 @@
+set(CTEST_PROJECT_NAME "CTK")
+set(CTEST_NIGHTLY_START_TIME "23:00:00 EDT")
+
+set(CTEST_DROP_METHOD "http")
+set(CTEST_DROP_SITE "my.cdash.org")
+set(CTEST_DROP_LOCATION "/submit.php?project=CTK")
+set(CTEST_DROP_SITE_CDASH TRUE)

Libs/DICOM/qCTKExport.h.in → Libs/CTKExport.h


+ 21 - 0
Libs/CTKExport.h.in

@@ -0,0 +1,21 @@
+
+
+// .NAME __@MY_EXPORT_HEADER_PREFIX@Export - manage Windows system differences
+// .SECTION Description
+// The __@MY_EXPORT_HEADER_PREFIX@Export captures some system differences between Unix
+// and Windows operating systems. 
+
+#ifndef __@MY_EXPORT_HEADER_PREFIX@Export_h
+#define __@MY_EXPORT_HEADER_PREFIX@Export_h
+
+#if defined(WIN32) && !defined(@MY_LIBNAME@_STATIC)
+ #if defined(@MY_LIBNAME@_EXPORTS)
+  #define @MY_LIBRARY_EXPORT_DIRECTIVE@ __declspec( dllexport ) 
+ #else
+  #define @MY_LIBRARY_EXPORT_DIRECTIVE@ __declspec( dllimport ) 
+ #endif
+#else
+ #define @MY_LIBRARY_EXPORT_DIRECTIVE@
+#endif
+
+#endif

+ 53 - 0
Libs/Core/CMakeLists.txt

@@ -0,0 +1,53 @@
+PROJECT(CTKCore)
+
+#
+# See CTK/CMake/CTKBuildQtLibMacro.cmake for details
+#
+
+SET(KIT_export_directive "Q_CTK_CORE_EXPORT")
+
+# Additional directories to include
+SET(KIT_include_directories
+  )
+  
+# Source files
+SET(KIT_SRCS
+  qCTKUtils.cxx
+  qCTKUtils.h
+  )
+
+# Headers that should run through moc
+SET(KIT_MOC_SRCS
+  )
+
+# UI files
+SET(KIT_UI_FORMS
+)
+
+# Resources
+SET(KIT_resources
+)
+
+# Additional Target libraries (QT libs already included)
+SET(KIT_target_libraries
+  )
+
+ctk_build_qtlib(
+  NAME ${PROJECT_NAME}
+  EXPORT_DIRECTIVE ${KIT_export_directive}
+  INCLUDE_DIRECTORIES ${KIT_include_directories}
+  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}
+  )
+
+# Plugins
+#ADD_SUBDIRECTORY(Plugins)
+
+# Testing
+IF(BUILD_TESTING)
+  #ADD_SUBDIRECTORY(Testing)
+ENDIF(BUILD_TESTING)

Libs/DICOM/Base/qCTKPimpl.h → Libs/Core/qCTKPimpl.h


+ 63 - 0
Libs/Core/qCTKUtils.cxx

@@ -0,0 +1,63 @@
+/*=========================================================================
+
+  Library:   qCTK
+
+  Copyright (c) Kitware Inc. 
+  All rights reserved.
+  Distributed under a BSD License. See LICENSE.txt file.
+
+  This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the above copyright notice for more information.
+
+=========================================================================*/
+
+#include "qCTKUtils.h"
+
+// STD includes
+#include <algorithm>
+
+//------------------------------------------------------------------------------
+void qCTKUtils::qListToSTLVector(const QStringList& list,
+                                 std::vector<char*>& vector)
+{
+  // Resize if required
+  if (list.count() != static_cast<int>(vector.size()))
+    {
+    vector.resize(list.count());
+    }
+  for (int i = 0; i < list.count(); ++i)
+    {
+    // Allocate memory
+    char* str = new char[list[i].size()+1];
+    strcpy(str, list[i].toLatin1());
+    vector[i] = str;
+    }
+}
+
+//------------------------------------------------------------------------------
+namespace
+{
+/// Convert QString to std::string
+static std::string qStringToSTLString(const QString& qstring)
+{
+  return qstring.toStdString();
+}
+}
+
+//------------------------------------------------------------------------------
+void qCTKUtils::qListToSTLVector(const QStringList& list,
+                                 std::vector<std::string>& vector)
+{
+  // To avoid unnessesary relocations, let's reserve the required amount of space
+  vector.reserve(list.size());
+  std::transform(list.begin(),list.end(),std::back_inserter(vector),&qStringToSTLString);
+}
+
+//------------------------------------------------------------------------------
+void qCTKUtils::stlVectorToQList(const std::vector<std::string>& vector,
+                                 QStringList& list)
+{
+  std::transform(vector.begin(),vector.end(),std::back_inserter(list),&QString::fromStdString);
+}
+

+ 52 - 0
Libs/Core/qCTKUtils.h

@@ -0,0 +1,52 @@
+/*=========================================================================
+
+  Library:   qCTK
+
+  Copyright (c) Kitware Inc. 
+  All rights reserved.
+  Distributed under a BSD License. See LICENSE.txt file.
+
+  This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the above copyright notice for more information.
+
+=========================================================================*/
+
+#ifndef __qCTKUtils_h
+#define __qCTKUtils_h
+
+// QT includes
+#include <QStringList>
+
+// STD includes
+#include <vector>
+
+#include "CTKCoreExport.h"
+
+class Q_CTK_CORE_EXPORT qCTKUtils
+{
+  
+public:
+  typedef qCTKUtils Self;
+
+  ///
+  /// Convert a QStringList to Vector of char*
+  /// Caller will be responsible to delete the content of the vector
+  static void qListToSTLVector(const QStringList& list, std::vector<char*>& vector);
+
+  ///
+  /// Convert a QStringList to a Vector of string
+  static void qListToSTLVector(const QStringList& list, std::vector<std::string>& vector);
+
+  ///
+  /// Convert a Vector of string to QStringList
+  static void stlVectorToQList(const std::vector<std::string>& vector, QStringList& list);
+
+private:
+  /// Not implemented
+  qCTKUtils(){}
+  virtual ~qCTKUtils(){}
+
+};
+
+#endif

+ 1 - 1
Libs/DICOM/Applications/CMakeLists.txt

@@ -6,7 +6,7 @@ ADD_EXECUTABLE(ctkDMCTK
 )
 
 SET(KIT_LIBRARIES
-  ${qCTK_BASE_LIBRARIES}
+  ${CTK_BASE_LIBRARIES}
   )
 
 TARGET_LINK_LIBRARIES(ctkDMCTK ${KIT_LIBRARIES})

+ 3 - 64
Libs/DICOM/CMakeLists.txt

@@ -1,67 +1,6 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-IF(COMMAND CMAKE_POLICY)
-  CMAKE_POLICY(SET CMP0003 NEW)
-ENDIF(COMMAND CMAKE_POLICY)
 
-PROJECT(CTKDCMTK)
 
-#-----------------------------------------------------------------------------
-# Advanced options
-#
-
-#-----------------------------------------------------------------------------
-# External libraries.  
-#
-SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} 
-  "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
-
-INCLUDE(CMake/qCTKParseArgumentsMacro.cmake)
-INCLUDE(CMake/qCTKBuildLibMacro.cmake)
-  
-#-----------------------------------------------------------------------------
-# Build shared lib by default
-#
-OPTION(qCTK_BUILD_SHARED_LIBS "Build ${PROJECT_NAME} with shared libraries." ON)
-SET(qCTK_LIBRARY_MODE "")
-IF( qCTK_BUILD_SHARED_LIBS)
-  SET(qCTK_LIBRARY_MODE "SHARED")
-ENDIF(qCTK_BUILD_SHARED_LIBS)
-MARK_AS_ADVANCED(qCTK_BUILD_SHARED_LIBS)
-
-#-----------------------------------------------------------------------------
-# Output directories.
-#
-IF(NOT LIBRARY_OUTPUT_PATH)
-  SET(LIBRARY_OUTPUT_PATH ${CTKDCMTK_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all libraries.")
-ENDIF(NOT LIBRARY_OUTPUT_PATH)
-IF(NOT EXECUTABLE_OUTPUT_PATH)
-  SET(EXECUTABLE_OUTPUT_PATH ${CTKDCMTK_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all executables.")
-ENDIF(NOT EXECUTABLE_OUTPUT_PATH)
-SET(CTKDCMTK_LIBRARY_PATH ${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
-SET(CTKDCMTK_EXECUTABLE_PATH ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
-SET(CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH})
-
-#-----------------------------------------------------------------------------
-# Install directories, used for install rules.
-SET(qCTK_INSTALL_BIN_DIR "bin")
-SET(qCTK_INSTALL_LIB_DIR "lib")
-SET(qCTK_INSTALL_INCLUDE_DIR "include")
-#SET(qCTK_INSTALL_DOC_DIR "doc")
-
-#
-# QT
-#
-FIND_PACKAGE(Qt4)
-IF(QT4_FOUND)
-  SET(QT_USE_QTNETWORK ON)
-  INCLUDE(${QT_USE_FILE})
-ELSE(QT4_FOUND)
-  MESSAGE("Qt4 was not found on your system. You probably need to set the QT_QMAKE_EXECUTABLE variable")
-ENDIF(QT4_FOUND)
-
-# Build the code Base  
-ADD_SUBDIRECTORY(Base)
-
-# Build the application(s)
-ADD_SUBDIRECTORY(Applications)
+# ADD_SUBDIRECTORY(Core)
+# ADD_SUBDIRECTORY(Widgets)
+# ADD_SUBDIRECTORY(Applications)
 

+ 55 - 0
Libs/DICOM/Core/CMakeLists.txt

@@ -0,0 +1,55 @@
+PROJECT(CTKDICOMCore)
+
+#
+# See CTK/CMake/CTKBuildQtLibMacro.cmake for details
+#
+
+SET(KIT_export_directive "Q_CTK_DICOM_CORE_EXPORT")
+
+# Additional directories to include
+SET(KIT_include_directories
+  )
+  
+# Source files
+SET(KIT_SRCS
+  qCTKDCMTK.cxx
+  qCTKDCMTK.h
+  )
+
+# Headers that should run through moc
+SET(KIT_MOC_SRCS
+  qCTKDCMTK.h
+  )
+
+# UI files
+SET(KIT_UI_FORMS
+)
+
+# Resources
+SET(KIT_resources
+)
+
+# Additional Target libraries (QT libs already included)
+SET(KIT_target_libraries
+  CTKCore
+  )
+
+ctk_build_qtlib(
+  NAME ${PROJECT_NAME}
+  EXPORT_DIRECTIVE ${KIT_export_directive}
+  INCLUDE_DIRECTORIES ${KIT_include_directories}
+  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}
+  )
+
+# Plugins
+#ADD_SUBDIRECTORY(Plugins)
+
+# Testing
+IF(BUILD_TESTING)
+  #ADD_SUBDIRECTORY(Testing)
+ENDIF(BUILD_TESTING)

Libs/DICOM/Base/qCTKDCMTK.cxx → Libs/DICOM/Core/qCTKDCMTK.cxx


+ 2 - 2
Libs/DICOM/Base/qCTKDCMTK.h

@@ -7,10 +7,10 @@
 // qCTK includes
 #include <qCTKPimpl.h>
 
-#include "qCTKDMCTKExport.h"
+#include "CTKDICOMCoreExport.h"
 
 class qCTKDCMTKPrivate;
-class Q_CTKDMCTK_EXPORT qCTKDCMTK : public QObject
+class Q_CTK_DICOM_CORE_EXPORT qCTKDCMTK : public QObject
 {
   Q_OBJECT
 public:

+ 7 - 11
Libs/DICOM/Base/CMakeLists.txt

@@ -1,11 +1,10 @@
-
-PROJECT(qCTKDMCTK)
+PROJECT(CTKDICOMWidgets)
 
 #
-# See CMake/Slicer3QTBaseLibraryMacros.cmake for details
+# See CTK/CMake/CTKBuildQtLibMacro.cmake for details
 #
 
-SET(KIT_export_directive "Q_CTKDMCTK_EXPORT")
+SET(KIT_export_directive "Q_CTK_DICOM_WIDGETS_EXPORT")
 
 # Additional directories to include
 SET(KIT_include_directories
@@ -13,8 +12,6 @@ SET(KIT_include_directories
   
 # Source files
 SET(KIT_SRCS
-  qCTKDCMTK.cxx
-  qCTKDCMTK.h
   qCTKDCMTKListenerWidget.cxx
   qCTKDCMTKListenerWidget.h
   qCTKDCMTKLocationWidget.cxx
@@ -25,7 +22,6 @@ SET(KIT_SRCS
 
 # Headers that should run through moc
 SET(KIT_MOC_SRCS
-  qCTKDCMTK.h
   )
 
 # UI files
@@ -41,12 +37,12 @@ SET(KIT_resources
 
 # Additional Target libraries (QT libs already included)
 SET(KIT_target_libraries
-  ${QT_LIBRARIES}
+  CTKCore
+  CTKDICOMCore
   )
 
-qctk_build_qtlib( 
+ctk_build_qtlib(
   NAME ${PROJECT_NAME}
-  EXPORT_TEMPLATE ${CTKDCMTK_SOURCE_DIR}/qCTKExport.h.in
   EXPORT_DIRECTIVE ${KIT_export_directive}
   INCLUDE_DIRECTORIES ${KIT_include_directories}
   SRCS ${KIT_SRCS}
@@ -54,7 +50,7 @@ qctk_build_qtlib(
   UI_FORMS ${KIT_UI_FORMS}
   TARGET_LIBRARIES ${KIT_target_libraries}
   RESOURCES ${KIT_resources}
-  LIBRARY_TYPE ${qCTK_LIBRARY_MODE}
+  LIBRARY_TYPE ${CTK_LIBRARY_MODE}
   )
 
 # Plugins

Libs/DICOM/Base/Resources/UI/qCTKDCMTKListenerWidget.ui → Libs/DICOM/Widgets/Resources/UI/qCTKDCMTKListenerWidget.ui


Libs/DICOM/Base/Resources/UI/qCTKDCMTKLocationWidget.ui → Libs/DICOM/Widgets/Resources/UI/qCTKDCMTKLocationWidget.ui


Libs/DICOM/Base/Resources/UI/qCTKDCMTKQueryRetrieveWidget.ui → Libs/DICOM/Widgets/Resources/UI/qCTKDCMTKQueryRetrieveWidget.ui


+ 73 - 0
Libs/DICOM/Widgets/qCTKDCMTKDICOMItemTreeModel.cxx

@@ -0,0 +1,73 @@
+
+// qCTKDCMTK includes
+#include "qCTKDCMTKDICOMItemTreeModel.h"
+
+//----------------------------------------------------------------------------
+class qCTKDCMTKDICOMItemTreeModelPrivate: public qCTKPrivate<qCTKDCMTKDICOMItemTreeModel>
+{
+public:
+  qCTKDCMTKDICOMItemTreeModelPrivate(){}
+};
+
+//----------------------------------------------------------------------------
+// qCTKDCMTKDICOMItemTreeModelPrivate methods
+
+
+//----------------------------------------------------------------------------
+// qCTKDCMTKDICOMItemTreeModel methods
+
+qCTKDCMTKDICOMItemTreeModel::qCTKDCMTKDICOMItemTreeModel(QObject* _parent):Superclass(_parent)
+{
+  QCTK_INIT_PRIVATE(qCTKDCMTKDICOMItemTreeModel);
+  QCTK_D(qCTKDCMTKDICOMItemTreeModel);
+
+}
+
+//----------------------------------------------------------------------------
+qCTKDCMTKDICOMItemTreeModel::~qCTKDCMTKDICOMItemTreeModel()
+{
+}
+
+//----------------------------------------------------------------------------
+QModelIndex qCTKDCMTKDICOMItemTreeModel::index(int row, int column,
+                            const QModelIndex &parent) const
+{
+  return QModelIndex();
+}
+
+//----------------------------------------------------------------------------
+QModelIndex qCTKDCMTKDICOMItemTreeModel::parent(const QModelIndex &child) const
+{
+  return QModelIndex();
+}
+
+//----------------------------------------------------------------------------
+Qt::ItemFlags qCTKDCMTKDICOMItemTreeModel::flags(const QModelIndex &index) const
+{
+  return 0;
+}
+
+//----------------------------------------------------------------------------
+QVariant qCTKDCMTKDICOMItemTreeModel::data(const QModelIndex &index, int role) const
+{
+  return QVariant();
+}
+
+//----------------------------------------------------------------------------
+QVariant qCTKDCMTKDICOMItemTreeModel::headerData(int section, Qt::Orientation orientation,
+                                                 int role) const
+{
+  return QVariant();
+}
+
+//----------------------------------------------------------------------------
+int qCTKDCMTKDICOMItemTreeModel::rowCount(const QModelIndex &parent) const
+{
+  return -1;
+}
+
+//----------------------------------------------------------------------------
+int qCTKDCMTKDICOMItemTreeModel::columnCount(const QModelIndex &parent) const
+{
+  return -1;
+}

+ 41 - 0
Libs/DICOM/Widgets/qCTKDCMTKDICOMItemTreeModel.h

@@ -0,0 +1,41 @@
+#ifndef __qCTKDCMTKDICOMItemTreeModel_h
+#define __qCTKDCMTKDICOMItemTreeModel_h
+
+// QT includes 
+#include <QAbstractItemModel>
+#include <QModelIndex>
+
+// qCTK includes
+#include <qCTKPimpl.h>
+
+#include "CTKDICOMWidgetsExport.h"
+
+class qCTKDCMTKDICOMItemTreeModelPrivate;
+
+class Q_CTK_DICOM_WIDGETS_EXPORT qCTKDCMTKDICOMItemTreeModel : public QAbstractItemModel
+{
+public:
+  typedef QAbstractItemModel Superclass;
+  explicit qCTKDCMTKDICOMItemTreeModel(QObject* parent=0);
+  virtual ~qCTKDCMTKDICOMItemTreeModel();
+
+  virtual QModelIndex index(int row, int column,
+                            const QModelIndex &parent = QModelIndex()) const;
+                            
+  virtual QModelIndex parent(const QModelIndex &child) const;
+    
+  virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+
+  virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+
+  virtual QVariant headerData(int section, Qt::Orientation orientation,
+                                int role = Qt::DisplayRole) const;
+
+  virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+  virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+
+private:
+  QCTK_DECLARE_PRIVATE(qCTKDCMTKDICOMItemTreeModel);
+};
+
+#endif

Libs/DICOM/Base/qCTKDCMTKListenerWidget.cxx → Libs/DICOM/Widgets/qCTKDCMTKListenerWidget.cxx


+ 2 - 2
Libs/DICOM/Base/qCTKDCMTKListenerWidget.h

@@ -7,11 +7,11 @@
 // qCTK includes
 #include <qCTKPimpl.h>
 
-#include "qCTKDMCTKExport.h"
+#include "CTKDICOMWidgetsExport.h"
 
 class qCTKDCMTKListenerWidgetPrivate; 
 
-class Q_CTKDMCTK_EXPORT qCTKDCMTKListenerWidget : public QWidget
+class Q_CTK_DICOM_WIDGETS_EXPORT qCTKDCMTKListenerWidget : public QWidget
 {
 public:
   typedef QWidget Superclass;

Libs/DICOM/Base/qCTKDCMTKLocationWidget.cxx → Libs/DICOM/Widgets/qCTKDCMTKLocationWidget.cxx


+ 2 - 2
Libs/DICOM/Base/qCTKDCMTKLocationWidget.h

@@ -7,11 +7,11 @@
 // qCTK includes
 #include <qCTKPimpl.h>
 
-#include "qCTKDMCTKExport.h"
+#include "CTKDICOMWidgetsExport.h"
 
 class qCTKDCMTKLocationWidgetPrivate; 
 
-class Q_CTKDMCTK_EXPORT qCTKDCMTKLocationWidget : public QWidget
+class Q_CTK_DICOM_WIDGETS_EXPORT qCTKDCMTKLocationWidget : public QWidget
 {
 public:
   typedef QWidget Superclass;

Libs/DICOM/Base/qCTKDCMTKQueryRetrieveWidget.cxx → Libs/DICOM/Widgets/qCTKDCMTKQueryRetrieveWidget.cxx


+ 2 - 2
Libs/DICOM/Base/qCTKDCMTKQueryRetrieveWidget.h

@@ -7,11 +7,11 @@
 // qCTK includes
 #include <qCTKPimpl.h>
 
-#include "qCTKDMCTKExport.h"
+#include "CTKDICOMWidgetsExport.h"
 
 class qCTKDCMTKQueryRetrieveWidgetPrivate; 
 
-class Q_CTKDMCTK_EXPORT qCTKDCMTKQueryRetrieveWidget : public QWidget
+class Q_CTK_DICOM_WIDGETS_EXPORT qCTKDCMTKQueryRetrieveWidget : public QWidget
 {
 public:
   typedef QWidget Superclass;

+ 55 - 0
Libs/Widgets/CMakeLists.txt

@@ -0,0 +1,55 @@
+PROJECT(CTKWidgets)
+
+#
+# See CTK/CMake/CTKBuildQtLibMacro.cmake for details
+#
+
+SET(KIT_export_directive "Q_CTK_WIDGETS_EXPORT")
+
+# Additional directories to include
+SET(KIT_include_directories
+  )
+  
+# Source files
+SET(KIT_SRCS
+  qCTKSettings.cxx
+  qCTKSettings.h
+  )
+
+# Headers that should run through moc
+SET(KIT_MOC_SRCS
+  qCTKSettings.h
+  )
+
+# UI files
+SET(KIT_UI_FORMS
+)
+
+# Resources
+SET(KIT_resources
+)
+
+# Additional Target libraries (QT libs already included)
+SET(KIT_target_libraries
+  CTKCore
+  )
+
+ctk_build_qtlib(
+  NAME ${PROJECT_NAME}
+  EXPORT_DIRECTIVE ${KIT_export_directive}
+  INCLUDE_DIRECTORIES ${KIT_include_directories}
+  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}
+  )
+
+# Plugins
+#ADD_SUBDIRECTORY(Plugins)
+
+# Testing
+IF(BUILD_TESTING)
+  #ADD_SUBDIRECTORY(Testing)
+ENDIF(BUILD_TESTING)

+ 141 - 0
Libs/Widgets/qCTKSettings.cxx

@@ -0,0 +1,141 @@
+/*=========================================================================
+
+  Library:   qCTK
+
+  Copyright (c) Kitware Inc. 
+  All rights reserved.
+  Distributed under a BSD License. See LICENSE.txt file.
+
+  This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the above copyright notice for more information.
+
+=========================================================================*/
+/*=========================================================================
+
+   Program: ParaView
+   Module:    $RCSfile: pqSettings.cxx,v $
+
+   Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc.
+   All rights reserved.
+
+   ParaView is a free software; you can redistribute it and/or modify it
+   under the terms of the ParaView license version 1.2. 
+
+   See License_v1.2.txt for the full ParaView license.
+   A copy of this license can be obtained by contacting
+   Kitware Inc.
+   28 Corporate Drive
+   Clifton Park, NY 12065
+   USA
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+=========================================================================*/
+#include "qCTKSettings.h"
+
+// QT includes
+#include <QDialog>
+#include <QMainWindow>
+#include <QDesktopWidget>
+
+//-----------------------------------------------------------------------------
+qCTKSettings::qCTKSettings(
+    const QString& organization, 
+    const QString& application,
+    QObject* p) :
+  QSettings(QSettings::IniFormat, QSettings::UserScope, organization, application, p)
+{
+}
+
+//-----------------------------------------------------------------------------
+void qCTKSettings::alertSettingsModified()
+{
+  emit this->modified();
+}
+
+//-----------------------------------------------------------------------------
+void qCTKSettings::saveState(const QMainWindow& window, const QString& key)
+{
+  this->beginGroup(key);
+  this->setValue("Position", window.pos());
+  this->setValue("Size", window.size());
+  this->setValue("Layout", window.saveState());
+  this->endGroup();
+}
+
+//-----------------------------------------------------------------------------
+void qCTKSettings::saveState(const QDialog& dialog, const QString& key)
+{
+  this->beginGroup(key);
+  this->setValue("Position", dialog.pos());
+  this->setValue("Size", dialog.size());
+  this->endGroup();
+}
+
+//-----------------------------------------------------------------------------
+void qCTKSettings::restoreState(const QString& key, QMainWindow& window)
+{
+  this->beginGroup(key);
+  
+  if(this->contains("Size"))
+    {
+    window.resize(this->value("Size").toSize());
+    }
+    
+  if(this->contains("Position"))
+    {
+    QPoint windowTopLeft = this->value("Position").toPoint();
+    QRect mwRect(windowTopLeft, window.size());
+    
+    QDesktopWidget desktop;
+    QRect desktopRect = desktop.availableGeometry( desktop.primaryScreen() );
+    // try moving it to keep size
+    if(!desktopRect.contains(mwRect))
+      {
+      mwRect = QRect(desktopRect.topLeft(), window.size());
+      }
+    // still doesn't fit, resize it
+    if(!desktopRect.contains(mwRect))
+      {
+      mwRect = QRect(desktopRect.topLeft(), window.size());
+      window.resize(desktopRect.size());
+      }
+    window.move(mwRect.topLeft());
+    }
+
+  if(this->contains("Layout"))
+    {
+    window.restoreState(this->value("Layout").toByteArray());
+    }
+  
+  this->endGroup();
+}
+
+//-----------------------------------------------------------------------------
+void qCTKSettings::restoreState(const QString& key, QDialog& dialog)
+{
+  this->beginGroup(key);
+  
+  if(this->contains("Size"))
+    {
+    dialog.resize(this->value("Size").toSize());
+    }
+    
+  if(this->contains("Position"))
+    {
+    dialog.move(this->value("Position").toPoint());
+    }
+
+  this->endGroup();
+}

+ 84 - 0
Libs/Widgets/qCTKSettings.h

@@ -0,0 +1,84 @@
+/*=========================================================================
+
+  Library:   qCTK
+
+  Copyright (c) Kitware Inc. 
+  All rights reserved.
+  Distributed under a BSD License. See LICENSE.txt file.
+
+  This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the above copyright notice for more information.
+
+=========================================================================*/
+/*=========================================================================
+
+   Program: ParaView
+   Module:    $RCSfile: pqSettings.h,v $
+
+   Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc.
+   All rights reserved.
+
+   ParaView is a free software; you can redistribute it and/or modify it
+   under the terms of the ParaView license version 1.2. 
+
+   See License_v1.2.txt for the full ParaView license.
+   A copy of this license can be obtained by contacting
+   Kitware Inc.
+   28 Corporate Drive
+   Clifton Park, NY 12065
+   USA
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+=========================================================================*/
+
+/// \file qCTKSettings.h
+///
+/// \date 02/03/2010
+
+#ifndef __qCTKSettings_h
+#define __qCTKSettings_h
+
+// QT includes
+#include <QSettings>
+
+#include "CTKWidgetsExport.h"
+
+class QDialog;
+class QMainWindow;
+
+class Q_CTK_WIDGETS_EXPORT qCTKSettings : public QSettings
+{
+  Q_OBJECT
+
+public:
+  qCTKSettings(
+    const QString& organization,
+    const QString& application,
+    QObject* p);
+    
+  void saveState(const QMainWindow& window, const QString& key);
+  void saveState(const QDialog& dialog, const QString& key);
+  
+  void restoreState(const QString& key, QMainWindow& window);
+  void restoreState(const QString& key, QDialog& dialog);
+
+  /// Calling this method will cause the modified signal to be emited.
+  void alertSettingsModified();
+
+signals:
+  void modified();
+};
+
+#endif

+ 167 - 0
SuperBuild.cmake

@@ -0,0 +1,167 @@
+SET(cmake_version_required "2.8")
+SET(cmake_version_required_regex "2.8.*")
+SET(cmake_version_required_dash "2-8")
+
+IF(NOT CMAKE_VERSION MATCHES "${cmake_version_required_regex}")
+  SET(err "error: CTK SuperBuild requires CMake version ${cmake_version_required}")
+  MESSAGE(FATAL_ERROR "${err}")
+ENDIF()
+
+CMAKE_MINIMUM_REQUIRED(VERSION ${cmake_version_required})
+
+# 
+# CTK_QMAKE_EXECUTABLE
+# CTK_KWSTYLE_EXECUTABLE
+#
+
+#-----------------------------------------------------------------------------
+# Enable and setup External project global properties
+#
+INCLUDE(ExternalProject)
+
+SET(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals")
+SET_PROPERTY(DIRECTORY PROPERTY EP_BASE ${ep_base})
+
+SET(ep_install_dir ${ep_base}/Install)
+#SET(ep_build_dir ${ep_base}/Build)
+#SET(ep_parallelism_level)
+SET(ep_build_shared_libs ON)
+SET(ep_build_testing OFF)
+
+SET(ep_common_args
+  -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
+  -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+  -DBUILD_TESTING:BOOL=${ep_build_testing}
+  )
+
+# Compute -G arg for configuring external projects with the same CMake generator:
+IF(CMAKE_EXTRA_GENERATOR)
+  SET(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
+ELSE()
+  SET(gen "${CMAKE_GENERATOR}")
+ENDIF()
+
+# Use this value where semi-colons are needed in ep_add args:
+set(sep "^^")
+
+#-----------------------------------------------------------------------------
+# Update CMake module path
+#
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
+
+#-----------------------------------------------------------------------------
+# Qt is expected to be setup by CTK/CMakeLists.txt just before it includes the SuperBuild script
+#
+
+#-----------------------------------------------------------------------------
+# KWStyle
+#
+SET (kwstyle_DEPENDS)
+IF (CTK_USE_KWSTYLE)
+  IF (NOT DEFINED CTK_KWSTYLE_EXECUTABLE)
+    SET(proj KWStyle-CVSHEAD)
+    SET(kwstyle_DEPENDS ${proj})
+    ExternalProject_Add(${proj}
+      LIST_SEPARATOR ${sep}
+      CVS_REPOSITORY ":pserver:anoncvs:@public.kitware.com:/cvsroot/KWStyle"
+      CVS_MODULE "KWStyle"
+      CMAKE_GENERATOR ${gen}
+      CMAKE_ARGS
+        ${ep_common_args}
+      )
+    SET(CTK_KWSTYLE_EXECUTABLE ${ep_install_dir}/bin/KWStyle)
+  ENDIF()
+ENDIF()
+
+#-----------------------------------------------------------------------------
+# Utilities/DCMTK
+#
+SET(proj DCMTK)
+ExternalProject_Add(${proj}
+    DOWNLOAD_COMMAND ""
+    INSTALL_COMMAND "" # TODO DCMTK should be installable 
+    CMAKE_GENERATOR ${gen}
+    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/DCMTK
+    CMAKE_ARGS
+      ${ep_common_args}
+    )
+
+#-----------------------------------------------------------------------------
+# CTK Utilities
+#
+set(proj CTK-Utilities)
+ExternalProject_Add(${proj}
+  DOWNLOAD_COMMAND ""
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+  DEPENDS
+    ${kwstyle_DEPENDS}
+    "DCMTK"
+)
+  
+#-----------------------------------------------------------------------------
+# Convenient macro allowing to define superbuild arg
+#
+MACRO(ctk_set_superbuild_boolean_arg ctk_cmake_var)
+  SET(superbuild_${ctk_cmake_var} ON)
+  IF(DEFINED ${ctk_cmake_var} AND NOT ${ctk_cmake_var})
+    SET(superbuild_${ctk_cmake_var} OFF)
+  ENDIF()
+  SET(superbuild_ep_arg_${ctk_cmake_var} -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_var}})
+ENDMACRO()
+
+#-----------------------------------------------------------------------------
+# Set superbuild boolean args
+#
+
+SET(ctk_cmake_boolean_args
+  BUILD_TESTING
+  CTK_USE_KWSTYLE
+  ${ctk_libs}
+  )
+
+SET(ctk_superbuild_boolean_args)
+FOREACH(ctk_cmake_arg ${ctk_cmake_boolean_args})
+  ctk_set_superbuild_boolean_arg(${ctk_cmake_arg})
+  LIST(APPEND ctk_superbuild_boolean_args -D${ctk_cmake_arg}:BOOL=${superbuild_${ctk_cmake_arg}})
+ENDFOREACH()
+
+#-----------------------------------------------------------------------------
+# CTK Configure
+#
+SET(proj CTK-Configure)
+
+ExternalProject_Add(${proj}
+  DOWNLOAD_COMMAND ""
+  CMAKE_GENERATOR ${gen}
+  CMAKE_ARGS
+    ${ctk_superbuild_boolean_args}
+    -DCTK_SUPERBUILD:BOOL=OFF
+    -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}
+    -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+    -DCTK_QMAKE_EXECUTABLE:FILEPATH=${CTK_QMAKE_EXECUTABLE}
+    -DCTK_KWSTYLE_EXECUTABLE:FILEPATH=${CTK_KWSTYLE_EXECUTABLE}
+  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
+  BINARY_DIR ${CMAKE_BINARY_DIR}/CTK-build
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+  DEPENDS
+    "CTK-Utilities"
+  )
+
+
+#-----------------------------------------------------------------------------
+# CTK
+#
+set(proj CTK-build)
+ExternalProject_Add(${proj}
+  DOWNLOAD_COMMAND ""
+  CMAKE_GENERATOR ${gen}
+  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
+  BINARY_DIR CTK-build
+  #BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+  DEPENDS
+    "CTK-Configure"
+  )

+ 54 - 0
Utilities/KWStyle/KWStyle.cmake

@@ -0,0 +1,54 @@
+IF( CTK_USE_KWSTYLE )
+  SET(msvc_default OFF)
+  IF(CMAKE_GENERATOR MATCHES "Visual Studio")
+    SET(msvc_default ON)
+  ENDIF()
+
+  OPTION(KWSTYLE_USE_VIM_FORMAT "Set KWStyle to generate errors with a VIM-compatible format." OFF)
+  OPTION(KWSTYLE_USE_MSVC_FORMAT "Set KWStyle to generate errors with a VisualStudio-compatible format." ${msvc_default})
+  OPTION(KWSTYLE_USE_GCC_FORMAT "Set KWStyle to generate errors with a GCC-compatible format." OFF)
+
+  FIND_PROGRAM(CTK_KWSTYLE_EXECUTABLE
+    NAMES KWStyle
+    PATHS
+    /usr/local/bin
+    )
+
+  CONFIGURE_FILE(
+    ${PROJECT_SOURCE_DIR}/Utilities/KWStyle/qCTKFiles.txt.in
+    ${PROJECT_BINARY_DIR}/Utilities/KWStyle/qCTKFiles.txt)
+
+  CONFIGURE_FILE(
+    ${PROJECT_SOURCE_DIR}/Utilities/KWStyle/qCTK.kws.xml.in
+    ${PROJECT_BINARY_DIR}/Utilities/KWStyle/qCTK.kws.xml)
+
+
+  SET(CTK_KWSTYLE_ARGUMENTS
+    -xml ${PROJECT_BINARY_DIR}/Utilities/KWStyle/qCTK.kws.xml -v
+      -D ${PROJECT_BINARY_DIR}/Utilities/KWStyle/qCTKFiles.txt  
+      -o ${PROJECT_SOURCE_DIR}/Utilities/KWStyle/qCTKOverwrite.txt
+    )
+
+  IF(KWSTYLE_USE_VIM_FORMAT)
+    LIST(APPEND CTK_KWSTYLE_ARGUMENTS -vim)
+  ENDIF()
+
+  IF(KWSTYLE_USE_MSVC_FORMAT)
+    LIST(APPEND CTK_KWSTYLE_ARGUMENTS -msvc)
+  ENDIF()
+
+  IF(KWSTYLE_USE_GCC_FORMAT)
+    LIST(APPEND CTK_KWSTYLE_ARGUMENTS -gcc)
+  ENDIF()
+
+  ADD_CUSTOM_COMMAND(
+    OUTPUT ${CTK_BINARY_DIR}/qCTKStyleReport.txt
+    COMMAND ${CTK_KWSTYLE_EXECUTABLE}
+    ARGS    ${CTK_KWSTYLE_ARGUMENTS}
+    COMMENT "Coding Style Checker qCTK style"
+    )
+
+  ADD_CUSTOM_TARGET(qCTKStyleCheck DEPENDS ${CTK_BINARY_DIR}/qCTKStyleReport.txt)
+  ADD_TEST(qCTKStyleTest ${CTK_KWSTYLE_EXECUTABLE} ${CTK_KWSTYLE_ARGUMENTS})
+
+ENDIF( CTK_USE_KWSTYLE )

+ 20 - 0
Utilities/KWStyle/qCTK.kws.xml.in

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<Description>
+  <LineLength>100</LineLength>
+  <DeclarationOrder>0,1,2</DeclarationOrder>
+  <Typedefs>^[A-Z](\w|\d)*</Typedefs>
+  <MemberFunctions>^~?(\w|\d)*</MemberFunctions>
+  <InternalVariables>^[A-Z](\w|\d)*</InternalVariables>
+  <SemicolonSpace>0</SemicolonSpace>
+  <EndOfFileNewLine>1</EndOfFileNewLine>
+  <Tabs>1</Tabs>
+  <Spaces>3</Spaces>
+  <Comments>/**, *, */,true</Comments>
+  <Header>@ZiBRA_SOURCE_DIR@/Utilities/KWStyle/headers,false,true</Header>
+  <Indent>SPACE,2,true,true</Indent>
+  <NameOfClass>[NameOfClass],qCTK</NameOfClass>
+  <IfNDefDefine>__[NameOfClass]_[Extension]</IfNDefDefine>
+  <EmptyLines>1</EmptyLines>
+  <Template>[TNV]</Template>
+  <Operator>1,1</Operator>
+</Description>

+ 3 - 0
Utilities/KWStyle/qCTKFiles.txt.in

@@ -0,0 +1,3 @@
+"@CTK_SOURCE_DIR@/Libs/qCTK*.cxx" [R]
+"@CTK_SOURCE_DIR@/Libs/qCTK*.h" [R]
+"@CTK_SOURCE_DIR@/Libs/qCTK*.txx" [R]

+ 0 - 0
Utilities/KWStyle/qCTKOverwrite.txt