# ---------------------------------------------------------------------
#
# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
#                        pour la Sant)
# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
# Previous Authors : Laurent Guigues, Jean-Pierre Roux
# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
#
#  This software is governed by the CeCILL-B license under French law and 
#  abiding by the rules of distribution of free software. You can  use, 
#  modify and/ or redistribute the software under the terms of the CeCILL-B 
#  license as circulated by CEA, CNRS and INRIA at the following URL 
#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
#  or in the file LICENSE.txt.
#
#  As a counterpart to the access to the source code and  rights to copy,
#  modify and redistribute granted by the license, users are provided only
#  with a limited warranty  and the software's author,  the holder of the
#  economic rights,  and the successive licensors  have only  limited
#  liability. 
#
#  The fact that you are presently reading this means that you have had
#  knowledge of the CeCILL-B license and that you accept its terms.
# ------------------------------------------------------------------------

SET(LIBRARY_NAME creaImageIO)

#-----------------------------------------
#SOURCES
FILE(GLOB SOURCES_CREAIMAGEIO  
  # SQLite 
  CppSQLite3.cpp
  # 
  creaImageIOGimmick.cpp
  creaImageIOSynchron.cpp
  creaImageIOPACSConnection.cpp

  # Abstract views
  creaImageIOTreeView.cpp

  # settings
  creaImageIOSettings.cpp
  creaImageIOGimmickView.cpp
  )
#--------------------------------------------

IF(USE_WXWIDGETS)
	 FILE(GLOB SOURCES_CREAIMAGEIO_DIALOG  
	   creaImageIOGimmickReaderDialog.cpp
	   )
   	SOURCE_GROUP("Source Files\\Reader Dialog" FILES ${SOURCES_CREAIMAGEIO_DIALOG})
ENDIF(USE_WXWIDGETS)

#--------------------------------------------
 # Attributed tree data structure
FILE(GLOB SOURCES_CREAIMAGEIO_TREE
	  creaImageIOTree.cpp
	  creaImageIOTreeAttributeDescriptor.cpp
	  creaImageIOTreeDescriptor.cpp
	  creaImageIOTreeNode.cpp
	  creaImageIOTreeLevelDescriptor.cpp
	    # Tree Handlers
	  creaImageIOTreeHandler.cpp
	  creaImageIOTreeHandlerImageAdder.cpp
	  creaImageIOSQLiteTreeHandler.cpp
	  creaImageIOOutputModel.cpp
          )

#--------------------------------------------
 # Image Readers
IF(USE_GDCM)
	 FILE(GLOB SOURCES_CREAIMAGEIO_IMG_DICOM_READER
			creaImageIODicomImageReader.cpp
		        )
ENDIF(USE_GDCM)
	  
IF(USE_GDCM2)
	 FILE(GLOB SOURCES_CREAIMAGEIO_IMG_DICOM_READER
			creaImageIODicomImageReader2.cpp
			creaImageIODicomScanner.cpp
		        )
ENDIF(USE_GDCM2)

IF (USE_WXWIDGETS)
	FILE(GLOB SOURCES_CREAIMAGEIO_MULTI_IMG_READER   creaImageIOMultiThreadImageReader.cpp)
#ELSEIF(USE_QT4)
	#FILE(GLOB SOURCES_CREAIMAGEIO_MULTI_IMG_READER   creaImageIOQMultiThreadImageReader.cpp)
ENDIF()

FILE(GLOB SOURCES_CREAIMAGEIO_IMG_READER
	  creaImageIOSimpleView.cpp
	  creaImageIOUnMosaicVtkImageData.cpp
	  creaImageIOAbstractImageReader.cpp
	  creaImageIOImageReader.cpp
	  creaImageIOUltrasonixImageReader.cpp
	  creaImageIOVtkImageReader.cpp
	  ${SOURCES_CREAIMAGEIO_IMG_DICOM_READER}
	  ${SOURCES_CREAIMAGEIO_MULTI_IMG_READER}
 	  )
IF(USE_ITK)
FILE(GLOB SOURCES_CREAIMAGEIO_ITK_DLG
	creaImageIOWxIsimpleDlg.h
	creaImageIOWxIsimpleDlg.hpp
	creaImageIOWxAnySimpleDlg.h
	creaImageIOWxAnySimpleDlg.cpp
	)
ENDIF(USE_ITK)
	  
