Skip to content

Commit

Permalink
#207 Prepare a dual q5/qt6 CMake configuration.
Browse files Browse the repository at this point in the history
Signed-off-by: cneben <[email protected]>
  • Loading branch information
cneben committed May 17, 2023
1 parent 85059e2 commit 4228658
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 35 deletions.
33 changes: 33 additions & 0 deletions CMakeLists.qt5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
cmake_minimum_required(VERSION 3.5.0)

project(QuickQanava VERSION 2.1.0 LANGUAGES CXX)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Quick REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Qml Quick QuickControls2 REQUIRED)
message("Building with Qt" ${QT_VERSION_MAJOR})

option(QUICK_QANAVA_BUILD_SAMPLES "Build the samples" TRUE)
option(QUICK_QANAVA_BUILD_STATIC_QRC "Build *.qrc resources statically" TRUE)
option(QUICK_QANAVA_WINDOWS_DEPLOY "Use windeployqt on Windows" FALSE)

add_subdirectory(QuickContainers)
add_subdirectory(src)

if (${QUICK_QANAVA_BUILD_SAMPLES})
#add_subdirectory(samples/resizer)
#add_subdirectory(samples/navigable)
add_subdirectory(samples/nodes)
add_subdirectory(samples/cpp)
add_subdirectory(samples/edges)
add_subdirectory(samples/connector)
add_subdirectory(samples/groups)
add_subdirectory(samples/selection)
add_subdirectory(samples/style)
add_subdirectory(samples/dataflow)
add_subdirectory(samples/topology)
endif()

add_subdirectory(exports)
9 changes: 9 additions & 0 deletions CMakeLists.qt6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5.0)

# Specific to Qt6
add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00)

find_package(Qt6 REQUIRED COMPONENTS Core Quick Qml Quick QuickControls2)

message("Building QuickQanava with Qt" ${QT_VERSION_MAJOR})

35 changes: 14 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,33 +1,26 @@
cmake_minimum_required(VERSION 3.5.0)

project(QuickQanava VERSION 2.1.0 LANGUAGES CXX)
project(QuickQanava VERSION 2.3.0 LANGUAGES CXX)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Qt6
add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Quick REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Qml Quick QuickControls2 REQUIRED)
message("Building with Qt" ${QT_VERSION_MAJOR})
option(QUICKQANAVA_QT_MAJOR_VERSION "Force Qt Versions to 5 or 6 (default to 6)" 6)
option(QUICKQANAVA_BUILD_SAMPLES "Build the samples" TRUE)
option(QUICKQANAVA_BUILD_STATIC_QRC "Build *.qrc resources statically" TRUE)
option(QUICKQANAVA_WINDOWS_DEPLOY "Use windeployqt on Windows" FALSE)

option(QUICK_QANAVA_BUILD_SAMPLES "Build the samples" TRUE)
option(QUICK_QANAVA_BUILD_STATIC_QRC "Build *.qrc resources statically" TRUE)
option(QUICK_QANAVA_WINDOWS_DEPLOY "Use windeployqt on Windows" FALSE)
if (${QUICKQANAVA_QT_MAJOR_VERSION} EQUAL 5)
include(CMakeLists.qt5.txt)
else()
include(CMakeLists.qt6.txt)
endif()

add_subdirectory(QuickContainers)
add_subdirectory(src)

if (${QUICK_QANAVA_BUILD_SAMPLES})
#add_subdirectory(samples/resizer)
#add_subdirectory(samples/navigable)
add_subdirectory(samples/nodes)
add_subdirectory(samples/cpp)
add_subdirectory(samples/edges)
add_subdirectory(samples/connector)
add_subdirectory(samples/groups)
add_subdirectory(samples/selection)
add_subdirectory(samples/style)
add_subdirectory(samples/dataflow)
add_subdirectory(samples/topology)
endif()

add_subdirectory(exports)
7 changes: 6 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,12 @@ install(TARGETS QuickQanava
)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
target_link_libraries(QuickQanava PUBLIC QuickContainers Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::QuickControls2)
target_link_libraries(QuickQanava PUBLIC QuickContainers
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Qml
Qt${QT_VERSION_MAJOR}::Quick
Qt${QT_VERSION_MAJOR}::QuickControls2)
if(QUICK_QANAVA_BUILD_STATIC_QRC)
target_compile_definitions(QuickQanava PUBLIC -DQUICKQANAVA_STATIC)
endif(QUICK_QANAVA_BUILD_STATIC_QRC)
Expand Down
2 changes: 1 addition & 1 deletion src/QuickQanava.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
#pragma once

// QuickContainers headers
#include <QuickContainers>
#include "../QuickContainers/include/QuickContainers.h"

// Qt header
#include <QQmlEngine>
Expand Down
25 changes: 13 additions & 12 deletions src/gtpo/container_adapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,13 @@ struct container_adapter< std::vector<T> > {
{ // https://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom
c.erase( std::remove(c.begin(), c.end(), t), c.end());
}
inline static std::size_t size( std::vector<T>& c ) { return c.size(); }
inline static std::size_t size(std::vector<T>& c) { return c.size(); }
inline static bool contains( const std::vector<T>& c, const T& t ) { return std::find(std::begin(c), std::end(c), t) != std::end(c); }
inline static void reserve( std::vector<T>& c, std::size_t s) { c.reserve(s); }
};


// FIXME 20230515 no support for shared_ptr
/*
template < typename T >
struct container_adapter< std::list<std::shared_ptr<T>> > {
inline static void insert( std::shared_ptr<T> t, std::list<std::shared_ptr<T>>& c ) { c.emplace_back( t ); }
Expand All @@ -75,7 +76,7 @@ struct container_adapter< std::list<std::shared_ptr<T>> > {
{ // https://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom
c.erase( std::remove(c.begin(), c.end(), t), c.end());
}
};
};*/

template < typename T >
struct container_adapter< std::unordered_set<T> > {
Expand Down Expand Up @@ -104,15 +105,15 @@ struct container_adapter< QSet<T> > {
inline static void reserve( QSet<T>& c, std::size_t s) { c.reserve(s); }
};

template < template<typename...CArgs> class C, typename T >
struct container_adapter< qcm::Container<C, T> > {
inline static void insert( T t, qcm::Container<C, T>& c ) { c.append( t ); }
inline static void insert( T t, qcm::Container<C, T>& c, int i ) { Q_UNUSED(i); c.insert( t ); }
inline static void remove( const T& t, qcm::Container<C, T>& c ) { c.removeAll(t); }
inline static std::size_t size( qcm::Container<C, T>& c ) { return c.size(); }
inline static bool contains( const qcm::Container<C, T>& c, const T& t ) { return c.contains(t); }
inline static void reserve( qcm::Container<C , T>& c, std::size_t s) { c.reserve(s); }
// FIXME unsure....
template <template<typename...CArgs> class C, typename T >
struct container_adapter<qcm::Container<C, T>> {
inline static void insert(T t, qcm::Container<C, T>& c) { c.append( t ); }
inline static void insert(T t, qcm::Container<C, T>& c, int i) { Q_UNUSED(i); c.insert( t ); }
inline static void remove(const T& t, qcm::Container<C, T>& c) { c.removeAll(t); }
inline static std::size_t size(qcm::Container<C, T>& c) { return c.size(); }
inline static bool contains(const qcm::Container<C, T>& c, const T& t) { return c.contains(t); }
inline static void reserve(qcm::Container<C , T>& c, std::size_t s) { c.reserve(s); }
};


} // ::gtpo

0 comments on commit 4228658

Please sign in to comment.