├── .appveyor.yml ├── .clang-format ├── .gitattributes ├── .github └── workflows │ └── linux-builds.yml ├── .gitignore ├── .project ├── .travis.yml ├── CMakeLists.txt ├── LICENSE ├── MANIFEST.in ├── README.md ├── ads.pri ├── ads.pro ├── adsConfig.cmake ├── cmake └── modules │ ├── GetGitRevisionDescription.cmake │ └── GetGitRevisionDescription.cmake.in ├── demo ├── CMakeLists.txt ├── ImageViewer.cpp ├── ImageViewer.h ├── MainWindow.cpp ├── MainWindow.h ├── MyDockAreaTitleBar.h ├── RenderWidget.cpp ├── RenderWidget.h ├── StatusDialog.cpp ├── StatusDialog.h ├── StatusDialog.ui ├── app.css ├── app.ico ├── app.rc ├── demo.pro ├── demo.qrc ├── images │ ├── ads_icon.svg │ ├── ads_icon2.svg │ ├── ads_logo.svg │ ├── ads_tile_blue.svg │ ├── ads_tile_blue_light.svg │ ├── ads_tile_green.svg │ ├── ads_tile_orange.svg │ ├── color_lens.svg │ ├── create_floating_editor.svg │ ├── create_floating_table.svg │ ├── crop_original.svg │ ├── custom-menu-button.svg │ ├── date_range.svg │ ├── docked_editor.svg │ ├── edit.svg │ ├── find_in_page.svg │ ├── folder.svg │ ├── folder_open.svg │ ├── font_download.svg │ ├── fullscreen.svg │ ├── grid_on.svg │ ├── help_outline.svg │ ├── lock.svg │ ├── lock_open.svg │ ├── lock_outline.svg │ ├── material_icons_license.txt │ ├── note_add.svg │ ├── panorama.svg │ ├── perm_media.svg │ ├── photo.svg │ ├── picture_in_picture.svg │ ├── plus.svg │ ├── restore.svg │ ├── save.svg │ ├── tab.svg │ ├── zoom_in.svg │ ├── zoom_out.svg │ └── zoom_out_map.svg ├── main.cpp ├── main.py ├── mainwindow.ui ├── res │ └── visual_studio_light.css └── status_dialog.py ├── doc ├── AutoHide_Animation.gif ├── AutoHide_Change_Sidebar.gif ├── AutoHide_Context_Menu.png ├── AutoHide_Drag_DockArea.gif ├── AutoHide_Drag_to_Float_or_Dock.gif ├── AutoHide_Drag_to_Sidebar.gif ├── AutoHide_Movie.gif ├── AutoHide_PinTo.png ├── AutoHide_Sort_Tabs.gif ├── AutoHide_Tab_Insert_Order.gif ├── DockArea_Tab_Insertion_Order.gif ├── Feature_ImageViewer.png ├── TabMenu.png ├── TabMenu_dark.png ├── ads_icon.svg ├── ads_icon_256.png ├── ads_icon_512.png ├── ads_logo.svg ├── ads_logo_ukraine.jpg ├── ads_qt_marketplace_description.md ├── ads_qt_marketplace_manifest.json ├── advanced-docking_video.png ├── autohide-feature-demo.png ├── central_widget.gif ├── cfg_flag_ActiveTabHasCloseButton_false.png ├── cfg_flag_ActiveTabHasCloseButton_true.png ├── cfg_flag_AllTabsHaveCloseButton_true.png ├── cfg_flag_AlwaysShowTabs_false_true.png ├── cfg_flag_AutoHideCloseButtonCollapsesDock_false.gif ├── cfg_flag_AutoHideCloseButtonCollapsesDock_true.gif ├── cfg_flag_AutoHideHasCloseButton.png ├── cfg_flag_AutoHideHasMinimizeButton.png ├── cfg_flag_AutoHideOpenOnDragHover.gif ├── cfg_flag_AutoHideSideBarsIconOnly_false.png ├── cfg_flag_AutoHideSideBarsIconOnly_true.png ├── cfg_flag_DisableTabTextEliding_false.png ├── cfg_flag_DisableTabTextEliding_true.png ├── cfg_flag_DockAreaDynamicTabsMenuButtonVisibility_true_hidden.png ├── cfg_flag_DockAreaDynamicTabsMenuButtonVisibility_true_visible.png ├── cfg_flag_DockAreaHasAutoHideButton.png ├── cfg_flag_DockAreaHasCloseButton_false.png ├── cfg_flag_DockAreaHasCloseButton_true.png ├── cfg_flag_DockAreaHasTabsMenuButton_false_true.png ├── cfg_flag_DockAreaHasUndockButton_false_true.png ├── cfg_flag_DockAreaHideDisabledButtons_false.png ├── cfg_flag_DockAreaHideDisabledButtons_true.png ├── cfg_flag_DragPreviewHasWindowFrame_true.png ├── cfg_flag_DragPreviewShowsContentPixmap_false.png ├── cfg_flag_DragPreviewShowsContentPixmap_true.png ├── cfg_flag_EqualSplitOnInsertion_false.png ├── cfg_flag_EqualSplitOnInsertion_true.png ├── cfg_flag_FloatingContainerForceNativeTitleBar_false.png ├── cfg_flag_FloatingContainerForceNativeTitleBar_true.png ├── cfg_flag_FloatingContainerHasWidgetIcon_false.png ├── cfg_flag_FloatingContainerHasWidgetIcon_true.png ├── cfg_flag_FloatingContainerHasWidgetTitle_false.png ├── cfg_flag_FloatingContainerHasWidgetTitle_true.png ├── cfg_flag_FocusHighlighting.gif ├── cfg_flag_HideSingleCentralWidgetTitleBar_false.png ├── cfg_flag_HideSingleCentralWidgetTitleBar_true.png ├── cfg_flag_MiddleMouseButtonClosesTab.gif ├── cfg_flag_RetainTabSizeWhenCloseButtonHidden_true.png ├── cfg_flag_ShowTabTextOnlyForActiveTab_true.png ├── donate.png ├── dynamic_drag_preview.gif ├── floating-widget-dragndrop.png ├── floating-widget-dragndrop_dark.png ├── grouped-dragging.gif ├── grouped-dragging.png ├── grouped-dragging_dark.png ├── linux_kubuntu_1804.png ├── linux_ubuntu_1910.png ├── macos.png ├── non_opaque_resizing.gif ├── non_opaque_undocking.gif ├── opaque_resizing.gif ├── opaque_undocking.gif ├── perspectives.gif ├── perspectives.png ├── perspectives_dark.png ├── preview-dragndrop.png ├── preview-dragndrop_dark.png ├── preview_dark.png ├── python_logo.png ├── showcase_adtf.png ├── showcase_d-tect-x.jpg ├── showcase_d-tect-x.png ├── showcase_dream3d_nx.png ├── showcase_ezEngine_editor.png ├── showcase_hivewe.png ├── showcase_labplot.png ├── showcase_metgem.png ├── showcase_notepad_next.png ├── showcase_plot_juggler.png ├── showcase_pre_workbench.png ├── showcase_qmix_elements.png ├── showcase_qt_design_studio.png ├── showcase_qt_design_studio_video.png ├── showcase_qtcreator.png ├── showcase_ramses_composer.png ├── showcase_resinsight.png ├── showcase_robox_ide.png ├── tab_menu.gif ├── taiwan_ukraine.jpg ├── ukraine.jpg └── user-guide.md ├── examples ├── CMakeLists.txt ├── autohide │ ├── CMakeLists.txt │ ├── autohide.pro │ ├── main.cpp │ ├── main.py │ ├── mainwindow.cpp │ ├── mainwindow.h │ └── mainwindow.ui ├── autohidedragndrop │ ├── CMakeLists.txt │ ├── autohidedragndrop.pro │ ├── droppableitem.cpp │ ├── droppableitem.h │ ├── main.cpp │ ├── main.py │ ├── mainwindow.cpp │ ├── mainwindow.h │ └── mainwindow.ui ├── centralwidget │ ├── CMakeLists.txt │ ├── centralwidget.pro │ ├── main.cpp │ ├── main.py │ ├── mainwindow.cpp │ ├── mainwindow.h │ └── mainwindow.ui ├── configflags │ ├── CMakeLists.txt │ ├── configflags.pro │ ├── main.cpp │ ├── mainwindow.cpp │ ├── mainwindow.h │ └── mainwindow.ui ├── deleteonclose │ ├── CMakeLists.txt │ ├── deleteonclose.pro │ ├── main.cpp │ └── main.py ├── dockindock │ ├── CMakeLists.txt │ ├── dockindock.cpp │ ├── dockindock.h │ ├── dockindock.pro │ ├── dockindock.py │ ├── dockindockmanager.cpp │ ├── dockindockmanager.h │ ├── dockindockmanager.py │ ├── main.cpp │ ├── main.py │ ├── mainframe.cpp │ ├── mainframe.h │ ├── perspectiveactions.cpp │ ├── perspectiveactions.h │ ├── perspectiveactions.py │ ├── perspectives.cpp │ ├── perspectives.h │ └── perspectives.py ├── emptydockarea │ ├── CMakeLists.txt │ ├── emptydockarea.pro │ ├── main.cpp │ ├── main.py │ ├── mainwindow.cpp │ ├── mainwindow.h │ └── mainwindow.ui ├── examples.pro ├── hideshow │ ├── CMakeLists.txt │ ├── MainWindow.cpp │ ├── MainWindow.h │ ├── MainWindow.ui │ ├── hideshow.pro │ └── main.cpp ├── sidebar │ ├── CMakeLists.txt │ ├── MainWindow.cpp │ ├── MainWindow.h │ ├── MainWindow.ui │ ├── main.cpp │ ├── main.py │ └── sidebar.pro └── simple │ ├── CMakeLists.txt │ ├── MainWindow.cpp │ ├── MainWindow.h │ ├── MainWindow.ui │ ├── main.cpp │ ├── main.py │ └── simple.pro ├── gnu-lgpl-v2.1.md ├── persist └── perspectives.ini ├── project.py ├── pyproject.toml ├── sip ├── AutoHideDockContainer.sip ├── AutoHideSideBar.sip ├── AutoHideTab.sip ├── DockAreaTabBar.sip ├── DockAreaTitleBar.sip ├── DockAreaTitleBar_p.sip ├── DockAreaWidget.sip ├── DockComponentsFactory.sip ├── DockContainerWidget.sip ├── DockFocusController.sip ├── DockManager.sip ├── DockOverlay.sip ├── DockSplitter.sip ├── DockWidget.sip ├── DockWidgetTab.sip ├── DockingStateReader.sip ├── ElidingLabel.sip ├── FloatingDockContainer.sip ├── FloatingDragPreview.sip ├── IconProvider.sip ├── PushButton.sip ├── ResizeHandle.sip ├── ads.sip ├── ads_globals.sip └── linux │ └── FloatingWidgetTitleBar.sip └── src ├── AutoHideDockContainer.cpp ├── AutoHideDockContainer.h ├── AutoHideSideBar.cpp ├── AutoHideSideBar.h ├── AutoHideTab.cpp ├── AutoHideTab.h ├── CMakeLists.txt ├── DockAreaTabBar.cpp ├── DockAreaTabBar.h ├── DockAreaTitleBar.cpp ├── DockAreaTitleBar.h ├── DockAreaTitleBar_p.h ├── DockAreaWidget.cpp ├── DockAreaWidget.h ├── DockComponentsFactory.cpp ├── DockComponentsFactory.h ├── DockContainerWidget.cpp ├── DockContainerWidget.h ├── DockFocusController.cpp ├── DockFocusController.h ├── DockManager.cpp ├── DockManager.h ├── DockOverlay.cpp ├── DockOverlay.h ├── DockSplitter.cpp ├── DockSplitter.h ├── DockWidget.cpp ├── DockWidget.h ├── DockWidgetTab.cpp ├── DockWidgetTab.h ├── DockingStateReader.cpp ├── DockingStateReader.h ├── ElidingLabel.cpp ├── ElidingLabel.h ├── FloatingDockContainer.cpp ├── FloatingDockContainer.h ├── FloatingDragPreview.cpp ├── FloatingDragPreview.h ├── IconProvider.cpp ├── IconProvider.h ├── PushButton.cpp ├── PushButton.h ├── ResizeHandle.cpp ├── ResizeHandle.h ├── ads.qrc ├── ads_globals.cpp ├── ads_globals.h ├── images ├── close-button-disabled.svg ├── close-button-focused.svg ├── close-button.svg ├── detach-button-disabled.svg ├── detach-button.svg ├── maximize-button-focused.svg ├── maximize-button.svg ├── minimize-button-focused.svg ├── minimize-button.svg ├── pin-button-big.svg ├── pin-button.svg ├── restore-button-focused.svg ├── restore-button.svg ├── tabs-menu-button.svg ├── vs-pin-button-disabled.svg ├── vs-pin-button-pinned-focused.svg ├── vs-pin-button-pinned.svg ├── vs-pin-button.svg └── vs-pin-button_45.svg ├── linux ├── FloatingWidgetTitleBar.cpp └── FloatingWidgetTitleBar.h ├── qtadvanceddockingConfig.cmake ├── src.pro └── stylesheets ├── default.css ├── default_linux.css ├── focus_highlighting.css └── focus_highlighting_linux.css /.gitattributes: -------------------------------------------------------------------------------- 1 | PyQtAds/_version.py export-subst 2 | -------------------------------------------------------------------------------- /.github/workflows/linux-builds.yml: -------------------------------------------------------------------------------- 1 | name: linux-builds 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build_ubuntu_2204_cmake: 7 | runs-on: ubuntu-22.04 8 | 9 | env: 10 | QT_VERSION: 6.4.2 11 | QT_DIR: ${{ github.workspace }}/Qt 12 | 13 | steps: 14 | - name: Checkout source 15 | uses: actions/checkout@v4 16 | with: 17 | fetch-depth: 0 # Fetch full history and tags 18 | 19 | - name: Install dependencies 20 | run: | 21 | sudo apt-get update 22 | sudo apt-get install -y build-essential cmake ninja-build libgl1-mesa-dev libxkbcommon-x11-0 libx11-dev 23 | 24 | - name: Install Qt 25 | uses: jurplel/install-qt-action@v3 26 | with: 27 | version: ${{ env.QT_VERSION }} 28 | target: desktop 29 | host: linux 30 | arch: gcc_64 31 | dir: ${{ env.QT_DIR }} 32 | setup-python: false 33 | 34 | - name: Configure with CMake 35 | run: | 36 | cmake -S . -B build \ 37 | -DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}/Qt/${{ env.QT_VERSION }}/gcc_64" \ 38 | -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/install \ 39 | -DCMAKE_BUILD_TYPE=Release \ 40 | -G Ninja 41 | 42 | - name: Build 43 | run: cmake --build build 44 | 45 | - name: Run CMake install (optional) 46 | run: cmake --install build 47 | 48 | build_ubuntu_2204: 49 | runs-on: ubuntu-22.04 50 | steps: 51 | - uses: actions/checkout@v2 52 | - name: Cache Qt 53 | id: cache-qt-6-4 54 | uses: actions/cache@v3 55 | with: 56 | path: ../Qt/6.4.2 57 | key: ${{ runner.os }}-QtCache-Qt6-4 58 | 59 | - name: Install Qt 60 | uses: jurplel/install-qt-action@v2 61 | with: 62 | version: '6.4.2' 63 | host: 'linux' 64 | target: 'desktop' 65 | install-deps: true 66 | cached: ${{ steps.cache-qt-6-4.outputs.cache-hit }} 67 | setup-python: true 68 | tools: '' 69 | tools-only: false 70 | 71 | - name: Install needed xkbcommon symlink 72 | run: sudo apt-get install libxkbcommon-dev -y 73 | 74 | - name: Ubuntu and Qt version 75 | run: | 76 | cat /etc/issue 77 | echo number of processors: $(nproc) 78 | qmake -v 79 | - name: qmake 80 | run: qmake 81 | - name: make 82 | run: make -j$(nproc) 83 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | QtAdvancedDockingSystem 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.cdt.managedbuilder.core.genmakebuilder 10 | clean,full,incremental, 11 | 12 | 13 | 14 | 15 | org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder 16 | full,incremental, 17 | 18 | 19 | 20 | 21 | 22 | org.eclipse.cdt.core.cnature 23 | org.eclipse.cdt.core.ccnature 24 | org.eclipse.cdt.managedbuilder.core.managedBuildNature 25 | org.eclipse.cdt.managedbuilder.core.ScannerConfigNature 26 | 27 | 28 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 3 | if (POLICY CMP0091) 4 | cmake_policy(SET CMP0091 NEW) 5 | endif (POLICY CMP0091) 6 | 7 | # By default, the version information is extracted from the git index. However, 8 | # we can override this behavior by explicitly setting ADS_VERSION and 9 | # skipping the git checks. This is useful for cases where this project is being 10 | # used independently of its original git repo (e.g. vendored in another project) 11 | if(NOT ADS_VERSION) 12 | set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) 13 | include(GetGitRevisionDescription) 14 | git_describe(GitTagVersion --tags) 15 | string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GitTagVersion}") 16 | string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GitTagVersion}") 17 | string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GitTagVersion}") 18 | set(VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") 19 | else() 20 | string(REGEX MATCHALL "[\.]" VERSION_DOT_MATCHES ${ADS_VERSION}) 21 | list(LENGTH VERSION_DOT_MATCHES VERSION_DOT_COUNT) 22 | if(VERSION_DOT_COUNT EQUAL 2) 23 | set(VERSION_SHORT ${ADS_VERSION}) 24 | else() 25 | message(FATAL_ERROR "ADS_VERSION must be in major.minor.patch format, e.g. 3.8.1. Got ${ADS_VERSION}") 26 | endif() 27 | endif() 28 | 29 | 30 | project(QtADS LANGUAGES CXX VERSION ${VERSION_SHORT}) 31 | 32 | option(BUILD_STATIC "Build the static library" OFF) 33 | option(BUILD_EXAMPLES "Build the examples" ON) 34 | 35 | if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") 36 | set(ads_PlatformDir "x86") 37 | else() 38 | set(ads_PlatformDir "x64") 39 | endif() 40 | 41 | add_subdirectory(src) 42 | 43 | if(BUILD_EXAMPLES) 44 | add_subdirectory(examples) 45 | add_subdirectory(demo) 46 | endif() 47 | 48 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include versioneer.py 2 | include PyQtAds/_version.py 3 | -------------------------------------------------------------------------------- /ads.pri: -------------------------------------------------------------------------------- 1 | 2 | CONFIG(debug, debug|release){ 3 | win32-g++ { 4 | versionAtLeast(QT_VERSION, 5.15.0) { 5 | LIBS += -lqtadvanceddocking 6 | } 7 | else { 8 | LIBS += -lqtadvanceddockingd 9 | } 10 | } 11 | else:msvc { 12 | LIBS += -lqtadvanceddockingd 13 | } 14 | else:mac { 15 | LIBS += -lqtadvanceddocking_debug 16 | } 17 | else { 18 | LIBS += -lqtadvanceddocking 19 | } 20 | } 21 | else{ 22 | LIBS += -lqtadvanceddocking 23 | } 24 | 25 | 26 | unix:!macx { 27 | LIBS += -lxcb 28 | } 29 | -------------------------------------------------------------------------------- /ads.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS = \ 4 | src \ 5 | demo \ 6 | examples 7 | 8 | demo.depends = src 9 | examples.depends = src 10 | -------------------------------------------------------------------------------- /adsConfig.cmake: -------------------------------------------------------------------------------- 1 | include(CMakeFindDependencyMacro) 2 | find_dependency(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED) 3 | find_dependency(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED) 4 | find_dependency(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED) 5 | include("${CMAKE_CURRENT_LIST_DIR}/adsTargets.cmake") -------------------------------------------------------------------------------- /cmake/modules/GetGitRevisionDescription.cmake.in: -------------------------------------------------------------------------------- 1 | # 2 | # Internal file for GetGitRevisionDescription.cmake 3 | # 4 | # Requires CMake 2.6 or newer (uses the 'function' command) 5 | # 6 | # Original Author: 7 | # 2009-2010 Ryan Pavlik 8 | # http://academic.cleardefinition.com 9 | # Iowa State University HCI Graduate Program/VRAC 10 | # 11 | # Copyright Iowa State University 2009-2010. 12 | # Distributed under the Boost Software License, Version 1.0. 13 | # (See accompanying file LICENSE_1_0.txt or copy at 14 | # http://www.boost.org/LICENSE_1_0.txt) 15 | 16 | set(HEAD_HASH) 17 | 18 | file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) 19 | 20 | string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) 21 | if(HEAD_CONTENTS MATCHES "ref") 22 | # named branch 23 | string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") 24 | if(EXISTS "@GIT_DIR@/${HEAD_REF}") 25 | configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) 26 | else() 27 | configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) 28 | file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) 29 | if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") 30 | set(HEAD_HASH "${CMAKE_MATCH_1}") 31 | endif() 32 | endif() 33 | else() 34 | # detached HEAD 35 | configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) 36 | endif() 37 | 38 | if(NOT HEAD_HASH) 39 | file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) 40 | string(STRIP "${HEAD_HASH}" HEAD_HASH) 41 | endif() 42 | -------------------------------------------------------------------------------- /demo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_demo VERSION ${VERSION_SHORT}) 3 | 4 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 5 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets Quick QuickWidgets REQUIRED) 6 | if(WIN32 AND QT_VERSION_MAJOR LESS 6) 7 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS AxContainer REQUIRED) 8 | endif() 9 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 10 | set(ads_demo_SRCS 11 | main.cpp 12 | MainWindow.cpp 13 | mainwindow.ui 14 | StatusDialog.cpp 15 | StatusDialog.ui 16 | ImageViewer.cpp 17 | RenderWidget.cpp 18 | demo.qrc 19 | ) 20 | add_executable(AdvancedDockingSystemDemo WIN32 ${ads_demo_SRCS}) 21 | target_include_directories(AdvancedDockingSystemDemo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src") 22 | target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::Core 23 | Qt${QT_VERSION_MAJOR}::Gui 24 | Qt${QT_VERSION_MAJOR}::Widgets 25 | Qt${QT_VERSION_MAJOR}::Quick 26 | Qt${QT_VERSION_MAJOR}::QuickWidgets) 27 | if(WIN32 AND QT_VERSION_MAJOR LESS 6) 28 | target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::AxContainer) 29 | endif() 30 | target_link_libraries(AdvancedDockingSystemDemo PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 31 | set_target_properties(AdvancedDockingSystemDemo PROPERTIES 32 | AUTOMOC ON 33 | AUTORCC ON 34 | AUTOUIC ON 35 | CXX_STANDARD 14 36 | CXX_STANDARD_REQUIRED ON 37 | CXX_EXTENSIONS OFF 38 | VERSION ${VERSION_SHORT} 39 | EXPORT_NAME "Qt Advanced Docking System Demo" 40 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 41 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 42 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 43 | ) 44 | #if(BUILD_STATIC) 45 | # target_compile_definitions(AdvancedDockingSystemDemo PRIVATE ADS_STATIC) 46 | #endif() 47 | 48 | -------------------------------------------------------------------------------- /demo/ImageViewer.h: -------------------------------------------------------------------------------- 1 | #ifndef ImageViewerH 2 | #define ImageViewerH 3 | //============================================================================ 4 | /// \file ImageViewer.h 5 | /// \author Uwe Kindler 6 | /// \date 04.11.2022 7 | /// \brief Declaration of CImageViewer 8 | //============================================================================ 9 | 10 | //============================================================================ 11 | // INCLUDES 12 | //============================================================================ 13 | #include 14 | 15 | QT_BEGIN_NAMESPACE 16 | class QLabel; 17 | QT_END_NAMESPACE 18 | 19 | 20 | struct ImageViewerPrivate; 21 | 22 | /** 23 | * Tiny simple image viewer for showing images in demo 24 | */ 25 | class CImageViewer : public QScrollArea 26 | { 27 | Q_OBJECT 28 | public: 29 | using Super = QScrollArea; 30 | 31 | explicit CImageViewer(QWidget *parent = nullptr); 32 | virtual ~CImageViewer(); 33 | 34 | bool loadFile(const QString& Filename); 35 | void setImage(const QImage &newImage); 36 | 37 | public Q_SLOTS: 38 | void open(); 39 | void zoomIn(); 40 | void zoomOut(); 41 | void normalSize(); 42 | void fitToWindow(); 43 | 44 | protected: 45 | /** 46 | * @brief Reimplemented from QScrollArea to adjust image scaling if m_AutoFit is 47 | * true. 48 | */ 49 | virtual void resizeEvent(QResizeEvent* ResizeEvent); 50 | 51 | /** 52 | * @brief Handle mouse press events. 53 | */ 54 | virtual void mousePressEvent(QMouseEvent* Event); 55 | 56 | /** 57 | * @brief Handles mouse release events. 58 | */ 59 | virtual void mouseReleaseEvent(QMouseEvent* Event); 60 | 61 | /** 62 | * @brief Handle mouse move events. 63 | */ 64 | virtual void mouseMoveEvent(QMouseEvent* Event); 65 | 66 | /** 67 | * @brief Use mouse wheel to change scaling of the image. 68 | */ 69 | virtual void wheelEvent(QWheelEvent* Event); 70 | 71 | private: 72 | /** 73 | * @brief Create the wiget actions. 74 | */ 75 | void createActions(); 76 | 77 | /** 78 | * @brief Adjust size of render widget in case of image size change. 79 | * @param[in] Image The new image that may have a different image size. 80 | */ 81 | void adjustDisplaySize(const QImage& Image); 82 | 83 | ImageViewerPrivate* d; 84 | friend ImageViewerPrivate; 85 | }; 86 | 87 | //--------------------------------------------------------------------------- 88 | #endif // ImageViewerH 89 | -------------------------------------------------------------------------------- /demo/MainWindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | /******************************************************************************* 4 | ** Qt Advanced Docking System 5 | ** Copyright (C) 2017 Uwe Kindler 6 | ** 7 | ** This library is free software; you can redistribute it and/or 8 | ** modify it under the terms of the GNU Lesser General Public 9 | ** License as published by the Free Software Foundation; either 10 | ** version 2.1 of the License, or (at your option) any later version. 11 | ** 12 | ** This library is distributed in the hope that it will be useful, 13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | ** Lesser General Public License for more details. 16 | ** 17 | ** You should have received a copy of the GNU Lesser General Public 18 | ** License along with this library; If not, see . 19 | ******************************************************************************/ 20 | 21 | 22 | //============================================================================ 23 | /// \file MainWindow.h 24 | /// \author Uwe Kindler 25 | /// \date 13.02.2018 26 | /// \brief Declaration of CMainWindow class 27 | //============================================================================ 28 | 29 | 30 | //============================================================================ 31 | // INCLUDES 32 | //============================================================================ 33 | #include 34 | 35 | 36 | 37 | struct MainWindowPrivate; 38 | 39 | 40 | /** 41 | * Simple main window for demo 42 | */ 43 | class CMainWindow : public QMainWindow 44 | { 45 | Q_OBJECT 46 | private: 47 | MainWindowPrivate* d;///< private data - pimpl 48 | friend struct MainWindowPrivate; 49 | 50 | protected: 51 | virtual void closeEvent(QCloseEvent* event) override; 52 | 53 | public: 54 | explicit CMainWindow(QWidget *parent = 0); 55 | virtual ~CMainWindow(); 56 | 57 | private slots: 58 | void on_actionSaveState_triggered(bool); 59 | void on_actionRestoreState_triggered(bool); 60 | void savePerspective(); 61 | void onViewToggled(bool Open); 62 | void onViewVisibilityChanged(bool Visible); 63 | void createEditor(); 64 | void createTable(); 65 | void onEditorCloseRequested(); 66 | void onImageViewerCloseRequested(); 67 | void showStatusDialog(); 68 | void toggleDockWidgetWindowTitle(); 69 | void applyVsStyle(); 70 | void createImageViewer(); 71 | void lockWorkspace(bool Value); 72 | }; 73 | 74 | #endif // MAINWINDOW_H 75 | -------------------------------------------------------------------------------- /demo/MyDockAreaTitleBar.h: -------------------------------------------------------------------------------- 1 | #ifndef QTADS_MYDOCKAREATITLEBAR_H 2 | #define QTADS_MYDOCKAREATITLEBAR_H 3 | /******************************************************************************* 4 | ** Qt Advanced Docking System 5 | ** Copyright (C) 2017 Uwe Kindler 6 | ** 7 | ** This library is free software; you can redistribute it and/or 8 | ** modify it under the terms of the GNU Lesser General Public 9 | ** License as published by the Free Software Foundation; either 10 | ** version 2.1 of the License, or (at your option) any later version. 11 | ** 12 | ** This library is distributed in the hope that it will be useful, 13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | ** Lesser General Public License for more details. 16 | ** 17 | ** You should have received a copy of the GNU Lesser General Public 18 | ** License along with this library; If not, see . 19 | ******************************************************************************/ 20 | 21 | 22 | //============================================================================ 23 | // INCLUDES 24 | //============================================================================ 25 | #include 26 | 27 | 28 | /** 29 | * Custom DockAreaTitleBar that adds a custom context menu 30 | */ 31 | class MyDockAreaTitleBar : public ads::CDockAreaTitleBar 32 | { 33 | public: 34 | explicit MyDockAreaTitleBar(ads::CDockAreaWidget *parent) : 35 | CDockAreaTitleBar(parent) 36 | { 37 | } 38 | 39 | QMenu* buildContextMenu(QMenu*) override 40 | { 41 | auto menu = ads::CDockAreaTitleBar::buildContextMenu(nullptr); 42 | menu->addSeparator(); 43 | auto action = menu->addAction(tr("Format HardDrive")); 44 | 45 | connect(action, &QAction::triggered, this, [this]() 46 | { 47 | QMessageBox msgBox; 48 | msgBox.setText("No, just kidding"); 49 | msgBox.setStandardButtons(QMessageBox::Abort); 50 | msgBox.setDefaultButton(QMessageBox::Abort); 51 | msgBox.exec(); 52 | }); 53 | 54 | return menu; 55 | } 56 | }; 57 | 58 | #endif // QTADS_MYDOCKAREATITLEBAR_H 59 | -------------------------------------------------------------------------------- /demo/StatusDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef StatusDialogH 2 | #define StatusDialogH 3 | //============================================================================ 4 | /// \file StatusDialog.h 5 | /// \author Uwe Kindler 6 | /// \date 13.04.2020 7 | /// \brief Declaration of CStatusDialog class 8 | //============================================================================ 9 | 10 | //============================================================================ 11 | // INCLUDES 12 | //============================================================================ 13 | #include 14 | 15 | namespace ads {class CDockManager;} 16 | struct StatusDialogPrivate; 17 | 18 | /** 19 | * Displays status info about dock widgets 20 | */ 21 | class CStatusDialog : public QDialog 22 | { 23 | Q_OBJECT 24 | private: 25 | StatusDialogPrivate* d; ///< private data (pimpl) 26 | friend struct StatusDialogPrivate; 27 | 28 | private slots: 29 | void on_dockWidgetsComboBox_currentIndexChanged(int index); 30 | 31 | protected: 32 | public: 33 | using Super = QDialog; 34 | /** 35 | * Default Constructor 36 | */ 37 | CStatusDialog(ads::CDockManager* parent); 38 | 39 | /** 40 | * Virtual Destructor 41 | */ 42 | virtual ~CStatusDialog(); 43 | }; // class StatusDialog 44 | 45 | // namespace namespace_name 46 | //----------------------------------------------------------------------------- 47 | #endif // StatusDialogH 48 | -------------------------------------------------------------------------------- /demo/app.css: -------------------------------------------------------------------------------- 1 | ads--CTitleBarButton::menu-indicator 2 | { 3 | image: none; 4 | } -------------------------------------------------------------------------------- /demo/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/demo/app.ico -------------------------------------------------------------------------------- /demo/app.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "app.ico" 2 | -------------------------------------------------------------------------------- /demo/demo.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/.. 2 | 3 | TARGET = AdvancedDockingSystemDemo 4 | DESTDIR = $${ADS_OUT_ROOT}/lib 5 | QT += core gui widgets quick quickwidgets 6 | 7 | include(../ads.pri) 8 | 9 | lessThan(QT_MAJOR_VERSION, 6) { 10 | win32 { 11 | QT += axcontainer 12 | } 13 | } 14 | 15 | CONFIG += c++14 16 | CONFIG += debug_and_release 17 | DEFINES += QT_DEPRECATED_WARNINGS 18 | RC_FILE += app.rc 19 | 20 | adsBuildStatic { 21 | DEFINES += ADS_STATIC 22 | } 23 | 24 | 25 | HEADERS += \ 26 | MainWindow.h \ 27 | StatusDialog.h \ 28 | ImageViewer.h \ 29 | RenderWidget.h 30 | 31 | SOURCES += \ 32 | main.cpp \ 33 | MainWindow.cpp \ 34 | StatusDialog.cpp \ 35 | ImageViewer.cpp \ 36 | RenderWidget.cpp 37 | 38 | FORMS += \ 39 | mainwindow.ui \ 40 | StatusDialog.ui 41 | 42 | RESOURCES += demo.qrc 43 | 44 | 45 | LIBS += -L$${ADS_OUT_ROOT}/lib 46 | 47 | 48 | INCLUDEPATH += ../src 49 | DEPENDPATH += ../src 50 | -------------------------------------------------------------------------------- /demo/demo.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/folder.svg 4 | images/folder_open.svg 5 | images/note_add.svg 6 | images/picture_in_picture.svg 7 | images/restore.svg 8 | images/save.svg 9 | images/date_range.svg 10 | images/edit.svg 11 | images/grid_on.svg 12 | images/custom-menu-button.svg 13 | app.css 14 | images/plus.svg 15 | images/help_outline.svg 16 | images/fullscreen.svg 17 | images/create_floating_editor.svg 18 | images/create_floating_table.svg 19 | images/docked_editor.svg 20 | images/tab.svg 21 | res/visual_studio_light.css 22 | images/color_lens.svg 23 | images/ads_icon.svg 24 | images/ads_logo.svg 25 | images/find_in_page.svg 26 | images/perm_media.svg 27 | images/zoom_in.svg 28 | images/zoom_out.svg 29 | images/zoom_out_map.svg 30 | images/ads_tile_blue.svg 31 | images/ads_tile_blue_light.svg 32 | images/ads_tile_green.svg 33 | images/ads_tile_orange.svg 34 | images/photo.svg 35 | images/crop_original.svg 36 | images/panorama.svg 37 | images/ads_icon2.svg 38 | images/font_download.svg 39 | images/lock_outline.svg 40 | images/lock.svg 41 | images/lock_open.svg 42 | 43 | 44 | -------------------------------------------------------------------------------- /demo/images/ads_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /demo/images/ads_icon2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /demo/images/ads_logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Qt Advanced Docking 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /demo/images/color_lens.svg: -------------------------------------------------------------------------------- 1 | 2 | color_lens icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/crop_original.svg: -------------------------------------------------------------------------------- 1 | 2 | crop_original icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/date_range.svg: -------------------------------------------------------------------------------- 1 | 2 | date_range icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/docked_editor.svg: -------------------------------------------------------------------------------- 1 | 2 | chrome_reader_mode icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/edit.svg: -------------------------------------------------------------------------------- 1 | 2 | create icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/find_in_page.svg: -------------------------------------------------------------------------------- 1 | 2 | find_in_page icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | folder icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/folder_open.svg: -------------------------------------------------------------------------------- 1 | 2 | folder_open icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/font_download.svg: -------------------------------------------------------------------------------- 1 | 2 | font_download icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/fullscreen.svg: -------------------------------------------------------------------------------- 1 | 2 | settings_overscan icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/grid_on.svg: -------------------------------------------------------------------------------- 1 | 2 | grid_on icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/help_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | help_outline icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | lock icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/lock_open.svg: -------------------------------------------------------------------------------- 1 | 2 | lock_open icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/lock_outline.svg: -------------------------------------------------------------------------------- 1 | 2 | lock_outline icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/note_add.svg: -------------------------------------------------------------------------------- 1 | 2 | note_add icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/panorama.svg: -------------------------------------------------------------------------------- 1 | 2 | panorama icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/perm_media.svg: -------------------------------------------------------------------------------- 1 | 2 | perm_media icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/photo.svg: -------------------------------------------------------------------------------- 1 | 2 | photo icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/picture_in_picture.svg: -------------------------------------------------------------------------------- 1 | 2 | picture_in_picture icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/restore.svg: -------------------------------------------------------------------------------- 1 | 2 | restore icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/save.svg: -------------------------------------------------------------------------------- 1 | 2 | save icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/tab.svg: -------------------------------------------------------------------------------- 1 | 2 | tab icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/zoom_in.svg: -------------------------------------------------------------------------------- 1 | 2 | zoom_in icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/zoom_out.svg: -------------------------------------------------------------------------------- 1 | 2 | zoom_out icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/images/zoom_out_map.svg: -------------------------------------------------------------------------------- 1 | 2 | zoom_out_map icon - Licensed under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - Created with Iconfu.com - Derivative work of Material icons (Copyright Google Inc.) 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /demo/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | 10 | 11 | void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) 12 | { 13 | QByteArray localMsg = msg.toLocal8Bit(); 14 | switch (type) { 15 | case QtDebugMsg: 16 | fprintf(stdout, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); 17 | break; 18 | case QtInfoMsg: 19 | fprintf(stdout, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); 20 | break; 21 | case QtWarningMsg: 22 | fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); 23 | break; 24 | case QtCriticalMsg: 25 | fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); 26 | break; 27 | case QtFatalMsg: 28 | fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); 29 | abort(); 30 | } 31 | 32 | fflush(stderr); 33 | fflush(stdout); 34 | } 35 | 36 | int main(int argc, char *argv[]) 37 | { 38 | #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) 39 | QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); 40 | #if QT_VERSION >= 0x050600 41 | QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 42 | #endif 43 | #endif 44 | std::shared_ptr b; 45 | QApplication a(argc, argv); 46 | a.setApplicationName("Advanced Docking System Demo"); 47 | a.setQuitOnLastWindowClosed(true); 48 | a.setWindowIcon(QIcon(":/adsdemo/images/ads_icon2.svg")); 49 | 50 | qInstallMessageHandler(myMessageOutput); 51 | qDebug() << "Message handler test"; 52 | 53 | CMainWindow mw; 54 | mw.show(); 55 | 56 | QFile StyleSheetFile(":/adsdemo/app.css"); 57 | StyleSheetFile.open(QIODevice::ReadOnly); 58 | QTextStream StyleSheetStream(&StyleSheetFile); 59 | a.setStyleSheet(StyleSheetStream.readAll()); 60 | StyleSheetFile.close(); 61 | return a.exec(); 62 | } 63 | -------------------------------------------------------------------------------- /demo/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | QMainWindow::AllowTabbedDocks 18 | 19 | 20 | 21 | 22 | 23 | 24 | 0 25 | 0 26 | 400 27 | 21 28 | 29 | 30 | 31 | 32 | File 33 | 34 | 35 | 36 | 37 | 38 | 39 | View 40 | 41 | 42 | 43 | 44 | About 45 | 46 | 47 | 48 | 49 | Tests 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | toolBar 60 | 61 | 62 | TopToolBarArea 63 | 64 | 65 | false 66 | 67 | 68 | 69 | 70 | Exit 71 | 72 | 73 | 74 | 75 | Save State 76 | 77 | 78 | 79 | 80 | Restore State 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /demo/status_dialog.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | from PyQt5 import uic 5 | import PyQtAds as QtAds 6 | 7 | UI_FILE = os.path.join(os.path.dirname(__file__), 'StatusDialog.ui') 8 | StatusDialogUI, StatusDialogBase = uic.loadUiType(UI_FILE) 9 | 10 | class CStatusDialog(StatusDialogUI, StatusDialogBase): 11 | 12 | def __init__(self, dock_manager: QtAds.CDockManager, parent=None): 13 | super().__init__(parent) 14 | 15 | self.setupUi(self) 16 | 17 | self.dock_manager = dock_manager 18 | self.dock_widgets = self.dock_manager.dockWidgetsMap() 19 | 20 | for key, widget in self.dock_widgets.items(): 21 | self.dockWidgetsComboBox.addItem(key, widget) 22 | 23 | def on_dockWidgetsComboBox_currentIndexChanged(self, index: int): 24 | if not isinstance(index, int): 25 | return 26 | if index < 0: 27 | return 28 | 29 | dock_widget = self.dockWidgetsComboBox.currentData() 30 | self.isClosedCheckBox.setChecked(dock_widget.isClosed()) 31 | self.isFloatingCheckBox.setChecked(dock_widget.isFloating()) 32 | self.tabbedCheckBox.setChecked(dock_widget.isTabbed()) 33 | self.isCurrentTabCheckBox.setChecked(dock_widget.isCurrentTab()) 34 | self.closableCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetClosable) 35 | self.movableCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetMovable) 36 | self.floatableCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetFloatable) 37 | self.deleteOnCloseCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetDeleteOnClose) 38 | self.customCloseHandlingCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.CustomCloseHandling) 39 | -------------------------------------------------------------------------------- /doc/AutoHide_Animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Animation.gif -------------------------------------------------------------------------------- /doc/AutoHide_Change_Sidebar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Change_Sidebar.gif -------------------------------------------------------------------------------- /doc/AutoHide_Context_Menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Context_Menu.png -------------------------------------------------------------------------------- /doc/AutoHide_Drag_DockArea.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Drag_DockArea.gif -------------------------------------------------------------------------------- /doc/AutoHide_Drag_to_Float_or_Dock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Drag_to_Float_or_Dock.gif -------------------------------------------------------------------------------- /doc/AutoHide_Drag_to_Sidebar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Drag_to_Sidebar.gif -------------------------------------------------------------------------------- /doc/AutoHide_Movie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Movie.gif -------------------------------------------------------------------------------- /doc/AutoHide_PinTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_PinTo.png -------------------------------------------------------------------------------- /doc/AutoHide_Sort_Tabs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Sort_Tabs.gif -------------------------------------------------------------------------------- /doc/AutoHide_Tab_Insert_Order.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/AutoHide_Tab_Insert_Order.gif -------------------------------------------------------------------------------- /doc/DockArea_Tab_Insertion_Order.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/DockArea_Tab_Insertion_Order.gif -------------------------------------------------------------------------------- /doc/Feature_ImageViewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/Feature_ImageViewer.png -------------------------------------------------------------------------------- /doc/TabMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/TabMenu.png -------------------------------------------------------------------------------- /doc/TabMenu_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/TabMenu_dark.png -------------------------------------------------------------------------------- /doc/ads_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/ads_icon_256.png -------------------------------------------------------------------------------- /doc/ads_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/ads_icon_512.png -------------------------------------------------------------------------------- /doc/ads_logo_ukraine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/ads_logo_ukraine.jpg -------------------------------------------------------------------------------- /doc/ads_qt_marketplace_manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://qt.io/schema/extension-schema-v1#", 3 | "title": "Qt Advanced Docking System", 4 | "extensionType": [ 5 | "library" 6 | ], 7 | "version": "3.8.2", 8 | "vendor": { 9 | "name": "githubuser0xFFFF", 10 | "url": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System" 11 | }, 12 | "contact": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues", 13 | "icon": "https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/ads_icon.svg", 14 | "licenses": [ 15 | { "licenseType": "LGPL-2.1-only", 16 | "licenseUrl": "https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" } 17 | ], 18 | "created": "2017-03-30", 19 | "lastUpdate": "2022-03-02", 20 | "platforms": [ 21 | "Windows 7-11", "Kubuntu 18.04", "Kubuntu 19.10", "Ubuntu 19.10", "Ubuntu 20.04" 22 | ], 23 | "qtVersions": [ 24 | "5.5.1 or newer" 25 | ], 26 | "tags": [ 27 | "Widgets", "Docking"], 28 | "bugUrl": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues", 29 | "sourceRepoUrl": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System" 30 | } 31 | -------------------------------------------------------------------------------- /doc/advanced-docking_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/advanced-docking_video.png -------------------------------------------------------------------------------- /doc/autohide-feature-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/autohide-feature-demo.png -------------------------------------------------------------------------------- /doc/central_widget.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/central_widget.gif -------------------------------------------------------------------------------- /doc/cfg_flag_ActiveTabHasCloseButton_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_ActiveTabHasCloseButton_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_ActiveTabHasCloseButton_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_ActiveTabHasCloseButton_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_AllTabsHaveCloseButton_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AllTabsHaveCloseButton_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_AlwaysShowTabs_false_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AlwaysShowTabs_false_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideCloseButtonCollapsesDock_false.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideCloseButtonCollapsesDock_false.gif -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideCloseButtonCollapsesDock_true.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideCloseButtonCollapsesDock_true.gif -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideHasCloseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideHasCloseButton.png -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideHasMinimizeButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideHasMinimizeButton.png -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideOpenOnDragHover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideOpenOnDragHover.gif -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideSideBarsIconOnly_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideSideBarsIconOnly_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_AutoHideSideBarsIconOnly_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_AutoHideSideBarsIconOnly_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DisableTabTextEliding_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DisableTabTextEliding_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_DisableTabTextEliding_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DisableTabTextEliding_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaDynamicTabsMenuButtonVisibility_true_hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaDynamicTabsMenuButtonVisibility_true_hidden.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaDynamicTabsMenuButtonVisibility_true_visible.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaDynamicTabsMenuButtonVisibility_true_visible.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHasAutoHideButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHasAutoHideButton.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHasCloseButton_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHasCloseButton_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHasCloseButton_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHasCloseButton_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHasTabsMenuButton_false_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHasTabsMenuButton_false_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHasUndockButton_false_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHasUndockButton_false_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHideDisabledButtons_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHideDisabledButtons_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_DockAreaHideDisabledButtons_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DockAreaHideDisabledButtons_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DragPreviewHasWindowFrame_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DragPreviewHasWindowFrame_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_DragPreviewShowsContentPixmap_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DragPreviewShowsContentPixmap_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_DragPreviewShowsContentPixmap_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_DragPreviewShowsContentPixmap_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_EqualSplitOnInsertion_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_EqualSplitOnInsertion_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_EqualSplitOnInsertion_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_EqualSplitOnInsertion_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_FloatingContainerForceNativeTitleBar_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FloatingContainerForceNativeTitleBar_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_FloatingContainerForceNativeTitleBar_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FloatingContainerForceNativeTitleBar_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_FloatingContainerHasWidgetIcon_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FloatingContainerHasWidgetIcon_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_FloatingContainerHasWidgetIcon_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FloatingContainerHasWidgetIcon_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_FloatingContainerHasWidgetTitle_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FloatingContainerHasWidgetTitle_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_FloatingContainerHasWidgetTitle_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FloatingContainerHasWidgetTitle_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_FocusHighlighting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_FocusHighlighting.gif -------------------------------------------------------------------------------- /doc/cfg_flag_HideSingleCentralWidgetTitleBar_false.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_HideSingleCentralWidgetTitleBar_false.png -------------------------------------------------------------------------------- /doc/cfg_flag_HideSingleCentralWidgetTitleBar_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_HideSingleCentralWidgetTitleBar_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_MiddleMouseButtonClosesTab.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_MiddleMouseButtonClosesTab.gif -------------------------------------------------------------------------------- /doc/cfg_flag_RetainTabSizeWhenCloseButtonHidden_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_RetainTabSizeWhenCloseButtonHidden_true.png -------------------------------------------------------------------------------- /doc/cfg_flag_ShowTabTextOnlyForActiveTab_true.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/cfg_flag_ShowTabTextOnlyForActiveTab_true.png -------------------------------------------------------------------------------- /doc/donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/donate.png -------------------------------------------------------------------------------- /doc/dynamic_drag_preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/dynamic_drag_preview.gif -------------------------------------------------------------------------------- /doc/floating-widget-dragndrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/floating-widget-dragndrop.png -------------------------------------------------------------------------------- /doc/floating-widget-dragndrop_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/floating-widget-dragndrop_dark.png -------------------------------------------------------------------------------- /doc/grouped-dragging.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/grouped-dragging.gif -------------------------------------------------------------------------------- /doc/grouped-dragging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/grouped-dragging.png -------------------------------------------------------------------------------- /doc/grouped-dragging_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/grouped-dragging_dark.png -------------------------------------------------------------------------------- /doc/linux_kubuntu_1804.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/linux_kubuntu_1804.png -------------------------------------------------------------------------------- /doc/linux_ubuntu_1910.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/linux_ubuntu_1910.png -------------------------------------------------------------------------------- /doc/macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/macos.png -------------------------------------------------------------------------------- /doc/non_opaque_resizing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/non_opaque_resizing.gif -------------------------------------------------------------------------------- /doc/non_opaque_undocking.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/non_opaque_undocking.gif -------------------------------------------------------------------------------- /doc/opaque_resizing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/opaque_resizing.gif -------------------------------------------------------------------------------- /doc/opaque_undocking.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/opaque_undocking.gif -------------------------------------------------------------------------------- /doc/perspectives.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/perspectives.gif -------------------------------------------------------------------------------- /doc/perspectives.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/perspectives.png -------------------------------------------------------------------------------- /doc/perspectives_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/perspectives_dark.png -------------------------------------------------------------------------------- /doc/preview-dragndrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/preview-dragndrop.png -------------------------------------------------------------------------------- /doc/preview-dragndrop_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/preview-dragndrop_dark.png -------------------------------------------------------------------------------- /doc/preview_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/preview_dark.png -------------------------------------------------------------------------------- /doc/python_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/python_logo.png -------------------------------------------------------------------------------- /doc/showcase_adtf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_adtf.png -------------------------------------------------------------------------------- /doc/showcase_d-tect-x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_d-tect-x.jpg -------------------------------------------------------------------------------- /doc/showcase_d-tect-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_d-tect-x.png -------------------------------------------------------------------------------- /doc/showcase_dream3d_nx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_dream3d_nx.png -------------------------------------------------------------------------------- /doc/showcase_ezEngine_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_ezEngine_editor.png -------------------------------------------------------------------------------- /doc/showcase_hivewe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_hivewe.png -------------------------------------------------------------------------------- /doc/showcase_labplot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_labplot.png -------------------------------------------------------------------------------- /doc/showcase_metgem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_metgem.png -------------------------------------------------------------------------------- /doc/showcase_notepad_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_notepad_next.png -------------------------------------------------------------------------------- /doc/showcase_plot_juggler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_plot_juggler.png -------------------------------------------------------------------------------- /doc/showcase_pre_workbench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_pre_workbench.png -------------------------------------------------------------------------------- /doc/showcase_qmix_elements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_qmix_elements.png -------------------------------------------------------------------------------- /doc/showcase_qt_design_studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_qt_design_studio.png -------------------------------------------------------------------------------- /doc/showcase_qt_design_studio_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_qt_design_studio_video.png -------------------------------------------------------------------------------- /doc/showcase_qtcreator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_qtcreator.png -------------------------------------------------------------------------------- /doc/showcase_ramses_composer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_ramses_composer.png -------------------------------------------------------------------------------- /doc/showcase_resinsight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_resinsight.png -------------------------------------------------------------------------------- /doc/showcase_robox_ide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/showcase_robox_ide.png -------------------------------------------------------------------------------- /doc/tab_menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/tab_menu.gif -------------------------------------------------------------------------------- /doc/taiwan_ukraine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/taiwan_ukraine.jpg -------------------------------------------------------------------------------- /doc/ukraine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/ec196715e0af356d8cbafaf9cfaabb392f036540/doc/ukraine.jpg -------------------------------------------------------------------------------- /examples/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(QtADSExamples LANGUAGES CXX VERSION ${VERSION_SHORT}) 3 | add_subdirectory(simple) 4 | add_subdirectory(hideshow) 5 | add_subdirectory(sidebar) 6 | add_subdirectory(deleteonclose) 7 | add_subdirectory(centralwidget) 8 | add_subdirectory(autohide) 9 | add_subdirectory(autohidedragndrop) 10 | add_subdirectory(emptydockarea) 11 | add_subdirectory(dockindock) 12 | -------------------------------------------------------------------------------- /examples/autohide/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_autohide VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(AutoHideExample WIN32 7 | main.cpp 8 | mainwindow.cpp 9 | mainwindow.ui 10 | ) 11 | target_include_directories(AutoHideExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(AutoHideExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(AutoHideExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(AutoHideExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Auto Hide Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/autohide/autohide.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = AutoHideExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any Qt feature that has been marked deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | SOURCES += \ 21 | main.cpp \ 22 | mainwindow.cpp 23 | 24 | HEADERS += \ 25 | mainwindow.h 26 | 27 | FORMS += \ 28 | mainwindow.ui 29 | 30 | LIBS += -L$${ADS_OUT_ROOT}/lib 31 | include(../../ads.pri) 32 | INCLUDEPATH += ../../src 33 | DEPENDPATH += ../../src 34 | 35 | -------------------------------------------------------------------------------- /examples/autohide/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | CMainWindow w; 8 | w.show(); 9 | return a.exec(); 10 | } 11 | -------------------------------------------------------------------------------- /examples/autohide/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "DockManager.h" 9 | #include "DockAreaWidget.h" 10 | #include "DockWidget.h" 11 | 12 | QT_BEGIN_NAMESPACE 13 | namespace Ui { class CMainWindow; } 14 | QT_END_NAMESPACE 15 | 16 | class CMainWindow : public QMainWindow 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | CMainWindow(QWidget *parent = nullptr); 22 | ~CMainWindow(); 23 | 24 | protected: 25 | virtual void closeEvent(QCloseEvent* event) override; 26 | 27 | private: 28 | QAction* SavePerspectiveAction = nullptr; 29 | QWidgetAction* PerspectiveListAction = nullptr; 30 | QComboBox* PerspectiveComboBox = nullptr; 31 | 32 | Ui::CMainWindow *ui; 33 | 34 | ads::CDockManager* DockManager; 35 | ads::CDockAreaWidget* StatusDockArea; 36 | ads::CDockWidget* TimelineDockWidget; 37 | 38 | void createPerspectiveUi(); 39 | 40 | private slots: 41 | void savePerspective(); 42 | }; 43 | #endif // MAINWINDOW_H 44 | -------------------------------------------------------------------------------- /examples/autohide/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1284 10 | 757 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 1284 23 | 21 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | 34 | 35 | toolBar 36 | 37 | 38 | TopToolBarArea 39 | 40 | 41 | false 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_autohide_dragndrop VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(AutoHideDragNDropExample WIN32 7 | main.cpp 8 | mainwindow.cpp 9 | mainwindow.ui 10 | droppableitem.cpp 11 | ) 12 | target_include_directories(AutoHideDragNDropExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 13 | target_link_libraries(AutoHideDragNDropExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 14 | target_link_libraries(AutoHideDragNDropExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 15 | Qt${QT_VERSION_MAJOR}::Gui 16 | Qt${QT_VERSION_MAJOR}::Widgets) 17 | set_target_properties(AutoHideDragNDropExample PROPERTIES 18 | AUTOMOC ON 19 | AUTORCC ON 20 | AUTOUIC ON 21 | CXX_STANDARD 14 22 | CXX_STANDARD_REQUIRED ON 23 | CXX_EXTENSIONS OFF 24 | VERSION ${VERSION_SHORT} 25 | EXPORT_NAME "Qt Advanced Docking System Auto Hide With Drag N Drop Example" 26 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 28 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 29 | ) 30 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/autohidedragndrop.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = AutoHideDragNDropExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any Qt feature that has been marked deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | SOURCES += \ 21 | main.cpp \ 22 | mainwindow.cpp \ 23 | droppableitem.cpp 24 | 25 | HEADERS += \ 26 | mainwindow.h \ 27 | droppableitem.h 28 | 29 | FORMS += \ 30 | mainwindow.ui 31 | 32 | LIBS += -L$${ADS_OUT_ROOT}/lib 33 | include(../../ads.pri) 34 | INCLUDEPATH += ../../src 35 | DEPENDPATH += ../../src 36 | 37 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/droppableitem.cpp: -------------------------------------------------------------------------------- 1 | #include "droppableitem.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | DroppableItem::DroppableItem(const QString& text, QWidget* parent) 10 | : QPushButton(text, parent) 11 | { 12 | setAcceptDrops(true); 13 | setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding); 14 | } 15 | 16 | void DroppableItem::dragEnterEvent(QDragEnterEvent* event) 17 | { 18 | if (event->mimeData()->hasText()) 19 | { 20 | event->acceptProposedAction(); 21 | setCursor(Qt::DragMoveCursor); 22 | } 23 | } 24 | 25 | void DroppableItem::dragLeaveEvent(QDragLeaveEvent* event) 26 | { 27 | Q_UNUSED(event); 28 | unsetCursor(); 29 | } 30 | 31 | void DroppableItem::dropEvent(QDropEvent* event) 32 | { 33 | if (event->mimeData()->hasText()) 34 | { 35 | event->acceptProposedAction(); 36 | setText(event->mimeData()->text()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/droppableitem.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | class QDragEnterEvent; 5 | class QDragLeaveEvent; 6 | class QDropEvent; 7 | 8 | class DroppableItem : public QPushButton 9 | { 10 | Q_OBJECT; 11 | 12 | public: 13 | DroppableItem(const QString& text = QString(), QWidget* parent = nullptr); 14 | 15 | protected: 16 | void dragEnterEvent(QDragEnterEvent* event) override; 17 | void dragLeaveEvent(QDragLeaveEvent* event) override; 18 | void dropEvent(QDropEvent* event) override; 19 | }; 20 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | CMainWindow w; 8 | w.show(); 9 | return a.exec(); 10 | } 11 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "DockManager.h" 9 | #include "DockAreaWidget.h" 10 | #include "DockWidget.h" 11 | 12 | QT_BEGIN_NAMESPACE 13 | namespace Ui { class CMainWindow; } 14 | QT_END_NAMESPACE 15 | 16 | class CMainWindow : public QMainWindow 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | CMainWindow(QWidget *parent = nullptr); 22 | ~CMainWindow(); 23 | 24 | protected: 25 | virtual void closeEvent(QCloseEvent* event) override; 26 | 27 | private: 28 | QAction* SavePerspectiveAction = nullptr; 29 | QWidgetAction* PerspectiveListAction = nullptr; 30 | QComboBox* PerspectiveComboBox = nullptr; 31 | 32 | Ui::CMainWindow *ui; 33 | 34 | ads::CDockManager* DockManager; 35 | ads::CDockAreaWidget* StatusDockArea; 36 | ads::CDockWidget* TimelineDockWidget; 37 | 38 | void createPerspectiveUi(); 39 | 40 | private slots: 41 | void savePerspective(); 42 | }; 43 | #endif // MAINWINDOW_H 44 | -------------------------------------------------------------------------------- /examples/autohidedragndrop/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1284 10 | 757 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 1284 23 | 21 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | 34 | 35 | toolBar 36 | 37 | 38 | TopToolBarArea 39 | 40 | 41 | false 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /examples/centralwidget/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_centralwidget VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(CentralWidgetExample WIN32 7 | main.cpp 8 | mainwindow.cpp 9 | mainwindow.ui 10 | ) 11 | target_include_directories(CentralWidgetExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(CentralWidgetExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(CentralWidgetExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(CentralWidgetExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Central Widget Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/centralwidget/centralwidget.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = CentralWidgetExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any Qt feature that has been marked deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | SOURCES += \ 21 | main.cpp \ 22 | mainwindow.cpp 23 | 24 | HEADERS += \ 25 | mainwindow.h 26 | 27 | FORMS += \ 28 | mainwindow.ui 29 | 30 | LIBS += -L$${ADS_OUT_ROOT}/lib 31 | include(../../ads.pri) 32 | INCLUDEPATH += ../../src 33 | DEPENDPATH += ../../src 34 | 35 | -------------------------------------------------------------------------------- /examples/centralwidget/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | CMainWindow w; 8 | w.show(); 9 | return a.exec(); 10 | } 11 | -------------------------------------------------------------------------------- /examples/centralwidget/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "DockManager.h" 9 | #include "DockAreaWidget.h" 10 | #include "DockWidget.h" 11 | 12 | QT_BEGIN_NAMESPACE 13 | namespace Ui { class CMainWindow; } 14 | QT_END_NAMESPACE 15 | 16 | class CMainWindow : public QMainWindow 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | CMainWindow(QWidget *parent = nullptr); 22 | ~CMainWindow(); 23 | 24 | protected: 25 | virtual void closeEvent(QCloseEvent* event) override; 26 | 27 | private: 28 | QAction* SavePerspectiveAction = nullptr; 29 | QWidgetAction* PerspectiveListAction = nullptr; 30 | QComboBox* PerspectiveComboBox = nullptr; 31 | 32 | Ui::CMainWindow *ui; 33 | 34 | ads::CDockManager* DockManager; 35 | ads::CDockAreaWidget* StatusDockArea; 36 | ads::CDockWidget* TimelineDockWidget; 37 | 38 | void createPerspectiveUi(); 39 | 40 | private slots: 41 | void savePerspective(); 42 | }; 43 | #endif // MAINWINDOW_H 44 | -------------------------------------------------------------------------------- /examples/centralwidget/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1284 10 | 757 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 1284 23 | 21 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | 34 | 35 | toolBar 36 | 37 | 38 | TopToolBarArea 39 | 40 | 41 | false 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /examples/configflags/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_centralwidget VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(configFlagsExample WIN32 7 | main.cpp 8 | mainwindow.cpp 9 | mainwindow.ui 10 | ) 11 | target_include_directories(CentralWidgetExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(CentralWidgetExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(CentralWidgetExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(CentralWidgetExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Central Widget Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/configflags/configflags.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = ConfigFlagsExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any Qt feature that has been marked deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | SOURCES += \ 21 | main.cpp \ 22 | mainwindow.cpp 23 | 24 | HEADERS += \ 25 | mainwindow.h 26 | 27 | FORMS += \ 28 | mainwindow.ui 29 | 30 | LIBS += -L$${ADS_OUT_ROOT}/lib 31 | include(../../ads.pri) 32 | INCLUDEPATH += ../../src 33 | DEPENDPATH += ../../src 34 | 35 | -------------------------------------------------------------------------------- /examples/configflags/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | CMainWindow w; 8 | w.show(); 9 | return a.exec(); 10 | } 11 | -------------------------------------------------------------------------------- /examples/configflags/mainwindow.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | 3 | #include "ui_mainwindow.h" 4 | 5 | #include 6 | #include 7 | 8 | #include "DockAreaWidget.h" 9 | #include "DockAreaTitleBar.h" 10 | 11 | 12 | using namespace ads; 13 | 14 | 15 | CMainWindow::CMainWindow(QWidget *parent) : 16 | QMainWindow(parent), 17 | ui(new Ui::CMainWindow) 18 | { 19 | ui->setupUi(this); 20 | 21 | // Add the toolbar 22 | auto toolbar_ = addToolBar("Top Toolbar"); 23 | 24 | // Create the dock manager 25 | ads::CDockManager::setConfigFlags(ads::CDockManager::DefaultOpaqueConfig); 26 | ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasCloseButton, 27 | false); 28 | ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasUndockButton, 29 | false); 30 | ads::CDockManager::setConfigFlag( 31 | ads::CDockManager::DockAreaHasTabsMenuButton, false); 32 | auto DockManager = new ads::CDockManager(this); 33 | 34 | // Create a dockable widget 35 | QLabel *l1 = new QLabel(); 36 | l1->setWordWrap(true); 37 | l1->setAlignment(Qt::AlignTop | Qt::AlignLeft); 38 | l1->setText("Docking widget 1"); 39 | ads::CDockWidget *dockWidget1 = new ads::CDockWidget("Dock 1"); 40 | dockWidget1->setWidget(l1); 41 | DockManager->addDockWidget(ads::LeftDockWidgetArea, dockWidget1); 42 | 43 | QLabel *l2 = new QLabel(); 44 | l2->setWordWrap(true); 45 | l2->setAlignment(Qt::AlignTop | Qt::AlignLeft); 46 | l2->setText("Docking widget 2"); 47 | ads::CDockWidget *dockWidget2 = new ads::CDockWidget("Dock 2"); 48 | dockWidget2->setWidget(l2); 49 | DockManager->addDockWidget(ads::RightDockWidgetArea, dockWidget2); 50 | 51 | // Add menu actions 52 | ui->menuView->addAction(dockWidget1->toggleViewAction()); 53 | ui->menuView->addAction(dockWidget2->toggleViewAction()); 54 | toolbar_->addAction(dockWidget1->toggleViewAction()); 55 | toolbar_->addAction(dockWidget2->toggleViewAction()); 56 | } 57 | 58 | 59 | CMainWindow::~CMainWindow() 60 | { 61 | delete ui; 62 | } 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /examples/configflags/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "DockManager.h" 9 | #include "DockAreaWidget.h" 10 | #include "DockWidget.h" 11 | 12 | QT_BEGIN_NAMESPACE 13 | namespace Ui { class CMainWindow; } 14 | QT_END_NAMESPACE 15 | 16 | class CMainWindow : public QMainWindow 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | CMainWindow(QWidget *parent = nullptr); 22 | ~CMainWindow(); 23 | 24 | private: 25 | Ui::CMainWindow *ui; 26 | }; 27 | #endif // MAINWINDOW_H 28 | -------------------------------------------------------------------------------- /examples/configflags/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1284 10 | 757 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 1284 23 | 21 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | 34 | 35 | toolBar 36 | 37 | 38 | TopToolBarArea 39 | 40 | 41 | false 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /examples/deleteonclose/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_deleteonclose VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(DeleteOnCloseTest WIN32 7 | main.cpp 8 | ) 9 | target_include_directories(DeleteOnCloseTest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 10 | target_link_libraries(DeleteOnCloseTest PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 11 | target_link_libraries(DeleteOnCloseTest PUBLIC Qt${QT_VERSION_MAJOR}::Core 12 | Qt${QT_VERSION_MAJOR}::Gui 13 | Qt${QT_VERSION_MAJOR}::Widgets) 14 | set_target_properties(DeleteOnCloseTest PROPERTIES 15 | AUTOMOC ON 16 | CXX_STANDARD 14 17 | CXX_STANDARD_REQUIRED ON 18 | CXX_EXTENSIONS OFF 19 | VERSION ${VERSION_SHORT} 20 | EXPORT_NAME "Qt Advanced Docking System Delete on Close Example" 21 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 22 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 23 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 24 | ) 25 | -------------------------------------------------------------------------------- /examples/deleteonclose/deleteonclose.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = DeleteOnCloseTest 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | DEFINES += QT_DEPRECATED_WARNINGS 15 | 16 | SOURCES += main.cpp 17 | 18 | 19 | LIBS += -L$${ADS_OUT_ROOT}/lib 20 | include(../../ads.pri) 21 | INCLUDEPATH += ../../src 22 | DEPENDPATH += ../../src 23 | 24 | -------------------------------------------------------------------------------- /examples/deleteonclose/main.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | import PyQtAds as QtAds 4 | from PyQt5.QtGui import QCloseEvent 5 | from PyQt5.QtCore import (qDebug, pyqtSlot, QObject, pyqtSignal) 6 | from PyQt5.QtWidgets import (QMainWindow, QAction, QTextEdit, QApplication, 7 | QMenuBar) 8 | 9 | 10 | class MainWindow(QMainWindow): 11 | dock_manager = None 12 | 13 | def closeEvent(self, event: QCloseEvent): 14 | super().closeEvent(event) 15 | if self.dock_manager is not None: 16 | self.dock_manager.deleteLater() 17 | 18 | def setDockManager(self, dock_manager: QtAds.CDockManager): 19 | self.dock_manager = dock_manager 20 | 21 | 22 | if __name__ == '__main__': 23 | app = QApplication(sys.argv) 24 | w = MainWindow() 25 | 26 | QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FocusHighlighting, True) 27 | QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.AllTabsHaveCloseButton, True) 28 | dock_manager = QtAds.CDockManager(w) 29 | w.setDockManager(dock_manager) 30 | 31 | count = 0 32 | 33 | def on_focused_dock_widget_changed(old: QtAds.CDockWidget, now: QtAds.CDockWidget): 34 | global count 35 | qDebug( "{:d} CDockManager::focusedDockWidgetChanged old: {} now: {} visible: {}".format( 36 | count, 37 | old.objectName() if old else "-", 38 | now.objectName(), 39 | now.isVisible())) 40 | count += 1 41 | now.widget().setFocus() 42 | 43 | dock_manager.focusedDockWidgetChanged.connect(on_focused_dock_widget_changed) 44 | 45 | action = QAction("New Delete On Close", w) 46 | w.menuBar().addAction(action) 47 | 48 | i = 0 49 | def on_action_triggered(): 50 | global i 51 | dw = QtAds.CDockWidget("test doc {:d}".format(i)) 52 | i += 1 53 | editor = QTextEdit("lorem ipsum...", dw) 54 | dw.setWidget(editor) 55 | dw.setFeature(QtAds.CDockWidget.DockWidgetDeleteOnClose, True) 56 | area = dock_manager.addDockWidgetTab(QtAds.CenterDockWidgetArea, dw) 57 | qDebug("doc dock widget created! {} {}".format(dw, area)) 58 | action.triggered.connect(on_action_triggered) 59 | 60 | action = QAction("New", w) 61 | w.menuBar().addAction(action) 62 | def on_action2_triggered(): 63 | global i 64 | dw = QtAds.CDockWidget("test {:d}".format(i)) 65 | i += 1 66 | editor = QTextEdit("lorem ipsum...", dw) 67 | dw.setWidget(editor) 68 | area = dock_manager.addDockWidgetTab(QtAds.CenterDockWidgetArea, dw) 69 | qDebug("dock widget created! {} {}".format(dw, area)) 70 | action.triggered.connect(on_action2_triggered) 71 | 72 | w.show() 73 | app.exec_() 74 | -------------------------------------------------------------------------------- /examples/dockindock/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_dockindock VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(DockInDockExample WIN32 7 | dockindock.cpp 8 | dockindockmanager.cpp 9 | perspectiveactions.cpp 10 | perspectives.cpp 11 | main.cpp 12 | mainframe.cpp 13 | ) 14 | target_include_directories(DockInDockExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 15 | target_link_libraries(DockInDockExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 16 | target_link_libraries(DockInDockExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 17 | Qt${QT_VERSION_MAJOR}::Gui 18 | Qt${QT_VERSION_MAJOR}::Widgets) 19 | set_target_properties(DockInDockExample PROPERTIES 20 | AUTOMOC ON 21 | AUTORCC ON 22 | AUTOUIC ON 23 | CXX_STANDARD 14 24 | CXX_STANDARD_REQUIRED ON 25 | CXX_EXTENSIONS OFF 26 | VERSION ${VERSION_SHORT} 27 | EXPORT_NAME "Qt Advanced Docking System Simple Example" 28 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 29 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 30 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 31 | ) 32 | -------------------------------------------------------------------------------- /examples/dockindock/dockindock.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | class QMenu; 10 | 11 | namespace ads 12 | { 13 | class CDockAreaWidget; 14 | } 15 | 16 | namespace QtAdsUtl 17 | { 18 | 19 | class DockInDockManager; 20 | class PerspectivesManager; 21 | // tab of tab example for https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/306 22 | class DockInDockWidget : public QWidget 23 | { 24 | typedef QWidget baseClass; 25 | 26 | Q_OBJECT 27 | 28 | public: 29 | DockInDockWidget( QWidget* parent, bool canCreateNewGroups, PerspectivesManager* perspectivesManager ); 30 | ~DockInDockWidget() override; 31 | 32 | ads::CDockAreaWidget* addTabWidget( QWidget* widget, const QString& name, ads::CDockAreaWidget* after ); 33 | DockInDockWidget* createGroup( const QString& groupName, ads::CDockAreaWidget*& insertPos ); 34 | 35 | ads::CDockAreaWidget* addTabWidget( QWidget* widget, const QString& name, QIcon icon, ads::CDockAreaWidget* after ); 36 | DockInDockWidget* createGroup( const QString& groupName, QIcon icon, ads::CDockAreaWidget*& insertPos ); 37 | 38 | QString getGroupNameError( const QString& groupName ); 39 | void destroyGroup( DockInDockWidget* widget ); 40 | 41 | /** Manually fill a given view menu */ 42 | void setupViewMenu( QMenu* menu ); 43 | 44 | /** Attach a view menu that will be automatically fill */ 45 | void attachViewMenu( QMenu* menu ); 46 | 47 | bool isTopLevel(); 48 | void setupMenu( QMenu* menu, const std::vector& moveTo ); 49 | 50 | inline DockInDockManager* getManager() { return m_mgr; } 51 | inline DockInDockWidget* getTopLevelDockWidget() { return m_topLevelDockWidget; } 52 | 53 | inline bool canCreateNewGroups() const { return m_canCreateNewGroups; } 54 | 55 | void dumpStatus( std::ostream& str, std::string tab = "" ); 56 | 57 | inline PerspectivesManager* getPerspectivesManager() { return m_perspectivesManager; } 58 | 59 | void setNewPerspectiveDefaultName( const QString& defaultName ); 60 | 61 | private slots: 62 | void autoFillAttachedViewMenu(); 63 | void createPerspective(); 64 | 65 | private: 66 | DockInDockManager* m_mgr; 67 | DockInDockWidget* m_topLevelDockWidget; 68 | 69 | bool m_canCreateNewGroups; 70 | 71 | DockInDockWidget( QWidget* parent, DockInDockWidget* topLevelDockWidget, PerspectivesManager* perspectivesManager ); 72 | 73 | PerspectivesManager* m_perspectivesManager; 74 | QString m_newPerspectiveDefaultName; 75 | 76 | void fillPerspectivesMenu( QMenu* menu ); 77 | }; 78 | 79 | } 80 | 81 | -------------------------------------------------------------------------------- /examples/dockindock/dockindock.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = DockInDock 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | DEFINES += QT_DEPRECATED_WARNINGS 15 | 16 | SOURCES += \ 17 | dockindock.cpp \ 18 | dockindockmanager.cpp \ 19 | perspectiveactions.cpp \ 20 | perspectives.cpp \ 21 | main.cpp \ 22 | mainframe.cpp 23 | 24 | HEADERS += \ 25 | dockindock.h \ 26 | dockindockmanager.h \ 27 | perspectiveactions.h \ 28 | perspectives.h \ 29 | mainframe.h 30 | 31 | LIBS += -L$${ADS_OUT_ROOT}/lib 32 | include(../../ads.pri) 33 | INCLUDEPATH += ../../src 34 | DEPENDPATH += ../../src 35 | 36 | -------------------------------------------------------------------------------- /examples/dockindock/dockindockmanager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "DockManager.h" 4 | 5 | #include 6 | #include 7 | 8 | namespace QtAdsUtl 9 | { 10 | 11 | class DockInDockWidget; 12 | class DockInDockManager : public ads::CDockManager 13 | { 14 | Q_OBJECT 15 | 16 | typedef ads::CDockManager baseClass; 17 | 18 | public: 19 | DockInDockManager( DockInDockWidget& parent ); 20 | ~DockInDockManager() override; 21 | 22 | void fillViewMenu( QMenu* menu, const std::vector& moveTo ); 23 | void fillMoveMenu( QMenu* menu, const std::vector& moveTo ); 24 | 25 | void addPerspectiveRec( const QString& name ); 26 | void openPerspectiveRec( const QString& name ); 27 | void removePerspectivesRec(); 28 | void loadPerspectivesRec(QSettings& Settings); 29 | void savePerspectivesRec(QSettings& Settings) const; 30 | 31 | static DockInDockManager* dockInAManager( ads::CDockWidget* widget ); 32 | 33 | inline DockInDockWidget& parent() { return m_parent; } 34 | 35 | void childManagers( std::vector& managers, bool rec ) const; 36 | std::vector allManagers( bool includeThis, bool rec ) const; 37 | std::vector> allDockWidgets( bool includeThis, bool rec ) const; 38 | 39 | QString getGroupName(); 40 | QString getPersistGroupName(); 41 | static QString getGroupNameFromPersistGroupName( QString persistGroupName ); 42 | 43 | QMap getGroupContents(); 44 | 45 | ads::CDockAreaWidget* getInsertDefaultPos(); 46 | 47 | std::vector getWidgetsInGUIOrder() const; 48 | 49 | private: 50 | DockInDockWidget& m_parent; 51 | }; 52 | 53 | class CreateChildDockAction : public QAction 54 | { 55 | Q_OBJECT 56 | public: 57 | CreateChildDockAction( DockInDockWidget& dockInDock, QMenu* menu ); 58 | 59 | public slots: 60 | void createGroup(); 61 | 62 | private: 63 | DockInDockWidget& m_dockInDock; 64 | }; 65 | 66 | class DestroyGroupAction : public QAction 67 | { 68 | Q_OBJECT 69 | public: 70 | DestroyGroupAction( DockInDockWidget* widget, QMenu* menu ); 71 | 72 | public slots: 73 | void destroyGroup(); 74 | 75 | private: 76 | DockInDockWidget* m_widget; 77 | }; 78 | 79 | class MoveDockWidgetAction : public QAction 80 | { 81 | Q_OBJECT 82 | public: 83 | MoveDockWidgetAction( ads::CDockWidget* widget, DockInDockManager* moveTo, QMenu* menu ); 84 | 85 | static void move( ads::CDockWidget* widget, DockInDockManager* moveTo ); 86 | 87 | public slots: 88 | void move(); 89 | 90 | private: 91 | ads::CDockWidget* m_widget; 92 | DockInDockManager* m_moveTo; 93 | }; 94 | 95 | } 96 | 97 | -------------------------------------------------------------------------------- /examples/dockindock/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "mainframe.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | MainWindow w; 8 | w.show(); 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /examples/dockindock/mainframe.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | namespace QtAdsUtl 9 | { 10 | class DockInDockWidget; 11 | class PerspectivesManager; 12 | } 13 | 14 | class MainWindow : public QMainWindow 15 | { 16 | Q_OBJECT 17 | 18 | public: 19 | explicit MainWindow(QWidget *parent = 0); 20 | ~MainWindow(); 21 | 22 | QtAdsUtl::DockInDockWidget* m_dockManager; 23 | std::unique_ptr m_perspectivesManager; 24 | }; 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /examples/dockindock/perspectiveactions.cpp: -------------------------------------------------------------------------------- 1 | #include "perspectiveactions.h" 2 | #include "dockindock.h" 3 | #include "perspectives.h" 4 | 5 | #include 6 | 7 | using namespace QtAdsUtl; 8 | 9 | ////////////////////////////// 10 | // LoadPerspectiveAction 11 | ////////////////////////////// 12 | LoadPerspectiveAction::LoadPerspectiveAction( QMenu* parent, const QString& name, QtAdsUtl::DockInDockWidget& dockManager ) : 13 | QAction( name, parent ), 14 | name( name ), 15 | dockManager( dockManager ) 16 | { 17 | connect( this, SIGNAL(triggered()), this, SLOT(load()) ); 18 | } 19 | 20 | void LoadPerspectiveAction::load() 21 | { 22 | dockManager.getPerspectivesManager()->openPerspective( name, dockManager ); 23 | } 24 | 25 | ////////////////////////////// 26 | // RemovePerspectiveAction 27 | ////////////////////////////// 28 | RemovePerspectiveAction::RemovePerspectiveAction( QMenu* parent, const QString& name, QtAdsUtl::DockInDockWidget& dockManager ) : 29 | QAction( name, parent ), 30 | name( name ), 31 | dockManager( dockManager ) 32 | { 33 | connect( this, SIGNAL(triggered()), this, SLOT(remove()) ); 34 | } 35 | 36 | void RemovePerspectiveAction::remove() 37 | { 38 | dockManager.getPerspectivesManager()->removePerspective( name ); 39 | } 40 | -------------------------------------------------------------------------------- /examples/dockindock/perspectiveactions.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace QtAdsUtl 6 | { 7 | 8 | class DockInDockWidget; 9 | class LoadPerspectiveAction : public QAction 10 | { 11 | Q_OBJECT 12 | public: 13 | LoadPerspectiveAction( QMenu* parent, const QString& name, QtAdsUtl::DockInDockWidget& dockManager ); 14 | 15 | public slots: 16 | void load(); 17 | 18 | private: 19 | QString name; 20 | QtAdsUtl::DockInDockWidget& dockManager; 21 | }; 22 | 23 | class RemovePerspectiveAction : public QAction 24 | { 25 | Q_OBJECT 26 | public: 27 | RemovePerspectiveAction( QMenu* parent, const QString& name, QtAdsUtl::DockInDockWidget& dockManager ); 28 | 29 | public slots: 30 | void remove(); 31 | 32 | private: 33 | QString name; 34 | QtAdsUtl::DockInDockWidget& dockManager; 35 | }; 36 | 37 | } 38 | 39 | -------------------------------------------------------------------------------- /examples/dockindock/perspectiveactions.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtWidgets import QAction, QMenu 2 | 3 | 4 | class LoadPerspectiveAction(QAction): 5 | def __init__(self, parent: QMenu, name: str, dock_manager: 'DockInDockWidget'): 6 | super().__init__(name, parent) 7 | self.name = name 8 | self.dock_manager = dock_manager 9 | 10 | self.triggered.connect(self.load) 11 | 12 | def load(self): 13 | self.dock_manager.getPerspectivesManager().openPerspective(self.name, self.dock_manager) 14 | 15 | 16 | class RemovePerspectiveAction(QAction): 17 | def __init__(self, parent: QMenu, name: str, dock_manager: 'DockInDockWidget'): 18 | super().__init__(name, parent) 19 | self.name = name 20 | self.dock_manager = dock_manager 21 | 22 | self.triggered.connect(self.remove) 23 | 24 | def remove(self): 25 | self.dock_manager.getPerspectivesManager().removePerspective(self.name) -------------------------------------------------------------------------------- /examples/dockindock/perspectives.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | class QMenu; 10 | class QSettings; 11 | 12 | namespace QtAdsUtl 13 | { 14 | 15 | class DockInDockWidget; 16 | class PerspectivesManager : public QObject 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | PerspectivesManager( const QString& perspectivesFolder ); 22 | virtual ~PerspectivesManager(); 23 | 24 | QStringList perspectiveNames() const; 25 | 26 | void addPerspective( const QString& name, DockInDockWidget& widget ); 27 | void openPerspective( const QString& name, DockInDockWidget& widget ); 28 | void removePerspectives(); 29 | void removePerspective( const QString& name ); 30 | 31 | void loadPerspectives(); 32 | void savePerspectives() const; 33 | 34 | signals: 35 | void perspectivesListChanged(); 36 | void openingPerspective(); 37 | void openedPerspective(); 38 | 39 | private: 40 | 41 | // Partially bypass ADS perspective management, store list here 42 | // and then ADS will only have one perspective loaded 43 | // this is because all docking widgets must exist when a perspective is loaded 44 | // we will guarantee that! 45 | class PerspectiveInfo 46 | { 47 | public: 48 | std::shared_ptr settings; 49 | QMap groups; 50 | }; 51 | QMap m_perspectives; 52 | 53 | QString m_perspectivesFolder; 54 | QString getSettingsFileName( const QString& perspective, bool temp ) const; 55 | std::shared_ptr getSettingsObject( const QString& filePath ) const; 56 | }; 57 | 58 | } 59 | 60 | -------------------------------------------------------------------------------- /examples/emptydockarea/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_centralwidget VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(EmptyDockAreaExample WIN32 7 | main.cpp 8 | mainwindow.cpp 9 | mainwindow.ui 10 | ) 11 | target_include_directories(EmptyDockAreaExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(EmptyDockAreaExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(EmptyDockAreaExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(EmptyDockAreaExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Empty Dock Area Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/emptydockarea/emptydockarea.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = EmptyDockareaExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any Qt feature that has been marked deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | SOURCES += \ 21 | main.cpp \ 22 | mainwindow.cpp 23 | 24 | HEADERS += \ 25 | mainwindow.h 26 | 27 | FORMS += \ 28 | mainwindow.ui 29 | 30 | LIBS += -L$${ADS_OUT_ROOT}/lib 31 | include(../../ads.pri) 32 | INCLUDEPATH += ../../src 33 | DEPENDPATH += ../../src 34 | 35 | -------------------------------------------------------------------------------- /examples/emptydockarea/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | CMainWindow w; 8 | w.show(); 9 | return a.exec(); 10 | } 11 | -------------------------------------------------------------------------------- /examples/emptydockarea/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "DockManager.h" 9 | #include "DockAreaWidget.h" 10 | #include "DockWidget.h" 11 | 12 | QT_BEGIN_NAMESPACE 13 | namespace Ui { class CMainWindow; } 14 | QT_END_NAMESPACE 15 | 16 | class CMainWindow : public QMainWindow 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | CMainWindow(QWidget *parent = nullptr); 22 | ~CMainWindow(); 23 | 24 | protected: 25 | virtual void closeEvent(QCloseEvent* event) override; 26 | 27 | private: 28 | QAction* SavePerspectiveAction = nullptr; 29 | QWidgetAction* PerspectiveListAction = nullptr; 30 | QComboBox* PerspectiveComboBox = nullptr; 31 | 32 | Ui::CMainWindow *ui; 33 | 34 | ads::CDockManager* DockManager; 35 | ads::CDockAreaWidget* StatusDockArea; 36 | ads::CDockWidget* TimelineDockWidget; 37 | 38 | void createPerspectiveUi(); 39 | 40 | private slots: 41 | void savePerspective(); 42 | }; 43 | #endif // MAINWINDOW_H 44 | -------------------------------------------------------------------------------- /examples/emptydockarea/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1284 10 | 757 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 1284 23 | 21 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | 34 | 35 | toolBar 36 | 37 | 38 | TopToolBarArea 39 | 40 | 41 | false 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /examples/examples.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS = \ 4 | autohide \ 5 | autohidedragndrop \ 6 | centralwidget \ 7 | simple \ 8 | hideshow \ 9 | sidebar \ 10 | deleteonclose \ 11 | emptydockarea \ 12 | dockindock \ 13 | configflags 14 | -------------------------------------------------------------------------------- /examples/hideshow/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_hideshow VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(HideShowExample WIN32 7 | main.cpp 8 | MainWindow.cpp 9 | MainWindow.ui 10 | ) 11 | target_include_directories(HideShowExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(HideShowExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(HideShowExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(HideShowExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Hide,Show Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/hideshow/MainWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "../../examples/hideshow/MainWindow.h" 2 | 3 | #include "ui_MainWindow.h" 4 | 5 | #include 6 | #include 7 | 8 | using namespace ads; 9 | 10 | MainWindow::MainWindow(QWidget *parent) : 11 | QMainWindow(parent), 12 | ui(new Ui::MainWindow) 13 | { 14 | ui->setupUi(this); 15 | 16 | ui->centralWidget->setLayout( m_layout = new QStackedLayout() ); 17 | 18 | m_welcomeWidget = new QWidget(this); 19 | auto welcomeLayout = new QVBoxLayout(m_welcomeWidget); 20 | welcomeLayout->addStretch(); 21 | QPushButton* openButton = new QPushButton("Open project"); 22 | welcomeLayout->addWidget( openButton ); 23 | welcomeLayout->addStretch(); 24 | 25 | connect( openButton, SIGNAL(clicked()), this, SLOT(openProject()) ); 26 | 27 | m_DockManager = new ads::CDockManager(ui->centralWidget); 28 | 29 | // Create example content label - this can be any application specific 30 | // widget 31 | QLabel* l = new QLabel(); 32 | l->setWordWrap(true); 33 | l->setAlignment(Qt::AlignTop | Qt::AlignLeft); 34 | l->setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. "); 35 | 36 | // Create a dock widget with the title Label 1 and set the created label 37 | // as the dock widget content 38 | ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1"); 39 | DockWidget->setWidget(l); 40 | 41 | // Add the toggleViewAction of the dock widget to the menu to give 42 | // the user the possibility to show the dock widget if it has been closed 43 | ui->menuView->addAction(DockWidget->toggleViewAction()); 44 | 45 | connect( ui->actionOpen, SIGNAL(triggered()), this, SLOT(openProject()) ); 46 | connect( ui->actionClose, SIGNAL(triggered()), this, SLOT(closeProject()) ); 47 | 48 | // Add the dock widget to the top dock widget area 49 | m_DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget); 50 | 51 | ui->centralWidget->layout()->addWidget( m_welcomeWidget ); 52 | ui->centralWidget->layout()->addWidget( m_DockManager ); 53 | 54 | closeProject(); 55 | } 56 | 57 | MainWindow::~MainWindow() 58 | { 59 | delete ui; 60 | } 61 | 62 | void MainWindow::openProject() 63 | { 64 | ui->actionOpen->setEnabled(false); 65 | ui->actionClose->setEnabled(true); 66 | ui->menuView->setEnabled(true); 67 | 68 | m_layout->setCurrentWidget( m_DockManager ); 69 | } 70 | 71 | void MainWindow::closeProject() 72 | { 73 | ui->actionOpen->setEnabled(true); 74 | ui->actionClose->setEnabled(false); 75 | ui->menuView->setEnabled(false); 76 | 77 | m_DockManager->hideManagerAndFloatingWidgets(); 78 | m_layout->setCurrentWidget( m_welcomeWidget ); 79 | } 80 | 81 | -------------------------------------------------------------------------------- /examples/hideshow/MainWindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include "DockManager.h" 7 | 8 | QT_BEGIN_NAMESPACE 9 | namespace Ui { 10 | class MainWindow; 11 | } 12 | QT_END_NAMESPACE 13 | 14 | class MainWindow : public QMainWindow 15 | { 16 | Q_OBJECT 17 | 18 | public: 19 | explicit MainWindow(QWidget *parent = 0); 20 | ~MainWindow(); 21 | 22 | private slots: 23 | void openProject(); 24 | void closeProject(); 25 | 26 | private: 27 | Ui::MainWindow *ui; 28 | QWidget* m_welcomeWidget; 29 | ads::CDockManager* m_DockManager; 30 | QStackedLayout* m_layout; 31 | }; 32 | 33 | #endif // MAINWINDOW_H 34 | -------------------------------------------------------------------------------- /examples/hideshow/MainWindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 400 23 | 26 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | File 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Open project 45 | 46 | 47 | 48 | 49 | Close project 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /examples/hideshow/hideshow.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = HideShowExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | DEFINES += QT_DEPRECATED_WARNINGS 15 | 16 | SOURCES += \ 17 | main.cpp \ 18 | MainWindow.cpp 19 | 20 | HEADERS += \ 21 | MainWindow.h 22 | 23 | FORMS += \ 24 | MainWindow.ui 25 | 26 | 27 | LIBS += -L$${ADS_OUT_ROOT}/lib 28 | include(../../ads.pri) 29 | INCLUDEPATH += ../../src 30 | DEPENDPATH += ../../src 31 | 32 | -------------------------------------------------------------------------------- /examples/hideshow/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../../examples/hideshow/MainWindow.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | MainWindow w; 8 | w.show(); 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /examples/sidebar/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_sidebar VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(SidebarExample WIN32 7 | main.cpp 8 | MainWindow.cpp 9 | MainWindow.ui 10 | ) 11 | target_include_directories(SidebarExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(SidebarExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(SidebarExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(SidebarExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Sidebar Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/sidebar/MainWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "MainWindow.h" 2 | 3 | #include "ui_MainWindow.h" 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | MainWindow::MainWindow(QWidget *parent) : 10 | QMainWindow(parent), 11 | ui(new Ui::MainWindow) 12 | { 13 | ui->setupUi(this); 14 | 15 | // Create the dock manager. Because the parent parameter is a QMainWindow 16 | // the dock manager registers itself as the central widget. 17 | QVBoxLayout* Layout = new QVBoxLayout(ui->dockContainer); 18 | Layout->setContentsMargins(QMargins(0, 0, 0, 0)); 19 | m_DockManager = new ads::CDockManager(ui->dockContainer); 20 | Layout->addWidget(m_DockManager); 21 | 22 | // Create example content label - this can be any application specific 23 | // widget 24 | QLabel* l = new QLabel(); 25 | l->setWordWrap(true); 26 | l->setAlignment(Qt::AlignTop | Qt::AlignLeft); 27 | l->setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. "); 28 | 29 | // Create a dock widget with the title Label 1 and set the created label 30 | // as the dock widget content 31 | ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1"); 32 | DockWidget->setWidget(l); 33 | 34 | // Add the toggleViewAction of the dock widget to the menu to give 35 | // the user the possibility to show the dock widget if it has been closed 36 | ui->menuView->addAction(DockWidget->toggleViewAction()); 37 | 38 | 39 | // Add the dock widget to the top dock widget area 40 | m_DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget); 41 | 42 | // Create an example editor 43 | QPlainTextEdit* te = new QPlainTextEdit(); 44 | te->setPlaceholderText("Please enter your text here into this QPlainTextEdit..."); 45 | DockWidget = new ads::CDockWidget("Editor 1"); 46 | DockWidget->setWidget(te); 47 | ui->menuView->addAction(DockWidget->toggleViewAction()); 48 | m_DockManager->addDockWidget(ads::BottomDockWidgetArea, DockWidget); 49 | } 50 | 51 | MainWindow::~MainWindow() 52 | { 53 | delete ui; 54 | } 55 | 56 | 57 | void MainWindow::closeEvent(QCloseEvent *event) 58 | { 59 | QMainWindow::closeEvent(event); 60 | if (m_DockManager) 61 | { 62 | m_DockManager->deleteLater(); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /examples/sidebar/MainWindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include "DockManager.h" 6 | 7 | QT_BEGIN_NAMESPACE 8 | namespace Ui { 9 | class MainWindow; 10 | } 11 | QT_END_NAMESPACE 12 | 13 | /** 14 | * This example shows, how to place a dock widget container and a static 15 | * sidebar into a QMainWindow 16 | */ 17 | class MainWindow : public QMainWindow 18 | { 19 | Q_OBJECT 20 | 21 | public: 22 | explicit MainWindow(QWidget *parent = 0); 23 | ~MainWindow(); 24 | 25 | protected: 26 | virtual void closeEvent(QCloseEvent *event) override; 27 | 28 | private: 29 | Ui::MainWindow *ui; 30 | ads::CDockManager* m_DockManager; 31 | }; 32 | 33 | #endif // MAINWINDOW_H 34 | -------------------------------------------------------------------------------- /examples/sidebar/MainWindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 650 10 | 376 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | PushButton 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 0 35 | 0 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 0 45 | 0 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 0 57 | 0 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 0 68 | 0 69 | 650 70 | 21 71 | 72 | 73 | 74 | 75 | View 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /examples/sidebar/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../../examples/simple/MainWindow.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | MainWindow w; 8 | w.show(); 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /examples/sidebar/main.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | from PyQt5 import uic 5 | from PyQt5.QtCore import Qt, QMargins 6 | from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QPlainTextEdit 7 | 8 | import PyQtAds as QtAds 9 | 10 | UI_FILE = os.path.join(os.path.dirname(__file__), 'MainWindow.ui') 11 | MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE) 12 | 13 | 14 | class MainWindow(MainWindowUI, MainWindowBase): 15 | 16 | def __init__(self, parent=None): 17 | super().__init__(parent) 18 | 19 | self.setupUi(self) 20 | 21 | # Create the dock manager. Because the parent parameter is a QMainWindow 22 | # the dock manager registers itself as the central widget. 23 | layout = QVBoxLayout(self.dockContainer); 24 | layout.setContentsMargins(QMargins(0, 0, 0, 0)) 25 | self.dock_manager = QtAds.CDockManager(self.dockContainer) 26 | layout.addWidget(self.dock_manager) 27 | 28 | # Create example content label - this can be any application specific 29 | # widget 30 | l = QLabel() 31 | l.setWordWrap(True) 32 | l.setAlignment(Qt.AlignTop | Qt.AlignLeft); 33 | l.setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ") 34 | 35 | # Create a dock widget with the title Label 1 and set the created label 36 | # as the dock widget content 37 | dock_widget = QtAds.CDockWidget("Label 1") 38 | dock_widget.setWidget(l) 39 | 40 | # Add the toggleViewAction of the dock widget to the menu to give 41 | # the user the possibility to show the dock widget if it has been closed 42 | self.menuView.addAction(dock_widget.toggleViewAction()) 43 | 44 | # Add the dock widget to the top dock widget area 45 | self.dock_manager.addDockWidget(QtAds.TopDockWidgetArea, dock_widget) 46 | 47 | # Create an example editor 48 | te = QPlainTextEdit() 49 | te.setPlaceholderText("Please enter your text here into this QPlainTextEdit...") 50 | dock_widget = QtAds.CDockWidget("Editor 1") 51 | self.menuView.addAction(dock_widget.toggleViewAction()) 52 | self.dock_manager.addDockWidget(QtAds.BottomDockWidgetArea, dock_widget) 53 | 54 | 55 | if __name__ == '__main__': 56 | app = QApplication(sys.argv) 57 | 58 | w = MainWindow() 59 | w.show() 60 | app.exec_() 61 | -------------------------------------------------------------------------------- /examples/sidebar/sidebar.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = SidebarExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | DEFINES += QT_DEPRECATED_WARNINGS 15 | 16 | SOURCES += \ 17 | main.cpp \ 18 | MainWindow.cpp 19 | 20 | HEADERS += \ 21 | MainWindow.h 22 | 23 | FORMS += \ 24 | MainWindow.ui 25 | 26 | 27 | LIBS += -L$${ADS_OUT_ROOT}/lib 28 | include(../../ads.pri) 29 | INCLUDEPATH += ../../src 30 | DEPENDPATH += ../../src 31 | 32 | -------------------------------------------------------------------------------- /examples/simple/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ads_example_simple VERSION ${VERSION_SHORT}) 3 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 4 | find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | add_executable(SimpleExample WIN32 7 | main.cpp 8 | MainWindow.cpp 9 | MainWindow.ui 10 | ) 11 | target_include_directories(SimpleExample PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../src") 12 | target_link_libraries(SimpleExample PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR}) 13 | target_link_libraries(SimpleExample PUBLIC Qt${QT_VERSION_MAJOR}::Core 14 | Qt${QT_VERSION_MAJOR}::Gui 15 | Qt${QT_VERSION_MAJOR}::Widgets) 16 | set_target_properties(SimpleExample PROPERTIES 17 | AUTOMOC ON 18 | AUTORCC ON 19 | AUTOUIC ON 20 | CXX_STANDARD 14 21 | CXX_STANDARD_REQUIRED ON 22 | CXX_EXTENSIONS OFF 23 | VERSION ${VERSION_SHORT} 24 | EXPORT_NAME "Qt Advanced Docking System Simple Example" 25 | ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 26 | LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib" 27 | RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin" 28 | ) 29 | -------------------------------------------------------------------------------- /examples/simple/MainWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "../../examples/simple/MainWindow.h" 2 | 3 | #include "ui_MainWindow.h" 4 | 5 | #include 6 | #include 7 | 8 | MainWindow::MainWindow(QWidget *parent) : 9 | QMainWindow(parent), 10 | ui(new Ui::MainWindow) 11 | { 12 | ui->setupUi(this); 13 | 14 | // Create the dock manager. Because the parent parameter is a QMainWindow 15 | // the dock manager registers itself as the central widget. 16 | m_DockManager = new ads::CDockManager(this); 17 | 18 | // Create example content label - this can be any application specific 19 | // widget 20 | QLabel* l = new QLabel(); 21 | l->setWordWrap(true); 22 | l->setAlignment(Qt::AlignTop | Qt::AlignLeft); 23 | l->setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. "); 24 | 25 | // Create a dock widget with the title Label 1 and set the created label 26 | // as the dock widget content 27 | ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1"); 28 | DockWidget->setWidget(l); 29 | 30 | // Add the toggleViewAction of the dock widget to the menu to give 31 | // the user the possibility to show the dock widget if it has been closed 32 | ui->menuView->addAction(DockWidget->toggleViewAction()); 33 | 34 | // Add the dock widget to the top dock widget area 35 | m_DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget); 36 | } 37 | 38 | MainWindow::~MainWindow() 39 | { 40 | delete ui; 41 | } 42 | 43 | -------------------------------------------------------------------------------- /examples/simple/MainWindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include "DockManager.h" 6 | 7 | QT_BEGIN_NAMESPACE 8 | namespace Ui { 9 | class MainWindow; 10 | } 11 | QT_END_NAMESPACE 12 | 13 | class MainWindow : public QMainWindow 14 | { 15 | Q_OBJECT 16 | 17 | public: 18 | explicit MainWindow(QWidget *parent = 0); 19 | ~MainWindow(); 20 | 21 | private: 22 | Ui::MainWindow *ui; 23 | ads::CDockManager* m_DockManager; 24 | }; 25 | 26 | #endif // MAINWINDOW_H 27 | -------------------------------------------------------------------------------- /examples/simple/MainWindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 0 22 | 400 23 | 21 24 | 25 | 26 | 27 | 28 | View 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /examples/simple/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../../examples/simple/MainWindow.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | MainWindow w; 8 | w.show(); 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /examples/simple/main.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | from PyQt5 import uic 5 | from PyQt5.QtCore import Qt, QTimer 6 | from PyQt5.QtGui import QCloseEvent 7 | from PyQt5.QtWidgets import QApplication, QLabel 8 | 9 | import PyQtAds as QtAds 10 | 11 | UI_FILE = os.path.join(os.path.dirname(__file__), 'MainWindow.ui') 12 | MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE) 13 | 14 | 15 | class MainWindow(MainWindowUI, MainWindowBase): 16 | 17 | def __init__(self, parent=None): 18 | super().__init__(parent) 19 | 20 | self.setupUi(self) 21 | 22 | # Create the dock manager. Because the parent parameter is a QMainWindow 23 | # the dock manager registers itself as the central widget. 24 | self.dock_manager = QtAds.CDockManager(self) 25 | 26 | # Create example content label - this can be any application specific 27 | # widget 28 | l = QLabel() 29 | l.setWordWrap(True) 30 | l.setAlignment(Qt.AlignTop | Qt.AlignLeft); 31 | l.setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ") 32 | 33 | # Create a dock widget with the title Label 1 and set the created label 34 | # as the dock widget content 35 | dock_widget = QtAds.CDockWidget("Label 1") 36 | dock_widget.setWidget(l) 37 | 38 | 39 | # Add the toggleViewAction of the dock widget to the menu to give 40 | # the user the possibility to show the dock widget if it has been closed 41 | self.menuView.addAction(dock_widget.toggleViewAction()) 42 | 43 | # Add the dock widget to the top dock widget area 44 | self.dock_manager.addDockWidget(QtAds.TopDockWidgetArea, dock_widget) 45 | 46 | 47 | if __name__ == '__main__': 48 | app = QApplication(sys.argv) 49 | 50 | w = MainWindow() 51 | w.show() 52 | app.exec_() 53 | -------------------------------------------------------------------------------- /examples/simple/simple.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/../.. 2 | 3 | QT += core gui widgets 4 | 5 | TARGET = SimpleExample 6 | DESTDIR = $${ADS_OUT_ROOT}/lib 7 | TEMPLATE = app 8 | CONFIG += c++14 9 | CONFIG += debug_and_release 10 | adsBuildStatic { 11 | DEFINES += ADS_STATIC 12 | } 13 | 14 | DEFINES += QT_DEPRECATED_WARNINGS 15 | 16 | SOURCES += \ 17 | main.cpp \ 18 | MainWindow.cpp 19 | 20 | HEADERS += \ 21 | MainWindow.h 22 | 23 | FORMS += \ 24 | MainWindow.ui 25 | 26 | 27 | LIBS += -L$${ADS_OUT_ROOT}/lib 28 | include(../../ads.pri) 29 | INCLUDEPATH += ../../src 30 | DEPENDPATH += ../../src 31 | 32 | -------------------------------------------------------------------------------- /persist/perspectives.ini: -------------------------------------------------------------------------------- 1 | [Perspectives] 2 | size=0 3 | -------------------------------------------------------------------------------- /project.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | from pyqtbuild import PyQtBindings, PyQtProject 5 | from sipbuild import Option 6 | 7 | class PyQtAds(PyQtProject): 8 | def __init__(self): 9 | """ Initialise the project. """ 10 | 11 | super().__init__() 12 | 13 | self.bindings_factories = [ads] 14 | 15 | class ads(PyQtBindings): 16 | def __init__(self, project): 17 | """ Initialise the bindings. """ 18 | 19 | super().__init__(project, 'ads') 20 | 21 | def get_options(self): 22 | """Our custom options that a user can pass to sip-build.""" 23 | options = super().get_options() 24 | options += [ 25 | Option('ads_incdir', 26 | help='the directory containing the ads header file', 27 | metavar='DIR'), 28 | Option('ads_libdir', 29 | help='the directory containing the ads library', 30 | metavar='DIR'), 31 | Option('ads_lib', 32 | help='the ads library', 33 | metavar='LIB'), 34 | ] 35 | return options 36 | 37 | def apply_user_defaults(self, tool): 38 | """ Set default values for user options that haven't been set yet. """ 39 | 40 | resource_file = os.path.join(self.project.root_dir,'src','ads.qrc') 41 | print("Adding resource file to qmake project: ", resource_file) 42 | self.builder_settings.append('RESOURCES += '+resource_file) 43 | 44 | if self.ads_lib is not None: 45 | self.libraries.append(self.ads_lib) 46 | 47 | if self.ads_incdir is not None: 48 | self.include_dirs.append(self.ads_incdir) 49 | 50 | if self.ads_libdir is not None: 51 | self.library_dirs.append(self.ads_libdir) 52 | 53 | super().apply_user_defaults(tool) 54 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | # Specify the build system. 2 | [build-system] 3 | requires = ["sip >=6.0.2", "PyQt-builder >=1.6", "PyQt5>=5.15", "PyQt5-sip>=12.8"] 4 | build-backend = "sipbuild.api" 5 | 6 | # Specify the PEP 566 metadata for the project. 7 | [tool.sip.metadata] 8 | name = "PyQtAds" 9 | version = "4.4.1" 10 | summary = "Python bindings for Qt Advanced Docking System" 11 | home-page = "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/" 12 | license = "LGPL v2.1" 13 | description-file = "README.md" 14 | requires-dist = "PyQt5 (>=5.15.4)" 15 | description-content-type = "text/markdown" 16 | 17 | [tool.sip.project] 18 | tag-prefix = "QtAds" 19 | dunder-init = true 20 | 21 | [tool.sip.bindings.ads] 22 | pep484-pyi = true 23 | define-macros = ["ADS_SHARED_EXPORT"] 24 | sip-file = "ads.sip" 25 | include-dirs = ["src"] 26 | qmake-QT = ["widgets", "gui-private; platform_system == 'Linux'"] 27 | headers = [ 28 | "src/AutoHideDockContainer.h", 29 | "src/AutoHideSideBar.h", 30 | "src/AutoHideTab.h", 31 | "src/DockAreaTabBar.h", 32 | "src/DockAreaTitleBar.h", 33 | "src/DockAreaTitleBar_p.h", 34 | "src/DockAreaWidget.h", 35 | "src/DockComponentsFactory.h", 36 | "src/DockContainerWidget.h", 37 | "src/DockFocusController.h", 38 | "src/DockManager.h", 39 | "src/DockOverlay.h", 40 | "src/DockSplitter.h", 41 | "src/DockWidget.h", 42 | "src/DockWidgetTab.h", 43 | "src/DockingStateReader.h", 44 | "src/ElidingLabel.h", 45 | "src/FloatingDockContainer.h", 46 | "src/FloatingDragPreview.h", 47 | "src/IconProvider.h", 48 | "src/PushButton.h", 49 | "src/ResizeHandle.h", 50 | "src/ads_globals.h", 51 | "src/linux/FloatingWidgetTitleBar.h; platform_system == 'Linux'", 52 | ] 53 | sources = [ 54 | "src/AutoHideTab.cpp", 55 | "src/AutoHideDockContainer.cpp", 56 | "src/AutoHideSideBar.cpp", 57 | "src/DockAreaTabBar.cpp", 58 | "src/DockAreaTitleBar.cpp", 59 | "src/DockAreaWidget.cpp", 60 | "src/DockComponentsFactory.cpp", 61 | "src/DockContainerWidget.cpp", 62 | "src/DockFocusController.cpp", 63 | "src/DockManager.cpp", 64 | "src/DockOverlay.cpp", 65 | "src/DockSplitter.cpp", 66 | "src/DockWidget.cpp", 67 | "src/DockWidgetTab.cpp", 68 | "src/DockingStateReader.cpp", 69 | "src/ElidingLabel.cpp", 70 | "src/FloatingDockContainer.cpp", 71 | "src/FloatingDragPreview.cpp", 72 | "src/IconProvider.cpp", 73 | "src/PushButton.cpp", 74 | "src/ResizeHandle.cpp", 75 | "src/ads_globals.cpp", 76 | "src/linux/FloatingWidgetTitleBar.cpp; platform_system == 'Linux'", 77 | ] 78 | -------------------------------------------------------------------------------- /sip/AutoHideDockContainer.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CAutoHideDockContainer : QFrame 9 | { 10 | 11 | %TypeHeaderCode 12 | #include 13 | %End 14 | 15 | protected: 16 | virtual bool eventFilter(QObject* watched, QEvent* event); 17 | virtual void resizeEvent(QResizeEvent* event); 18 | virtual void leaveEvent(QEvent *event); 19 | virtual bool event(QEvent* event); 20 | void updateSize(); 21 | void saveState(QXmlStreamWriter& Stream); 22 | 23 | public: 24 | CAutoHideDockContainer(ads::CDockWidget* DockWidget /Transfer/, ads::SideBarLocation area, 25 | ads::CDockContainerWidget* parent /TransferThis/); 26 | virtual ~CAutoHideDockContainer(); 27 | ads::CAutoHideSideBar* autoHideSideBar() const; 28 | ads::CAutoHideTab* autoHideTab() const; 29 | ads::CDockWidget* dockWidget() const; 30 | int tabIndex() const; 31 | void addDockWidget(ads::CDockWidget* DockWidget /Transfer/); 32 | ads::SideBarLocation sideBarLocation() const; 33 | void setSideBarLocation(ads::SideBarLocation SideBarLocation); 34 | ads::CDockAreaWidget* dockAreaWidget() const; 35 | ads::CDockContainerWidget* dockContainer() const; 36 | void moveContentsToParent(); 37 | void cleanupAndDelete(); 38 | void toggleView(bool Enable); 39 | void collapseView(bool Enable); 40 | void toggleCollapseState(); 41 | void setSize(int Size); 42 | void resetToInitialDockWidgetSize(); 43 | Qt::Orientation orientation() const; 44 | void moveToNewSideBarLocation(ads::SideBarLocation); 45 | }; 46 | 47 | }; 48 | 49 | %End -------------------------------------------------------------------------------- /sip/AutoHideSideBar.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | 9 | class CAutoHideSideBar : QScrollArea 10 | { 11 | 12 | %TypeHeaderCode 13 | #include 14 | %End 15 | 16 | protected: 17 | virtual bool eventFilter(QObject *watched, QEvent *event); 18 | void saveState(QXmlStreamWriter& Stream) const; 19 | void insertTab(int Index, ads::CAutoHideTab* SideTab /Transfer/); 20 | 21 | public: 22 | CAutoHideSideBar(ads::CDockContainerWidget* parent /TransferThis/, SideBarLocation area); 23 | virtual ~CAutoHideSideBar(); 24 | void removeTab(ads::CAutoHideTab* SideTab) /TransferBack/; 25 | ads::CAutoHideDockContainer* insertDockWidget(int Index, ads::CDockWidget* DockWidget /Transfer/); 26 | void removeAutoHideWidget(ads::CAutoHideDockContainer* AutoHideWidget) /TransferBack/; 27 | void addAutoHideWidget(ads::CAutoHideDockContainer* AutoHideWidget, int Index); 28 | Qt::Orientation orientation() const; 29 | ads::CAutoHideTab* tab(int index) const; 30 | int tabAt(const QPoint& Pos) const; 31 | int tabInsertIndexAt(const QPoint& Pos) const; 32 | int indexOfTab(const CAutoHideTab& Tab) const; 33 | int count() const; 34 | int visibleTabCount() const; 35 | bool hasVisibleTabs() const; 36 | ads::SideBarLocation sideBarLocation() const; 37 | virtual QSize minimumSizeHint() const; 38 | virtual QSize sizeHint() const; 39 | int spacing() const; 40 | void setSpacing(int Spacing); 41 | CDockContainerWidget* dockContainer() const; 42 | }; 43 | 44 | }; 45 | 46 | %End -------------------------------------------------------------------------------- /sip/AutoHideTab.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CAutoHideTab : CPushButton 9 | { 10 | 11 | %TypeHeaderCode 12 | #include 13 | %End 14 | 15 | protected: 16 | void setSideBar(ads::CAutoHideSideBar *SideTabBar); 17 | void removeFromSideBar(); 18 | virtual bool event(QEvent* event); 19 | virtual void contextMenuEvent(QContextMenuEvent* ev); 20 | virtual void mousePressEvent(QMouseEvent* ev); 21 | virtual void mouseReleaseEvent(QMouseEvent* ev); 22 | virtual void mouseMoveEvent(QMouseEvent* ev); 23 | 24 | public: 25 | CAutoHideTab(QWidget* parent /TransferThis/ = 0); 26 | virtual ~CAutoHideTab(); 27 | void updateStyle(); 28 | ads::SideBarLocation sideBarLocation() const; 29 | void setOrientation(Qt::Orientation Orientation); 30 | Qt::Orientation orientation() const; 31 | bool isActiveTab() const; 32 | ads::CDockWidget* dockWidget() const; 33 | void setDockWidget(ads::CDockWidget* DockWidget); 34 | bool iconOnly() const; 35 | ads::CAutoHideSideBar* sideBar() const; 36 | int tabIndex() const; 37 | void setDockWidgetFloating(); 38 | void unpinDockWidget(); 39 | void requestCloseDockWidget(); 40 | }; 41 | 42 | }; 43 | 44 | %End 45 | -------------------------------------------------------------------------------- /sip/DockAreaTabBar.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CDockAreaTabBar : QScrollArea 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | protected: 15 | virtual void wheelEvent(QWheelEvent* Event); 16 | 17 | public: 18 | CDockAreaTabBar(ads::CDockAreaWidget* parent /TransferThis/); 19 | virtual ~CDockAreaTabBar(); 20 | void insertTab(int Index, ads::CDockWidgetTab* Tab /Transfer/); 21 | void removeTab(ads::CDockWidgetTab* Tab) /TransferBack/; 22 | int count() const; 23 | int currentIndex() const; 24 | ads::CDockWidgetTab* currentTab() const; 25 | ads::CDockWidgetTab* tab(int Index) const; 26 | int tabAt(const QPoint& Pos) const; 27 | int tabInsertIndexAt(const QPoint& Pos) const; 28 | virtual bool eventFilter(QObject *watched, QEvent *event); 29 | bool isTabOpen(int Index) const; 30 | virtual QSize minimumSizeHint() const; 31 | virtual QSize sizeHint() const; 32 | void elidedChanged(bool elided); 33 | 34 | public slots: 35 | void setCurrentIndex(int Index); 36 | void closeTab(int Index); 37 | 38 | signals: 39 | void currentChanging(int Index); 40 | void currentChanged(int Index); 41 | void tabBarClicked(int index); 42 | void tabCloseRequested(int index); 43 | void tabClosed(int index); 44 | void tabOpened(int index); 45 | void tabMoved(int from, int to); 46 | void removingTab(int index); 47 | void tabInserted(int index); 48 | }; 49 | 50 | }; 51 | 52 | %End 53 | -------------------------------------------------------------------------------- /sip/DockAreaTitleBar.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CTitleBarButton : QToolButton 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | public: 15 | CTitleBarButton(bool ShowInTitleBar, bool HideWhenDisabled, TitleBarButton ButtonId, 16 | QWidget* /TransferThis/ = Q_NULLPTR ); 17 | virtual void setVisible(bool); 18 | void setShowInTitleBar(bool); 19 | 20 | TitleBarButton buttonId() const; 21 | ads::CDockAreaTitleBar* titleBar() const; 22 | bool isInAutoHideArea() const; 23 | 24 | protected: 25 | bool event(QEvent *ev); 26 | }; 27 | 28 | class CDockAreaTitleBar : QFrame 29 | { 30 | %TypeHeaderCode 31 | #include 32 | %End 33 | 34 | protected: 35 | virtual void mousePressEvent(QMouseEvent* ev); 36 | virtual void mouseReleaseEvent(QMouseEvent* ev); 37 | virtual void mouseMoveEvent(QMouseEvent* ev); 38 | virtual void mouseDoubleClickEvent(QMouseEvent *event); 39 | virtual void contextMenuEvent(QContextMenuEvent *event); 40 | 41 | public slots: 42 | void markTabsMenuOutdated(); 43 | 44 | 45 | public: 46 | CDockAreaTitleBar(ads::CDockAreaWidget* parent /TransferThis/); 47 | virtual ~CDockAreaTitleBar(); 48 | ads::CDockAreaTabBar* tabBar() const; 49 | ads::CTitleBarButton* button(ads::TitleBarButton which) const; 50 | ads::CElidingLabel* autoHideTitleLabel() const; 51 | ads::CDockAreaWidget* dockAreaWidget() const; 52 | void updateDockWidgetActionsButtons(); 53 | virtual void setVisible(bool Visible); 54 | void insertWidget(int index, QWidget *widget /Transfer/ ); 55 | int indexOf(QWidget *widget) const; 56 | QString titleBarButtonToolTip(ads::TitleBarButton Button) const; 57 | void setAreaFloating(); 58 | void showAutoHideControls(bool Show); 59 | bool isAutoHide() const; 60 | 61 | signals: 62 | void tabBarClicked(int index); 63 | }; 64 | 65 | }; 66 | 67 | %End 68 | -------------------------------------------------------------------------------- /sip/DockAreaTitleBar_p.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CSpacerWidget : QWidget 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | public: 15 | CSpacerWidget(QWidget* Parent /TransferThis/ = 0 ); 16 | virtual QSize sizeHint() const; 17 | virtual QSize minimumSizeHint() const; 18 | }; 19 | 20 | }; 21 | 22 | %End 23 | -------------------------------------------------------------------------------- /sip/DockComponentsFactory.sip: -------------------------------------------------------------------------------- 1 | %If (Qt_5_0_0 -) 2 | 3 | namespace ads 4 | { 5 | 6 | class CDockComponentsFactory 7 | { 8 | 9 | %TypeHeaderCode 10 | #include 11 | %End 12 | 13 | public: 14 | virtual ~CDockComponentsFactory(); 15 | virtual CDockWidgetTab* createDockWidgetTab(CDockWidget* DockWidget /Transfer/ ) const; 16 | virtual CAutoHideTab* createDockWidgetSideTab(CDockWidget* DockWidget /Transfer/) const; 17 | virtual CDockAreaTabBar* createDockAreaTabBar(CDockAreaWidget* DockArea /Transfer/ ) const; 18 | virtual CDockAreaTitleBar* createDockAreaTitleBar(CDockAreaWidget* DockArea /Transfer/ ) const; 19 | static const CDockComponentsFactory* factory(); 20 | static void setFactory(CDockComponentsFactory* Factory /KeepReference/); 21 | static void resetDefaultFactory(); 22 | 23 | }; 24 | 25 | }; 26 | 27 | %End 28 | -------------------------------------------------------------------------------- /sip/DockFocusController.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | /** 9 | * Manages focus styling of dock widgets and handling of focus changes 10 | */ 11 | class CDockFocusController : QObject 12 | { 13 | %TypeHeaderCode 14 | #include 15 | %End 16 | 17 | public: 18 | CDockFocusController(ads::CDockManager* DockManager); 19 | virtual ~CDockFocusController(); 20 | 21 | void notifyWidgetOrAreaRelocation(QWidget* RelocatedWidget); 22 | void notifyFloatingWidgetDrop(ads::CFloatingDockContainer* FloatingWidget); 23 | ads::CDockWidget* focusedDockWidget() const; 24 | void setDockWidgetTabFocused(ads::CDockWidgetTab* Tab); 25 | void clearDockWidgetFocus(ads::CDockWidget* dockWidget); 26 | void setDockWidgetTabPressed(bool Value); 27 | 28 | public slots: 29 | void setDockWidgetFocused(ads::CDockWidget* focusedNow); 30 | 31 | }; // class DockFocusController 32 | }; 33 | // namespace ads 34 | 35 | %End -------------------------------------------------------------------------------- /sip/DockOverlay.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CDockOverlay : public QFrame 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | public: 15 | 16 | enum eMode 17 | { 18 | ModeDockAreaOverlay, 19 | ModeContainerOverlay 20 | }; 21 | 22 | CDockOverlay(QWidget* parent /TransferThis/, eMode Mode = ads::CDockOverlay::ModeDockAreaOverlay); 23 | virtual ~CDockOverlay(); 24 | void setAllowedAreas(ads::DockWidgetAreas areas); 25 | void setAllowedArea(ads::DockWidgetArea area, bool Enable); 26 | ads::DockWidgetAreas allowedAreas() const; 27 | ads::DockWidgetArea dropAreaUnderCursor() const; 28 | int tabIndexUnderCursor() const; 29 | ads::DockWidgetArea visibleDropAreaUnderCursor() const; 30 | ads::DockWidgetArea showOverlay(QWidget* target); 31 | void hideOverlay(); 32 | void enableDropPreview(bool Enable); 33 | bool dropPreviewEnabled() const; 34 | QRect dropOverlayRect() const; 35 | virtual bool event(QEvent *e); 36 | 37 | protected: 38 | virtual void paintEvent(QPaintEvent *e); 39 | virtual void showEvent(QShowEvent* e); 40 | virtual void hideEvent(QHideEvent* e); 41 | }; 42 | 43 | 44 | class CDockOverlayCross : public QWidget 45 | { 46 | 47 | public: 48 | enum eIconColor 49 | { 50 | FrameColor, 51 | WindowBackgroundColor, 52 | OverlayColor, 53 | ArrowColor, 54 | ShadowColor 55 | }; 56 | 57 | protected: 58 | QString iconColors() const; 59 | QColor iconColor() const; 60 | void setIconFrameColor(const QColor& Color); 61 | void setIconBackgroundColor(const QColor& Color); 62 | void setIconOverlayColor(const QColor& Color); 63 | void setIconArrowColor(const QColor& Color); 64 | void setIconShadowColor(const QColor& Color); 65 | virtual void showEvent(QShowEvent* e); 66 | void setAreaWidgets(const QHash& widgets); 67 | 68 | public: 69 | CDockOverlayCross(ads::CDockOverlay* overlay /TransferThis/); 70 | virtual ~CDockOverlayCross(); 71 | void setIconColor(ads::CDockOverlayCross::eIconColor ColorIndex, const QColor& Color); 72 | QColor iconColor(ads::CDockOverlayCross::eIconColor ColorIndex) const; 73 | ads::DockWidgetArea cursorLocation() const; 74 | void setupOverlayCross(ads::CDockOverlay::eMode Mode); 75 | void updateOverlayIcons(); 76 | void reset(); 77 | void updatePosition(); 78 | void setIconColors(const QString& Colors); 79 | }; 80 | 81 | }; 82 | 83 | %End 84 | -------------------------------------------------------------------------------- /sip/DockSplitter.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CDockSplitter : QSplitter 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | public: 15 | CDockSplitter(QWidget *parent /TransferThis/ = 0); 16 | CDockSplitter(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0); 17 | virtual ~CDockSplitter(); 18 | bool hasVisibleContent() const; 19 | QWidget* firstWidget() const; 20 | QWidget* lastWidget() const; 21 | bool isResizingWithContainer() const; 22 | 23 | }; 24 | 25 | }; 26 | 27 | %End 28 | -------------------------------------------------------------------------------- /sip/DockWidgetTab.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CDockWidgetTab : QFrame 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | protected: 15 | virtual void mousePressEvent(QMouseEvent* ev); 16 | virtual void mouseReleaseEvent(QMouseEvent* ev); 17 | virtual void mouseMoveEvent(QMouseEvent* ev); 18 | virtual void contextMenuEvent(QContextMenuEvent* ev); 19 | virtual void mouseDoubleClickEvent(QMouseEvent *event); 20 | 21 | public: 22 | CDockWidgetTab(ads::CDockWidget* DockWidget /TransferThis/, QWidget* parent /TransferThis/ = 0); 23 | virtual ~CDockWidgetTab(); 24 | bool isActiveTab() const; 25 | void setActiveTab(bool active); 26 | void setDockAreaWidget(ads::CDockAreaWidget* DockArea /Transfer/); 27 | ads::CDockAreaWidget* dockAreaWidget() const; 28 | ads::CDockWidget* dockWidget() const; 29 | void setIcon(const QIcon& Icon); 30 | const QIcon& icon() const; 31 | QString text() const; 32 | void setText(const QString& title); 33 | bool isTitleElided() const; 34 | bool isClosable() const; 35 | virtual bool event(QEvent *e); 36 | void setElideMode(Qt::TextElideMode mode); 37 | void updateStyle(); 38 | QSize iconSize() const; 39 | void setIconSize(const QSize& Size); 40 | 41 | public slots: 42 | virtual void setVisible(bool visible); 43 | 44 | signals: 45 | void activeTabChanged(); 46 | void clicked(); 47 | void closeRequested(); 48 | void closeOtherTabsRequested(); 49 | void moved(const QPoint& GlobalPos); 50 | void elidedChanged(bool elided); 51 | }; // class DockWidgetTab 52 | }; 53 | // namespace ads 54 | 55 | %End 56 | -------------------------------------------------------------------------------- /sip/DockingStateReader.sip: -------------------------------------------------------------------------------- 1 | %If (Qt_5_0_0 -) 2 | 3 | namespace ads 4 | { 5 | 6 | class CDockingStateReader : QXmlStreamReader 7 | { 8 | 9 | %TypeHeaderCode 10 | #include 11 | %End 12 | 13 | 14 | public: 15 | void setFileVersion(int FileVersion); 16 | int fileVersion() const; 17 | }; 18 | 19 | }; 20 | 21 | %End -------------------------------------------------------------------------------- /sip/ElidingLabel.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CElidingLabel : QLabel 9 | { 10 | %TypeHeaderCode 11 | #include 12 | %End 13 | 14 | protected: 15 | virtual void mouseReleaseEvent(QMouseEvent* event); 16 | virtual void resizeEvent( QResizeEvent *event ); 17 | virtual void mouseDoubleClickEvent( QMouseEvent *ev ); 18 | 19 | public: 20 | CElidingLabel(QWidget* parent /TransferThis/ = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags ()); 21 | CElidingLabel(const QString& text, QWidget* parent /TransferThis/ = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags ()); 22 | virtual ~CElidingLabel(); 23 | Qt::TextElideMode elideMode() const; 24 | void setElideMode(Qt::TextElideMode mode); 25 | bool isElided() const; 26 | 27 | public: 28 | virtual QSize minimumSizeHint() const; 29 | virtual QSize sizeHint() const; 30 | void setText(const QString &text); 31 | QString text() const; 32 | 33 | signals: 34 | void clicked(); 35 | void doubleClicked(); 36 | void elidedChanged(bool elided); 37 | }; 38 | 39 | }; 40 | 41 | %End 42 | -------------------------------------------------------------------------------- /sip/FloatingDragPreview.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CFloatingDragPreview : QWidget, ads::IFloatingWidget 9 | { 10 | 11 | %TypeHeaderCode 12 | #include 13 | %End 14 | 15 | protected: 16 | virtual void paintEvent(QPaintEvent *e); 17 | CFloatingDragPreview(QWidget* Content /TransferThis/, QWidget* parent /TransferThis/); 18 | 19 | public: 20 | CFloatingDragPreview(ads::CDockWidget* Content /TransferThis/ ); 21 | CFloatingDragPreview(ads::CDockAreaWidget* Content /TransferThis/ ); 22 | 23 | virtual ~CFloatingDragPreview(); 24 | 25 | virtual bool eventFilter(QObject* watched, QEvent* event); 26 | 27 | public: // implements IFloatingWidget 28 | virtual void startFloating(const QPoint& DragStartMousePos, const QSize& Size, 29 | ads::eDragState DragState, QWidget* MouseEventHandler); 30 | virtual void moveFloating(); 31 | virtual void finishDragging(); 32 | void cleanupAutoHideContainerWidget(ads::DockWidgetArea ContainerDropArea); 33 | 34 | signals: 35 | void draggingCanceled(); 36 | 37 | }; 38 | 39 | }; 40 | 41 | %End 42 | -------------------------------------------------------------------------------- /sip/IconProvider.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CIconProvider 9 | { 10 | 11 | %TypeHeaderCode 12 | #include 13 | %End 14 | 15 | 16 | public: 17 | CIconProvider(); 18 | 19 | virtual ~CIconProvider(); 20 | 21 | QIcon customIcon(eIcon IconId); 22 | 23 | void registerCustomIcon(eIcon IconId, const QIcon& icon /TransferThis/ ); 24 | }; 25 | 26 | }; 27 | 28 | %End -------------------------------------------------------------------------------- /sip/PushButton.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | 9 | class CPushButton : QPushButton 10 | { 11 | %TypeHeaderCode 12 | #include 13 | %End 14 | 15 | public: 16 | enum Orientation { 17 | Horizontal, 18 | VerticalTopToBottom, 19 | VerticalBottomToTop 20 | }; 21 | virtual QSize sizeHint() const; 22 | 23 | ads::CPushButton::Orientation buttonOrientation() const; 24 | void setButtonOrientation(ads::CPushButton::Orientation orientation); 25 | 26 | }; 27 | 28 | }; 29 | 30 | %End 31 | 32 | -------------------------------------------------------------------------------- /sip/ResizeHandle.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | 8 | class CResizeHandle : QFrame 9 | { 10 | 11 | %TypeHeaderCode 12 | #include 13 | %End 14 | 15 | protected: 16 | void mouseMoveEvent(QMouseEvent *); 17 | void mousePressEvent(QMouseEvent *); 18 | void mouseReleaseEvent(QMouseEvent *); 19 | 20 | public: 21 | CResizeHandle(Qt::Edge HandlePosition, QWidget* parent /TransferThis/); 22 | virtual ~CResizeHandle(); 23 | void setHandlePosition(Qt::Edge HandlePosition); 24 | Qt::Edge handlePostion() const; 25 | Qt::Orientation orientation() const; 26 | QSize sizeHint() const; 27 | bool isResizing() const; 28 | void setMinResizeSize(int MinSize); 29 | void setMaxResizeSize(int MaxSize); 30 | void setOpaqueResize(bool opaque = true); 31 | bool opaqueResize() const; 32 | }; 33 | 34 | }; 35 | 36 | %End 37 | -------------------------------------------------------------------------------- /sip/ads.sip: -------------------------------------------------------------------------------- 1 | %Module(name=PyQtAds, call_super_init=True, keyword_arguments="Optional", use_limited_api=True) 2 | %HideNamespace(name=ads) 3 | 4 | %Import QtCore/QtCoremod.sip 5 | %DefaultSupertype sip.simplewrapper 6 | 7 | %Include ads_globals.sip 8 | %Include AutoHideDockContainer.sip 9 | %Include AutoHideSideBar.sip 10 | %Include AutoHideTab.sip 11 | %Include DockWidget.sip 12 | %Include DockAreaTabBar.sip 13 | %Include DockAreaTitleBar_p.sip 14 | %Include DockAreaTitleBar.sip 15 | %Include DockAreaWidget.sip 16 | %Include DockComponentsFactory.sip 17 | %Include DockContainerWidget.sip 18 | %Include DockingStateReader.sip 19 | %Include DockFocusController.sip 20 | %Include DockManager.sip 21 | %Include DockOverlay.sip 22 | %Include DockSplitter.sip 23 | %Include DockWidgetTab.sip 24 | %Include ElidingLabel.sip 25 | %Include FloatingDockContainer.sip 26 | %Include FloatingDragPreview.sip 27 | %Include IconProvider.sip 28 | %Include PushButton.sip 29 | %Include ResizeHandle.sip 30 | %If (WS_X11) 31 | %Include linux/FloatingWidgetTitleBar.sip 32 | %End 33 | -------------------------------------------------------------------------------- /sip/linux/FloatingWidgetTitleBar.sip: -------------------------------------------------------------------------------- 1 | %Import QtWidgets/QtWidgetsmod.sip 2 | 3 | %If (Qt_5_0_0 -) 4 | 5 | namespace ads 6 | { 7 | %TypeHeaderCode 8 | #include 9 | %End 10 | 11 | class CFloatingWidgetTitleBar : QWidget 12 | { 13 | 14 | protected: 15 | virtual void mousePressEvent(QMouseEvent *ev); 16 | virtual void mouseReleaseEvent(QMouseEvent *ev); 17 | virtual void mouseMoveEvent(QMouseEvent *ev); 18 | virtual void mouseDoubleClickEvent(QMouseEvent *event); 19 | 20 | void setMaximizeIcon(const QIcon& Icon); 21 | QIcon maximizeIcon() const; 22 | void setNormalIcon(const QIcon& Icon); 23 | QIcon normalIcon() const; 24 | 25 | public: 26 | explicit CFloatingWidgetTitleBar(CFloatingDockContainer *parent /TransferThis/ = 0); 27 | virtual ~CFloatingWidgetTitleBar(); 28 | void enableCloseButton(bool Enable); 29 | void setTitle(const QString &Text); 30 | void updateStyle(); 31 | void setMaximizedIcon(bool maximized); 32 | 33 | signals: 34 | void closeRequested(); 35 | void maximizeRequested(); 36 | }; 37 | 38 | }; 39 | 40 | %End 41 | -------------------------------------------------------------------------------- /src/DockAreaTitleBar_p.h: -------------------------------------------------------------------------------- 1 | #ifndef DockAreaTitleBar_pH 2 | #define DockAreaTitleBar_pH 3 | /******************************************************************************* 4 | ** Qt Advanced Docking System 5 | ** Copyright (C) 2017 Uwe Kindler 6 | ** 7 | ** This library is free software; you can redistribute it and/or 8 | ** modify it under the terms of the GNU Lesser General Public 9 | ** License as published by the Free Software Foundation; either 10 | ** version 2.1 of the License, or (at your option) any later version. 11 | ** 12 | ** This library is distributed in the hope that it will be useful, 13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | ** Lesser General Public License for more details. 16 | ** 17 | ** You should have received a copy of the GNU Lesser General Public 18 | ** License along with this library; If not, see . 19 | ******************************************************************************/ 20 | 21 | 22 | //============================================================================ 23 | /// \file DockAreaTitleBar_p.h 24 | /// \author Uwe Kindler 25 | /// \date 12.10.2018 26 | /// \brief Declaration of classes CTitleBarButton and CSpacerWidget 27 | //============================================================================ 28 | 29 | 30 | //============================================================================ 31 | // INCLUDES 32 | //============================================================================ 33 | #include 34 | 35 | #include "ads_globals.h" 36 | 37 | namespace ads 38 | { 39 | 40 | 41 | 42 | /** 43 | * This spacer widget is here because of the following problem. 44 | * The dock area title bar handles mouse dragging and moving the floating widget. 45 | * The problem is, that if the title bar becomes invisible, i.e. if the dock 46 | * area contains only one single dock widget and the dock area is moved 47 | * into a floating widget, then mouse events are not handled anymore and dragging 48 | * of the floating widget stops. 49 | */ 50 | class CSpacerWidget : public QWidget 51 | { 52 | Q_OBJECT 53 | public: 54 | using Super = QWidget; 55 | CSpacerWidget(QWidget* Parent = nullptr); 56 | virtual QSize sizeHint() const override {return QSize(0, 0);} 57 | virtual QSize minimumSizeHint() const override {return QSize(0, 0);} 58 | }; 59 | 60 | } 61 | // namespace ads 62 | //----------------------------------------------------------------------------- 63 | #endif // DockAreaTitleBar_pH 64 | -------------------------------------------------------------------------------- /src/DockComponentsFactory.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | /// \file DockComponentsFactory.cpp 3 | /// \author Uwe Kindler 4 | /// \date 10.02.2020 5 | /// \brief Implementation of DockComponentsFactory 6 | //============================================================================ 7 | 8 | //============================================================================ 9 | // INCLUDES 10 | //============================================================================ 11 | #include 12 | #include "DockComponentsFactory.h" 13 | 14 | #include 15 | 16 | #include "DockWidgetTab.h" 17 | #include "DockAreaTabBar.h" 18 | #include "DockAreaTitleBar.h" 19 | #include "DockWidget.h" 20 | #include "DockAreaWidget.h" 21 | 22 | namespace ads 23 | { 24 | 25 | static QSharedPointer DefaultFactory; 26 | 27 | 28 | //============================================================================ 29 | CDockWidgetTab* CDockComponentsFactory::createDockWidgetTab(CDockWidget* DockWidget) const 30 | { 31 | return new CDockWidgetTab(DockWidget); 32 | } 33 | 34 | //============================================================================ 35 | CAutoHideTab* CDockComponentsFactory::createDockWidgetSideTab(CDockWidget *DockWidget) const 36 | { 37 | return new CAutoHideTab(DockWidget); 38 | } 39 | 40 | 41 | //============================================================================ 42 | CDockAreaTabBar* CDockComponentsFactory::createDockAreaTabBar(CDockAreaWidget* DockArea) const 43 | { 44 | return new CDockAreaTabBar(DockArea); 45 | } 46 | 47 | 48 | //============================================================================ 49 | CDockAreaTitleBar* CDockComponentsFactory::createDockAreaTitleBar(CDockAreaWidget* DockArea) const 50 | { 51 | return new CDockAreaTitleBar(DockArea); 52 | } 53 | 54 | 55 | //============================================================================ 56 | QSharedPointer CDockComponentsFactory::factory() 57 | { 58 | if (!DefaultFactory) 59 | { 60 | DefaultFactory.reset(new CDockComponentsFactory()); 61 | } 62 | return DefaultFactory; 63 | } 64 | 65 | 66 | //============================================================================ 67 | void CDockComponentsFactory::setFactory(CDockComponentsFactory* Factory) 68 | { 69 | DefaultFactory.reset(Factory); 70 | } 71 | 72 | 73 | //============================================================================ 74 | void CDockComponentsFactory::resetDefaultFactory() 75 | { 76 | DefaultFactory.reset(new CDockComponentsFactory()); 77 | } 78 | 79 | } // namespace ads 80 | 81 | //--------------------------------------------------------------------------- 82 | // EOF DockComponentsFactory.cpp 83 | -------------------------------------------------------------------------------- /src/DockSplitter.h: -------------------------------------------------------------------------------- 1 | #ifndef DockSplitterH 2 | #define DockSplitterH 3 | /******************************************************************************* 4 | ** Qt Advanced Docking System 5 | ** Copyright (C) 2017 Uwe Kindler 6 | ** 7 | ** This library is free software; you can redistribute it and/or 8 | ** modify it under the terms of the GNU Lesser General Public 9 | ** License as published by the Free Software Foundation; either 10 | ** version 2.1 of the License, or (at your option) any later version. 11 | ** 12 | ** This library is distributed in the hope that it will be useful, 13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | ** Lesser General Public License for more details. 16 | ** 17 | ** You should have received a copy of the GNU Lesser General Public 18 | ** License along with this library; If not, see . 19 | ******************************************************************************/ 20 | 21 | 22 | //============================================================================ 23 | /// \file DockSplitter.h 24 | /// \author Uwe Kindler 25 | /// \date 24.03.2017 26 | /// \brief Declaration of CDockSplitter 27 | //============================================================================ 28 | 29 | //============================================================================ 30 | // INCLUDES 31 | //============================================================================ 32 | #include 33 | 34 | #include "ads_globals.h" 35 | 36 | namespace ads 37 | { 38 | struct DockSplitterPrivate; 39 | 40 | /** 41 | * Splitter used internally instead of QSplitter with some additional 42 | * functionality. 43 | */ 44 | class ADS_EXPORT CDockSplitter : public QSplitter 45 | { 46 | Q_OBJECT 47 | private: 48 | DockSplitterPrivate* d; 49 | friend struct DockSplitterPrivate; 50 | 51 | public: 52 | CDockSplitter(QWidget *parent = Q_NULLPTR); 53 | CDockSplitter(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR); 54 | 55 | /** 56 | * Prints debug info 57 | */ 58 | virtual ~CDockSplitter(); 59 | 60 | /** 61 | * Returns true, if any of the internal widgets is visible 62 | */ 63 | bool hasVisibleContent() const; 64 | 65 | /** 66 | * Returns first widget or nullptr if splitter is empty 67 | */ 68 | QWidget* firstWidget() const; 69 | 70 | /** 71 | * Returns last widget of nullptr is splitter is empty 72 | */ 73 | QWidget* lastWidget() const; 74 | 75 | /** 76 | * Returns true if the splitter contains central widget of dock manager. 77 | */ 78 | bool isResizingWithContainer() const; 79 | }; // class CDockSplitter 80 | 81 | } // namespace ads 82 | 83 | //--------------------------------------------------------------------------- 84 | #endif // DockSplitterH 85 | -------------------------------------------------------------------------------- /src/DockingStateReader.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | /// \file DockingStateReader.cpp 3 | /// \author Uwe Kindler 4 | /// \date 29.11.2019 5 | /// \brief Implementation of CDockingStateReader 6 | //============================================================================ 7 | 8 | //============================================================================ 9 | // INCLUDES 10 | //============================================================================ 11 | #include "DockingStateReader.h" 12 | 13 | namespace ads 14 | { 15 | 16 | //============================================================================ 17 | void CDockingStateReader::setFileVersion(int FileVersion) 18 | { 19 | m_FileVersion = FileVersion; 20 | } 21 | 22 | //============================================================================ 23 | int CDockingStateReader::fileVersion() const 24 | { 25 | return m_FileVersion; 26 | } 27 | } // namespace ads 28 | 29 | //--------------------------------------------------------------------------- 30 | // EOF DockingStateReader.cpp 31 | -------------------------------------------------------------------------------- /src/DockingStateReader.h: -------------------------------------------------------------------------------- 1 | #ifndef DockingStateReaderH 2 | #define DockingStateReaderH 3 | //============================================================================ 4 | /// \file DockingStateReader.h 5 | /// \author Uwe Kindler 6 | /// \date 29.11.2019 7 | /// \brief Declaration of CDockingStateReader 8 | //============================================================================ 9 | 10 | //============================================================================ 11 | // INCLUDES 12 | //============================================================================ 13 | #include 14 | 15 | namespace ads 16 | { 17 | 18 | /** 19 | * Extends QXmlStreamReader with file version information 20 | */ 21 | class CDockingStateReader : public QXmlStreamReader 22 | { 23 | private: 24 | int m_FileVersion; 25 | 26 | public: 27 | using QXmlStreamReader::QXmlStreamReader; 28 | 29 | /** 30 | * Set the file version for this state reader 31 | */ 32 | void setFileVersion(int FileVersion); 33 | 34 | /** 35 | * Returns the file version set via setFileVersion 36 | */ 37 | int fileVersion() const; 38 | }; 39 | 40 | } // namespace ads 41 | 42 | //--------------------------------------------------------------------------- 43 | #endif // DockingStateReaderH 44 | -------------------------------------------------------------------------------- /src/IconProvider.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | /// \file IconProvider.cpp 3 | /// \author Uwe Kindler 4 | /// \date 18.10.2019 5 | /// \brief Implementation of CIconProvider 6 | //============================================================================ 7 | 8 | //============================================================================ 9 | // INCLUDES 10 | //============================================================================ 11 | #include "IconProvider.h" 12 | #include 13 | 14 | namespace ads 15 | { 16 | /** 17 | * Private data class (pimpl) 18 | */ 19 | struct IconProviderPrivate 20 | { 21 | CIconProvider *_this; 22 | QVector UserIcons{IconCount, QIcon()}; 23 | 24 | /** 25 | * Private data constructor 26 | */ 27 | IconProviderPrivate(CIconProvider *_public); 28 | }; 29 | // struct LedArrayPanelPrivate 30 | 31 | //============================================================================ 32 | IconProviderPrivate::IconProviderPrivate(CIconProvider *_public) : 33 | _this(_public) 34 | { 35 | 36 | } 37 | 38 | //============================================================================ 39 | CIconProvider::CIconProvider() : 40 | d(new IconProviderPrivate(this)) 41 | { 42 | 43 | } 44 | 45 | //============================================================================ 46 | CIconProvider::~CIconProvider() 47 | { 48 | delete d; 49 | } 50 | 51 | 52 | //============================================================================ 53 | QIcon CIconProvider::customIcon(eIcon IconId) const 54 | { 55 | Q_ASSERT(IconId < d->UserIcons.size()); 56 | return d->UserIcons[IconId]; 57 | } 58 | 59 | 60 | //============================================================================ 61 | void CIconProvider::registerCustomIcon(eIcon IconId, const QIcon &icon) 62 | { 63 | Q_ASSERT(IconId < d->UserIcons.size()); 64 | d->UserIcons[IconId] = icon; 65 | } 66 | 67 | } // namespace ads 68 | 69 | 70 | 71 | 72 | //--------------------------------------------------------------------------- 73 | // EOF IconProvider.cpp 74 | -------------------------------------------------------------------------------- /src/IconProvider.h: -------------------------------------------------------------------------------- 1 | #ifndef IconProviderH 2 | #define IconProviderH 3 | //============================================================================ 4 | /// \file IconProvider.h 5 | /// \author Uwe Kindler 6 | /// \date 18.10.2019 7 | /// \brief Declaration of CIconProvider 8 | //============================================================================ 9 | 10 | //============================================================================ 11 | // INCLUDES 12 | //============================================================================ 13 | #include 14 | 15 | #include "ads_globals.h" 16 | 17 | namespace ads 18 | { 19 | 20 | struct IconProviderPrivate; 21 | 22 | /** 23 | * This object provides all icons that are required by the advanced docking 24 | * system. 25 | * The IconProvider enables the user to register custom icons in case using 26 | * stylesheets is not an option. 27 | */ 28 | class ADS_EXPORT CIconProvider 29 | { 30 | private: 31 | IconProviderPrivate* d; ///< private data (pimpl) 32 | friend struct IconProviderPrivate; 33 | 34 | public: 35 | /** 36 | * Default Constructor 37 | */ 38 | CIconProvider(); 39 | 40 | /** 41 | * Virtual Destructor 42 | */ 43 | virtual ~CIconProvider(); 44 | 45 | /** 46 | * The function returns a custom icon if one is registered and a null Icon 47 | * if no custom icon is registered 48 | */ 49 | QIcon customIcon(eIcon IconId) const; 50 | 51 | /** 52 | * Registers a custom icon for the given IconId 53 | */ 54 | void registerCustomIcon(eIcon IconId, const QIcon &icon); 55 | }; // class IconProvider 56 | 57 | } // namespace ads 58 | 59 | 60 | //--------------------------------------------------------------------------- 61 | #endif // IconProviderH 62 | -------------------------------------------------------------------------------- /src/PushButton.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | /// \file PushButton.cpp 3 | /// \author Uwe Kindler 4 | /// \date 18.10.2022 5 | /// \brief Implementation of CPushButton 6 | //============================================================================ 7 | 8 | //============================================================================ 9 | // INCLUDES 10 | //============================================================================ 11 | #include "PushButton.h" 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | 19 | namespace ads 20 | { 21 | QSize CPushButton::sizeHint() const 22 | { 23 | QSize sh = QPushButton::sizeHint(); 24 | 25 | if (m_Orientation != CPushButton::Horizontal) 26 | { 27 | sh.transpose(); 28 | } 29 | 30 | return sh; 31 | } 32 | 33 | void CPushButton::paintEvent(QPaintEvent *event) 34 | { 35 | Q_UNUSED(event); 36 | 37 | QStylePainter painter(this); 38 | QStyleOptionButton option; 39 | initStyleOption(&option); 40 | 41 | if (m_Orientation == CPushButton::VerticalTopToBottom) 42 | { 43 | painter.rotate(90); 44 | painter.translate(0, -1 * width()); 45 | option.rect = option.rect.transposed(); 46 | } 47 | else if (m_Orientation == CPushButton::VerticalBottomToTop) 48 | { 49 | painter.rotate(-90); 50 | painter.translate(-1 * height(), 0); 51 | option.rect = option.rect.transposed(); 52 | } 53 | 54 | painter.drawControl(QStyle::CE_PushButton, option); 55 | } 56 | 57 | CPushButton::Orientation CPushButton::buttonOrientation() const 58 | { 59 | return m_Orientation; 60 | } 61 | 62 | void CPushButton::setButtonOrientation(Orientation orientation) 63 | { 64 | m_Orientation = orientation; 65 | updateGeometry(); 66 | } 67 | } // namespace ads 68 | 69 | //--------------------------------------------------------------------------- 70 | // EOF PushButton.cpp 71 | -------------------------------------------------------------------------------- /src/PushButton.h: -------------------------------------------------------------------------------- 1 | #ifndef PushButtonH 2 | #define PushButtonH 3 | //============================================================================ 4 | /// \file PushButton.h 5 | /// \author Uwe Kindler 6 | /// \date 18.10.2022 7 | /// \brief Declaration of CPushButton 8 | //============================================================================ 9 | 10 | //============================================================================ 11 | // INCLUDES 12 | //============================================================================ 13 | #include "ads_globals.h" 14 | 15 | #include 16 | 17 | namespace ads 18 | { 19 | 20 | /** 21 | * ADS specific push button class with orientation support 22 | */ 23 | class ADS_EXPORT CPushButton : public QPushButton 24 | { 25 | Q_OBJECT 26 | public: 27 | enum Orientation { 28 | Horizontal, 29 | VerticalTopToBottom, 30 | VerticalBottomToTop 31 | }; 32 | 33 | using QPushButton::QPushButton; 34 | 35 | virtual QSize sizeHint() const override; 36 | 37 | /** 38 | * Returns the current orientation 39 | */ 40 | Orientation buttonOrientation() const; 41 | 42 | /** 43 | * Set the orientation of this button 44 | */ 45 | void setButtonOrientation(Orientation orientation); 46 | 47 | protected: 48 | virtual void paintEvent(QPaintEvent *event) override; 49 | 50 | private: 51 | Orientation m_Orientation = Horizontal; 52 | }; 53 | 54 | } // namespace ads 55 | 56 | //--------------------------------------------------------------------------- 57 | #endif // PushButtonH 58 | 59 | -------------------------------------------------------------------------------- /src/ads.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | stylesheets/default.css 4 | images/close-button.svg 5 | images/pin-button.svg 6 | images/close-button-disabled.svg 7 | stylesheets/default_linux.css 8 | images/close-button-focused.svg 9 | stylesheets/focus_highlighting.css 10 | stylesheets/focus_highlighting_linux.css 11 | images/tabs-menu-button.svg 12 | images/detach-button.svg 13 | images/detach-button-disabled.svg 14 | images/maximize-button.svg 15 | images/maximize-button-focused.svg 16 | images/restore-button.svg 17 | images/restore-button-focused.svg 18 | images/vs-pin-button.svg 19 | images/vs-pin-button-pinned.svg 20 | images/vs-pin-button-pinned-focused.svg 21 | images/vs-pin-button_45.svg 22 | images/pin-button-big.svg 23 | images/minimize-button.svg 24 | images/minimize-button-focused.svg 25 | images/vs-pin-button-disabled.svg 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/images/minimize-button-focused.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/minimize-button.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/pin-button-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/pin-button.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 54 | -------------------------------------------------------------------------------- /src/images/vs-pin-button-disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/vs-pin-button-pinned-focused.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/vs-pin-button-pinned.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/vs-pin-button.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/images/vs-pin-button_45.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/qtadvanceddockingConfig.cmake: -------------------------------------------------------------------------------- 1 | include(CMakeFindDependencyMacro) 2 | include("${CMAKE_CURRENT_LIST_DIR}/adsTargets.cmake") -------------------------------------------------------------------------------- /src/src.pro: -------------------------------------------------------------------------------- 1 | ADS_OUT_ROOT = $${OUT_PWD}/.. 2 | CONFIG += c++14 3 | CONFIG += debug_and_release 4 | TARGET = $$qtLibraryTarget(qtadvanceddocking) 5 | DEFINES += QT_DEPRECATED_WARNINGS 6 | TEMPLATE = lib 7 | DESTDIR = $${ADS_OUT_ROOT}/lib 8 | QT += core gui widgets 9 | 10 | !adsBuildStatic { 11 | CONFIG += shared 12 | DEFINES += ADS_SHARED_EXPORT 13 | } 14 | adsBuildStatic { 15 | CONFIG += staticlib 16 | DEFINES += ADS_STATIC 17 | } 18 | 19 | windows { 20 | # MinGW 21 | *-g++* { 22 | QMAKE_CXXFLAGS += -Wall -Wextra -pedantic 23 | } 24 | # MSVC 25 | *-msvc* { 26 | QMAKE_CXXFLAGS += /utf-8 27 | } 28 | } 29 | 30 | RESOURCES += ads.qrc 31 | 32 | HEADERS += \ 33 | ads_globals.h \ 34 | DockAreaWidget.h \ 35 | DockAreaTabBar.h \ 36 | DockContainerWidget.h \ 37 | DockManager.h \ 38 | DockWidget.h \ 39 | DockWidgetTab.h \ 40 | DockingStateReader.h \ 41 | FloatingDockContainer.h \ 42 | FloatingDragPreview.h \ 43 | DockOverlay.h \ 44 | DockSplitter.h \ 45 | DockAreaTitleBar_p.h \ 46 | DockAreaTitleBar.h \ 47 | ElidingLabel.h \ 48 | IconProvider.h \ 49 | DockComponentsFactory.h \ 50 | DockFocusController.h \ 51 | AutoHideDockContainer.h \ 52 | AutoHideSideBar.h \ 53 | AutoHideTab.h \ 54 | PushButton.h \ 55 | ResizeHandle.h 56 | 57 | 58 | SOURCES += \ 59 | ads_globals.cpp \ 60 | DockAreaWidget.cpp \ 61 | DockAreaTabBar.cpp \ 62 | DockContainerWidget.cpp \ 63 | DockManager.cpp \ 64 | DockWidget.cpp \ 65 | DockingStateReader.cpp \ 66 | DockWidgetTab.cpp \ 67 | FloatingDockContainer.cpp \ 68 | FloatingDragPreview.cpp \ 69 | DockOverlay.cpp \ 70 | DockSplitter.cpp \ 71 | DockAreaTitleBar.cpp \ 72 | ElidingLabel.cpp \ 73 | IconProvider.cpp \ 74 | DockComponentsFactory.cpp \ 75 | DockFocusController.cpp \ 76 | AutoHideDockContainer.cpp \ 77 | AutoHideSideBar.cpp \ 78 | AutoHideTab.cpp \ 79 | PushButton.cpp \ 80 | ResizeHandle.cpp 81 | 82 | 83 | unix:!macx { 84 | HEADERS += linux/FloatingWidgetTitleBar.h 85 | SOURCES += linux/FloatingWidgetTitleBar.cpp 86 | LIBS += -lxcb 87 | QT += gui-private 88 | } 89 | 90 | isEmpty(PREFIX){ 91 | PREFIX=../installed 92 | warning("Install Prefix not set") 93 | } 94 | headers.path=$$PREFIX/include 95 | headers.files=$$HEADERS 96 | target.path=$$PREFIX/lib 97 | INSTALLS += headers target 98 | 99 | DISTFILES += 100 | --------------------------------------------------------------------------------