cmake_minimum_required(VERSION 3.5)

project(DiagramDesigner LANGUAGES CXX VERSION 1.0)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

#set(ADS_VERSION 4.3.1)
#add_subdirectory(QtADS)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widgets REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS SvgWidgets)


set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 默认 ui 文件要和 .h 头文件在一个目录，若不在一个目录，需要指定其所在目录
set(CMAKE_AUTOUIC_SEARCH_PATHS "ui")

if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
    set(dd_PlatformDir "x86")
else()
    if(DEFINED CMAKE_SYSTEM_PROCESSOR)
        if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
            set(dd_PlatformDir "x64")
        elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
            set(dd_PlatformDir "aarch64")
        else()
            set(dd_PlatformDir "x64")
        endif()
    else()
        set(dd_PlatformDir "x64")
    endif()
endif()

set(H_HEADER_FILES
    include/global.h
    include/mainwindow.h
    include/graphicElementsPanel.h
    include/electricElementsPanel.h
    include/electricElementsBox.h
    include/electricElementsListwidget.h
    include/drawingPanel.h
    include/diagramCavas.h
    include/designerScene.h
    include/designerView.h
    include/operationCommand.h
    include/toolPage.h
    include/toolBox.h

    include/util/baseSelector.h
    include/util/creatingSelector.h
    include/util/movingSelector.h
    include/util/rotationSelector.h
    include/util/scalingSelector.h
    include/util/editingSelector.h
    include/util/connectingSelector.h
    include/util/selectorManager.h

    include/graphicsItem/itemControlHandle.h
    include/graphicsItem/graphicsBaseItem.h
    include/graphicsItem/graphicsRectItem.h
    include/graphicsItem/graphicsPolygonItem.h
    include/graphicsItem/graphicsItemGroup.h
    include/graphicsItem/electricSvgItem.h
    include/graphicsItem/electricSvgItemBus.h
    include/graphicsItem/electricSvgItemRect.h
    include/graphicsItem/electricSvgItemTriangle.h
    include/abstractGraphModel.h
    include/connectionIdUtils.h
    include/serializable.h
    include/dataFlowGraphModel.h
    include/nodeData.h
    include/nodeDelegateModel.h
    include/nodeDelegateModelRegistry.h
    include/style.h
    include/nodeStyle.h
    include/connectionStyle.h
    include/graphicsViewStyle.h
    include/styleCollection.h
    include/abstractNodeGeometry.h
    include/basicGraphicsScene.h
    include/connectionState.h
    include/connectionGraphicsObject.h
    include/nodeGraphicsObject.h
    include/nodeState.h
    include/connectionPainter.h
    include/nodeConnectionInteraction.h
    include/undoCommands.h
    include/locateNode.h
    include/defaultNodePainter.h
    include/abstractNodePainter.h
    include/defaultHorizontalNodeGeometry.h
    include/defaultVerticalNodeGeometry.h
)
set(CPP_SOURCE_FILES
    source/main.cpp
    source/mainwindow.cpp
    source/graphicElementsPanel.cpp
    source/electricElementsPanel.cpp
    source/electricElementsBox.cpp
    source/electricElementsListwidget.cpp
    source/drawingPanel.cpp
    source/diagramCavas.cpp
    source/designerScene.cpp
    source/designerView.cpp
    source/operationCommand.cpp
    source/toolPage.cpp
    source/toolBox.cpp

    source/util/baseSelector.cpp
    source/util/creatingSelector.cpp
    source/util/movingSelector.cpp
    source/util/rotationSelector.cpp
    source/util/scalingSelector.cpp
    source/util/editingSelector.cpp
    source/util/connectingSelector.cpp
    source/util/selectorManager.cpp

    source/graphicsItem/itemControlHandle.cpp
    source/graphicsItem/graphicsBaseItem.cpp
    source/graphicsItem/graphicsRectItem.cpp
    source/graphicsItem/graphicsPolygonItem.cpp
    source/graphicsItem/graphicsItemGroup.cpp
    source/graphicsItem/electricSvgItem.cpp
    source/graphicsItem/electricSvgItemBus.cpp
    source/graphicsItem/electricSvgItemRect.cpp
    source/graphicsItem/electricSvgItemTriangle.cpp
    source/abstractGraphModel.cpp
    source/dataFlowGraphModel.cpp
    source/nodeDelegateModel.cpp
    source/nodeDelegateModelRegistry.cpp
    source/nodeStyle.cpp
    source/styleCollection.cpp
    source/connectionStyle.cpp
    source/graphicsViewStyle.cpp
    source/abstractNodeGeometry.cpp
    source/basicGraphicsScene.cpp
    source/connectionState.cpp
    source/nodeState.cpp
    source/connectionPainter.cpp
    source/nodeConnectionInteraction.cpp
    source/undoCommands.cpp
    source/locateNode.cpp
    source/connectionGraphicsObject.cpp
    source/defaultVerticalNodeGeometry.cpp
    source/defaultHorizontalNodeGeometry.cpp
    source/nodeGraphicsObject.cpp
)
set(UI_FILES
    ui/mainwindow.ui
    ui/graphicElementsPanel.ui
    ui/drawingPanel.ui
)

# 包含源文件目录
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(DiagramDesigner
        MANUAL_FINALIZATION
        ${H_HEADER_FILES}
        ${CPP_SOURCE_FILES}
        ${UI_FILES}
        resource/DiagramDesigner.qrc
    )
else()
    if(ANDROID)
        add_library(DiagramDesigner SHARED
            ${H_HEADER_FILES}
            ${CPP_SOURCE_FILES}
            ${UI_FILES}
            resource/DiagramDesigner.qrc
        )
    else()
        add_executable(DiagramDesigner WIN32
            ${H_HEADER_FILES}
            ${CPP_SOURCE_FILES}
            ${UI_FILES}
            resource/DiagramDesigner.qrc
        )
    endif()
endif()

include_directories(include)

target_include_directories(DiagramDesigner PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include")
#target_link_libraries(DiagramDesigner PRIVATE qt${QT_VERSION_MAJOR}advanceddocking)
target_link_libraries(DiagramDesigner PUBLIC Qt${QT_VERSION_MAJOR}::Core 
                                                  Qt${QT_VERSION_MAJOR}::Gui 
                                                  Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(DiagramDesigner PRIVATE Qt6::SvgWidgets)
set_target_properties(DiagramDesigner PROPERTIES 
    AUTOMOC ON
    AUTORCC ON
    AUTOUIC ON
    CXX_STANDARD 14
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS OFF
    VERSION 1.0
    EXPORT_NAME "DiagramDesigner with Qt Advanced Docking System"
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${dd_PlatformDir}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${dd_PlatformDir}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${dd_PlatformDir}/bin"
)