#--------------------------------------------
# The wxWidgets-based components
if (USE_WXWIDGETS)
	FILE(GLOB SOURCES_CREAIMAGEIO_WX
		  creaImageIOWxSimpleDlg.cpp
		  creaImageIOWxAttributeSelectionPanel.cpp
		  creaImageIOWxCustomizeConfigPanel.cpp
		  creaImageIOWxDescriptorPanel.cpp
		  creaImageIOWxEditFieldsPanel.cpp
		  creaImageIOWxExportDlg.cpp
		  creaImageIOWxDumpPanel.cpp
		  creaImageIOWxGimmickView.cpp
		  creaImageIOWxGimmickReaderDialog.cpp
		  creaImageIOWxGimmickFrame.cpp
		  creaImageIOWxGimmickPanel.cpp
		  creaImageIOWxGimmickTools.cpp
		  creaImageIOWxListenerPanel.cpp
		  creaImageIOWxPACSConnectionPanel.cpp
		  creaImageIOWxTreeView.cpp
		  creaImageIOWxOutputDlg.cpp
		  #  Viewer
		  creaImageIOWxViewer.cpp
		  creaImageIOExternalGimmick.cpp
		  BlockScopeWxApp.cpp
		  creaImageIOListener.cpp
		  )
	SOURCE_GROUP("Source Files\\GUI" FILES ${SOURCES_CREAIMAGEIO_WX})
	
	IF(USE_ITK)
FILE(GLOB SOURCES_CREAIMAGEIO_ITK_DLG
	creaImageIOWxIsimpleDlg.h
	creaImageIOWxIsimpleDlg.hpp
	creaImageIOWxAnySimpleDlg.h
	creaImageIOWxAnySimpleDlg.cpp
	)
ENDIF(USE_ITK)
	  
endif(USE_WXWIDGETS)




#--------------------------------------------
# USE QT, need to transform files (moc mechanism)

IF (USE_QT4)

