diff --git a/.cmake-format.py b/.cmake-format.py new file mode 100644 index 00000000..06de7f8f --- /dev/null +++ b/.cmake-format.py @@ -0,0 +1,240 @@ +# ---------------------------------- +# Options affecting listfile parsing +# ---------------------------------- +with section("parse"): + + # Specify structure for custom cmake functions + additional_commands = {'foo': {'flags': ['BAR', 'BAZ'], + 'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}} + + # Override configurations per-command where available + override_spec = {} + + # Specify variable tags. + vartags = [] + + # Specify property tags. + proptags = [] + +# ----------------------------- +# Options affecting formatting. +# ----------------------------- +with section("format"): + + # Disable formatting entirely, making cmake-format a no-op + disable = False + + # How wide to allow formatted cmake files + line_width = 120 + + # How many spaces to tab for indent + tab_size = 4 + + # If true, lines are indented using tab characters (utf-8 0x09) instead of + # space characters (utf-8 0x20). In cases where the layout would + # require a fractional tab character, the behavior of the fractional + # indentation is governed by + use_tabchars = False + + # If is True, then the value of this variable indicates how + # fractional indentions are handled during whitespace replacement. If set to + # 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set + # to `round-up` fractional indentation is replaced with a single tab character + # (utf-8 0x09) effectively shifting the column to the next tabstop + fractional_tab_policy = 'use-space' + + # If an argument group contains more than this many sub-groups (parg or kwarg + # groups) then force it to a vertical layout. + max_subgroups_hwrap = 2 + + # If a positional argument group contains more than this many arguments, then + # force it to a vertical layout. + max_pargs_hwrap = 6 + + # If a cmdline positional group consumes more than this many lines without + # nesting, then invalidate the layout (and nest) + max_rows_cmdline = 2 + + # If true, separate flow control names from their parentheses with a space + separate_ctrl_name_with_space = False + + # If true, separate function names from parentheses with a space + separate_fn_name_with_space = False + + # If a statement is wrapped to more than one line, than dangle the closing + # parenthesis on its own line. + dangle_parens = True + + # If the trailing parenthesis must be 'dangled' on its on line, then align it + # to this reference: `prefix`: the start of the statement, `prefix-indent`: + # the start of the statement, plus one indentation level, `child`: align to + # the column of the arguments + dangle_align = 'prefix' + + # If the statement spelling length (including space and parenthesis) is + # smaller than this amount, then force reject nested layouts. + min_prefix_chars = 4 + + # If the statement spelling length (including space and parenthesis) is larger + # than the tab width by more than this amount, then force reject un-nested + # layouts. + max_prefix_chars = 10 + + # If a candidate layout is wrapped horizontally but it exceeds this many + # lines, then reject the layout. + max_lines_hwrap = 2 + + # What style line endings to use in the output. + line_ending = 'unix' + + # Format command names consistently as 'lower' or 'upper' case + command_case = 'lower' + + # Format keywords consistently as 'lower' or 'upper' case + keyword_case = 'upper' + + # A list of command names which should always be wrapped + always_wrap = [] + + # If true, the argument lists which are known to be sortable will be sorted + # lexicographicall + enable_sort = True + + # If true, the parsers may infer whether or not an argument list is sortable + # (without annotation). + autosort = False + + # By default, if cmake-format cannot successfully fit everything into the + # desired linewidth it will apply the last, most agressive attempt that it + # made. If this flag is True, however, cmake-format will print error, exit + # with non-zero status code, and write-out nothing + require_valid_layout = False + + # A dictionary mapping layout nodes to a list of wrap decisions. See the + # documentation for more information. + layout_passes = {} + +# ------------------------------------------------ +# Options affecting comment reflow and formatting. +# ------------------------------------------------ +with section("markup"): + + # What character to use for bulleted lists + bullet_char = '*' + + # What character to use as punctuation after numerals in an enumerated list + enum_char = '.' + + # If comment markup is enabled, don't reflow the first comment block in each + # listfile. Use this to preserve formatting of your copyright/license + # statements. + first_comment_is_literal = False + + # If comment markup is enabled, don't reflow any comment block which matches + # this (regex) pattern. Default is `None` (disabled). + literal_comment_pattern = None + + # Regular expression to match preformat fences in comments default= + # ``r'^\s*([`~]{3}[`~]*)(.*)$'`` + fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$' + + # Regular expression to match rulers in comments default= + # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'`` + ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$' + + # If a comment line matches starts with this pattern then it is explicitly a + # trailing comment for the preceeding argument. Default is '#<' + explicit_trailing_pattern = '#<' + + # If a comment line starts with at least this many consecutive hash + # characters, then don't lstrip() them off. This allows for lazy hash rulers + # where the first hash char is not separated by space + hashruler_min_length = 10 + + # If true, then insert a space between the first hash char and remaining hash + # chars in a hash ruler, and normalize its length to fill the column + canonicalize_hashrulers = True + + # enable comment markup parsing and reflow + enable_markup = False + +# ---------------------------- +# Options affecting the linter +# ---------------------------- +with section("lint"): + + # a list of lint codes to disable + disabled_codes = [] + + # regular expression pattern describing valid function names + function_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid macro names + macro_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid names for variables with global + # (cache) scope + global_var_pattern = '[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with global + # scope (but internal semantic) + internal_var_pattern = '[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with local + # scope + local_var_pattern = '[_A-Za-z][A-Za-z0-9_]+' + + # regular expression pattern describing valid names for privatedirectory + # variables + private_var_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid names for public directory + # variables + public_var_pattern = '.*' + + # regular expression pattern describing valid names for function/macro + # arguments and loop variables. + argument_var_pattern = '[a-z_][a-z0-9_]+' + + # regular expression pattern describing valid names for keywords used in + # functions or macros + keyword_pattern = '[A-Z][0-9A-Z_]+' + + # In the heuristic for C0201, how many conditionals to match within a loop in + # before considering the loop a parser. + max_conditionals_custom_parser = 2 + + # Require at least this many newlines between statements + min_statement_spacing = 1 + + # Require no more than this many newlines between statements + max_statement_spacing = 2 + max_returns = 6 + max_branches = 15 + max_arguments = 10 + max_localvars = 15 + max_statements = 50 + +# ------------------------------- +# Options affecting file encoding +# ------------------------------- +with section("encode"): + + # If true, emit the unicode byte-order mark (BOM) at the start of the file + emit_byteorder_mark = False + + # Specify the encoding of the input file. Defaults to utf-8 + input_encoding = 'utf-8' + + # Specify the encoding of the output file. Defaults to utf-8. Note that cmake + # only claims to support utf-8 so be careful when using anything else + output_encoding = 'utf-8' + +# ------------------------------------- +# Miscellaneous configurations options. +# ------------------------------------- +with section("misc"): + + # A dictionary containing any per-command configuration overrides. Currently + # only `command_case` is supported. + per_command = {} diff --git a/.gitignore b/.gitignore index 517e72c5..33b95d62 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ mylayout.json *.cbp *.pyc /python/examples/rc_assets.py +/python/examples-qt6/rc_assets.py *.pri /docks-w kddockwidgets_minimal_example diff --git a/.krazy b/.krazy index dadf3420..3e9b8844 100644 --- a/.krazy +++ b/.krazy @@ -8,7 +8,7 @@ EXTRA kdabcopyright-reuse,kdabcontactus,fosslicense-reuse #exclude checks now being done by clazy or clang-tools EXCLUDE strings,explicit,normalize,passbyvalue,operators,nullstrcompare,nullstrassign,doublequote_chars,qobject,sigsandslots,staticobjects,dpointer,inline,postfixop -exclude spelling as codespell is much, much better tool +#exclude spelling as codespell is much, much better tool EXCLUDE spelling #exclude more checks EXCLUDE style @@ -20,6 +20,6 @@ SKIP Doxyfile.cmake SKIP /KDDockWidgetsConfig.cmake.in #skip more files SKIP CMakePresets.json +SKIP \.cmake-format\.py #skip the borrowed code in the cmake subdir SKIP /cmake/InstallLocation.cmake|/cmake/ECM/|/cmake/KDAB/ - diff --git a/.pep8 b/.pep8 new file mode 100644 index 00000000..9d54e0f1 --- /dev/null +++ b/.pep8 @@ -0,0 +1,2 @@ +[pycodestyle] +max_line_length = 120 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fe622145..5e533a95 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,6 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks +exclude: ^(cmake/ECM|cmake/KDAB/) repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.2.0 @@ -14,12 +15,24 @@ repos: rev: v14.0.0 hooks: - id: clang-format +- repo: https://github.com/PyCQA/pylint + rev: v2.12.2 + hooks: + - id: pylint + exclude: ^(.cmake-format.py|conan/conanfile.py) + additional_dependencies: ["PySide2", "PySide6"] +- repo: https://github.com/pre-commit/mirrors-autopep8 + rev: v1.6.0 + hooks: + - id: autopep8 - repo: https://github.com/codespell-project/codespell rev: v2.1.0 hooks: - id: codespell - - repo: https://github.com/cheshirekow/cmake-format-precommit - rev: v0.6.10 + rev: v0.6.13 hooks: + - id: cmake-lint + exclude: (.py.cmake|Doxyfile.cmake) - id: cmake-format + exclude: (.py.cmake|Doxyfile.cmake) diff --git a/.pylintrc b/.pylintrc index 7314e6f9..fe3d90b7 100644 --- a/.pylintrc +++ b/.pylintrc @@ -139,6 +139,7 @@ disable=print-statement, deprecated-sys-function, exception-escape, comprehension-escape, + consider-using-f-string, R0801,I1101,E0401 # Enable the message, report, category or checker with the given id(s). You can @@ -268,7 +269,7 @@ inlinevar-naming-style=any #inlinevar-rgx= # Naming style matching correct method names. -method-naming-style=camelCase +method-naming-style=any # Regular expression matching correct method names. Overrides method-naming- # style. @@ -516,7 +517,7 @@ valid-metaclass-classmethod-first-arg=cls [DESIGN] # Maximum number of arguments for function / method. -max-args=5 +max-args=10 # Maximum number of attributes for a class (see R0902). max-attributes=7 diff --git a/CMakeLists.txt b/CMakeLists.txt index 54033e6b..e6dd3811 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -59,34 +59,34 @@ cmake_minimum_required(VERSION 3.7) # Allow using a non-KDAB install location. set(KDAB_INSTALL True - CACHE INTERNAL "Install to default KDAB Location") + CACHE INTERNAL "Install to default KDAB Location" +) if(DEFINED CMAKE_INSTALL_PREFIX) - if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "") - set(KDAB_INSTALL - False - CACHE INTERNAL "Install to non-KDAB Location") - endif() + if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "") + set(KDAB_INSTALL + False + CACHE INTERNAL "Install to non-KDAB Location" + ) + endif() endif() if(${CMAKE_VERSION} VERSION_LESS "3.12.0") - project(KDDockWidgets LANGUAGES CXX) + project(KDDockWidgets LANGUAGES CXX) else() - project( - KDDockWidgets - DESCRIPTION "An advanced docking system for Qt" - HOMEPAGE_URL "https://github.com/KDAB/KDDockWidgets" - LANGUAGES CXX) + project( + KDDockWidgets + DESCRIPTION "An advanced docking system for Qt" + HOMEPAGE_URL "https://github.com/KDAB/KDDockWidgets" + LANGUAGES CXX + ) endif() set(KDDockWidgets_VERSION_MAJOR 2) set(KDDockWidgets_VERSION_MINOR 0) set(KDDockWidgets_VERSION_PATCH 9) -set(KDDockWidgets_VERSION - ${KDDockWidgets_VERSION_MAJOR}.${KDDockWidgets_VERSION_MINOR}.${KDDockWidgets_VERSION_PATCH} -) -set(PROJECT_VERSION ${KDDockWidgets_VERSION}) # PROJECT_VERSION is needed by - # some ECM modules +set(KDDockWidgets_VERSION ${KDDockWidgets_VERSION_MAJOR}.${KDDockWidgets_VERSION_MINOR}.${KDDockWidgets_VERSION_PATCH}) +set(PROJECT_VERSION ${KDDockWidgets_VERSION}) # PROJECT_VERSION is needed by some ECM modules set(KDDockWidgets_SOVERSION "2.0") include(FeatureSummary) @@ -98,19 +98,14 @@ option(KDDockWidgets_STATIC "Build statically" OFF) option(KDDockWidgets_TESTS "Build the tests" OFF) option(KDDockWidgets_EXAMPLES "Build the examples" ON) option(KDDockWidgets_DOCS "Build the API documentation" OFF) -option(KDDockWidgets_WERROR - "Use -Werror (will be true for developer-mode unconditionally)" OFF) -option( - KDDockWidgets_X11EXTRAS - "On Linux, link against QtX11Extras so we can detect if the compositor supports transparency. Not applicable to other platforms or Qt6." - ON) -option( - KDDockWidgets_XLib - "On Linux, link against XLib, for a more robust window z-order detection." - OFF) +option(KDDockWidgets_WERROR "Use -Werror (will be true for developer-mode unconditionally)" OFF) +option(KDDockWidgets_X11EXTRAS + "Link against QtX11Extras to detect if the compositor supports transparency. Not applicable on non-Linux or Qt6." + ON +) +option(KDDockWidgets_XLib "On Linux, link against XLib, for a more robust window z-order detection." OFF) option(KDDockWidgets_CODE_COVERAGE "Enable coverage reporting" OFF) -option(KDDockWidgets_FRONTENDS - "Semicolon separated list of frontends to enable" "") +option(KDDockWidgets_FRONTENDS "Semicolon separated list of frontends to enable" "") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/ECM/modules") @@ -118,102 +113,93 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/KDAB/modules") # Set a default build type if none was specified set(default_build_type "Release") - if(EXISTS "${CMAKE_SOURCE_DIR}/.git" OR KDDockWidgets_DEVELOPER_MODE) - set(default_build_type "Debug") + set(default_build_type "Debug") endif() if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message( - STATUS "Setting build type to ${default_build_type} as none was specified.") - set(CMAKE_BUILD_TYPE - "${default_build_type}" - CACHE STRING "Choose the type of build." FORCE) + message(STATUS "Setting build type to ${default_build_type} as none was specified.") + set(CMAKE_BUILD_TYPE + "${default_build_type}" + CACHE STRING "Choose the type of build." FORCE + ) - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" - "MinSizeRel" "RelWithDebInfo") + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() if(KDDockWidgets_XLib) - add_definitions(-DKDDockWidgets_XLIB) + add_definitions(-DKDDockWidgets_XLIB) endif() if(MSVC AND MSVC_TOOLSET_VERSION LESS 142) - message(FATAL_ERROR "VS 2019 is the minimum required toolset") + message(FATAL_ERROR "VS 2019 is the minimum required toolset") endif() if(KDDockWidgets_QT6) - set(Qt_VERSION_MAJOR 6) - set(QT_MIN_VERSION "6.2.0") - set(KDDockWidgets_LIBRARY_QTID "-qt6") + set(Qt_VERSION_MAJOR 6) + set(QT_MIN_VERSION "6.2.0") + set(KDDockWidgets_LIBRARY_QTID "-qt6") else() - set(Qt_VERSION_MAJOR 5) - set(QT_MIN_VERSION "5.15") - set(KDDockWidgets_LIBRARY_QTID "") + set(Qt_VERSION_MAJOR 5) + set(QT_MIN_VERSION "5.15") + set(KDDockWidgets_LIBRARY_QTID "") endif() # BEGIN frontend enabling if(KDDockWidgets_FRONTENDS) - set(KDDockWidgets_ALL_FRONTENDS "qtwidgets;qtquick") + set(KDDockWidgets_ALL_FRONTENDS "qtwidgets;qtquick") - foreach(frontend ${KDDockWidgets_FRONTENDS}) - if(NOT ${frontend} IN_LIST KDDockWidgets_ALL_FRONTENDS) - message(FATAL_ERROR "Unknown frontend ${frontend}") - endif() - endforeach() + foreach(frontend ${KDDockWidgets_FRONTENDS}) + if(NOT ${frontend} IN_LIST KDDockWidgets_ALL_FRONTENDS) + message(FATAL_ERROR "Unknown frontend ${frontend}") + endif() + endforeach() endif() if(KDDockWidgets_FRONTENDS) - # qtwidgets - if("qtwidgets" IN_LIST KDDockWidgets_FRONTENDS) - find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED - COMPONENTS Widgets) - set(KDDW_FRONTEND_QTWIDGETS ON) - endif() + # qtwidgets + if("qtwidgets" IN_LIST KDDockWidgets_FRONTENDS) + find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Widgets) + set(KDDW_FRONTEND_QTWIDGETS ON) + endif() - # qtquick - if("qtquick" IN_LIST KDDockWidgets_FRONTENDS) - find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED - COMPONENTS Quick QuickControls2) - set(KDDW_FRONTEND_QTQUICK ON) - endif() + # qtquick + if("qtquick" IN_LIST KDDockWidgets_FRONTENDS) + find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Quick QuickControls2) + set(KDDW_FRONTEND_QTQUICK ON) + endif() else() - set(ENABLED_FRONTENDS "") - message("No frontends specified explicitly.") + set(ENABLED_FRONTENDS "") + message("No frontends specified explicitly.") - # qtwidgets - find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE - COMPONENTS Widgets Quick QuickControls2) + # qtwidgets + find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE COMPONENTS Widgets Quick QuickControls2) - if(Qt${Qt_VERSION_MAJOR}Widgets_FOUND) - list(APPEND ENABLED_FRONTENDS "qtwidgets") - set(KDDW_FRONTEND_QTWIDGETS ON) - endif() + if(Qt${Qt_VERSION_MAJOR}Widgets_FOUND) + list(APPEND ENABLED_FRONTENDS "qtwidgets") + set(KDDW_FRONTEND_QTWIDGETS ON) + endif() - # qtquick - if(Qt${Qt_VERSION_MAJOR}Quick_FOUND - AND Qt${Qt_VERSION_MAJOR}QuickControls2_FOUND) - list(APPEND ENABLED_FRONTENDS "qtquick") - set(KDDW_FRONTEND_QTQUICK ON) - endif() + # qtquick + if(Qt${Qt_VERSION_MAJOR}Quick_FOUND AND Qt${Qt_VERSION_MAJOR}QuickControls2_FOUND) + list(APPEND ENABLED_FRONTENDS "qtquick") + set(KDDW_FRONTEND_QTQUICK ON) + endif() - if(NOT ENABLED_FRONTENDS) - message( - FATAL_ERROR - "Failed to enable any frontends. Please install the required libraries and try again." - ) - endif() + if(NOT ENABLED_FRONTENDS) + message(FATAL_ERROR "Failed to enable any frontends. Please install the required libraries and try again.") + endif() - message("Following frontends have been enabled:") + message("Following frontends have been enabled:") - foreach(frontend ${ENABLED_FRONTENDS}) - message("* ${frontend}") - endforeach() + foreach(frontend ${ENABLED_FRONTENDS}) + message("* ${frontend}") + endforeach() endif() if(KDDockWidgets_DEVELOPER_MODE) - set(KDDW_FRONTEND_DUMMY ON) + set(KDDW_FRONTEND_DUMMY ON) endif() # END frontend enabling @@ -221,42 +207,43 @@ include(KDQtInstallPaths) # to set QT_INSTALL_FOO variables add_definitions(-DQT_NO_KEYWORDS) -option( - KDockWidgets_PRETTY_QTWIDGETS_HEADERS - "Install DockWidget.h and MainWindow.h as synonyms to the *_qtwidgets.h counterparts." - ${KDDW_FRONTEND_QTWIDGETS}) +option(KDockWidgets_PRETTY_QTWIDGETS_HEADERS + "Install DockWidget.h and MainWindow.h as synonyms to the *_qtwidgets.h counterparts." + ${KDDW_FRONTEND_QTWIDGETS} +) if(KDDW_FRONTEND_QTWIDGETS) - add_definitions(-DKDDW_FRONTEND_QTWIDGETS) - set(KDDockWidgets_DEPS "widgets") + add_definitions(-DKDDW_FRONTEND_QTWIDGETS) + set(KDDockWidgets_DEPS "widgets") endif() if(KDDW_FRONTEND_QTQUICK) - add_definitions(-DKDDW_FRONTEND_QTQUICK) - set(KDDockWidgets_DEPS "${KDDockWidgets_DEPS} quick quickcontrols2") + add_definitions(-DKDDW_FRONTEND_QTQUICK) + set(KDDockWidgets_DEPS "${KDDockWidgets_DEPS} quick quickcontrols2") endif() if(NOT WIN32 AND NOT APPLE AND NOT EMSCRIPTEN AND NOT KDDockWidgets_QT6 - AND KDDockWidgets_X11EXTRAS) - set(KDDockWidgets_DEPS "${KDDockWidgets_DEPS} x11extras") + AND KDDockWidgets_X11EXTRAS +) + set(KDDockWidgets_DEPS "${KDDockWidgets_DEPS} x11extras") endif() # Always build the test harness in developer-mode if(KDDockWidgets_DEVELOPER_MODE) - set(KDDockWidgets_TESTS ON) - set(KDDockWidgets_WERROR ON) - include(ECMEnableSanitizers) + set(KDDockWidgets_TESTS ON) + set(KDDockWidgets_WERROR ON) + include(ECMEnableSanitizers) - # find_package(doctest REQUIRED) TODOm3 + # find_package(doctest REQUIRED) TODOm3 endif() if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(IS_CLANG_BUILD TRUE) + set(IS_CLANG_BUILD TRUE) else() - set(IS_CLANG_BUILD FALSE) + set(IS_CLANG_BUILD FALSE) endif() set(CMAKE_CXX_STANDARD 17) @@ -270,238 +257,230 @@ set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) +# Sets compiler flags for the specified target, taking platform into consideration. macro(set_compiler_flags targetName) - if(KDDockWidgets_DEVELOPER_MODE) - target_compile_definitions( - ${targetName} - PUBLIC DOCKS_DEVELOPER_MODE - PRIVATE QT_FORCE_ASSERTS) + if(KDDockWidgets_DEVELOPER_MODE) + target_compile_definitions( + ${targetName} + PUBLIC DOCKS_DEVELOPER_MODE + PRIVATE QT_FORCE_ASSERTS + ) - if(NOT MSVC) - target_compile_options(${targetName} PRIVATE -Wall -Wextra) + if(NOT MSVC) + target_compile_options(${targetName} PRIVATE -Wall -Wextra) + endif() + + if(APPLE) + target_compile_options(${targetName} PRIVATE -Wweak-vtables) + endif() endif() - if(APPLE) - target_compile_options(${targetName} PRIVATE -Wweak-vtables) + # Enable -Werror + if(KDDockWidgets_WERROR AND (NOT MSVC OR IS_CLANG_BUILD)) # clang-cl accepts these too + target_compile_options(${targetName} PRIVATE -Werror -Wundef -Wno-error=deprecated-declarations) endif() - endif() - - # Enable -Werror - if(KDDockWidgets_WERROR AND (NOT MSVC OR IS_CLANG_BUILD)) # clang-cl accepts - # these too - target_compile_options( - ${targetName} PRIVATE -Werror -Wundef -Wno-error=deprecated-declarations) - endif() endmacro() if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE) OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE) - OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32)) - # Linker warnings should be treated as errors - set(CMAKE_SHARED_LINKER_FLAGS - "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS - "-Wl,--fatal-warnings ${CMAKE_MODULE_LINKER_FLAGS}") + OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32) +) + # Linker warnings should be treated as errors + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_MODULE_LINKER_FLAGS}") - string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" compileflags) + string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" compileflags) - if("${CMAKE_CXX_FLAGS} ${${compileflags}}" MATCHES "-fsanitize") - set(sanitizers_enabled TRUE) - else() - set(sanitizers_enabled FALSE) - endif() - - if(APPLE OR LINUX) - # cannot enable this for clang + sanitizers - if(NOT sanitizers_enabled OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") - # Do not allow undefined symbols, even in non-symbolic shared libraries - set(CMAKE_SHARED_LINKER_FLAGS - "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS - "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}") + if("${CMAKE_CXX_FLAGS} ${${compileflawithgs}}" MATCHES "-fsanitize") + set(sanitizers_enabled TRUE) + else() + set(sanitizers_enabled FALSE) + endif() + + if(APPLE OR LINUX) + # cannot enable this for clang + sanitizers + if(NOT sanitizers_enabled OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # Do not allow undefined symbols, even in non-symbolic shared libraries + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}") + endif() endif() - endif() endif() if(KDDockWidgets_STATIC) - set(KDDockWidgets_LIBRARY_MODE "STATIC") + set(KDDockWidgets_LIBRARY_MODE "STATIC") else() - set(KDDockWidgets_LIBRARY_MODE "SHARED") + set(KDDockWidgets_LIBRARY_MODE "SHARED") endif() if(KDAB_INSTALL) - if(UNIX) - set(CMAKE_INSTALL_PREFIX - "/usr/local/KDAB/KDDockWidgets-${KDDockWidgets_VERSION}" - CACHE INTERNAL "Install to default KDAB Location") - elseif(WIN32) - set(CMAKE_INSTALL_PREFIX - "C:\\KDAB\\KDDockWidgets-${KDDockWidgets_VERSION}" - CACHE INTERNAL "Install to default KDAB Location") - endif() + if(UNIX) + set(CMAKE_INSTALL_PREFIX + "/usr/local/KDAB/KDDockWidgets-${KDDockWidgets_VERSION}" + CACHE INTERNAL "Install to default KDAB Location" + ) + elseif(WIN32) + set(CMAKE_INSTALL_PREFIX + "C:\\KDAB\\KDDockWidgets-${KDDockWidgets_VERSION}" + CACHE INTERNAL "Install to default KDAB Location" + ) + endif() endif() # setup default install locations include(InstallLocation) if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - set(KDDockWidgets_IS_ROOT_PROJECT TRUE) + set(KDDockWidgets_IS_ROOT_PROJECT TRUE) - message( - STATUS - "Building KDDockWidgets ${KDDockWidgets_VERSION} in ${CMAKE_BUILD_TYPE} mode. Installing to ${CMAKE_INSTALL_PREFIX}" - ) + message(STATUS "Building KDDockWidgets ${KDDockWidgets_VERSION} in ${CMAKE_BUILD_TYPE} mode. " + "Installing to ${CMAKE_INSTALL_PREFIX}" + ) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") - install(FILES LICENSE.txt README.md DESTINATION ${INSTALL_DOC_DIR}) - install(DIRECTORY LICENSES DESTINATION ${INSTALL_DOC_DIR}) + install(FILES LICENSE.txt README.md DESTINATION ${INSTALL_DOC_DIR}) + install(DIRECTORY LICENSES DESTINATION ${INSTALL_DOC_DIR}) - # Generate .pri file for qmake users TODO: ECM does not support Qt6 yet - if(Qt_VERSION_MAJOR EQUAL 5 - AND CMAKE_VERSION VERSION_GREATER "3.11.99" - AND NOT CMAKE_CONFIGURATION_TYPES) # Not working with VS generator or older - # cmake versions - include(ECMGeneratePriFile) - set(PROJECT_VERSION_STRING ${KDDockWidgets_VERSION}) - ecm_generate_pri_file( - BASE_NAME - KDDockWidgets - LIB_NAME - kddockwidgets - DEPS - ${KDDockWidgets_DEPS} - FILENAME_VAR - pri_filename - INCLUDE_INSTALL_DIR - ${CMAKE_INSTALL_INCLUDEDIR}) - install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) - endif() + # Generate .pri file for qmake users + # TODO: ECM does not support Qt6 yet, nor with VS generator or older cmake versions + if(Qt_VERSION_MAJOR EQUAL 5 + AND CMAKE_VERSION VERSION_GREATER "3.11.99" + AND NOT CMAKE_CONFIGURATION_TYPES + ) + include(ECMGeneratePriFile) + set(PROJECT_VERSION_STRING ${KDDockWidgets_VERSION}) + ecm_generate_pri_file( + BASE_NAME + KDDockWidgets + LIB_NAME + kddockwidgets + DEPS + ${KDDockWidgets_DEPS} + FILENAME_VAR + pri_filename + INCLUDE_INSTALL_DIR + ${CMAKE_INSTALL_INCLUDEDIR} + ) + install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) + endif() else() - # Always disable tests, examples, docs when used as a submodule - set(KDDockWidgets_IS_ROOT_PROJECT FALSE) - set(KDDockWidgets_TESTS FALSE) - set(KDDockWidgets_EXAMPLES FALSE) - set(KDDockWidgets_DOCS FALSE) + # Always disable tests, examples, docs when used as a submodule + set(KDDockWidgets_IS_ROOT_PROJECT FALSE) + set(KDDockWidgets_TESTS FALSE) + set(KDDockWidgets_EXAMPLES FALSE) + set(KDDockWidgets_DOCS FALSE) endif() if(KDDockWidgets_TESTS) - enable_testing() + enable_testing() endif() add_subdirectory(src) if(KDDockWidgets_PYTHON_BINDINGS) - if(CMAKE_BUILD_TYPE MATCHES "^[Dd]eb" OR KDDockWidgets_STATIC) - message( - FATAL_ERROR "** Python Bindings are disabled in debug or static builds.") - endif() + if(CMAKE_BUILD_TYPE MATCHES "^[Dd]eb" OR KDDockWidgets_STATIC) + message(FATAL_ERROR "** Python Bindings are disabled in debug or static builds.") + endif() - if(CMAKE_UNITY_BUILD) - message(FATAL_ERROR "** Python Bindings are disabled in Unity builds. " - "Try again with CMAKE_UNITY_BUILD=OFF") - endif() + if(CMAKE_UNITY_BUILD) + message(FATAL_ERROR "** Python Bindings are disabled in Unity builds. Try again with CMAKE_UNITY_BUILD=OFF") + endif() - add_subdirectory(python) + add_subdirectory(python) endif() if(KDDockWidgets_EXAMPLES) - if(KDDW_FRONTEND_QTQUICK) - add_subdirectory(examples/qtquick) - endif() + if(KDDW_FRONTEND_QTQUICK) + add_subdirectory(examples/qtquick) + endif() - if(KDDW_FRONTEND_QTWIDGETS) - add_subdirectory(examples/dockwidgets) - add_subdirectory(examples/minimal) - add_subdirectory(examples/mdi) - add_subdirectory(examples/mdi_with_docking) - set_compiler_flags(qtwidgets_dockwidgets) - set_compiler_flags(qtwidgets_minimal) - set_compiler_flags(qtwidgets_mdi_with_docking) + if(KDDW_FRONTEND_QTWIDGETS) + add_subdirectory(examples/dockwidgets) + add_subdirectory(examples/minimal) + add_subdirectory(examples/mdi) + add_subdirectory(examples/mdi_with_docking) + set_compiler_flags(qtwidgets_dockwidgets) + set_compiler_flags(qtwidgets_minimal) + set_compiler_flags(qtwidgets_mdi_with_docking) - set_target_properties( - qtwidgets_dockwidgets - PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") - set_target_properties( - qtwidgets_mdi_with_docking - PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") - set_target_properties( - qtwidgets_mdi PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") - set_target_properties( - qtwidgets_minimal - PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") - endif() + set_target_properties( + qtwidgets_dockwidgets PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/" + ) + set_target_properties( + qtwidgets_mdi_with_docking PROPERTIES RUNTIME_OUTPUT_DIRECTORY + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/" + ) + set_target_properties( + qtwidgets_mdi PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/" + ) + set_target_properties( + qtwidgets_minimal PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/" + ) + endif() endif() if(KDDockWidgets_TESTS) - if(KDDockWidgets_DEVELOPER_MODE) - add_subdirectory(tests) + if(KDDockWidgets_DEVELOPER_MODE) + add_subdirectory(tests) - # tst_docks.exe is pretty big (160 tests), so split it in more runs so we - # can use threads. - add_test(NAME tst_docks0 COMMAND tests_launcher 0 5) - add_test(NAME tst_docks1 COMMAND tests_launcher 1 5) - add_test(NAME tst_docks2 COMMAND tests_launcher 2 5) - add_test(NAME tst_docks3 COMMAND tests_launcher 3 5) - add_test(NAME tst_docks4 COMMAND tests_launcher 4 5) - add_test(NAME tst_docks5 COMMAND tests_launcher 5 5) - add_test(NAME tst_docks6 COMMAND tests_launcher 6 5) - add_test(NAME tst_docks7 COMMAND tests_launcher 7 5) - add_test(NAME tst_docks8 COMMAND tests_launcher 8 5) - add_test(NAME tst_docks9 COMMAND tests_launcher 9 5) - add_test(NAME tst_docks10 COMMAND tests_launcher 10 5) - add_test(NAME tst_docks11 COMMAND tests_launcher 10 5) - add_test(NAME tst_docks12 COMMAND tests_launcher 11 5) - add_test(NAME tst_docks13 COMMAND tests_launcher 12 5) - add_test(NAME tst_docks14 COMMAND tests_launcher 13 5) - add_test(NAME tst_docks15 COMMAND tests_launcher 14 5) - add_test(NAME tst_docks16 COMMAND tests_launcher 15 5) - add_test(NAME tst_docks17 COMMAND tests_launcher 16 5) - add_test(NAME tst_docks18 COMMAND tests_launcher 17 5) - add_test(NAME tst_docks19 COMMAND tests_launcher 18 5) - add_test(NAME tst_docks20 COMMAND tests_launcher 19 5) - add_test(NAME tst_docks21 COMMAND tests_launcher 20 5) # one more for - # rounding leftovers + # tst_docks.exe is pretty big (160 tests), so split it in more runs so we + # can use threads. + add_test(NAME tst_docks0 COMMAND tests_launcher 0 5) + add_test(NAME tst_docks1 COMMAND tests_launcher 1 5) + add_test(NAME tst_docks2 COMMAND tests_launcher 2 5) + add_test(NAME tst_docks3 COMMAND tests_launcher 3 5) + add_test(NAME tst_docks4 COMMAND tests_launcher 4 5) + add_test(NAME tst_docks5 COMMAND tests_launcher 5 5) + add_test(NAME tst_docks6 COMMAND tests_launcher 6 5) + add_test(NAME tst_docks7 COMMAND tests_launcher 7 5) + add_test(NAME tst_docks8 COMMAND tests_launcher 8 5) + add_test(NAME tst_docks9 COMMAND tests_launcher 9 5) + add_test(NAME tst_docks10 COMMAND tests_launcher 10 5) + add_test(NAME tst_docks11 COMMAND tests_launcher 10 5) + add_test(NAME tst_docks12 COMMAND tests_launcher 11 5) + add_test(NAME tst_docks13 COMMAND tests_launcher 12 5) + add_test(NAME tst_docks14 COMMAND tests_launcher 13 5) + add_test(NAME tst_docks15 COMMAND tests_launcher 14 5) + add_test(NAME tst_docks16 COMMAND tests_launcher 15 5) + add_test(NAME tst_docks17 COMMAND tests_launcher 16 5) + add_test(NAME tst_docks18 COMMAND tests_launcher 17 5) + add_test(NAME tst_docks19 COMMAND tests_launcher 18 5) + add_test(NAME tst_docks20 COMMAND tests_launcher 19 5) + add_test(NAME tst_docks21 COMMAND tests_launcher 20 5) # one more for rounding leftovers - add_test(NAME tst_view COMMAND tst_view) - add_test(NAME tst_window COMMAND tst_window) - add_test(NAME tst_platform COMMAND tst_platform) - add_test(NAME tst_viewguard COMMAND tst_viewguard) - add_test(NAME tst_group COMMAND tst_group) - add_test(NAME tst_titlebar COMMAND tst_titlebar) - add_test(NAME tst_stack COMMAND tst_stack) - add_test(NAME tst_tabbar COMMAND tst_tabbar) - add_test(NAME tst_separator COMMAND tst_separator) - add_test(NAME tst_floatingwindow COMMAND tst_floatingwindow) - add_test(NAME tst_dockwidget COMMAND tst_dockwidget) - add_test(NAME tst_multisplitter COMMAND tst_multisplitter) + add_test(NAME tst_view COMMAND tst_view) + add_test(NAME tst_window COMMAND tst_window) + add_test(NAME tst_platform COMMAND tst_platform) + add_test(NAME tst_viewguard COMMAND tst_viewguard) + add_test(NAME tst_group COMMAND tst_group) + add_test(NAME tst_titlebar COMMAND tst_titlebar) + add_test(NAME tst_stack COMMAND tst_stack) + add_test(NAME tst_tabbar COMMAND tst_tabbar) + add_test(NAME tst_separator COMMAND tst_separator) + add_test(NAME tst_floatingwindow COMMAND tst_floatingwindow) + add_test(NAME tst_dockwidget COMMAND tst_dockwidget) + add_test(NAME tst_multisplitter COMMAND tst_multisplitter) - if(KDDW_FRONTEND_QTWIDGETS) - add_test(NAME tst_qtwidgets COMMAND tst_qtwidgets) + if(KDDW_FRONTEND_QTWIDGETS) + add_test(NAME tst_qtwidgets COMMAND tst_qtwidgets) + endif() + + if(KDDW_FRONTEND_QTQUICK) + add_test(NAME tst_qtquick COMMAND tst_qtquick) + endif() endif() - - if(KDDW_FRONTEND_QTQUICK) - add_test(NAME tst_qtquick COMMAND tst_qtquick) - endif() - endif() endif() if(KDDockWidgets_DOCS) - add_subdirectory(docs) # needs to go last, in case there are build source - # files + add_subdirectory(docs) # needs to go last, in case there are build source files endif() if(KDDockWidgets_IS_ROOT_PROJECT) - # Add uninstall target (not for submodules since parent projects typically - # have uninstall too) - include(ECMUninstallTarget) + # Add uninstall target (not for submodules since parent projects typically have uninstall too) + include(ECMUninstallTarget) endif() -feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES - FATAL_ON_MISSING_REQUIRED_PACKAGES) +feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/cmake/InstallLocation.cmake b/cmake/InstallLocation.cmake index f0aa940f..4b20c980 100644 --- a/cmake/InstallLocation.cmake +++ b/cmake/InstallLocation.cmake @@ -9,27 +9,27 @@ include(GNUInstallDirs) if(NOT INSTALL_RUNTIME_DIR) - set(INSTALL_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR}) + set(INSTALL_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR}) endif() if(NOT INSTALL_LIBRARY_DIR) - set(INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) + set(INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) endif() if(NOT INSTALL_ARCHIVE_DIR) - set(INSTALL_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR}) + set(INSTALL_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR}) endif() if(NOT INSTALL_INCLUDE_DIR) - set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) + set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) endif() if(NOT INSTALL_DATADIR) - set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}) + set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}) endif() if(NOT INSTALL_DOC_DIR) - set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}${KDDockWidgets_LIBRARY_QTID}) + set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}${KDDockWidgets_LIBRARY_QTID}) endif() set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) if(APPLE) - set(CMAKE_MACOSX_RPATH ON) + set(CMAKE_MACOSX_RPATH ON) else() - set(CMAKE_INSTALL_RPATH "$ORIGIN/../${INSTALL_LIBRARY_DIR}") + set(CMAKE_INSTALL_RPATH "$ORIGIN/../${INSTALL_LIBRARY_DIR}") endif() diff --git a/conan/conanfile.py b/conan/conanfile.py index 3d79b62c..9dcd0a30 100644 --- a/conan/conanfile.py +++ b/conan/conanfile.py @@ -9,6 +9,7 @@ from conans import ConanFile, CMake, tools + class KDDockWidgetsConan(ConanFile): name = "kddockwidgets" version = "1.5.0" @@ -20,7 +21,7 @@ class KDDockWidgetsConan(ConanFile): url = "https://github.com/KDAB/KDDockWidgets" description = "Advanced Dock Widget Framework for Qt" generators = "cmake" - topics = ("qt", "dockwidget" , "kdab") + topics = ("qt", "dockwidget", "kdab") settings = "os", "compiler", "build_type", "arch" options = { "qt_version": "ANY", @@ -65,4 +66,5 @@ class KDDockWidgetsConan(ConanFile): self.env_info.CMAKE_PREFIX_PATH.append(self.package_folder) def package_id(self): - self.info.requires["qt"].minor_mode() # Check only the major and minor version! + # Check only the major and minor version! + self.info.requires["qt"].minor_mode() diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index bdfcf67e..eef0e3d9 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Allen Winter +# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Allen Winter # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -12,12 +12,13 @@ # Doxygen find_package(Doxygen) set_package_properties( - Doxygen PROPERTIES - TYPE OPTIONAL - DESCRIPTION "API Documentation system" - URL "https://www.doxygen.org" - PURPOSE "Needed to build the API documentation.") + Doxygen PROPERTIES + TYPE OPTIONAL + DESCRIPTION "API Documentation system" + URL "https://www.doxygen.org" + PURPOSE "Needed to build the API documentation." +) if(DOXYGEN_FOUND) - add_subdirectory(api) + add_subdirectory(api) endif() diff --git a/docs/api/CMakeLists.txt b/docs/api/CMakeLists.txt index 84bbfe20..2a8e8b79 100644 --- a/docs/api/CMakeLists.txt +++ b/docs/api/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Allen Winter +# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Allen Winter # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -11,81 +11,74 @@ # dot should come with Doxygen find_package(Doxygen) if(DOXYGEN_DOT_EXECUTABLE) - set(HAVE_DOT "YES") + set(HAVE_DOT "YES") else() - set(HAVE_DOT "NO") - message( - STATUS - "Unable to provide inheritance diagrams for the API documentation. To fix, install the graphviz project from https://www.graphviz.org" - ) + set(HAVE_DOT "NO") + message(STATUS "Unable to provide inheritance diagrams for the API documentation. " + "To fix, install the graphviz project from https://www.graphviz.org" + ) endif() # qhelpgenerator find_program(QHELPGEN_EXECUTABLE qhelpgenerator HINTS ${QT_INSTALL_BINS}) if(QHELPGEN_EXECUTABLE) - set(HAVE_QHELPGEN "YES") + set(HAVE_QHELPGEN "YES") else() - set(HAVE_QHELPGEN "NO") - message( - STATUS - "Unable to generate the API documentation in qch format. To fix, install the qthelpgenerator program which comes with Qt." - ) + set(HAVE_QHELPGEN "NO") + message(STATUS "Unable to generate the API documentation in qch format. " + "To fix, install the qthelpgenerator program which comes with Qt." + ) endif() -find_file( - QDOC_QTCORE_TAG qtcore.tags - HINTS ${QT_INSTALL_DOCS}/qtcore - HINTS ${QT_INSTALL_DATA}/doc/qtcore) +find_file(QDOC_QTCORE_TAG qtcore.tags HINTS ${QT_INSTALL_DOCS}/qtcore ${QT_INSTALL_DATA}/doc/qtcore) set(QDOC_TAG_DIR "") if(QDOC_QTCORE_TAG) - get_filename_component(QDOC_TAG_DIR ${QDOC_QTCORE_TAG} DIRECTORY) - get_filename_component(QDOC_TAG_DIR ${QDOC_TAG_DIR} DIRECTORY) + get_filename_component(QDOC_TAG_DIR ${QDOC_QTCORE_TAG} DIRECTORY) + get_filename_component(QDOC_TAG_DIR ${QDOC_TAG_DIR} DIRECTORY) endif() file(GLOB _dox_deps *.dox *.html) set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) # apidox generation using doxygen -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake - ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) add_custom_command( - OUTPUT ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile - # handle a bug in doxygen where image files referred to in markdown are not - # copied the output - COMMAND - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/../../screencap.gif ${DOXYGEN_OUTPUT_DIR}/html - # copy some files by-hand that are referred to by the markdown README - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/README-bindings.md ${DOXYGEN_OUTPUT_DIR}/html - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/LICENSES - COMMAND - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/LICENSES/GPL-2.0-only.txt - ${DOXYGEN_OUTPUT_DIR}/html/LICENSES - COMMAND - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0-only.txt - ${DOXYGEN_OUTPUT_DIR}/html/LICENSES - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/docs - COMMAND - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/docs/KDDockWidgets-CopyrightAssignmentForm.pdf - ${DOXYGEN_OUTPUT_DIR}/html/docs - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/examples - ${DOXYGEN_OUTPUT_DIR}/html/examples - DEPENDS ${_dox_deps} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -add_custom_target(kddockwidgets-api.qch ALL - DEPENDS ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch) -add_custom_target(docs DEPENDS kddockwidgets-api.qch) + OUTPUT ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + # handle a bug in doxygen where image files referred to in markdown are not + # copied the output + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../screencap.gif + ${DOXYGEN_OUTPUT_DIR}/html + # copy some files by-hand that are referred to by the markdown README + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/README-bindings.md ${DOXYGEN_OUTPUT_DIR}/html + COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/LICENSES + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-2.0-only.txt + ${DOXYGEN_OUTPUT_DIR}/html/LICENSES + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0-only.txt + ${DOXYGEN_OUTPUT_DIR}/html/LICENSES + COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/docs + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/docs/KDDockWidgets-CopyrightAssignmentForm.pdf + ${DOXYGEN_OUTPUT_DIR}/html/docs + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/examples ${DOXYGEN_OUTPUT_DIR}/html/examples + DEPENDS ${_dox_deps} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generate the .qch file" +) +add_custom_target( + kddockwidgets-api.qch ALL + DEPENDS ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch + COMMENT "Target to generate the .qch file" +) +add_custom_target( + docs + DEPENDS kddockwidgets-api.qch + COMMENT "Target to generate the documentation" +) set(QCH_INSTALL_DIR ${INSTALL_DOC_DIR} - CACHE STRING "Install location of Qt Assistant help files.") -install(FILES ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch - DESTINATION ${QCH_INSTALL_DIR}) -install(FILES ${DOXYGEN_OUTPUT_DIR}/kddockwidgets.tags - DESTINATION ${INSTALL_DOC_DIR}) + CACHE STRING "Install location of Qt Assistant help files." +) +install(FILES ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch DESTINATION ${QCH_INSTALL_DIR}) +install(FILES ${DOXYGEN_OUTPUT_DIR}/kddockwidgets.tags DESTINATION ${INSTALL_DOC_DIR}) diff --git a/examples/dockwidgets/CMakeLists.txt b/examples/dockwidgets/CMakeLists.txt index 3158fa2d..3172f485 100644 --- a/examples/dockwidgets/CMakeLists.txt +++ b/examples/dockwidgets/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,15 +17,13 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_example.qrc) -add_executable( - qtwidgets_dockwidgets main.cpp MyViewFactory.cpp MyMainWindow.cpp - MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) +add_executable(qtwidgets_dockwidgets main.cpp MyViewFactory.cpp MyMainWindow.cpp MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) target_link_libraries(qtwidgets_dockwidgets PRIVATE KDAB::kddockwidgets) diff --git a/examples/mdi/CMakeLists.txt b/examples/mdi/CMakeLists.txt index 1bc783b2..5fa67f7a 100644 --- a/examples/mdi/CMakeLists.txt +++ b/examples/mdi/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,18 +17,16 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) # Just to reuse MyWidget.h include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/) -add_executable(qtwidgets_mdi main.cpp ../dockwidgets/MyWidget.cpp - ${RESOURCES_EXAMPLE_SRC}) +add_executable(qtwidgets_mdi main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) target_link_libraries(qtwidgets_mdi PRIVATE KDAB::kddockwidgets) diff --git a/examples/mdi_with_docking/CMakeLists.txt b/examples/mdi_with_docking/CMakeLists.txt index b4916b4c..e8de0368 100644 --- a/examples/mdi_with_docking/CMakeLists.txt +++ b/examples/mdi_with_docking/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,18 +17,16 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) # Just to reuse MyWidget.h include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/) -add_executable(qtwidgets_mdi_with_docking main.cpp ../dockwidgets/MyWidget.cpp - ${RESOURCES_EXAMPLE_SRC}) +add_executable(qtwidgets_mdi_with_docking main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) target_link_libraries(qtwidgets_mdi_with_docking PRIVATE KDAB::kddockwidgets) diff --git a/examples/minimal/CMakeLists.txt b/examples/minimal/CMakeLists.txt index 6c77f073..770b7643 100644 --- a/examples/minimal/CMakeLists.txt +++ b/examples/minimal/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,13 +17,12 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) add_executable(qtwidgets_minimal main.cpp MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) diff --git a/examples/qtquick/CMakeLists.txt b/examples/qtquick/CMakeLists.txt index d5d41d63..9dfd0959 100644 --- a/examples/qtquick/CMakeLists.txt +++ b/examples/qtquick/CMakeLists.txt @@ -1,7 +1,7 @@ # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -11,18 +11,15 @@ add_subdirectory(dockwidgets) set_compiler_flags(qtquick_dockwidgets) set_target_properties( - qtquick_dockwidgets PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") + qtquick_dockwidgets PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/" +) add_subdirectory(mdi) set_compiler_flags(qtquick_mdi) -set_target_properties( - qtquick_mdi PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") +set_target_properties(qtquick_mdi PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") add_subdirectory(customtitlebar) set_compiler_flags(qtquick_customtitlebar) set_target_properties( - qtquick_customtitlebar - PROPERTIES RUNTIME_OUTPUT_DIRECTORY - "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/") + qtquick_customtitlebar PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/" +) diff --git a/examples/qtquick/customtitlebar/CMakeLists.txt b/examples/qtquick/customtitlebar/CMakeLists.txt index 7d108658..49bd448d 100644 --- a/examples/qtquick/customtitlebar/CMakeLists.txt +++ b/examples/qtquick/customtitlebar/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,14 +17,14 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc - ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc) +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc +) add_executable(qtquick_customtitlebar main.cpp ${RESOURCES_EXAMPLE_SRC}) diff --git a/examples/qtquick/dockwidgets/CMakeLists.txt b/examples/qtquick/dockwidgets/CMakeLists.txt index 5cf7b398..71bc8a08 100644 --- a/examples/qtquick/dockwidgets/CMakeLists.txt +++ b/examples/qtquick/dockwidgets/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,14 +17,14 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc - ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc) +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc +) add_executable(qtquick_dockwidgets main.cpp ${RESOURCES_EXAMPLE_SRC}) diff --git a/examples/qtquick/mdi/CMakeLists.txt b/examples/qtquick/mdi/CMakeLists.txt index 1be0de91..dcdde7c1 100644 --- a/examples/qtquick/mdi/CMakeLists.txt +++ b/examples/qtquick/mdi/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -17,14 +17,14 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before if you want - # to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before if you want + # to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_mdi_example.qrc - ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc) +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_mdi_example.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc +) add_executable(qtquick_mdi main.cpp ${RESOURCES_EXAMPLE_SRC}) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index c178e6c9..a1336842 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,9 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Renato Araujo Oliveira Filho -# +# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Renato Araujo Oliveira Filho # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -13,20 +12,19 @@ set(PYTHON_BINDING_NAMESPACE "PyKDDockWidgets") # Just to fix warnings with --warn-uninitialized if(NOT DEFINED SHIBOKEN_CUSTOM_PREFIX) # look for shiboken in a custom location - set(SHIBOKEN_CUSTOM_PREFIX "") + set(SHIBOKEN_CUSTOM_PREFIX "") endif() if(NOT DEFINED PYSIDE_CUSTOM_PREFIX) # look for pyside in a custom location - set(PYSIDE_CUSTOM_PREFIX "") + set(PYSIDE_CUSTOM_PREFIX "") endif() if(${PROJECT_NAME}_QT6) - set(PYSIDE_MAJOR_VERSION "6") - set(PYTHON_BINDING_NAMESPACE - "${PYTHON_BINDING_NAMESPACE}Qt${PYSIDE_MAJOR_VERSION}") - set(QtWidgets_VERSION ${Qt6Widgets_VERSION}) + set(PYSIDE_MAJOR_VERSION "6") + set(PYTHON_BINDING_NAMESPACE "${PYTHON_BINDING_NAMESPACE}Qt${PYSIDE_MAJOR_VERSION}") + set(QtWidgets_VERSION ${Qt6Widgets_VERSION}) else() - set(PYSIDE_MAJOR_VERSION "2") - set(QtWidgets_VERSION ${Qt5Widgets_VERSION}) + set(PYSIDE_MAJOR_VERSION "2") + set(QtWidgets_VERSION ${Qt5Widgets_VERSION}) endif() find_package(Python3 3.7 REQUIRED COMPONENTS Interpreter Development) @@ -34,16 +32,14 @@ find_package(Shiboken${PYSIDE_MAJOR_VERSION} REQUIRED) find_package(PySide${PYSIDE_MAJOR_VERSION} ${QtWidgets_VERSION} EXACT REQUIRED) if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) - set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") endif() -set(BINDINGS_DIR - "${INSTALL_LIBRARY_DIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages/${PYTHON_BINDING_NAMESPACE}" -) -set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX - "${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/${BINDINGS_DIR}") +set(Python3_VERSION_MAJORMIONR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}") +set(BINDINGS_DIR "${INSTALL_LIBRARY_DIR}/python${Python3_VERSION_MAJORMINOR}/site-packages/${PYTHON_BINDING_NAMESPACE}") +set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/${BINDINGS_DIR}") include(PySide${PYSIDE_MAJOR_VERSION}ModuleBuild) add_subdirectory(PyKDDockWidgets) if(${PROJECT_NAME}_TESTS) - add_subdirectory(tests) + add_subdirectory(tests) endif() diff --git a/python/PyKDDockWidgets/CMakeLists.txt b/python/PyKDDockWidgets/CMakeLists.txt index d7587fc6..272a4375 100644 --- a/python/PyKDDockWidgets/CMakeLists.txt +++ b/python/PyKDDockWidgets/CMakeLists.txt @@ -1,9 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Renato Araujo Oliveira Filho -# +# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Renato Araujo Oliveira Filho # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -27,7 +26,8 @@ set(PyKDDockWidgets_SRC ${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_layoutsaver_wrapper.h # global module wrapper ${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_module_wrapper.cpp - ${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_python.h) + ${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_python.h +) # includes necessary to parse and build the classes specified on typesystem set(PyKDDockWidgets_include_paths @@ -37,48 +37,46 @@ set(PyKDDockWidgets_include_paths # A list of paths where shiboken should look for typesystem set(PyKDDockWidgets_typesystem_paths # PySide path, this variable was exposed by # FindPySide2.cmake - ${PYSIDE_TYPESYSTEMS}) - + ${PYSIDE_TYPESYSTEMS} +) # Include flags/path that will be set in 'target_include_directories' set(PyKDDockWidgets_target_include_directories ${CMAKE_SOURCE_DIR}/src) # Libraries that will be necessary to link the target, this will used in the # command 'target_link_libraries' -set(PyKDDockWidgets_target_link_libraries - KDAB::kddockwidgets Qt${Qt_VERSION_MAJOR}::Core Qt${Qt_VERSION_MAJOR}::Gui - Qt${Qt_VERSION_MAJOR}::Widgets ${Python3_LIBRARIES}) +set(PyKDDockWidgets_target_link_libraries KDAB::kddockwidgets Qt${Qt_VERSION_MAJOR}::Core Qt${Qt_VERSION_MAJOR}::Gui + Qt${Qt_VERSION_MAJOR}::Widgets ${Python3_LIBRARIES} +) # changes on these files should trigger a new generation set(PyKDDockWidgets_DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h - ${CMAKE_SOURCE_DIR}/src/DockWidget.h - ${CMAKE_SOURCE_DIR}/src/DockWidget.h - ${CMAKE_SOURCE_DIR}/src/MainWindow.h - ${CMAKE_SOURCE_DIR}/src/MainWindow.h - ${CMAKE_SOURCE_DIR}/src/LayoutSaver.h) + ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h ${CMAKE_SOURCE_DIR}/src/DockWidget.h + ${CMAKE_SOURCE_DIR}/src/DockWidget.h ${CMAKE_SOURCE_DIR}/src/MainWindow.h ${CMAKE_SOURCE_DIR}/src/MainWindow.h + ${CMAKE_SOURCE_DIR}/src/LayoutSaver.h +) create_python_bindings( - "KDDockWidgets" - "${PyKDDockWidgets_typesystem_paths}" - "${PyKDDockWidgets_include_paths}" - "${PyKDDockWidgets_SRC}" - "${PyKDDockWidgets_target_include_directories}" - "${PyKDDockWidgets_target_link_libraries}" - ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h - ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_kddockwidgets.xml - "${PyKDDockWidgets_DEPENDS}" - ${CMAKE_CURRENT_BINARY_DIR}) + "KDDockWidgets" + "${PyKDDockWidgets_typesystem_paths}" + "${PyKDDockWidgets_include_paths}" + "${PyKDDockWidgets_SRC}" + "${PyKDDockWidgets_target_include_directories}" + "${PyKDDockWidgets_target_link_libraries}" + ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h + ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_kddockwidgets.xml + "${PyKDDockWidgets_DEPENDS}" + ${CMAKE_CURRENT_BINARY_DIR} +) # Make module import from build dir work -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.cmake - ${CMAKE_CURRENT_BINARY_DIR}/__init__.py @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.cmake ${CMAKE_CURRENT_BINARY_DIR}/__init__.py @ONLY) # install -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/__init__.py - $ - DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/__init__.py $ + DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX} +) if(NOT WIN32) - install(FILES $ - $ - DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}) + install(FILES $ $ + DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX} + ) endif() diff --git a/python/examples-qt6/MyMainWindow.py b/python/examples-qt6/MyMainWindow.py index 13e86f3d..a598e933 100644 --- a/python/examples-qt6/MyMainWindow.py +++ b/python/examples-qt6/MyMainWindow.py @@ -9,6 +9,8 @@ # Contact KDAB at for commercial licensing options. # +# pylint: disable=missing-module-docstring,missing-function-docstring,missing-class-docstring + from PyKDDockWidgetsQt6 import KDDockWidgets from PySide6 import QtCore, QtWidgets, QtGui @@ -17,33 +19,41 @@ from MyWidget1 import MyWidget1 from MyWidget2 import MyWidget2 from MyWidget3 import MyWidget3 -def newMyWidget(parent = None): + +def newMyWidget(parent=None): randomNumber = QtCore.QRandomGenerator.global_().bounded(0, 100) + 1 - if (randomNumber < 50): - if (randomNumber < 33): + if randomNumber < 50: + if randomNumber < 33: return MyWidget1(parent) - else: - return MyWidget3(parent) - else: - return MyWidget2(parent) + return MyWidget3(parent) + return MyWidget2(parent) + class MyMainWindow(KDDockWidgets.MainWindow): s_count = 0 s_menuCount = 0 - def __init__(self, uniqueName, options = KDDockWidgets.MainWindowOption_None, dockWidget0IsNonClosable = False, nonDockableDockWidget9 = False, restoreIsRelative = False, maxSizeForDockWidget8 = False, affinityName = "", parent = None): + def __init__(self, + uniqueName, + options=KDDockWidgets.MainWindowOption_None, + dockWidget0IsNonClosable=False, + nonDockableDockWidget9=False, + restoreIsRelative=False, + maxSizeForDockWidget8=False, + affinityName="", + parent=None): super().__init__(uniqueName, options, parent) - self.m_dockWidget0IsNonClosable = dockWidget0IsNonClosable - self.m_dockWidget9IsNonDockable = nonDockableDockWidget9 - self.m_restoreIsRelative = restoreIsRelative - self.m_maxSizeForDockWidget8 = maxSizeForDockWidget8 - self.m_dockwidgets = [] - + self.dockWidget0IsNonClosable = dockWidget0IsNonClosable + self.dockWidget9IsNonDockable = nonDockableDockWidget9 + self.restoreIsRelative = restoreIsRelative + self.maxSizeForDockWidget8 = maxSizeForDockWidget8 + self.dockwidgets = [] + menubar = self.menuBar() fileMenu = QtWidgets.QMenu("File") - self.m_toggleMenu = QtWidgets.QMenu("Toggle") + self.toggleMenu = QtWidgets.QMenu("Toggle") menubar.addMenu(fileMenu) - menubar.addMenu(self.m_toggleMenu) + menubar.addMenu(self.toggleMenu) newAction = fileMenu.addAction("New DockWidget") newAction.triggered.connect(self._newDockWidget) @@ -63,101 +73,104 @@ class MyMainWindow(KDDockWidgets.MainWindow): quitAction = fileMenu.addAction("Quit") quitAction.triggered.connect(QtWidgets.QApplication.instance().quit) - self.setAffinities([ affinityName ]) + self.setAffinities([affinityName]) self.createDockWidgets() def _newDockWidget(self): MyMainWindow.s_menuCount += 1 w = newMyWidget(self) w.setGeometry(100, 100, 400, 400) - dock = KDDockWidgets.DockWidget("new dock %d"%(MyMainWindow.s_menuCount)) + dock = KDDockWidgets.DockWidget("new dock %d" % (MyMainWindow.s_menuCount)) dock.setWidget(w) dock.resize(600, 600) dock.show() - self.m_dockwidgets.append(dock) - + self.dockwidgets.append(dock) + + # pylint: disable=no-self-use def _saveLayout(self): #saver = KDDockWidgets.LayoutSaver() #result = saver.saveToFile("mylayout.json") #print("Saving layout to disk. Result=", result) print("Not available") + # pylint: disable=no-self-use def _restoreLayout(self): #options = KDDockWidgets.RestoreOption_None - #if self.m_restoreIsRelative: + # if self.restoreIsRelative: # options |= KDDockWidgets.RestoreOption_RelativeToMainWindow #saver = KDDockWidgets.LayoutSaver(options) - #saver.restoreFromFile("mylayout.json") + # saver.restoreFromFile("mylayout.json") print("Not available") def _closeAll(self): - for dw in self.m_dockwidgets: - dw.close() + for widget in self.dockwidgets: + widget.close() def createDockWidgets(self): - if self.m_dockWidget9IsNonDockable: + if self.dockWidget9IsNonDockable: numDockWidgets = 10 else: numDockWidgets = 9 # numDockWidgets = 2 # Create 9 KDDockWidget::DockWidget and the respective widgets they're hosting (MyWidget instances) - for i in range(numDockWidgets): - self.m_dockwidgets.append(self.newDockWidget()) + for _ in range(numDockWidgets): + self.dockwidgets.append(self.newDockWidget()) # MainWindow::addDockWidget() attaches a dock widget to the main window: - initialOpts = KDDockWidgets.InitialOption(KDDockWidgets.InitialVisibilityOption.StartHidden, QtCore.QSize(500, 500)) - self.addDockWidget(self.m_dockwidgets[0], KDDockWidgets.Location_OnBottom, None, initialOpts) + initialOpts = KDDockWidgets.InitialOption(KDDockWidgets.InitialVisibilityOption.StartHidden, + QtCore.QSize(500, 500)) + self.addDockWidget(self.dockwidgets[0], KDDockWidgets.Location_OnBottom, None, initialOpts) # Here, for finer granularity we specify right of dockwidgets[0]: - self.addDockWidget(self.m_dockwidgets[1], KDDockWidgets.Location_OnRight, self.m_dockwidgets[0]) - - self.addDockWidget(self.m_dockwidgets[2], KDDockWidgets.Location_OnLeft) - self.addDockWidget(self.m_dockwidgets[3], KDDockWidgets.Location_OnBottom) - self.addDockWidget(self.m_dockwidgets[4], KDDockWidgets.Location_OnBottom) + self.addDockWidget(self.dockwidgets[1], KDDockWidgets.Location_OnRight, self.dockwidgets[0]) + + self.addDockWidget(self.dockwidgets[2], KDDockWidgets.Location_OnLeft) + self.addDockWidget(self.dockwidgets[3], KDDockWidgets.Location_OnBottom) + self.addDockWidget(self.dockwidgets[4], KDDockWidgets.Location_OnBottom) # Tab two dock widgets together - self.m_dockwidgets[3].addDockWidgetAsTab(self.m_dockwidgets[5]) + self.dockwidgets[3].addDockWidgetAsTab(self.dockwidgets[5]) # 6 is floating, as it wasn't added to the main window via MainWindow::addDockWidget(). # and we tab 7 with it. - self.m_dockwidgets[6].addDockWidgetAsTab(self.m_dockwidgets[7]) + self.dockwidgets[6].addDockWidgetAsTab(self.dockwidgets[7]) # Floating windows also support nesting, here we add 8 to the bottom of the group - self.m_dockwidgets[6].addDockWidgetToContainingWindow(self.m_dockwidgets[8], KDDockWidgets.Location_OnBottom) + self.dockwidgets[6].addDockWidgetToContainingWindow(self.dockwidgets[8], KDDockWidgets.Location_OnBottom) - floatingWindow = self.m_dockwidgets[6].window() + floatingWindow = self.dockwidgets[6].window() floatingWindow.move(100, 100) def newDockWidget(self): # Passing options is optional, we just want to illustrate Option_NotClosable here options = KDDockWidgets.DockWidget.Option_None - if (MyMainWindow.s_count == 0) and self.m_dockWidget0IsNonClosable: + if (MyMainWindow.s_count == 0) and self.dockWidget0IsNonClosable: options |= KDDockWidgets.DockWidget.Option_NotClosable - if (MyMainWindow.s_count == 9) and self.m_dockWidget9IsNonDockable: + if (MyMainWindow.s_count == 9) and self.dockWidget9IsNonDockable: options |= KDDockWidgets.DockWidget.Option_NotDockable - dock = KDDockWidgets.DockWidget("DockWidget #%d"%(MyMainWindow.s_count), options) - dock.setAffinities(self.affinities()); # optional, just to show the feature. Pass -mi to the example to see incompatible dock widgets + dock = KDDockWidgets.DockWidget("DockWidget #%d" % (MyMainWindow.s_count), options) + # optional, just to show the feature. Pass -mi to the example to see incompatible dock widgets + dock.setAffinities(self.affinities()) if MyMainWindow.s_count == 1: dock.setIcon(QtGui.QIcon.fromTheme("mail-message")) myWidget = newMyWidget(self) - if (MyMainWindow.s_count == 8) and self.m_maxSizeForDockWidget8: + if (MyMainWindow.s_count == 8) and self.maxSizeForDockWidget8: # Set a maximum size on dock #8 myWidget.setMaximumSize(200, 200) dock.setWidget(myWidget) if dock.options() & KDDockWidgets.DockWidget.Option_NotDockable: - dock.setTitle("DockWidget #%d (%s)" %(MyMainWindow.s_count, "non dockable")) + dock.setTitle("DockWidget #%d (%s)" % (MyMainWindow.s_count, "non dockable")) else: - dock.setTitle("DockWidget #%d"%(MyMainWindow.s_count)) + dock.setTitle("DockWidget #%d" % (MyMainWindow.s_count)) dock.resize(600, 600) - self.m_toggleMenu.addAction(dock.toggleAction()) + self.toggleMenu.addAction(dock.toggleAction()) MyMainWindow.s_count += 1 return dock - diff --git a/python/examples-qt6/MyWidget.py b/python/examples-qt6/MyWidget.py index 39fc133f..087e99cd 100644 --- a/python/examples-qt6/MyWidget.py +++ b/python/examples-qt6/MyWidget.py @@ -9,18 +9,23 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgetsQt6 +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring from PySide6 import QtWidgets, QtGui, QtCore +# pylint: disable=too-few-public-methods + + class MyWidget(QtWidgets.QWidget): s_images = {} - def __init__(self, backgroundFile, logoFile, parent = None): + + def __init__(self, backgroundFile, logoFile, parent=None): super().__init__(parent) - self.m_background = self._lookupImage(backgroundFile) - self.m_logo = self._lookupImage(logoFile) + self.background = self._lookupImage(backgroundFile) + self.logo = self._lookupImage(logoFile) + # pylint: disable=no-self-use def _lookupImage(self, imageName): if imageName == "": return None @@ -29,23 +34,23 @@ class MyWidget(QtWidgets.QWidget): MyWidget.s_images[imageName] = QtGui.QImage(imageName) return MyWidget.s_images[imageName] - + def drawLogo(self, p): - if not self.m_logo: + if not self.logo: return - ratio = self.m_logo.height() / (self.m_logo.width() * 1.0) + ratio = self.logo.height() / (self.logo.width() * 1.0) maxWidth = int(0.80 * self.size().width()) maxHeight = int(0.80 * self.size().height()) proposedHeight = int(maxWidth * ratio) - if (proposedHeight <= maxHeight): + if proposedHeight <= maxHeight: width = maxWidth else: width = int(maxHeight / ratio) height = int(width * ratio) - targetLogoRect = QtCore.QRect(0,0, width, height) - targetLogoRect.moveCenter(self.rect().center() + QtCore.QPoint(0, -int(self.size().height() * 0.00))) - p.drawImage(targetLogoRect, self.m_logo, self.m_logo.rect()); - + targetLogoRect = QtCore.QRect(0, 0, width, height) + targetLogoRect.moveCenter(self.rect().center( + ) + QtCore.QPoint(0, -int(self.size().height() * 0.00))) + p.drawImage(targetLogoRect, self.logo, self.logo.rect()) diff --git a/python/examples-qt6/MyWidget1.py b/python/examples-qt6/MyWidget1.py index 5f0bb47a..cd17261c 100644 --- a/python/examples-qt6/MyWidget1.py +++ b/python/examples-qt6/MyWidget1.py @@ -9,21 +9,20 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgetsQt6 - -from PySide6 import QtWidgets, QtGui +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring +from PySide6 import QtGui from MyWidget import MyWidget class MyWidget1(MyWidget): - def __init__(self, parent = None): + def __init__(self, parent=None): super().__init__(":/assets/triangles.png", ":/assets/KDAB_bubble_white.png", parent) - - def paintEvent(self, ev): + def paintEvent(self, event): + del event # unused at this time p = QtGui.QPainter(self) p.fillRect(self.rect(), QtGui.QColor(0xCC, 0xCC, 0xCC)) - p.drawImage(self.m_background.rect(), self.m_background, self.m_background.rect()) + p.drawImage(self.background.rect(), + self.background, self.background.rect()) self.drawLogo(p) - diff --git a/python/examples-qt6/MyWidget2.py b/python/examples-qt6/MyWidget2.py index a0d8db8c..42312bbf 100644 --- a/python/examples-qt6/MyWidget2.py +++ b/python/examples-qt6/MyWidget2.py @@ -9,19 +9,19 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgetsQt6 +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring -from PySide6 import QtWidgets, QtGui, QtCore - +from PySide6 import QtGui, QtCore from MyWidget import MyWidget + class MyWidget2(MyWidget): - def __init__(self, parent = None): + def __init__(self, parent=None): super().__init__("", ":/assets/KDAB_bubble_blue.png", parent) - def paintEvent(self, ev): + def paintEvent(self, event): + del event # unused at this time p = QtGui.QPainter(self) - p.fillRect(self.rect(), QtCore.Qt.white); + p.fillRect(self.rect(), QtCore.Qt.white) self.drawLogo(p) - diff --git a/python/examples-qt6/MyWidget3.py b/python/examples-qt6/MyWidget3.py index 78277574..095114b5 100644 --- a/python/examples-qt6/MyWidget3.py +++ b/python/examples-qt6/MyWidget3.py @@ -9,24 +9,27 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgetsQt6 - -from PySide6 import QtWidgets, QtGui, QtCore +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring +from PySide6 import QtGui, QtCore from MyWidget import MyWidget + class MyWidget3(MyWidget): - def __init__(self, parent = None): + def __init__(self, parent=None): super().__init__(":/assets/base.png", ":/assets/KDAB_bubble_fulcolor.png", parent) - self.m_triangle = QtGui.QImage(":/assets/tri.png") + self.triangle = QtGui.QImage(":/assets/tri.png") - def paintEvent(self, ev): + def paintEvent(self, event): + del event # unused at this time p = QtGui.QPainter(self) p.fillRect(self.rect(), QtGui.QColor(0xD5, 0xD5, 0xD5)) - p.drawImage(self.m_background.rect(), self.m_background, self.m_background.rect()) - - targetRect = QtCore.QRect(QtCore.QPoint(self.width() - self.m_triangle.width(), self.height() - self.m_triangle.height()), self.m_triangle.size()) + p.drawImage(self.background.rect(), + self.background, self.background.rect()) + + QtCore.QRect(QtCore.QPoint(self.width() - self.triangle.width(), + self.height() - self.triangle.height()), + self.triangle.size()) self.drawLogo(p) - diff --git a/python/examples-qt6/README.txt b/python/examples-qt6/README.txt index b19456b3..2d06d9f5 100644 --- a/python/examples-qt6/README.txt +++ b/python/examples-qt6/README.txt @@ -3,6 +3,9 @@ Running python example Generate resource file with: ~# rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc +(on some systems, rcc might be invoked as rcc-qt6) + +Make sure you installed kddockwidgets and set PYTHONPATH accordingly. Run the app: ~# python3 main.py diff --git a/python/examples-qt6/main.py b/python/examples-qt6/main.py index 967b7995..3c357991 100644 --- a/python/examples-qt6/main.py +++ b/python/examples-qt6/main.py @@ -9,16 +9,26 @@ # Contact KDAB at for commercial licensing options. # -from PyKDDockWidgetsQt6 import KDDockWidgets -from MyMainWindow import MyMainWindow - -from PySide6 import QtWidgets, QtCore +''' KDDockWidgets example (Qt6) ''' import sys + +from MyMainWindow import MyMainWindow +from PySide6 import QtWidgets, QtCore + try: + # pylint: disable=unused-import import rc_assets -except: - exit("Oops.. rc_assets needs to be generated first.\nPlease run:\n rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc\n(Make sure to use the rcc from the Qt6 version used to generate the bindings!)") +except ImportError: + sys.exit( + ''' +Oops.. rc_assets needs to be generated first. +Please run: + rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc + (Make sure to use the rcc from the Qt6 version used to generate the bindings!) + On some systems rcc might be invoked as rcc-qt6. +''' + ) if __name__ == "__main__": QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) @@ -34,5 +44,4 @@ if __name__ == "__main__": mainWindow.resize(1200, 1200) mainWindow.show() - app.exec_() - + app.exec() diff --git a/python/examples/MyMainWindow.py b/python/examples/MyMainWindow.py index 58ac5e72..99ed9cef 100644 --- a/python/examples/MyMainWindow.py +++ b/python/examples/MyMainWindow.py @@ -9,6 +9,8 @@ # Contact KDAB at for commercial licensing options. # +# pylint: disable=missing-module-docstring,missing-function-docstring,missing-class-docstring + from PyKDDockWidgets import KDDockWidgets from PySide2 import QtCore, QtWidgets, QtGui @@ -17,33 +19,41 @@ from MyWidget1 import MyWidget1 from MyWidget2 import MyWidget2 from MyWidget3 import MyWidget3 -def newMyWidget(parent = None): + +def newMyWidget(parent=None): randomNumber = QtCore.QRandomGenerator.global_().bounded(0, 100) + 1 - if (randomNumber < 50): - if (randomNumber < 33): + if randomNumber < 50: + if randomNumber < 33: return MyWidget1(parent) - else: - return MyWidget3(parent) - else: - return MyWidget2(parent) + return MyWidget3(parent) + return MyWidget2(parent) + class MyMainWindow(KDDockWidgets.MainWindow): s_count = 0 s_menuCount = 0 - def __init__(self, uniqueName, options = KDDockWidgets.MainWindowOption_None, dockWidget0IsNonClosable = False, nonDockableDockWidget9 = False, restoreIsRelative = False, maxSizeForDockWidget8 = False, affinityName = "", parent = None): + def __init__(self, + uniqueName, + options=KDDockWidgets.MainWindowOption_None, + dockWidget0IsNonClosable=False, + nonDockableDockWidget9=False, + restoreIsRelative=False, + maxSizeForDockWidget8=False, + affinityName="", + parent=None): super().__init__(uniqueName, options, parent) - self.m_dockWidget0IsNonClosable = dockWidget0IsNonClosable - self.m_dockWidget9IsNonDockable = nonDockableDockWidget9 - self.m_restoreIsRelative = restoreIsRelative - self.m_maxSizeForDockWidget8 = maxSizeForDockWidget8 - self.m_dockwidgets = [] - + self.dockWidget0IsNonClosable = dockWidget0IsNonClosable + self.dockWidget9IsNonDockable = nonDockableDockWidget9 + self.restoreIsRelative = restoreIsRelative + self.maxSizeForDockWidget8 = maxSizeForDockWidget8 + self.dockwidgets = [] + menubar = self.menuBar() fileMenu = QtWidgets.QMenu("File") - self.m_toggleMenu = QtWidgets.QMenu("Toggle") + self.toggleMenu = QtWidgets.QMenu("Toggle") menubar.addMenu(fileMenu) - menubar.addMenu(self.m_toggleMenu) + menubar.addMenu(self.toggleMenu) newAction = fileMenu.addAction("New DockWidget") newAction.triggered.connect(self._newDockWidget) @@ -63,101 +73,104 @@ class MyMainWindow(KDDockWidgets.MainWindow): quitAction = fileMenu.addAction("Quit") quitAction.triggered.connect(QtWidgets.QApplication.instance().quit) - self.setAffinities([ affinityName ]) + self.setAffinities([affinityName]) self.createDockWidgets() def _newDockWidget(self): MyMainWindow.s_menuCount += 1 w = newMyWidget(self) w.setGeometry(100, 100, 400, 400) - dock = KDDockWidgets.DockWidget("new dock %d"%(MyMainWindow.s_menuCount)) + dock = KDDockWidgets.DockWidget("new dock %d" % (MyMainWindow.s_menuCount)) dock.setWidget(w) dock.resize(600, 600) dock.show() - self.m_dockwidgets.append(dock) - + self.dockwidgets.append(dock) + + # pylint: disable=no-self-use def _saveLayout(self): #saver = KDDockWidgets.LayoutSaver() #result = saver.saveToFile("mylayout.json") #print("Saving layout to disk. Result=", result) print("Not available") + # pylint: disable=no-self-use def _restoreLayout(self): #options = KDDockWidgets.RestoreOption_None - #if self.m_restoreIsRelative: + # if self.restoreIsRelative: # options |= KDDockWidgets.RestoreOption_RelativeToMainWindow #saver = KDDockWidgets.LayoutSaver(options) - #saver.restoreFromFile("mylayout.json") + # saver.restoreFromFile("mylayout.json") print("Not available") def _closeAll(self): - for dw in self.m_dockwidgets: - dw.close() + for widget in self.dockwidgets: + widget.close() def createDockWidgets(self): - if self.m_dockWidget9IsNonDockable: + if self.dockWidget9IsNonDockable: numDockWidgets = 10 else: numDockWidgets = 9 # numDockWidgets = 2 # Create 9 KDDockWidget::DockWidget and the respective widgets they're hosting (MyWidget instances) - for i in range(numDockWidgets): - self.m_dockwidgets.append(self.newDockWidget()) + for _ in range(numDockWidgets): + self.dockwidgets.append(self.newDockWidget()) # MainWindow::addDockWidget() attaches a dock widget to the main window: - initialOpts = KDDockWidgets.InitialOption(KDDockWidgets.InitialVisibilityOption.StartHidden, QtCore.QSize(500, 500)) - self.addDockWidget(self.m_dockwidgets[0], KDDockWidgets.Location_OnBottom, None, initialOpts) + initialOpts = KDDockWidgets.InitialOption(KDDockWidgets.InitialVisibilityOption.StartHidden, + QtCore.QSize(500, 500)) + self.addDockWidget(self.dockwidgets[0], KDDockWidgets.Location_OnBottom, None, initialOpts) # Here, for finer granularity we specify right of dockwidgets[0]: - self.addDockWidget(self.m_dockwidgets[1], KDDockWidgets.Location_OnRight, self.m_dockwidgets[0]) - - self.addDockWidget(self.m_dockwidgets[2], KDDockWidgets.Location_OnLeft) - self.addDockWidget(self.m_dockwidgets[3], KDDockWidgets.Location_OnBottom) - self.addDockWidget(self.m_dockwidgets[4], KDDockWidgets.Location_OnBottom) + self.addDockWidget(self.dockwidgets[1], KDDockWidgets.Location_OnRight, self.dockwidgets[0]) + + self.addDockWidget(self.dockwidgets[2], KDDockWidgets.Location_OnLeft) + self.addDockWidget(self.dockwidgets[3], KDDockWidgets.Location_OnBottom) + self.addDockWidget(self.dockwidgets[4], KDDockWidgets.Location_OnBottom) # Tab two dock widgets together - self.m_dockwidgets[3].addDockWidgetAsTab(self.m_dockwidgets[5]) + self.dockwidgets[3].addDockWidgetAsTab(self.dockwidgets[5]) # 6 is floating, as it wasn't added to the main window via MainWindow::addDockWidget(). # and we tab 7 with it. - self.m_dockwidgets[6].addDockWidgetAsTab(self.m_dockwidgets[7]) + self.dockwidgets[6].addDockWidgetAsTab(self.dockwidgets[7]) # Floating windows also support nesting, here we add 8 to the bottom of the group - self.m_dockwidgets[6].addDockWidgetToContainingWindow(self.m_dockwidgets[8], KDDockWidgets.Location_OnBottom) + self.dockwidgets[6].addDockWidgetToContainingWindow(self.dockwidgets[8], KDDockWidgets.Location_OnBottom) - floatingWindow = self.m_dockwidgets[6].window() + floatingWindow = self.dockwidgets[6].window() floatingWindow.move(100, 100) def newDockWidget(self): # Passing options is optional, we just want to illustrate Option_NotClosable here options = KDDockWidgets.DockWidget.Option_None - if (MyMainWindow.s_count == 0) and self.m_dockWidget0IsNonClosable: + if (MyMainWindow.s_count == 0) and self.dockWidget0IsNonClosable: options |= KDDockWidgets.DockWidget.Option_NotClosable - if (MyMainWindow.s_count == 9) and self.m_dockWidget9IsNonDockable: + if (MyMainWindow.s_count == 9) and self.dockWidget9IsNonDockable: options |= KDDockWidgets.DockWidget.Option_NotDockable - dock = KDDockWidgets.DockWidget("DockWidget #%d"%(MyMainWindow.s_count), options) - dock.setAffinities(self.affinities()); # optional, just to show the feature. Pass -mi to the example to see incompatible dock widgets + dock = KDDockWidgets.DockWidget("DockWidget #%d" % (MyMainWindow.s_count), options) + # optional, just to show the feature. Pass -mi to the example to see incompatible dock widgets + dock.setAffinities(self.affinities()) if MyMainWindow.s_count == 1: dock.setIcon(QtGui.QIcon.fromTheme("mail-message")) myWidget = newMyWidget(self) - if (MyMainWindow.s_count == 8) and self.m_maxSizeForDockWidget8: + if (MyMainWindow.s_count == 8) and self.maxSizeForDockWidget8: # Set a maximum size on dock #8 myWidget.setMaximumSize(200, 200) dock.setWidget(myWidget) if dock.options() & KDDockWidgets.DockWidget.Option_NotDockable: - dock.setTitle("DockWidget #%d (%s)" %(MyMainWindow.s_count, "non dockable")) + dock.setTitle("DockWidget #%d (%s)" % (MyMainWindow.s_count, "non dockable")) else: - dock.setTitle("DockWidget #%d"%(MyMainWindow.s_count)) + dock.setTitle("DockWidget #%d" % (MyMainWindow.s_count)) dock.resize(600, 600) - self.m_toggleMenu.addAction(dock.toggleAction()) + self.toggleMenu.addAction(dock.toggleAction()) MyMainWindow.s_count += 1 return dock - diff --git a/python/examples/MyWidget.py b/python/examples/MyWidget.py index e0525531..23d6a355 100644 --- a/python/examples/MyWidget.py +++ b/python/examples/MyWidget.py @@ -9,18 +9,23 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgets +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring from PySide2 import QtWidgets, QtGui, QtCore +# pylint: disable=too-few-public-methods + + class MyWidget(QtWidgets.QWidget): s_images = {} - def __init__(self, backgroundFile, logoFile, parent = None): + + def __init__(self, backgroundFile, logoFile, parent=None): super().__init__(parent) - self.m_background = self._lookupImage(backgroundFile) - self.m_logo = self._lookupImage(logoFile) + self.background = self._lookupImage(backgroundFile) + self.logo = self._lookupImage(logoFile) + # pylint: disable=no-self-use def _lookupImage(self, imageName): if imageName == "": return None @@ -29,23 +34,23 @@ class MyWidget(QtWidgets.QWidget): MyWidget.s_images[imageName] = QtGui.QImage(imageName) return MyWidget.s_images[imageName] - + def drawLogo(self, p): - if not self.m_logo: + if not self.logo: return - ratio = self.m_logo.height() / (self.m_logo.width() * 1.0) + ratio = self.logo.height() / (self.logo.width() * 1.0) maxWidth = int(0.80 * self.size().width()) maxHeight = int(0.80 * self.size().height()) proposedHeight = int(maxWidth * ratio) - if (proposedHeight <= maxHeight): + if proposedHeight <= maxHeight: width = maxWidth else: width = int(maxHeight / ratio) height = int(width * ratio) - targetLogoRect = QtCore.QRect(0,0, width, height) - targetLogoRect.moveCenter(self.rect().center() + QtCore.QPoint(0, -int(self.size().height() * 0.00))) - p.drawImage(targetLogoRect, self.m_logo, self.m_logo.rect()); - + targetLogoRect = QtCore.QRect(0, 0, width, height) + targetLogoRect.moveCenter(self.rect().center( + ) + QtCore.QPoint(0, -int(self.size().height() * 0.00))) + p.drawImage(targetLogoRect, self.logo, self.logo.rect()) diff --git a/python/examples/MyWidget1.py b/python/examples/MyWidget1.py index 4a31edcb..e0833d86 100644 --- a/python/examples/MyWidget1.py +++ b/python/examples/MyWidget1.py @@ -9,21 +9,20 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgets - -from PySide2 import QtWidgets, QtGui +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring +from PySide2 import QtGui from MyWidget import MyWidget class MyWidget1(MyWidget): - def __init__(self, parent = None): + def __init__(self, parent=None): super().__init__(":/assets/triangles.png", ":/assets/KDAB_bubble_white.png", parent) - - def paintEvent(self, ev): + def paintEvent(self, event): + del event # unused at this time p = QtGui.QPainter(self) p.fillRect(self.rect(), QtGui.QColor(0xCC, 0xCC, 0xCC)) - p.drawImage(self.m_background.rect(), self.m_background, self.m_background.rect()) + p.drawImage(self.background.rect(), + self.background, self.background.rect()) self.drawLogo(p) - diff --git a/python/examples/MyWidget2.py b/python/examples/MyWidget2.py index e4830d7f..4db68b66 100644 --- a/python/examples/MyWidget2.py +++ b/python/examples/MyWidget2.py @@ -9,19 +9,19 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgets +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring -from PySide2 import QtWidgets, QtGui, QtCore - +from PySide2 import QtGui, QtCore from MyWidget import MyWidget + class MyWidget2(MyWidget): - def __init__(self, parent = None): + def __init__(self, parent=None): super().__init__("", ":/assets/KDAB_bubble_blue.png", parent) - def paintEvent(self, ev): + def paintEvent(self, event): + del event # unused at this time p = QtGui.QPainter(self) - p.fillRect(self.rect(), QtCore.Qt.white); + p.fillRect(self.rect(), QtCore.Qt.white) self.drawLogo(p) - diff --git a/python/examples/MyWidget3.py b/python/examples/MyWidget3.py index c265c184..42aee99c 100644 --- a/python/examples/MyWidget3.py +++ b/python/examples/MyWidget3.py @@ -9,24 +9,27 @@ # Contact KDAB at for commercial licensing options. # -import PyKDDockWidgets - -from PySide2 import QtWidgets, QtGui, QtCore +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring +from PySide2 import QtGui, QtCore from MyWidget import MyWidget + class MyWidget3(MyWidget): - def __init__(self, parent = None): + def __init__(self, parent=None): super().__init__(":/assets/base.png", ":/assets/KDAB_bubble_fulcolor.png", parent) - self.m_triangle = QtGui.QImage(":/assets/tri.png") + self.triangle = QtGui.QImage(":/assets/tri.png") - def paintEvent(self, ev): + def paintEvent(self, event): + del event # unused at this time p = QtGui.QPainter(self) p.fillRect(self.rect(), QtGui.QColor(0xD5, 0xD5, 0xD5)) - p.drawImage(self.m_background.rect(), self.m_background, self.m_background.rect()) - - targetRect = QtCore.QRect(QtCore.QPoint(self.width() - self.m_triangle.width(), self.height() - self.m_triangle.height()), self.m_triangle.size()) + p.drawImage(self.background.rect(), + self.background, self.background.rect()) + + QtCore.QRect(QtCore.QPoint(self.width() - self.triangle.width(), + self.height() - self.triangle.height()), + self.triangle.size()) self.drawLogo(p) - diff --git a/python/examples/README.txt b/python/examples/README.txt index b19456b3..e320040e 100644 --- a/python/examples/README.txt +++ b/python/examples/README.txt @@ -3,6 +3,9 @@ Running python example Generate resource file with: ~# rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc +(on some systems, rcc might be invoked as rcc-qt5) + +Make sure you installed kddockwidgets and set PYTHONPATH accordingly. Run the app: ~# python3 main.py diff --git a/python/examples/main.py b/python/examples/main.py index e286133d..b8218541 100644 --- a/python/examples/main.py +++ b/python/examples/main.py @@ -9,16 +9,26 @@ # Contact KDAB at for commercial licensing options. # -from PyKDDockWidgets import KDDockWidgets -from MyMainWindow import MyMainWindow - -from PySide2 import QtWidgets, QtCore +''' KDDockWidgets example (Qt5) ''' import sys + +from MyMainWindow import MyMainWindow +from PySide2 import QtWidgets, QtCore + try: + # pylint: disable=unused-import import rc_assets -except: - exit("Oops.. rc_assets needs to be generated first.\nPlease run:\n rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc\n(Make sure to use the rcc from the Qt5 version used to generate the bindings!)") +except ImportError: + sys.exit( + ''' +Oops.. rc_assets needs to be generated first. +Please run: + rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc + (Make sure to use the rcc from the Qt5 version used to generate the bindings!) + On some systems rcc might be invoked as rcc-qt5. +''' + ) if __name__ == "__main__": QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) @@ -35,4 +45,3 @@ if __name__ == "__main__": mainWindow.show() app.exec_() - diff --git a/python/tests/CMakeLists.txt b/python/tests/CMakeLists.txt index f92e9077..65005268 100644 --- a/python/tests/CMakeLists.txt +++ b/python/tests/CMakeLists.txt @@ -1,40 +1,36 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Renato Araujo Oliveira Filho -# +# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Renato Araujo Oliveira Filho # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # # Contact KDAB at for commercial licensing options. # -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.py.cmake - ${CMAKE_CURRENT_BINARY_DIR}/config.py @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.py.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.py @ONLY) set(TEST_PYTHONPATH ${CMAKE_BINARY_DIR}/python ${CMAKE_CURRENT_BINARY_DIR}) set(TEST_LIBRARYPATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) if(WIN32) - set(TEST_LIBRARY_VAR "PATH") - string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") - string(REPLACE "\\" "/" TEST_LIBRARYPATH "${TEST_LIBRARYPATH}") - list(JOIN TEST_PYTHONPATH "\\;" TEST_PYTHONPATH) - list(JOIN TEST_LIBRARYPATH "\\;" TEST_LIBRARYPATH) + set(TEST_LIBRARY_VAR "PATH") + string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") + string(REPLACE "\\" "/" TEST_LIBRARYPATH "${TEST_LIBRARYPATH}") + list(JOIN TEST_PYTHONPATH "\\;" TEST_PYTHONPATH) + list(JOIN TEST_LIBRARYPATH "\\;" TEST_LIBRARYPATH) else() - set(TEST_LIBRARY_VAR "LD_LIBRARY_PATH") - list(JOIN TEST_PYTHONPATH ":" TEST_PYTHONPATH) - list(JOIN TEST_LIBRARYPATH ":" TEST_LIBRARYPATH) + set(TEST_LIBRARY_VAR "LD_LIBRARY_PATH") + list(JOIN TEST_PYTHONPATH ":" TEST_PYTHONPATH) + list(JOIN TEST_LIBRARYPATH ":" TEST_LIBRARYPATH) endif() -set(PYTHON_ENV_COMMON - "PYTHONPATH=${TEST_PYTHONPATH};${TEST_LIBRARY_VAR}=${TEST_LIBRARYPATH}") +set(PYTHON_ENV_COMMON "PYTHONPATH=${TEST_PYTHONPATH};${TEST_LIBRARY_VAR}=${TEST_LIBRARYPATH}") file(GLOB TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tst_*.py) foreach(test_file ${TEST_FILES}) - get_filename_component(test_name ${test_file} NAME_WE) - add_test(${test_name} ${Python3_EXECUTABLE} ${test_file}) - set_tests_properties(${test_name} PROPERTIES ENVIRONMENT - "${PYTHON_ENV_COMMON}") + get_filename_component(test_name ${test_file} NAME_WE) + add_test(${test_name} ${Python3_EXECUTABLE} ${test_file}) + set_tests_properties(${test_name} PROPERTIES ENVIRONMENT "${PYTHON_ENV_COMMON}") endforeach() diff --git a/python/tests/tst_importModule.py b/python/tests/tst_importModule.py index dee1452d..97ae79ee 100644 --- a/python/tests/tst_importModule.py +++ b/python/tests/tst_importModule.py @@ -8,12 +8,15 @@ # Contact KDAB at for commercial licensing options. # +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring + import unittest import importlib import inspect from config import TstConfig + class TestImportModules(unittest.TestCase): def test_importModules(self): m = importlib.import_module(TstConfig.bindingsNamespace + '.KDDockWidgets') @@ -25,6 +28,7 @@ class TestImportModules(unittest.TestCase): for symbol in symbols: self.assertIn(symbol, moduleSymbols) + if __name__ == '__main__': TstConfig.initLibraryPath() unittest.main() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3620e609..3250b2e4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,7 @@ # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -9,13 +9,13 @@ # if(POLICY CMP0043) - cmake_policy(SET CMP0043 NEW) + cmake_policy(SET CMP0043 NEW) endif() add_definitions( - -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_USE_QSTRINGBUILDER - -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_STRICT_ITERATORS - -DQT_NO_KEYWORDS -DQT_NO_FOREACH) + -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_USE_QSTRINGBUILDER -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT + -DQT_STRICT_ITERATORS -DQT_NO_KEYWORDS -DQT_NO_FOREACH +) set(KDDW_BACKEND_SRCS KDDockWidgets.cpp @@ -106,7 +106,8 @@ set(KDDW_BACKEND_SRCS qtcommon/Platform_qt.cpp qtcommon/Window_qt.cpp qtcommon/View_qt.cpp - kddockwidgets_resources.qrc) + kddockwidgets_resources.qrc +) set(KDDW_FRONTEND_QTWIDGETS_SRCS qtwidgets/Window_qtwidgets.cpp @@ -149,7 +150,8 @@ set(KDDW_FRONTEND_QTWIDGETS_SRCS qtwidgets/DebugWindow.cpp qtwidgets/DebugWindow.h qtwidgets/ObjectViewer.cpp - qtwidgets/ObjectViewer.h) + qtwidgets/ObjectViewer.h +) set(KDDW_FRONTEND_QTQUICK_SRCS qtquick/Window_qtquick.cpp @@ -196,19 +198,18 @@ set(KDDW_FRONTEND_QTQUICK_SRCS qtquick/views/ViewWrapper_qtquick.h qtquick/views/ClassicIndicatorsWindow_qtquick.cpp qtquick/views/ClassicIndicatorsWindow_qtquick.h - qtquick/kddockwidgets_qtquick.qrc) + qtquick/kddockwidgets_qtquick.qrc +) if(KDDockWidgets_DEVELOPER_MODE) - set(KDDW_FRONTEND_QTQUICK_SRCS ${KDDW_FRONTEND_QTQUICK_SRCS} - qtquick/TestHelpers_qtquick.cpp) + set(KDDW_FRONTEND_QTQUICK_SRCS ${KDDW_FRONTEND_QTQUICK_SRCS} qtquick/TestHelpers_qtquick.cpp) - set(KDDW_FRONTEND_QTWIDGETS_SRCS ${KDDW_FRONTEND_QTWIDGETS_SRCS} - qtwidgets/TestHelpers_qtwidgets.cpp) + set(KDDW_FRONTEND_QTWIDGETS_SRCS ${KDDW_FRONTEND_QTWIDGETS_SRCS} qtwidgets/TestHelpers_qtwidgets.cpp) endif() -set(KDDW_FRONTEND_DUMMY_SRCS - dummy/ViewFactory_dummy.cpp dummy/Platform_dummy.cpp dummy/Window_dummy.cpp - dummy/views/View_dummy.cpp dummy/TestHelpers_dummy.cpp) +set(KDDW_FRONTEND_DUMMY_SRCS dummy/ViewFactory_dummy.cpp dummy/Platform_dummy.cpp dummy/Window_dummy.cpp + dummy/views/View_dummy.cpp dummy/TestHelpers_dummy.cpp +) set(KDDW_PUBLIC_HEADERS docks_export.h @@ -222,12 +223,12 @@ set(KDDW_PUBLIC_HEADERS Window.h ViewFactory.h Qt5Qt6Compat_p.h - Platform.h) + Platform.h +) set(KDDW_PRIVATE_HEADERS - private/DragController_p.h private/Draggable_p.h private/LayoutSaver_p.h - private/WindowBeingDragged_p.h private/WidgetResizeHandler_p.h - DockRegistry.h # No ABI guarantees for now, so copy to private/ + private/DragController_p.h private/Draggable_p.h private/LayoutSaver_p.h private/WindowBeingDragged_p.h + private/WidgetResizeHandler_p.h DockRegistry.h # No ABI guarantees for now, so copy to private/ ) set(KDDW_CONTROLLER_HEADERS @@ -244,7 +245,8 @@ set(KDDW_CONTROLLER_HEADERS controllers/MainWindow.h controllers/Separator.h controllers/Stack.h - controllers/TitleBar.h) + controllers/TitleBar.h +) set(KDDW_VIEWINTERFACE_HEADERS views/StackViewInterface.h @@ -255,115 +257,107 @@ set(KDDW_VIEWINTERFACE_HEADERS views/DockWidgetViewInterface.h views/MainWindowMDIViewInterface.h views/MainWindowViewInterface.h - views/GroupViewInterface.h) + views/GroupViewInterface.h +) -set(KDDW_INDICATOR_HEADERS - controllers/indicators/NullIndicators.h - controllers/indicators/ClassicIndicators.h - controllers/indicators/SegmentedIndicators.h) +set(KDDW_INDICATOR_HEADERS controllers/indicators/NullIndicators.h controllers/indicators/ClassicIndicators.h + controllers/indicators/SegmentedIndicators.h +) set(DOCKSLIBS_SRCS ${KDDW_BACKEND_SRCS}) if(KDDW_FRONTEND_QTWIDGETS) - set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_QTWIDGETS_SRCS}) + set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_QTWIDGETS_SRCS}) endif() if(KDDW_FRONTEND_QTQUICK) - set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_QTQUICK_SRCS}) + set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_QTQUICK_SRCS}) endif() if(KDDW_FRONTEND_DUMMY) - set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_DUMMY_SRCS}) + set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_DUMMY_SRCS}) endif() # Generate C/C++ CamelCase forwarding headers (only public includes) include(ECMGenerateHeaders) ecm_generate_headers( - camelcase_HEADERS - ORIGINAL - CAMELCASE - HEADER_NAMES - Config - # DockWidget DockWidgetBase - FocusScope - ViewFactory, - # DefaultWidgetFactory - LayoutSaver - # MainWindow MainWindowBase MainWindowMDI + camelcase_HEADERS + ORIGINAL + CAMELCASE + HEADER_NAMES + Config + # DockWidget DockWidgetBase + FocusScope + ViewFactory, + # DefaultWidgetFactory + LayoutSaver + # MainWindow MainWindowBase MainWindowMDI ) -add_library(kddockwidgets ${KDDockWidgets_LIBRARY_MODE} ${DOCKSLIBS_SRCS} - ${KDDW_PUBLIC_HEADERS}) +add_library(kddockwidgets ${KDDockWidgets_LIBRARY_MODE} ${DOCKSLIBS_SRCS} ${KDDW_PUBLIC_HEADERS}) add_library(KDAB::kddockwidgets ALIAS kddockwidgets) -set_target_properties( - kddockwidgets PROPERTIES OUTPUT_NAME - "kddockwidgets${KDDockWidgets_LIBRARY_QTID}") +set_target_properties(kddockwidgets PROPERTIES OUTPUT_NAME "kddockwidgets${KDDockWidgets_LIBRARY_QTID}") set_compiler_flags(kddockwidgets) if(KDDockWidgets_QT6) - set(DOCKS_INCLUDES_INSTALL_PATH "include/kddockwidgets-qt6") + set(DOCKS_INCLUDES_INSTALL_PATH "include/kddockwidgets-qt6") else() - set(DOCKS_INCLUDES_INSTALL_PATH "include/") + set(DOCKS_INCLUDES_INSTALL_PATH "include/") endif() # Use a separate target for our kdbindings/signal.h header as it doesn't compile # with -Wweak-vtables add_library(kdbindings INTERFACE) -target_include_directories( - kdbindings SYSTEM - INTERFACE $) +target_include_directories(kdbindings SYSTEM INTERFACE $) target_include_directories( - kddockwidgets - PUBLIC $ - $ - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + kddockwidgets + PUBLIC $ + $ + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} +) if(KDDW_FRONTEND_QTWIDGETS) - target_include_directories( - kddockwidgets - PUBLIC $) - - if(KDockWidgets_PRETTY_QTWIDGETS_HEADERS) target_include_directories( - kddockwidgets - PUBLIC - $ + kddockwidgets PUBLIC $ ) - endif() + if(KDockWidgets_PRETTY_QTWIDGETS_HEADERS) + target_include_directories( + kddockwidgets PUBLIC $ + ) + endif() endif() if(KDDW_FRONTEND_QTQUICK) - target_include_directories( - kddockwidgets - PUBLIC $) + target_include_directories(kddockwidgets PUBLIC $) endif() target_compile_definitions( - kddockwidgets PRIVATE QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII - QT_NO_URL_CAST_FROM_STRING QT_NO_CAST_FROM_BYTEARRAY) + kddockwidgets PRIVATE QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII QT_NO_URL_CAST_FROM_STRING + QT_NO_CAST_FROM_BYTEARRAY +) if(KDDockWidgets_STATIC) - target_compile_definitions(kddockwidgets PUBLIC KDDOCKWIDGETS_STATICLIB) + target_compile_definitions(kddockwidgets PUBLIC KDDOCKWIDGETS_STATICLIB) else() - target_compile_definitions(kddockwidgets PRIVATE BUILDING_DOCKS_LIBRARY) + target_compile_definitions(kddockwidgets PRIVATE BUILDING_DOCKS_LIBRARY) endif() if(CMAKE_COMPILER_IS_GNUCXX OR IS_CLANG_BUILD) - target_compile_options(kddockwidgets PRIVATE -Wshadow) - if(NOT MSVC) - target_compile_options(kddockwidgets PRIVATE -fvisibility=hidden) - endif() + target_compile_options(kddockwidgets PRIVATE -Wshadow) + if(NOT MSVC) + target_compile_options(kddockwidgets PRIVATE -fvisibility=hidden) + endif() - # Disable -Wconversion for Qt6. The qsizetype to int conversions are harmless - if(NOT KDDockWidgets_QT6) - target_compile_options(kddockwidgets PRIVATE -Wconversion) - endif() + # Disable -Wconversion for Qt6. The qsizetype to int conversions are harmless + if(NOT KDDockWidgets_QT6) + target_compile_options(kddockwidgets PRIVATE -Wconversion) + endif() - if(IS_CLANG_BUILD) - target_compile_options(kddockwidgets PRIVATE -Wweak-vtables) - endif() + if(IS_CLANG_BUILD) + target_compile_options(kddockwidgets PRIVATE -Wweak-vtables) + endif() endif() # BEGIN coverage @@ -371,249 +365,230 @@ add_library(coverage_options INTERFACE) if(KDDockWidgets_CODE_COVERAGE AND (CMAKE_COMPILER_IS_GNUCXX OR IS_CLANG_BUILD) - AND NOT MSVC) - if(KDDockWidgets_DEVELOPER_MODE) - # Add required flags (GCC & LLVM/Clang) - target_compile_options(coverage_options INTERFACE --coverage) - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) - target_link_options(coverage_options INTERFACE --coverage) - else() - target_link_libraries(coverage_options INTERFACE --coverage) + AND NOT MSVC +) + if(KDDockWidgets_DEVELOPER_MODE) + # Add required flags (GCC & LLVM/Clang) + target_compile_options(coverage_options INTERFACE --coverage) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) + target_link_options(coverage_options INTERFACE --coverage) + else() + target_link_libraries(coverage_options INTERFACE --coverage) + endif() endif() - endif() endif() # END coverage if(KDDW_FRONTEND_QTWIDGETS) - target_link_libraries( - kddockwidgets - PUBLIC Qt${Qt_VERSION_MAJOR}::Widgets - PRIVATE Qt${Qt_VERSION_MAJOR}::WidgetsPrivate) + target_link_libraries( + kddockwidgets + PUBLIC Qt${Qt_VERSION_MAJOR}::Widgets + PRIVATE Qt${Qt_VERSION_MAJOR}::WidgetsPrivate + ) endif() if(KDDW_FRONTEND_QTQUICK) - target_link_libraries( - kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::Quick - Qt${Qt_VERSION_MAJOR}::QuickControls2) - target_link_libraries(kddockwidgets PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate) + target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::Quick Qt${Qt_VERSION_MAJOR}::QuickControls2) + target_link_libraries(kddockwidgets PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate) endif() if(KDDockWidgets_CODE_COVERAGE) - target_link_libraries(kddockwidgets PUBLIC coverage_options) + target_link_libraries(kddockwidgets PUBLIC coverage_options) endif() if(KDDockWidgets_DEVELOPER_MODE) - find_package(Qt${Qt_VERSION_MAJOR}Test ${QT_MIN_VERSION} REQUIRED) - target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::Test) - + find_package(Qt${Qt_VERSION_MAJOR}Test ${QT_MIN_VERSION} REQUIRED) + target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::Test) endif() target_link_libraries(kddockwidgets PRIVATE kdbindings) if(WIN32) - target_link_libraries(kddockwidgets PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate - dwmapi) + target_link_libraries(kddockwidgets PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate dwmapi) elseif( - NOT APPLE - AND NOT EMSCRIPTEN - AND NOT KDDockWidgets_QT6 - AND KDDockWidgets_X11EXTRAS) - find_package(Qt${Qt_VERSION_MAJOR}X11Extras) - target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::X11Extras) + NOT APPLE + AND NOT EMSCRIPTEN + AND NOT KDDockWidgets_QT6 + AND KDDockWidgets_X11EXTRAS +) + find_package(Qt${Qt_VERSION_MAJOR}X11Extras) + target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::X11Extras) endif() if(KDDockWidgets_XLib) - target_link_libraries(kddockwidgets PRIVATE X11) + target_link_libraries(kddockwidgets PRIVATE X11) endif() find_package(nlohmann_json) if(nlohmann_json_FOUND) - target_link_libraries(kddockwidgets PRIVATE nlohmann_json::nlohmann_json) + target_link_libraries(kddockwidgets PRIVATE nlohmann_json::nlohmann_json) else() - message("nlohmann_json not found in system. Using our own bundled one") - target_include_directories(kddockwidgets SYSTEM PRIVATE 3rdparty/nlohmann) + message("nlohmann_json not found in system. Using our own bundled one") + target_include_directories(kddockwidgets SYSTEM PRIVATE 3rdparty/nlohmann) endif() -set_target_properties( - kddockwidgets PROPERTIES SOVERSION ${KDDockWidgets_SOVERSION} - VERSION ${KDDockWidgets_VERSION}) +set_target_properties(kddockwidgets PROPERTIES SOVERSION ${KDDockWidgets_SOVERSION} VERSION ${KDDockWidgets_VERSION}) # version libraries on Windows if(WIN32) - if(CMAKE_BUILD_TYPE) - set(postfix ${KDDockWidgets_VERSION_MAJOR}) - string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE) - if(${UPPER_BUILD_TYPE} MATCHES "^DEBUG") - string(CONCAT postfix ${postfix} "d") - set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX ${postfix}) - else() - set_target_properties(kddockwidgets PROPERTIES ${UPPER_BUILD_TYPE}_POSTFIX - ${postfix}) + if(CMAKE_BUILD_TYPE) + set(postfix ${KDDockWidgets_VERSION_MAJOR}) + string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE) + if(${UPPER_BUILD_TYPE} MATCHES "^DEBUG") + string(CONCAT postfix ${postfix} "d") + set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX ${postfix}) + else() + set_target_properties(kddockwidgets PROPERTIES ${UPPER_BUILD_TYPE}_POSTFIX ${postfix}) + endif() + elseif(CMAKE_CONFIGURATION_TYPES) + # Visual Studio generator + set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX d) endif() - elseif(CMAKE_CONFIGURATION_TYPES) - # Visual Studio generator - set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX d) - endif() endif() install( - TARGETS kddockwidgets kdbindings - EXPORT kddockwidgetsTargets - RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} - LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} - ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR}) + TARGETS kddockwidgets kdbindings + EXPORT kddockwidgetsTargets + RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} + LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} + ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR} +) if(MSVC AND NOT KDDockWidgets_STATIC) - install( - FILES - "$/$" - DESTINATION ${INSTALL_LIBRARY_DIR} - CONFIGURATIONS Debug RelWithDebInfo) + install( + FILES "$/$" + DESTINATION ${INSTALL_LIBRARY_DIR} + CONFIGURATIONS Debug RelWithDebInfo + ) endif() # install(FILES ${camelcase_HEADERS} DESTINATION # ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) -install(FILES ${KDDW_PUBLIC_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) -install(FILES ${KDDW_PRIVATE_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private) -install(FILES ${KDDW_CONTROLLER_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/controllers) -install(FILES ${KDDW_VIEWINTERFACE_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/views) -install( - FILES ${KDDW_INDICATOR_HEADERS} - DESTINATION - ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/controllers/indicators) +install(FILES ${KDDW_PUBLIC_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) +install(FILES ${KDDW_PRIVATE_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private) +install(FILES ${KDDW_CONTROLLER_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/controllers) +install(FILES ${KDDW_VIEWINTERFACE_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/views) +install(FILES ${KDDW_INDICATOR_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/controllers/indicators) if(KDDW_FRONTEND_QTWIDGETS) - set(KDDW_QTWIDGET_HEADERS qtwidgets/Platform_qtwidgets.h - qtwidgets/ViewFactory_qtwidgets.h) + set(KDDW_QTWIDGET_HEADERS qtwidgets/Platform_qtwidgets.h qtwidgets/ViewFactory_qtwidgets.h) - set(KDDW_QTWIDGET_VIEW_HEADERS - qtwidgets/views/DockWidget_qtwidgets.h - qtwidgets/views/Separator_qtwidgets.h - qtwidgets/views/RubberBand_qtwidgets.h - qtwidgets/views/SideBar_qtwidgets.h - qtwidgets/views/FloatingWindow_qtwidgets.h - qtwidgets/views/View_qtwidgets.h - qtwidgets/views/MainWindowMDI_qtwidgets.h - qtwidgets/views/ViewWrapper_qtwidgets.h - qtwidgets/views/MDILayout_qtwidgets.h - qtwidgets/views/MDIArea_qtwidgets.h - qtwidgets/views/DropArea_qtwidgets.h - qtwidgets/views/Stack_qtwidgets.h - qtwidgets/views/Group_qtwidgets.h - qtwidgets/views/TabBar_qtwidgets.h - qtwidgets/views/ClassicIndicatorsWindow_qtwidgets.h - qtwidgets/views/SegmentedIndicatorsOverlay_qtwidgets.h - qtwidgets/views/MainWindow_qtwidgets.h - qtwidgets/views/TitleBar_qtwidgets.h) + set(KDDW_QTWIDGET_VIEW_HEADERS + qtwidgets/views/DockWidget_qtwidgets.h + qtwidgets/views/Separator_qtwidgets.h + qtwidgets/views/RubberBand_qtwidgets.h + qtwidgets/views/SideBar_qtwidgets.h + qtwidgets/views/FloatingWindow_qtwidgets.h + qtwidgets/views/View_qtwidgets.h + qtwidgets/views/MainWindowMDI_qtwidgets.h + qtwidgets/views/ViewWrapper_qtwidgets.h + qtwidgets/views/MDILayout_qtwidgets.h + qtwidgets/views/MDIArea_qtwidgets.h + qtwidgets/views/DropArea_qtwidgets.h + qtwidgets/views/Stack_qtwidgets.h + qtwidgets/views/Group_qtwidgets.h + qtwidgets/views/TabBar_qtwidgets.h + qtwidgets/views/ClassicIndicatorsWindow_qtwidgets.h + qtwidgets/views/SegmentedIndicatorsOverlay_qtwidgets.h + qtwidgets/views/MainWindow_qtwidgets.h + qtwidgets/views/TitleBar_qtwidgets.h + ) - set(KDDW_QTWIDGET_PRETTY_HEADERS - fwd_headers/qtwidgets_pretty/kddockwidgets/MainWindow.h - fwd_headers/qtwidgets_pretty/kddockwidgets/DockWidget.h) + set(KDDW_QTWIDGET_PRETTY_HEADERS fwd_headers/qtwidgets_pretty/kddockwidgets/MainWindow.h + fwd_headers/qtwidgets_pretty/kddockwidgets/DockWidget.h + ) - install(FILES ${KDDW_QTWIDGET_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) - install(FILES ${KDDW_QTWIDGET_VIEW_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/views) + install(FILES ${KDDW_QTWIDGET_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) + install(FILES ${KDDW_QTWIDGET_VIEW_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/views) - if(KDockWidgets_PRETTY_QTWIDGETS_HEADERS) - install(FILES ${KDDW_QTWIDGET_PRETTY_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) - endif() + if(KDockWidgets_PRETTY_QTWIDGETS_HEADERS) + install(FILES ${KDDW_QTWIDGET_PRETTY_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) + endif() endif() if(KDDW_FRONTEND_QTQUICK) - set(KDDW_QTQUICK_HEADERS - qtquick/ViewFactory_qtquick.h qtquick/DockWidgetInstantiator.h - qtquick/Platform_qtquick.h qtquick/LayoutSaverInstantiator.h - qtquick/MainWindowInstantiator.h qtquick/MDIDockingAreaInstantiator.h) + set(KDDW_QTQUICK_HEADERS + qtquick/ViewFactory_qtquick.h qtquick/DockWidgetInstantiator.h qtquick/Platform_qtquick.h + qtquick/LayoutSaverInstantiator.h qtquick/MainWindowInstantiator.h qtquick/MDIDockingAreaInstantiator.h + ) - set(KDDW_QTQUICK_VIEW_HEADERS - qtquick/views/ClassicIndicatorsWindow_qtquick.h - qtquick/views/View_qtquick.h - qtquick/views/Separator_qtquick.h - qtquick/views/MainWindowMDI_qtquick.h - qtquick/views/RubberBand_qtquick.h - qtquick/views/MainWindow_qtquick.h - qtquick/views/Separator_quick.h - qtquick/views/FloatingWindow_qtquick.h - qtquick/views/SideBar_qtquick.h - qtquick/views/TabBar_qtquick.h - qtquick/views/DockWidget_qtquick.h - qtquick/views/Stack_qtquick.h - qtquick/views/MDILayout_qtquick.h - qtquick/views/DropArea_qtquick.h - qtquick/views/Group_qtquick.h - qtquick/views/TitleBar_qtquick.h - qtquick/views/ViewWrapper_qtquick.h) + set(KDDW_QTQUICK_VIEW_HEADERS + qtquick/views/ClassicIndicatorsWindow_qtquick.h + qtquick/views/View_qtquick.h + qtquick/views/Separator_qtquick.h + qtquick/views/MainWindowMDI_qtquick.h + qtquick/views/RubberBand_qtquick.h + qtquick/views/MainWindow_qtquick.h + qtquick/views/Separator_quick.h + qtquick/views/FloatingWindow_qtquick.h + qtquick/views/SideBar_qtquick.h + qtquick/views/TabBar_qtquick.h + qtquick/views/DockWidget_qtquick.h + qtquick/views/Stack_qtquick.h + qtquick/views/MDILayout_qtquick.h + qtquick/views/DropArea_qtquick.h + qtquick/views/Group_qtquick.h + qtquick/views/TitleBar_qtquick.h + qtquick/views/ViewWrapper_qtquick.h + ) - install(FILES ${KDDW_QTQUICK_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) - install(FILES ${KDDW_QTQUICK_VIEW_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/views) + install(FILES ${KDDW_QTQUICK_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) + install(FILES ${KDDW_QTQUICK_VIEW_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/views) endif() if(KDDW_FRONTEND_QTWIDGETS OR KDDW_FRONTEND_QTQUICK) - set(KDDW_QT_HEADERS qtcommon/Platform_qt.h qtcommon/View_qt.h) - install(FILES ${KDDW_QT_HEADERS} - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) + set(KDDW_QT_HEADERS qtcommon/Platform_qt.h qtcommon/View_qt.h) + install(FILES ${KDDW_QT_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) endif() # Generate library version files include(ECMSetupVersion) ecm_setup_version( - ${KDDockWidgets_VERSION} - VARIABLE_PREFIX - KDDOCKWIDGETS - VERSION_HEADER - "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" - PACKAGE_VERSION_FILE - "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}ConfigVersion.cmake" - SOVERSION - ${KDDockWidgets_SOVERSION} - COMPATIBILITY - AnyNewerVersion) + ${KDDockWidgets_VERSION} + VARIABLE_PREFIX + KDDOCKWIDGETS + VERSION_HEADER + "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" + PACKAGE_VERSION_FILE + "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}ConfigVersion.cmake" + SOVERSION + ${KDDockWidgets_SOVERSION} + COMPATIBILITY + AnyNewerVersion +) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" - DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets +) install( - EXPORT kddockwidgetsTargets - FILE KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Targets.cmake - NAMESPACE KDAB:: - DESTINATION - ${INSTALL_LIBRARY_DIR}/cmake/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}) -configure_file(KDDockWidgetsConfig.cmake.in - KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Config.cmake @ONLY) -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}ConfigVersion.cmake" - DESTINATION - ${INSTALL_LIBRARY_DIR}/cmake/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}) + EXPORT kddockwidgetsTargets + FILE KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Targets.cmake + NAMESPACE KDAB:: + DESTINATION ${INSTALL_LIBRARY_DIR}/cmake/KDDockWidgets${KDDockWidgets_LIBRARY_QTID} +) +configure_file(KDDockWidgetsConfig.cmake.in KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Config.cmake @ONLY) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}ConfigVersion.cmake" + DESTINATION ${INSTALL_LIBRARY_DIR}/cmake/KDDockWidgets${KDDockWidgets_LIBRARY_QTID} +) if(KDDockWidgets_DEVELOPER_MODE) - # Under developer mode since kddw might be a sub-folder of a project setting a - # different value for QT_DISABLE_DEPRECATED_BEFORE - target_compile_definitions(kddockwidgets - PRIVATE QT_DISABLE_DEPRECATED_BEFORE=0x060000) + # Under developer mode since kddw might be a sub-folder of a project setting a + # different value for QT_DISABLE_DEPRECATED_BEFORE + target_compile_definitions(kddockwidgets PRIVATE QT_DISABLE_DEPRECATED_BEFORE=0x060000) - option(KDDockWidgets_LINTER "Build the layout linter" ON) + option(KDDockWidgets_LINTER "Build the layout linter" ON) - if(KDDockWidgets_LINTER) + if(KDDockWidgets_LINTER) + set(LINTER_SRCS layoutlinter_main.cpp) + if(KDDW_FRONTEND_QTQUICK) + # QtQuick needs main.qml to create views + set(LINTER_SRCS ${LINTER_SRCS} ../tests/test_resources.qrc) + endif() - set(LINTER_SRCS layoutlinter_main.cpp) - if(KDDW_FRONTEND_QTQUICK) - # QtQuick needs main.qml to create views - set(LINTER_SRCS ${LINTER_SRCS} ../tests/test_resources.qrc) + add_executable(kddockwidgets_linter ${LINTER_SRCS}) + target_link_libraries(kddockwidgets_linter kddockwidgets) endif() - - add_executable(kddockwidgets_linter ${LINTER_SRCS}) - target_link_libraries(kddockwidgets_linter kddockwidgets) - endif() - endif() diff --git a/src/fwd_headers/kddockwidgets/private/DropAreaWithCentralFrame_p.h b/src/fwd_headers/kddockwidgets/private/DropAreaWithCentralFrame_p.h new file mode 100644 index 00000000..323e422f --- /dev/null +++ b/src/fwd_headers/kddockwidgets/private/DropAreaWithCentralFrame_p.h @@ -0,0 +1,12 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Sergio Martins + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +#include "../../../private/DropAreaWithCentralFrame_p.h" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 15ea94e3..adcedb51 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -10,7 +10,7 @@ # if(POLICY CMP0043) - cmake_policy(SET CMP0043 NEW) + cmake_policy(SET CMP0043 NEW) endif() find_package(Qt${Qt_VERSION_MAJOR}Test ${QT_MIN_VERSION} REQUIRED) @@ -30,30 +30,24 @@ add_definitions(-DQT_NO_KEYWORDS) # tst_docks set(TESTING_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/test_resources.qrc) add_executable(tst_docks tst_docks.cpp ${TESTING_SRCS} ${TESTING_RESOURCES}) -target_link_libraries(tst_docks kdbindings kddockwidgets - Qt${Qt_VERSION_MAJOR}::Test) +target_link_libraries(tst_docks kdbindings kddockwidgets Qt${Qt_VERSION_MAJOR}::Test) set_compiler_flags(tst_docks) # tst_qtwidgets if(KDDW_FRONTEND_QTWIDGETS) - add_executable(tst_qtwidgets qtwidgets/tst_qtwidgets.cpp ${TESTING_SRCS} - ${TESTING_RESOURCES}) - target_link_libraries(tst_qtwidgets kdbindings kddockwidgets - Qt${Qt_VERSION_MAJOR}::Test) - set_compiler_flags(tst_qtwidgets) + add_executable(tst_qtwidgets qtwidgets/tst_qtwidgets.cpp ${TESTING_SRCS} ${TESTING_RESOURCES}) + target_link_libraries(tst_qtwidgets kdbindings kddockwidgets Qt${Qt_VERSION_MAJOR}::Test) + set_compiler_flags(tst_qtwidgets) endif() if(KDDW_FRONTEND_QTQUICK) - add_executable(tst_qtquick qtquick/tst_qtquick.cpp ${TESTING_SRCS} - ${TESTING_RESOURCES}) - target_link_libraries(tst_qtquick kddockwidgets kdbindings - Qt${Qt_VERSION_MAJOR}::Test) - set_compiler_flags(tst_qtquick) + add_executable(tst_qtquick qtquick/tst_qtquick.cpp ${TESTING_SRCS} ${TESTING_RESOURCES}) + target_link_libraries(tst_qtquick kddockwidgets kdbindings Qt${Qt_VERSION_MAJOR}::Test) + set_compiler_flags(tst_qtquick) endif() add_executable(tst_multisplitter tst_multisplitter.cpp) -target_link_libraries(tst_multisplitter kddockwidgets kdbindings - Qt${Qt_VERSION_MAJOR}::Test) +target_link_libraries(tst_multisplitter kddockwidgets kdbindings Qt${Qt_VERSION_MAJOR}::Test) set_compiler_flags(tst_multisplitter) # tests_launcher @@ -87,10 +81,8 @@ target_link_libraries(tst_tabbar kddockwidgets kdbindings) add_executable(tst_separator controllers/tst_separator.cpp ${TESTING_RESOURCES}) target_link_libraries(tst_separator kddockwidgets kdbindings) -add_executable(tst_floatingwindow controllers/tst_floatingwindow.cpp - ${TESTING_RESOURCES}) +add_executable(tst_floatingwindow controllers/tst_floatingwindow.cpp ${TESTING_RESOURCES}) target_link_libraries(tst_floatingwindow kddockwidgets kdbindings) -add_executable(tst_dockwidget controllers/tst_dockwidget.cpp - ${TESTING_RESOURCES}) +add_executable(tst_dockwidget controllers/tst_dockwidget.cpp ${TESTING_RESOURCES}) target_link_libraries(tst_dockwidget kddockwidgets kdbindings) diff --git a/tests/fuzzer/CMakeLists.txt b/tests/fuzzer/CMakeLists.txt index 4c2e58f4..80da9f71 100644 --- a/tests/fuzzer/CMakeLists.txt +++ b/tests/fuzzer/CMakeLists.txt @@ -1,8 +1,8 @@ # # This file is part of KDDockWidgets. # -# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group -# company Author: Sergio Martins +# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Sergio Martins # # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only # @@ -12,6 +12,5 @@ add_executable(fuzzer main.cpp Fuzzer.cpp Operations.cpp) set_property(TARGET fuzzer PROPERTY CXX_STANDARD 17) -target_link_libraries(fuzzer kddockwidgets Qt${Qt_VERSION_MAJOR}::Widgets - Qt${Qt_VERSION_MAJOR}::Test) +target_link_libraries(fuzzer kddockwidgets Qt${Qt_VERSION_MAJOR}::Widgets Qt${Qt_VERSION_MAJOR}::Test) set_compiler_flags(fuzzer)