diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..70691b0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,103 @@ +cmake_minimum_required(VERSION 3.3) +set(ads_VERSION "2.3.2") +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +project(QtAdvancedDockingSystem VERSION ${ads_VERSION}) +option(BUILD_STATIC "Build the static library" OFF) +option(BUILD_EXAMPLES "Build the examples" ON) +set(REQUIRED_QT_VERSION 5.0.0) +find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED) +find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED) +find_package(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED) +message(STATUS "Found Qt ${Qt5Core_VERSION}") +set(ads_INCLUDE ${ads_INCLUDE} ${Qt5Core_INCLUDE_DIRS}) +set(ads_INCLUDE ${ads_INCLUDE} "${CMAKE_CURRENT_SOURCE_DIR}/src") +set(ads_LIBS ${ads_LIBS} ${Qt5Core_LIBRARIES}) +set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ${Qt5Core_COMPILE_DEFINITIONS}) +set(ads_LIBS ${ads_LIBS} ${Qt5Gui_LIBRARIES}) +set(ads_INCLUDE ${ads_INCLUDE} ${Qt5Gui_INCLUDE_DIRS}) +set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ${Qt5Gui_COMPILE_DEFINITIONS}) +set(ads_LIBS ${ads_LIBS} ${Qt5Widgets_LIBRARIES}) +set(ads_INCLUDE ${ads_INCLUDE} ${Qt5Widgets_INCLUDE_DIRS}) +set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS}) +if(BUILD_STATIC) + set(CMAKE_STATIC_LIBRARY_SUFFIX "_static${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() +set(ads_SRCS + src/ads_globals.cpp + src/DockAreaTabBar.cpp + src/DockAreaTitleBar.cpp + src/DockAreaWidget.cpp + src/DockContainerWidget.cpp + src/DockManager.cpp + src/DockOverlay.cpp + src/DockSplitter.cpp + src/DockWidget.cpp + src/DockWidgetTab.cpp + src/ElidingLabel.cpp + src/FloatingDockContainer.cpp + src/ads.qrc +) +set(ads_INSTALL_INCLUDE + src/ads_globals.h + src/DockAreaTabBar.h + src/DockAreaTitleBar.h + src/DockAreaWidget.h + src/DockContainerWidget.h + src/DockManager.h + src/DockOverlay.h + src/DockSplitter.h + src/DockWidget.h + src/DockWidgetTab.h + src/ElidingLabel.h + src/FloatingDockContainer.h +) +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") + set(ads_PlatformDir "x64") +else() + set(ads_PlatformDir "x86") +endif() +if(BUILD_STATIC) + add_library(ads STATIC ${ads_SRCS}) + set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ADS_STATIC) +else() + add_library(ads SHARED ${ads_SRCS}) + set(ads_COMPILE_DEFINE ${ads_COMPILE_DEFINE} ADS_SHARED_EXPORT) +endif() +install(FILES ${ads_INSTALL_INCLUDE} + DESTINATION include + COMPONENT headers +) +install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" + "${CMAKE_CURRENT_SOURCE_DIR}/gnu-lgpl-v2.1.md" + DESTINATION license + COMPONENT license +) +install(TARGETS ads + EXPORT adsBinary + RUNTIME DESTINATION bin COMPONENT library + LIBRARY DESTINATION lib COMPONENT library + ARCHIVE DESTINATION lib COMPONENT library +) +target_include_directories(ads PUBLIC + $ + $ + ) +target_link_libraries(ads PUBLIC ${ads_LIBS}) +target_compile_definitions(ads PRIVATE ${ads_COMPILE_DEFINE}) +set_target_properties(ads PROPERTIES + VERSION ${ads_VERSION} + EXPORT_NAME "Qt Advanced Docking System" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" +) +if(BUILD_EXAMPLES) + add_subdirectory(example) + add_subdirectory(demo) +endif() + diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt new file mode 100644 index 0000000..b2ee246 --- /dev/null +++ b/demo/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 3.3) +set (CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) +project(ads_demo VERSION "1.0") +set(REQUIRED_QT_VERSION 5.0.0) +find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED) +find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED) +find_package(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED) +set(ads_demo_LIBS ${ads_demo_LIBS} ${Qt5Core_LIBRARIES}) +set(ads_demo_INCLUDE ${ads_demo_INCLUDE} ${Qt5Core_INCLUDE_DIRS}) +set(ads_demo_COMPILE_DEFINE ${ads_demo_COMPILE_DEFINE} ${Qt5Core_COMPILE_DEFINITIONS} ) +set(ads_demo_LIBS ${ads_demo_LIBS} ${Qt5Gui_LIBRARIES}) +set(ads_demo_INCLUDE ${ads_demo_INCLUDE} ${Qt5Gui_INCLUDE_DIRS}) +set(ads_demo_COMPILE_DEFINE ${ads_demo_COMPILE_DEFINE} ${Qt5Gui_COMPILE_DEFINITIONS}) +set(ads_demo_LIBS ${ads_demo_LIBS} ${Qt5Widgets_LIBRARIES}) +set(ads_demo_INCLUDE ${ads_demo_INCLUDE} ${Qt5Widgets_INCLUDE_DIRS}) +set(ads_demo_COMPILE_DEFINE ${ads_demo_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS}) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(ads_demo_SRCS + main.cpp + MainWindow.cpp + MainWindow.ui + main.qrc +) +add_executable(ads_demo WIN32 ${ads_demo_SRCS}) +if(BUILD_STATIC) + set(ads_demo_DEFINE ${ads_demo_DEFINE} ADS_STATIC) +endif() +add_dependencies(ads_demo ads) +target_include_directories(ads_demo PUBLIC + $ + $ + ) +target_include_directories(ads_demo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ${ads_demo_INCLUDE}) +target_link_libraries(ads_demo PRIVATE ads ${ads_demo_LIBS}) +target_compile_definitions(ads_demo PRIVATE ${ads_demo_DEFINE}) +set_target_properties(ads_demo PROPERTIES + VERSION "1.0" + SOVERSION 1 + EXPORT_NAME "Qt Advanced Docking System Demo" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/demo" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/demo" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin/demo" +) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 0000000..8d99310 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.3) +set (CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +project(ads_example VERSION "1.0") +set(REQUIRED_QT_VERSION 5.0.0) +find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED) +find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED) +find_package(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED) +set(ads_example_LIBS ${ads_example_LIBS} ${Qt5Core_LIBRARIES}) +set(ads_example_INCLUDE ${ads_example_INCLUDE} ${Qt5Core_INCLUDE_DIRS}) +set(ads_example_COMPILE_DEFINE ${ads_example_COMPILE_DEFINE} ${Qt5Core_COMPILE_DEFINITIONS} ) +set(ads_example_LIBS ${ads_example_LIBS} ${Qt5Gui_LIBRARIES}) +set(ads_example_INCLUDE ${ads_example_INCLUDE} ${Qt5Gui_INCLUDE_DIRS}) +set(ads_example_COMPILE_DEFINE ${ads_example_COMPILE_DEFINE} ${Qt5Gui_COMPILE_DEFINITIONS}) +set(ads_example_LIBS ${ads_example_LIBS} ${Qt5Widgets_LIBRARIES}) +set(ads_example_INCLUDE ${ads_example_INCLUDE} ${Qt5Widgets_INCLUDE_DIRS}) +set(ads_example_COMPILE_DEFINE ${ads_example_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS}) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(ads_example_SRCS + main.cpp + MainWindow.cpp + MainWindow.ui +) +add_executable(ads_example WIN32 ${ads_example_SRCS}) +if(BUILD_STATIC) + set(ads_example_DEFINE ${ads_example_DEFINE} ADS_STATIC) +endif() +add_dependencies(ads_example ads) +target_include_directories(ads_example PUBLIC + $ + $ + ) +target_include_directories(ads_example PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src" ${ads_example_INCLUDE}) +target_link_libraries(ads_example PRIVATE ads ${ads_example_LIBS}) +target_compile_definitions(ads_example PRIVATE ${ads_example_DEFINE}) +set_target_properties(ads_example PROPERTIES + VERSION "1.0" + SOVERSION 1 + EXPORT_NAME "Qt Advanced Docking System Example" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/example" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib/example" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin/example" +) diff --git a/src/ads_globals.h b/src/ads_globals.h index 637661b..aa5c99f 100644 --- a/src/ads_globals.h +++ b/src/ads_globals.h @@ -35,11 +35,15 @@ #include #include +#ifndef ADS_STATIC #ifdef ADS_SHARED_EXPORT #define ADS_EXPORT Q_DECL_EXPORT #else #define ADS_EXPORT Q_DECL_IMPORT #endif +#else +#define ADS_EXPORT +#endif #define ADS_DEBUG_LEVEL 0