#ADD_SUBDIRECTORY(Qt)
	# UI
	FILE(GLOB UI_FILES Qt/*.ui)
	QT4_WRAP_UI(UI_SOURCES ${UI_FILES})
	SOURCE_GROUP("Source Files\\UI Files" FILES ${UI_FILES})
	SOURCE_GROUP("Source Files\\Qt Generated Files" FILES ${UI_SOURCES})

	#cpp
	FILE(GLOB QT_CPP Qt/*.cpp
		#creaImageIOQtGimmickReaderDialog.cpp 
		)
	
	# headers
	FILE(GLOB QT4_HEADERS_TO_WRAP Qt/*.h
		#creaImageIOQtGimmickReaderDialog.h
		)
	# UI
	#	FILE(GLOB UI_FILES *.ui)
	#   QT4_WRAP_UI(UI_SOURCES ${UI_FILES})
	# SOURCE_GROUP("UI Files" FILES ${UI_FILES})
	# SOURCE_GROUP("Qt Generated Files" FILES ${UI_SOURCES})
#	FILE(GLOB UI_FILES creaImageIOQtGimmickReaderDialog.ui)
#	QT4_WRAP_UI(UI_SOURCES_H ${UI_FILES} OPTIONS -o ${PROJECT_BINARY_DIR}/src)
	 QT4_WRAP_CPP(QT_MOC_CPP ${QT4_HEADERS_TO_WRAP})
  
   # FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx" "${PROJECT_BINARY_DIR}/src/*.h")
	# MEssage(STATUS" qt files = ${QT_MOC_CPP}")
	 SOURCE_GROUP("Source Files\\GUI" FILES ${QT_MOC_CPP} ${QT_CPP} )
	# INCLUDE_DIRECTORIES ( ${PROJECT_BINARY_DIR})
	SOURCE_GROUP("Source Files\\GUI" FILES ${UI_SOURCES_H} ${UI_FILES})
	SOURCE_GROUP("Header Files" FILES ${QT4_HEADERS_TO_WRAP})
ENDIF(USE_QT4)

IF(USE_XERCES)
	FILE(GLOB SOURCES_CREAIMAGEIO_OUTPUT
		  creaImageIOOutputModel.cpp
		  creaImageIOOutputModelParser.cpp
		  )
	SOURCE_GROUP("Source Files\\Output" FILES ${SOURCES_CREAIMAGEIO_OUTPUT})	 
ENDIF(USE_XERCES)




# Header Files	  
FILE(GLOB HEADER_CREAIMAGEIO creaImageIOImagePointerHolder.h  CppSQLite3.h)
#*.h)
FILE(GLOB SOURCES_CREAIMAGEIO_PACS PACS/*.cpp)
FILE(GLOB HEADER_CREAIMAGEIO_PACS PACS/*.h)

FILE(GLOB QT4_HEADERS		creaImageIOQtGimmickReaderDialog.h		)
MEssage(STATUS" qt files = ${QT4_HEADERS}")
SOURCE_GROUP("Source Files" FILES ${SOURCES_CREAIMAGEIO})
SOURCE_GROUP("Header Files" FILES ${HEADER_CREAIMAGEIO} ${QT4_HEADERS})
if(BUILD_CREA_PACS)
	SOURCE_GROUP("Source Files\\PACS" FILES ${SOURCES_CREAIMAGEIO_PACS})
	SOURCE_GROUP("Header Files\\PACS" FILES ${HEADER_CREAIMAGEIO_PACS})
endif(BUILD_CREA_PACS)
SOURCE_GROUP("Source Files\\Readers" FILES ${SOURCES_CREAIMAGEIO_IMG_READER}
											${SOURCES_CREAIMAGEIO_IMG_DICOM_READER})
SOURCE_GROUP("Source Files\\Tree" FILES ${SOURCES_CREAIMAGEIO_TREE})

SOURCE_GROUP("Source Files\\ITK" FILES ${SOURCES_CREAIMAGEIO_ITK_DLG})


IF(USE_WXWIDGETS)
SET( GUI_SRCS
	 ${SOURCES_CREAIMAGEIO_WX}
	 ${SOURCES_CREAIMAGEIO_DIALOG}
	 )
ELSE(USE_WXWIDGETS)
SET( GUI_SRCS
	 ${QT_CPP}
	 ${UI_SOURCES}
	 ${QT_MOC_CPP}
	 )
ENDIF(USE_WXWIDGETS)
SET( PRIMITIVE_SRCS
 ${SOURCES_CREAIMAGEIO}
 ${HEADER_CREAIMAGEIO}
 ${SOURCES_CREAIMAGEIO_IMG_READER}
 ${SOURCES_CREAIMAGEIO_IMG_DICOM_READER}
 ${GUI_SRCS}
 ${SOURCES_CREAIMAGEIO_TREE}
 ${SOURCES_CREAIMAGEIO_ITK_DLG}
)


#if ( ${CMAKE_EXE_LINKER_FLAGS} MATCHES "message:x64")message("charlie ${CMAKE_SYSTEM_PROCESSOR}")endif()

if( BUILD_CREA_PACS)
	SET (SRCS
		${PRIMITIVE_SRCS}
		${SOURCES_CREAIMAGEIO_PACS}
		${HEADER_CREAIMAGEIO_PACS}
		)
else (BUILD_CREA_PACS)
IF(USE_XERCES)
	SET (SRCS
		${PRIMITIVE_SRCS}
		${SOURCES_CREAIMAGEIO_OUTPUT}
		)
ELSE(USE_XERCES)
	SET (SRCS
		${PRIMITIVE_SRCS}
		)
ENDIF(USE_XERCES)
endif (BUILD_CREA_PACS)

OPTION(${LIBRARY_NAME}_BUILD_SHARED 
  "Build ${LIBRARY_NAME} as a shared library (dynamic) ?" ON)
IF (${LIBRARY_NAME}_BUILD_SHARED)
  SET(CREAIMAGEIO_BUILD_SHARED SHARED)
  crea_DEFINE(CREAIMAGEIO_BUILD_SHARED)
ENDIF(${LIBRARY_NAME}_BUILD_SHARED)

crea_DEFINE(CREAIMAGEIO_EXPORT_SYMBOLS)

ADD_LIBRARY(${LIBRARY_NAME} ${CREAIMAGEIO_BUILD_SHARED} ${SRCS})

IF(USE_QT4)
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} 
      ${QT_LIBRARIES})
ENDIF(USE_QT4)

IF(USE_WXWIDGETS)
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} 
      ${WXWIDGETS_LIBRARIES})
ENDIF(USE_WXWIDGETS)


IF (NOT USE_XERCES)
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} 
  ${crea_LIBRARIES}
  ${creaBruker_LIBRARIES}
  ${WXWIDGETS_LIBRARIES}
  ${VTK_LIBRARIES}
  ${GDCM_LIBRARIES}
  ${BOOST_LIBRARIES}
  ${ITK_LIBRARIES}
  sqlite3)
ELSE(NOT USE_XERCES)
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} 
  ${crea_LIBRARIES}
  ${creaBruker_LIBRARIES}
  ${WXWIDGETS_LIBRARIES}
  ${VTK_LIBRARIES}
  ${GDCM_LIBRARIES}
  ${BOOST_LIBRARIES}
  ${XERCES_LIBRARIES}
  sqlite3)  
ENDIF(NOT USE_XERCES)
  
 
#----------------------------------------------------------------------------
# INSTALLS LIBRARY
FILE(GLOB HEADERS "*.h" "*.txx")
INSTALL(
  FILES ${HEADERS}
  DESTINATION include/${LIBRARY_NAME}
  )
  

SET(CREAIMAGEIO_LIB_PATH ${CMAKE_CREA_LIB_PATH} )

INSTALL(
  TARGETS ${LIBRARY_NAME} 
  DESTINATION ${CREAIMAGEIO_LIB_PATH})

     # Sets the settings for macro CREA_ADVANCED_INSTALL_LIBRARY_FOR_CMAKE
  SET(${LIBRARY_NAME}_INSTALL_FOLDER ${LIBRARY_NAME})
  SET(${LIBRARY_NAME}_LIBRARIES ${LIBRARY_NAME} )
  
#  FILE(RELATIVE_PATH 
#    ${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS 
#    ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
#    )
SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS
    src
    win32
)


  IF ( ${PROJECT_BINARY_DIR} STREQUAL ${EXECUTABLE_OUTPUT_PATH} )
    SET(CILFC_EXECUTABLE_OUTPUT_REL_PATH ".")
  ELSE ( ${PROJECT_BINARY_DIR} STREQUAL ${EXECUTABLE_OUTPUT_PATH} )
    FILE(RELATIVE_PATH 
      CILFC_EXECUTABLE_OUTPUT_REL_PATH
      ${PROJECT_BINARY_DIR} ${EXECUTABLE_OUTPUT_PATH})
  ENDIF ( ${PROJECT_BINARY_DIR} STREQUAL ${EXECUTABLE_OUTPUT_PATH} )



  SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_LIBRARY_PATHS ${CMAKE_CREA_LIB_PATH} )

  IF(UNIX)
    SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS 
      ${CILFC_EXECUTABLE_OUTPUT_REL_PATH})
  ELSE(UNIX)
    SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS 
      ${CILFC_EXECUTABLE_OUTPUT_REL_PATH})
  ENDIF(UNIX)
  SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_INCLUDE_PATHS include/${LIBRARY_NAME})
  
  SET(${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE TRUE)
SET(${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE 
  ${PROJECT_SOURCE_DIR}/src/Additional${LIBRARY_NAME}Config.cmake.in)
SET(${LIBRARY_NAME}_ADDITIONAL_USE_FILE 
  ${PROJECT_SOURCE_DIR}/src/AdditionalUse${LIBRARY_NAME}.cmake.in)

  # Invoke the advanced macro
  CREA_ADVANCED_INSTALL_LIBRARY_FOR_CMAKE(${LIBRARY_NAME})
IF (WIN32)
	SET(INPUT_DATA_DIR ${PROJECT_SOURCE_DIR}/src/data)
	SET(OUTPUT_DATA_DIR ${PROJECT_BINARY_DIR}/bin/share/creaImageIO)
ELSE (WIN32)
	SET(INPUT_DATA_DIR ${PROJECT_SOURCE_DIR}/src/data)
	SET(OUTPUT_DATA_DIR ${PROJECT_BINARY_DIR}/share/creaImageIO)
ENDIF (WIN32)
CREA_CPDIR(${INPUT_DATA_DIR} ${OUTPUT_DATA_DIR})

  
#CREA_INSTALL_LIBRARY_FOR_CMAKE(${LIBRARY_NAME})
#-----------------------------------------------------------------------------

OPTION( BUILD_DOXYGEN_DOC "Build doxygen doc ?" OFF)
IF(BUILD_DOXYGEN_DOC)
  ADD_SUBDIRECTORY(doxygen)
ENDIF(BUILD_DOXYGEN_DOC)

INCLUDE_DIRECTORIES(
#  ${PROJECT_BINARY_DIR}
  ${PROJECT_SOURCE_DIR}/src
  )
