Compare commits

...

1245 Commits
2.3.2 ... 4.5.0

Author SHA1 Message Date
Uwe Kindler
87cffe5d40 Updated New and Noteworthy in README.md for new feature TabsAtBottom 2026-01-11 17:59:34 +01:00
Uwe Kindler
d47d87e4b8 Updated showcase section for PiSoWorks application 2026-01-11 17:53:19 +01:00
Uwe Kindler
3b0f6f92a9 Updated TabsAtBottom documentation 2026-01-11 17:49:13 +01:00
Uwe Kindler
12cb417682 Removed appveyor and travis CI support 2026-01-11 17:48:50 +01:00
Uwe Kindler
a674eea1cd Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2025-11-26 08:53:10 +01:00
Uwe Kindler
a2854a7740 Added cmake modules to integrate version information into Windows DLLs 2025-11-26 08:51:22 +01:00
Uwe Kindler
cd984881e5 Improved raising of dock widget application on linux. 2025-11-24 22:15:42 +01:00
Michael Jackson
eb22a9aef6 COMP: Fix warnings about override on public destructors (#788) 2025-11-12 08:22:45 +01:00
Ivan Ugryumov
d709230510 Replace qDebug with ADS_PRINT (#787) 2025-11-10 20:44:55 +01:00
hormnek
d467b21960 Fix qApp connection (#778) 2025-10-09 21:27:30 +02:00
anoy.
893af516b2 Remove GuiPrivate dependency for Windows builds (#777) 2025-10-09 21:26:38 +02:00
Uwe Kindler
9fd5002886 Added documentation for TabsAtBottom flag 2025-09-26 22:08:14 +02:00
Uwe Kindler
39c8407e0c Updated autohidedragndrop example to use new TabsAtBottom config flag 2025-09-26 21:52:49 +02:00
Vautour, André
e922a1e5bc Updated the title label styling in all of the stylesheets. 2025-09-24 13:48:26 -03:00
Vautour, André
66e10e022b Don't show title bar for floating widgets with tabs at bottom. 2025-09-24 09:36:38 -03:00
Vautour, André
3342fd6596 Support tabs at the bottom of dock widgets. 2025-09-23 16:38:44 -03:00
Uwe Kindler
c1977c51fa Added PySoWorks to showcase section 2025-09-17 22:00:47 +02:00
Jan Grulich
dc1e76d60c Introduce SOVERSION for ABI compatibility (#771)
This commit sets the library's SOVERSION to its major version number.

Setting the soname this way establishes a clear ABI promise. This allows
users to safely upgrade to minor or patch releases without needing to
recompile their applications, as long as the major version remains the
same.
2025-09-10 13:43:55 +02:00
Nicolas Elie
6c073b2833 Add gui-private include dirs for Qt5 (#768) 2025-09-03 08:50:03 +02:00
TheComet
11004ebaa0 Fix C++23 Warnings (#764)
Co-authored-by: Alexander Murray <alexander.murray@franke.com>
2025-08-25 20:09:04 +02:00
Uwe Kindler
2583408420 Removed color from release badge because orange is used for releases < 1.0 2025-08-22 10:25:20 +02:00
Uwe Kindler
dec0442007 Fixed issue #762 - Context menu entries for DockWidget tab missing for last dock widget 2025-08-22 10:07:21 +02:00
Michael Jackson
c020f82a6c BUG: Fixes Linux + Qt 6.9 cmake configuration and linker errors (#752)
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
2025-06-13 10:16:17 +02:00
Uwe Kindler
c1555c30cc Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2025-06-12 15:45:06 +02:00
Cole Beezley
d6cb127320 Fixed typo in DockContainerWidget.h (#750) 2025-06-12 15:02:41 +02:00
Uwe Kindler
c2373eb7de Updated documentation link in README.md 2025-06-12 15:01:44 +02:00
Uwe Kindler
d5843ff7d3 Documented the use of Qt::AA_ShareOpenGLContexts when using OpenGL with ADS 2025-06-12 14:55:31 +02:00
Uwe Kindler
c135782001 Updated examples and demo to use createDockWidget() function for dock manager instead of deprecated DockWidgetr constructor 2025-06-12 14:50:16 +02:00
Uwe Kindler
79c208da4f Added documentation for xfce4 focus stealing issue 2025-06-12 14:18:50 +02:00
Uwe Kindler
b67c4a0c84 Added Scrutiny Debugger to showcase section 2025-06-12 14:01:12 +02:00
Uwe Kindler
6b9105b813 Added showcase image for scrutiny 2025-06-12 13:34:30 +02:00
Uwe Kindler
6c6e0333a9 Merge branch 'ci-dev' 2025-06-11 23:14:57 +02:00
Uwe Kindler
d55387d087 Added windows-cmake.yml file 2025-06-11 23:08:33 +02:00
Uwe Kindler
bf9560f8ea Updated README.md with workflow badges 2025-06-11 23:01:33 +02:00
Uwe Kindler
949ed40006 Updated mingw tool to mingw1310 2025-06-11 22:33:21 +02:00
Uwe Kindler
f2a9dd4db4 Updated Windows workflow to use Qt MinGW 9 2025-06-01 19:53:32 +02:00
Uwe Kindler
ed67081b74 Removed caching from MinGW build 2025-06-01 18:21:41 +02:00
Uwe Kindler
705d931231 Updated MinGW build 2025-06-01 18:17:57 +02:00
Uwe Kindler
d1367c9dd4 Updated the MinGW build 2025-06-01 18:16:17 +02:00
Uwe Kindler
31402ee9f8 Updated windows-cmake.yml to use bundled Qt MinGW toolchain 2025-06-01 18:10:16 +02:00
Uwe Kindler
b7cbac88b3 Merge branch 'ci-dev' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System into ci-dev 2025-06-01 17:56:34 +02:00
Uwe Kindler
fe8c88771f Swicthed MinGW build from Ninja to MinGW 2025-06-01 17:56:23 +02:00
githubuser0xFFFF
befcd9eadf Update windows-cmake.yml 2025-06-01 17:41:30 +02:00
Uwe Kindler
46e5aea61c Updated arch 2025-06-01 17:20:26 +02:00
Uwe Kindler
103db689ff Updated CI MinGW Qt version to 6.8.2 2025-06-01 17:11:54 +02:00
Uwe Kindler
bc34470d3c Updated windows-cmake.yml 2025-06-01 17:07:17 +02:00
Uwe Kindler
646bddfea3 Workaround bug in install-qt-action 2025-06-01 16:57:59 +02:00
Uwe Kindler
ec196715e0 Removed non working windows-cmake.yml workflow 2025-06-01 13:46:33 +02:00
Uwe Kindler
cb63f0e6ea And another try 2025-06-01 12:12:23 +02:00
Uwe Kindler
c941b2dfde Updated MinGW build to work properly 2025-06-01 12:08:37 +02:00
Uwe Kindler
671b932804 An another try 2025-06-01 12:03:55 +02:00
Uwe Kindler
f76d3b4834 And another try 2025-06-01 11:59:28 +02:00
Uwe Kindler
c248f79971 And another try 2025-06-01 11:58:13 +02:00
Uwe Kindler
0566677a9d Updated workflow 2025-06-01 11:52:11 +02:00
Uwe Kindler
268998961b Updated windows-cmake.yml 2025-06-01 11:48:50 +02:00
Uwe Kindler
716d6f7f25 Updated run command in yaml for MSVC 2025-06-01 11:15:26 +02:00
Uwe Kindler
ceb7c91844 Updated workflow file to fix wrong CMake detection of MSVC 2025-06-01 11:06:38 +02:00
Uwe Kindler
0a78dcf460 Add workflow to build with CMake and MSVC / MinGW on Windows 2025-06-01 10:48:14 +02:00
Uwe Kindler
da7d23c127 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2025-06-01 10:39:10 +02:00
Michael Jackson
64d80b2c53 LIC: Move installation of license file to share/ads folder (#748)
Signed-off-by: Michael A. Jackson <mike.jackson@bluequartz.net>
2025-05-30 20:19:14 +02:00
githubuser0xFFFF
f2a029a0c6 Update linux-builds.yml 2025-05-08 22:03:21 +02:00
githubuser0xFFFF
c1b60959ae Update linux-builds.yml 2025-05-08 21:59:12 +02:00
githubuser0xFFFF
d53728c0a8 Update linux-builds.yml 2025-05-08 21:45:55 +02:00
githubuser0xFFFF
a7ad4386e4 Update linux-builds.yml 2025-05-08 21:37:14 +02:00
Pier-Yves Lessard
4e90a38c52 Remove dangling pointer to tab widget when a dock widget is removed from autohide side bar (#740) 2025-05-08 21:18:11 +02:00
Uwe Kindler
4947548224 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2025-05-08 21:06:32 +02:00
FelixBer
991b69cc51 fix compile with Qt 6.9.0 - qplatformnativeinterface.h missing (#736)
Co-authored-by: fb <f@b.com>
2025-04-23 19:10:16 +02:00
Federico Fuga
df1fa27127 Fix nasty and still unclear bug with "Close Other" not closing all tabs in certain conditions. (#725) 2025-03-17 10:38:10 +01:00
Uwe Kindler
936eba01cd Bring all floating widgets to foreground on Linux if a dockwidget is
dragged
2025-03-14 11:45:50 +01:00
Uwe Kindler
9f8dd99cac Improved fix #722 - it now works always even if focus highlighting is
disabled
2025-03-13 14:19:47 +01:00
Uwe Kindler
90e5adde29 Fixed #722 - Ensure that application is in front of other application what dragging floating windows 2025-03-07 09:59:24 +01:00
André Meyer
ddbed9ea14 Always show TitleBar if it contains any explicit actions (#720) 2025-03-07 08:55:42 +01:00
Josiah Bills
c305432ab2 Fixed crash caused by unparented widgets after restoring layout. (#724)
This is essentially due to `setDockArea` undoing the earlier
`setParent`.
2025-03-07 08:52:48 +01:00
Uwe Kindler
e836b154eb Fixed #711 - Focus loss when closing other dock widgets 2025-03-06 14:59:36 +01:00
githubuser0xFFFF
782589523e Update linux-builds.yml
Updated actions/cache@v1 to actions/cache@v3
2025-03-06 13:24:13 +01:00
Talley Lambert
bb105d2ef6 Mention pyqt6 bindings in readme (#723) 2025-03-03 21:38:40 +01:00
Michael Jackson
483bb7354a DOC: Update DREAM3D-NX information and screen shot (#712)
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
2025-02-07 10:03:16 +01:00
anoy.
7d9f9b43a7 update minimum CMake version to 3.16 (#710) 2025-02-05 11:52:17 +01:00
Uwe Kindler
7fd5cbe9d7 Improved user-guide.md 2025-01-16 08:07:08 +01:00
luzpaz
a16d17a8bf Fix various typos (#692)
* Fix various typos
Found via `codespell -q 3 -L te,ridiculus,varius`

* Add another typo fix
2025-01-15 09:00:47 +01:00
Uwe Kindler
faf24cd531 Implemented issue #694 - added auto hide configuration flag AutoHideCloseOnOutsideMouseClick 2025-01-15 08:37:43 +01:00
Uwe Kindler
979d76aa47 Imporved user guide - added documentation for some undocumented flags. 2024-12-20 11:09:11 +01:00
Uwe Kindler
0a55bcd586 Updated README.md to use the new factory function CDockManager::createDockWidget() 2024-12-20 10:35:22 +01:00
Uwe Kindler
f41a6f06fe Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2024-12-20 10:27:35 +01:00
Uwe Kindler
349d584228 Adjusted MyDockAreaTitleBar source code style 2024-12-20 10:26:59 +01:00
Uwe Kindler
fcad7763ff Add factory method to Dock manager as an alternative method to create DockWidget, supporting custom factory 2024-12-20 10:21:57 +01:00
Uwe Kindler
1bec4234c3 Added support for componentsFactory per dock manager 2024-12-20 10:12:46 +01:00
Nolan Kramer
0be5ba8cf6 Fix issue with windeployqt (#683)
* Fix issue with windeployqt

* Rename library to requested format
2024-12-13 21:57:00 +01:00
Uwe Kindler
7245dced84 Added new config flag DoubleClickUndocksWidget to configure if double clicking a DockWidget tab or titlebar undocks the widget 2024-12-12 15:38:29 +01:00
Uwe Kindler
e2f611ea9a CDockAreaTitleBar::resizeEvent function to fix issue #656 2024-12-12 14:53:24 +01:00
Ivan Ugryumov
1f21eb0200 Improved tab bar scrolling (#678)
* Improved tab bar scrolling

* Fix: tab bar scroll for mouse
2024-12-12 13:13:01 +01:00
Federico Fuga
f2378636e2 Add ability to customize the DockArea Title Bar and DockWidget Tab context menu 2024-11-20 15:38:39 +01:00
Federico Fuga
509b2356d1 Fix missing declarations 2024-11-20 15:38:21 +01:00
Uwe Kindler
30b802bd10 Fixed Qt5 build issues 2024-11-20 15:31:31 +01:00
Uwe Kindler
e857421fdf Added all build* subfolders to .gitignore 2024-10-28 15:41:46 +01:00
Uwe Kindler
8dcdc8fad2 Improved autohidedragndrop example to check, if it also works when dragging with multiple auto hide tabs 2024-10-28 15:40:32 +01:00
Uwe Kindler
f964ce2c68 Refactored, fixed and improved drag hover functionality 2024-10-28 15:39:29 +01:00
Uwe Kindler
eb9b439d11 Added support for setting config parameters to CDockManager 2024-10-28 15:30:29 +01:00
TheBoje
a13ed7e4d6 Add AutoHideDragNDrop example 2024-10-22 22:36:53 +02:00
TheBoje
8cfa5c8e0e Fix formatting#2 (#663) 2024-10-04 22:27:15 +02:00
TheBoje
2878559ee6 Fix formatting (#663) 2024-10-04 22:23:40 +02:00
TheBoje
6ff39bccf8 Add open auto-hide dock on hover from drag and drop (#663) 2024-10-04 22:17:42 +02:00
gavininfinity
952131a1e9 Make startDragging public (#658) 2024-08-19 07:37:51 +02:00
Uwe Kindler
5edbcc1970 Fixed issue #654 - Wheel event on DockAreaTabBar 2024-07-25 08:42:30 +02:00
Uwe Kindler
04f6d9168e Fixed #642 - The floating window can not back to normal size after maximizing it 2024-07-08 14:32:33 +02:00
Uwe Kindler
cea1327dac Fixed #653 - DisablingTabTextEliding not letting DockAreaDynamicTabsMenuButtonVisibility to function and program crashes 2024-07-08 12:15:00 +02:00
Uwe Kindler
1c41cbff82 Fixed issue #641 - Unexpected behaviour with tab drag on scrollable tab bar 2024-07-08 10:43:02 +02:00
invisibleGG
06e8451fc0 Update DockAreaTabBar.cpp (#640)
This fix seems to have introduced a regression when _this is deleted before the lambda slot occurred, for example deleting the DockManager (and consequently _this) immediately after the execution of updateTabs function (we encountered this problem in linux)
2024-06-03 08:29:59 +02:00
Uwe Kindler
3ff6918b1f Added configflags example to test use of CDockManager config flags 2024-05-21 08:37:35 +02:00
Uwe Kindler
ac3af4c6cd Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2024-05-08 14:44:44 +02:00
Uwe Kindler
41bb861417 Fixed problem in AutoHideSideBar that prevented the dock container, that contained a vertical sidebar with many tabs, from shrinking vertically 2024-05-08 14:43:53 +02:00
Stefan Gerlach
6e63418798 Fix "extra ;" warning (#624) 2024-04-08 11:40:06 +02:00
Nicolas Elie
65781b7cac Include GNUInstallDirs for CMAKE_INSTALL_* vars to be defined (#621) 2024-04-03 23:49:37 +02:00
Nicolas Elie
d7e6c613c6 Update PyQt bindings to 4.3.0 (#622) 2024-04-03 23:49:08 +02:00
UnlimitedStack
8da0713bf0 Ensure that TabWidget was not deleted by using it as context object (#612)
Co-authored-by: Marcus Venturi <marcus.venturi@visu-it.de>
2024-03-16 01:23:42 +01:00
NeroBurner
08da925fde readme: small wording improvements (#610)
Removes an extra `the` in the Readme about the tested Linux versions
2024-02-28 20:45:32 +01:00
Dominik Nussbaumer
fb58c435ef Fix ODR violations when using CMake unity builds. (#609) 2024-02-28 13:25:20 +01:00
Dominik Nussbaumer
6bf593ef4b fix forward declarations of QXmlStreamWriter (#608) 2024-02-27 17:34:42 +01:00
Uwe Kindler
6b3b7750cb Fixed #604 - AutoHide widgets disapears when last open DockWidget is closed 2024-02-12 08:18:33 +01:00
Uwe Kindler
541db8e214 Fixed wrong hiding/showing of dock area title bar buttons when DockAreaHideDisabledButtons flag is enabled 2024-02-12 08:11:56 +01:00
Uwe Kindler
644c828f00 Fixed crash caused by changes related to issue #594 - deletion of CFloatingWidget caused crash when loading a state from XML 2024-01-26 16:31:04 +01:00
Uwe Kindler
ed6636ae26 Added CDockManager::lockDockWidgetFeaturesGlobally functionality to globally "freeze" the current docking layout 2024-01-23 13:29:41 +01:00
Stefan Gerlach
1a543e946d Fix 'zero as null pointer constant' warning (#598) 2024-01-16 14:05:42 +01:00
Uwe Kindler
9bdefd6055 Fixed issue #597 - Crashes when the floating widget moves to the dock manager and then tries to drag it back 2024-01-16 14:03:53 +01:00
Uwe Kindler
8fd691968c Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2024-01-04 08:31:57 +01:00
Uwe Kindler
7abc698d09 Fixed #594 - Destruction of CDockWidget inside a CFloatingDockContainer 2024-01-04 08:31:18 +01:00
Uwe Kindler
5b23248fb8 Fixed debug output issues and improved debug output for CDockWidget destructor 2024-01-04 08:30:17 +01:00
Uwe Kindler
46a5cee9c9 Added .clang-format file 2024-01-02 09:11:36 +01:00
Benjamin Buch
6c2c9888be respect customized CMake install locations (#593) 2023-12-12 13:54:51 +01:00
Uwe Kindler
44ff9e9956 Fixed some compiler warnings on Ubuntu 22.04 2023-12-08 07:58:36 +01:00
tmartsum
f848df74c3 Improve safety in code (#588)
Delete areas later so that that they can be accessed by
(inherited) dock widgets in dtor. Add some QPointer to
prevent crashes.

Hence allow users to do more while dock widgets etc
are being destroyed.
2023-12-08 06:47:02 +01:00
tmartsum
6c98c29855 Update documentation regarding central widget (#589) 2023-12-07 10:00:30 +01:00
tmartsum
c34d479d5c Avoid dock manager double delete (crashes) (#587)
If a dockwidget has been manually deleted, the dockmanager
would delete it again when deleting the area in its dtor.
The 'optimal' solution would likely have been changing
CDockWidget::~CDockWidget to add
if (d->DockArea) d->DockArea->removeDockWidget(this);
(before delete d).
However, it is not trivial (for me) to conclude that such
a change would be safe on program shutdown.

Co-authored-by: Thorbjørn Lund Martsum <thorbjorn@luxion.com>
2023-12-06 15:12:48 +01:00
jporcher
a7a97e6978 Fix https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/585 (#586) 2023-12-05 14:44:31 +01:00
Uwe Kindler
ec018a4c70 Added documentation for new "ShowTabTextOnlyForActiveTab" config flag 2023-12-04 09:24:59 +01:00
Uwe Kindler
0fabebb0fe Merge branch 'master' of https://github.com/nitramr/Qt-Advanced-Docking-System into nitramr-master 2023-12-04 09:10:34 +01:00
Uwe Kindler
521e1fbe39 Updated default AutoHide config to use Minimize button 2023-12-04 09:10:02 +01:00
Uwe Kindler
5f2aeaef00 Updated gitignore 2023-12-04 09:09:37 +01:00
nitramr
818e568f4a new configuration of icon only tabs 2023-12-02 14:48:43 +01:00
tmartsum
5d6831d179 Fix DockWidget crach when area is a nullptr. (#582)
When requesting hide on a dockwidget that has been added
to a dockmanager, but isn't yet visible, there was a creash.
The crash has been fixed by moving the code to the existing
guard check for the area.

Co-authored-by: Thorbjørn Lund Martsum <thorbjorn@luxion.com>
2023-12-01 15:13:45 +01:00
Uwe Kindler
a2c94c16b5 Fixed bug in focus_highlighting.css stylesheet 2023-11-27 22:04:45 +01:00
Uwe Kindler
68f1084bf0 Added parentSplitter() fucntion to DockArea and removed dead code from DockContainerWidget 2023-11-27 21:48:14 +01:00
Uwe Kindler
761bfc50d6 Fixed #581 - FocusHighlighting is broken after detaching a dock widget 2023-11-24 13:54:19 +01:00
Uwe Kindler
59b4dfb89c Updated documentation 2023-11-07 12:23:01 +01:00
Uwe Kindler
bfa5124999 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2023-11-06 12:18:40 +01:00
Uwe Kindler
234cf9ac58 Improved disabled pin button 2023-11-06 12:17:39 +01:00
Uwe Kindler
8f77f4b42a Added documentation for new Auto Hide Minimize button 2023-11-06 12:08:31 +01:00
Uwe Kindler
fa94da00d4 Added optional Minimize button to AutoHide dock widget title bar 2023-11-06 11:06:12 +01:00
gafusss
40beef964b Fix memory leak in CDockContainerWidget::restoreState (#576)
delete old root splitter layout item
2023-11-04 06:49:01 +01:00
Uwe Kindler
420baeedfe Added support for global dock manager toolbar style and custom dock widget toolbar style for dock widgets 2023-10-19 10:25:23 +02:00
Uwe Kindler
0f8096e314 Added minimize and close action to Auto Hide context menu 2023-10-19 09:10:26 +02:00
uggas
9ec97a8867 Add ability to set user defined toggle view action (#562)
Co-authored-by: Harbinder Saggu <harbinder.saggu@safe.com>
2023-10-19 08:07:55 +02:00
Nate Skulic
55ef6ef863 Improve Python Support (#567)
- Reduce requirements for the python build.
- Fix version number.
- Generate type hints for *.pyi files.
- Make functional for sip-build
- Reduced the unnecessary depth of the package.

NOTE: This is a breaking change for python users, where, `from PyQtAds import QtAds` is changed to `import PyQtAds as QtAds`( or simply `import PyQtAds`)
2023-10-05 07:23:54 +02:00
Henning
c0985f6497 Fix empty floating widget on linux (#563) 2023-09-22 20:03:02 +02:00
Uwe Kindler
2f1ef61f82 Fixed documentation issue - wrong location of picture 2023-09-19 08:53:04 +02:00
Uwe Kindler
62d2dd213d Implemented #554 - Add a configuration that avoid tab label eliding 2023-09-19 08:44:31 +02:00
vhutter
3c941a2312 Enabled modifying MSVC runtime in cmake (#559) 2023-09-11 14:57:09 +02:00
603185423
4634b5617c CMake Script - Add debug postfix "d" (#406) (#558)
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/406
2023-09-11 12:56:32 +02:00
André Meyer
2178b52621 Delete implicit ScrollArea when content Widget is deleted in hideDockWidget() (#551) 2023-08-24 11:20:32 +02:00
Ahmad Syarifuddin
61573cba16 Fix crash in auto hide tab (#552)
- Crash is caused by dragging an autohide tab out when it is an icon only.
- The crash can actually happen with non icon only tabs, but is masked by the orientation check.
- Soln: Check if auto hide container exists first on mouse finish dragging event.
2023-08-24 11:15:43 +02:00
Joel Bodenmann
2d2de53dcd Fix CMake scripts for FreeBSD (#550)
This fixes linking of the XCB library on FreeBSD.
2023-08-17 17:57:16 +02:00
luzpaz
0d10c6e2d9 Fix various typos (#547)
Typos found via `codespell -q 3 -L te,ridiculus,varius`
2023-08-08 19:46:12 +02:00
Uwe Kindler
767933d0cb Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2023-08-03 15:58:07 +02:00
Uwe Kindler
7a362b7ee3 Fixed issue #544 - crash in CDockAreaTabBar::currentTab() 2023-08-03 15:57:57 +02:00
Nicolas Elie
77ed9b0661 Update PyQt bindings to 4.1.1 (#542) 2023-08-02 20:23:49 +02:00
Uwe Kindler
65600a4dcd Removed unimolemented superfluous function definitions 2023-07-14 08:07:37 +02:00
Uwe Kindler
ac1879d5cb Added missing README images 2023-07-13 13:59:48 +02:00
Uwe Kindler
f00ef60fb3 Merge remote-tracking branch 'remotes/origin/autohide_drag' 2023-07-13 13:58:08 +02:00
Uwe Kindler
1a1352e456 Updated README.md for 4.1 release 2023-07-13 13:53:29 +02:00
Uwe Kindler
65ae86a46d Removed debug output 2023-07-13 07:25:09 +02:00
Uwe Kindler
e239cdb354 Improved sizing of AutoHideWidgets when dragging between side bars 2023-07-12 14:37:45 +02:00
Uwe Kindler
7140e5e32a Properly handle dragging of dock widget into DockWidgetTabBar and AutoHideSideBar 2023-07-12 14:22:05 +02:00
Uwe Kindler
f5cfe9e05a Fixed tab insertion when dragging side tab 2023-07-12 14:01:39 +02:00
Uwe Kindler
be727c5890 Added initial support for inserting dropped dock widgets at a certain sidebar position 2023-07-12 10:42:24 +02:00
Uwe Kindler
f4fc0dab29 Added support for dropping dock widget to a certain tab postion of a dock area 2023-07-12 09:39:20 +02:00
Uwe Kindler
39bc7f1780 Properly consider pinnable flag of dock widget when painting the drop overlays - no auto hide overlay for non pinnable dock widgets 2023-07-11 10:28:17 +02:00
Uwe Kindler
364ee33f9c Removed some std::cout debug output 2023-07-11 10:27:08 +02:00
Uwe Kindler
cb5e9f60a1 Changed default auto hide config - added flag AutoHideCloseButtonCollapsesDock 2023-07-11 08:26:03 +02:00
Uwe Kindler
2760fb1fe9 AutoHide dock area now always shows pin button independently from DockAreaHasAutoHideButton flag 2023-07-11 08:25:34 +02:00
Uwe Kindler
8a82e4cf57 Removed debug output and fixed painting of SideBar drag overlays 2023-07-10 12:07:44 +02:00
Uwe Kindler
0627b3183f Added "Close" action to AutoHideTab context menu 2023-07-10 10:38:21 +02:00
Uwe Kindler
df1bc94d9e Added Auto-Hide tab unpin context menu entry 2023-07-10 10:18:09 +02:00
Uwe Kindler
6924e69b6b Fixed detaching of auto hide widgets in a floating widget 2023-07-10 10:10:37 +02:00
Uwe Kindler
0a6c58fd66 Properly implemented drag and drop of auto hide tabs 2023-07-10 09:34:11 +02:00
Uwe Kindler
bf22e54fc3 Improved support for AutoHideTab drag and drop 2023-07-07 15:20:43 +02:00
Uwe Kindler
4307f48d99 Implemented initial support for dragging auto hide tabs 2023-07-07 14:42:13 +02:00
Uwe Kindler
4bdc04e9d8 Implemented Pin To functionality for Auto Hide Tabs 2023-07-07 13:35:55 +02:00
Uwe Kindler
1c6d86e70f Added support for make auto hide widget floating via double click or context menu 2023-07-07 11:21:54 +02:00
Nicolas Elie
6e642ec423 Update PyQt bindings to 4.0.4 (#532) 2023-07-03 14:09:48 +02:00
Uwe Kindler
0b3c3f0123 Merge branch 'master' into autohide_drag 2023-07-01 21:28:07 +02:00
Uwe Kindler
957afe3a07 Updated cmake build for demo to use quick and quickwidgets 2023-06-30 14:01:56 +02:00
Uwe Kindler
4ab726fee3 Updated Linux install requirements in README.md for building the demo application with QQuickWidget 2023-06-30 13:07:42 +02:00
Uwe Kindler
8d4507e9d8 Fixed mouse pressed state for Linux (use memeber variable instead of static) 2023-06-30 11:28:11 +02:00
Uwe Kindler
5a00eece87 Added QQuickWidget to demo application for testing OpenGl QtQuick on Linux 2023-06-30 08:27:51 +02:00
Uwe Kindler
e2929ade14 Fixed DockContainerWidget.cpp contentRect() function to work properly even if no dock widget is visible in container 2023-06-28 15:59:26 +02:00
Uwe Kindler
b801f0655d Improved dragging of widgets into AutoHideArea 2023-06-28 14:01:08 +02:00
Uwe Kindler
f6ccaba6aa Added dropIntoAutoHideSideBar() function 2023-06-28 10:19:59 +02:00
Uwe Kindler
21189759dd Removed drop icons for sidebar drops 2023-06-28 07:32:49 +02:00
Uwe Kindler
047ea3c494 Implemented new dock overlay icons for sidebar areas 2023-06-27 20:43:44 +02:00
Uwe Kindler
f71c8ffe5d Tested various pin buttons 2023-06-27 12:43:12 +02:00
Uwe Kindler
381acb2449 Merge branch 'master' into autohide_drag 2023-06-27 10:20:00 +02:00
Uwe Kindler
09e4e6fa5a Fixed nullptr access in DockWidgetTab 2023-06-27 10:18:38 +02:00
Uwe Kindler
b9479dbd3d Started implementing autohide drag functionality 2023-06-27 10:12:51 +02:00
Uwe Kindler
34cc91a9af Fixed #527 - updateDockWidgetFocusStyle() function error 2023-06-23 21:06:52 +02:00
Uwe Kindler
36cdf4a252 Fixed warnings on MacOS: replaced QApplication::setActiveWindow(this); with QWidget::activateWindow 2023-06-23 10:28:55 +02:00
Uwe Kindler
85f65b3f1a Avoid multiple function calls of parentWidget() function in CAutoHideSideBar::visibleTabCount() and CAutoHideSideBar::hasVisibleTabs() 2023-06-23 10:21:08 +02:00
Ahmad Syarifuddin
92da2eb8bd Bug fix sidebar state during restore (#526)
* fix side bar state being incorrect during restore

* isVisible is invalid during restore state

* Make visibleTabCount function consistent with hasVisibleTabs. Add a bit of documentation.

---------

Co-authored-by: Syarif Fakhri <fakhri.s@duerr-ndt.com>
2023-06-23 09:15:24 +02:00
Uwe Kindler
27edfe63ee Fixed issue #524: Sometimes sidebar visibility state is incorrect 2023-06-22 14:45:29 +02:00
Uwe Kindler
5517822008 Updated README.md with information about filing PySide related issues 2023-06-19 10:25:32 +02:00
Uwe Kindler
702702cbfd Merge branch '7c0o-master' 2023-06-19 10:03:56 +02:00
Uwe Kindler
c552fef134 Added documentation for the queued _this->ensureWidgetVisible(TabWidget) call 2023-06-19 10:02:19 +02:00
Eric Wong
916df28fcd Update FloatingDockContainer.cpp
remove dock container
2023-06-16 17:37:31 +08:00
Eric Wong
c08d91687a Update FloatingDockContainer.cpp
saveState() may use the floatingDockContainer to be deleted
2023-06-14 12:07:45 +08:00
Eric Wong
ccbde05fb7 Update DockAreaWidget.cpp
memory leak
2023-06-14 09:42:47 +08:00
Eric Wong
1049576349 Update DockAreaTabBar.cpp
Sometimes the synchronous calculation of the rectangular area fails
2023-06-08 09:13:41 +08:00
Uwe Kindler
0bfee09b17 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2023-06-06 15:26:21 +02:00
Uwe Kindler
87954e4459 Merged #518 - Add more options to determine the minimum size of a dock widget 2023-06-06 15:25:49 +02:00
githubuser0xFFFF
0301e345b4 Update linux-builds.yml 2023-05-12 19:32:39 +02:00
Uwe Kindler
f9b5ef8d89 Remove Ubuntu 18.04 from linux-builds 2023-05-09 13:36:42 +02:00
Uwe Kindler
0ed1f8f429 Fixed linux-builds.yml file 2023-05-08 10:32:58 +02:00
Uwe Kindler
659537916e Added documentation of new AutoHideCloseButtonCollapsesDock flag 2023-04-28 12:24:12 +02:00
Uwe Kindler
0cac9ac507 Merge branch 'close_button_collapse_dock' of https://github.com/duerr-ndt/Qt-Advanced-Docking-System into duerr-ndt-close_button_collapse_dock 2023-04-28 11:49:17 +02:00
Uwe Kindler
7a79ecab8a Fixed #511 - CDockWidget::toggleView now properly shows auto hide widgets 2023-04-28 11:47:01 +02:00
Uwe Kindler
1186d2b78c Fixed #509 - Implemented support for restoring maximized state of floating widgets on Windows 2023-04-28 11:12:22 +02:00
Syarif Fakhri
b46768537a Add config to make close button collapse auto hide dock 2023-04-28 15:27:22 +08:00
Uwe Kindler
44115d4bd9 Added support for printing events to diagnose window state ploblem 2023-04-28 08:33:45 +02:00
Uwe Kindler
f2d8e17981 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2023-04-27 23:38:19 +02:00
Uwe Kindler
7890a408f4 Added KDE LabPlot to the showcase section 2023-04-27 23:38:05 +02:00
Murmele
a940fc29c6 Use code also for other unix systems like BSD (#507) 2023-04-18 19:17:10 +02:00
Murmele
c6595563af if QT_VERSION_MAJOR is defined, use this version instead of searching again. Labplot does not support Qt6 yet and therefore the version is set manually in the project. If Qt5 and Qt6 are installed, QAd overwrites the Qt5 requirement and then the configuration of the project does not work (#504) 2023-04-16 11:32:45 +02:00
Uwe Kindler
cb24317010 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2023-04-11 08:31:26 +02:00
Uwe Kindler
fb1e427ab7 Added DREAM.3D NX to showcase section 2023-04-11 08:30:25 +02:00
Nicolas Elie
9d28a4d0d5 Fix typo in pyproject.toml (#501) 2023-04-08 09:08:01 +02:00
Uwe Kindler
df34b0eb2b An additional fix for #496 Nonfloatable hidden window disappears on drop in empty area 2023-03-22 18:22:34 +01:00
Uwe Kindler
db3dc80170 Fixed #496 Nonfloatable hidden window disappears on drop in empty area 2023-03-21 08:31:55 +01:00
Nicolas Elie
db16c5f1b5 Update python bindings to 4.0.2 (#495)
* start adaption of PyQt5 bindings to Qt-ADS 4.0

* Update PyQt bindings

* Fix Python bindings build on Linux

---------

Co-authored-by: Mira Weller <mweller@seemoo.tu-darmstadt.de>
2023-03-21 06:04:19 +01:00
Nicolas Elie
d28ca1e7a1 Add options to project.py to specify include and library directories (#493) 2023-03-11 08:34:23 +01:00
Nicolas Elie
e84b4a8146 Add namespace to default argument for python bindings (#492) 2023-03-06 14:53:43 +01:00
Nicolas Elie
46e0d832f8 Fix wrong include path in CMake install (#491) 2023-03-06 14:52:57 +01:00
Uwe Kindler
7e63919c08 Updated ads icons 2023-03-01 08:54:27 +01:00
Uwe Kindler
1873dde358 Added ADTF to showcase section and added video link for Resinsight to showcase section 2023-03-01 08:49:19 +01:00
Uwe Kindler
6362d14da6 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2023-02-27 08:03:08 +01:00
Uwe Kindler
1f48f0f3ad Updated linux-builds.yml to fix broken Ubuntu 22.04 workflow 2023-02-27 07:51:39 +01:00
Nicolas Elie
82695d1b3d Remove setup.py and related files (#490) 2023-02-23 18:42:47 +01:00
Nicolas Elie
08b0f8ad54 Change targets name based on Qt version (#489) 2023-02-23 15:50:50 +01:00
githubuser0xFFFF
54c2bd0c30 Update linux-builds.yml 2023-02-10 14:55:18 +01:00
githubuser0xFFFF
d8784a22b7 Update linux-builds.yml 2023-02-10 14:09:02 +01:00
githubuser0xFFFF
bc9f136f20 Update linux-builds.yml 2023-02-10 13:58:03 +01:00
githubuser0xFFFF
7192a06eb8 Update linux-builds.yml 2023-02-10 13:42:31 +01:00
githubuser0xFFFF
a4c6f1d16c Update linux-builds.yml 2023-02-10 13:30:41 +01:00
githubuser0xFFFF
009af32e61 Update linux-builds.yml
added Ubuntu 22.04 build with Qt6
2023-02-10 13:25:58 +01:00
Uwe Kindler
fab41828ab Updated the build documentation for Ubuntu 22.04 2023-02-10 12:02:42 +01:00
Uwe Kindler
cae42939c8 Disable native windows on Linux if wayland is used 2023-02-10 11:36:40 +01:00
Uwe Kindler
7b30322946 Added ResInsight to showcase section 2023-01-24 16:07:00 +01:00
Uwe Kindler
2730c135ea Removed OpaqueUndocking documentation 2023-01-20 11:58:58 +01:00
Uwe Kindler
9c30169c42 Removed support for opaque undocking 2023-01-20 11:50:34 +01:00
Uwe Kindler
624d21d001 Added RDE to showcase section 2023-01-20 10:25:21 +01:00
Uwe Kindler
378c647952 Fixed #481 issue Undocking an autohide dock widget does not close the AutoHideTab from the sidebar 2023-01-20 09:44:18 +01:00
Uwe Kindler
bbfe99ce7d Added image for showcase section 2023-01-19 13:34:32 +01:00
Uwe Kindler
97d675cb24 Updated README.md 2022-12-27 15:21:51 +01:00
Uwe Kindler
bbfad308e5 Added some pictures to show AutoHide and ImageViewer functionality 2022-12-27 15:19:51 +01:00
Uwe Kindler
858cdb2d66 Added some pictures to show AutoHide and ImageViewer functionality 2022-12-27 15:18:09 +01:00
githubuser0xFFFF
9f5e06ae13 Update linux-builds.yml
Removed ubuntu-latest because there seems to be build issues for ubuntu-22.04
2022-12-09 15:04:03 +01:00
Uwe Kindler
2cd451c53c Added dockContainer() function to AutoHideSideBar.cpp 2022-12-09 08:50:41 +01:00
Uwe Kindler
302ee59d67 Fixed dockContainer() function of AutoHideDockContainer.cpp
Returning the dock container of the internal dock area is wrong, if the dock widget is removed from
the AutoHideDockContainer, then the DockArea container function already returns the new dock container
of the DockArea and not the dock container of the AutoHideDockContainer.cpp
2022-12-09 08:50:12 +01:00
Uwe Kindler
60d915a99f Changed SideTab check in AutoHideDockContainer::eventFilter to improve performance a little bit 2022-11-23 08:43:45 +01:00
Uwe Kindler
47e4a6065a Fixed some issues in AutoHideDockContainer eventFilter function 2022-11-22 21:36:43 +01:00
Uwe Kindler
a2a328e3c7 Ensure that auto hide widget will be closed if user starts dragging floating widget or docked widget 2022-11-22 11:11:49 +01:00
Uwe Kindler
dba6e6c869 Create ActiveX widget only if OpaqueUndocking is not active - it will cause jerking dragging of floating widget 2022-11-22 10:25:44 +01:00
Uwe Kindler
aee68c167a Fixed hiding of AutoHideContainer when clicking outside context menu 2022-11-22 09:01:16 +01:00
Uwe Kindler
5a185268c4 Fixed missing source files in demo/CMakeLists.txt 2022-11-21 08:00:42 +01:00
Uwe Kindler
8bc2236f4f Updated release badge 2022-11-18 23:16:53 +01:00
Uwe Kindler
f39b3095aa Added release and contributor badges 2022-11-18 23:09:26 +01:00
Uwe Kindler
384e29dcec Updated README.md 2022-11-18 22:19:31 +01:00
Uwe Kindler
e060d99d96 Merged master 2022-11-18 21:50:38 +01:00
Uwe Kindler
8d30fc9c3c Fix various clazy warnings 2022-11-18 21:36:31 +01:00
Uwe Kindler
ca1d3fcd38 normalize SIGNAL(),SLOT() signatures 2022-11-18 21:22:44 +01:00
Uwe Kindler
b82d23e59c Guard against null pointer access 2022-11-18 21:15:06 +01:00
Uwe Kindler
6d8e396e92 Prevent null pointer access 2022-11-18 21:12:17 +01:00
Uwe Kindler
0b5840309f Added support for runtime switching of CAutoHideDockContainer sidebar location 2022-11-15 15:08:52 +01:00
Uwe Kindler
ac1a0962d3 Removed QRandomNumberGenerator for Qt versions < 5.10 2022-11-15 14:35:52 +01:00
Uwe Kindler
260a2ddb24 Fixed restoreSideBar function and dropping floating widget with auto hide widgets 2022-11-15 14:21:24 +01:00
Uwe Kindler
7b9f9e10e5 Added function to add / remove CAutoHideDockContainer from SideBar 2022-11-15 14:16:01 +01:00
Uwe Kindler
3fded82f26 Merge branch 'master' into auto_hide_feature 2022-11-15 11:22:14 +01:00
Uwe Kindler
07d0bdc8ed Improved CAutoHideDockContainer::eventFilter function to collapse the auto hide widget if someone clicks into another window 2022-11-15 10:46:15 +01:00
Uwe Kindler
5caa5db273 Added some comment 2022-11-15 09:50:39 +01:00
Uwe Kindler
f554df9e7a Fixed FloatingDockContainer.cpp to properly post the dragging start event 2022-11-15 09:28:23 +01:00
Uwe
7f58877a47 Added FloatingWidgetDragStartEvent to hide AutoHideContainer if user drags floating widget 2022-11-15 08:44:07 +01:00
Uwe Kindler
b50e2017e6 Removed superfluous includes and fixed use of deprecates globalPositionOf() function 2022-11-14 22:16:03 +01:00
Uwe Kindler
e4a71982d9 Added support for inserting a dock widget with a given tab index and added test case 2022-11-14 19:54:12 +01:00
Uwe Kindler
7dee00f89b Removed QColorSpace to fix Ubuntu build 2022-11-14 15:23:08 +01:00
Uwe Kindler
3b8775fd86 Added tab icon 2022-11-14 14:56:18 +01:00
Uwe Kindler
d5ffd8f6a7 Removed debug output 2022-11-14 14:56:06 +01:00
Uwe Kindler
296c7edbd0 Added support for tab index when inserting dockwidgets into area 2022-11-14 14:49:58 +01:00
Uwe Kindler
2563b9e874 Added auto hide contributor name to README.md 2022-11-13 17:20:26 +01:00
Uwe Kindler
f304ed7f70 Added AutoHide feature to README.md 2022-11-11 17:18:58 +01:00
Uwe Kindler
9174339b68 Added Auto-Hide functionality to README.md 2022-11-11 16:45:19 +01:00
Uwe Kindler
407c70a8c5 Fixed insertion of resize handle in AutoHideDockContainer.cpp 2022-11-11 16:43:31 +01:00
Uwe Kindler
87f5b6127b Fixed restoreSideBar() function to prevent multiple side tabs for the same dock widget 2022-11-11 16:33:12 +01:00
Uwe Kindler
d010fe7a95 Fixed bug in AutoHidedockContainer that causes warnings and resizing issues
The bug caused ""setGeometry: Unable to set geometry XxY+Width+Height on QWidgetWindow/'WidgetClassWindow" warnings for OpenGL and QAxWidgets and causes resizing issues for AutoHideDockContainers that contained theses widgets
2022-11-11 15:29:12 +01:00
Uwe Kindler
8e7b7f536e Fixed CAutoHideDockContainer::addDockWidget to prevent OldDockArea->removeDockWidget(DockWidget) call when restoring state 2022-11-09 11:15:42 +01:00
Uwe Kindler
38dfd519c9 Merge branch 'master' into auto_hide_feature 2022-11-08 22:25:08 +01:00
Uwe Kindler
4600af712b Moved Alternative Dock System implementation to the end of README.md 2022-11-08 22:17:59 +01:00
Uwe Kindler
21d8a3dcdb Removed developers section in README.md 2022-11-08 22:10:24 +01:00
Uwe Kindler
0c9773ab54 Added dockingpanes docking library to alternative docking systems 2022-11-08 22:06:49 +01:00
Uwe Kindler
65a645b2cc Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2022-11-08 21:41:20 +01:00
Uwe Kindler
a61d5bd8c0 Updated Python binding documentation with new PySide6 bindings 2022-11-08 21:40:39 +01:00
Uwe Kindler
c646d13b14 Updated ads_logo.svg to fix size for mobile page 2022-11-08 21:12:56 +01:00
Uwe Kindler
f132255492 Added app icon for demo app 2022-11-08 20:38:51 +01:00
Uwe Kindler
208c804db1 User rootSplitter() function instead of searching for child widget 2022-11-08 20:37:48 +01:00
Uwe Kindler
89cca4c36a Reverted file version change for saved state data because the file is backward compatible 2022-11-08 16:33:13 +01:00
Uwe Kindler
64bd9021d9 Fixed bug in dropIntoSection() caused by the addition of AutoHideSideBars to dock container 2022-11-08 16:32:35 +01:00
Uwe Kindler
5a9f23a9ad Fixed emission of top level event in DockContainerWidget 2022-11-07 16:28:27 +01:00
Uwe Kindler
0073870480 Added documentation for Auto-Hide feature 2022-11-07 14:36:19 +01:00
Uwe Kindler
6cdea82a40 Fixed wrong image filename in demo application 2022-11-07 10:15:39 +01:00
Uwe Kindler
95b627e83e Prevent accidental hiding collapsing of an auto hide widget by a mouse click shortly after a mouse over collapse event 2022-11-07 10:15:14 +01:00
Uwe Kindler
2569e0aa05 Dynamically created image viewer now loads random image in demo 2022-11-07 09:50:28 +01:00
Uwe Kindler
be86a772ce Implemented custom close handling for dynamically created image viewers 2022-11-07 08:19:00 +01:00
Uwe Kindler
eda610409a Added actions to demo applications to create floating, docked and auto hide image viewers 2022-11-07 08:11:50 +01:00
Uwe Kindler
44a5873415 Fixed emission of missing top level event when redocking a auto hide widget 2022-11-07 08:11:00 +01:00
Uwe Kindler
e1368be645 Added missing render widget to demo application 2022-11-05 10:14:40 +01:00
Uwe Kindler
1b2b90396a Auto Hide Tab now shows text as tooltip - for icon only buttons to help the user 2022-11-05 10:14:01 +01:00
Uwe Kindler
bd0b2ad483 Improved title bar button tooltips and made naming consistend with context menu 2022-11-05 10:11:09 +01:00
Uwe Kindler
9c537340c5 Added a small image viewer to the demo application 2022-11-04 20:14:04 +01:00
Uwe Kindler
1bf698478d Added feature to apply a Visual Studio like light theme via ToolBar 2022-11-04 13:44:30 +01:00
Uwe Kindler
a79abbdb48 Fixed hiding of sidebar if Auto Hide Tab is closed 2022-11-04 13:43:59 +01:00
Uwe Kindler
a8783084f9 Merge branch 'auto_hide_feature' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System into auto_hide_feature 2022-11-04 12:11:00 +01:00
Uwe Kindler
3f11f74324 Some cleanup 2022-11-04 12:10:52 +01:00
Uwe
99854f686e Update linux stylesheet files to support icon only auto hide sidebars 2022-11-04 11:24:15 +01:00
Uwe Kindler
35f212a788 Fixed Qt6 build 2022-11-04 10:45:09 +01:00
Uwe Kindler
32eaf93692 Removed some whitespace from focus_highlighting.css 2022-11-04 10:23:40 +01:00
Uwe Kindler
6f5e33a2ad Added CSS styling for AutoHideTab that is iconOnly 2022-11-04 10:22:10 +01:00
Uwe Kindler
279a9d7df9 Fixed delayed hiding of CAutoHideDockContainer on mouse leave when resizing 2022-11-04 09:41:00 +01:00
Uwe Kindler
c0247fc02a Added option ShowAutoHideOnMouseOver that enables showing of auto hide widgets by hovering over auto hide tab 2022-11-04 08:51:17 +01:00
Uwe Kindler
27d71eecac Fixed restoreDockWidgetsOpenState() function to delete legacy auto hide widgets 2022-11-03 20:00:03 +01:00
Uwe Kindler
5e59a6dc3a Removed debug output 2022-11-03 16:49:20 +01:00
Uwe Kindler
409d4489cc Added support for auto hiding a dock area / widget to a specific border via context menu 2022-11-03 16:44:40 +01:00
Uwe Kindler
04ea1c68a7 Added option to auto hide a DockWidget or a DockArea to a specific sidebar location 2022-11-03 15:28:01 +01:00
Uwe
1922395b4b Improved linux auto hide specific css code 2022-11-03 12:00:52 +01:00
Uwe Kindler
3b97fdc2ce Improved AutoHideSidebar to provide better resize behavior if parent widget is resized 2022-11-03 11:34:04 +01:00
Uwe Kindler
716207f600 Removed superfluous deleteAutoHideWidgets() function from CDockContainerWidget 2022-11-02 14:41:41 +01:00
Uwe Kindler
159579fb48 Fixed some auto hide specific bugs 2022-11-02 14:29:23 +01:00
Uwe Kindler
d2c08aca70 Improved context menu of DockAreaWidget 2022-11-02 13:06:42 +01:00
Uwe Kindler
b5a179555a Added context menu actions for titleBar and dock widget tab auto hide 2022-11-02 12:45:45 +01:00
Uwe Kindler
9c14c62637 Added setAutoHide() and toggleAutoHide() function to CDockWidget 2022-11-02 08:27:23 +01:00
Uwe Kindler
7c1d04f7be Move calculateSideTabBarArea() function from DockContainerWidget into DockAreaWidget because it is only required there and it depends on dock area position 2022-11-02 08:16:56 +01:00
Uwe Kindler
9f153af5bb Changed MainWindow to enable ActiveX only for non opaque configuration and if AutoHide is disabled 2022-11-02 08:08:44 +01:00
Uwe Kindler
7d79ea2770 Fixed crash by access to invalid dock parent container in CAutoHideDockContainer::updateSize() function 2022-11-02 07:46:02 +01:00
Uwe Kindler
983afc4d1e Fixed wrong size calculation in CAutoHideDockContainer updateSize() function 2022-11-02 07:29:45 +01:00
Uwe Kindler
540961b8dd Renamed toggleAutoHide to setAutoHide and added toggleAutoHide function 2022-11-01 21:31:27 +01:00
Uwe Kindler
fda5887d50 Removed AutoHideInsertOrder enum - new side tabs are always appended. 2022-11-01 20:42:52 +01:00
githubuser0xFFFF
22f609cfa6 Fixed README.md 2022-11-01 19:40:49 +01:00
Uwe Kindler
0d78303713 Fixed typo 2022-11-01 17:41:47 +01:00
Uwe Kindler
fbd25a83f1 Improved auto hide config flags 2022-11-01 17:31:47 +01:00
Uwe Kindler
28745fa2f8 Some small improvements and execute auto hide code only if config is enabled 2022-11-01 17:17:58 +01:00
Uwe Kindler
8e46431b35 Merge branch 'master' into auto_hide_feature 2022-11-01 16:51:17 +01:00
Uwe Kindler
225b1ff2bb Fixed original repository link in README.md 2022-11-01 16:12:42 +01:00
Uwe Kindler
08714ddc3f Properly evaluate pinnable flag 2022-11-01 16:11:45 +01:00
Uwe Kindler
94b80423d7 Made naming of auto hide config flags explicit 2022-11-01 14:36:09 +01:00
Uwe Kindler
bfad80c540 Some code cleanup 2022-11-01 13:41:36 +01:00
Uwe Kindler
da6bf2b9ab Fixed typo 2022-11-01 13:36:32 +01:00
Uwe Kindler
075ef6187f Refactoring: renamed CDockWidgetSideTab to CAutoHideTab and CSideTabBar top CAutoHideSideBar 2022-11-01 13:34:08 +01:00
Uwe Kindler
782af9a1fc Renamed SideTabBar and DockWidgetSideTab into AutoHideSideBar and AutoHideTab for consistent naming 2022-11-01 12:06:59 +01:00
Uwe Kindler
2370d79ca6 Removed debug code from DockManager saveState function 2022-11-01 11:39:34 +01:00
Uwe Kindler
760c0365e0 Use explicit naming for functions to configure auto hide flags and disable auto hide feature by default 2022-11-01 11:35:07 +01:00
Uwe Kindler
fba9c7ce5d Create auto hide sidebars only if config flag is set 2022-11-01 11:22:15 +01:00
Uwe Kindler
44790307d8 Properly implemented restore functionality for auto hide container 2022-11-01 11:02:01 +01:00
Uwe Kindler
d1d801cf16 Moved dock area restore code into CDockAreaWidget 2022-10-30 19:44:33 +01:00
Uwe Kindler
8d670577a9 Moved creation of SideTabWidget into AutoHideDockContainer.cpp 2022-10-28 16:28:23 +02:00
Uwe Kindler
af4a3ef2a8 Removed config flag CDockManager::AutoHideDockAreaHasTitle - this should not be configurable 2022-10-28 15:52:52 +02:00
Uwe
1189945ef1 Updated Linux css files to properly support new auto hide feature 2022-10-28 15:21:21 +02:00
Uwe
f4bfa0f3c5 Changed type of sideTabBarArea properties to int to fix non working Linux stylesheet selectors 2022-10-28 15:20:56 +02:00
Uwe
6adce7337b Some restructuring in default.css and default_linux.css to improve readibility 2022-10-28 13:35:52 +02:00
Uwe Kindler
1eaeed6c56 Changed root index of file system model to prevent lagging UI if network folders are missing 2022-10-28 13:20:27 +02:00
Uwe Kindler
ae5a75bc3f Removed DockWidget->sideTabWidget()->setProperty("focused", Focused), DockWidget->sideTabWidget()->updateStyle() because it is not required 2022-10-28 13:19:38 +02:00
Uwe Kindler
b70fc7b3e8 Added some SideBar documentation 2022-10-28 11:22:42 +02:00
Uwe Kindler
38ee87f762 Merge branch 'duerr-ndt-auto_hide_feature' into auto_hide_feature_refactor 2022-10-28 11:17:13 +02:00
Uwe Kindler
b85a6b55d9 Removed debug output 2022-10-28 11:14:04 +02:00
Uwe Kindler
6cf05c3438 Removed debug output 2022-10-28 11:13:18 +02:00
Uwe Kindler
f6b77f5c3c Implemented showing and hiding of side bar when it does not contain any visible tab 2022-10-28 11:11:35 +02:00
Syarif Fakhri
a012426f9b cleanup - remove unused code, fix comments, add const 2022-10-28 14:26:55 +08:00
Syarif Fakhri
ee2ef8ac69 Use resize margin - disallow users from resizing to the size of the parent container 2022-10-28 14:24:44 +08:00
Syarif Fakhri
2a97833d02 fix cmakelists and remove setDefaultDockProportion from dock widget 2022-10-28 14:21:12 +08:00
Syarif Fakhri
c2bd56e2e9 add set size to allow the user to set a size for the pinned widget manually 2022-10-28 14:20:30 +08:00
Syarif Fakhri
85da93c2fe fix crash when adding auto hide dock container without a previous dock area 2022-10-28 14:19:12 +08:00
Uwe Kindler
c80174e7e5 Removed superfluous code and simplified some things 2022-10-27 15:59:08 +02:00
Uwe Kindler
3f256f7249 Some small renamings 2022-10-27 13:39:00 +02:00
Uwe Kindler
85d7b3047c Changed AutoHide save and restore code 2022-10-27 13:25:40 +02:00
Uwe Kindler
2d67e9e1e5 Some small changes 2022-10-27 11:53:15 +02:00
Uwe Kindler
da9062ef62 Fixed wrong rendering of DockWidgetSideTab if orientation changed when loading perspective 2022-10-27 10:56:42 +02:00
Uwe Kindler
f20c3bc63a Fixed wrong position of AutoHideDockContainer when uncollapsing 2022-10-27 10:52:05 +02:00
Uwe Kindler
11223bf664 Prevent deletion of DockWidgetSideTabs if SideTabBar is deleted - the DockWidget is the real owner 2022-10-27 10:23:11 +02:00
Uwe Kindler
c94155fb06 Moved SideBarLocation enum out of CDockWidgetSideTab into global ads namespace 2022-10-27 10:22:28 +02:00
Uwe Kindler
822ad48152 Code cleanup 2022-10-26 15:40:35 +02:00
Uwe Kindler
ea8e442153 Updated default.css to support the new auto hide functionality 2022-10-26 15:36:17 +02:00
Uwe Kindler
eb008be404 Cleanup of focus_highlighting.css 2022-10-26 15:14:32 +02:00
Uwe Kindler
f5ac29c19e Implemented support for Opaque / Non Opaque auto hide container resizing 2022-10-26 15:06:23 +02:00
Uwe Kindler
f22d62a85b Implemented non opaque resizing for ResizeHandle 2022-10-26 14:35:11 +02:00
Uwe Kindler
5199fa45d1 Implemented save and restore function in AutoHideDockContainer 2022-10-26 11:17:05 +02:00
Uwe Kindler
b2399bb279 Removed superfluous code from AutoHideDockContainer.cpp 2022-10-26 10:57:50 +02:00
Uwe Kindler
b14d3ff30f Added auto hide styling to focus_highlighting.css 2022-10-26 09:51:58 +02:00
Uwe Kindler
b43770de37 Added properties to auto hide widgets to improve CSS styling options 2022-10-26 09:51:37 +02:00
Uwe Kindler
875a358600 Ensure the SideTab is hidden if empty 2022-10-26 09:50:16 +02:00
Uwe Kindler
cd58e6e9b5 Reverted stylesheets to initial code to restart with styling 2022-10-26 07:29:58 +02:00
Uwe Kindler
43c8d69281 Restored initial implementation of ElidingLabel because vertical label is not required anymore - SideBarButton implements orientation feature 2022-10-26 07:28:58 +02:00
Uwe Kindler
293bf9b74f Updated stylesheet to default 2022-10-25 21:10:20 +02:00
Uwe Kindler
00e4dc14ba fixed some documentation typos 2022-10-25 19:57:40 +02:00
Uwe Kindler
8ef696f6f2 Updated README.md 2022-10-25 19:49:36 +02:00
Uwe Kindler
c3aefff3b4 Added missing exports for ResizeHandle and PushButton 2022-10-25 16:05:08 +02:00
Uwe Kindler
44bfc56471 Removed superfluous function setDockSizeProportion() 2022-10-25 15:58:47 +02:00
Uwe Kindler
a74d8acb42 Improved visual_studio_light.css 2022-10-25 15:51:38 +02:00
Syarif Fakhri
fafa52a1ba fix bug where "right click -> detach group" would of an overlay dock would not remove the dockwidget side tab 2022-10-25 18:03:41 +08:00
Syarif Fakhri
54c7c7e2a5 iconsize -> iconSize in css 2022-10-25 18:00:36 +08:00
Syarif Fakhri
314ed4bbf2 fix missing case statement 2022-10-25 17:37:54 +08:00
Uwe Kindler
0fbbef7609 Fixed initial size of AutoHideDockContainer 2022-10-25 11:09:13 +02:00
Uwe Kindler
6eb46250b1 Improved visual_studio_light.css theme 2022-10-25 10:59:01 +02:00
Uwe Kindler
14acd0fe4a Fixed updateResizeHandleSizeLimitMax() function to work properly with all dock containers 2022-10-25 10:01:51 +02:00
Uwe Kindler
7774aaa75a Fixed calculateSideTabBarArea function to work properly with every dock container 2022-10-25 09:58:15 +02:00
Uwe Kindler
ebdd950b4e Removed supefluous onAutoHideToggleRequested() function 2022-10-25 09:52:57 +02:00
Uwe Kindler
8e8ead0b4f Improved visual_studio_light.css 2022-10-25 09:11:10 +02:00
Uwe Kindler
ff0b32a8e0 Added new Visual Studio Light theme 2022-10-24 20:34:09 +02:00
Uwe Kindler
f549a92c01 Added resize support for new QFrame based AutoHideDockContainer 2022-10-24 16:21:26 +02:00
Uwe Kindler
93d0d4b1c2 Merge branch 'master' into auto_hide_dockcontainer 2022-10-24 09:21:30 +02:00
Uwe Kindler
b6d7f868ac Improved showcase section in README.md 2022-10-23 20:18:01 +02:00
Uwe Kindler
bc1f12ba93 Implemented experimental mouse event handling 2022-10-23 16:42:14 +02:00
tytan652
537828ef3d Allow to set a custom title for all FloatingContainer (#454) 2022-10-20 21:35:31 +02:00
Chnossos
6444e7424f fix: DockFocusController doesn't pick up on previous dock deletion outside of view (#453)
Co-authored-by: Pierre Caissial <pierre.caissial@vivoka.com>
2022-10-19 20:39:19 +02:00
Syarif Fakhri
10a75b0413 remove unused and cleanup 2022-10-19 17:44:55 +08:00
Syarif Fakhri
9eb9ee4071 fix icon only config for side tab bars 2022-10-19 17:35:36 +08:00
Syarif Fakhri
7ed3f8b2d1 Remove all dock widget focusable constraint on auto hide button 2022-10-19 17:30:08 +08:00
Syarif Fakhri
7319c52d4d FIxed CMakeLists 2022-10-19 17:13:34 +08:00
Syarif Fakhri
8974b1a299 Merge branch 'auto_hide_feature_original_f' into auto_hide_feature 2022-10-19 17:11:45 +08:00
Uwe Kindler
63fed89f26 Removed individual config flags for each sidebar with the global AutoHideFeatureEnabled flag 2022-10-18 17:00:42 +02:00
Uwe Kindler
866ccb2c4e Reimplemented DockWidgetSideTab based on QPushButton 2022-10-18 16:43:39 +02:00
Uwe Kindler
cbc43e5e0e Added PushButton to test new CDockWidgetSideTab 2022-10-18 15:47:34 +02:00
Uwe Kindler
3a3c3a96d6 Fixed namespace comment in ElidingLabel 2022-10-18 15:46:53 +02:00
Uwe Kindler
0cbc810a5a Renamed SideTabIconLabel - added C prefix CSideTabIconLabel 2022-10-18 15:29:31 +02:00
Syarif Fakhri
d83ec7c66f Add config to make auto hide button optionally checkable for styling purposes 2022-10-18 17:21:10 +08:00
Syarif Fakhri
118e79e7ec Remove config flag 2022-10-18 10:33:35 +08:00
Syarif Fakhri
1c69685257 Update css 2022-10-18 10:33:03 +08:00
Syarif Fakhri
fde8007174 reduce margin a little bit for the horizontal component 2022-10-18 10:22:56 +08:00
Uwe Kindler
60e0201060 Added new auto hide config flag CDockManager::AutoHideButtonTogglesArea 2022-10-17 18:16:20 +02:00
Uwe Kindler
90b92900a1 Move autohide related CSS into a separate block to have all settings in one place 2022-10-17 17:41:56 +02:00
Uwe Kindler
96a5443a02 Added alternative auto hide button svg icon and modified stylesheet to show pinned icon for autohide widgets 2022-10-17 14:52:53 +02:00
Uwe Kindler
ffe6eccb05 Improved logic for finding the auto hide side location 2022-10-17 14:22:12 +02:00
Uwe Kindler
14312442db Replaced tab bar areas LeftTop, LeftBottom, RightTop, RightBottom with Left and Right to reduce complexity 2022-10-17 11:34:59 +02:00
Uwe Kindler
bb630ca605 Changed toggleAutoHideArea)= logic - only the current dock widget is pinned and not all dock widgets of this area 2022-10-17 09:59:40 +02:00
Uwe Kindler
e3117121cc Changed moveContentsToParent() logic when disabling auto dock for a certain widget 2022-10-17 09:52:00 +02:00
Uwe Kindler
a8a40f0bee Merge branch 'duerr-ndt-auto_hide_feature' into auto_hide_feature 2022-10-17 08:54:17 +02:00
Uwe Kindler
9f9d9792aa Added sideTabBarArea property to CAutoHideDockContainer to improve CSS styling options 2022-10-15 14:24:19 +02:00
Syarif Fakhri
4399f6ea29 Update css 2022-10-14 21:49:53 +08:00
Syarif Fakhri
754a41d118 Formatting and cleanup
- Update user-guide.md
- Remove incorrect configuration from dock manager.h
- Fix spacing
2022-10-14 21:41:39 +08:00
Syarif Fakhri
b0544be068 Added activeTab property 2022-10-14 21:32:05 +08:00
Syarif Fakhri
f9b62234b0 Add top area 2022-10-14 21:13:32 +08:00
Syarif Fakhri
ac8cf863a0 remove unused css 2022-10-14 21:07:58 +08:00
Syarif Fakhri
91190e8744 cleaner dock widget side tab click handling 2022-10-14 17:47:41 +08:00
Syarif Fakhri
efb87c868b update size then mask 2022-10-14 16:20:32 +08:00
Syarif Fakhri
ad0c2103bf fix crash when using widgets that delete on close 2022-10-14 16:09:13 +08:00
Syarif Fakhri
5b3ad7e5db fix typo 2022-10-13 15:41:15 +08:00
Syarif Fakhri
589a62fe15 update user guide 2022-10-13 15:24:11 +08:00
Syarif Fakhri
b51c56e286 Fix bug where left and bottom overlay splitters cannot be clicked 2022-10-13 14:56:25 +08:00
Syarif Fakhri
84ca7b18a0 fix side tab not hiding when double clicking dock title bar 2022-10-13 14:37:39 +08:00
Syarif Fakhri
8610a64b51 Rename overlayDockContainer -> AutoHideDockContainer 2022-10-13 14:26:54 +08:00
Syarif Fakhri
ae55013566 Merge branch 'auto_hide_feature' of github.com:githubuser0xFFFF/Qt-Advanced-Docking-System into auto_hide_feature 2022-10-13 11:11:58 +08:00
Uwe Kindler
60526f2293 Fixed some typos 2022-10-12 11:47:54 +02:00
Uwe Kindler
6c27115de8 Ignore MouseButtonPress events of SideTabWidget in event filter 2022-10-12 11:32:55 +02:00
Uwe Kindler
62d3d73651 Made Auto Hide Feature independent from Focus Feature and renamed OverlayDockContainer to AutoHideDockContainer 2022-10-12 11:17:54 +02:00
Uwe Kindler
8fc333806a Pulled latest changes from duer autohide branch 2022-10-12 10:58:47 +02:00
Syarif Fakhri
412f24537b Dissallow non focusable dock widgets from being pinned 2022-10-06 17:00:29 +08:00
Syarif Fakhri
a74e03451f remove unused vars 2022-10-03 17:46:07 +08:00
Syarif Fakhri
3cd0265df6 - Fix crash caused by not removing dock area from parent container
- Fix strange behavior caused by not calling QSplitter::resizeEvent base
implementation
2022-10-03 17:29:56 +08:00
Syarif Fakhri
53e8010732 Merge branch 'auto_hide_feature' of github.com:duerr-ndt/Qt-Advanced-Docking-System into auto_hide_feature 2022-09-22 10:41:27 +08:00
Syarif Fakhri
880a7f13b5 add config flag in ads demo 2022-09-22 10:40:11 +08:00
syarif fakhri
7f6fa0c96c Fix linux styling 2022-09-22 09:53:14 +08:00
Syarif Fakhri
8ac8d63b96 Ensure that the closed state is consistent 2022-09-20 14:47:28 +08:00
Syarif Fakhri
0e6971e2ae Remove [[fallthrough]] 2022-09-20 09:41:02 +08:00
Syarif Fakhri
32f9b4664b Fix weird behavior when widget is overlayed 2022-09-19 18:11:47 +08:00
Syarif Fakhri
b567f6c5d2 Add documentation 2022-09-19 16:34:21 +08:00
Syarif Fakhri
c850e36025 Update css for qt-5 2022-09-19 16:33:45 +08:00
Syarif Fakhri
2bb1589ca2 Add missing check for bottom sidebar config 2022-09-19 16:02:32 +08:00
Syarif Fakhri
40dccdb5ae Remove testing code 2022-09-19 14:30:18 +08:00
Syarif Fakhri
3d4d677494 Bump XML version 2022-09-19 14:30:07 +08:00
Syarif Fakhri
6e143de09d Fix side tab widgets being the wrong size when being added to a layout 2022-09-19 14:19:31 +08:00
Syarif Fakhri
ea0eac0e38 Fix autohide example 2022-09-19 11:01:49 +08:00
Syarif Fakhri
f69b1e1ef8 Fix active X widgets not being rendered correctly 2022-09-19 10:49:07 +08:00
Syarif Fakhri
87324846cd Fix side tab widget resizing strangely on first add 2022-09-15 16:02:55 +08:00
Syarif Fakhri
060313c11f clear dock widget focus on repin 2022-09-15 13:04:49 +08:00
Syarif Fakhri
59108ed245 Add right bottom and left bottom 2022-09-15 12:51:59 +08:00
Syarif Fakhri
68a3bcde08 Add assert 2022-09-15 12:15:33 +08:00
Syarif Fakhri
68e5aec912 add rais 2022-09-15 11:51:56 +08:00
Syarif Fakhri
6998c0e585 double -> float 2022-09-15 09:43:15 +08:00
Syarif Fakhri
4d3328e468 Fix side tab widget ordering
Now is fixed based on the side tab widget
2022-09-14 17:39:57 +08:00
Syarif Fakhri
06bcf2cd48 Add insert order for overlayed widget to the side tab bar
- Set the default insert order to append
2022-09-14 15:52:34 +08:00
Nick D'Ademo
5df2467592 add orientation prop to SideTabBar. 2022-09-14 14:25:11 +08:00
Nick D'Ademo
48163d2679 add paintEvent override for styling purposes. 2022-09-14 14:17:28 +08:00
Syarif Fakhri
f3305b95d2 Remove old crash fix 2022-09-14 13:10:06 +08:00
Syarif Fakhri
8e5e974669 Remove event filter from dock area as well 2022-09-14 12:39:18 +08:00
Syarif Fakhri
773f186a7f Fix crash when restoring state but better
- Rather than having to check for nullptr, just make sure the slot isn't
called
2022-09-14 12:34:13 +08:00
Syarif Fakhri
6b85b2b505 Revert "Fix crash when restoring state"
This reverts commit ee97b03e53.
2022-09-14 12:32:32 +08:00
Syarif Fakhri
ee97b03e53 Fix crash when restoring state
- when restoring state, the old dock widgets would remove themselves
from their old dock areas and add themselves to the new dock areas. The
old dock areas that are empty would then delete themselves.
- That is a problem when the old overlay dock container would still try to
access the old dock areas, not knowing their deleted, causing a crash.
2022-09-14 12:16:36 +08:00
Syarif Fakhri
0e5329fd3e add comment 2022-09-13 17:27:13 +08:00
Syarif Fakhri
ac311d6d45 Fix moving content to parent on toggle view 2022-09-13 17:26:46 +08:00
Syarif Fakhri
f0f3caeb32 tweak spacing 2022-09-13 16:51:15 +08:00
Syarif Fakhri
d394930d74 Change splitter proportion from int to double
- Allows for fine grain control (can now set 0.75 or 0.6)
- Makes more sense
2022-09-13 16:29:39 +08:00
Syarif Fakhri
19192541f9 Fix central dock widget being pinnable
- Add config for dock widget being pinnable
2022-09-13 16:19:11 +08:00
Syarif Fakhri
8ddabc4cc8 Fix docking behavior when there is a central widget 2022-09-13 16:02:14 +08:00
Syarif Fakhri
42498b2021 Fixed some more spacing in DockWidgetSideTab 2022-09-13 14:57:24 +08:00
Syarif Fakhri
daa52e109e Add missing update style to dock widget side tab 2022-09-13 14:21:01 +08:00
Syarif Fakhri
263c73188a Add bottom side icon config 2022-09-13 14:16:12 +08:00
Syarif Fakhri
9a69955124 Simplify logic when restoring state 2022-09-13 13:10:29 +08:00
Syarif Fakhri
b950b8a209 Fix overlayed containers able to drag into the center
of the central widget
2022-09-13 12:45:26 +08:00
Syarif Fakhri
dfc2714d3b Fix invalid state on restore
- Overlayed dock areas should not be added to the d->DockArea list
- As they are not treated like normal dock areas
2022-09-13 12:44:48 +08:00
Syarif Fakhri
4841d9b896 Set splitter sizes based on proportion settable in the dock widget 2022-09-13 11:20:46 +08:00
Syarif Fakhri
214c415fa2 Add Bottom side bar 2022-09-13 10:42:58 +08:00
Syarif Fakhri
489f72aa0c Add side tab widget icons
- Add config to prioritize icon only if it has one
2022-09-12 15:55:45 +08:00
Syarif Fakhri
883d5b5198 fix crash when sometimes restoring state 2022-09-09 15:38:31 +08:00
Syarif Fakhri
3ef1ac97c2 Fix splitter size being saved incorrectly if the overlay widget is never opened 2022-09-09 15:24:33 +08:00
Syarif Fakhri
621e5e7789 fix tooltips for auto hide button and close button 2022-09-09 14:43:59 +08:00
Syarif Fakhri
22402e79f5 Added support for delete on close to overlayed widgets 2022-09-09 13:57:43 +08:00
Syarif Fakhri
54b9a8dc50 Merge branch 'auto_hide_feature' of github.com:duerr-ndt/Qt-Advanced-Docking-System into auto_hide_feature 2022-09-09 13:37:14 +08:00
Syarif Fakhri
dc05ec3acf Add nullptr check when restoring state with overlayed widgets 2022-09-09 13:33:42 +08:00
Syarif Fakhri
84c6afa428 Reworked toggle view
Previous:
- It would just hide the overlay dock widget and leave the side tabs
still visible
- Close button, toggle view action would simply collapse the dock widget
intsead of completely hiding it

Current:
- Now toggle view and collapse functionality are separated.
- Toggle view will now hide the side tab bars completely
- Close button and toggle view action will completely hide it
- Collapse view will simply hide the overlay dock container without
hiding the side tabs
- Handled logic for floating widgets and toggling view
2022-09-09 12:18:41 +08:00
Nick D'Ademo
1097d65959 fix elision for vertical eliding label. 2022-09-09 09:34:45 +08:00
Syarif Fakhri
6ae14fada3 add comment regarding empty widget in overlay dock container 2022-09-08 17:42:24 +08:00
Syarif Fakhri
a2e9c1aa9c Add config flag for enabling the overlay dock area title
Changed the config name from DefaultDockContainerConfig->DefaultAutoHideConfig
2022-09-08 16:58:40 +08:00
Syarif Fakhri
60c22000a8 Add hover styling 2022-09-08 16:49:32 +08:00
Syarif Fakhri
3ec395fe79 update default stylesheet 2022-09-08 16:41:00 +08:00
Syarif Fakhri
fac81265bf Whitespace changes only 2022-09-08 16:30:07 +08:00
Syarif Fakhri
c1df05b55d Fix bug where undock button would be show incorrectly in floating dock
widgets when toggling overlay

Also centralized and simplified the logic for the title bar button
visibility
2022-09-08 16:08:20 +08:00
Syarif Fakhri
af549d8ca9 Add title label to the overlayed dock area 2022-09-08 14:43:18 +08:00
Syarif Fakhri
9bfd77a206 Remove None and Bottom from the SideTabBarArea enum 2022-09-08 14:13:45 +08:00
Syarif Fakhri
37edf47c4b Fix the side tab widget not updating style when its restored from XML 2022-09-08 14:04:18 +08:00
Syarif Fakhri
be4e5a88a6 Change the styling - Now the dock widget side tab has a gray left/right
edge border when not selected
2022-09-08 14:01:52 +08:00
Syarif Fakhri
a279e71535 Fix side tab bar area name being saved wrong in the XML 2022-09-08 13:10:46 +08:00
Syarif Fakhri
5ddb02cc8e fix the border styling of the dock widget side tab when not focused 2022-09-08 11:45:30 +08:00
Syarif Fakhri
ecccba4536 Add overlay splitter object name 2022-09-08 11:31:54 +08:00
Syarif Fakhri
0087a1b360 Add left right styling to the dock widget side tab 2022-09-08 11:30:56 +08:00
Syarif Fakhri
8bfb98ea20 Remove auto hide feature being set by default. Add config for the default auto hide feature. 2022-09-08 11:23:45 +08:00
Syarif Fakhri
de4a59d45a Re added back in CentralWidgetExample after mistakenly removing it 2022-09-08 11:18:38 +08:00
Uwe Kindler
068797dbb0 Fixed build issues of original pull request 2022-09-07 10:56:17 +02:00
Syarif Fakhri
302fcd1435 Fix bug where dragging an overlayed widget would cause it to be empty
Fix bug where pin and unpin doesn't work
2022-09-07 15:50:53 +08:00
Syarif Fakhri
1d9902b690 Make tabs menu hidden when overlayed 2022-09-07 13:31:44 +08:00
Syarif Fakhri
9735f41b1a Fix toggle view through the actions menu not working correctly 2022-09-07 12:13:46 +08:00
Syarif Fakhri
4a77580b07 swap position of auto hide button and detach group button 2022-09-07 11:54:32 +08:00
Syarif Fakhri
1a903e74f2 add pin icon 2022-09-07 11:54:03 +08:00
Syarif Fakhri
e4565034fb Merge branch 'master' into auto_hide_feature 2022-09-07 10:12:57 +08:00
Syarif Fakhri
052d3cecb9 Fix check state of the auto hide button
when dragging the container into a floating window
2022-09-06 17:59:56 +08:00
Syarif Fakhri
fde133c25e Fix a bug where overlay widgets from another container widget
would not be correctly transferred into the container widget that it's
dragged into.
2022-09-06 17:42:26 +08:00
Syarif Fakhri
6e35a9e7a7 - Add an example folder for auto hide functionality
Note: this does not include the py file, To be added in a different
commit
- Added a better API to programatically add the overlay areas in the
CDockManager
2022-09-06 15:35:18 +08:00
Syarif Fakhri
bfab7e495a Move logic for enabling auto hide into the public toggle method 2022-09-06 13:49:11 +08:00
Syarif Fakhri
3e9dc7f4d6 Add initial functionality for Auto hide
- Add left and right side tab widgets
- Add overlay dock and overlay dock widget behavior
2022-09-06 13:30:26 +08:00
Syarif Fakhri
da8f17cce2 Fix perspective for central widget demo 2022-09-05 17:04:41 +08:00
Uwe Kindler
3cd6d766f8 Added some documentation for Linux modal dialog fix 2022-09-05 09:06:29 +02:00
Uwe
82c98a3f91 Merge branch 'linux_modal_dialog_fix' 2022-09-05 09:02:02 +02:00
Uwe
c11a496278 Change to ensure that modal widgets are always on top of floating widgets 2022-09-05 09:01:40 +02:00
Uwe
d27783e2f1 Added check for model widget for Linux
Prevent painting of drop overlays when model widget is active
2022-09-02 14:54:48 +02:00
Uwe Kindler
efd88565a9 Small change to fix issue #445 2022-08-29 11:11:08 +02:00
Doug Smith
f3bb1b17d0 Add link to xcb on Linux (#446) 2022-08-29 08:20:47 +02:00
Sebastian Büttner
518cee9d0a Remove version check for qt 5.x to fix conan qt6 compatibility (#447)
Qt6 compatibility is broken in some cases when building with conan. This is due to the find_package version check against 5.5 rejecting the Qt6 version (e.g. 6.3.1).
This patch removed the version check.
2022-08-29 08:20:30 +02:00
Sebastian Büttner
6302ab03d8 Set required C++ standard depending on Qt version (#444)
Qt6 requires C++17 for building. ADS however only requires C++14 so far. Now when building using Conon for example the packages are built independently and ADS is built using the C++-14 flag which in turn causes the included Qt6 headers to fail the compile process. This patch bumps the required C++ standard to C++17 for builds targeting Qt6 only.
2022-08-14 22:17:42 +02:00
Uwe Kindler
2afca346b0 Added some info about PyQtAds contribution 2022-08-08 08:55:04 +02:00
Uwe Kindler
89ff0ad311 Added PRE Workbench to Showcase section 2022-07-29 13:57:08 +02:00
Uwe Kindler
6caeac2cb4 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2022-07-29 13:26:23 +02:00
Uwe Kindler
a0f0640c9f Fixed CustomCloseHandling for floating widgets 2022-07-29 13:25:14 +02:00
Mira Weller
d3f5879119 upgrade PyQt build (#404)
* Add new flags from 3.7 and 3.8

* remove unnecessarily deep namespace for Python module

* Update PyQt5 bindings build to new build system

* fix opening tabbed dockWidgets

* fix RESOURCES configuration for sip build

* increment build version

* remove leftovers

* add file names explicitly

* Update pyproject.toml
2022-07-19 13:17:45 +02:00
bjb-work
df74686287 call CDockWidget::closeDockWidgetInternal when close attempt and CustomCloseHandling (#438)
Co-authored-by: bjb-work <N/A>
2022-07-15 14:47:20 +02:00
Uwe Kindler
75d58b3ea3 Fixed #433 - Link issue of debug library with MSVC19 2022-07-04 07:41:26 +02:00
Uwe Kindler
bedd25021c Fixed issue #429 - Raise floating widget on toggleView() request 2022-06-17 08:31:24 +02:00
Uwe Kindler
0e566cb8a3 Fixed #420 - Floating docks title doesn't update
added tests for DockWidget->setWindowTitle() in demo application
2022-05-10 13:41:19 +02:00
Mira Weller
23f80334f6 Fix issue #415 (#416) 2022-05-03 08:47:31 +02:00
Uwe Kindler
7063909cee Added MetGem to showcase section 2022-04-21 16:29:55 +02:00
Igor Sirotin
a284e3bd65 CMake bugfixes [target alias, license install] (#412)
* Added alias to cmake library target

* Fixed CMake license install

Co-authored-by: Igor Sirotin <i.sirotin@1440.space>
2022-04-18 23:07:48 +02:00
ARSanderson
823887daf8 Tidy/doc updates (#410)
* minor updates to clarify when the dock manager should be created

* fixed typos
2022-04-12 07:58:18 +02:00
Uwe Kindler
78a4166e42 Updated CFloatingDockContainer::closeEvent() function to delete all dock widgets with DockWidgetDeleteOnClose flag set 2022-03-25 13:31:40 +01:00
tytan652
3d3b694040 Avoid calling XCB functions under non-XCB Linux platform (#405) 2022-03-24 19:43:39 +01:00
ruffianhy
ad06241c9d fix(issue-350): on RedHat/CentOS, sometimes there will be one more move event after user release their mouse which will cause the floating overlay can not be hide. Here we use the WindowActivate and WindowDeactivate event to check whether user release their mouse. (#401) 2022-03-13 21:22:07 +01:00
Uwe Kindler
6a1ea6c7de Fixed examples/sidebar bug 2022-03-04 13:43:21 +01:00
Uwe Kindler
931719c474 Updated README.md 2022-03-04 08:04:21 +01:00
Uwe Kindler
70ef00932a Updated marketplace description 2022-03-02 11:52:38 +01:00
Uwe Kindler
a1bc4a063b Updated qt_markectplace files 2022-03-02 11:48:51 +01:00
Uwe Kindler
abf7224582 Updated ads logo and icon 2022-03-02 11:31:25 +01:00
Uwe Kindler
7ab4c9af2e Handle StyleChange event in DockWidgetTab to update icon 2022-02-25 21:41:46 +01:00
kzl
d5fefaa35f while dockManager.removeDockWidget , the dockManager() returns null (#399) 2022-02-18 19:33:55 +01:00
Ben Hetherington
3c4af9c6af Add method to add dock widget to dock container (#398)
This adds a `addDockWidgetToContainer()` method to `CDockManager`, which allows a dock widget to be registered with the dock manager, and added to a specific container, even if that container doesn't currently have any `DockAreaWidget`s.

This is pretty much just a clone of `addDockWidget()`, but with the ability to specify a container widget instead of a dock area.
2022-02-06 08:21:43 +01:00
githubuser0xFFFF
12ec819aeb Update README.md
Updated CETONI Elements showcase
2022-01-02 21:55:00 +01:00
Uwe Kindler
e6fc1c14bd Added NotepadNext to the showcase section 2021-12-22 07:47:24 +01:00
SleepProgger
6fb45c055c Removed ContentMargin in DockContainer (#387) 2021-12-20 07:46:26 +01:00
Ralph Minderhoud
535b926095 CMake: Allow version to be explicitly set without requiring git (#384)
The main CMakeLists.txt was updated to allow explicitly setting the
version for the project by setting the `ADS_VERSION` variable (e.g.
cmake .. -DADS_VERSION=1.0.0).

The default behavior is to determine the version by reading the
information from git. Adding the option to override this variable at
configure time allows the library to be built outside of its git
repository, such as when the code is vendored directly into another
project and added using `add_subdirectory`.
2021-12-13 08:36:53 +01:00
Uwe Kindler
b15bc26a63 Some small coding style fixes 2021-12-12 17:28:11 +01:00
Uwe Kindler
1d90e8e823 Merge branch 'fix_issue_380' of https://github.com/jporcher/Qt-Advanced-Docking-System into jporcher-fix_issue_380 2021-12-12 17:19:27 +01:00
Jean Porcherot
6b3027401d Fix issue #380 and add example 2021-12-09 10:11:05 +01:00
githubuser0xFFFF
e35bd65a91 Update README.md 2021-12-07 11:01:26 +01:00
githubuser0xFFFF
8888f6800b Update README.md 2021-12-07 11:00:52 +01:00
Uwe Kindler
2afe62ec77 Fixed issue #378 - Don't show empty floating containers on startup 2021-12-06 09:42:12 +01:00
jporcher
4b27af959b Merge branch 'githubuser0xFFFF:master' into master 2021-12-06 07:57:29 +01:00
Ben Hetherington
0df1a41a1d Fix potential crash when restoring container state (#381)
This fixes a crash which could occur when restoring the state of a floating container to a non-floating container.

This was because `ads::CDockContainerWidget::RestoreState()` will unconditionally assume this is floating if the XML has the `Floating` boolean set, and will dereference `floatingWidget()`. If this isn't floating, `floatingWidget()` will return `nullptr`, leading to a crash when it's subsequently used.

Fixes #379.
2021-12-03 17:01:16 +01:00
anoy
21badd592e add QFlag operators (#376) 2021-11-26 19:09:09 +01:00
Uwe Kindler
a110d53a53 Fixed crash in DockFocusController
DockWidget pointers are now wrapped into QPointer to detect deleted
DockWidgets
2021-11-18 22:10:11 +01:00
Uwe Kindler
0270993782 Fixed error caused by broken merge request 2021-11-17 07:51:14 +01:00
Uwe Kindler
2c0d899b2a Fixed pixmap warning in ElidingLabel 2021-11-17 07:50:46 +01:00
Ben Hetherington
1abe101ef7 Prevent middle-click from closing unclosable tabs (#372)
This fixes a bug whereby you could close a dock widget by middle-clicking its tab, even if its `CDockWidget::DockWidgetClosable` flag is set to `false`.
2021-11-16 06:24:39 +01:00
Uwe Kindler
0ebc170cfa Fixed doc link to issue 365 2021-10-29 10:36:09 +02:00
Uwe Kindler
ee6ddfadc3 Documented DockWidget feature flags 2021-10-29 10:32:58 +02:00
Uwe Kindler
720b5f0c72 Added Plot Juggler to the showcase section 2021-10-29 10:02:09 +02:00
Uwe Kindler
aceabd8455 Added new and noteworthy for 3.8 release 2021-10-28 10:30:49 +02:00
Uwe Kindler
ab4869a0e1 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2021-10-22 11:47:44 +02:00
Uwe Kindler
adf5793ccd Fixed Windows Qt 5.15 build 2021-10-22 11:47:27 +02:00
Rodrigo Oliva
31e26c2c1c Fix crash when adding closed dock widgets to the manager. (#366)
Co-authored-by: Rodrigo Oliva <Rodrigo.Oliva@king.com>
2021-10-20 16:54:47 +02:00
Uwe Kindler
de05ddd203 Renamed RecreateContentsWidgetOnCloseAndOpen into DeleteContentOnClose 2021-10-14 13:57:06 +02:00
Uwe Kindler
03a8eaa44f Merge branch 'ff/editor/dev/widget_factory' of https://github.com/rolivav/Qt-Advanced-Docking-System into rolivav-ff/editor/dev/widget_factory 2021-10-14 13:18:54 +02:00
Uwe Kindler
48e79f12a7 Fixed Linux bug in DockFocusController.cpp 2021-10-11 22:05:37 +02:00
Uwe Kindler
89aa3d5251 Fixed null pointer bug in DockFocusController.cpp 2021-10-11 21:20:21 +02:00
Rodrigo Oliva
87b0596ebc Add feature to close tabs with the middle mouse button. (#360)
Co-authored-by: Rodrigo Oliva <Rodrigo.Oliva@king.com>
2021-10-11 20:33:56 +02:00
Rodrigo Oliva
a08857804a Add new flag that will delete the contained widget and recreate it from a factory when closing and opening the dock widget. 2021-10-10 21:37:16 +02:00
nmiglio
dbca6d79cf Update DockWidget.h (#364) 2021-10-08 19:40:57 +02:00
Francis Hart
a24221c002 Fix MSVC compiler warning C4275 (#361)
The CFloatingDockContainer is exported, but inherits from a base
class that is not exported. This triggers a compiler warning under
MSVC toolchain. This patch fixes the issue by exporting the
IFloatingWidget class.
2021-10-08 19:40:30 +02:00
githubuser0xFFFF
5f89dd0465 Update linux-builds.yml
Removed ubuntu 16.04 from GitHub workflow because it is not supported by GitHUb any longer
2021-10-05 06:56:51 +02:00
Lucas
0b82ff30fe Fix issue #351: https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/351 (#357) 2021-10-01 15:30:33 +02:00
Nicolas Elie
130b0de646 Python Bindings: Fix findParent that was not working as expected (#349) 2021-09-06 20:48:17 +02:00
Nicolas Elie
b5b251dffb Update Python Bindings (#348)
* Update Python bindings

* Add X11Extras to setup.py for Linux builds

* Update Python Bindings

* Update Python bindings

* Update Python Bindings
2021-08-26 13:51:09 +02:00
Rodrigo Oliva
0c44accb44 Remove deprecation warning while building with Qt 5.15. (#344)
Co-authored-by: Rodrigo Oliva <Rodrigo.Oliva@king.com>
2021-08-23 19:47:15 +02:00
Uwe Kindler
bbdf0ef29d Added test for resizing of DockAera 2021-08-03 14:59:28 +02:00
Uwe Kindler
401e8cf492 Improved initial size of floating dock widget 2021-07-30 13:50:17 +02:00
Uwe Kindler
83cdc69fc8 Merge branch 'improve_focus_highlighting' 2021-07-28 14:14:25 +02:00
Uwe Kindler
1e3af06bb0 Fixed notifyFloatingWidgetDrop() function 2021-07-28 13:44:34 +02:00
Uwe Kindler
2c8abee668 Added some build instructions for Linux about required private header files 2021-07-28 12:14:37 +02:00
Uwe Kindler
5af7492b67 Changed DockFocusController to properly handle window activation 2021-07-27 12:22:31 +02:00
Uwe Kindler
8d1465a81f Added initial support for setting focus highlighting without uisng setFocus 2021-07-25 18:12:27 +02:00
githubuser0xFFFF
5ead4684f5 Update linux-builds.yml
Added qtbase-private-dev
2021-07-17 14:52:09 +02:00
Charles Cross
fc91502162 Removes dependency on QtX11Extras for Qt6.2-beta (#331)
* Removes dependency on QtX11Extras and implements placeholder solution with QtGUI private API

* Fixes CMakeLists.txt to work with Qt5 and Qt6

* Removes all other uses of X11extras

* Renames and moves x11 methods into ads::internal

* Fixes typo

* Adds gui-private to src.pro
2021-07-17 14:49:20 +02:00
Uwe Kindler
3a99bdcfb4 Added showcase for Ramses Composer 2021-07-14 11:05:04 +02:00
Uwe Kindler
487e23e190 Fixed MSVC build 2021-06-19 14:47:17 +02:00
Uwe Kindler
511132ee4f Fixxed issue #294 - Tab refresh problem with a QGLWidget 2021-06-17 20:32:45 +02:00
Uwe Kindler
edc89555bc Removed eclipse specific file 2021-06-17 20:32:12 +02:00
Rodrigo Oliva
ad30211dae Update icon label tooltip when the tab tooltip changes (#322)
Co-authored-by: Rodrigo Oliva <Rodrigo.Oliva@king.com>
2021-05-26 06:59:36 +02:00
Nick D'Ademo
48406da6ea fix building. (#323) 2021-05-25 18:12:24 +02:00
Rui Oliveira
aff0bd6e25 Add Qt6 support on CMake (#319) 2021-04-28 22:52:45 +02:00
jporcher
3969d28d92 Fix crash in dockindock (#317)
* Add dockdepth1 example

* Fix compilation (include assert.h)

* Replace dockdepth1 by dockindock

* Fix crash when dockindock example is closed. Due to code in dockindock supposed to fix memory leaks: now leaks were fixed in CDockManager (https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/307), the code from dockindock ends up deleting objects already deleted by parent.
2021-04-27 11:16:09 +02:00
Jean Porcherot
d0c100995e Fix crash when dockindock example is closed. Due to code in dockindock supposed to fix memory leaks: now leaks were fixed in CDockManager (https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/307), the code from dockindock ends up deleting objects already deleted by parent. 2021-04-27 10:05:07 +02:00
Jean Porcherot
f54e4c8ac2 Merge remote-tracking branch 'upstream/master' 2021-04-27 09:12:56 +02:00
Uwe Kindler
b39cd2d81b Fixed emptydockarea example 2021-04-27 07:47:03 +02:00
jporcher
0e8e563654 Add dockindock example (#308)
* Add dockdepth1 example

* Fix compilation (include assert.h)

* Replace dockdepth1 by dockindock
2021-04-21 06:37:19 +02:00
jporcher
2f041a0eed Fix memory leaks (#314) 2021-04-20 14:25:30 +02:00
Jean Porcherot
2c7b5982b5 Replace dockdepth1 by dockindock 2021-04-14 15:36:00 +02:00
Uwe Kindler
ffa0105d3e Fixed emission perspectiveListChanged signal after loading of perspective list and added perspectiveListLoaded signal 2021-04-13 07:05:17 +02:00
Jean Porcherot
bac0698581 Fix compilation (include assert.h) 2021-04-09 13:36:51 +02:00
Jean Porcherot
be3180df6f Add dockdepth1 example 2021-04-07 16:51:46 +02:00
Uwe Kindler
6179832a2b Updated Qt DesignStudio showcase image and video link 2021-03-03 22:51:58 +01:00
Walter Bormans
13853573ea Additional Qt keyword conversion. (#299)
This comit is an addtion to pull request #295. Not all Qt keywords were included.

Co-authored-by: Walter Bormans <walter.bormans@paradoxcat.com>
2021-01-22 06:18:34 +01:00
Uwe Kindler
b6b4c626e8 Fixed user-guide.md emptydockarea code to match the real example 2021-01-16 15:06:32 +01:00
Uwe Kindler
bd41ec1627 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2021-01-16 15:01:02 +01:00
Uwe Kindler
b54dab7df2 Fixed the empty dock area example to test procramatic docking with empty dock area 2021-01-16 15:00:44 +01:00
Walter Bormans
e66ef604a7 Removes reliance on special Qt keywords. (#295)
This allows Qt Advanced Docking system to be compiled with the QT_NO_KEYWORDS definition.
This can help avoid conflicts with other dependancies for a project.

Co-authored-by: Walter Bormans <walter.bormans@paradoxcat.com>
2021-01-15 09:08:27 +01:00
Uwe Kindler
e03674fd4b Fixed a typo in user-guide.md 2021-01-11 13:50:47 +01:00
Uwe Kindler
3f69fedd1f Added documentation for emptx dock area feature 2021-01-11 13:46:26 +01:00
Uwe Kindler
a614e3cc3d Fixed CDockAreaWidget::nextOpenDockWidget() function to properly return a DockWidget with tab if this is possible
Added new emptydockarea example
2021-01-11 11:07:03 +01:00
Uwe Kindler
ebde50b492 Fixed FloatingDockContainer Linux build for Qt6 2021-01-10 10:22:54 +01:00
Uwe Kindler
2a6bd306cb Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2021-01-09 19:03:14 +01:00
Uwe Kindler
8a27a5596b Added new CDockWidget flag CDockWidget::NoTab to hide the tab from the dock area title bar 2021-01-09 19:02:25 +01:00
Nicolas Elie
f835ffd978 Update Python bindings (#289)
* Update Python bindings

* Add X11Extras to setup.py for Linux builds

* Update Python Bindings

* Update Python bindings
2021-01-04 14:01:28 +01:00
Uwe Kindler
97215705f5 Improved documentation for Linux support 2021-01-03 18:16:38 +01:00
Uwe Kindler
6ee97e64d7 Disabled Qt6 build in appveyor - it does not work properly yet 2021-01-03 17:14:39 +01:00
Uwe Kindler
a1c4812619 Try to fix Qt6 build 2021-01-03 17:09:06 +01:00
Uwe Kindler
b0c8edbd82 Added Qt6 MinGW build to .appveyor.yml 2021-01-03 15:50:16 +01:00
Uwe Kindler
a4190ecbf0 Added missing ads.pri fle 2021-01-02 23:17:44 +01:00
Uwe Kindler
d8c6efaada Fixed signal connection of perspective combobox 2021-01-02 21:05:05 +01:00
Uwe Kindler
0312682e07 Fixed wrong pixmap is null test in ElidingLabel 2021-01-02 20:50:26 +01:00
Uwe Kindler
8d14068df7 Fixed QMouseEvent::globalPos() warning 2021-01-02 20:29:59 +01:00
Uwe Kindler
fe1d9a493f Fixed warning in centralwidget example because of missing svg file 2021-01-02 19:51:50 +01:00
Uwe Kindler
e55ad49db8 Created ads.pri to ease linking of ads library 2021-01-02 19:48:34 +01:00
Uwe Kindler
018ce2001e Fixed all Qt6 build issues 2021-01-02 18:06:45 +01:00
Uwe Kindler
c8fe4c46dd Fixed DockAreaWidget minimumSizeHint 2020-12-23 16:16:13 +01:00
Uwe Kindler
1781fa671d Updated build settings 2020-12-23 16:15:47 +01:00
Uwe Kindler
75910e910e Fixed centralwidget example to properly close all floating widgets on main window close 2020-11-26 08:07:31 +01:00
Uwe Kindler
899e06be1c Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-11-23 12:57:23 +01:00
spking11
66687dc8b6 Add utf-8 support for msvc within cmake. (#280)
Co-authored-by: spking11 <spking11@foxmail.com>
2020-11-23 12:55:19 +01:00
Uwe Kindler
b8fe620276 Merge branch 'master' into adddockwidget_fix 2020-11-23 08:04:11 +01:00
spking11
1a50ea9892 Add utf-8 support for msvc to resolve building error in some windows systems. (#277) 2020-11-21 17:29:36 +01:00
Uwe Kindler
0a096869fe Fixed adding of dock widgets to floating widget 2020-11-21 15:08:30 +01:00
Uwe Kindler
44dc76bd19 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-10-31 13:56:30 +01:00
Uwe Kindler
aedbaec497 Addes support for setting DockWidgetTab icon size via stylesheet 2020-10-31 13:56:16 +01:00
Uwe
04aa622111 Fixed static qmake build 2020-10-30 21:49:28 +01:00
Uwe
3564229482 Fixed CMake static build 2020-10-30 21:13:19 +01:00
githubuser0xFFFF
637db7f4f9 Update CMakeLists.txt 2020-10-27 18:50:54 +01:00
Uwe Kindler
f6d3d6d34a Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-10-27 15:07:37 +01:00
Uwe Kindler
92369bdb26 Fixed static CMake build for Linux 2020-10-27 15:04:54 +01:00
Nick D'Ademo
8f95447108 Fix. (#264) 2020-10-23 21:00:33 +02:00
Christian Seiler
0e3c3bab45 DockManager: add the ability to programmatically update splitter sizes (#266)
Add the ability to programmatically update splitter sizes. The user must
specify the dock area that is contained in a splitter and a list of
sizes. The list of sizes will be passed to the splitter that immediately
contains the specified dock area. If the dock area is not part of a
splitter the method will have no effect.

Co-authored-by: Christian Seiler <c.seiler@luxflux.de>
2020-10-23 20:59:50 +02:00
Christian Seiler
3a5c965306 Ensure that the stylesheet doesn't affect all QSplitter instances (#265)
The stylesheet should only change the style of ads::CDockSplitter
instances, but not all QSplitter instances. Otherwise all splitters
within any dock widget will also be affected and look different from
the default Qt style.

Co-authored-by: Christian Seiler <c.seiler@luxflux.de>
2020-10-21 22:07:41 +02:00
Christian Seiler
0c88457037 Fix CMake build on macOS (don't try to link against Qt's X11Extras) (#267)
macOS is identified as UNIX by CMake, but Qt doesn't actually use X11
there (and X11 support is not available by default anyway). Change the
condition that includes X11Extras to if (UNIX AND NOT APPLE) instead of
just if (UNIX) to mitigate that. This makes the build on macOS work
with CMake.

Co-authored-by: Christian Seiler <c.seiler@luxflux.de>
2020-10-21 22:05:36 +02:00
Uwe Kindler
46fa22dc6a Documented custom close handling 2020-10-13 21:24:04 +02:00
Uwe Kindler
f3d32399e5 Added ads::CDockWidget::DockWidgetForceCloseWithArea test to demo/MainWindow.cpp 2020-10-13 20:55:09 +02:00
Nicolas ELIE
b320bb17d1 Merge remote-tracking branch 'upstream/master' into forceclose 2020-10-02 11:04:18 +02:00
Nicolas Elie
81afe2d3cb Update Python Bindings again (#262)
* Update Python bindings

* Add X11Extras to setup.py for Linux builds

* Update Python Bindings
2020-10-01 19:14:48 +02:00
Uwe Kindler
5fad43377b Fixed a bug in restoreStateFromXml function
The function accessed the objectName from the CentralWidget even if there is no cental widget
2020-09-25 14:40:28 +02:00
Uwe Kindler
f543318232 Updated user-guide.md 2020-09-21 11:07:00 +02:00
Uwe Kindler
ab385a782a Updated user-guid 2020-09-21 11:02:38 +02:00
Uwe Kindler
c370875128 Properly implemented save and restore with central widget 2020-09-21 10:51:02 +02:00
Uwe Kindler
1c261515db Improved debug output in DockContainerWidget 2020-09-21 09:39:42 +02:00
Uwe Kindler
37cbae84ca Fixed debug output in FloatingDockContainer.cpp 2020-09-21 09:39:03 +02:00
Uwe Kindler
f5759716b4 Added support for perspectives to centralwidget example to test save and restore state functionality with central widget 2020-09-21 08:39:39 +02:00
Uwe Kindler
f645fe725a Added dockWidgetAdded signal to CDockManager 2020-09-18 08:25:47 +02:00
Uwe Kindler
fdedd7d92a Added focusedDockWidget() function to DockManager 2020-09-07 08:17:07 +02:00
Uwe Kindler
044a43d793 Updated user-guide.md 2020-09-07 08:16:30 +02:00
Uwe Kindler
6846c96146 Fixed some documentation typos 2020-09-03 15:31:11 +02:00
Uwe Kindler
8fe9461872 Removed stylesheet code from centralwidget/mainwindow.cpp 2020-09-03 15:25:44 +02:00
Uwe Kindler
fbde4edcd2 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-09-03 15:24:27 +02:00
Uwe Kindler
68742681f7 Added missing documentation images 2020-09-03 15:24:12 +02:00
Uwe Kindler
bbb3f99bc3 Added documentation for new features (central widget and native floating widgets on linux) to user-guide.md 2020-09-03 15:23:39 +02:00
Uwe Kindler
e0f6f3013f Updated centralwidget example 2020-09-03 15:23:05 +02:00
Uwe Kindler
6eb497fb64 Added test for dock manager flag EqualSplitOnInsertion to demo aplication 2020-09-03 15:22:43 +02:00
githubuser0xFFFF
ae15757765 Update .travis.yml
Fixex travis.yml parse error
2020-09-02 22:02:21 +02:00
githubuser0xFFFF
be294b4867 Update .travis.yml
Added libqt5x11extras5-dev to travis yml file
2020-09-02 21:25:54 +02:00
Uwe Kindler
70738f7549 Fixed Linux CMake build 2020-09-02 11:48:12 +02:00
Uwe Kindler
42dc529ce1 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-09-02 09:05:13 +02:00
Uwe Kindler
65058d3a48 Fixed issue #251 - Window momentarily flashes as floating widget 2020-09-02 09:04:59 +02:00
Nicolas Elie
48c4106b7f Update Python Bindings (#249)
* Update Python bindings

* Add X11Extras to setup.py for Linux builds
2020-09-01 16:06:43 +02:00
Uwe Kindler
175b48569f Removed Linux stuff from Mac build 2020-08-31 23:46:42 +02:00
Uwe Kindler
89c6abb5ce Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-08-31 23:29:52 +02:00
Uwe Kindler
55f23799bc Fixed CMake Windows build 2020-08-31 23:29:33 +02:00
Nicolas Elie
646211cc4c Merge branch 'master' into forceclose 2020-08-31 16:38:16 +02:00
githubuser0xFFFF
423bab9954 Update README.md
Some small changes in README.md
2020-08-31 16:30:29 +02:00
Uwe Kindler
831d90ebf5 Added X11Etras package to CMakeLists.txt 2020-08-31 16:20:36 +02:00
githubuser0xFFFF
abdc0dc0dd Update .travis.yml
Added  libqt5x11extras5-dev to travis build
2020-08-31 16:10:53 +02:00
Uwe Kindler
175c836c93 Added Qt5x11extras to CMake build 2020-08-31 13:04:15 +02:00
githubuser0xFFFF
76304172ab Update linux-builds.yml
Added x11extras to workflow
2020-08-31 13:00:27 +02:00
githubuser0xFFFF
0eb3978aee Update .travis.yml
Added x11extras
2020-08-31 12:51:42 +02:00
Uwe Kindler
73f42d55ca Updated linux stylesheets to fix titlebar issue on KDE 2020-08-31 11:57:30 +02:00
Uwe Kindler
059a055483 Renamed FloatingContainerForceCustomTitleBar to
FloatingWidgetForceQWidgetTitleBar
2020-08-31 09:48:32 +02:00
Uwe Kindler
dcf1ee393e Added support for CSS styling of custom widget titlebar close button 2020-08-31 09:38:18 +02:00
Uwe Kindler
04aecb3693 Some code cleanup, adjustments to match ADS coding style 2020-08-31 08:32:56 +02:00
helywin
533d174abc Finished implementing maximize for linux.
Added FloatingContainerForc*TitleBar to switch between native and custom titlebar.

Co-authored-by: SleepProgger <SleepProgger@users.noreply.github.com>
2020-08-29 05:03:21 +02:00
Uwe Kindler
48fb999bd0 Fix static build of centralwidget example 2020-08-24 15:46:51 +02:00
Uwe Kindler
5443e5f998 Merge branch 'centralwidget' 2020-08-24 13:44:19 +02:00
Uwe Kindler
543d226ba3 Fixed memory leak 2020-08-24 13:32:50 +02:00
Uwe Kindler
03b1848b43 Reverted changed 2020-08-24 13:25:20 +02:00
Uwe Kindler
05ab8d2067 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-08-24 13:23:40 +02:00
Uwe Kindler
c28a27c81c Reverted changes that cause application crash 2020-08-24 13:22:34 +02:00
Uwe Kindler
1b42048135 Fixed pure virtual function call 2020-08-24 11:33:40 +02:00
Uwe Kindler
bfe6b9bd26 Merge branch 'FixesPack_Parenting_Memory_leaks_etc' of https://github.com/ymiroshnyk/Qt-Advanced-Docking-System into ymiroshnyk-FixesPack_Parenting_Memory_leaks_etc 2020-08-24 11:22:50 +02:00
Uwe Kindler
08a8cee1c6 Updated centralwidget test 2020-08-24 11:14:58 +02:00
Uwe Kindler
835a532e75 Corrected constness of some functions, changed signatur of setCentralWidget function 2020-08-24 10:22:12 +02:00
Uwe Kindler
d383ade03c Merge branch 'Central-Widget' of https://github.com/hulswit/Qt-Advanced-Docking-System into hulswit-Central-Widget 2020-08-24 09:50:12 +02:00
Uwe Kindler
6d9c4cee02 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-08-24 09:47:34 +02:00
Yurii Miroshnyk
a565239c4a Fixes pack. Parenting, memory leaks, floating widgets deleting.
* DockWidget always has DockAreaWidget as parent. It's not necessary to make it nullptr. This fixes many bugs related to restoring inactive tabbed DockWidgets.

* Fixed memory leaks related to QBoxLayout::takeAt().

* Fixed algorithm of deleting remaining floating widgets after restore.
2020-08-21 19:24:55 +03:00
hulswit
ba69f3e6b9 CMake Fix 2020-08-21 13:42:52 +02:00
hulswit
14c29f695c Central widget update
Updated the setting of central widget with option to set where the possible old central widget will be placed. Fixed option of "unsetting" central widget by setting it to nullptr.
2020-08-21 13:30:59 +02:00
shelomentsev
703a9b3e12 Update the state of close button on titlebar and tabbar when CDockWidget::DockWidgetClosable changed. (#240) 2020-08-21 08:09:13 +02:00
shelomentsev
0eca1b0433 Memory leak (#242)
* Delete widgets without parents in CDockAreaLayout.

* Fixed the place where dock widgets witout parents are destroyed.
2020-08-21 08:08:33 +02:00
hulswit
691c9683ce Merge branch 'master' into Central-Widget 2020-08-20 16:37:05 +02:00
hulswit
1a11e5ddcd Central Widget concept added
Adde option to set a dock widget as central widget. It influences resizing behavior of the splitters. The central widget will be stretched with the main window and remaing dock widgets and threir respective areas will be resized only vertically if docked left or right  and horizontaly if docked top or bottom
2020-08-20 16:36:02 +02:00
shelomentsev
a4d281dbb6 Floating window fixes. (#239)
* Don't show a CFloatingDockContainer if all its CDockWidget were hidden before its first shown.

* Destroy empty CFloatingDockContainer when removing CDockWidget via removeDockWidget function.
2020-08-20 12:58:15 +02:00
shelomentsev
8361f90dce Delete widgets without parents in CDockAreaLayout. (#241) 2020-08-20 12:56:37 +02:00
Uwe Kindler
04b4ff8b4b Fixed typo in DockWidget documentation 2020-08-19 15:16:13 +02:00
Uwe Kindler
121248c3c5 Improved documentation 2020-08-19 13:49:20 +02:00
Uwe Kindler
c44d0c87e3 Fixed broken SimpleExample application 2020-08-19 13:38:53 +02:00
Uwe Kindler
c6cf9487ba Added maximize button svg icon 2020-08-18 20:36:02 +02:00
Uwe Kindler
c78cc17730 Properly persist dock area HideSingleWidgetTitleBar flag (and all other dock area flags) 2020-08-18 10:48:35 +02:00
Uwe Kindler
81a0234b05 Added HiveWE editor to showcase applications 2020-08-18 08:01:45 +02:00
Uwe Kindler
f72a8568c5 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-08-17 23:51:14 +02:00
Uwe Kindler
11aec65967 Properly persist the AllowedAreas state of CDockAreaWidget 2020-08-17 23:50:37 +02:00
Nicolas ELIE
40636d1e05 Add flag to DockWidget to force dw to be closed with the area that contains it 2020-08-04 11:50:32 +02:00
Nicolas Elie
75841415a3 Update Python bindings (#231)
* Update Python bindings to reflect changes in 8443414

* [Python] Fix no such signal error for signals with a reference to an object in ads namespace

* [Python] Update examples
2020-07-30 13:44:05 +02:00
Uwe Kindler
edc799bc54 Added D-Tect X software to showcase 2020-07-29 08:09:00 +02:00
githubuser0xFFFF
1d0b20337f Update README.md 2020-07-23 18:06:57 +02:00
Uwe Kindler
4a6d2d3514 Changed demos to delete the dock manager when the main window is closes to ensure that all floating widgets als "closed" (destroyed) 2020-07-22 11:28:41 +02:00
Some Guy
8443414ae3 Added setHideSingleWidgetTitleBar to DockWidgetArea 2020-07-21 08:20:17 +02:00
Uwe Kindler
81c99745d4 Fixed a bug when dragging a FloatingDragPreview from another floating widget over an empty MainWindow 2020-07-13 09:08:39 +02:00
Uwe Kindler
d6831caea4 Some refatoring in DockFocusController to improve code 2020-07-13 08:43:51 +02:00
Uwe Kindler
aa25e1fd56 Improved emission of focusedDockWidgetChanged signal to ensure, that the application can restore the focus of the focused application dock widget content 2020-07-13 08:41:30 +02:00
Uwe Kindler
0459aff34f Cleanup of debug messages in DockFocusController 2020-07-10 22:08:28 +02:00
Uwe Kindler
aeb0a27401 Improved code documentation 2020-07-08 08:10:27 +02:00
Uwe Kindler
50e3ef3dd8 Fixed stealing of focus by tab close button 2020-07-08 08:08:50 +02:00
Uwe Kindler
9974256d71 Fixed double emission of focusedDockWidgetChanged() signal 2020-07-07 14:38:03 +02:00
Uwe Kindler
8cf4134125 Some changes to ensure emission of focusedDockWidgetChanged signal 2020-07-06 08:22:48 +02:00
Uwe Kindler
ef5b22c616 Merge branch 'master' into focus_changed_fix 2020-07-06 07:35:08 +02:00
Uwe Kindler
42161c807a Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-07-05 22:29:38 +02:00
Uwe Kindler
acfc96f57c Properly update DockAreaTabBar geometry if tab text changed 2020-07-05 22:29:13 +02:00
Uwe Kindler
e6e83d5775 Added test for CDockWidget::setWindowTitle function 2020-07-05 21:48:48 +02:00
Nicolas Elie
5b2bc2297b Update Python bindings and demo to reflect recent changes (#218)
* Generate Python stubs file for linters

* Sort members of ads namespace in generated __init__.py

* Fix pyi generatation in setup.py if building inplace

* Update sip files and demo
2020-07-04 17:07:48 +02:00
Uwe Kindler
2de3e7e3be Deferred focusedDockWidgetChanged signal until dock widget becomes visible 2020-07-03 23:24:20 +02:00
Uwe Kindler
0d242297ff Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-07-03 22:22:52 +02:00
Uwe Kindler
e2080b5cfc Restored default dock manager config flag settings 2020-07-03 22:22:00 +02:00
Uwe Kindler
679fa81f6d Added new CDockWidget feature flag focusable 2020-07-03 14:55:33 +02:00
Nicolas Elie
6d0f14e1a5 Generate Python stubs file for linters (#214)
* Generate Python stubs file for linters

* Sort members of ads namespace in generated __init__.py
2020-07-02 07:47:18 +02:00
Uwe Kindler
281127c2c3 Merge remote-tracking branch 'remotes/origin/issue212' 2020-07-01 07:48:36 +02:00
Uwe Kindler
8e621f1f20 Properly reparent TabWidget to DockWidget if TabWidget is removed from TabBar 2020-06-30 16:34:59 +02:00
Uwe Kindler
0948f73bf8 Properly reset DockManager pointer when removing DockWidget from DockManager 2020-06-30 11:45:23 +02:00
Uwe Kindler
4bc1a18db2 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-06-30 10:00:03 +02:00
Uwe Kindler
80eb628ea3 Fixed naming of the dock area titlebar actions to be consistent 2020-06-30 09:59:42 +02:00
Uwe Kindler
d811915a0c Reset DockArea pointer of DockWidget when removing DockWidget from DockArea 2020-06-29 22:11:37 +02:00
Hannes Schulze
0225563b46 Fix Undefined Behavior in LastAddedAreaCache (#211) 2020-06-28 21:07:17 +02:00
Uwe Kindler
da20405a6a Fixed a compiler warning 2020-06-26 11:34:17 +02:00
Uwe Kindler
ace6d69695 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-06-26 11:19:58 +02:00
Uwe Kindler
7baf0f90e8 Converted dock content creation functions to member functions to allow ui access 2020-06-26 11:19:37 +02:00
Uwe Kindler
2ad92ce958 Removed superfluous code to fix issue #209 2020-06-26 11:18:46 +02:00
Nick D'Ademo
50c4a8ed48 Update CMakeLists.txt (#204)
Pass header files to add_library() so they appear in the 'qtadvanceddocking' Visual Studio project.
Add path to header files in PUBLIC include build interface so the 'qtadvanceddocking' target can be built in-source in a CMake project.
2020-06-19 20:01:48 +02:00
githubuser0xFFFF
59d6a64098 Update README.md 2020-06-18 09:31:14 +02:00
Uwe Kindler
3de877fe56 Updated linux stylesheet
Default linux style uses now the provided SVG buttons for the floating widget title bar close button
2020-06-18 09:21:46 +02:00
Uwe Kindler
e2cebd9dcf Updated stylesheet to provide uniform look of icons for all platforms
added detach-button icon
2020-06-18 08:29:41 +02:00
Uwe Kindler
58744408f0 Switched dock area close button icon to ads specific svg icon 2020-06-14 16:25:18 +02:00
Uwe Kindler
e36655a7ab Fixed wrong current index when removing a widget from CDockAreaLayout 2020-06-14 16:12:56 +02:00
Uwe Kindler
ffed6a9c5f Merged pull request #201 but made it configurable via config flag 2020-06-14 10:39:07 +02:00
Davide Faconti
38d8e6aa25 fix 2020-06-13 17:22:25 +02:00
Davide Faconti
c109ef836a use equal splitter size for widget added programmatically 2020-06-13 16:59:13 +02:00
Uwe Kindler
caa1a9f330 Stylesheet update
Updated stylesheet to use svg icon for close button instead of system icon
2020-06-11 08:36:01 +02:00
Uwe Kindler
e71884b23d Replaced configFlags().testFlag() with testConfigFlag() to improve code readibility 2020-06-11 08:06:37 +02:00
Uwe Kindler
d04c386948 Splitted stylesheets into default and focus_highlighting to properly support both use cases 2020-06-11 07:43:06 +02:00
Uwe Kindler
6a25de327c Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-06-10 16:20:22 +02:00
Uwe Kindler
e63d1b1683 Fixed a bug that caused invisible TabWidget for dock widgets that are not part of a restored state 2020-06-10 16:07:42 +02:00
Nicolas Elie
fa2ab356e1 Update PyQt bindings for 3.5.0 (#198) 2020-06-10 15:08:31 +02:00
Uwe Kindler
80f92e5697 Added note about the new focus highlighting feature on the project page 2020-06-10 07:41:14 +02:00
Uwe Kindler
0c13402516 Added documentation for FocusHighlighting flag 2020-06-10 07:16:35 +02:00
Uwe Kindler
97e3d72566 Disabled focus highliighting in demo application 2020-06-09 22:00:46 +02:00
Uwe Kindler
682aaf66eb Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-06-09 21:58:12 +02:00
Uwe Kindler
c939df73fa Merge branch 'focused_dockwidget' 2020-06-09 21:57:23 +02:00
Uwe Kindler
fdf169ce9a Fixed docking of floating widgets for MacOS 2020-06-09 20:29:19 +02:00
githubuser0xFFFF
4b730a4949 Update README.md 2020-06-09 15:39:16 +02:00
Uwe Kindler
788c357cc0 Added missing README.md changes 2020-06-09 15:35:02 +02:00
Uwe Kindler
e3844b8d6c Added Python section to README.md 2020-06-09 15:32:00 +02:00
Uwe Kindler
ff3fcdcacd Removed debug output 2020-06-09 14:40:13 +02:00
Uwe Kindler
a9268e6bf7 Fixed build issues and improved styling
Improved styling of close buttons and focused close buttons
2020-06-07 17:28:23 +02:00
Uwe Kindler
0227bd1786 Added icon for proper styling of focused close icon 2020-06-07 17:19:07 +02:00
Uwe Kindler
227037e42a Added new close button SVG icon 2020-06-07 15:20:24 +02:00
Uwe Kindler
cd495a14ec Fixed MSVC compiler warning 2020-06-07 15:20:08 +02:00
Uwe Kindler
312a8cf500 Enabled ClickFocus for CDockWidget to support focussing in case the content does not support it
Renamed FocusStyling to FocusHighlighting
2020-06-06 14:59:03 +02:00
Uwe Kindler
2fc8bbe9c9 Added mising DockFocusController files 2020-06-05 21:03:47 +02:00
Uwe Kindler
f5c4b26aab Moved focus related functionality into CDockFocusController class to keep the dock manager code clean 2020-06-05 20:42:43 +02:00
Uwe Kindler
c4d2d72e92 Added activateWindow() call in CFloatingDockCiontainer::showEvent
This is required to properly style the floating widget that contains the currently focused widget
2020-06-05 13:40:36 +02:00
Uwe Kindler
f90f0b0427 Properly implemented focusedDockWidgetChanged() signal 2020-06-05 12:14:26 +02:00
Uwe Kindler
d360b4ced2 Merge branch 'master' into focused_dockwidget 2020-06-05 07:40:39 +02:00
Uwe Kindler
f074ea9d67 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-06-05 07:40:10 +02:00
Uwe Kindler
2e8137ad85 Fixed setting of CDockingStateReader file version - use internal file version instead of user file version 2020-06-05 07:39:51 +02:00
Uwe Kindler
a65b1bdcaf Removed new dropped signals 2020-06-05 07:27:44 +02:00
Uwe Kindler
4041aa72cc Implemented proper support for setting floating widget focused widget 2020-06-05 06:55:43 +02:00
Hugo Slepicka
4d2de7bb2a FIX: Update Python bindings for 3.4.2 and current master. (#193)
* FIX: Update python bindings for 3.4.2.

* FIX: Try to fix windows build.

* FIX: Add const at nativeEvent argument.

* FIX: Adjusting sip bindings for changes from 8b6df4aaa5.
2020-06-04 23:55:02 +02:00
Uwe Kindler
bcb7118710 Fixed typos 2020-06-04 20:48:59 +02:00
Uwe Kindler
45390506dd Continued implementation 2020-06-04 20:40:23 +02:00
Uwe Kindler
f58a3d4401 Change to support loading of older files without UserVersion atribute 2020-06-03 19:53:17 +02:00
Uwe Kindler
a3e979a8ad Disabled setFocus in CDockWidget::setActiveTab 2020-06-03 19:49:57 +02:00
Uwe Kindler
adb72737e8 Merge branch 'version_fix' into focused_dockwidget 2020-06-03 17:53:05 +02:00
Uwe Kindler
e626a7e302 Merge branch 'master' into focused_dockwidget 2020-06-03 17:52:46 +02:00
Uwe Kindler
8b6df4aaa5 Fixed saveState() and restoreState() version handling to work like the function from QMainWindow 2020-06-03 07:25:09 +02:00
Uwe Kindler
ccf8ea9d1e Try to fix appveyour build problem 2020-05-27 15:26:36 +02:00
Uwe Kindler
dfb8543aee Properly handle Escape key in native Window event handling function if event WM_EXITSIZEMOVE occurs 2020-05-27 13:28:29 +02:00
Uwe Kindler
277e06627b Removed eclipe project file, Added VisualStudio.gitignore to .gitignore 2020-05-27 12:42:59 +02:00
Uwe Kindler
ea9b39a9dd Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-05-26 06:41:58 +02:00
Uwe Kindler
1848ffa35a Properly reset widget pointer to nullptr in takeWidget() 2020-05-26 06:41:40 +02:00
Luca
c53be0e97d Modernised CMake build files and CI configs (#185)
* Modernised CMake build files and CI configs

Fixed include formats

* Fixed build errors and warnings

* Fixes to allow CMake find_package
2020-05-24 09:14:33 +02:00
Uwe Kindler
ae999f132e Improved focus styling 2020-05-23 14:45:49 +02:00
Uwe Kindler
9aa958e8b0 Made all focus related code optional - only if FocusStyling flag is enabled 2020-05-23 11:17:31 +02:00
Uwe Kindler
5652c8440e Added new CDockManger config flag FocusStyling 2020-05-23 11:10:03 +02:00
Uwe Kindler
26f4c9b049 Merge branch 'focused_dockwidget' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System into focused_dockwidget 2020-05-22 21:30:10 +02:00
Uwe Kindler
ce11fa9d10 Merge branch 'master' into focused_dockwidget 2020-05-22 21:28:02 +02:00
Uwe Kindler
6a393955cd Removed debug output 2020-05-22 21:18:59 +02:00
Uwe Kindler
6b5f364864 Fixed issue #179 - appearance of drop indicators then Windows option "Show window contents while dragging" is
FloatingDragPreview.cpp: moved code from moveEvent into moveFloating function to remove indirection and to simplify code
Moved code from moveEvent() function into moveFloating() to remove indirection and to simplify code
Implemented Windows drag handling with native WM_ nonclient area messages
2020-05-22 19:43:50 +02:00
Uwe Kindler
333d2920db Merge remote-tracking branch 'origin/focused_dockwidget' into focused_dockwidget 2020-05-22 19:26:54 +02:00
Uwe Kindler
25eb02d07c Added support for focus styling of CFloatingWidgetTitleBra 2020-05-22 19:23:40 +02:00
Uwe Kindler
3b2f940efa Fixed windows build 2020-05-21 10:32:31 +02:00
Uwe Kindler
9dcbe91f02 Merge branch 'focused_dockwidget' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System into focused_dockwidget 2020-05-21 08:29:55 +02:00
Uwe Kindler
4da810ba7c Added window()->activateWindow() dropFloatingWidget() function 2020-05-20 14:20:27 +02:00
Uwe Kindler
819f1effc5 Added support for focus styling of CFloatingWidgetTitleBra 2020-05-19 22:53:52 +02:00
Uwe Kindler
ba94ef3493 Merge branch 'master' into focused_dockwidget 2020-05-19 20:51:19 +02:00
Uwe Kindler
36bcbded54 Fixed showing of dock area when inserting a dock widget into a hidden dock area
fixed setting of DockAreaTabBar index to prevent showing of tab 0 when inserting a dock widget into an area with no current index tab
2020-05-19 20:26:57 +02:00
Uwe Kindler
0127fd89a3 Merge branch 'master' into focused_dockwidget 2020-05-17 12:26:22 +02:00
Uwe Kindler
eee9ebb41d Fixed an issue that caused wrong inserten order of dock widget when dropping a floating widget to the left or top container drop area 2020-05-17 12:21:52 +02:00
Uwe Kindler
79cb889d83 Improved focus style handling 2020-05-17 08:51:58 +02:00
Patrick Stewart
cdb8926673 Add missing override (#176) 2020-05-15 19:48:19 +02:00
githubuser0xFFFF
b3307d81ca Update user-guide.md
Fixed typo
2020-05-15 12:41:58 +02:00
Uwe Kindler
40374178c9 Added Style documentation section to user-guide.md 2020-05-15 12:40:49 +02:00
Uwe Kindler
516465aefb Fixed issue #173 - tab changes position when redocking it to the same position 2020-05-15 12:25:22 +02:00
Uwe Kindler
e760d3e967 Improved focus handling when dropping a dock widget 2020-05-14 09:06:04 +02:00
Uwe Kindler
c5333a2414 Merge branch 'master' into focused_dockwidget 2020-05-14 07:34:31 +02:00
Uwe Kindler
0d406ece7c Fixed MSVC compiler warning because of using class instead of struct in a friend declaration 2020-05-14 07:31:03 +02:00
Uwe Kindler
7c03b1b936 Fixed gcc compiler warning caused by supefluous extra semi-colon by all QT_FORWARD_DECLARE_CLASS statements 2020-05-14 07:27:48 +02:00
Uwe Kindler
427b5a0be0 Added nullptr check to fix potential issue #171 - nullptr access closing a CFloatingDockContainer 2020-05-14 07:20:30 +02:00
Uwe Kindler
3011c0c030 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-05-14 06:46:47 +02:00
Uwe Kindler
b8b6db632c Added a new showcase application to README.md - ezEditor 2020-05-14 06:46:31 +02:00
Patrick Stewart
04ca4ae674 Support for Qt built with the -qtnamespace configure option (#170) 2020-05-13 23:26:05 +02:00
Uwe Kindler
3a0c2a3113 Some refactorings in onFocusChanged() to improve code readibility 2020-05-13 22:51:44 +02:00
Uwe Kindler
789f78354a Merge branch 'master' into focused_dockwidget 2020-05-13 21:27:21 +02:00
Uwe Kindler
14f5426299 Merge branch 'jankrassnigg-master' 2020-05-13 16:58:48 +02:00
Uwe Kindler
d418d92ef4 Added missing DockAreaTitleBar_p.h to src.pro 2020-05-13 16:57:36 +02:00
Jan Krassnigg
726d73b2c2 Missing cmake change 2020-05-13 16:47:43 +02:00
Jan Krassnigg
115e67edc4 Moved private classes into dedicated header 2020-05-13 16:40:43 +02:00
n-elie
4a8b5dd7ab Update PyQt bindings (#168)
* Fix include header in sidebar example

* Update SIP files and Python examples

Co-authored-by: K Lauer <klauer@users.noreply.github.com>

Co-authored-by: K Lauer <klauer@users.noreply.github.com>
2020-05-13 16:05:00 +02:00
Uwe Kindler
4c75168152 Improved focus setting when closing a dock area widget 2020-05-13 13:18:05 +02:00
Uwe Kindler
64a2024513 Removed debug output 2020-05-13 11:20:32 +02:00
Uwe Kindler
056e1ef947 Improved highlighting focused dock widget 2020-05-13 11:17:43 +02:00
Jan Krassnigg
a9965bf6dc Moved CTitleBarButton and CSpacerWidget declaration into DockAreaTitleBar.h
This gets rid of the need to MOC DockAreaTitleBar.h and DockAreaTitleBar.cpp and it means that DockAreaTitleBar.cpp does not need to #include "DockAreaTitleBar.moc" anymore, which is a file that is generated by the build system and therefore may be named differently when using a custom build system.
2020-05-13 08:04:50 +02:00
Uwe Kindler
f54869fbf7 Improved setting of CDockWidgetTab focus 2020-05-11 16:29:58 +02:00
Uwe Kindler
835a20f03f Merge branch 'master' into focused_dockwidget 2020-05-11 15:50:47 +02:00
Uwe Kindler
aa7976dac6 Fixed issue #164 - Single DockArea cannot be split 2020-05-11 09:03:28 +02:00
Uwe Kindler
067338ef23 Enable styling of focused dockwidget 2020-05-10 19:30:34 +02:00
Uwe Kindler
b7e7c0ccc3 Added new test action for adding docked editor widget to test fix for issue #148 2020-05-07 16:14:59 +02:00
Uwe Kindler
cb18bc0d91 Fixed visibility issue when adding dock widget after all other dock widgets have ben closed in the GUI - fix for GitHub issue #148 2020-05-07 16:13:59 +02:00
Uwe Kindler
07464ce05c Added new SidebarExample 2020-05-07 14:39:02 +02:00
Uwe Kindler
62ce9dca5d Fixed small bug in FloatingDragPreview that caused flashing of hidden overlay when dragging the last visible dock widget in non opaque docking mode 2020-05-07 14:20:31 +02:00
Uwe Kindler
985d164cd1 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-05-04 15:14:50 +02:00
Uwe Kindler
0c9a1ee3f2 Fixed a bug in FloatingDragPreview that prevents dock widget from floating when dragging over another dock widget 2020-05-04 15:14:35 +02:00
githubuser0xFFFF
0bd20883df Update user-guide.md 2020-04-30 19:51:35 +02:00
githubuser0xFFFF
1d8a1e9bb8 Update user-guide.md 2020-04-29 07:15:06 +02:00
Uwe Kindler
3adabaec81 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-04-29 07:13:57 +02:00
Uwe Kindler
5695d0d305 Added documentation for HideSingleCentralWidgetTitleBar configuration flag 2020-04-29 07:13:42 +02:00
farmovit
f1792820e1 Fix memory leak (#152) 2020-04-28 15:17:02 +02:00
Uwe Kindler
e091be0b76 Restored default demo application settings 2020-04-28 07:19:06 +02:00
Uwe Kindler
e4c5eac146 Added FloatingContainerHasWidgetIcon documentation to user-guide.md 2020-04-28 06:51:34 +02:00
Uwe Kindler
cbd2fcb0d3 Fixed CDockWidget::setWidget function to test for QAbstractScrollArea instead of QScrollArea
Now setWidget properly supports ItemViews like QTreeView or QTableView
2020-04-27 16:51:46 +02:00
Uwe Kindler
47029190dc Fixed wrong display of center drop area when dragging over invisible dock area title bar 2020-04-27 15:27:34 +02:00
Uwe Kindler
80aee638c9 Fixed bug that drop overlay sometimes was not visible when moving the drag preview over a floating window
This bug was caused by accidentally using hide() instead of hideOverlay()
2020-04-27 15:20:27 +02:00
Uwe Kindler
cdc863e962 Fixed dropping of FloatingDragPreview into center of dock container with only one single visible dock area
If this happens the dropped dock widget needs to get tabified
2020-04-27 14:00:37 +02:00
Uwe Kindler
ef855e3843 Added documentation for FloatingContainerHasWidgetTitle flag 2020-04-27 08:58:50 +02:00
Uwe Kindler
842d417e8d Fixed crash when trying to make a CDockWidget floating in non-opaque mode if the CDockWidget is not floatable 2020-04-27 07:54:43 +02:00
Uwe Kindler
52a64350e6 Fixed DockWidgetTab to provide the right size when starting floating 2020-04-27 07:48:15 +02:00
Uwe Kindler
79831d482b Added QtCreator IDE to showcases 2020-04-24 10:08:18 +02:00
Uwe Kindler
a4fbaf413b Fixed source documentation of DockAreaDynamicTabsMenuButtonVisibility flag 2020-04-24 09:31:13 +02:00
Uwe Kindler
b982947cf4 Added documentation for DockAreaDynamicTabsMenuButtonVisibility to user-guide.md 2020-04-24 09:30:06 +02:00
Uwe Kindler
bc2ac48eab Fixed default elide mode in DockWidgetTab.cpp 2020-04-24 09:29:33 +02:00
Uwe Kindler
ddbdb83821 Added documentation for DockAreaHideDisabledButtons flag 2020-04-22 12:03:58 +02:00
Uwe Kindler
85626c9a21 Added Q_INIT_RESOURCE(ads) for static builds 2020-04-22 06:25:01 +02:00
Uwe Kindler
8bf8309949 Added configuration flags DockAreaHasTabsMenuButton and DockAreaHasUndockButton to user-guide.md 2020-04-20 16:25:30 +02:00
Uwe Kindler
528f48e6d1 Added documentation for AlwaysShowTabs configuration flag 2020-04-19 12:08:01 +02:00
Uwe Kindler
28dfcc2a62 Updated user-guide images 2020-04-17 10:43:28 +02:00
Uwe Kindler
0bfa2eb88e Updated documentation picture cfg_flag_DragPreviewHasWindowFrame_true.png 2020-04-17 10:28:46 +02:00
Uwe Kindler
27bbe9f7f5 Added additional configuration flags to user-guide.md 2020-04-17 10:25:32 +02:00
Uwe Kindler
92dbcec7c0 Added missing image to user-guide.md 2020-04-15 20:19:54 +02:00
Uwe Kindler
2be2f2bc6f Added DragPreviewIsDynamic section to user-guide.md 2020-04-15 20:18:20 +02:00
Uwe Kindler
a083d778bd Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-04-15 13:13:39 +02:00
Uwe Kindler
d4770a7d41 Continued writing of user-guide.md - added further configuration flags documentation 2020-04-15 13:10:03 +02:00
githubuser0xFFFF
37365caf8e Update user-guide.md 2020-04-14 22:55:47 +02:00
Uwe Kindler
3f5bfc3139 Added new sections to user-guide.md 2020-04-14 20:00:59 +02:00
Uwe Kindler
4ac7291831 Merge branch 'documentation' 2020-04-14 17:24:44 +02:00
Uwe Kindler
b5e9096387 Fixed cmake build 2020-04-14 17:24:34 +02:00
Uwe Kindler
19c8e9ffcc Started creation of user-guide.md 2020-04-14 17:23:01 +02:00
Uwe Kindler
6a815a836c Implemented status dialog in demo application to test several CDockWidget functions 2020-04-14 16:07:00 +02:00
Uwe Kindler
277d3fffe4 Removed unused slot 2020-04-13 22:40:14 +02:00
Uwe Kindler
9502e7bf6c Added new features to sip/DockManager.sip and DockWidget.sip for Python integration 2020-04-13 22:35:35 +02:00
Uwe Kindler
8aae6bf70b Added DockWidget functions setAsCurrentTab, raise, isCurrentTab, isTabbed 2020-04-13 22:16:47 +02:00
Uwe Kindler
a668fe2f73 Added new config flag HideSingleCentralWidgetTitleBar to enble a central single dock widget in the main dock container (dock manager) without titlebar
Added a test case for the new flag to MainWindow.cpp
2020-04-12 01:05:20 +02:00
Uwe Kindler
12bb7b73e9 Fixed CDockContainerWidget::hasTopLevelDockWidget() and CDockContainerWidget::topLevelDockArea() to work properly also for the main non floating dock container 2020-04-12 00:56:41 +02:00
Uwe Kindler
dbf90a4233 Fixed ElidingLabel to properly support Qt::ElideNone
added setElideMode function to CDockWidgetTab
2020-04-10 21:06:43 +02:00
Uwe Kindler
19331ebe2b Added comment to showFullScreen that this only works for Windows 2020-04-10 12:54:37 +02:00
Uwe Kindler
16a149b436 Fixed wrong call to base class function in DockWidget::showNormal 2020-04-10 12:35:47 +02:00
Uwe Kindler
1f995299f0 Added setFullScreen(), setNormal() and isFullScreen() function to CDockWidget to be more compatible to QDockWidget 2020-04-09 23:16:50 +02:00
Uwe Kindler
7a17aba42d Fixed takeWidget() function and fixed setWidget() function to handle case if there is already a content widget 2020-04-09 21:44:21 +02:00
Uwe Kindler
9fe1dd6a88 Updated README.md toc 2020-04-09 21:16:04 +02:00
Uwe Kindler
7c2d1891a2 Added showcase section to README.md 2020-04-01 12:31:37 +02:00
Uwe Kindler
998fe9fa11 Added Q_OS_WIN around the installation of the eventFilter in FloatingDockContainer because it is only required for Windows 2020-04-01 08:36:33 +02:00
Uwe Kindler
28dc374fc2 Added support for proper handling on non client escape key presses on Windows 2020-04-01 08:12:45 +02:00
Uwe Kindler
1b6e449b4a Merge branch 'dev' 2020-03-28 19:32:59 +01:00
Uwe Kindler
0e88467f94 DockAreaWidget now properly considers minimumSizeHint() of contained DockWidgets
Added setMinimumSizeHintMode() test in demo MainWindow
2020-03-28 19:32:07 +01:00
Uwe Kindler
d0f4ce3248 Added support to adhere the minimumSizeHint() of the content widget of a dock widget 2020-03-26 07:09:01 +01:00
Uwe Kindler
542618fd4e Removed unneeded includes from DockManager.h and fixed includes to use "" instead of <> to prvent conflicts with external libraries 2020-03-26 06:53:13 +01:00
Uwe Kindler
661d0c4356 Removed dead code in comment of DockAreaWidget 2020-03-25 14:38:10 +01:00
Uwe Kindler
dceaa155c4 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-03-25 14:35:26 +01:00
Uwe Kindler
c541f2c69b DockWidget now also emits closed() signal if DockWidgetDeleteOnClose flag is set 2020-03-25 14:34:42 +01:00
Uwe Kindler
37d305e50d Fixed documentation of toolBarIconSize() function of DockWidget 2020-03-25 14:23:27 +01:00
K Lauer
4adef2b774 FIX: DockContainerWidget::dropWidget API change not reflected in Python bindings (#133)
* FIX: dropWidget API change not reflected in Python bindings

* Add missing methods to Python bindings (3.2.4)
2020-03-17 09:12:00 +01:00
Uwe Kindler
1c2383f8eb Fixed regression #132 - Inner drop areas don't work with multi tab DockWidgets 2020-03-12 20:29:03 +01:00
Uwe Kindler
6c687d28de Fixxed isse #131 - Crash on dropping in same area multiple times 2020-03-12 10:23:41 +01:00
Uwe Kindler
708add3ff5 Fixed two linter warnings in CDockManager 2020-03-12 08:01:57 +01:00
Uwe Kindler
e85b4167bd Changed CDockManager::addToggleViewActionToMenu to support later setting of group icon 2020-03-10 09:11:36 +01:00
Uwe Kindler
59c783831a Fixed wrong test for VisibleDockAreas 2020-03-07 16:18:19 +01:00
Uwe Kindler
4cb1931ace Fixed display of container dock overlay if only one single visible dock area is in a container 2020-03-02 11:21:44 +01:00
Uwe Kindler
fe10b570d3 Fixed reception of escape key press events 2020-02-26 20:51:29 +01:00
Uwe Kindler
f3c5d51380 Improved documentation for setting dock manager flags 2020-02-26 13:25:17 +01:00
Uwe Kindler
34cb2ae917 Fixed escape key press detection 2020-02-25 09:16:21 +01:00
Hugo Slepicka
8cc9cc25ad Fixed and updated Python integration (#127)
* FIX: Add Q_OS_MACOS flag to moc compiler.

* (Python) Demo and example from @n-elie.

* FIX: Addressing some sip files that were inconsistent with the header files.

* (Python) Addressing comments by @n-elie and switching to use WS_X11 for platform checks.

* (Python) Wrap definition of tFloatingWidgetBase to avoid 'Already Defined' error and fix include path for sip/linux/FloatingWidgetTitleBar.sip.

* Remove simple.py

* Fix case sensitive ui file loading in Linux

* Add windows case in get_moc_args

* Remove conda recipe

Co-authored-by: n-elie <40382614+n-elie@users.noreply.github.com>
2020-02-25 07:22:51 +01:00
Hugo Slepicka
c90fb9413c FIX: Update Python SIP bindings 3.2.1 & Linux Crash (#126)
* (Python) WIP: attempt to update to 3.2.0

* (Python) MAINT: move demo.py to demo/ to avoid PyQtAds import issue

* (Python) STY: remove trailing whitespace

* (Python) Missing/incorrect /Transfer/ annotations

* (Python) n-elie's fix for setup.py moc generation

* (Python) FIX: Q_OS_LINUX is not defined by default with moc

* (Python) FIX: split FloatingDockContainer.sip to be platform-specific

%If (Platform) blocks around the class definition in
FloatingDockContainer.sip did not seem to work.

Co-authored-by: K Lauer <klauer@users.noreply.github.com>
2020-02-21 22:47:09 +01:00
Rodrigo Oliva
dec170ed24 Don't select a new tab if the tab being closed is not the current tab. (#125) 2020-02-21 22:46:21 +01:00
Uwe Kindler
3ffbbfb6d0 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-02-19 22:51:53 +01:00
Uwe Kindler
e8332575f8 Improved tab dragging, added support for undocking if mouse leaves tabbar during tb dragging 2020-02-19 22:48:17 +01:00
Uwe Kindler
8c12d912b4 Improved tab dragging, added support for undocking if mouse leaves tabbar during tb dragging 2020-02-19 22:29:29 +01:00
Uwe Kindler
fd28f0f751 Update DockAreaTab bar to undock / shwo undock preview as soon as a tab is dragged outside of the tab bar 2020-02-19 22:07:17 +01:00
Uwe Kindler
3f09d5c6ea Fixed initial position for CFloatingDockContainer when dragging a tab outside of the tabbar 2020-02-19 18:36:57 +01:00
Uwe Kindler
3407945f19 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-02-17 10:42:02 +01:00
Uwe Kindler
ce01e6b4a6 Fixed QT_VESION typo in DockOverlay.cpp 2020-02-17 10:41:13 +01:00
Sanakan8472
3428a4b8b4 Added CDockManager::floatingWidgetCreated event (#121)
This allows to subscribe to events of the newly created window.
A common use case is to show a message box if a dock container with many modified documents in it is closed. This allows for the user to decide whether he wants to save / discard all the changes or cancel the closing of the window.
2020-02-17 08:15:11 +01:00
Uwe Kindler
2b9377b5ee Fixed drag canceling via ESC key 2020-02-17 08:08:25 +01:00
Uwe Kindler
d4a18003d9 Properly implemented handling of DockWidget flag DockWidgetIsMovable for NonOpaque undocking - creating the drag preview is allowed even if the DockWidget is not floatable 2020-02-16 14:37:14 +01:00
Uwe Kindler
2c15d5dacd Fixed regression caused by setDockArea() function removed from DockWidgetTab 2020-02-14 22:56:48 +01:00
Uwe Kindler
f236de3277 Replaced all dynamic_casts with qobject_casts 2020-02-13 18:56:04 +01:00
Uwe Kindler
93394577d0 Merge branch 'master' into custom_titlebar 2020-02-13 13:53:56 +01:00
Uwe Kindler
f387c6aebc Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-02-13 13:51:11 +01:00
Uwe Kindler
41173d067b Switched QScopedPointer to std::unique_ptr in DockComponentsFactory 2020-02-13 13:45:40 +01:00
Uwe Kindler
5b60e39ed3 Removed unneeded functions 2020-02-13 13:04:08 +01:00
Uwe Kindler
1916bd726d Fixed build issue for older Qt versions 2020-02-11 15:46:19 +01:00
Uwe Kindler
3efc5f2ada Added DockComponentsFactory.h documentation, changed DockComponentsFactory showcase in MainWindow after discussion on GitHub 2020-02-11 15:38:49 +01:00
Uwe Kindler
3eba02597c Added missing svg icon 2020-02-11 11:57:53 +01:00
Uwe Kindler
65eeffd5e1 Added showcase for DockComponentsFactory - a help button is injected into a title bar 2020-02-11 09:31:57 +01:00
Uwe Kindler
ff1439c719 Added CDockComponentsFactory for creation of components for the docking framework 2020-02-11 08:32:49 +01:00
mvidelgauz
7ba20f37b7 Icon of floating window (#116)
* FloatingContainerHasWidgetTitle and FloatingContainerHasWidgetIcon config flags
2020-02-10 20:07:36 +01:00
Rodrigo Oliva
a4ef161f4f Fix using escape button when dragging non-opaque preview to cancel drag operation (#114)
* Added missing overrides.

* Escape button to cancel dragging was not working in Windows either. Using the event filter added for Linux works.
2020-02-07 23:07:07 +01:00
Uwe Kindler
8a16230213 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-02-07 22:54:02 +01:00
Uwe Kindler
8113bf63ba Added spacer widget to handle mouse events properly in CDockAreaTitleBar, added missing updateGeometry calls to CDockAreaTabBar 2020-02-07 22:49:10 +01:00
Rodrigo Oliva
2770837adc Added missing overrides. (#113) 2020-02-07 14:41:35 +01:00
Uwe Kindler
c4872c6b10 Added showcase for custom title bar widget to demo application 2020-02-07 14:29:02 +01:00
Uwe Kindler
efb9b879dd Added functions to insert custom dock area title bar widgets 2020-02-07 13:42:11 +01:00
Uwe Kindler
d10d59a8e2 Porperly moved title bar context menu code from DockAreaTabBar into DockAreaTitleBar 2020-02-07 12:23:26 +01:00
Uwe Kindler
b61f50982a Moved title bar dragging code from DockAreaTabBar into DockAreaTitleBar 2020-02-07 12:16:26 +01:00
Uwe Kindler
ae72f5e47d Changed sizeHints(), sizePolicy() and used updateGeometry() to properly size the tabBar 2020-02-07 11:49:45 +01:00
Uwe Kindler
9d7c692398 Fixed stylesheet typo 2020-02-06 15:37:50 +01:00
mvidelgauz
474dd13855 Disable tabs menu button when only single tab exists in a Dock area (#111) 2020-02-06 15:21:19 +01:00
Uwe Kindler
72496ebd48 Comitted missing app.css file 2020-02-06 12:55:26 +01:00
Uwe Kindler
b727274cd9 Implemented support for custom DockWidget actions for display in DockArea title bar 2020-02-06 09:15:13 +01:00
Uwe Kindler
094fa37135 Implemented supprt for customdock area title bar buttons 2020-02-06 00:31:57 +01:00
Uwe Kindler
6a8b26f415 Added function internal::setButtonIcon to unify code for setting DockAreaTitleBar and DockWidgetTab icons 2020-02-05 08:57:57 +01:00
Uwe Kindler
acb423872a Helper function internal::setToolTip() to remove as many #ifndef QT_NO_TOOLTIP tests as possible to cleanup the code 2020-02-05 08:33:40 +01:00
Uwe Kindler
505f14a601 Improved code for generation of default configuration flags 2020-02-05 08:16:07 +01:00
Uwe Kindler
05c58a4ca9 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-02-05 08:05:10 +01:00
mvidelgauz
b8ed70fa33 Added DockAreaHideDisabledButtons configuration flag (#110)
* CInvisibleButton generalized to CTitleBarButton to serve more purposes
* Disabled buttons are hidden if CDockManager::DockAreaHideDisabledButtons set to true
2020-02-05 08:04:27 +01:00
Uwe Kindler
b510686fe2 Added icon to ads_qt_marketplace_manifest.json 2020-02-04 11:29:18 +01:00
Uwe Kindler
50652b05b0 Fixed svg icon 2020-02-04 10:07:20 +01:00
Uwe Kindler
66795f2b12 Changes in donate section 2020-02-04 09:36:41 +01:00
Uwe Kindler
bc5e0ba7d8 Fixed some README.md markdown issues and added donate button 2020-02-04 09:32:15 +01:00
Uwe Kindler
d722482913 Added library icon 2020-02-04 08:49:34 +01:00
mvidelgauz
1d68e27558 Added DockAreaHasTabsMenuButton and DockAreaHasUndockButton to CDockManager config (#108)
* Added DockAreaHasUndockButton and DockAreaHasTabsMenuButton configuration flag
2020-02-02 16:22:05 +01:00
Uwe Kindler
1dbd3f3f06 Blocked tabyfing via moving over DockArea titlebar if the CenterDockWidgetArea is not in the allowed areas for DockAreaWidget 2020-02-02 16:03:58 +01:00
Uwe Kindler
68b0958119 Removed unused code 2020-02-02 16:02:12 +01:00
mvidelgauz
6c3f82547d setAllowedAreas for individual DockAreaWidget (#107)
* setAllowedAreas for individual DockAreaWidget

* alligning tab policy with master
2020-02-02 15:56:31 +01:00
Uwe Kindler
9fe8f291fb Fixed CDockManager::DockAreaHasCloseButton == false issue 2020-02-02 11:16:38 +01:00
githubuser0xFFFF
102e65a548 Update CMakeLists.txt 2020-01-31 21:39:10 +01:00
Uwe Kindler
4f62794946 Added documentation for new AlwaysShowTabs flag 2020-01-31 14:36:05 +01:00
Rodrigo Oliva
dd06d84206 Add option to always show all tabs (#102)
* Add option to always show tabs.

* Disable "Detach" context menu option in tab if there is only one tab in the floating container.
2020-01-31 14:27:01 +01:00
Krzysztof Machura
d4c179c48e Fix tabs not being active when restoring state (#101)
Regression introduced by 29ebc83b35
2020-01-31 14:26:02 +01:00
Uwe Kindler
ff68ad95a6 Updated LICENSE file for better GitHub integration 2020-01-31 13:40:39 +01:00
Uwe Kindler
8f696ea36a Fixed a regression in DockWidgetTab that caused wron positioning of FloatingDockContainer when moving the mouse 2020-01-16 15:24:01 +01:00
Uwe Kindler
ce1e8c8beb Fixed position calculation for tab dragging 2020-01-15 21:15:29 +01:00
Uwe Kindler
98ebdbea50 Added new DockWidget signals to DockWidget.sip 2020-01-15 10:08:13 +01:00
Uwe Kindler
418d0740d2 Switched from local event pos to global event pos in DockWidgetTab to fix jumping tabs when hiding / showing tabs close button 2020-01-15 10:03:50 +01:00
Uwe Kindler
50c3066eaa Removed std::cout debug output 2020-01-15 08:34:49 +01:00
Uwe Kindler
29ebc83b35 Some changes for debugging visibility changed stuff 2020-01-15 07:49:22 +01:00
Uwe Kindler
03bd4a4505 Added visibilityChanged code 2020-01-14 15:58:45 +01:00
Uwe Kindler
407af06a4a Fixed some issues with custom close handling 2020-01-14 12:43:42 +01:00
Uwe Kindler
9af9e43a5d Fixed MSVC build warning 2020-01-12 15:12:47 +01:00
Uwe Kindler
4c928071af Merge branch 'master' into closerequest
# Conflicts:
#	demo/MainWindow.cpp
2020-01-12 15:07:51 +01:00
Uwe Kindler
ea03b988e0 Fixed CMake Windows build 2020-01-11 23:44:46 +01:00
Uwe Kindler
e1044c3e91 Fixed compiler warning for MSVC 2020-01-11 15:21:10 +01:00
Uwe Kindler
8057d25f35 Fixed broken cmake build for Windows because of missing Qt5AxContainer library 2020-01-11 15:16:33 +01:00
Uwe Kindler
592193fc91 Updated MainWindwow to center it properly on start 2020-01-11 13:53:58 +01:00
Uwe Kindler
5cf4aa77d8 Build QAxWidget specific stuff only on Windows 2020-01-11 12:05:44 +01:00
Uwe Kindler
616e50c3f5 Fixed FloatingDockContainer closeEvent to properly support QAxWidgets 2020-01-10 08:54:44 +01:00
Uwe Kindler
1de42a9766 Updated doc images 2020-01-06 15:08:38 +01:00
Uwe Kindler
f07fcddd78 Added animated gif for grouped dragging 2020-01-06 13:06:17 +01:00
Uwe Kindler
225ab943bb Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2020-01-06 12:00:30 +01:00
Uwe Kindler
3fe31ca62d Updated perspectives.gif 2020-01-06 11:59:53 +01:00
githubuser0xFFFF
d1f17e60f7 Update README.md
Added animated perspectives image
2020-01-06 11:52:24 +01:00
Uwe Kindler
8f78e608d1 Added perspectives gif for animated perspectives image 2020-01-06 11:50:59 +01:00
Uwe Kindler
a5e8011222 Implemented custom close handling 2020-01-06 11:42:36 +01:00
Uwe Kindler
0305d8a221 Experimental implementation of close request 2020-01-03 18:13:34 +01:00
Uwe Kindler
25e8d8691f Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2019-12-22 13:17:54 +01:00
Hugo Slepicka
084c5c5995 ENH: Version info using Versioneer (#97)
* ENH: Use versioneer for version information.

* FIX: rc.py is a build artifact and should not be version controlled.

* FIX: Move processResourceFile to its own command.
2019-12-20 00:08:49 +01:00
githubuser0xFFFF
65c080ae8e Merge pull request #92 from hhslepicka/fix_sip_bindings
FIX: Update SIP Bindings
2019-12-19 06:16:11 +01:00
Hugo Slepicka
f9927cef29 FIX: SIP Binding changes to reflect changes from 2.7.0 to master. 2019-12-18 15:17:28 -08:00
Hugo Slepicka
5778dfe929 WIP: Changes between 2.5.2 and 2.7.0. 2019-12-18 14:21:34 -08:00
Uwe Kindler
c33c09eab1 Fixed some typos in MainWindow.cpp 2019-12-17 14:52:17 +01:00
githubuser0xFFFF
2150ebf45e Update README.md
Added animations for opaque and non opaque resizing
2019-12-17 14:44:57 +01:00
Uwe Kindler
6021ee8094 Added GIF animations for opaque and non opaque resizing 2019-12-17 14:41:58 +01:00
Uwe Kindler
eebb2a6297 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2019-12-17 14:11:28 +01:00
Uwe Kindler
0fb1363b1a Moved tab_menu.gif to the right location 2019-12-17 14:11:21 +01:00
githubuser0xFFFF
2ca03cc56d Update README.md 2019-12-17 14:10:55 +01:00
Uwe Kindler
4a2768015c Added tab_menu animated gif 2019-12-17 14:08:03 +01:00
Uwe Kindler
861ce67725 Fixed bug in DockContainerWidgetPrivate::moveIntoCenterOfSection
If a dock widget has been dropped into the center of a dock area via non-opaque docking the dropped widget did not become the active tab - this has been fixed
2019-12-17 13:45:33 +01:00
githubuser0xFFFF
c530a4a4ec Added documentation for dynamic creation of dock widgets 2019-12-16 15:05:44 +01:00
githubuser0xFFFF
2378f46067 Added documentation for tab menu 2019-12-16 14:54:29 +01:00
githubuser0xFFFF
ea707369a0 Added documentation for non-opaque undocking 2019-12-16 14:47:01 +01:00
githubuser0xFFFF
7640e9bdcf Documented opaque resizing 2019-12-16 14:31:02 +01:00
githubuser0xFFFF
4a0266bc76 Update README.md 2019-12-16 14:14:49 +01:00
githubuser0xFFFF
6d1f97649e Update README.md 2019-12-16 14:12:08 +01:00
Uwe Kindler
2af4b1f75c Blocked display of context menu when dragging floating widget 2019-12-16 13:56:20 +01:00
githubuser0xFFFF
c0cde1e31e Update README.md 2019-12-16 12:25:37 +01:00
githubuser0xFFFF
ee809da7a7 Added images for Ubuntu 19.10 and macOS 2019-12-16 12:08:57 +01:00
Uwe Kindler
a253e4a0b5 Added ned screenshots from ubuntu 1910 and macos 2019-12-16 12:05:06 +01:00
Uwe Kindler
779c4b928c Fixed build warning for FloatingDragPreview.cpp 2019-12-16 11:47:55 +01:00
Uwe Kindler
056f04d408 Properly implemented support for canceling non-opaque undocking on Linux 2019-12-16 11:45:18 +01:00
Uwe Kindler
e085a29484 Renamed FloatingOverlay into FloatingDragPreview to match naming of global DockManager flags (like DragPreviewHasWindowFrame..) 2019-12-16 11:18:22 +01:00
Uwe Kindler
ffd35cbce3 Added support for canceling non opaque docking with escape key, fixed state of non opaque docking when switching applications (if application becomes inactive) 2019-12-16 11:10:59 +01:00
Uwe Kindler
8c1f065f3f CHanged DockAreaTabBar to handle the dragging state via DragState member variable instead of testing for FloatingWidget nullptr 2019-12-16 08:41:15 +01:00
Uwe Kindler
5af6b4e324 Improved source documentation and images 2019-12-16 08:06:38 +01:00
Uwe Kindler
b47a777f5c Fixed issue #88 - floating widgets going to the background on OSX when moving them 2019-12-13 20:56:50 +01:00
Uwe Kindler
5b3a0a28df Fixed vertical alignment of label in FloatingWidgetTitleBar
Added call to FloatingWidget->finishDragging()
2019-12-13 13:19:24 +01:00
Uwe Kindler
02143eac71 Added finishDragging() function to IFloatingWidget to prevent installing event filters 2019-12-13 11:52:50 +01:00
Uwe Kindler
5e230d8874 Closing a dock area with only one single dock widget that has the DockWidgetDeleteOnCloseFeature will delete the dock widget and the area now 2019-12-11 16:06:07 +01:00
Uwe Kindler
a45a035bb3 Fixed problem with CDockAreaTabBar::onCloseOtherTabsRequested() if DockWidgets support the DockwidgetDeleteOnClose flag, enhanced demo to enabled creation of dynamic tables 2019-12-11 15:50:13 +01:00
Uwe Kindler
05f8ce15a2 Added support for dock widget feature DockWidgetDeleteOnClose, added toolbar action for creation of dynamic editors to demo appication, added new material design icons to improve demo gui 2019-12-10 14:44:44 +01:00
Uwe Kindler
45af8867b2 Fixed debug output, moved all calls to FloatingWidget->deleteLater() to a centra place in CDockContainerWidget::dropFloatingWidget 2019-12-10 12:47:55 +01:00
githubuser0xFFFF
8e522ce311 Update README.md 2019-12-02 12:07:43 +01:00
githubuser0xFFFF
178603e3ba Update linux-builds.yml 2019-12-02 08:19:11 +01:00
githubuser0xFFFF
552cee514d Update README.md 2019-12-02 08:14:32 +01:00
githubuser0xFFFF
4105f70089 Update linux-builds.yml 2019-12-02 08:11:49 +01:00
githubuser0xFFFF
0bd34a5a6e Update linux-builds.yml 2019-12-02 08:10:58 +01:00
githubuser0xFFFF
a5dd566b37 Update linux-builds.yml 2019-12-02 08:10:42 +01:00
githubuser0xFFFF
1724f7f5ec Update linux-builds.yml 2019-12-02 08:10:23 +01:00
Uwe Kindler
6cd09addae Fixed linux build workflow 2019-12-02 08:04:25 +01:00
Uwe Kindler
93382350db Updated acitons file for linux builds 2019-12-02 07:45:03 +01:00
githubuser0xFFFF
db90e5415f Update README.md 2019-11-29 23:39:04 +01:00
githubuser0xFFFF
9679fd67cc Update actions_test.yml 2019-11-29 23:34:11 +01:00
githubuser0xFFFF
c84c98f49a Update README.md 2019-11-29 23:24:45 +01:00
githubuser0xFFFF
716acd5f68 Update README.md 2019-11-29 23:17:17 +01:00
githubuser0xFFFF
e782b4813b Update actions_test.yml 2019-11-29 23:12:12 +01:00
githubuser0xFFFF
b27a24b3c4 Update actions_test.yml 2019-11-29 23:10:39 +01:00
githubuser0xFFFF
18c65cdf34 Update actions_test.yml 2019-11-29 23:04:35 +01:00
githubuser0xFFFF
e049cb0353 Update actions_test.yml 2019-11-29 23:02:02 +01:00
githubuser0xFFFF
8d42e7777d Update actions_test.yml 2019-11-29 22:59:24 +01:00
githubuser0xFFFF
e682ab8ea5 Update actions_test.yml 2019-11-29 22:52:47 +01:00
githubuser0xFFFF
c6ff7f5230 Update actions_test.yml 2019-11-29 22:44:07 +01:00
githubuser0xFFFF
309fe1a14a Update actions_test.yml 2019-11-29 22:39:07 +01:00
githubuser0xFFFF
6b45274686 Create actions_test.yml 2019-11-29 22:29:49 +01:00
Uwe Kindler
0f72fabe67 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2019-11-29 15:57:39 +01:00
Uwe Kindler
d3ad17d2c6 Added support for file version handling for dock state files, added support for reading version 0 state file with wrong orientation character 2019-11-29 15:56:57 +01:00
githubuser0xFFFF
a8e0f1904f Update README.md 2019-11-28 16:11:21 +01:00
Uwe Kindler
2ee7deb6d5 Fixed handling on spontaneous hide events in CFloatingDockContainer for Linux 2019-11-28 14:28:34 +01:00
Uwe Kindler
2e88d8651e Added missing source files to CMakeLists.txt 2019-11-28 14:12:50 +01:00
Uwe Kindler
232b6b9a61 Fixed demo configuration 2019-11-28 13:49:58 +01:00
Uwe Kindler
5978aaaedc Set attribute Qt::WA_X11NetWmWindowTypeDock permanently for floating widgets 2019-11-28 13:45:15 +01:00
Uwe Kindler
3332f6050e Changed initial position of floating widgets 2019-11-28 13:35:58 +01:00
Uwe Kindler
a1de28c969 Fixed demo application to properly use default settings 2019-11-28 13:22:59 +01:00
Uwe Kindler
8af53b4199 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2019-11-28 13:05:42 +01:00
Uwe Kindler
bddf4c417d Added Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint for dock overlay for linux 2019-11-28 13:05:09 +01:00
githubuser0xFFFF
e345773cfc Update README.md 2019-11-28 10:57:25 +01:00
githubuser0xFFFF
c1816bf507 Update README.md 2019-11-28 10:51:07 +01:00
Uwe Kindler
4f97e07eb6 Removed debug output, properly restored dragged tab position when floating starts 2019-11-28 10:32:39 +01:00
Uwe Kindler
2fe542c3ef Improved transparent docking 2019-11-28 09:09:36 +01:00
Uwe Kindler
07f9c6d016 Fixed setting of splitter sizes for transparent docking 2019-11-27 21:43:36 +01:00
Uwe Kindler
8ea7c265a7 Fixed emission of top level changed signal to properly support transparent docking 2019-11-27 15:50:18 +01:00
Uwe Kindler
3cd12ce1d3 Fixed creation a FloatingDockContainer 2019-11-27 14:44:17 +01:00
Uwe Kindler
1be8f2861d Continued implementation of transparent docking 2019-11-27 12:00:04 +01:00
Uwe Kindler
e15af4101a Added initial support for transparent undocking 2019-11-26 14:40:56 +01:00
Uwe Kindler
4504457da2 Removed debug code 2019-11-25 16:06:44 +01:00
Uwe Kindler
f497944d2c Added setFloating function to CDockWidget to support making a dock widget floating with from code 2019-11-25 15:59:08 +01:00
Uwe Kindler
aee9fb1c95 Added dock manager function addDockWidgetFloating to add initial floating dock widgets 2019-11-25 15:28:15 +01:00
Uwe Kindler
316d9a00b5 Fixed serialization and deserialization of splitter orientation: | means Horizontal and - means vertical - ATTENTION: this breaks backward compatibility with old saved states 2019-11-25 15:24:44 +01:00
Uwe Kindler
b353c210ee Added dockAreaCreated signal that is emitted whenever a new dock area is created - this allows an application to set custom icons and tooltips for the title bar buttons 2019-11-22 21:53:17 +01:00
Uwe Kindler
490e853435 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2019-11-22 21:42:05 +01:00
Uwe Kindler
7393addf64 Fixed setting of CloseButton icon in DockWidgetTab.cpp 2019-11-22 21:38:47 +01:00
Uwe Kindler
a2b9650469 Merge branch 'master' into IconProvider 2019-11-22 21:36:15 +01:00
Uwe Kindler
ca39ab0b44 Fixed comment in DockWidget.h 2019-11-22 21:35:49 +01:00
githubuser0xFFFF
ae997d3d75 Merge pull request #80 from simulton/master
Hide tab before emitting event
2019-11-18 20:16:42 +01:00
githubuser0xFFFF
c48cf3875d Merge pull request #82 from ddemidov/master
Fix import in QtAds.__init__.py
2019-11-18 20:15:32 +01:00
Denis Demidov
46fb18fc58 Fix import in QtAds.__init__.py 2019-11-18 12:54:28 +03:00
Joel Bodenmann
8da6904dcd Merge pull request #4 from XenotriX/feature/hide_tab_after_event
Hide tab after viewToggled event
2019-11-14 14:54:56 +01:00
Tibo Clausen
2a51359159 Hide tab before emitting event 2019-11-14 14:07:19 +00:00
githubuser0xFFFF
ec48140309 Merge pull request #75 from simulton/master
Fix cmake when compiling to a static lib
2019-10-24 14:15:23 +02:00
Joel Bodenmann
fe64f407c0 Merge pull request #3 from XenotriX/bugfix/cmake_static_lib
Partially reverse previous change
2019-10-22 13:57:56 +02:00
Tibo Clausen
136d6d966c Partially reverse previous change 2019-10-22 13:47:07 +01:00
Uwe Kindler
05ff005613 Added new IconProvider source files to CMakeLists.txt 2019-10-18 14:22:06 +02:00
Uwe Kindler
3ff154aff1 Added global static icon provider to enable registration of custom icons 2019-10-18 08:31:26 +02:00
Uwe Kindler
de645b3cca Fixed DLL export of DockAreaTabBar, DockAreaTitleBar and ElidingLabel 2019-10-18 07:41:28 +02:00
githubuser0xFFFF
f6174faebb Merge pull request #71 from metgem/master
Add PyQt5 bindings
2019-10-18 07:31:04 +02:00
Joel Bodenmann
0d3ec46095 Merge pull request #2 from XenotriX/bugfix/cmake_static_lib
Fix cmake when compiling to a static lib
2019-10-17 16:31:53 +02:00
githubuser0xFFFF
53fed8b765 Merge pull request #72 from yozka/change_include_files
Change include files
2019-10-09 22:05:08 +02:00
Nicolas ELIE
5752bfb58b Add PyQt5 bindings 2019-10-09 14:15:53 +02:00
Tibo Clausen
5378d90ba7 Fix cmake when compiling to a static lib 2019-10-09 11:39:32 +01:00
Yozka
ae96bbc0a0 include file path change 2019-10-06 23:47:36 +02:00
githubuser0xFFFF
c10ff7c688 Merge pull request #69 from nairaner/feature/cmake-find
Add support for CMake Find config module
2019-10-01 11:58:37 +02:00
githubuser0xFFFF
d2fb1579a5 Merge pull request #68 from nairaner/bugfix/floating-window-add-dock
Update floating widget titlebar visibility after adding new tab
2019-10-01 11:54:38 +02:00
Uwe Kindler
156cc71040 Fix emission of viewToggled() signal for dock widgets that are not part of the state that is restored 2019-10-01 11:48:53 +02:00
Krzysztof Machura
909c189d7f Add support for CMake Find config module 2019-10-01 10:25:24 +02:00
Krzysztof Machura
50c529b77f Update floating widget titlebar visibility after adding new tab 2019-09-30 17:33:40 +02:00
Andreev Alexander
84b501205a Merge pull request #4 from githubuser0xFFFF/master
fork update
2019-09-14 20:18:35 +02:00
Uwe Kindler
664a1674ab Fixed a bug in the new internal setFlag function 2019-09-13 14:26:18 +02:00
Uwe Kindler
0c5ef5e158 Added support for new configuration flag RetainTabSizeWhenCloseButtonHidden 2019-09-13 14:19:43 +02:00
Uwe Kindler
b776fc24a6 Fixed sizeHints and sizePolicies to properly support different font sizes i.e. set via QApplication::setFont 2019-09-13 10:25:33 +02:00
Uwe Kindler
c5e7104413 Set autoRaise property to true for QToolButton of DockWidgetTab 2019-09-13 08:27:02 +02:00
Uwe Kindler
2c7764ecf7 Properly implemented flag DockAreaHasCloseButton 2019-09-12 21:24:48 +02:00
Uwe Kindler
bed99eacc2 DockManager configFlags functions are now static because the configuration flags are global, added support for QToolButton as tab close button 2019-09-12 21:15:35 +02:00
Uwe Kindler
dae677e479 Added support for QToolButton tab close buttons 2019-09-10 09:23:12 +02:00
Uwe Kindler
a05078c947 Added information about resetting the styleheet of the dock manager 2019-09-09 16:01:51 +02:00
githubuser0xFFFF
3fcf05fb29 Merge pull request #57 from simulton/master
Fix PR #44
2019-09-09 15:16:19 +02:00
Joel Bodenmann
cdca8c2ac0 Merge pull request #1 from XenotriX1337/deprecated_function
Replace deprecated function
2019-09-09 14:31:19 +02:00
Tibo Clausen
53ec8b896a Replace deprecated function call 2019-09-09 14:05:37 +01:00
githubuser0xFFFF
6e6c1512a6 Merge pull request #55 from duerr-ndt/use_qt_style_icon_size
Use small icon size from QStyle for dock widget tab icon.
2019-09-09 08:25:45 +02:00
githubuser0xFFFF
8e0ea57319 Update README.md 2019-08-30 21:15:39 +02:00
Uwe Kindler
9bd55cc15a Fixed broken CMake build 2019-08-29 08:16:19 +02:00
Uwe Kindler
c8d4487a95 Improved source code documentation, removed empty main.qrc to silence qmake warning 2019-08-26 07:58:56 +02:00
Nick D'Ademo
12b0182337 Use small icon size from QStyle for dock widget tab icon. 2019-08-22 21:04:02 +08:00
Uwe Kindler
a2b07fd97f Reverted change of last pull request because it broke ElidingLabel on Windows 2019-08-13 20:13:19 +02:00
githubuser0xFFFF
078905181e Merge pull request #44 from simulton/master
Replace deprecated function call to QFontMetrics::width()
2019-08-13 19:44:09 +02:00
githubuser0xFFFF
7c9ed9b624 Merge pull request #47 from LoganBarnes/master
fix: Add quotes to CMake BUILD_INTERFACE generator
2019-08-12 22:02:14 +02:00
Logan Barnes
ac164c3a97 fix: Add quotes to cmake BUILD_INTERFACE generator 2019-08-11 00:46:30 +01:00
Joel Bodenmann
2b7232c9b3 Replace deprecated function call
QFontMetrics::width() has been deprecated. Using QFontMetrics::horizontalAdvance() is the proper way to go (introduce in Qt 5.11).
2019-08-06 22:43:30 +02:00
githubuser0xFFFF
6cc7d79832 Merge pull request #42 from simulton/master
Add .idea folders to .gitignore
2019-07-26 09:24:27 +02:00
Joel Bodenmann
0b88843d76 Add .idea folders to .gitignore
All JetBrains IDEs create a .idea folder in the project root that is local to the system/user and should not be included in a repository.
2019-07-25 14:24:00 +02:00
githubuser0xFFFF
554f26a614 Merge pull request #41 from kozodeevv/Conditional_prints
Make debug messages conditional.
2019-07-22 22:44:41 +02:00
Jak Erdy - SBI
10fbb6f302 Make debug messages conditional.
You can swich it on/off via defining ADS_DEBUG_PRINT
By default massages wouldn't be printed.
2019-07-21 14:53:24 +07:00
githubuser0xFFFF
bf27207dd9 Merge pull request #40 from kozodeevv/Fix_CDockWidget_Action_Leak
Fix of action leak in CDockWidget
2019-07-15 09:58:05 +02:00
JakErdy
97f02d39e6 Fix of action leak in CDockWidget, that apears when deleting DockWidget after tab closing 2019-07-14 01:35:20 +07:00
Uwe Kindler
64231d037d Fixed build for Qt5.5.1 2019-07-12 14:45:35 +02:00
githubuser0xFFFF
6eb869014e Merge pull request #38 from tatatupi/bugfix/linux_cmake
adding linux src files to CMake
2019-07-12 14:41:39 +02:00
Taiguara
a564ca5ce5 adding linux src files to CMake 2019-07-12 09:35:06 -03:00
githubuser0xFFFF
365b989364 Update README.md
Updated Linux documentation because linux_experimental branch has been merged into master
2019-07-12 11:05:12 +02:00
Uwe Kindler
a3baf7dcf6 Changes in eclipse project file 2019-07-12 10:51:21 +02:00
Uwe Kindler
538e690c22 Fixed warning for unused parameter in DockOverlay.cpp 2019-07-12 10:39:59 +02:00
Uwe Kindler
b1309da89a Some changes to fix build for windows 2019-07-12 10:37:14 +02:00
Uwe Kindler
d2f751ef87 Moved linux specific code into linux sub folder 2019-07-11 16:12:15 +02:00
Uwe Kindler
35c1b04c58 Merge branch 'refs/heads/master' into linux_experimental 2019-07-11 15:50:24 +02:00
Uwe Kindler
0de1a9ccae Properly implemented support for DockWidgetFloatable feature - now detaching a DockWidget or a DockAre that is not floatable is not possible (support for DockWidgetMovable feature is not implemented yet) 2019-07-11 15:12:39 +02:00
Uwe Kindler
c45327aafd Removed enum eXmlMode and added XmlAutoFormatting flag anc XmlCompressionEnabled flag to eConfigFlags. Added support for XML compression for the XML generated by the store function. If enabled then XML the generated XML is not human readable anymore but it needs less space when storing into settings file 2019-06-26 14:57:14 +02:00
Uwe Kindler
8853c751d6 Merge branch 'master' into linux_experimental 2019-06-04 13:40:20 +02:00
githubuser0xFFFF
e978a32a09 Merge pull request #32 from simulton/master
Feature: Remove docks
2019-06-04 13:32:15 +02:00
Joel Bodenmann
ca5683f5bf Merge pull request #1 from simulton/feature/remove_docks
Feature/remove docks
2019-05-17 21:40:36 +02:00
Tibo Clausen
c630a59afe Replace CDockWidget::releaseWidget() with CDockWidget::takeWidget() 2019-05-16 13:08:48 +01:00
Tibo Clausen
b9b8ff9c76 Add CDockWidget::releaseWidget() 2019-05-16 11:53:31 +01:00
Tibo Clausen
e2c5204d00 Clear LastAddedAreaCache when restoring 2019-05-15 16:13:55 +01:00
Tibo Clausen
5ee94d7602 Improve CDockManager::addDockWidgetTab() for dynamically added widgets 2019-05-15 14:30:32 +01:00
Tibo Clausen
69894f3f88 Remove area from LastAddedAreaCache 2019-05-15 14:20:08 +01:00
Tibo Clausen
641946bff5 Add CDockManager::removeDockWidget() 2019-05-15 13:47:58 +01:00
githubuser0xFFFF
27dd7a1b75 Update README.md 2019-05-15 10:14:22 +02:00
Uwe Kindler
5425f2b9e1 Added missing FloatingWidgetTitleBar.cpp and missing stylesheet file for linux 2019-05-15 09:12:22 +02:00
githubuser0xFFFF
4320e350c8 Update README.md 2019-05-14 16:03:47 +02:00
Uwe Kindler
8351aa11e7 Added linux screenshot 2019-05-14 15:42:47 +02:00
Uwe Kindler
e98fd5bcb3 Improved icons for all button, adjusted size of dock marker 2019-05-14 15:32:50 +02:00
Uwe Kindler
a012af2aac Created experimental linux branch with initial experimental linux
support
2019-05-14 14:09:10 +02:00
githubuser0xFFFF
df285dd385 Merge pull request #26 from gameraccoon/master
Fix compilation on linux using cmake
2019-05-13 09:02:43 +02:00
Uwe Kindler
a6ed4354a9 Implemented workaround for blurry icons in latest Qt versions 2019-05-10 11:33:26 +02:00
Uwe Kindler
1fccb943fe Fixed setWidget function of DockWidget to properly setup the internal scroll area 2019-05-10 10:32:06 +02:00
Pavel Grebnev
7bd3765fa7 Fix compilation on linux 2019-05-04 19:08:47 +03:00
Uwe Kindler
9b56ca08e1 Changes to work around new QT issues in non client area code that comes with the new Qt version 5.12.2 2019-03-22 13:57:17 +01:00
Uwe Kindler
49a7682e74 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2019-03-06 14:37:35 +01:00
Uwe Kindler
e25bf2eac2 Disabled minimize button for floating widgets because user cannot restore minimized windows because they do not have a taskbar entry 2019-03-06 14:36:20 +01:00
Andreev Alexander
f7c8384b73 Merge pull request #3 from githubuser0xFFFF/master
merge
2019-02-01 20:47:51 +05:00
githubuser0xFFFF
9bd06401d9 Update README.md
Fixed Travis CI and Appveyor badges to use the right account
2019-01-28 13:37:01 +01:00
Uwe Kindler
b44a7e75ca Implemented workarund for NonClientArea mouse event bug in Qt versions > 5.9.2. 2019-01-26 14:44:14 +01:00
githubuser0xFFFF
c9645ef85b Update README.md
Added travis badge
2019-01-26 13:54:35 +01:00
githubuser0xFFFF
fd09a681c4 Merge pull request #19 from VSRonin/master
Various fixes to the project files to uniform names and correctly compile static libraries.

Added configuration files for Appveyor and Travis CI, adding the project to those services should work out of the box.
2019-01-26 13:45:21 +01:00
Luca Beldi
e113790bbe Various fixes after code review
Minimum required Qt lowered to 5.5.0
Added CI for Qt 5.5.1 build
Increased C++ standard to C++14
Fixed use of spaces instead of tabs
Removed duplicate constructors
2019-01-25 16:28:36 +00:00
Andreev Alexander
957dce5d1f Merge pull request #2 from githubuser0xFFFF/master
merge
2019-01-25 14:05:55 +05:00
githubuser0xFFFF
e352ce559b Merge pull request #20 from yozka/feature_2
set tooltip for titlebar and menu
2019-01-25 09:21:46 +01:00
Yozka
0c3ef64d3e Fixed? remove space in tabs 2019-01-25 09:05:30 +05:00
Yozka
f72e2ce058 Added demo example tooltip for calendar dockWidget #20 2019-01-25 08:56:30 +05:00
yozka
befdcce343 set tooltip for titlebar and menu #20 2019-01-23 22:04:37 +05:00
Yozka
6fc8964ffc set tooltip for titlebar and menu #20 2019-01-23 22:01:30 +05:00
Yozka
6cb1f33451 ToolTip from titlebar and menu 2019-01-23 11:43:07 +05:00
Luca Beldi
ee616c2541 fixed travis script 2019-01-18 08:33:11 +00:00
Luca Beldi
7dd2a3c83c added travis configuration 2019-01-17 09:00:41 +00:00
Luca Beldi
9db502e652 Fixed appveyor project 2019-01-17 08:31:04 +00:00
Andreev Alexander
1ad6caeb8a Merge pull request #1 from githubuser0xFFFF/master
merge base
2019-01-17 10:54:30 +05:00
githubuser0xFFFF
4dde545c8f Merge pull request #18 from yozka/feature
set title bar and title toggle view action
2019-01-16 21:54:43 +01:00
Luca Beldi
b7a5918974 Fixed project files
Fixed compilation on compilers that do not support C++14
Only 2 minor places required C++14, no need to impose it
2019-01-16 17:52:53 +00:00
Luca Beldi
ddfa6c2a43 added appveyor project 2019-01-16 16:52:45 +00:00
Luca Beldi
275520ae29 Fixes to project files
Fixed naming of projects using CMake
Added working static compile using qmake
Added conventional naming of debug libraries
Added install target to qmake
2019-01-16 16:49:59 +00:00
Andreev Alexander
1078387f5d Merge branch 'master' into feature 2019-01-16 18:28:09 +05:00
Yozka
c33dddbd47 set title bar and title toggle view action 2019-01-16 16:23:07 +05:00
githubuser0xFFFF
2570a880af Merge pull request #17 from VSRonin/master
Added CMake project file
2019-01-16 12:22:43 +01:00
Luca Beldi
40a8d9e6b4 Added CMake project file
CMake has been announced as the build system of choice for Qt in the
future so it's useful to provide a project file for it

Also added the possibility to compile as a static library
2019-01-16 09:44:34 +00:00
364 changed files with 31554 additions and 2561 deletions

146
.clang-format Normal file
View File

@@ -0,0 +1,146 @@
---
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: None
AlignConsecutiveAssignments: None
AlignConsecutiveDeclarations: None
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: Inline
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
BeforeLambdaBody: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: BeforeColon
BreakInheritanceList: AfterColon
BreakStringLiterals: true
ColumnLimit: 82
CommentPragmas: '^(!.*|@c)'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
FixNamespaceComments: true
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '^<windows(\.h)?>' # windows headers
Priority: -1
- Regex: '^<labbcan[[:alnum:]._/]+' # labbcan headers
Priority: 1
- Regex: '^<diag[[:alnum:]._/]+' # usl headers
Priority: 1
- Regex: '^<usl[[:alnum:]._/]+' # usl headers
Priority: 1
- Regex: '^<qt5compat[[:alnum:]._/]+' # qtlabb headers
Priority: 2
- Regex: '^<qtcoreaddons[[:alnum:]._/]+' # qtlabb headers
Priority: 2
- Regex: '^<qtlabb[[:alnum:]._/]+' # qtlabb headers
Priority: 2
- Regex: '<Q[[:alnum:].]+>' # Qt headers
Priority: 3
- Regex: '^<sila_cpp[[:alnum:]._/]+' # sila_cpp headers
Priority: 4
- Regex: '<[[:alnum:]._/]+\.h>' # other headers
Priority: 5
- Regex: '<[[:alnum:]._/]+>' # system headers
Priority: 6
- Regex: '.*'
Priority: 7
IncludeIsMainRegex: '(_p)?$'
IndentCaseBlocks: false
IndentCaseLabels: false
IndentPPDirectives: AfterHash
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
PenaltyBreakAssignment: 20
PenaltyBreakBeforeFirstCallParameter: 15
PenaltyBreakComment: 10
PenaltyBreakFirstLessLess: 5
# PenaltyBreakOpenParenthesis: 30
PenaltyBreakString: 150
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 100
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 150
PointerAlignment: Left
ReflowComments: true
SortIncludes: CaseSensitive
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: Never
SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: c++17
StatementMacros: [ 'Q_UNUSED', 'PIMPL_D', 'PIMPL_Q', 'OD_ENTRY', 'OD_ENTRY_PROCIMG' ]
TabWidth: 4
UseTab: Never

359
.cproject
View File

@@ -1,359 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795" moduleId="org.eclipse.cdt.core.settings" name="Default">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795.1949777584" name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.88699815" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.base">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.PE" id="cdt.managedbuild.target.gnu.platform.mingw.base.519267520" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
<builder id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795.1200539104" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.1438677059" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
<option id="gnu.both.asm.option.include.paths.403127333" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/demo}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtCore&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtWidgets&quot;"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1249325593" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.933824900" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.1947822681" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
<option id="gnu.cpp.compiler.option.include.paths.349616932" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/demo}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtCore&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtWidgets&quot;"/>
</option>
<option id="gnu.cpp.compiler.option.preprocessor.def.56223209" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1318830536" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.389117097" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
<option id="gnu.c.compiler.option.include.paths.1871729602" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/demo}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtCore&quot;"/>
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtWidgets&quot;"/>
</option>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.806805509" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1568363924" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1734874312" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.985493173" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.266071128" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="QtAdvancedDockingSystem.null.1346550114" name="QtAdvancedDockingSystem"/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="refreshScope"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795;cdt.managedbuild.toolchain.gnu.mingw.base.1119687795.1949777584;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.1947822681;cdt.managedbuild.tool.gnu.cpp.compiler.input.1318830536">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795;cdt.managedbuild.toolchain.gnu.mingw.base.1119687795.1949777584;cdt.managedbuild.tool.gnu.c.compiler.mingw.base.389117097;cdt.managedbuild.tool.gnu.c.compiler.input.1568363924">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
<buildTargets>
<target name="Build all" path=" build" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../ads.pro</buildArguments>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Build all" path=" build/src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build/src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build/src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build/src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../../src/src.pro</buildArguments>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build/src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Build all" path=" build/example" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build/example" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build/example" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build/example" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../../example/example.pro</buildArguments>
<buildTarget/>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build/example" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Build all" path=" build/demo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build/demo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build/demo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build/demo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../../demo/demo.pro</buildArguments>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build/demo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Build all" path=" build/AdvancedDockingSystemDemo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build/AdvancedDockingSystemDemo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build/AdvancedDockingSystemDemo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build/AdvancedDockingSystemDemo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../../AdvancedDockingSystemDemo/AdvancedDockingSystemDemo.pro</buildArguments>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build/AdvancedDockingSystemDemo" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Build all" path=" build/AdvancedDockingSystemDemo_v2" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build/AdvancedDockingSystemDemo_v2" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build/AdvancedDockingSystemDemo_v2" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build/AdvancedDockingSystemDemo_v2" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../../AdvancedDockingSystemDemo_v2/AdvancedDockingSystemDemo_v2.pro</buildArguments>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build/AdvancedDockingSystemDemo_v2" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Build all" path=" build/AdvancedDockingSystem" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j</buildArguments>
<buildTarget>all</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Clean" path=" build/AdvancedDockingSystem" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>clean</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Debug Build" path=" build/AdvancedDockingSystem" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j6</buildArguments>
<buildTarget>debug</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="qmake" path=" build/AdvancedDockingSystem" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>qmake</buildCommand>
<buildArguments>-recursive ../../AdvancedDockingSystem/src.pro</buildArguments>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="Release Build" path=" build/AdvancedDockingSystem" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>mingw32-make</buildCommand>
<buildArguments>-j4</buildArguments>
<buildTarget>release</buildTarget>
<stopOnError>false</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
</buildTargets>
</storageModule>
</cproject>

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
PyQtAds/_version.py export-subst

84
.github/workflows/linux-builds.yml vendored Normal file
View File

@@ -0,0 +1,84 @@
name: linux-builds
on:
push:
workflow_dispatch:
jobs:
build_ubuntu_2204_cmake:
runs-on: ubuntu-22.04
env:
QT_VERSION: 6.4.2
QT_DIR: ${{ github.workspace }}/Qt
steps:
- name: Checkout source
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch full history and tags
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake ninja-build libgl1-mesa-dev libxkbcommon-x11-0 libx11-dev
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{ env.QT_VERSION }}
target: desktop
host: linux
arch: gcc_64
dir: ${{ env.QT_DIR }}
setup-python: false
- name: Configure with CMake
run: |
cmake -S . -B build \
-DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}/Qt/${{ env.QT_VERSION }}/gcc_64" \
-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/install \
-DCMAKE_BUILD_TYPE=Release \
-G Ninja
- name: Build
run: cmake --build build
- name: Run CMake install (optional)
run: cmake --install build
build_ubuntu_2204:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Cache Qt
id: cache-qt-6-4
uses: actions/cache@v3
with:
path: ../Qt/6.4.2
key: ${{ runner.os }}-QtCache-Qt6-4
- name: Install Qt
uses: jurplel/install-qt-action@v2
with:
version: '6.4.2'
host: 'linux'
target: 'desktop'
install-deps: true
cached: ${{ steps.cache-qt-6-4.outputs.cache-hit }}
setup-python: true
tools: ''
tools-only: false
- name: Install needed xkbcommon symlink
run: sudo apt-get install libxkbcommon-dev -y
- name: Ubuntu and Qt version
run: |
cat /etc/issue
echo number of processors: $(nproc)
qmake -v
- name: qmake
run: qmake
- name: make
run: make -j$(nproc)

102
.github/workflows/windows-cmake.yml vendored Normal file
View File

@@ -0,0 +1,102 @@
name: windows-builds
on:
push:
workflow_dispatch:
jobs:
build_windows_msvc:
name: Build with MSVC and Ninja
runs-on: windows-2022
env:
QT_VERSION: 6.4.2
QT_DIR: ${{ github.workspace }}\Qt
steps:
- name: 📦 Checkout source code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: ⚙️ Install Ninja build system
run: choco install ninja --no-progress
- name: 📥 Install Qt for MSVC
uses: jurplel/install-qt-action@v3
with:
version: ${{ env.QT_VERSION }}
target: desktop
host: windows
arch: win64_msvc2019_64
dir: ${{ env.QT_DIR }}
setup-python: false
- name: 🏗️ Setup MSVC Developer Environment
uses: TheMrMilchmann/setup-msvc-dev@v3
with:
arch: x64
- name: 🛠️ Configure CMake with Ninja + MSVC
run: |
cmake -S . -B build -G Ninja `
-DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}\Qt\${{ env.QT_VERSION }}\msvc2019_64" `
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}\install" `
-DCMAKE_BUILD_TYPE=Release
shell: powershell
- name: 🔨 Build with Ninja + MSVC
run: cmake --build build
shell: powershell
- name: 📦 Install built files
run: cmake --install build
shell: powershell
build_windows_mingw:
name: Build with Qt's MinGW and CMake (no Ninja)
runs-on: windows-2022
env:
QT_VERSION: 6.8.3
QT_DIR: ${{ github.workspace }}\Qt
steps:
- name: 📦 Checkout source code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 📥 Install Qt + MinGW
uses: jurplel/install-qt-action@v4
with:
aqtversion: '==3.1.19'
version: ${{ env.QT_VERSION }}
target: desktop
host: windows
arch: win64_mingw
dir: ${{ env.QT_DIR }}
tools: 'tools_mingw1310'
setup-python: false
- name: Add Qt-bundled MinGW to PATH
shell: powershell
run: |
echo "${{ env.QT_DIR }}\Tools\mingw1310_64\bin" >> $env:GITHUB_PATH
- name: 🛠️ Configure CMake (MinGW)
shell: powershell
run: |
cmake -S . -B build-mingw `
-DCMAKE_PREFIX_PATH="${{ env.QT_DIR }}\Qt\${{ env.QT_VERSION }}\mingw_64" `
-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}\install `
-DCMAKE_BUILD_TYPE=Release `
-G "MinGW Makefiles"
- name: 🔨 Build with CMake (MinGW)
shell: powershell
run: cmake --build build-mingw -- -j2
- name: 📦 Install built files (MinGW)
shell: powershell
run: cmake --install build-mingw

383
.gitignore vendored
View File

@@ -1,5 +1,5 @@
*.pro.user *.pro.user*
/ build /build
*.o *.o
*.dylib *.dylib
*.app *.app
@@ -7,4 +7,383 @@ qrc_*
moc_* moc_*
ui_* ui_*
Makefile Makefile
*.dll
*.a
build*
# IDEs
.idea
# Python
.eggs
*.pyc
*.pyd
__pycache__
PyQtAds/rc.py
/.cproject
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*[.json, .xml, .info]
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
/ build
/Settings.ini
.vscode/settings.json
/.settings

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795" name="Default">
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider-reference id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="(g?cc)|([gc]\+\+)|(clang)" prefer-non-shared="true"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
</extension>
</configuration>
</project>

49
CMakeLists.txt Normal file
View File

@@ -0,0 +1,49 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if (POLICY CMP0091)
cmake_policy(SET CMP0091 NEW)
endif (POLICY CMP0091)
# By default, the version information is extracted from the git index. However,
# we can override this behavior by explicitly setting ADS_VERSION and
# skipping the git checks. This is useful for cases where this project is being
# used independently of its original git repo (e.g. vendored in another project)
if(NOT ADS_VERSION)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
include(GetGitRevisionDescription)
git_describe(GitTagVersion --tags)
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GitTagVersion}")
string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GitTagVersion}")
string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GitTagVersion}")
set(VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set(VERSION_SONAME "${VERSION_MAJOR}")
else()
string(REGEX MATCHALL "[\.]" VERSION_DOT_MATCHES ${ADS_VERSION})
list(LENGTH VERSION_DOT_MATCHES VERSION_DOT_COUNT)
if(VERSION_DOT_COUNT EQUAL 2)
set(VERSION_SHORT ${ADS_VERSION})
string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_SONAME "${ADS_VERSION}")
else()
message(FATAL_ERROR "ADS_VERSION must be in major.minor.patch format, e.g. 3.8.1. Got ${ADS_VERSION}")
endif()
endif()
project(QtADS LANGUAGES CXX VERSION ${VERSION_SHORT})
option(BUILD_STATIC "Build the static library" OFF)
option(BUILD_EXAMPLES "Build the examples" ON)
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(ads_PlatformDir "x86")
else()
set(ads_PlatformDir "x64")
endif()
add_subdirectory(src)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
add_subdirectory(demo)
endif()

504
LICENSE Normal file
View File

@@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random
Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@@ -1,15 +0,0 @@
Qt Advanced Docking System
Copyright (C) 2017 Uwe Kindler
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; If not, see <http://www.gnu.org/licenses/>.

2
MANIFEST.in Normal file
View File

@@ -0,0 +1,2 @@
include versioneer.py
include PyQtAds/_version.py

925
README.md
View File

@@ -1,142 +1,783 @@
# Advanced Docking System for Qt ![ukraine](doc/ukraine.jpg)
Qt Advanced Docking System lets you create customizable layouts using a full ![logo](doc/ads_logo.svg)
featured window docking system similar to what is found in many popular
integrated development environements (IDEs) such as Visual Studio. ------------------
Everything is implemented with standard Qt functionality without any
platform specific code. Basic usage of QWidgets an QLayouts and using basic [![GitHub release (latest by date)](https://img.shields.io/github/v/release/githubuser0xFFFF/Qt-Advanced-Docking-System)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
styles as much as possible. [![License: LGPL v2.1](https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg)](gnu-lgpl-v2.1.md)
[![Build status](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/workflows/linux-builds/badge.svg)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions?query=workflow%3Alinux-builds)
This work is based on and inspired by the [![windows-builds](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions/workflows/windows-cmake.yml/badge.svg?branch=master)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions/workflows/windows-cmake.yml)
[Advanced Docking System for Qt](https://github.com/mfreiholz/Qt-Advanced-Docking-System) [![GitHub contributors](https://img.shields.io/github/contributors/githubuser0xFFFF/Qt-Advanced-Docking-System?color=ffdf00)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/graphs/contributors)
from Manuel Freiholz. I did an almost complete rewrite of his code to improve
code quality, readibility and to fix all issues from the issue tracker Qt Advanced Docking System lets you create customizable layouts using a full
of his docking system project. featured window docking system similar to what is found in many popular
integrated development environments (IDEs) such as Visual Studio.
The following video gives a first impression what is possible with the Advanced Docking System for Qt.
- [What's new...](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
[![Video Advanced Docking](doc/advanced-docking_video.png)](https://www.youtube.com/watch?v=7pdNfafg3Qc) - [Documentation](https://githubuser0xffff.github.io/Qt-Advanced-Docking-System/doc/user-guide.html)
- Original Repository: [https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System)
## Features
### Docking everywhere - no central widget [![Video Advanced Docking](doc/advanced-docking_video.png)](https://www.youtube.com/watch?v=7pdNfafg3Qc)
There is no central widget like in the Qt docking system. You can dock on every
border of the main window or you can dock into each dock area - so you are ## New and Noteworthy
free to dock almost everywhere.
### Release 4.5
![Dropping widgets](doc/preview-dragndrop.png)\
\ #### Tabs at Bottom
![Dropping widgets](doc/preview-dragndrop_dark.png)
A new global dock manager flag `TabsAtBottom` has been added to configuration flags. This flag allows to configure if the tabs of dock areas are shown at the top (default) or at the bottom of the respective container.
### Docking inside floating windows
There is no difference between the main window and a floating window. Docking If the flag is set, tabs will be shown at the bottom instead of in the title bar.
into floating windows is supported.
![TabsAtBottom true](doc/cfg_flag_TabsAtBottom_true.png)
![Docking inside floating windows](doc/floating-widget-dragndrop.png)\
\ ### Release 4.1
![Docking inside floating windows](doc/floating-widget-dragndrop_dark.png)
Release [4.1](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest) significantly improves the Auto-Hide functionality and also brings improvements
### Grouped dragging for Drag and Drop of dock widgets into dock area tabs. These are the highlights of the new version:
When dragging the titlebar of a dock, all the tabs that are tabbed with it are
going to be dragged. So you can move complete groups of tabbed widgets into #### Drag & Drop to Auto-Hide
a floating widget or from one dock area to another one.
Now you can easily drag any dock widget or any floating widget to the
![Grouped dragging](doc/grouped-dragging.png)\ borders of a window to pin it as a auto-hide tab in one of the 4 sidebars.
\ If you drag a dock widget close the one of the four window borders, special
![Grouped dragging](doc/grouped-dragging_dark.png) drop overlays will be shown to indicate the drop area for auto-hide widgets:
### Perspectives for fast switching of the complete main window layout ![Auo-Hide drag to Sidebar](doc/AutoHide_Drag_to_Sidebar.gif)
A perspective defines the set and layout of dock windows in the main
window. You can save the current layout of the dockmanager into a named Of course, this also works with dock areas:
perspective to make your own custom perspective. Later you can simply
select a perspective from the perspective list to quickly switch the complete ![Auo-Hide drag Dock Area](doc/AutoHide_Drag_DockArea.gif)
main window layout.
If you drag a dock widget or dock area into a sidebar, then you even have
![Perspective](doc/perspectives.png)\ control over where tabs are inserted. Simply drag your mouse over a specific
\ auto-hide tab, and your dragged dock widget will be inserted before this tab.
![Perspective](doc/perspectives_dark.png) Drag to the sidebar area behind the last tab, and the dragged widget will be
appended as last tab. In the following screen capture, the **Image Viewer 1** will
## Tested Compatible Environments be inserted before the **Table 0** Auto-Hide tab and the **Image Viewer 2**
- Windows 10 is appende behind the last tab:
## Build ![Auo-Hide tab insert order](doc/AutoHide_Tab_Insert_Order.gif)
Open the `ads.pro` with QtCreator and start the build, that's it.
You can run the demo project and test it yourself. #### Auto-Hide Tab Insertion Order
## Getting started / Example It is also possible to drag Auto-Hide tabs to a new auto-hide position.
The following example shows the minimum code required to use the advanced Qt docking system. That means, you can drag them to a different border or sidebar:
*MainWindow.h* ![Auto-Hide change sidebar](doc/AutoHide_Change_Sidebar.gif)
```cpp #### Auto-Hide Tab Sorting
#include <QMainWindow>
#include "DockManager.h" You can drag Auto-Hide tabs to a new position in the current sidebar
to sort them:
namespace Ui {
class MainWindow; ![Auo-Hide sort tabs](doc/AutoHide_Sort_Tabs.gif)
}
#### Auto-Hide Drag to Float / Dock
class MainWindow : public QMainWindow
{ But that is not all. You can also simply move Auto-Hide tabs to another
Q_OBJECT floating widget or dock them via drag and drop:
public: ![Auo-Hide drag to float or dock](doc/AutoHide_Drag_to_Float_or_Dock.gif)
explicit MainWindow(QWidget *parent = 0);
~MainWindow(); #### Auto-Hide Context Menu
private: All Auto-Hide tabs now have a context menu, that provides all the functionality
Ui::MainWindow *ui; that you know from Dock widget tabs. With the **Pin To...** item from the
context menu it is very easy to move an Auto-Hide tab to a different Auto-Hide
// The main container for docking sidebar:
ads::CDockManager* m_DockManager;
}; ![Auo-Hide context menu](doc/AutoHide_Context_Menu.png)
```
*MainWindow.cpp* #### Dock Area Tab Insert Order
```cpp
#include "MainWindow.h" And last but not least the new version also improves the docking of widgets
#include "ui_MainWindow.h" into the tabs of a Dock area. Just as with Auto-Hide tabs, you can now determine the position at which a tab is inserted by moving the mouse over an already existing tab (insertion before the tab) or behind the last tab
(appending):
#include <QLabel>
![Dock area tab insert order](doc/DockArea_Tab_Insertion_Order.gif)
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), The [release 4.0](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
ui(new Ui::MainWindow) adds the following features:
{
ui->setupUi(this); - Auto-Hide functionality ([read more...](#auto-hide-functionality))
// Create the dock manager. Because the parent parameter is a QMainWindow ![Auto Hide Functionality](doc/AutoHide_Animation.gif)
// the dock manager registers itself as the central widget.
m_DockManager = new ads::CDockManager(this); - improved demo application with new image viewer dock widgets
// Create example content label - this can be any application specific ![Auto Hide Functionality](doc/Feature_ImageViewer.png)
// widget
QLabel* l = new QLabel(); - Visual Studio like CSS theme in demo application
l->setWordWrap(true);
l->setAlignment(Qt::AlignTop | Qt::AlignLeft); The [release 3.8](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/3.8.3)
l->setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. "); adds the following features:
// Create a dock widget with the title Label 1 and set the created label - option to close tabs with the middle mouse button
// as the dock widget content - `DeleteContentOnClose` flag for dynamic deletion and creation of dock widget
ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1"); content
DockWidget->setWidget(l); - improved focus highlighting functionality
// Add the toggleViewAction of the dock widget to the menu to give The [release 3.7](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/tag/3.7.2)
// the user the possibility to show the dock widget if it has been closed adds the following features:
ui->menuView->addAction(DockWidget->toggleViewAction());
- support for **Qt6.**
// Add the dock widget to the top dock widget area - support for [empty dock area](doc/user-guide.md#empty-dock-area)
m_DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget);
} The [release 3.6](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/tag/3.6.3)
adds some nice new features:
MainWindow::~MainWindow()
{ - support for [central widget](doc/user-guide.md#central-widget) concept
delete ui;
} ![Central Widget](doc/central_widget.gif)
```
- support for [native floating widgets](doc/user-guide.md#floatingcontainerforcenativetitlebar-linux-only) on Linux
## Developers
- Uwe Kindler, Project Maintainer ![FloatingContainerForceNativeTitleBar true](doc/cfg_flag_FloatingContainerForceNativeTitleBar_true.png)
- Manuel Freiholz
Both features are contributions from ADS users. Read the [documentation](doc/user-guide.md)
## License information to learn more about both new features.
This project uses the [LGPLv2.1 license](gnu-lgpl-v2.1.md)
The [release 3.5](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/tag/3.5.0)
adds the new [focus highlighting](doc/user-guide.md#focushighlighting) feature.
This optional feature enables highlighting of the focused dock widget like you
know it from Visual Studio.
![FocusHighlighting](doc/cfg_flag_FocusHighlighting.gif)
[learn more...](doc/user-guide.md#focushighlighting)
## Features
### Overview
- [New and Noteworthy](#new-and-noteworthy)
- [Release 4.5](#release-45)
- [Tabs at Bottom](#tabs-at-bottom)
- [Release 4.1](#release-41)
- [Drag \& Drop to Auto-Hide](#drag--drop-to-auto-hide)
- [Auto-Hide Tab Insertion Order](#auto-hide-tab-insertion-order)
- [Auto-Hide Tab Sorting](#auto-hide-tab-sorting)
- [Auto-Hide Drag to Float / Dock](#auto-hide-drag-to-float--dock)
- [Auto-Hide Context Menu](#auto-hide-context-menu)
- [Dock Area Tab Insert Order](#dock-area-tab-insert-order)
- [Features](#features)
- [Overview](#overview)
- [Docking everywhere - no central widget](#docking-everywhere---no-central-widget)
- [Docking inside floating windows](#docking-inside-floating-windows)
- [Grouped dragging](#grouped-dragging)
- [Perspectives for fast switching of the complete main window layout](#perspectives-for-fast-switching-of-the-complete-main-window-layout)
- [Opaque and non-opaque splitter resizing](#opaque-and-non-opaque-splitter-resizing)
- [Cancelable docking process](#cancelable-docking-process)
- [Tab-menu for easy handling of many tabbed dock widgets](#tab-menu-for-easy-handling-of-many-tabbed-dock-widgets)
- [Many different ways to detach dock widgets](#many-different-ways-to-detach-dock-widgets)
- [Supports deletion of dynamically created dock widgets](#supports-deletion-of-dynamically-created-dock-widgets)
- [Auto-Hide Functionality](#auto-hide-functionality)
- [Python Bindings](#python-bindings)
- [PySide6](#pyside6)
- [PyQt6](#pyqt6)
- [PyQt5](#pyqt5)
- [Tested Compatible Environments](#tested-compatible-environments)
- [Supported Qt Versions](#supported-qt-versions)
- [Windows](#windows)
- [macOS](#macos)
- [Linux](#linux)
- [Build](#build)
- [Qt5 on Ubuntu 18.04 or 20.04](#qt5-on-ubuntu-1804-or-2004)
- [Qt5 on Ubuntu 22.04](#qt5-on-ubuntu-2204)
- [Qt6 on Ubuntu 22.04](#qt6-on-ubuntu-2204)
- [Getting started / Example](#getting-started--example)
- [License information](#license-information)
- [Donation](#donation)
- [Showcase](#showcase)
- [Qt Creator IDE](#qt-creator-ide)
- [Qt Design Studio](#qt-design-studio)
- [CETONI Elements](#cetoni-elements)
- [ezEditor](#ezeditor)
- [D-Tect X](#d-tect-x)
- [HiveWE](#hivewe)
- [Ramses Composer](#ramses-composer)
- [Plot Juggler](#plot-juggler)
- [Notepad Next](#notepad-next)
- [MetGem](#metgem)
- [PRE Workbench](#pre-workbench)
- [RDE Robox Development Environment](#rde--robox-development-environment)
- [ResInsight](#resinsight)
- [ADTF 3](#adtf-3)
- [DREAM3D-NX](#dream3d-nx)
- [LabPlot](#labplot)
- [Scrutiny Debugger](#scrutiny-debugger)
- [PiSoWorks](#pisoworks)
- [Alternative Docking System Implementations](#alternative-docking-system-implementations)
- [KDDockWidgets](#kddockwidgets)
- [QtitanDocking](#qtitandocking)
- [DockingPanes](#dockingpanes)
### Docking everywhere - no central widget
There is no central widget like in the Qt docking system. You can dock on every
border of the main window or you can dock into each dock area - so you are
free to dock almost everywhere.
![Dropping widgets](doc/preview-dragndrop.png)
![Dropping widgets](doc/preview-dragndrop_dark.png)
### Docking inside floating windows
There is no difference between the main window and a floating window. Docking
into floating windows is supported.
![Docking inside floating windows](doc/floating-widget-dragndrop.png)
![Docking inside floating windows](doc/floating-widget-dragndrop_dark.png)
### Grouped dragging
When dragging the titlebar of a dock, all the tabs that are tabbed with it are
going to be dragged. So you can move complete groups of tabbed widgets into
a floating widget or from one dock area to another one.
![Grouped dragging](doc/grouped-dragging.gif)
![Grouped dragging](doc/grouped-dragging_dark.png)
### Perspectives for fast switching of the complete main window layout
A perspective defines the set and layout of dock windows in the main
window. You can save the current layout of the dockmanager into a named
perspective to make your own custom perspective. Later you can simply
select a perspective from the perspective list to quickly switch the complete
main window layout.
![Perspective](doc/perspectives.gif)
![Perspective](doc/perspectives_dark.png)
### Opaque and non-opaque splitter resizing
The advanced docking system uses standard QSplitters as resize separators and thus supports opaque and non-opaque resizing functionality of QSplitter. In some rare cases, for very complex widgets or on slow machines resizing via separator on the fly may cause flicking and glaring of rendered content inside a widget. The global dock manager flag `OpaqueSplitterResize` configures the resizing behaviour of the splitters. If this flag is set, then widgets are resized dynamically (opaquely) while interactively moving the splitters.
![Opaque resizing](doc/opaque_resizing.gif)
If this flag is cleared, the widget resizing is deferred until the mouse button is released - this is some kind of lazy resizing separator.
![Non-opaque resizing](doc/non_opaque_resizing.gif)
### Cancelable docking process
In contrast to the standard Qt docking system, docking with the ADS works more like a drag & drop operation. That means, the dragged dock widget or dock area is not undocked immediately. Instead, a drag preview widget is created and dragged around to indicate the future position of the dock widget or dock area. The actual dock operation is only executed when the mouse button is released. That makes it possible, to cancel an active drag operation with the escape key.
The drag preview widget can be configured by a number of global dock manager flags:
- `DragPreviewIsDynamic`: if this flag is enabled, the preview will be adjusted dynamically to the drop area
- `DragPreviewShowsContentPixmap`: the created drag preview window shows a static copy of the content of the dock widget / dock are that is dragged
- `DragPreviewHasWindowFrame`: this flag configures if the drag preview is frameless like a QRubberBand or looks like a real window
### Tab-menu for easy handling of many tabbed dock widgets
Tabs are a good way to quickly switch between dockwidgets in a dockarea. However, if the number of dockwidgets in a dockarea is too large, this may affect the usability of the tab bar. To keep track in this situation, you can use the tab menu. The menu allows you to quickly select the dockwidget you want to activate from a drop down menu.
![Tab menu](doc/tab_menu.gif)
### Many different ways to detach dock widgets
You can detach dock widgets and also dock areas in the following ways:
- by dragging the dock widget tab or the dock area title bar
- by double clicking the tab or title bar
- by using the detach menu entry from the tab and title bar drop down menu
### Supports deletion of dynamically created dock widgets
Normally clicking the close button of a dock widget will just hide the widget and the user can show it again using the toggleView() action of the dock widget. This is meant for user interfaces with a static amount of widgets. But the advanced docking system also supports dynamic dock widgets that will get deleted on close. If you set the dock widget flag `DockWidgetDeleteOnClose` for a certain dock widget, then it will be deleted as soon as you close this dock widget. This enables the implementation of user interfaces with dynamically created editors, like in word processing applications or source code development tools.
### Auto-Hide Functionality
The 4.0 release of ADS added the new **Auto-Hide** feature. Thanks to the
[initial contribution](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/pull/452) by [Ahmad Syarifuddin](https://github.com/SyarifFakhri) it was
possible to close this long standing [feature request](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/147). The "Auto Hide" feature
allows to display more information using less screen space by hiding or showing
windows pinned to one of the four dock container borders.
![Auto-Hide Movie](doc/AutoHide_Movie.gif)
The Advanced Docking
System supports "Auto-Hide" functionality for **all** dock containers - that means,
for the main window and for each floating widget. Here is short list of all
auto hide features:
- supported for the main window and all floating dock containers
- supports showing and hiding via mouse click or mouse hover
- respects opaque / non opaque splitter resizing flag
- context menu for pinning a dock widget or a complete dock area to a certain border
- configuration option to configure if the pin button should pin the current
dock widget tab or a complete dock area
- click the pin button holding the Ctrl key to pin a complete dock area
- fully CSS styleable
- backward compatible state file format - is is possible to load older dock manager
state files without auto hide support and older versions can load the new state
files with Auto-Hide state information
More about the auto hide configuration options in the [online documentation...](doc/user-guide.md#auto-hide-configuration-flags)
## Python Bindings
![Python Logo](doc/python_logo.png)
Thanks to the contribution of several users, the Advanced Docking System comes
with a complete Python integration. Python bindings are available for **PyQt5**, **PyQt6**, and
**PySide6**.
### PySide6
A PySide6 ADS package is available via PyPi and can be installed on Windows,
macOS, and Linux with:
```bash
pip install PySide6-QtAds
```
Sample code is available [here](https://github.com/mborgerson/Qt-Advanced-Docking-System/tree/pyside6/examples). To run the samples, you'll also need to install latest qtpy
from source (pip install <https://github.com/spyder-ide/qtpy/archive/refs/heads/master.zip>).
The PySide6 bindings were contributed by:
- [mborgerson](https://github.com/mborgerson)
Please file PySide6-QtAds-specific issues on its [pyside6_qtads](https://github.com/mborgerson/pyside6_qtads) fork for tracking. For more information about the PySide6 bindings read [this](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/298) issue.
### PyQt6
A PyQt6 ADS package is available via PyPi and can be installed on Windows,
macOS, and Linux with:
```bash
pip install PyQt6Ads
```
Sample code is available [here](https://github.com/pyapp-kit/PyQt6Ads/tree/main/examples).
The PyQt6 bindings were contributed by:
- [tlambert03](https://github.com/tlambert03)
Please file PyQt6Ads-specific issues at [pyapp-kit/PyQt6Ads](https://github.com/pyapp-kit/PyQt6Ads).
### PyQt5
A package is available via [conda-forge](https://github.com/conda-forge/pyqtads-feedstock).
The python integration has been contributed to this project by the following people:
- [n-elie](https://github.com/n-elie)
- [Hugo Slepicka](https://github.com/hhslepicka)
- [K Lauer](https://github.com/klauer)
A Python integration is also available via PyPi. You can install the
[PyQtAds](https://pypi.org/project/PyQtAds/) package via pip. This feature has been
contributed to this project by:
- [Mira Weller](https://github.com/luelista)
## Tested Compatible Environments
### Supported Qt Versions
The library supports **Qt5** and **Qt6**.
### Windows
Windows 10 / 11 [![Build status](https://ci.appveyor.com/api/projects/status/qcfb3cy932jw9mpy/branch/master?svg=true)](https://ci.appveyor.com/project/githubuser0xFFFF/qt-advanced-docking-system/branch/master)
[![windows-builds](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions/workflows/windows-cmake.yml/badge.svg?branch=master)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions/workflows/windows-cmake.yml)
The library was developed on and for Windows. It is used in a commercial Windows application and is therefore constantly tested.
### macOS
The application can be compiled for macOS. A user reported, that the library works on macOS. If have not tested it.
![Advanced Docking on macOS](doc/macos.png)
### Linux
[![Build status](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/workflows/linux-builds/badge.svg)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/actions?query=workflow%3Alinux-builds)
Unfortunately, there is no such thing as a Linux operating system. Linux is a heterogeneous environment with a variety of different distributions. So it is not possible to support "Linux" like it is possible for Windows. It is only possible to support and test a small subset of Linux distributions. The library can be compiled for and has been developed and tested with some Linux distributions. Depending on the used window manager or compositor, dock widgets
with native title bars are supported or not. If native title bars are not supported,
the library switches to `QWidget` based title bars.
- **Kubuntu 18.04 and 19.10** - uses KWin - no native title bars
- **Ubuntu 18.04, 19.10 and 20.04** - native title bars are supported
- **Ubuntu 22.04** - uses Wayland -> no native title bars
There are some requirements for the Linux distribution that have to be met:
- an X server that supports ARGB visuals and a compositing window manager. This is required to display the translucent dock overlays ([https://doc.qt.io/qt-5/qwidget.html#creating-translucent-windows](https://doc.qt.io/qt-5/qwidget.html#creating-translucent-windows)). If your Linux distribution does not support this, or if you disable this feature, you will very likely see issue [#95](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/95).
- Wayland is not properly supported by Qt yet. If you use Wayland, then you should set the session type to x11: `XDG_SESSION_TYPE=x11 ./AdvancedDockingSystemDemo`. You will find more details about this in issue [#288](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/288).
Screenshot Kubuntu:
![Advanced Docking on Kubuntu Linux](doc/linux_kubuntu_1804.png)
Screenshot Ubuntu:
![Advanced Docking on Ubuntu Linux](doc/linux_ubuntu_1910.png)
## Build
The Linux build requires private header files. Make sure that they are installed.
The library uses SVG icons, so ensure that Qt SVG support is installed. The demo
application creates a `QQuickWidget` for testing, so ensure that the required
libraries are installed.
### Qt5 on Ubuntu 18.04 or 20.04
```bash
sudo apt install qt5-default qtbase5-private-dev
```
### Qt5 on Ubuntu 22.04
```bash
sudo apt install qtbase5-dev qtbase5-private-dev qtbase5-dev-tools libqt5svg5 libqt5qml5 qtdeclarative5-dev
```
### Qt6 on Ubuntu 22.04
```bash
sudo apt install qt6-default qt6-base-dev qt6-base-private-dev qt6-tools-dev libqt6svg6 qt6-qtdeclarative
```
Open the `ads.pro` file with QtCreator and start the build, that's it.
You can run the demo project and test it yourself.
## Getting started / Example
The following example shows the minimum code required to use the advanced Qt docking system.
*MainWindow.h*
```cpp
#include <QMainWindow>
#include "DockManager.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
// The main container for docking
ads::CDockManager* m_DockManager;
};
```
*MainWindow.cpp*
```cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QLabel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// Create the dock manager after the ui is setup. Because the
// parent parameter is a QMainWindow the dock manager registers
// itself as the central widget as such the ui must be set up first.
DockManager = new ads::CDockManager(this);
// Create example content label - this can be any application specific
// widget
QLabel* l = new QLabel();
l->setWordWrap(true);
l->setAlignment(Qt::AlignTop | Qt::AlignLeft);
l->setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ");
// Create a dock widget with the title Label 1 and set the created label
// as the dock widget content
ads::CDockWidget* DockWidget = DockManager->createDockWidget("Label 1");
DockWidget->setWidget(l);
// Add the toggleViewAction of the dock widget to the menu to give
// the user the possibility to show the dock widget if it has been closed
ui->menuView->addAction(DockWidget->toggleViewAction());
// Add the dock widget to the top dock widget area
DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget);
}
MainWindow::~MainWindow()
{
delete ui;
}
```
## License information
[![License: LGPL v2.1](https://img.shields.io/badge/License-LGPL%20v2.1-blue.svg)](gnu-lgpl-v2.1.md)
This project uses the [LGPLv2.1 license](gnu-lgpl-v2.1.md)
## Donation
If this project help you reduce time to develop or if you just like it, you can give me a cup of coffee :coffee::wink:.
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=85R64TMMSY9T6">
<img src="doc/donate.png" alt="Donate with PayPal" width="160"/>
</a>
## Showcase
### [Qt Creator IDE](https://www.qt.io/development-tools)
From version 4.12 on, Qt Creator uses the Advanced Docking Framework for its
Qt Quick Designer. This improves the usability when using multiple screens.
![Qt Creator](doc/showcase_qtcreator.png)
### [Qt Design Studio](https://www.qt.io/ui-design-tools)
Taken from the [Qt Blog](https://www.qt.io/blog/qt-design-studio-1.5-beta-released):
> The most obvious change in [Qt Design Studio 1.5](https://www.qt.io/blog/qt-design-studio-1.5-beta-released) is the integration of dock widgets using the Qt Advanced Docking System. This allows the user to fully customize the workspace and also to undock any view into its own top level window. This especially improves the usability when using multiple screens.
[![Qt Design Studio](doc/showcase_qt_design_studio_video.png)](https://youtu.be/za9KBWcFXEw?t=84)
### [CETONI Elements](https://cetoni.com/cetoni-elements/)
The CETONI Elements software from [CETONI](https://www.cetoni.com) is a comprehensive,
plugin-based and modular laboratory automation software for controlling CETONI devices using a joint graphical user interface. The software features a powerful script system to automate processes. The software uses the advanced docking system to give the user the freedom to arrange all the views and windows that are provided by the various plugins.
[learn more...](https://cetoni.com/cetoni-elements/)
[![CETONI_Elements](doc/showcase_qmix_elements.png)](https://www.youtube.com/watch?v=7pdNfafg3Qc)
### [ezEditor](https://github.com/ezEngine/ezEngine)
The ezEditor is a full blown graphical editor used for editing scenes and
importing and authoring assets for the [ezEngine](https://github.com/ezEngine/ezEngine) -
an open source C++ game engine in active development.
![ezEditor](doc/showcase_ezEngine_editor.png)
### [D-Tect X](https://www.duerr-ndt.com/products/ndt-software/d-tect-xray-inspection-software.html)
D-Tect X is a X-ray inspection software for industrial radiography. It is a state-of-the-art 64-bit application which supports GPU (Graphics Processing Unit) acceleration and takes full advantage of computers with multiple CPU cores. A large set of tools assist the user in image analysis and evaluation. Thanks to the Qt Advanced Docking System the flexible and intuitive user interface can be completely customized to each users preference.
[learn more...](https://www.duerr-ndt.com/products/ndt-software/d-tect-xray-inspection-software.html)
[![D-TectX](doc/showcase_d-tect-x.png)](https://youtu.be/mOor7GmmIJo?t=13)
### [HiveWE](https://github.com/stijnherfst/HiveWE)
HiveWE is a Warcraft III world editor. It focusses on speed and ease of use,
especially for large maps where the regular World Editor is often too slow and clunky.
It has a JASS editor with syntax highlighting, tabs, code completion and more.
The JASS editor uses the Qt Advanced Docking System for the management and layout
of the open editor windows.
[learn more...](https://github.com/stijnherfst/HiveWE)
![HiveWE](doc/showcase_hivewe.png)
### [Ramses Composer](https://github.com/GENIVI/ramses-composer)
Ramses Composer is the authoring tool for the open source [RAMSES](https://github.com/GENIVI/ramses)
rendering ecosystem.
Ramses is a low-level rendering engine which is optimized for embedded hardware
mobile devices, automotive ECUs, IoT electronics. Ramses was initially developed
at the BMW Group and open-sourced in 2018 as part of a collaboration initiative
with the Genivi Alliance. It is an important part of the BMW infotainment cluster
and digital portfolio.
[learn more...](https://github.com/GENIVI/ramses-composer)
![RamsesComposer](doc/showcase_ramses_composer.png)
### [Plot Juggler](https://github.com/facontidavide/PlotJuggler)
PlotJuggler is a fast, powerful and intuitive tool to visualize time series.
It makes it easy to visualize data but also to analyze it. You can manipulate
your time series using a simple and extendable Transform Editor. Some of the
highlights are:
- Simple Drag & Drop user interface.
- Load data from file.
- Connect to live streaming of data.
- Save the visualization layout and configurations to reuse them later.
- Fast OpenGL visualization.
- Can handle thousands of timeseries and millions of data points.
- Transform your data using a simple editor: derivative, moving average, integral, etc…
- PlotJuggler can be easily extended using plugins.
[read more...](https://github.com/facontidavide/PlotJuggler)
[![Plot Juggler](doc/showcase_plot_juggler.png)](https://vimeo.com/480588113#t=46s)
### [Notepad Next](https://github.com/dail8859/NotepadNext)
Notepad Next is a cross-platform reimplementation of Notepad++ that uses the
Advanced Docking System to arrange the open source files on the screen.
[read more...](https://github.com/dail8859/NotepadNext)
![NotepadNext](doc/showcase_notepad_next.png)
### [MetGem](https://metgem.github.io/)
MetGem is an open-source software for tandem mass-spectrometry data visualization.
It's key features are standalone molecular networking and t-SNE based projections.
MetGem uses the Qt-Advanced-Docking-System to manage docks and to create independent
molecular network views.
[read more...](https://metgem.github.io/)
![MetGem](doc/showcase_metgem.png)
### [PRE Workbench](https://luelista.github.io/pre_workbench/)
Protocol Reverse Engineering Workbench is a software to support researchers in reverse engineering protocols and documenting the results. It supports various sources to import protocol traffic from, helps the discovery process by displaying different views and heuristic-based highlighting on data, and aids in documenting and sharing findings.
PRE Workbench is a Python software and uses the ADS PyQt integration.
[read more...](https://luelista.github.io/pre_workbench/)
[![PRE Workbench](doc/showcase_pre_workbench.png)](https://youtu.be/U3op5UreV1Q)
### [RDE Robox Development Environment](https://www.robox.it/en/product/rde-robox-development-environment/)
This software is a development environment for PAC (Programmable Automation Controllers)
from ROBOX. It offers a lot of tools to write, compile and debug machine control
and application software. The Advanced Docking System helps to organize all the tools and
windows (Project window, Shell window, Monitor windows, Oscilloscope window...)
on the screen to provide a easy to use, highly configurable and visual pleasing
development experience.
[read more...](https://www.robox.it/en/product/rde-robox-development-environment/)
![RDE](doc/showcase_robox_ide.png)
### [ResInsight](https://www.ceetronsolutions.com/projects/resinsight)
ResInsight as a software from Ceetron Solutions for visualization of oil and
gas reservoir simulation data. It allows reservoir models, simulation results,
and measurements to be visualized with very high performance. Optimized use of
graphics technology and simultaneous processing on multiple CPU cores have been
vital to enhance the performance and capacity of ResInsight for large data sets.
The Advanced Docking System has empowered Ceetron to build a much more intuitive
user interface for its ResInsight users.
[read more...](https://resinsight.org/)
[![ResInsight](doc/showcase_resinsight.png)](https://www.youtube.com/watch?v=HzLaQ1p6AUc)
### [ADTF 3](https://www.digitalwerk.net/adtf/)
The Automotive Data and Time-Triggered Framework was designed as a Rapid Prototyping Toolset, Simulation Framework and Test- and Measurement Tool. It is meant for:
- Developing and testing ADAS and HAD components
- Recording of vehicle data for visualisation
- Simulation of complex scenarios in SIL/HIL test environments
The software features time-based processing of multiple data streams and graphical editing of dynamic filter graphs. It also includes an SDK for custom plug-ins and reusable components, as well as components for data visualization in both 2D and 3D. This is was the
[manual](https://support.digitalwerk.net/adtf/v3/adtf_html/page_adtf_xsystem_plugin.html)
says about the switch to Qt Advanced Docking:
> After several minor improvements the Qt5 ADTF XSystem uses the Advanced Docking System for Qt since ADTF 3.10.0 for more convenience and usability regarding layouting, docking and embedding several widgets.
[read more...](https://support.digitalwerk.net/adtf/v3/adtf_html/index.html)
![ADTF](doc/showcase_adtf.png)
### [DREAM3D-NX](https://www.dream3d.io)
DREAM3D-NX *(Digital Representation Environment for Analysis of Materials in 3D)* is a cross-platform and modular, software suite that allows users to prepare, reconstruct, quantify, instantiate, and mesh, multidimensional, multimodal microstructural data, as well as many other applications.
[BlueQuartz Software](http://www.bluequartz.net/) has completely rewritten the old DREAM.3D version 6.5 application
taking advantage of the Advanced Docking System to present a highly customizable user interface
for DREAM3D-NX Version 7.
![DREAM.3D NX](doc/showcase_dream3d_nx.png)
[read more...](http://www.dream3d.io/)
### [LabPlot](https://labplot.kde.org/)
KDE LabPlot is the ultimate free, open source and cross-platform tool for scientists, engineers, and students who need to analyze and visualize data. With its intuitive interface and powerful features, you can create stunning plots and diagrams with ease. Whether you're working with CSV, FITS, or HDF5 data, KDE LabPlot makes it simple to import and analyze your data.
The LabPlot project recently switched to the Qt Advanced Docking System for their user interface. This switch represents a significant improvement to the LabPlot software, allowing users to create and manage complex data visualization layouts with ease.
![LabPlot](doc/showcase_labplot.png)
[read more...](https://labplot.kde.org/)
### [Scrutiny Debugger](https://scrutinydebugger.com/)
Scrutiny is an [open source](https://github.com/scrutinydebugger/) non-intrusive, real-time debugger for embedded systems, built for fast introspection, memory access, and signal visualization—without stopping your application. It uses the Qt Advanced Docking System (ADS) to provide fully customizable dashboards for monitoring and control.
Some of the highlights are:
- **Debug without interfering** — Inspect C++ memory live without disrupting execution flow.
- **HIL testing made easy** — Write to variables through the GUI or SDK to simulate conditions.
- **Configure during production** — Access and tweak variables anytime via GUI or Python.
- **Catch fast events** — Embedded graphs sample at task-level frequency, even with multithreading.
- **Build your dashboard** — Use ADS to create and save custom layouts for your debug sessions.
- **No JTAG needed** — Communicates over serial, CAN, or network interfaces.
- **Compact C++11 library** — Lightweight and easy to integrate into your firmware.
- **Live graphs and runtime values** — Visualize variables, RPVs, and aliases in real time.
ADS powers Scrutinys flexible interface, letting users organize views and data panels to suit their workflow — ideal for real-time monitoring, testing, and debugging.
[read more...](https://scrutinydebugger.com/)
[![Scrutiny Debugger UI](doc/showcase_scrutiny-dark.png)](https://www.youtube.com/watch?v=Dd3osxW-Clo)
### [PiSoWorks](https://pypi.org/project/pisoworks/)
PiSoWorks is an application for controlling the piezo amplifiers, such as the [NV200/D](https://www.piezosystem.com/product/nv-200-d-compact-amplifier/), from [piezosystem jena](https://www.piezosystem.com/) GmbH.
![LabPlot](doc/showcase_pysoworks.png)
[read more...](https://piezosystemjena.github.io/PiSoWorks/)
## Alternative Docking System Implementations
If this Qt Advanced Docking System does not fit to your needs you may consider some of the alternative docking system solutions for Qt.
### KDDockWidgets
This is an advanced docking framework for Qt from [KDAB](https://www.kdab.com/). The interesting thing is, that they separated GUI code from logic, so they can easily provide a QtQuick backend in the future.
- [Blog post about KDDockWidgets](https://www.kdab.com/kddockwidgets/)
- [GitHub project](https://github.com/KDAB/KDDockWidgets)
**License:** dual-licensed, available under both commercial and GPL license.
### QtitanDocking
This is a commercial component from [Developer Machines](https://www.devmachines.com/) for Qt Framework that allows to create a Microsoft like dockable user interface. They also offer a lot of other interesting and useful components for Qt. The library is available
- [Product page](https://www.devmachines.com/qtitandocking-overview.html)
**License:** Commercial license
### DockingPanes
DockingPanes is a library for Qt Widgets that implements docking windows that have the look and feel of Visual Studio. It provides a simple API which allows an application to make use of docking windows with a few calls.
- [GitHub project](https://github.com/KestrelRadarSensors/dockingpanes)
**License:** GPL

28
ads.pri Normal file
View File

@@ -0,0 +1,28 @@
CONFIG(debug, debug|release){
win32-g++ {
versionAtLeast(QT_VERSION, 5.15.0) {
LIBS += -lqtadvanceddocking
}
else {
LIBS += -lqtadvanceddockingd
}
}
else:msvc {
LIBS += -lqtadvanceddockingd
}
else:mac {
LIBS += -lqtadvanceddocking_debug
}
else {
LIBS += -lqtadvanceddocking
}
}
else{
LIBS += -lqtadvanceddocking
}
unix:!macx {
LIBS += -lxcb
}

View File

@@ -3,7 +3,7 @@ TEMPLATE = subdirs
SUBDIRS = \ SUBDIRS = \
src \ src \
demo \ demo \
example examples
demo.depends = src demo.depends = src
example.depends = src examples.depends = src

5
adsConfig.cmake Normal file
View File

@@ -0,0 +1,5 @@
include(CMakeFindDependencyMacro)
find_dependency(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED)
find_dependency(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED)
find_dependency(Qt5Widgets ${REQUIRED_QT_VERSION} REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/adsTargets.cmake")

View File

@@ -0,0 +1,29 @@
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0
PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE 0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "My Company\0"
VALUE "FileDescription", "@PROJECT_NAME@\0"
VALUE "FileVersion", "@PROJECT_VERSION_STRING@\0"
VALUE "ProductVersion", "@PROJECT_VERSION_STRING@\0"
VALUE "GitCommitFull", "@PROJECT_GIT_HASH@\0"
VALUE "GitCommitShort", "@PROJECT_GIT_HASH_SHORT@\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 1200
END
END

View File

@@ -0,0 +1,172 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# git_local_changes(<var>)
#
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
# Uses the return code of "git diff-index --quiet HEAD --".
# Does not regard untracked files.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
if(NOT IS_DIRECTORY "${GIT_DIR}")
file(READ ${GIT_DIR} worktree)
string(REGEX REPLACE "gitdir: (.*)worktrees(.*)\n$" "\\1" GIT_DIR ${worktree})
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
function(git_local_changes _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()
execute_process(COMMAND
"${GIT_EXECUTABLE}"
diff-index --quiet HEAD --
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(res EQUAL 0)
set(${_var} "CLEAN" PARENT_SCOPE)
else()
set(${_var} "DIRTY" PARENT_SCOPE)
endif()
endfunction()

View File

@@ -0,0 +1,41 @@
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()

View File

@@ -0,0 +1,95 @@
# ============================================================
# Versioning.cmake (Reusable Version + Resource Generator)
# ============================================================
# Freeze the directory where this module lives
# This is critical — it prevents paths from breaking when the
# function is invoked from other CMakeLists.txt files.
set(_VERSIONING_MODULE_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "Versioning module directory")
# ------------------------------------------------------------
# Extract version information from Git
# ------------------------------------------------------------
# Get tag (expected: v1.2.3 or 1.2.3 or 1.2.3-12-gHASH)
execute_process(
COMMAND git describe --tags --dirty
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_DESC_RAW
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Remove leading "v" if present
string(REGEX REPLACE "^v" "" GIT_DESC "${GIT_DESC_RAW}")
# Extract major.minor.patch
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ "${GIT_DESC}")
set(PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(PROJECT_VERSION_MINOR "${CMAKE_MATCH_2}")
set(PROJECT_VERSION_PATCH "${CMAKE_MATCH_3}")
set(PROJECT_VERSION_STRING
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
)
# Commit hash (full + short)
execute_process(
COMMAND git rev-parse HEAD
OUTPUT_VARIABLE PROJECT_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND git rev-parse --short HEAD
OUTPUT_VARIABLE PROJECT_GIT_HASH_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Export variables to parent scope
set(PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" PARENT_SCOPE)
set(PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR}" PARENT_SCOPE)
set(PROJECT_VERSION_PATCH "${PROJECT_VERSION_PATCH}" PARENT_SCOPE)
set(PROJECT_VERSION_STRING "${PROJECT_VERSION_STRING}" PARENT_SCOPE)
set(PROJECT_GIT_HASH "${PROJECT_GIT_HASH}" PARENT_SCOPE)
set(PROJECT_GIT_HASH_SHORT "${PROJECT_GIT_HASH_SHORT}" PARENT_SCOPE)
# Public variable for users
set(PROJECT_AUTO_VERSION "${PROJECT_VERSION_STRING}" PARENT_SCOPE)
# ------------------------------------------------------------
# Reusable function: Attach Windows version resources to target
# ------------------------------------------------------------
function(add_windows_version_resources target)
if(NOT WIN32)
return()
endif()
if(NOT TARGET "${target}")
message(FATAL_ERROR "add_windows_version_resources: target '${target}' not found.")
endif()
# Absolute path to the template (never changes)
get_filename_component(_rc_in
"${_VERSIONING_MODULE_DIR}/FileVersionInfo.rc.in"
ABSOLUTE
)
if(NOT EXISTS "${_rc_in}")
message(FATAL_ERROR
"FileVersionInfo.rc.in missing at: ${_rc_in}"
)
endif()
# Output in the caller's binary dir
set(_rc_out "${CMAKE_CURRENT_BINARY_DIR}/${target}_version.rc")
get_filename_component(_rc_out "${_rc_out}" ABSOLUTE)
# Ensure directory exists
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
# Configure the template
configure_file("${_rc_in}" "${_rc_out}" @ONLY)
# Add to the target
target_sources(${target} PRIVATE "${_rc_out}")
endfunction()

47
demo/CMakeLists.txt Normal file
View File

@@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.16)
project(ads_demo VERSION ${VERSION_SHORT})
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets Quick QuickWidgets REQUIRED)
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS AxContainer REQUIRED)
endif()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(ads_demo_SRCS
main.cpp
MainWindow.cpp
mainwindow.ui
StatusDialog.cpp
StatusDialog.ui
ImageViewer.cpp
RenderWidget.cpp
demo.qrc
)
add_executable(AdvancedDockingSystemDemo WIN32 ${ads_demo_SRCS})
target_include_directories(AdvancedDockingSystemDemo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src")
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Quick
Qt${QT_VERSION_MAJOR}::QuickWidgets)
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::AxContainer)
endif()
target_link_libraries(AdvancedDockingSystemDemo PRIVATE qtadvanceddocking-qt${QT_VERSION_MAJOR})
set_target_properties(AdvancedDockingSystemDemo PROPERTIES
AUTOMOC ON
AUTORCC ON
AUTOUIC ON
CXX_STANDARD 14
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
VERSION ${VERSION_SHORT}
EXPORT_NAME "Qt Advanced Docking System Demo"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${ads_PlatformDir}/bin"
)
#if(BUILD_STATIC)
# target_compile_definitions(AdvancedDockingSystemDemo PRIVATE ADS_STATIC)
#endif()

280
demo/ImageViewer.cpp Normal file
View File

@@ -0,0 +1,280 @@
//============================================================================
/// \file ImageViewer.cpp
/// \author Uwe Kindler
/// \date 04.11.2022
/// \brief Implementation of CImageViewer
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include "ImageViewer.h"
#include <math.h>
#include <QLabel>
#include <QImageReader>
#include <QImageWriter>
#include <QMessageBox>
#include <QApplication>
#include <QDir>
#include <QFileDialog>
#include <QStandardPaths>
#include <QAction>
#include <QScrollBar>
#include <QPixmap>
#include <QPainter>
#include <QImage>
#include <QMouseEvent>
#include <QWheelEvent>
#include "RenderWidget.h"
/**
* Private image viewer data
*/
struct ImageViewerPrivate
{
CImageViewer* _this;
CRenderWidget* RenderWidget;///< renders the image to screen
bool AutoFit;///< automatically fit image to window size on resize events
QSize ImageSize;///< stores the image size to detect image size changes
QPoint MouseMoveStartPos;///< for calculation of mouse move vector
QLabel* ScalingLabel;///< label displays scaling factor
QList<QWidget*> OverlayTools;///< list of tool widget to overlay
ImageViewerPrivate(CImageViewer* _public) : _this(_public) {}
};
//============================================================================
CImageViewer::CImageViewer(QWidget *parent)
: Super(parent),
d(new ImageViewerPrivate(this))
{
d->AutoFit = true;
d->RenderWidget = new CRenderWidget(this);
this->setBackgroundRole(QPalette::Light);
this->setAlignment(Qt::AlignCenter);
this->setWidget(d->RenderWidget);
this->createActions();
this->setMouseTracking(false); // only produce mouse move events if mouse button pressed
}
//============================================================================
CImageViewer::~CImageViewer()
{
delete d;
}
//============================================================================
bool CImageViewer::loadFile(const QString& fileName)
{
QImageReader reader(fileName);
reader.setAutoTransform(true);
const QImage newImage = reader.read();
if (newImage.isNull())
{
QMessageBox::information(this, QGuiApplication::applicationDisplayName(),
tr("Cannot load %1: %2")
.arg(QDir::toNativeSeparators(fileName), reader.errorString()));
return false;
}
setImage(newImage);
setWindowFilePath(fileName);
return true;
}
//===========================================================================
void CImageViewer::setImage(const QImage &newImage)
{
d->RenderWidget->showImage(newImage);
this->adjustDisplaySize(newImage);
}
//============================================================================
void CImageViewer::adjustDisplaySize(const QImage& Image)
{
if (d->ImageSize == Image.size())
{
return;
}
d->ImageSize = Image.size();
if (d->AutoFit)
{
this->fitToWindow();
}
}
//===========================================================================
static void initializeImageFileDialog(QFileDialog &dialog, QFileDialog::AcceptMode acceptMode)
{
static bool firstDialog = true;
if (firstDialog) {
firstDialog = false;
const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
dialog.setDirectory(picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.last());
}
QStringList mimeTypeFilters;
const QByteArrayList supportedMimeTypes = acceptMode == QFileDialog::AcceptOpen
? QImageReader::supportedMimeTypes() : QImageWriter::supportedMimeTypes();
for (const QByteArray &mimeTypeName : supportedMimeTypes)
mimeTypeFilters.append(mimeTypeName);
mimeTypeFilters.sort();
dialog.setMimeTypeFilters(mimeTypeFilters);
dialog.selectMimeTypeFilter("image/jpeg");
if (acceptMode == QFileDialog::AcceptSave)
dialog.setDefaultSuffix("jpg");
}
//===========================================================================
void CImageViewer::open()
{
QFileDialog dialog(this, tr("Open File"));
initializeImageFileDialog(dialog, QFileDialog::AcceptOpen);
while (dialog.exec() == QDialog::Accepted && !loadFile(dialog.selectedFiles().first())) {}
}
//===========================================================================
void CImageViewer::createActions()
{
QAction* a;
a = new QAction(tr("&Open..."));
a->setIcon(QIcon(":/adsdemo/images/perm_media.svg"));
connect(a, &QAction::triggered, this, &CImageViewer::open);
a->setShortcut(QKeySequence::Open);;
this->addAction(a);
a = new QAction(tr("Fit on Screen"));
a->setIcon(QIcon(":/adsdemo/images/zoom_out_map.svg"));
connect(a, &QAction::triggered, this, &CImageViewer::fitToWindow);
this->addAction(a);
a = new QAction(tr("Actual Pixels"));
a->setIcon(QIcon(":/adsdemo/images/find_in_page.svg"));
connect(a, &QAction::triggered, this, &CImageViewer::normalSize);
this->addAction(a);
a = new QAction(this);
a->setSeparator(true);
this->addAction(a);
a = new QAction(tr("Zoom In (25%)"));
a->setIcon(QIcon(":/adsdemo/images/zoom_in.svg"));
connect(a, &QAction::triggered, this, &CImageViewer::zoomIn);
this->addAction(a);
a = new QAction(tr("Zoom Out (25%)"));
a->setIcon(QIcon(":/adsdemo/images/zoom_out.svg"));
connect(a, &QAction::triggered, this, &CImageViewer::zoomOut);
this->addAction(a);
this->setContextMenuPolicy(Qt::ActionsContextMenu);
}
//===========================================================================
void CImageViewer::zoomIn()
{
d->AutoFit = false;
d->RenderWidget->zoomIn();
}
//===========================================================================
void CImageViewer::zoomOut()
{
d->AutoFit = false;
d->RenderWidget->zoomOut();
}
//===========================================================================
void CImageViewer::normalSize()
{
d->AutoFit = false;
d->RenderWidget->normalSize();
}
//===========================================================================
void CImageViewer::fitToWindow()
{
d->AutoFit = true;
d->RenderWidget->scaleToSize(this->maximumViewportSize());
}
//============================================================================
void CImageViewer::resizeEvent(QResizeEvent* ResizeEvent)
{
Super::resizeEvent(ResizeEvent);
if (d->AutoFit)
{
this->fitToWindow();
}
}
//============================================================================
void CImageViewer::mousePressEvent(QMouseEvent* Event)
{
d->RenderWidget->setCursor(Qt::ClosedHandCursor);
d->MouseMoveStartPos = Event->pos();
Super::mousePressEvent(Event);
}
//============================================================================
void CImageViewer::mouseReleaseEvent(QMouseEvent* Event)
{
d->RenderWidget->setCursor(Qt::OpenHandCursor);
Super::mouseReleaseEvent(Event);
}
//============================================================================
void CImageViewer::mouseMoveEvent(QMouseEvent* Event)
{
QPoint MoveVector = Event->pos() - d->MouseMoveStartPos;
d->MouseMoveStartPos = Event->pos();
horizontalScrollBar()->setValue(horizontalScrollBar()->value()
- MoveVector.x());
verticalScrollBar()->setValue(verticalScrollBar()->value() - MoveVector.y());
}
//============================================================================
void CImageViewer::wheelEvent(QWheelEvent* Event)
{
double numDegrees = Event->angleDelta().y() / 8;
double numSteps = numDegrees / 15;
d->AutoFit = false;
double Zoom;
if (numSteps < 0)
{
Zoom = pow(0.9, 0 - numSteps);
}
else
{
Zoom = pow(1.10, numSteps);
}
d->RenderWidget->zoomByValue(Zoom);
}
#include "moc_ImageViewer.cpp"
//---------------------------------------------------------------------------
// EOF ImageViewer.cpp

88
demo/ImageViewer.h Normal file
View File

@@ -0,0 +1,88 @@
#ifndef ImageViewerH
#define ImageViewerH
//============================================================================
/// \file ImageViewer.h
/// \author Uwe Kindler
/// \date 04.11.2022
/// \brief Declaration of CImageViewer
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include <QScrollArea>
QT_BEGIN_NAMESPACE
class QLabel;
QT_END_NAMESPACE
struct ImageViewerPrivate;
/**
* Tiny simple image viewer for showing images in demo
*/
class CImageViewer : public QScrollArea
{
Q_OBJECT
public:
using Super = QScrollArea;
explicit CImageViewer(QWidget *parent = nullptr);
virtual ~CImageViewer();
bool loadFile(const QString& Filename);
void setImage(const QImage &newImage);
public Q_SLOTS:
void open();
void zoomIn();
void zoomOut();
void normalSize();
void fitToWindow();
protected:
/**
* @brief Reimplemented from QScrollArea to adjust image scaling if m_AutoFit is
* true.
*/
virtual void resizeEvent(QResizeEvent* ResizeEvent);
/**
* @brief Handle mouse press events.
*/
virtual void mousePressEvent(QMouseEvent* Event);
/**
* @brief Handles mouse release events.
*/
virtual void mouseReleaseEvent(QMouseEvent* Event);
/**
* @brief Handle mouse move events.
*/
virtual void mouseMoveEvent(QMouseEvent* Event);
/**
* @brief Use mouse wheel to change scaling of the image.
*/
virtual void wheelEvent(QWheelEvent* Event);
private:
/**
* @brief Create the wiget actions.
*/
void createActions();
/**
* @brief Adjust size of render widget in case of image size change.
* @param[in] Image The new image that may have a different image size.
*/
void adjustDisplaySize(const QImage& Image);
ImageViewerPrivate* d;
friend ImageViewerPrivate;
};
//---------------------------------------------------------------------------
#endif // ImageViewerH

View File

@@ -50,71 +50,130 @@
#include <QWidgetAction> #include <QWidgetAction>
#include <QComboBox> #include <QComboBox>
#include <QInputDialog> #include <QInputDialog>
#include <QRubberBand>
#include <QPlainTextEdit>
#include <QTableWidget>
#include <QScreen>
#include <QStyle>
#include <QMessageBox>
#include <QMenu>
#include <QToolButton>
#include <QToolBar>
#include <QPointer>
#include <QMap> #include <QMap>
#include <QElapsedTimer> #include <QElapsedTimer>
#include <QQuickWidget>
#include "DockManager.h"
#include "DockWidget.h" #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
#include <QRandomGenerator>
#endif
#ifdef Q_OS_WIN
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QAxWidget>
#endif
#endif
#include "DockAreaTabBar.h"
#include "DockAreaTitleBar.h"
#include "DockAreaWidget.h" #include "DockAreaWidget.h"
#include "DockComponentsFactory.h"
#include "DockManager.h"
#include "DockSplitter.h"
#include "DockWidget.h"
#include "FloatingDockContainer.h"
#include "ImageViewer.h"
#include "MyDockAreaTitleBar.h"
#include "StatusDialog.h"
/**
//============================================================================ * Returns a random number from 0 to highest - 1
static ads::CDockWidget* createLongTextLabelDockWidget(QMenu* ViewMenu) */
int randomNumberBounded(int highest)
{ {
static int LabelCount = 0; #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
QLabel* l = new QLabel(); return QRandomGenerator::global()->bounded(highest);
l->setWordWrap(true); #else
l->setAlignment(Qt::AlignTop | Qt::AlignLeft); qsrand(QTime::currentTime().msec());
l->setText(QString("Label %1 %2 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " return qrand() % highest;
"Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque " #endif
"penatibus et magnis dis parturient montes, nascetur ridiculus mus. " }
"Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. "
"Nulla consequat massa quis enim. Donec pede justo, fringilla vel, "
"aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, "
"imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede "
"mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum "
"semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, "
"porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, "
"dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla "
"ut metus varius laoreet.")
.arg(LabelCount)
.arg(QTime::currentTime().toString("hh:mm:ss:zzz")));
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Label %1").arg(LabelCount++));
DockWidget->setWidget(l); /**
ViewMenu->addAction(DockWidget->toggleViewAction()); * Function returns a features string with closable (c), movable (m) and floatable (f)
return DockWidget; * features. i.e. The following string is for a not closable but movable and floatable
* widget: c- m+ f+
*/
static QString featuresString(ads::CDockWidget* DockWidget)
{
auto f = DockWidget->features();
return QString("c%1 m%2 f%3")
.arg(f.testFlag(ads::CDockWidget::DockWidgetClosable) ? "+" : "-")
.arg(f.testFlag(ads::CDockWidget::DockWidgetMovable) ? "+" : "-")
.arg(f.testFlag(ads::CDockWidget::DockWidgetFloatable) ? "+" : "-");
}
/**
* Appends the string returned by featuresString() to the window title of
* the given DockWidget
*/
static void appendFeaturStringToWindowTitle(ads::CDockWidget* DockWidget)
{
DockWidget->setWindowTitle(DockWidget->windowTitle()
+ QString(" (%1)").arg(featuresString(DockWidget)));
}
/**
* Helper function to create an SVG icon
*/
static QIcon svgIcon(const QString& File)
{
// This is a workaround, because in item views SVG icons are not
// properly scaled and look blurry or pixelate
QIcon SvgIcon(File);
SvgIcon.addPixmap(SvgIcon.pixmap(92));
return SvgIcon;
} }
//============================================================================ //============================================================================
static ads::CDockWidget* createCalendarDockWidget(QMenu* ViewMenu) class CCustomComponentsFactory : public ads::CDockComponentsFactory
{ {
static int CalendarCount = 0; public:
QCalendarWidget* w = new QCalendarWidget(); using Super = ads::CDockComponentsFactory;
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Calendar %1").arg(CalendarCount++)); ads::CDockAreaTitleBar* createDockAreaTitleBar(ads::CDockAreaWidget* DockArea) const override
DockWidget->setWidget(w); {
DockWidget->setToggleViewActionMode(ads::CDockWidget::ActionModeShow); auto TitleBar = new MyDockAreaTitleBar(DockArea);
ViewMenu->addAction(DockWidget->toggleViewAction()); auto CustomButton = new QToolButton(DockArea);
return DockWidget; CustomButton->setToolTip(QObject::tr("Help"));
} CustomButton->setIcon(svgIcon(":/adsdemo/images/help_outline.svg"));
CustomButton->setAutoRaise(true);
int Index = TitleBar->indexOf(TitleBar->button(ads::TitleBarButtonTabsMenu));
TitleBar->insertWidget(Index + 1, CustomButton);
return TitleBar;
}
};
//============================================================================
static ads::CDockWidget* createFileSystemTreeDockWidget(QMenu* ViewMenu) //===========================================================================
/**
* Custom QTableWidget with a minimum size hint to test CDockWidget
* setMinimumSizeHintMode() function of CDockWidget
*/
class CMinSizeTableWidget : public QTableWidget
{ {
static int FileSystemCount = 0; public:
QTreeView* w = new QTreeView(); using QTableWidget::QTableWidget;
w->setFrameShape(QFrame::NoFrame); virtual QSize minimumSizeHint() const override
QFileSystemModel* m = new QFileSystemModel(w); {
m->setRootPath(QDir::currentPath()); return QSize(300, 100);
w->setModel(m); }
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Filesystem %1").arg(FileSystemCount++)); };
DockWidget->setWidget(w);
ViewMenu->addAction(DockWidget->toggleViewAction());
return DockWidget;
}
//============================================================================ //============================================================================
@@ -127,8 +186,11 @@ struct MainWindowPrivate
Ui::MainWindow ui; Ui::MainWindow ui;
QAction* SavePerspectiveAction = nullptr; QAction* SavePerspectiveAction = nullptr;
QWidgetAction* PerspectiveListAction = nullptr; QWidgetAction* PerspectiveListAction = nullptr;
QComboBox* PerspectiveComboBox = nullptr;; QComboBox* PerspectiveComboBox = nullptr;
ads::CDockManager* DockManager = nullptr; ads::CDockManager* DockManager = nullptr;
ads::CDockWidget* WindowTitleTestDockWidget = nullptr;
QPointer<ads::CDockWidget> LastDockedEditor;
QPointer<ads::CDockWidget> LastCreatedFloatingEditor;
MainWindowPrivate(CMainWindow* _public) : _this(_public) {} MainWindowPrivate(CMainWindow* _public) : _this(_public) {}
@@ -161,41 +223,362 @@ struct MainWindowPrivate
* Restore the perspective listo of the dock manager * Restore the perspective listo of the dock manager
*/ */
void restorePerspectives(); void restorePerspectives();
};
/**
* Creates a dock widget with a file system tree view
*/
ads::CDockWidget* createFileSystemTreeDockWidget()
{
static int FileSystemCount = 0;
QTreeView* w = new QTreeView();
w->setFrameShape(QFrame::NoFrame);
QFileSystemModel* m = new QFileSystemModel(w);
m->setRootPath(QDir::currentPath());
w->setModel(m);
w->setRootIndex(m->index(QDir::currentPath()));
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Filesystem %1")
.arg(FileSystemCount++));
DockWidget->setWidget(w);
DockWidget->setIcon(svgIcon(":/adsdemo/images/folder_open.svg"));
ui.menuView->addAction(DockWidget->toggleViewAction());
// We disable focus to test focus highlighting if the dock widget content
// does not support focus
w->setFocusPolicy(Qt::NoFocus);
auto ToolBar = DockWidget->createDefaultToolBar();
ToolBar->addAction(ui.actionSaveState);
ToolBar->addAction(ui.actionRestoreState);
return DockWidget;
}
/**
* Create a dock widget with a QCalendarWidget
*/
ads::CDockWidget* createCalendarDockWidget()
{
static int CalendarCount = 0;
QCalendarWidget* w = new QCalendarWidget();
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Calendar %1").arg(CalendarCount++));
// The following lines are for testing the setWidget() and takeWidget()
// functionality
DockWidget->setWidget(w);
DockWidget->setWidget(w); // what happens if we set a widget if a widget is already set
DockWidget->takeWidget(); // we remove the widget
DockWidget->setWidget(w); // and set the widget again - there should be no error
DockWidget->setToggleViewActionMode(ads::CDockWidget::ActionModeShow);
DockWidget->setIcon(svgIcon(":/adsdemo/images/date_range.svg"));
ui.menuView->addAction(DockWidget->toggleViewAction());
auto ToolBar = DockWidget->createDefaultToolBar();
ToolBar->addAction(ui.actionSaveState);
ToolBar->addAction(ui.actionRestoreState);
// For testing all calendar dock widgets have a the tool button style
// Qt::ToolButtonTextUnderIcon
DockWidget->setToolBarStyleSource(ads::CDockWidget::ToolBarStyleFromDockWidget);
DockWidget->setToolBarStyle(Qt::ToolButtonTextUnderIcon, ads::CDockWidget::StateFloating);
return DockWidget;
}
/**
* Create dock widget with a text label
*/
ads::CDockWidget* createLongTextLabelDockWidget()
{
static int LabelCount = 0;
QLabel* l = new QLabel();
l->setWordWrap(true);
l->setAlignment(Qt::AlignTop | Qt::AlignLeft);
l->setText(QString("Label %1 %2 - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. "
"Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque "
"penatibus et magnis dis parturient montes, nascetur ridiculus mus. "
"Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. "
"Nulla consequat massa quis enim. Donec pede justo, fringilla vel, "
"aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, "
"imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede "
"mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum "
"semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, "
"porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, "
"dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla "
"ut metus varius laoreet.")
.arg(LabelCount)
.arg(QTime::currentTime().toString("hh:mm:ss:zzz")));
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Label %1").arg(LabelCount++));
DockWidget->setWidget(l);
DockWidget->setIcon(svgIcon(":/adsdemo/images/font_download.svg"));
ui.menuView->addAction(DockWidget->toggleViewAction());
return DockWidget;
}
/**
* Creates as imple editor widget
*/
ads::CDockWidget* createEditorWidget()
{
static int EditorCount = 0;
QPlainTextEdit* w = new QPlainTextEdit();
w->setPlaceholderText("This is an editor. If you close the editor, it will be "
"deleted. Enter your text here.");
w->setStyleSheet("border: none");
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Editor %1").arg(EditorCount++));
DockWidget->setWidget(w);
DockWidget->setIcon(svgIcon(":/adsdemo/images/edit.svg"));
DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
ui.menuView->addAction(DockWidget->toggleViewAction());
QMenu* OptionsMenu = new QMenu(DockWidget);
OptionsMenu->setTitle(QObject::tr("Options"));
OptionsMenu->setToolTip(OptionsMenu->title());
OptionsMenu->setIcon(svgIcon(":/adsdemo/images/custom-menu-button.svg"));
auto MenuAction = OptionsMenu->menuAction();
// The object name of the action will be set for the QToolButton that
// is created in the dock area title bar. You can use this name for CSS
// styling
MenuAction->setObjectName("optionsMenu");
DockWidget->setTitleBarActions({OptionsMenu->menuAction()});
auto a = OptionsMenu->addAction(QObject::tr("Clear Editor"));
w->connect(a, SIGNAL(triggered()), SLOT(clear()));
return DockWidget;
}
/**
* Creates a simply image viewr
*/
ads::CDockWidget* createImageViewer()
{
static int ImageViewerCount = 0;
auto w = new CImageViewer();
auto ImageIndex = randomNumberBounded(4);
auto FileName = ":adsdemo/images/ads_logo.svg";
// Pick a random image from a number of images
switch (ImageIndex)
{
case 0: FileName = ":adsdemo/images/ads_tile_blue.svg"; break;
case 1: FileName = ":adsdemo/images/ads_tile_blue_light.svg"; break;
case 2: FileName = ":adsdemo/images/ads_tile_green.svg"; break;
case 3: FileName = ":adsdemo/images/ads_tile_orange.svg"; break;
}
auto Result = w->loadFile(FileName);
qDebug() << "loadFile result: " << Result;
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Image Viewer %1").arg(ImageViewerCount++));
DockWidget->setIcon(svgIcon(":/adsdemo/images/photo.svg"));
DockWidget->setWidget(w,ads:: CDockWidget::ForceNoScrollArea);
auto ToolBar = DockWidget->createDefaultToolBar();
ToolBar->addActions(w->actions());
return DockWidget;
}
/**
* Create a table widget
*/
ads::CDockWidget* createTableWidget()
{
static int TableCount = 0;
auto w = new CMinSizeTableWidget();
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Table %1").arg(TableCount++));
static int colCount = 5;
static int rowCount = 30;
w->setColumnCount(colCount);
w->setRowCount(rowCount);
for (int col = 0; col < colCount; ++col)
{
w->setHorizontalHeaderItem(col, new QTableWidgetItem(QString("Col %1").arg(col+1)));
for (int row = 0; row < rowCount; ++row)
{
w->setItem(row, col, new QTableWidgetItem(QString("T %1-%2").arg(row + 1).arg(col+1)));
}
}
DockWidget->setWidget(w);
DockWidget->setIcon(svgIcon(":/adsdemo/images/grid_on.svg"));
DockWidget->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContent);
auto ToolBar = DockWidget->createDefaultToolBar();
auto Action = ToolBar->addAction(svgIcon(":/adsdemo/images/fullscreen.svg"), "Toggle Fullscreen");
QObject::connect(Action, &QAction::triggered, [DockWidget]()
{
if (DockWidget->isFullScreen())
{
DockWidget->showNormal();
}
else
{
DockWidget->showFullScreen();
}
});
ui.menuView->addAction(DockWidget->toggleViewAction());
return DockWidget;
}
/**
* Create QQuickWidget for test for OpenGL and QQuick
*/
ads::CDockWidget *createQQuickWidget()
{
QQuickWidget *widget = new QQuickWidget();
ads::CDockWidget *dockWidget = DockManager->createDockWidget("Quick");
dockWidget->setWidget(widget);
return dockWidget;
}
#ifdef Q_OS_WIN
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
/**
* Creates an ActiveX widget on windows
*/
ads::CDockWidget* createActiveXWidget(QWidget* parent = nullptr)
{
static int ActiveXCount = 0;
QAxWidget* w = new QAxWidget("{6bf52a52-394a-11d3-b153-00c04f79faa6}", parent);
ads::CDockWidget* DockWidget = DockManager->createDockWidget(QString("Active X %1").arg(ActiveXCount++));
DockWidget->setWidget(w);
ui.menuView->addAction(DockWidget->toggleViewAction());
return DockWidget;
}
#endif
#endif
};
//============================================================================ //============================================================================
void MainWindowPrivate::createContent() void MainWindowPrivate::createContent()
{ {
// Test container docking // Test container docking
QMenu* ViewMenu = ui.menuView; auto DockWidget = createCalendarDockWidget();
auto DockWidget = createCalendarDockWidget(ViewMenu);
DockWidget->setIcon(_this->style()->standardIcon(QStyle::SP_DialogOpenButton));
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false); DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false);
auto SpecialDockArea = DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
// For this Special Dock Area we want to avoid dropping on the center of it (i.e. we don't want this widget to be ever tabbified):
{
//SpecialDockArea->setAllowedAreas(ads::OuterDockAreas);
SpecialDockArea->setAllowedAreas({ads::LeftDockWidgetArea, ads::RightDockWidgetArea, ads::TopDockWidgetArea}); // just for testing
}
DockWidget = createLongTextLabelDockWidget();
WindowTitleTestDockWidget = DockWidget;
DockWidget->setFeature(ads::CDockWidget::DockWidgetFocusable, false);
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget); DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
DockManager->addDockWidget(ads::LeftDockWidgetArea, createLongTextLabelDockWidget(ViewMenu)); auto FileSystemWidget = createFileSystemTreeDockWidget();
auto FileSystemWidget = createFileSystemTreeDockWidget(ViewMenu); FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false);
auto ToolBar = FileSystemWidget->createDefaultToolBar(); appendFeaturStringToWindowTitle(FileSystemWidget);
ToolBar->addAction(ui.actionSaveState);
ToolBar->addAction(ui.actionRestoreState);
DockManager->addDockWidget(ads::BottomDockWidgetArea, FileSystemWidget); DockManager->addDockWidget(ads::BottomDockWidgetArea, FileSystemWidget);
FileSystemWidget = createFileSystemTreeDockWidget(ViewMenu); FileSystemWidget = createFileSystemTreeDockWidget();
ToolBar = FileSystemWidget->createDefaultToolBar();
ToolBar->addAction(ui.actionSaveState);
ToolBar->addAction(ui.actionRestoreState);
FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetMovable, false); FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetMovable, false);
FileSystemWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false);
appendFeaturStringToWindowTitle(FileSystemWidget);
// Test custom factory - we inject a help button into the title bar
DockManager->setComponentsFactory(new CCustomComponentsFactory());
auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget); auto TopDockArea = DockManager->addDockWidget(ads::TopDockWidgetArea, FileSystemWidget);
DockWidget = createCalendarDockWidget(ViewMenu); // Uncomment the next line if you would like to test the
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false); // HideSingleWidgetTitleBar functionality
DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea); // TopDockArea->setDockAreaFlag(ads::CDockAreaWidget::HideSingleWidgetTitleBar, true);
DockManager->setComponentsFactory(ads::CDockComponentsFactory::factory());
// We create a calendar widget and clear all flags to prevent the dock area
// from closing
DockWidget = createCalendarDockWidget();
DockWidget->setTabToolTip(QString("Tab ToolTip\nHodie est dies magna"));
auto DockArea = DockManager->addDockWidget(ads::CenterDockWidgetArea, DockWidget, TopDockArea);
// Now we create a action to test resizing of DockArea widget
auto Action = ui.menuTests->addAction(QString("Resize %1").arg(DockWidget->windowTitle()));
QObject::connect(Action, &QAction::triggered, [DockArea]()
{
// Resizing only works, if the Splitter is visible and has a valid
// sizes
auto Splitter = ads::internal::findParent<ads::CDockSplitter*>(DockArea);
if (!Splitter)
{
return;
}
// We change the sizes of the splitter that contains the Calendar 1 widget
// to resize the dock widget
int Width = Splitter->width();
Splitter->setSizes({Width * 2/3, Width * 1/3});
});
DockWidget->setWindowTitle(QString("My " + DockWidget->windowTitle()));
// Now we add a custom button to the dock area title bar that will create
// new editor widgets when clicked
auto CustomButton = new QToolButton(DockArea);
CustomButton->setToolTip(QObject::tr("Create Editor"));
CustomButton->setIcon(svgIcon(":/adsdemo/images/plus.svg"));
CustomButton->setAutoRaise(true);
auto TitleBar = DockArea->titleBar();
int Index = TitleBar->indexOf(TitleBar->tabBar());
TitleBar->insertWidget(Index + 1, CustomButton);
QObject::connect(CustomButton, &QToolButton::clicked, [DockArea, this]()
{
auto DockWidget = createEditorWidget();
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
DockManager->addDockWidgetTabToArea(DockWidget, DockArea);
_this->connect(DockWidget, SIGNAL(closeRequested()), SLOT(onEditorCloseRequested()));
});
// Test dock area docking // Test dock area docking
auto RighDockArea = DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), TopDockArea); auto RighDockArea = DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(), TopDockArea);
DockManager->addDockWidget(ads::TopDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea); DockWidget = createLongTextLabelDockWidget();
auto BottomDockArea = DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea); DockWidget->setFeature(ads::CDockWidget::DockWidgetPinnable, false);
DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea); DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget, RighDockArea);
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), BottomDockArea); auto BottomDockArea = DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
auto LabelDockWidget = createLongTextLabelDockWidget();
DockManager->addDockWidget(ads::CenterDockWidgetArea, LabelDockWidget, BottomDockArea);
// Tests CustomCloseHandling without DeleteOnClose
LabelDockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
LabelDockWidget->setWindowTitle(LabelDockWidget->windowTitle() + " [Custom Close]");
QObject::connect(LabelDockWidget, &ads::CDockWidget::closeRequested, [LabelDockWidget, this]()
{
int Result = QMessageBox::question(_this, "Custom Close Request",
"Do you really want to close this dock widget?");
if (QMessageBox::Yes == Result)
{
LabelDockWidget->closeDockWidget();
}
});
Action = ui.menuTests->addAction(QString("Set %1 Floating").arg(DockWidget->windowTitle()));
DockWidget->connect(Action, SIGNAL(triggered()), SLOT(setFloating()));
Action = ui.menuTests->addAction(QString("Set %1 As Current Tab").arg(DockWidget->windowTitle()));
DockWidget->connect(Action, SIGNAL(triggered()), SLOT(setAsCurrentTab()));
Action = ui.menuTests->addAction(QString("Raise %1").arg(DockWidget->windowTitle()));
DockWidget->connect(Action, SIGNAL(triggered()), SLOT(raise()));
// Test hidden floating dock widget
DockWidget = createLongTextLabelDockWidget();
DockManager->addDockWidgetFloating(DockWidget);
DockWidget->toggleView(false);
// Test visible floating dock widget
DockWidget = createCalendarDockWidget();
DockManager->addDockWidgetFloating(DockWidget);
DockWidget->setWindowTitle(QString("My " + DockWidget->windowTitle()));
#ifdef Q_OS_WIN
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
DockManager->addDockWidget(ads::CenterDockWidgetArea, createActiveXWidget(), RighDockArea);
#endif
#endif
for (auto DockWidget : DockManager->dockWidgetsMap())
{
_this->connect(DockWidget, SIGNAL(viewToggled(bool)), SLOT(onViewToggled(bool)));
_this->connect(DockWidget, SIGNAL(visibilityChanged(bool)), SLOT(onViewVisibilityChanged(bool)));
}
// Create image viewer
DockWidget = createImageViewer();
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
// Create quick widget
DockWidget = createQQuickWidget();
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, true);
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
} }
@@ -203,20 +586,91 @@ void MainWindowPrivate::createContent()
void MainWindowPrivate::createActions() void MainWindowPrivate::createActions()
{ {
ui.toolBar->addAction(ui.actionSaveState); ui.toolBar->addAction(ui.actionSaveState);
ui.actionSaveState->setIcon(_this->style()->standardIcon(QStyle::SP_DialogSaveButton)); ui.toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
ui.actionSaveState->setIcon(svgIcon(":/adsdemo/images/save.svg"));
ui.toolBar->addAction(ui.actionRestoreState); ui.toolBar->addAction(ui.actionRestoreState);
ui.actionRestoreState->setIcon(_this->style()->standardIcon(QStyle::SP_DialogOpenButton)); ui.actionRestoreState->setIcon(svgIcon(":/adsdemo/images/restore.svg"));
ui.toolBar->addSeparator();
QAction* a = ui.toolBar->addAction("Lock Workspace");
a->setIcon(svgIcon(":/adsdemo/images/lock_outline.svg"));
a->setCheckable(true);
a->setChecked(false);
QObject::connect(a, &QAction::triggered, _this, &CMainWindow::lockWorkspace);
SavePerspectiveAction = new QAction("Save Perspective", _this);
_this->connect(SavePerspectiveAction, SIGNAL(triggered()), SLOT(savePerspective()));
PerspectiveListAction = new QWidgetAction(_this); PerspectiveListAction = new QWidgetAction(_this);
PerspectiveComboBox = new QComboBox(_this); PerspectiveComboBox = new QComboBox(_this);
PerspectiveComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); PerspectiveComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
PerspectiveComboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); PerspectiveComboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
PerspectiveListAction->setDefaultWidget(PerspectiveComboBox); PerspectiveListAction->setDefaultWidget(PerspectiveComboBox);
ui.toolBar->addSeparator();
ui.toolBar->addAction(PerspectiveListAction); ui.toolBar->addAction(PerspectiveListAction);
a = SavePerspectiveAction = ui.toolBar->addAction("Create Perspective");
a->setIcon(svgIcon(":/adsdemo/images/picture_in_picture.svg"));
QObject::connect(a, &QAction::triggered, _this, &CMainWindow::savePerspective);
ui.toolBar->addAction(SavePerspectiveAction); ui.toolBar->addAction(SavePerspectiveAction);
ui.toolBar->addSeparator();
a = ui.toolBar->addAction("Create Floating Editor");
a->setProperty("Floating", true);
a->setToolTip("Creates floating dynamic dockable editor windows that are deleted on close");
a->setIcon(svgIcon(":/adsdemo/images/note_add.svg"));
_this->connect(a, SIGNAL(triggered()), SLOT(createEditor()));
ui.menuTests->addAction(a);
a = ui.toolBar->addAction("Create Docked Editor");
a->setProperty("Floating", false);
a->setToolTip("Creates a docked editor windows that are deleted on close");
a->setIcon(svgIcon(":/adsdemo/images/docked_editor.svg"));
_this->connect(a, SIGNAL(triggered()), SLOT(createEditor()));
ui.menuTests->addAction(a);
a = ui.toolBar->addAction("Create Editor Tab");
a->setProperty("Floating", false);
a->setToolTip("Creates a editor tab and inserts it as second tab into an area");
a->setIcon(svgIcon(":/adsdemo/images/tab.svg"));
a->setProperty("Tabbed", true);
_this->connect(a, SIGNAL(triggered()), SLOT(createEditor()));
ui.menuTests->addAction(a);
ui.toolBar->addSeparator();
a = ui.toolBar->addAction("Create Floating Table");
a->setToolTip("Creates floating dynamic dockable table with millions of entries");
a->setIcon(svgIcon(":/adsdemo/images/grid_on.svg"));
_this->connect(a, SIGNAL(triggered()), SLOT(createTable()));
ui.menuTests->addAction(a);
a = ui.toolBar->addAction("Create Image Viewer");
auto ToolButton = qobject_cast<QToolButton*>(ui.toolBar->widgetForAction(a));
ToolButton->setPopupMode(QToolButton::InstantPopup);
a->setToolTip("Creates floating, docked or pinned image viewer");
a->setIcon(svgIcon(":/adsdemo/images/panorama.svg"));
ui.menuTests->addAction(a);
auto Menu = new QMenu();
ToolButton->setMenu(Menu);
a = Menu->addAction("Floating Image Viewer");
_this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer()));
a = Menu->addAction("Docked Image Viewer");
_this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer()));
a = Menu->addAction("Pinned Image Viewer");
_this->connect(a, SIGNAL(triggered()), SLOT(createImageViewer()));
ui.menuTests->addSeparator();
a = ui.menuTests->addAction("Show Status Dialog");
_this->connect(a, SIGNAL(triggered()), SLOT(showStatusDialog()));
a = ui.menuTests->addAction("Toggle Label 0 Window Title");
_this->connect(a, SIGNAL(triggered()), SLOT(toggleDockWidgetWindowTitle()));
ui.menuTests->addSeparator();
a = ui.toolBar->addAction("Apply VS Style");
a->setToolTip("Applies a Visual Studio light style (visual_studio_light.css)." );
a->setIcon(svgIcon(":/adsdemo/images/color_lens.svg"));
QObject::connect(a, &QAction::triggered, _this, &CMainWindow::applyVsStyle);
ui.menuTests->addAction(a);
} }
@@ -267,23 +721,85 @@ CMainWindow::CMainWindow(QWidget *parent) :
{ {
using namespace ads; using namespace ads;
d->ui.setupUi(this); d->ui.setupUi(this);
setWindowTitle(QApplication::instance()->applicationName());
d->createActions(); d->createActions();
// uncomment the following line if the tab close button should be
// a QToolButton instead of a QPushButton
// CDockManager::setConfigFlags(CDockManager::configFlags() | CDockManager::TabCloseButtonIsToolButton);
// uncomment the following line if you want to use opaque undocking and
// opaque splitter resizing
//CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig);
// uncomment the following line if you want a fixed tab width that does
// not change if the visibility of the close button changes
//CDockManager::setConfigFlag(CDockManager::RetainTabSizeWhenCloseButtonHidden, true);
// uncomment the following line if you don't want close button on DockArea's title bar
//CDockManager::setConfigFlag(CDockManager::DockAreaHasCloseButton, false);
// uncomment the following line if you don't want undock button on DockArea's title bar
//CDockManager::setConfigFlag(CDockManager::DockAreaHasUndockButton, false);
// uncomment the following line if you don't want tabs menu button on DockArea's title bar
//CDockManager::setConfigFlag(CDockManager::DockAreaHasTabsMenuButton, false);
// uncomment the following line if you don't want disabled buttons to appear on DockArea's title bar
//CDockManager::setConfigFlag(CDockManager::DockAreaHideDisabledButtons, true);
// uncomment the following line if you want to show tabs menu button on DockArea's title bar only when there are more than one tab and at least of them has elided title
//CDockManager::setConfigFlag(CDockManager::DockAreaDynamicTabsMenuButtonVisibility, true);
// uncomment the following line if you want floating container to always show application title instead of active dock widget's title
//CDockManager::setConfigFlag(CDockManager::FloatingContainerHasWidgetTitle, false);
// uncomment the following line if you want floating container to show active dock widget's icon instead of always showing application icon
//CDockManager::setConfigFlag(CDockManager::FloatingContainerHasWidgetIcon, true);
// uncomment the following line if you want a central widget in the main dock container (the dock manager) without a titlebar
// If you enable this code, you can test it in the demo with the Calendar 0
// dock widget.
//CDockManager::setConfigFlag(CDockManager::HideSingleCentralWidgetTitleBar, true);
// uncomment the following line to enable focus highlighting of the dock
// widget that has the focus
CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
// uncomment if you would like to enable dock widget auto hiding
CDockManager::setAutoHideConfigFlags({CDockManager::DefaultAutoHideConfig});
// uncomment if you would like to disable closing auto hide widget with mouse click outside of auto hide container
//CDockManager::setAutoHideConfigFlag(CDockManager::AutoHideCloseOnOutsideMouseClick, false);
// uncomment if you would like to enable an equal distribution of the
// available size of a splitter to all contained dock widgets
// CDockManager::setConfigFlag(CDockManager::EqualSplitOnInsertion, true);
// uncomment if you would like to close tabs with the middle mouse button, web browser style
// CDockManager::setConfigFlag(CDockManager::MiddleMouseButtonClosesTab, true);
// Now create the dock manager and its content // Now create the dock manager and its content
d->DockManager = new CDockManager(this); d->DockManager = new CDockManager(this);
d->DockManager->setDockWidgetToolBarStyle(Qt::ToolButtonIconOnly, ads::CDockWidget::StateFloating);
// Uncomment the following line to have the old style where the dock #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
// area close button closes the active tab connect(d->PerspectiveComboBox, SIGNAL(activated(QString)),
//d->DockManager->setConfigFlags({ d->DockManager, SLOT(openPerspective(QString)));
// CDockManager::DockAreaHasCloseButton | CDockManager::DockAreaCloseButtonClosesTab}); #else
connect(d->PerspectiveComboBox, SIGNAL(activated(const QString&)), connect(d->PerspectiveComboBox, SIGNAL(textActivated(QString)),
d->DockManager, SLOT(openPerspective(const QString&))); d->DockManager, SLOT(openPerspective(QString)));
#endif
d->createContent(); d->createContent();
// Default window geometry // Default window geometry - center on screen
resize(800, 600); resize(1280, 720);
setGeometry(QStyle::alignedRect(
Qt::LeftToRight, Qt::AlignCenter, frameSize(),
QGuiApplication::primaryScreen()->availableGeometry()
));
d->restoreState(); //d->restoreState();
d->restorePerspectives(); d->restorePerspectives();
} }
@@ -299,6 +815,9 @@ CMainWindow::~CMainWindow()
void CMainWindow::closeEvent(QCloseEvent* event) void CMainWindow::closeEvent(QCloseEvent* event)
{ {
d->saveState(); d->saveState();
// Delete dock manager here to delete all floating widgets. This ensures
// that all top level windows of the dock manager are properly closed
d->DockManager->deleteLater();
QMainWindow::closeEvent(event); QMainWindow::closeEvent(event);
} }
@@ -337,3 +856,204 @@ void CMainWindow::savePerspective()
d->savePerspectives(); d->savePerspectives();
} }
//============================================================================
void CMainWindow::onViewToggled(bool Open)
{
Q_UNUSED(Open);
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
if (!DockWidget)
{
return;
}
//qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")";
}
//============================================================================
void CMainWindow::onViewVisibilityChanged(bool Visible)
{
Q_UNUSED(Visible);
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
if (!DockWidget)
{
return;
}
//qDebug() << DockWidget->objectName() << " visibilityChanged(" << Visible << ")";
}
//============================================================================
void CMainWindow::createEditor()
{
QObject* Sender = sender();
QVariant vFloating = Sender->property("Floating");
bool Floating = vFloating.isValid() ? vFloating.toBool() : true;
QVariant vTabbed = Sender->property("Tabbed");
bool Tabbed = vTabbed.isValid() ? vTabbed.toBool() : true;
auto DockWidget = d->createEditorWidget();
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
DockWidget->setFeature(ads::CDockWidget::DockWidgetForceCloseWithArea, true);
connect(DockWidget, SIGNAL(closeRequested()), SLOT(onEditorCloseRequested()));
if (Floating)
{
auto FloatingWidget = d->DockManager->addDockWidgetFloating(DockWidget);
FloatingWidget->move(QPoint(20, 20));
d->LastCreatedFloatingEditor = DockWidget;
d->LastDockedEditor.clear();
return;
}
ads::CDockAreaWidget* EditorArea = d->LastDockedEditor ? d->LastDockedEditor->dockAreaWidget() : nullptr;
if (EditorArea)
{
if (Tabbed)
{
// Test inserting the dock widget tab at a given position instead
// of appending it. This function inserts the new dock widget as
// first tab
d->DockManager->addDockWidgetTabToArea(DockWidget, EditorArea, 0);
}
else
{
d->DockManager->setConfigFlag(ads::CDockManager::EqualSplitOnInsertion, true);
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, EditorArea);
}
}
else
{
if (d->LastCreatedFloatingEditor)
{
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, d->LastCreatedFloatingEditor->dockAreaWidget());
}
else
{
d->DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget);
}
}
d->LastDockedEditor = DockWidget;
}
//============================================================================
void CMainWindow::onEditorCloseRequested()
{
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
int Result = QMessageBox::question(this, "Close Editor", QString("Editor %1 "
"contains unsaved changes? Would you like to close it?")
.arg(DockWidget->windowTitle()));
if (QMessageBox::Yes == Result)
{
DockWidget->closeDockWidget();
}
}
//============================================================================
void CMainWindow::onImageViewerCloseRequested()
{
auto DockWidget = qobject_cast<ads::CDockWidget*>(sender());
int Result = QMessageBox::question(this, "Close Image Viewer", QString("%1 "
"contains unsaved changes? Would you like to close it?")
.arg(DockWidget->windowTitle()));
if (QMessageBox::Yes == Result)
{
DockWidget->closeDockWidget();
}
}
//============================================================================
void CMainWindow::createTable()
{
auto DockWidget = d->createTableWidget();
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
auto FloatingWidget = d->DockManager->addDockWidgetFloating(DockWidget);
FloatingWidget->move(QPoint(40, 40));
}
//============================================================================
void CMainWindow::showStatusDialog()
{
CStatusDialog Dialog(d->DockManager);
Dialog.exec();
}
//============================================================================
void CMainWindow::toggleDockWidgetWindowTitle()
{
QString Title = d->WindowTitleTestDockWidget->windowTitle();
int i = Title.indexOf(" (Test)");
if (-1 == i)
{
Title += " (Test)";
}
else
{
Title = Title.left(i);
}
d->WindowTitleTestDockWidget->setWindowTitle(Title);
}
//============================================================================
void CMainWindow::applyVsStyle()
{
QFile StyleSheetFile(":adsdemo/res/visual_studio_light.css");
StyleSheetFile.open(QIODevice::ReadOnly);
QTextStream StyleSheetStream(&StyleSheetFile);
auto Stylesheet = StyleSheetStream.readAll();
StyleSheetFile.close();
d->DockManager->setStyleSheet(Stylesheet);
}
//============================================================================
void CMainWindow::createImageViewer()
{
QAction* a = qobject_cast<QAction*>(sender());
qDebug() << "createImageViewer " << a->text();
auto DockWidget = d->createImageViewer();
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
DockWidget->setFeature(ads::CDockWidget::DockWidgetForceCloseWithArea, true);
DockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
DockWidget->resize(QSize(640, 480));
connect(DockWidget, &ads::CDockWidget::closeRequested, this,
&CMainWindow::onImageViewerCloseRequested);
if (a->text().startsWith("Floating"))
{
auto FloatingWidget = d->DockManager->addDockWidgetFloating(DockWidget);
FloatingWidget->move(QPoint(20, 20));
}
else if (a->text().startsWith("Docked"))
{
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget);
}
else if (a->text().startsWith("Pinned"))
{
d->DockManager->addAutoHideDockWidget(ads::SideBarLeft, DockWidget);
}
}
//============================================================================
void CMainWindow::lockWorkspace(bool Value)
{
if (Value)
{
d->DockManager->lockDockWidgetFeaturesGlobally();
}
else
{
d->DockManager->lockDockWidgetFeaturesGlobally(ads::CDockWidget::NoDockWidgetFeatures);
}
}

View File

@@ -58,6 +58,17 @@ private slots:
void on_actionSaveState_triggered(bool); void on_actionSaveState_triggered(bool);
void on_actionRestoreState_triggered(bool); void on_actionRestoreState_triggered(bool);
void savePerspective(); void savePerspective();
void onViewToggled(bool Open);
void onViewVisibilityChanged(bool Visible);
void createEditor();
void createTable();
void onEditorCloseRequested();
void onImageViewerCloseRequested();
void showStatusDialog();
void toggleDockWidgetWindowTitle();
void applyVsStyle();
void createImageViewer();
void lockWorkspace(bool Value);
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

58
demo/MyDockAreaTitleBar.h Normal file
View File

@@ -0,0 +1,58 @@
#ifndef QTADS_MYDOCKAREATITLEBAR_H
#define QTADS_MYDOCKAREATITLEBAR_H
/*******************************************************************************
** Qt Advanced Docking System
** Copyright (C) 2017 Uwe Kindler
**
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public
** License as published by the Free Software Foundation; either
** version 2.1 of the License, or (at your option) any later version.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public
** License along with this library; If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
//============================================================================
// INCLUDES
//============================================================================
#include <DockAreaTitleBar.h>
/**
* Custom DockAreaTitleBar that adds a custom context menu
*/
class MyDockAreaTitleBar : public ads::CDockAreaTitleBar
{
public:
explicit MyDockAreaTitleBar(ads::CDockAreaWidget *parent) :
CDockAreaTitleBar(parent)
{
}
QMenu* buildContextMenu(QMenu*) override
{
auto menu = ads::CDockAreaTitleBar::buildContextMenu(nullptr);
menu->addSeparator();
auto action = menu->addAction(tr("Format HardDrive"));
connect(action, &QAction::triggered, this, [this]()
{
QMessageBox msgBox;
msgBox.setText("No, just kidding");
msgBox.setStandardButtons(QMessageBox::Abort);
msgBox.setDefaultButton(QMessageBox::Abort);
msgBox.exec();
});
return menu;
}
};
#endif // QTADS_MYDOCKAREATITLEBAR_H

108
demo/RenderWidget.cpp Normal file
View File

@@ -0,0 +1,108 @@
//============================================================================
/// \file RenderWidget.cpp
/// \author Uwe Kindler
/// \date 04.11.2022
/// \brief Implementation of CRenderWidget
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include "RenderWidget.h"
#include <QPainter>
#include <math.h>
//===========================================================================
CRenderWidget::CRenderWidget(QWidget* Parent) :
QWidget(Parent), m_ScaleFactor(1)
{
this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
this->setCursor(Qt::OpenHandCursor);
}
//===========================================================================
CRenderWidget::~CRenderWidget()
{
}
//===========================================================================
void CRenderWidget::showImage(const QImage& Image)
{
m_Image = QPixmap::fromImage(Image);
this->adjustWidgetSize();
this->repaint();
}
//===========================================================================
void CRenderWidget::paintEvent(QPaintEvent* Event)
{
Q_UNUSED(Event);
QPainter Painter(this);
Painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
Painter.setRenderHint(QPainter::Antialiasing, true);
Painter.scale(m_ScaleFactor, m_ScaleFactor);
Painter.drawPixmap(QPoint(0, 0), m_Image);
}
//============================================================================
void CRenderWidget::zoomIn()
{
scaleImage(1.25);
}
//============================================================================
void CRenderWidget::zoomOut()
{
scaleImage(0.8);
}
//============================================================================
void CRenderWidget::zoomByValue(double ZoomValue)
{
scaleImage(ZoomValue);
}
//============================================================================
void CRenderWidget::normalSize()
{
m_ScaleFactor = 1;
this->adjustWidgetSize();
}
//============================================================================
void CRenderWidget::scaleImage(double ScaleFactor)
{
m_ScaleFactor *= ScaleFactor;
this->adjustWidgetSize();
}
//============================================================================
void CRenderWidget::adjustWidgetSize()
{
QSize ScaledImageSize = m_Image.size() * m_ScaleFactor;
if (ScaledImageSize != this->size())
{
this->setFixedSize(ScaledImageSize);
}
}
//============================================================================
void CRenderWidget::scaleToSize(const QSize& TargetSize)
{
if (m_Image.isNull())
{
return;
}
double ScaleFactorH = (double) TargetSize.width() / m_Image.size().width();
double ScaleFactorV = (double) TargetSize.height()
/ m_Image.size().height();
m_ScaleFactor = (ScaleFactorH < ScaleFactorV) ? ScaleFactorH : ScaleFactorV;
this->adjustWidgetSize();
}
//---------------------------------------------------------------------------
// EOF RenderWidget.cpp

111
demo/RenderWidget.h Normal file
View File

@@ -0,0 +1,111 @@
#ifndef RenderWidgetH
#define RenderWidgetH
//============================================================================
/// \file RenderWidget.h
/// \author Uwe Kindler
/// \date 04.11.2022
/// \brief Declaration of CRenderWidget
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include <QWidget>
#include <QPixmap>
//============================================================================
// FORWARD DECLARATIONS
//============================================================================
class QImage;
/**
* @brief Widget for fast display of images (i.e. for video capture devices)
*/
class CRenderWidget : public QWidget
{
Q_OBJECT
private:
QPixmap m_Image;
double m_ScaleFactor;
protected:
/**
* @brief Reimplemented paint event method showing actual image.
*/
void paintEvent(QPaintEvent* PaintEvent);
/**
* @brief Change scale factor
*/
void scaleImage(double ScaleFactor);
/**
* @brief Adjust widget size to size of image.
*/
void adjustWidgetSize();
public:
/**
* Constructor
* @param[in] Parent Parent widget.
*/
CRenderWidget(QWidget* Parent);
/**
* Destructor
*/
virtual ~CRenderWidget();
signals:
/**
* @brief Signalize change of captured image size.
* @param ImageSize New image size.
*/
void imageSizeChanged(const QSize& ImageSize);
public slots:
/**
* @brief Show new image in render widget.
*/
void showImage(const QImage& Image);
/**
* @brief Zoom into the scene.
* This function decreases the scaling factor by setting it to the previous
* value in internal scaling list.
* @brief Steps The number of steps to zoom in. One step is 25%.
*/
void zoomIn();
/**
* @brief Zoom out of the scene.
* This function decreases the scaling factor by setting it to the next
* value in internal scaling list.
* @brief Steps The number of steps to zoom out. One step is 25%.
*/
void zoomOut();
/**
* @brief Change zoom by zoom value.
* @param[in] ZoomValue This is the zoom value to apply. A value of 1
* means no change a value > 1 increases the image (i.e. 1.25 would increase
* the image by 25%) and a value of < 1 decreases the image size (i.e.
* a value of 0.8 would decrease the image size by 25%).
*/
void zoomByValue(double ZoomValue);
/**
* @brief Resets the actual scaling to 1 and display the image with its
* actual pixel size.
*/
void normalSize();
/**
* @brief Scales the wiget and its content image to the given TargetSize
*/
void scaleToSize(const QSize& TargetSize);
}; // class CRenderWidget
//---------------------------------------------------------------------------
#endif // RenderWidgetH

88
demo/StatusDialog.cpp Normal file
View File

@@ -0,0 +1,88 @@
//============================================================================
/// \file StatusDialog.cpp
/// \author Uwe Kindler
/// \date 13.04.2020
/// \brief Implementation of CStatusDialog class
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include "StatusDialog.h"
#include <iostream>
#include "DockManager.h"
#include "DockWidget.h"
#include "ui_StatusDialog.h"
/**
* Private data class of CStatusDialog class (pimpl)
*/
struct StatusDialogPrivate
{
CStatusDialog *_this;
Ui::CStatusDialogClass ui;
ads::CDockManager* DockManager;
QMap<QString, ads::CDockWidget*> DockWidgets;
/**
* Private data constructor
*/
StatusDialogPrivate(CStatusDialog *_public);
};
// struct StatusDialogPrivate
//============================================================================
StatusDialogPrivate::StatusDialogPrivate(CStatusDialog *_public) :
_this(_public)
{
}
//============================================================================
CStatusDialog::CStatusDialog(ads::CDockManager* DockManager) :
QDialog(DockManager),
d(new StatusDialogPrivate(this))
{
d->ui.setupUi(this);
d->DockManager = DockManager;
d->DockWidgets = DockManager->dockWidgetsMap();
for (auto it = d->DockWidgets.begin(); it != d->DockWidgets.end(); ++it)
{
QVariant vDockWidget = QVariant::fromValue(it.value());
d->ui.dockWidgetsComboBox->addItem(it.key(), vDockWidget);
}
}
//============================================================================
CStatusDialog::~CStatusDialog()
{
delete d;
}
//============================================================================
void CStatusDialog::on_dockWidgetsComboBox_currentIndexChanged(int index)
{
if (index < 0)
{
return;
}
auto vDockWidget = d->ui.dockWidgetsComboBox->currentData();
auto DockWidget = vDockWidget.value<ads::CDockWidget*>();
d->ui.isClosedCheckBox->setChecked(DockWidget->isClosed());
d->ui.isFloatingCheckBox->setChecked(DockWidget->isFloating());
d->ui.tabbedCheckBox->setChecked(DockWidget->isTabbed());
d->ui.isCurrentTabCheckBox->setChecked(DockWidget->isCurrentTab());
d->ui.closableCheckBox->setChecked(DockWidget->features().testFlag(ads::CDockWidget::DockWidgetClosable));
d->ui.movableCheckBox->setChecked(DockWidget->features().testFlag(ads::CDockWidget::DockWidgetMovable));
d->ui.floatableCheckBox->setChecked(DockWidget->features().testFlag(ads::CDockWidget::DockWidgetFloatable));
d->ui.deleteOnCloseCheckBox->setChecked(DockWidget->features().testFlag(ads::CDockWidget::DockWidgetDeleteOnClose));
d->ui.customCloseHandlingCheckBox->setChecked(DockWidget->features().testFlag(ads::CDockWidget::CustomCloseHandling));
}
//---------------------------------------------------------------------------
// EOF StatusDialog.cpp

47
demo/StatusDialog.h Normal file
View File

@@ -0,0 +1,47 @@
#ifndef StatusDialogH
#define StatusDialogH
//============================================================================
/// \file StatusDialog.h
/// \author Uwe Kindler
/// \date 13.04.2020
/// \brief Declaration of CStatusDialog class
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include <QDialog>
namespace ads {class CDockManager;}
struct StatusDialogPrivate;
/**
* Displays status info about dock widgets
*/
class CStatusDialog : public QDialog
{
Q_OBJECT
private:
StatusDialogPrivate* d; ///< private data (pimpl)
friend struct StatusDialogPrivate;
private slots:
void on_dockWidgetsComboBox_currentIndexChanged(int index);
protected:
public:
using Super = QDialog;
/**
* Default Constructor
*/
CStatusDialog(ads::CDockManager* parent);
/**
* Virtual Destructor
*/
virtual ~CStatusDialog();
}; // class StatusDialog
// namespace namespace_name
//-----------------------------------------------------------------------------
#endif // StatusDialogH

146
demo/StatusDialog.ui Normal file
View File

@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CStatusDialogClass</class>
<widget class="QDialog" name="CStatusDialogClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>357</width>
<height>331</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Dock Widget Status</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QLabel" name="dockWidgetLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Dock Widget:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="dockWidgetsComboBox">
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="statusGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Status</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="isClosedCheckBox">
<property name="text">
<string>closed</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="isFloatingCheckBox">
<property name="text">
<string>floating</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="tabbedCheckBox">
<property name="text">
<string>tabbed</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="isCurrentTabCheckBox">
<property name="text">
<string>is current tab</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="flagsGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Feature Flags</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QCheckBox" name="closableCheckBox">
<property name="text">
<string>DockWidgetClosable</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="movableCheckBox">
<property name="text">
<string>DockWidgetMovable</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="floatableCheckBox">
<property name="text">
<string>DockWidgetFloatable</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="deleteOnCloseCheckBox">
<property name="text">
<string>DockWidgetDeleteOnClose</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="customCloseHandlingCheckBox">
<property name="text">
<string>CustomCloseHandling</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

4
demo/app.css Normal file
View File

@@ -0,0 +1,4 @@
ads--CTitleBarButton::menu-indicator
{
image: none;
}

BIN
demo/app.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

1
demo/app.rc Normal file
View File

@@ -0,0 +1 @@
IDI_ICON1 ICON DISCARDABLE "app.ico"

View File

@@ -1,31 +1,49 @@
ADS_ROOT = $${PWD}/..
ADS_OUT_ROOT = $${OUT_PWD}/.. ADS_OUT_ROOT = $${OUT_PWD}/..
TARGET = AdvancedDockingSystemDemo TARGET = AdvancedDockingSystemDemo
DESTDIR = $${ADS_OUT_ROOT}/lib DESTDIR = $${ADS_OUT_ROOT}/lib
QT += core gui widgets QT += core gui widgets quick quickwidgets
CONFIG *= c++14
include(../ads.pri)
SOURCES += \ lessThan(QT_MAJOR_VERSION, 6) {
main.cpp \ win32 {
MainWindow.cpp QT += axcontainer
}
}
CONFIG += c++14
CONFIG += debug_and_release
DEFINES += QT_DEPRECATED_WARNINGS
RC_FILE += app.rc
adsBuildStatic {
DEFINES += ADS_STATIC
}
HEADERS += \ HEADERS += \
MainWindow.h MainWindow.h \
StatusDialog.h \
ImageViewer.h \
RenderWidget.h
SOURCES += \
main.cpp \
MainWindow.cpp \
StatusDialog.cpp \
ImageViewer.cpp \
RenderWidget.cpp
FORMS += \ FORMS += \
mainwindow.ui mainwindow.ui \
StatusDialog.ui
RESOURCES += main.qrc RESOURCES += demo.qrc
LIBS += -L$${ADS_OUT_ROOT}/lib LIBS += -L$${ADS_OUT_ROOT}/lib
# Dependency: AdvancedDockingSystem (shared)
win32:CONFIG(release, debug|release): LIBS += -lqtadvanceddocking
else:win32:CONFIG(debug, debug|release): LIBS += -lqtadvanceddockingd
else:unix: LIBS += -lqtadvanceddocking
INCLUDEPATH += ../src INCLUDEPATH += ../src
DEPENDPATH += ../src DEPENDPATH += ../src

43
demo/demo.qrc Normal file
View File

@@ -0,0 +1,43 @@
<RCC>
<qresource prefix="/adsdemo">
<file>images/folder.svg</file>
<file>images/folder_open.svg</file>
<file>images/note_add.svg</file>
<file>images/picture_in_picture.svg</file>
<file>images/restore.svg</file>
<file>images/save.svg</file>
<file>images/date_range.svg</file>
<file>images/edit.svg</file>
<file>images/grid_on.svg</file>
<file>images/custom-menu-button.svg</file>
<file>app.css</file>
<file>images/plus.svg</file>
<file>images/help_outline.svg</file>
<file>images/fullscreen.svg</file>
<file>images/create_floating_editor.svg</file>
<file>images/create_floating_table.svg</file>
<file>images/docked_editor.svg</file>
<file>images/tab.svg</file>
<file>res/visual_studio_light.css</file>
<file>images/color_lens.svg</file>
<file>images/ads_icon.svg</file>
<file>images/ads_logo.svg</file>
<file>images/find_in_page.svg</file>
<file>images/perm_media.svg</file>
<file>images/zoom_in.svg</file>
<file>images/zoom_out.svg</file>
<file>images/zoom_out_map.svg</file>
<file>images/ads_tile_blue.svg</file>
<file>images/ads_tile_blue_light.svg</file>
<file>images/ads_tile_green.svg</file>
<file>images/ads_tile_orange.svg</file>
<file>images/photo.svg</file>
<file>images/crop_original.svg</file>
<file>images/panorama.svg</file>
<file>images/ads_icon2.svg</file>
<file>images/font_download.svg</file>
<file>images/lock_outline.svg</file>
<file>images/lock.svg</file>
<file>images/lock_open.svg</file>
</qresource>
</RCC>

11
demo/images/ads_icon.svg Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024" height="1024" version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956"/></text>
<g transform="translate(581.23 1750.5)">
<path d="m191.64-726.53h-521.75c-138.69 0-251.12-112.43-251.12-251.12v-521.75c0-138.69 112.43-251.12 251.12-251.12h521.75c138.69 0 251.12 112.43 251.12 251.12v521.75c0 138.69-112.43 251.12-251.12 251.12z" fill="#e0e0e0" style="mix-blend-mode:normal"/>
<path d="m-175.9-1515.9v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
<path d="m80.1-1217.2v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
<path d="m-175.9-1217.2v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
<path d="m-431.9-1515.9v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1004 B

11
demo/images/ads_icon2.svg Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024" height="1024" version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<desc>electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH</desc>
<g transform="matrix(1.4118 0 0 1.4118 -210.82 -210.82)" stroke-width=".50173">
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956" stroke-width=".70833"/></text>
<path d="m405.33 234.66v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
<path d="m661.33 533.33v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
<path d="m405.33 533.33v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
<path d="m149.33 234.66v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 956 B

12
demo/images/ads_logo.svg Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="6907.3" height="1024" version="1.1" viewBox="0 0 6907.3 1024" xmlns="http://www.w3.org/2000/svg">
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956"/></text>
<text x="1178.9221" y="718.37329" fill="#8f918f" font-family="sans-serif" font-size="628px" style="line-height:1.25" xml:space="preserve"><tspan x="1178.9221" y="718.37329" fill="#8f918f" font-family="'Segoe UI'" font-size="628px" font-weight="300">Qt Advanced Docking</tspan></text>
<g transform="translate(581.23 1750.5)">
<path d="m191.64-726.53h-521.75c-138.69 0-251.12-112.43-251.12-251.12v-521.75c0-138.69 112.43-251.12 251.12-251.12h521.75c138.69 0 251.12 112.43 251.12 251.12v521.75c0 138.69-112.43 251.12-251.12 251.12z" fill="#e0e0e0" style="mix-blend-mode:normal"/>
<path d="m-175.9-1515.9v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
<path d="m80.1-1217.2v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
<path d="m-175.9-1217.2v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
<path d="m-431.9-1515.9v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024" height="1024" version="1.1" viewBox="0 0 270.93 270.93" xmlns="http://www.w3.org/2000/svg">
<path d="m-2.5e-6 -2.5e-6v270.93h270.93v-270.93z" fill="#0083c3" stroke-width=".26458" style="mix-blend-mode:normal"/>
<g fill="#fff" fill-opacity=".25">
<g transform="matrix(.12402 0 0 .12402 71.967 73.674)" stroke-width="4.7887">
<path d="m405.33 234.66v256h469.33v-256z" style="mix-blend-mode:normal"/>
<path d="m661.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
<path d="m405.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
<path d="m149.33 234.66v554.67h213.33v-554.67z" style="mix-blend-mode:normal"/>
</g>
<g stroke-width=".26458" aria-label="Docking">
<path d="m100.07 182.94q0 2.7805-1.5208 4.1938-1.5054 1.3979-4.2091 1.3979h-3.057v-10.968h3.3796q1.6437 0 2.8573 0.61447 1.2289 0.61446 1.8895 1.8127 0.66055 1.1982 0.66055 2.9494zm-1.4594 0.0461q0-2.1967-1.0907-3.2106-1.0753-1.0292-3.057-1.0292h-1.7973v8.6026h1.4901q4.4549 0 4.4549-4.3627z"/>
<path d="m114.84 184.4q0 2.0431-1.0446 3.1645-1.0292 1.1214-2.7958 1.1214-1.0907 0-1.9509-0.49158-0.84489-0.50693-1.3365-1.4594-0.49158-0.96778-0.49158-2.335 0-2.0431 1.0139-3.1491 1.0292-1.106 2.8112-1.106 1.106 0 1.9663 0.50694 0.86026 0.49157 1.3365 1.444 0.49158 0.93706 0.49158 2.3042zm-6.2215 0q0 1.4594 0.56838 2.3196 0.58374 0.84489 1.8434 0.84489 1.2443 0 1.828-0.84489 0.58374-0.86025 0.58374-2.3196 0-1.4594-0.58374-2.2889-0.58375-0.82953-1.8434-0.82953t-1.828 0.82953-0.56838 2.2889z"/>
<path d="m125.64 188.69q-1.106 0-1.9509-0.44549-0.84489-0.44549-1.3365-1.3826-0.47622-0.93707-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50693-0.95243 1.3826-1.3979t1.9817-0.44549q0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41477 1.1214q-0.36868-0.13826-0.86025-0.26115-0.49158-0.1229-0.9217-0.1229-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13825 0.95242-0.33795v1.1982q-0.41476 0.21506-0.9217 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
<path d="m136.4 176.86v6.0986q0 0.24579-0.0307 0.6452-0.0154 0.3994-0.0307 0.69127h0.0614q0.0922-0.12289 0.27651-0.35332 0.18434-0.23042 0.36868-0.46085 0.19971-0.24578 0.33796-0.3994l2.6268-2.7805h1.5823l-3.3335 3.5178 3.5639 4.716h-1.6283l-2.8573-3.8404-0.93707 0.81417v3.0262h-1.3365v-11.675z"/>
<path d="m149.32 177.22q0.30724 0 0.53766 0.21506 0.24579 0.1997 0.24579 0.64519t-0.24579 0.66056q-0.23042 0.1997-0.53766 0.1997-0.33795 0-0.56838-0.1997-0.23042-0.21507-0.23042-0.66056t0.23042-0.64519q0.23043-0.21506 0.56838-0.21506zm0.66056 3.0877v8.2339h-1.3518v-8.2339z"/>
<path d="m161.92 180.15q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808-0.5223 0.76809-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95242 0.70664-0.3226 1.4901-0.3226z"/>
<path d="m175.73 180.15q0.81417 0 1.4594 0.30724 0.66055 0.30723 1.1214 0.93706h0.0768l0.18434-1.0907h1.0753v8.3721q0 1.7666-0.90634 2.6576-0.89098 0.89098-2.7805 0.89098-1.8127 0-2.9648-0.5223v-1.2443q1.2136 0.6452 3.0416 0.6452 1.06 0 1.6591-0.62983 0.61447-0.61447 0.61447-1.6898v-0.3226q0-0.18434 0.0154-0.52229 0.0154-0.35332 0.0307-0.49158h-0.0615q-0.82953 1.2443-2.55 1.2443-1.5976 0-2.504-1.1214-0.89098-1.1214-0.89098-3.1338 0-1.9663 0.89098-3.1184 0.90634-1.1675 2.4886-1.1675zm0.18434 1.1368q-1.0292 0-1.5976 0.82953-0.56838 0.81417-0.56838 2.335t0.55302 2.335q0.55302 0.79881 1.6437 0.79881 1.2443 0 1.8127-0.66056 0.56838-0.67591 0.56838-2.166v-0.32259q0-1.6744-0.58374-2.4118-0.58375-0.73736-1.828-0.73736z"/>
</g>
<g stroke-width=".26458" aria-label="Qt Advanced ">
<path d="m100.61 89.668q0 2.0124-0.81417 3.441-0.79881 1.4133-2.3811 1.9356l2.6269 2.7344h-1.9817l-2.1199-2.4732q-0.09217 0-0.1997 0-0.09217 0.01536-0.18434 0.01536-1.7051 0-2.8419-0.70664-1.1214-0.70664-1.6744-1.9817-0.55302-1.275-0.55302-2.9802 0-1.6744 0.55302-2.9341 0.55302-1.275 1.6744-1.9817 1.1368-0.70664 2.8573-0.70664 1.6437 0 2.7651 0.70664 1.1214 0.69128 1.6898 1.9663 0.58374 1.2597 0.58374 2.9648zm-8.664 0q0 2.0738 0.87562 3.272 0.87562 1.1829 2.7344 1.1829 1.8588 0 2.719-1.1829 0.87562-1.1982 0.87562-3.272 0-2.0738-0.86026-3.2413-0.86026-1.1829-2.719-1.1829-1.8741 0-2.7497 1.1829-0.87562 1.1675-0.87562 3.2413z"/>
<path d="m105.6 94.215q0.30723 0 0.62983-0.04609 0.32259-0.04609 0.52229-0.12289v1.0292q-0.21506 0.10753-0.61446 0.16898-0.39941 0.07681-0.76809 0.07681-0.64519 0-1.1982-0.21506-0.53766-0.23042-0.87562-0.78345-0.33796-0.55302-0.33796-1.5515v-4.7929h-1.1675v-0.64519l1.1829-0.53766 0.53766-1.7512h0.7988v1.8895h2.3811v1.0446h-2.3811v4.7621q0 0.75272 0.35332 1.1214 0.36868 0.35332 0.93707 0.35332z"/>
<path d="m119.46 95.168-1.3211-3.3949h-4.3474l-1.3058 3.3949h-1.3979l4.2859-11.014h1.2443l4.2706 11.014zm-1.7359-4.6239-1.2289-3.3181q-0.0461-0.12289-0.15362-0.44549-0.10753-0.3226-0.21507-0.66055-0.0922-0.35332-0.15361-0.53766-0.1229 0.47621-0.26115 0.93706-0.12289 0.44549-0.21507 0.70664l-1.2443 3.3181z"/>
<path d="m125.13 95.321q-1.5362 0-2.4579-1.06-0.9217-1.0753-0.9217-3.1952t0.9217-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98314 0.89098-0.61447 0.36868-1.5823 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50694-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
<path d="m133.47 95.168-3.1184-8.2339h1.444l1.7512 4.8543q0.12289 0.33796 0.26115 0.75272 0.13825 0.41477 0.24579 0.79881 0.10753 0.38404 0.15361 0.62983h0.0615q0.0461-0.24579 0.16898-0.62983 0.12289-0.3994 0.26115-0.79881 0.13825-0.41477 0.26115-0.75272l1.7512-4.8543h1.444l-3.1338 8.2339z"/>
<path d="m142.58 86.796q1.5054 0 2.2274 0.66055 0.722 0.66055 0.722 2.1046v5.607h-0.98315l-0.26115-1.1675h-0.0615q-0.53766 0.67591-1.1368 0.99851-0.59911 0.3226-1.6283 0.3226-1.1214 0-1.8588-0.58374-0.73736-0.59911-0.73736-1.8588 0-1.2289 0.96778-1.8895 0.96779-0.67591 2.9802-0.73736l1.3979-0.04609v-0.49158q0-1.0292-0.44549-1.4286t-1.2597-0.3994q-0.64519 0-1.2289 0.1997-0.58374 0.18434-1.0907 0.43013l-0.41476-1.0139q0.53766-0.29187 1.275-0.49158 0.73736-0.21506 1.5362-0.21506zm1.613 4.3474-1.2136 0.04609q-1.5362 0.06145-2.1353 0.49157-0.58375 0.43013-0.58375 1.2136 0 0.69128 0.41477 1.0139 0.43013 0.3226 1.0907 0.3226 1.0292 0 1.7205-0.56838 0.70664-0.58374 0.70664-1.782z"/>
<path d="m152.04 86.78q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808t-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95243 0.70663-0.3226 1.4901-0.3226z"/>
<path d="m160.87 95.321q-1.106 0-1.9509-0.44549-0.8449-0.44549-1.3365-1.3826-0.47622-0.93706-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50694-0.95243 1.3826-1.3979 0.87562-0.44549 1.9817-0.44549 0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41476 1.1214q-0.36869-0.13826-0.86026-0.26115-0.49157-0.12289-0.9217-0.12289-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13826 0.95243-0.33796v1.1982q-0.41477 0.21506-0.92171 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
<path d="m168.13 86.78q1.0446 0 1.8127 0.46085 0.76809 0.46085 1.1675 1.3057 0.41477 0.82953 0.41477 1.9509v0.81417h-5.6378q0.0307 1.3979 0.70664 2.1353 0.69128 0.722 1.9202 0.722 0.78345 0 1.3826-0.13826 0.61447-0.15362 1.2597-0.43013v1.1829q-0.62983 0.27651-1.2443 0.3994-0.61447 0.13826-1.4594 0.13826-1.1828 0-2.0738-0.47621t-1.3979-1.4133q-0.49157-0.93706-0.49157-2.3196 0-1.3518 0.44549-2.3196 0.46085-0.96779 1.275-1.4901 0.82953-0.5223 1.9202-0.5223zm-0.0154 1.106q-0.96779 0-1.5362 0.62983-0.55302 0.61447-0.66055 1.7205h4.1937q-0.0154-1.0446-0.49157-1.6898-0.47622-0.66055-1.5054-0.66055z"/>
<path d="m176.53 95.321q-1.5362 0-2.4579-1.06-0.92171-1.0753-0.92171-3.1952t0.92171-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98315 0.89098-0.61446 0.36868-1.5822 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50693-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1024"
height="1024"
viewBox="0 0 270.93333 270.93333"
version="1.1"
id="svg506"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="ads_tile_blue_light.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview508"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="false"
inkscape:zoom="0.77111176"
inkscape:cx="450.64804"
inkscape:cy="534.2935"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs503" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="path16513"
style="mix-blend-mode:normal;fill:#009ddd;fill-opacity:1;fill-rule:nonzero;stroke-width:0.264583"
d="M -2.5e-6,-2.5e-6 V 270.93333 H 270.93333 V -2.5e-6 Z" />
<g
id="g1224"
transform="matrix(0.12402399,0,0,0.12402399,71.967002,73.673805)"
style="fill:#ffffff;fill-opacity:0.25;stroke-width:2.13332">
<path
id="path927"
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
d="m 405.32995,234.66 v 256 h 469.3301 v -256 z" />
<path
id="path16513-9"
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
d="M 661.32995,533.3299 V 789.32994 H 874.66003 V 533.3299 Z" />
<path
id="path16513-5"
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
d="m 405.32995,533.33 v 256 h 213.33008 v -256 z" />
<path
id="path24788"
style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:0.25;fill-rule:nonzero;stroke-width:4.7887"
d="M 149.32995,234.66 V 789.32994 H 362.66003 V 234.66 Z" />
</g>
<g
aria-label="Docking"
id="text2150"
style="font-size:15.3617px;line-height:1.05;fill:#ffffff;stroke-width:0.264583;fill-opacity:0.25">
<path
d="m 100.07327,182.94499 q 0,2.78047 -1.520805,4.19375 -1.505447,1.39791 -4.209106,1.39791 H 91.286381 V 177.5684 h 3.379574 q 1.643702,0 2.857276,0.61447 1.228936,0.61446 1.889489,1.81268 0.66055,1.19821 0.66055,2.94944 z m -1.459358,0.0461 q 0,-2.19673 -1.090681,-3.2106 -1.075319,-1.02923 -3.056978,-1.02923 h -1.797319 v 8.60255 h 1.490085 q 4.454893,0 4.454893,-4.36272 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2539" />
<path
d="m 114.83588,184.40435 q 0,2.04311 -1.0446,3.16451 -1.02923,1.12141 -2.79583,1.12141 -1.09068,0 -1.95094,-0.49158 -0.84489,-0.50693 -1.33646,-1.45936 -0.49158,-0.96778 -0.49158,-2.33498 0,-2.0431 1.01387,-3.14914 1.02924,-1.10605 2.8112,-1.10605 1.10604,0 1.96629,0.50694 0.86026,0.49157 1.33647,1.444 0.49158,0.93706 0.49158,2.30425 z m -6.22149,0 q 0,1.45937 0.56838,2.31962 0.58374,0.84489 1.8434,0.84489 1.2443,0 1.82805,-0.84489 0.58374,-0.86025 0.58374,-2.31962 0,-1.45936 -0.58374,-2.28889 -0.58375,-0.82953 -1.84341,-0.82953 -1.25966,0 -1.82804,0.82953 -0.56838,0.82953 -0.56838,2.28889 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2541" />
<path
d="m 125.63516,188.69027 q -1.10604,0 -1.95094,-0.44549 -0.84489,-0.44549 -1.33646,-1.38255 -0.47622,-0.93707 -0.47622,-2.39643 0,-1.52081 0.49158,-2.47323 0.50693,-0.95243 1.38255,-1.39792 0.87562,-0.44549 1.98166,-0.44549 0.61447,0 1.19821,0.13826 0.59911,0.12289 0.96779,0.30723 l -0.41477,1.12141 q -0.36868,-0.13826 -0.86025,-0.26115 -0.49158,-0.1229 -0.9217,-0.1229 -2.42715,0 -2.42715,3.11843 0,1.49008 0.58374,2.28889 0.59911,0.78345 1.7666,0.78345 0.66055,0 1.18285,-0.13826 0.5223,-0.13825 0.95242,-0.33795 v 1.19821 q -0.41476,0.21506 -0.9217,0.3226 -0.49157,0.12289 -1.19821,0.12289 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2543" />
<path
d="m 136.40372,176.86176 v 6.09859 q 0,0.24579 -0.0307,0.6452 -0.0154,0.3994 -0.0307,0.69127 h 0.0614 q 0.0922,-0.12289 0.27651,-0.35332 0.18434,-0.23042 0.36868,-0.46085 0.19971,-0.24578 0.33796,-0.3994 l 2.62685,-2.78047 h 1.58226 l -3.33349,3.51783 3.56391,4.71604 h -1.62834 l -2.85727,-3.84042 -0.93707,0.81417 v 3.02625 h -1.33647 v -11.67489 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2545" />
<path
d="m 149.32293,177.21508 q 0.30724,0 0.53766,0.21506 0.24579,0.1997 0.24579,0.64519 0,0.44549 -0.24579,0.66056 -0.23042,0.1997 -0.53766,0.1997 -0.33795,0 -0.56838,-0.1997 -0.23042,-0.21507 -0.23042,-0.66056 0,-0.44549 0.23042,-0.64519 0.23043,-0.21506 0.56838,-0.21506 z m 0.66056,3.0877 v 8.23387 h -1.35183 v -8.23387 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2547" />
<path
d="m 161.91954,180.14916 q 1.47472,0 2.22745,0.722 0.75272,0.722 0.75272,2.30426 v 5.36123 h -1.33647 v -5.26906 q 0,-1.98166 -1.8434,-1.98166 -1.36719,0 -1.88949,0.76808 -0.5223,0.76809 -0.5223,2.21209 v 4.27055 h -1.35183 v -8.23387 h 1.09068 l 0.1997,1.1214 h 0.0768 q 0.39941,-0.64519 1.10604,-0.95242 0.70664,-0.3226 1.49009,-0.3226 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2549" />
<path
d="m 175.72973,180.14916 q 0.81417,0 1.45936,0.30724 0.66055,0.30723 1.1214,0.93706 h 0.0768 l 0.18434,-1.09068 h 1.07532 v 8.37213 q 0,1.76659 -0.90634,2.65757 -0.89098,0.89098 -2.78047,0.89098 -1.81268,0 -2.96481,-0.5223 v -1.2443 q 1.21358,0.6452 3.04162,0.6452 1.05996,0 1.65906,-0.62983 0.61447,-0.61447 0.61447,-1.68979 v -0.3226 q 0,-0.18434 0.0154,-0.52229 0.0154,-0.35332 0.0307,-0.49158 h -0.0615 q -0.82953,1.2443 -2.55004,1.2443 -1.59762,0 -2.50396,-1.12141 -0.89098,-1.1214 -0.89098,-3.13378 0,-1.9663 0.89098,-3.11843 0.90634,-1.16749 2.4886,-1.16749 z m 0.18434,1.13677 q -1.02924,0 -1.59762,0.82953 -0.56838,0.81417 -0.56838,2.33498 0,1.52081 0.55302,2.33498 0.55302,0.79881 1.6437,0.79881 1.2443,0 1.81268,-0.66056 0.56838,-0.67591 0.56838,-2.166 v -0.32259 q 0,-1.67443 -0.58374,-2.41179 -0.58375,-0.73736 -1.82804,-0.73736 z"
style="text-align:center;letter-spacing:5.36125px;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2551" />
</g>
<g
aria-label="Qt Advanced
"
id="text2150-1"
style="font-size:15.3617px;line-height:1.05;fill:#ffffff;stroke-width:0.264583;fill-opacity:0.25">
<path
d="m 100.61097,89.66819 q 0,2.012383 -0.814169,3.441021 -0.798808,1.413276 -2.381063,1.935574 l 2.626852,2.734383 h -1.981661 l -2.119914,-2.473234 q -0.09217,0 -0.199702,0 -0.09217,0.01536 -0.184341,0.01536 -1.705148,0 -2.841914,-0.706638 -1.121404,-0.706639 -1.674426,-1.98166 -0.553021,-1.275021 -0.553021,-2.980169 0,-1.674426 0.553021,-2.934085 0.553022,-1.275021 1.674426,-1.98166 1.136766,-0.706638 2.857276,-0.706638 1.643702,0 2.765106,0.706638 1.121404,0.691277 1.68979,1.966298 0.58374,1.25966 0.58374,2.964808 z m -8.663997,0 q 0,2.07383 0.875617,3.272042 0.875617,1.182851 2.734382,1.182851 1.858766,0 2.719021,-1.182851 0.875617,-1.198212 0.875617,-3.272042 0,-2.073829 -0.860255,-3.241318 -0.860255,-1.182851 -2.719021,-1.182851 -1.874127,0 -2.749744,1.182851 -0.875617,1.167489 -0.875617,3.241318 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2518" />
<path
d="m 105.60353,94.215253 q 0.30723,0 0.62983,-0.04609 0.32259,-0.04609 0.52229,-0.122893 v 1.029234 q -0.21506,0.107532 -0.61446,0.168978 -0.39941,0.07681 -0.76809,0.07681 -0.64519,0 -1.19821,-0.215064 -0.53766,-0.230425 -0.87562,-0.783447 -0.33796,-0.553021 -0.33796,-1.551531 v -4.792851 h -1.16749 v -0.645191 l 1.18286,-0.53766 0.53766,-1.751234 h 0.7988 v 1.88949 h 2.38107 v 1.044595 h -2.38107 v 4.762127 q 0,0.752724 0.35332,1.121404 0.36868,0.353319 0.93707,0.353319 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2520" />
<path
d="m 119.45978,95.167679 -1.3211,-3.394936 h -4.34736 l -1.30575,3.394936 h -1.39791 l 4.28591,-11.014339 h 1.2443 l 4.27055,11.014339 z m -1.73587,-4.623872 -1.22893,-3.318127 q -0.0461,-0.122894 -0.15362,-0.445489 -0.10753,-0.322596 -0.21507,-0.660554 -0.0922,-0.353319 -0.15361,-0.537659 -0.1229,0.476213 -0.26115,0.937064 -0.12289,0.445489 -0.21507,0.706638 l -1.24429,3.318127 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2522" />
<path
d="m 125.12825,95.321296 q -1.53617,0 -2.45787,-1.059957 -0.9217,-1.075319 -0.9217,-3.195234 0,-2.119915 0.9217,-3.195234 0.93706,-1.09068 2.47323,-1.09068 0.95243,0 1.55153,0.353319 0.61447,0.353319 0.99851,0.860255 h 0.0922 q -0.0307,-0.199702 -0.0614,-0.583745 -0.0307,-0.399404 -0.0307,-0.629829 v -3.287404 h 1.35183 v 11.674892 h -1.09068 l -0.1997,-1.106043 h -0.0614 q -0.36868,0.522298 -0.98314,0.890979 -0.61447,0.368681 -1.58226,0.368681 z m 0.21506,-1.121404 q 1.30575,0 1.82805,-0.706638 0.53766,-0.722 0.53766,-2.166 v -0.245787 q 0,-1.53617 -0.50694,-2.35034 -0.50694,-0.829532 -1.87413,-0.829532 -1.09068,0 -1.6437,0.875617 -0.53766,0.860255 -0.53766,2.319616 0,1.474724 0.53766,2.288894 0.55302,0.81417 1.65906,0.81417 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2524" />
<path
d="m 133.46965,95.167679 -3.11842,-8.233871 h 1.444 l 1.75123,4.854297 q 0.12289,0.337957 0.26115,0.752723 0.13825,0.414766 0.24579,0.798809 0.10753,0.384042 0.15361,0.629829 h 0.0615 q 0.0461,-0.245787 0.16898,-0.629829 0.12289,-0.399405 0.26115,-0.798809 0.13825,-0.414766 0.26115,-0.752723 l 1.75123,-4.854297 h 1.444 l -3.13379,8.233871 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2526" />
<path
d="m 142.57913,86.795552 q 1.50545,0 2.22745,0.660553 0.722,0.660554 0.722,2.104553 v 5.607021 h -0.98315 l -0.26115,-1.167489 h -0.0615 q -0.53766,0.675914 -1.13676,0.99851 -0.59911,0.322596 -1.62834,0.322596 -1.12141,0 -1.85877,-0.583745 -0.73736,-0.599106 -0.73736,-1.858765 0,-1.228936 0.96778,-1.88949 0.96779,-0.675914 2.98017,-0.737361 l 1.39792,-0.04609 V 89.71427 q 0,-1.029234 -0.44549,-1.428638 -0.44549,-0.399404 -1.25966,-0.399404 -0.64519,0 -1.22894,0.199702 -0.58374,0.184341 -1.09068,0.430128 l -0.41476,-1.013872 q 0.53766,-0.291873 1.27502,-0.491575 0.73736,-0.215064 1.53617,-0.215064 z m 1.61298,4.347361 -1.21358,0.04609 q -1.53617,0.06145 -2.13527,0.491574 -0.58375,0.430128 -0.58375,1.213574 0,0.691277 0.41477,1.013872 0.43013,0.322596 1.09068,0.322596 1.02923,0 1.72051,-0.568383 0.70664,-0.583744 0.70664,-1.781957 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2528" />
<path
d="m 152.04195,86.780191 q 1.47472,0 2.22745,0.722 0.75272,0.721999 0.75272,2.304255 v 5.361233 h -1.33647 v -5.269063 q 0,-1.98166 -1.8434,-1.98166 -1.36719,0 -1.88949,0.768085 -0.5223,0.768085 -0.5223,2.212085 v 4.270553 h -1.35183 v -8.233871 h 1.09068 l 0.1997,1.121404 h 0.0768 q 0.39941,-0.645192 1.10605,-0.952426 0.70663,-0.322595 1.49008,-0.322595 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2530" />
<path
d="m 160.87493,95.321296 q -1.10604,0 -1.95093,-0.445489 -0.8449,-0.44549 -1.33647,-1.382553 -0.47622,-0.937064 -0.47622,-2.396426 0,-1.520808 0.49158,-2.473233 0.50694,-0.952426 1.38255,-1.397915 0.87562,-0.445489 1.98166,-0.445489 0.61447,0 1.19821,0.138255 0.59911,0.122894 0.96779,0.307234 l -0.41476,1.121404 q -0.36869,-0.138255 -0.86026,-0.261149 -0.49157,-0.122893 -0.9217,-0.122893 -2.42715,0 -2.42715,3.118425 0,1.490085 0.58374,2.288893 0.59911,0.783447 1.7666,0.783447 0.66055,0 1.18285,-0.138256 0.5223,-0.138255 0.95243,-0.337957 v 1.198213 q -0.41477,0.215063 -0.92171,0.322595 -0.49157,0.122894 -1.19821,0.122894 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2532" />
<path
d="m 168.12564,86.780191 q 1.0446,0 1.81268,0.460851 0.76809,0.460851 1.16749,1.305744 0.41477,0.829532 0.41477,1.950936 v 0.81417 h -5.63775 q 0.0307,1.397915 0.70664,2.135276 0.69128,0.722 1.92021,0.722 0.78345,0 1.38256,-0.138255 0.61447,-0.153617 1.25966,-0.430128 v 1.182851 q -0.62983,0.276511 -1.2443,0.399405 -0.61447,0.138255 -1.45936,0.138255 -1.18285,0 -2.07383,-0.476213 -0.89098,-0.476213 -1.39792,-1.413276 -0.49157,-0.937064 -0.49157,-2.319617 0,-1.35183 0.44549,-2.319617 0.46085,-0.967787 1.27502,-1.490085 0.82953,-0.522297 1.92021,-0.522297 z m -0.0154,1.106042 q -0.96779,0 -1.53617,0.62983 -0.55302,0.614468 -0.66055,1.72051 h 4.19374 q -0.0154,-1.044595 -0.49157,-1.689787 -0.47622,-0.660553 -1.50545,-0.660553 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2534" />
<path
d="m 176.52848,95.321296 q -1.53617,0 -2.45787,-1.059957 -0.92171,-1.075319 -0.92171,-3.195234 0,-2.119915 0.92171,-3.195234 0.93706,-1.09068 2.47323,-1.09068 0.95243,0 1.55153,0.353319 0.61447,0.353319 0.99851,0.860255 h 0.0922 q -0.0307,-0.199702 -0.0614,-0.583745 -0.0307,-0.399404 -0.0307,-0.629829 v -3.287404 h 1.35183 v 11.674892 h -1.09068 l -0.1997,-1.106043 h -0.0614 q -0.36868,0.522298 -0.98315,0.890979 -0.61446,0.368681 -1.58225,0.368681 z m 0.21506,-1.121404 q 1.30575,0 1.82804,-0.706638 0.53766,-0.722 0.53766,-2.166 v -0.245787 q 0,-1.53617 -0.50693,-2.35034 -0.50694,-0.829532 -1.87413,-0.829532 -1.09068,0 -1.6437,0.875617 -0.53766,0.860255 -0.53766,2.319616 0,1.474724 0.53766,2.288894 0.55302,0.81417 1.65906,0.81417 z"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:0.25"
id="path2536" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024" height="1024" version="1.1" viewBox="0 0 270.93 270.93" xmlns="http://www.w3.org/2000/svg">
<path d="m-2.5e-6 -2.5e-6v270.93h270.93v-270.93z" fill="#accb01" stroke-width=".26458" style="mix-blend-mode:normal"/>
<g fill="#fff" fill-opacity=".25">
<g transform="matrix(.12402 0 0 .12402 71.967 73.674)" stroke-width="4.7887">
<path d="m405.33 234.66v256h469.33v-256z" style="mix-blend-mode:normal"/>
<path d="m661.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
<path d="m405.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
<path d="m149.33 234.66v554.67h213.33v-554.67z" style="mix-blend-mode:normal"/>
</g>
<g stroke-width=".26458" aria-label="Docking">
<path d="m100.07 182.94q0 2.7805-1.5208 4.1938-1.5054 1.3979-4.2091 1.3979h-3.057v-10.968h3.3796q1.6437 0 2.8573 0.61447 1.2289 0.61446 1.8895 1.8127 0.66055 1.1982 0.66055 2.9494zm-1.4594 0.0461q0-2.1967-1.0907-3.2106-1.0753-1.0292-3.057-1.0292h-1.7973v8.6026h1.4901q4.4549 0 4.4549-4.3627z"/>
<path d="m114.84 184.4q0 2.0431-1.0446 3.1645-1.0292 1.1214-2.7958 1.1214-1.0907 0-1.9509-0.49158-0.84489-0.50693-1.3365-1.4594-0.49158-0.96778-0.49158-2.335 0-2.0431 1.0139-3.1491 1.0292-1.106 2.8112-1.106 1.106 0 1.9663 0.50694 0.86026 0.49157 1.3365 1.444 0.49158 0.93706 0.49158 2.3042zm-6.2215 0q0 1.4594 0.56838 2.3196 0.58374 0.84489 1.8434 0.84489 1.2443 0 1.828-0.84489 0.58374-0.86025 0.58374-2.3196 0-1.4594-0.58374-2.2889-0.58375-0.82953-1.8434-0.82953t-1.828 0.82953-0.56838 2.2889z"/>
<path d="m125.64 188.69q-1.106 0-1.9509-0.44549-0.84489-0.44549-1.3365-1.3826-0.47622-0.93707-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50693-0.95243 1.3826-1.3979t1.9817-0.44549q0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41477 1.1214q-0.36868-0.13826-0.86025-0.26115-0.49158-0.1229-0.9217-0.1229-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13825 0.95242-0.33795v1.1982q-0.41476 0.21506-0.9217 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
<path d="m136.4 176.86v6.0986q0 0.24579-0.0307 0.6452-0.0154 0.3994-0.0307 0.69127h0.0614q0.0922-0.12289 0.27651-0.35332 0.18434-0.23042 0.36868-0.46085 0.19971-0.24578 0.33796-0.3994l2.6268-2.7805h1.5823l-3.3335 3.5178 3.5639 4.716h-1.6283l-2.8573-3.8404-0.93707 0.81417v3.0262h-1.3365v-11.675z"/>
<path d="m149.32 177.22q0.30724 0 0.53766 0.21506 0.24579 0.1997 0.24579 0.64519t-0.24579 0.66056q-0.23042 0.1997-0.53766 0.1997-0.33795 0-0.56838-0.1997-0.23042-0.21507-0.23042-0.66056t0.23042-0.64519q0.23043-0.21506 0.56838-0.21506zm0.66056 3.0877v8.2339h-1.3518v-8.2339z"/>
<path d="m161.92 180.15q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808-0.5223 0.76809-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95242 0.70664-0.3226 1.4901-0.3226z"/>
<path d="m175.73 180.15q0.81417 0 1.4594 0.30724 0.66055 0.30723 1.1214 0.93706h0.0768l0.18434-1.0907h1.0753v8.3721q0 1.7666-0.90634 2.6576-0.89098 0.89098-2.7805 0.89098-1.8127 0-2.9648-0.5223v-1.2443q1.2136 0.6452 3.0416 0.6452 1.06 0 1.6591-0.62983 0.61447-0.61447 0.61447-1.6898v-0.3226q0-0.18434 0.0154-0.52229 0.0154-0.35332 0.0307-0.49158h-0.0615q-0.82953 1.2443-2.55 1.2443-1.5976 0-2.504-1.1214-0.89098-1.1214-0.89098-3.1338 0-1.9663 0.89098-3.1184 0.90634-1.1675 2.4886-1.1675zm0.18434 1.1368q-1.0292 0-1.5976 0.82953-0.56838 0.81417-0.56838 2.335t0.55302 2.335q0.55302 0.79881 1.6437 0.79881 1.2443 0 1.8127-0.66056 0.56838-0.67591 0.56838-2.166v-0.32259q0-1.6744-0.58374-2.4118-0.58375-0.73736-1.828-0.73736z"/>
</g>
<g stroke-width=".26458" aria-label="Qt Advanced ">
<path d="m100.61 89.668q0 2.0124-0.81417 3.441-0.79881 1.4133-2.3811 1.9356l2.6269 2.7344h-1.9817l-2.1199-2.4732q-0.09217 0-0.1997 0-0.09217 0.01536-0.18434 0.01536-1.7051 0-2.8419-0.70664-1.1214-0.70664-1.6744-1.9817-0.55302-1.275-0.55302-2.9802 0-1.6744 0.55302-2.9341 0.55302-1.275 1.6744-1.9817 1.1368-0.70664 2.8573-0.70664 1.6437 0 2.7651 0.70664 1.1214 0.69128 1.6898 1.9663 0.58374 1.2597 0.58374 2.9648zm-8.664 0q0 2.0738 0.87562 3.272 0.87562 1.1829 2.7344 1.1829 1.8588 0 2.719-1.1829 0.87562-1.1982 0.87562-3.272 0-2.0738-0.86026-3.2413-0.86026-1.1829-2.719-1.1829-1.8741 0-2.7497 1.1829-0.87562 1.1675-0.87562 3.2413z"/>
<path d="m105.6 94.215q0.30723 0 0.62983-0.04609 0.32259-0.04609 0.52229-0.12289v1.0292q-0.21506 0.10753-0.61446 0.16898-0.39941 0.07681-0.76809 0.07681-0.64519 0-1.1982-0.21506-0.53766-0.23042-0.87562-0.78345-0.33796-0.55302-0.33796-1.5515v-4.7929h-1.1675v-0.64519l1.1829-0.53766 0.53766-1.7512h0.7988v1.8895h2.3811v1.0446h-2.3811v4.7621q0 0.75272 0.35332 1.1214 0.36868 0.35332 0.93707 0.35332z"/>
<path d="m119.46 95.168-1.3211-3.3949h-4.3474l-1.3058 3.3949h-1.3979l4.2859-11.014h1.2443l4.2706 11.014zm-1.7359-4.6239-1.2289-3.3181q-0.0461-0.12289-0.15362-0.44549-0.10753-0.3226-0.21507-0.66055-0.0922-0.35332-0.15361-0.53766-0.1229 0.47621-0.26115 0.93706-0.12289 0.44549-0.21507 0.70664l-1.2443 3.3181z"/>
<path d="m125.13 95.321q-1.5362 0-2.4579-1.06-0.9217-1.0753-0.9217-3.1952t0.9217-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98314 0.89098-0.61447 0.36868-1.5823 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50694-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
<path d="m133.47 95.168-3.1184-8.2339h1.444l1.7512 4.8543q0.12289 0.33796 0.26115 0.75272 0.13825 0.41477 0.24579 0.79881 0.10753 0.38404 0.15361 0.62983h0.0615q0.0461-0.24579 0.16898-0.62983 0.12289-0.3994 0.26115-0.79881 0.13825-0.41477 0.26115-0.75272l1.7512-4.8543h1.444l-3.1338 8.2339z"/>
<path d="m142.58 86.796q1.5054 0 2.2274 0.66055 0.722 0.66055 0.722 2.1046v5.607h-0.98315l-0.26115-1.1675h-0.0615q-0.53766 0.67591-1.1368 0.99851-0.59911 0.3226-1.6283 0.3226-1.1214 0-1.8588-0.58374-0.73736-0.59911-0.73736-1.8588 0-1.2289 0.96778-1.8895 0.96779-0.67591 2.9802-0.73736l1.3979-0.04609v-0.49158q0-1.0292-0.44549-1.4286t-1.2597-0.3994q-0.64519 0-1.2289 0.1997-0.58374 0.18434-1.0907 0.43013l-0.41476-1.0139q0.53766-0.29187 1.275-0.49158 0.73736-0.21506 1.5362-0.21506zm1.613 4.3474-1.2136 0.04609q-1.5362 0.06145-2.1353 0.49157-0.58375 0.43013-0.58375 1.2136 0 0.69128 0.41477 1.0139 0.43013 0.3226 1.0907 0.3226 1.0292 0 1.7205-0.56838 0.70664-0.58374 0.70664-1.782z"/>
<path d="m152.04 86.78q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808t-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95243 0.70663-0.3226 1.4901-0.3226z"/>
<path d="m160.87 95.321q-1.106 0-1.9509-0.44549-0.8449-0.44549-1.3365-1.3826-0.47622-0.93706-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50694-0.95243 1.3826-1.3979 0.87562-0.44549 1.9817-0.44549 0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41476 1.1214q-0.36869-0.13826-0.86026-0.26115-0.49157-0.12289-0.9217-0.12289-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13826 0.95243-0.33796v1.1982q-0.41477 0.21506-0.92171 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
<path d="m168.13 86.78q1.0446 0 1.8127 0.46085 0.76809 0.46085 1.1675 1.3057 0.41477 0.82953 0.41477 1.9509v0.81417h-5.6378q0.0307 1.3979 0.70664 2.1353 0.69128 0.722 1.9202 0.722 0.78345 0 1.3826-0.13826 0.61447-0.15362 1.2597-0.43013v1.1829q-0.62983 0.27651-1.2443 0.3994-0.61447 0.13826-1.4594 0.13826-1.1828 0-2.0738-0.47621t-1.3979-1.4133q-0.49157-0.93706-0.49157-2.3196 0-1.3518 0.44549-2.3196 0.46085-0.96779 1.275-1.4901 0.82953-0.5223 1.9202-0.5223zm-0.0154 1.106q-0.96779 0-1.5362 0.62983-0.55302 0.61447-0.66055 1.7205h4.1937q-0.0154-1.0446-0.49157-1.6898-0.47622-0.66055-1.5054-0.66055z"/>
<path d="m176.53 95.321q-1.5362 0-2.4579-1.06-0.92171-1.0753-0.92171-3.1952t0.92171-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98315 0.89098-0.61446 0.36868-1.5822 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50693-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024" height="1024" version="1.1" viewBox="0 0 270.93 270.93" xmlns="http://www.w3.org/2000/svg">
<path d="m-2.5e-6 -2.5e-6v270.93h270.93v-270.93z" fill="#ff9833" stroke-width=".26458" style="mix-blend-mode:normal"/>
<g fill="#fff" fill-opacity=".25">
<g transform="matrix(.12402 0 0 .12402 71.967 73.674)" stroke-width="4.7887">
<path d="m405.33 234.66v256h469.33v-256z" style="mix-blend-mode:normal"/>
<path d="m661.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
<path d="m405.33 533.33v256h213.33v-256z" style="mix-blend-mode:normal"/>
<path d="m149.33 234.66v554.67h213.33v-554.67z" style="mix-blend-mode:normal"/>
</g>
<g stroke-width=".26458" aria-label="Docking">
<path d="m100.07 182.94q0 2.7805-1.5208 4.1938-1.5054 1.3979-4.2091 1.3979h-3.057v-10.968h3.3796q1.6437 0 2.8573 0.61447 1.2289 0.61446 1.8895 1.8127 0.66055 1.1982 0.66055 2.9494zm-1.4594 0.0461q0-2.1967-1.0907-3.2106-1.0753-1.0292-3.057-1.0292h-1.7973v8.6026h1.4901q4.4549 0 4.4549-4.3627z"/>
<path d="m114.84 184.4q0 2.0431-1.0446 3.1645-1.0292 1.1214-2.7958 1.1214-1.0907 0-1.9509-0.49158-0.84489-0.50693-1.3365-1.4594-0.49158-0.96778-0.49158-2.335 0-2.0431 1.0139-3.1491 1.0292-1.106 2.8112-1.106 1.106 0 1.9663 0.50694 0.86026 0.49157 1.3365 1.444 0.49158 0.93706 0.49158 2.3042zm-6.2215 0q0 1.4594 0.56838 2.3196 0.58374 0.84489 1.8434 0.84489 1.2443 0 1.828-0.84489 0.58374-0.86025 0.58374-2.3196 0-1.4594-0.58374-2.2889-0.58375-0.82953-1.8434-0.82953t-1.828 0.82953-0.56838 2.2889z"/>
<path d="m125.64 188.69q-1.106 0-1.9509-0.44549-0.84489-0.44549-1.3365-1.3826-0.47622-0.93707-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50693-0.95243 1.3826-1.3979t1.9817-0.44549q0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41477 1.1214q-0.36868-0.13826-0.86025-0.26115-0.49158-0.1229-0.9217-0.1229-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13825 0.95242-0.33795v1.1982q-0.41476 0.21506-0.9217 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
<path d="m136.4 176.86v6.0986q0 0.24579-0.0307 0.6452-0.0154 0.3994-0.0307 0.69127h0.0614q0.0922-0.12289 0.27651-0.35332 0.18434-0.23042 0.36868-0.46085 0.19971-0.24578 0.33796-0.3994l2.6268-2.7805h1.5823l-3.3335 3.5178 3.5639 4.716h-1.6283l-2.8573-3.8404-0.93707 0.81417v3.0262h-1.3365v-11.675z"/>
<path d="m149.32 177.22q0.30724 0 0.53766 0.21506 0.24579 0.1997 0.24579 0.64519t-0.24579 0.66056q-0.23042 0.1997-0.53766 0.1997-0.33795 0-0.56838-0.1997-0.23042-0.21507-0.23042-0.66056t0.23042-0.64519q0.23043-0.21506 0.56838-0.21506zm0.66056 3.0877v8.2339h-1.3518v-8.2339z"/>
<path d="m161.92 180.15q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808-0.5223 0.76809-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95242 0.70664-0.3226 1.4901-0.3226z"/>
<path d="m175.73 180.15q0.81417 0 1.4594 0.30724 0.66055 0.30723 1.1214 0.93706h0.0768l0.18434-1.0907h1.0753v8.3721q0 1.7666-0.90634 2.6576-0.89098 0.89098-2.7805 0.89098-1.8127 0-2.9648-0.5223v-1.2443q1.2136 0.6452 3.0416 0.6452 1.06 0 1.6591-0.62983 0.61447-0.61447 0.61447-1.6898v-0.3226q0-0.18434 0.0154-0.52229 0.0154-0.35332 0.0307-0.49158h-0.0615q-0.82953 1.2443-2.55 1.2443-1.5976 0-2.504-1.1214-0.89098-1.1214-0.89098-3.1338 0-1.9663 0.89098-3.1184 0.90634-1.1675 2.4886-1.1675zm0.18434 1.1368q-1.0292 0-1.5976 0.82953-0.56838 0.81417-0.56838 2.335t0.55302 2.335q0.55302 0.79881 1.6437 0.79881 1.2443 0 1.8127-0.66056 0.56838-0.67591 0.56838-2.166v-0.32259q0-1.6744-0.58374-2.4118-0.58375-0.73736-1.828-0.73736z"/>
</g>
<g stroke-width=".26458" aria-label="Qt Advanced ">
<path d="m100.61 89.668q0 2.0124-0.81417 3.441-0.79881 1.4133-2.3811 1.9356l2.6269 2.7344h-1.9817l-2.1199-2.4732q-0.09217 0-0.1997 0-0.09217 0.01536-0.18434 0.01536-1.7051 0-2.8419-0.70664-1.1214-0.70664-1.6744-1.9817-0.55302-1.275-0.55302-2.9802 0-1.6744 0.55302-2.9341 0.55302-1.275 1.6744-1.9817 1.1368-0.70664 2.8573-0.70664 1.6437 0 2.7651 0.70664 1.1214 0.69128 1.6898 1.9663 0.58374 1.2597 0.58374 2.9648zm-8.664 0q0 2.0738 0.87562 3.272 0.87562 1.1829 2.7344 1.1829 1.8588 0 2.719-1.1829 0.87562-1.1982 0.87562-3.272 0-2.0738-0.86026-3.2413-0.86026-1.1829-2.719-1.1829-1.8741 0-2.7497 1.1829-0.87562 1.1675-0.87562 3.2413z"/>
<path d="m105.6 94.215q0.30723 0 0.62983-0.04609 0.32259-0.04609 0.52229-0.12289v1.0292q-0.21506 0.10753-0.61446 0.16898-0.39941 0.07681-0.76809 0.07681-0.64519 0-1.1982-0.21506-0.53766-0.23042-0.87562-0.78345-0.33796-0.55302-0.33796-1.5515v-4.7929h-1.1675v-0.64519l1.1829-0.53766 0.53766-1.7512h0.7988v1.8895h2.3811v1.0446h-2.3811v4.7621q0 0.75272 0.35332 1.1214 0.36868 0.35332 0.93707 0.35332z"/>
<path d="m119.46 95.168-1.3211-3.3949h-4.3474l-1.3058 3.3949h-1.3979l4.2859-11.014h1.2443l4.2706 11.014zm-1.7359-4.6239-1.2289-3.3181q-0.0461-0.12289-0.15362-0.44549-0.10753-0.3226-0.21507-0.66055-0.0922-0.35332-0.15361-0.53766-0.1229 0.47621-0.26115 0.93706-0.12289 0.44549-0.21507 0.70664l-1.2443 3.3181z"/>
<path d="m125.13 95.321q-1.5362 0-2.4579-1.06-0.9217-1.0753-0.9217-3.1952t0.9217-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98314 0.89098-0.61447 0.36868-1.5823 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50694-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
<path d="m133.47 95.168-3.1184-8.2339h1.444l1.7512 4.8543q0.12289 0.33796 0.26115 0.75272 0.13825 0.41477 0.24579 0.79881 0.10753 0.38404 0.15361 0.62983h0.0615q0.0461-0.24579 0.16898-0.62983 0.12289-0.3994 0.26115-0.79881 0.13825-0.41477 0.26115-0.75272l1.7512-4.8543h1.444l-3.1338 8.2339z"/>
<path d="m142.58 86.796q1.5054 0 2.2274 0.66055 0.722 0.66055 0.722 2.1046v5.607h-0.98315l-0.26115-1.1675h-0.0615q-0.53766 0.67591-1.1368 0.99851-0.59911 0.3226-1.6283 0.3226-1.1214 0-1.8588-0.58374-0.73736-0.59911-0.73736-1.8588 0-1.2289 0.96778-1.8895 0.96779-0.67591 2.9802-0.73736l1.3979-0.04609v-0.49158q0-1.0292-0.44549-1.4286t-1.2597-0.3994q-0.64519 0-1.2289 0.1997-0.58374 0.18434-1.0907 0.43013l-0.41476-1.0139q0.53766-0.29187 1.275-0.49158 0.73736-0.21506 1.5362-0.21506zm1.613 4.3474-1.2136 0.04609q-1.5362 0.06145-2.1353 0.49157-0.58375 0.43013-0.58375 1.2136 0 0.69128 0.41477 1.0139 0.43013 0.3226 1.0907 0.3226 1.0292 0 1.7205-0.56838 0.70664-0.58374 0.70664-1.782z"/>
<path d="m152.04 86.78q1.4747 0 2.2274 0.722 0.75272 0.722 0.75272 2.3043v5.3612h-1.3365v-5.2691q0-1.9817-1.8434-1.9817-1.3672 0-1.8895 0.76808t-0.5223 2.2121v4.2706h-1.3518v-8.2339h1.0907l0.1997 1.1214h0.0768q0.39941-0.64519 1.106-0.95243 0.70663-0.3226 1.4901-0.3226z"/>
<path d="m160.87 95.321q-1.106 0-1.9509-0.44549-0.8449-0.44549-1.3365-1.3826-0.47622-0.93706-0.47622-2.3964 0-1.5208 0.49158-2.4732 0.50694-0.95243 1.3826-1.3979 0.87562-0.44549 1.9817-0.44549 0.61447 0 1.1982 0.13826 0.59911 0.12289 0.96779 0.30723l-0.41476 1.1214q-0.36869-0.13826-0.86026-0.26115-0.49157-0.12289-0.9217-0.12289-2.4272 0-2.4272 3.1184 0 1.4901 0.58374 2.2889 0.59911 0.78345 1.7666 0.78345 0.66055 0 1.1828-0.13826 0.5223-0.13826 0.95243-0.33796v1.1982q-0.41477 0.21506-0.92171 0.3226-0.49157 0.12289-1.1982 0.12289z"/>
<path d="m168.13 86.78q1.0446 0 1.8127 0.46085 0.76809 0.46085 1.1675 1.3057 0.41477 0.82953 0.41477 1.9509v0.81417h-5.6378q0.0307 1.3979 0.70664 2.1353 0.69128 0.722 1.9202 0.722 0.78345 0 1.3826-0.13826 0.61447-0.15362 1.2597-0.43013v1.1829q-0.62983 0.27651-1.2443 0.3994-0.61447 0.13826-1.4594 0.13826-1.1828 0-2.0738-0.47621t-1.3979-1.4133q-0.49157-0.93706-0.49157-2.3196 0-1.3518 0.44549-2.3196 0.46085-0.96779 1.275-1.4901 0.82953-0.5223 1.9202-0.5223zm-0.0154 1.106q-0.96779 0-1.5362 0.62983-0.55302 0.61447-0.66055 1.7205h4.1937q-0.0154-1.0446-0.49157-1.6898-0.47622-0.66055-1.5054-0.66055z"/>
<path d="m176.53 95.321q-1.5362 0-2.4579-1.06-0.92171-1.0753-0.92171-3.1952t0.92171-3.1952q0.93706-1.0907 2.4732-1.0907 0.95243 0 1.5515 0.35332 0.61447 0.35332 0.99851 0.86026h0.0922q-0.0307-0.1997-0.0614-0.58374-0.0307-0.3994-0.0307-0.62983v-3.2874h1.3518v11.675h-1.0907l-0.1997-1.106h-0.0614q-0.36868 0.5223-0.98315 0.89098-0.61446 0.36868-1.5822 0.36868zm0.21506-1.1214q1.3058 0 1.828-0.70664 0.53766-0.722 0.53766-2.166v-0.24579q0-1.5362-0.50693-2.3503-0.50694-0.82953-1.8741-0.82953-1.0907 0-1.6437 0.87562-0.53766 0.86026-0.53766 2.3196 0 1.4747 0.53766 2.2889 0.55302 0.81417 1.6591 0.81417z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M896,469.33c0,117.76 -95.57,213.34 -213.33,213.34h-75.52c-35.41,0 -64,28.59 -64,64c0,16.21 6.4,31.15 16.21,42.24c10.24,11.52 16.64,26.45 16.64,43.09c0,35.41 -28.59,64 -64,64c-212.05,0 -384,-171.95 -384,-384c0,-212.05 171.95,-384 384,-384c212.05,0 384,152.74 384,341.33zM341.33,448c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64zM469.33,277.33c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64zM682.67,277.33c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64zM810.67,448c0,-35.41 -28.59,-64 -64,-64c-35.41,0 -64,28.59 -64,64c0,35.41 28.59,64 64,64c35.41,0 64,-28.59 64,-64z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
viewBox="0,0,1024,1024"
id="svg2562"
sodipodi:docname="create_floating_editor.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata2568">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs2566" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview2564"
showgrid="false"
inkscape:zoom="0.23046875"
inkscape:cx="512"
inkscape:cy="512"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2562" />
<desc
id="desc2556">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.)</desc>
<g
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
id="g2560"
transform="matrix(0.73242903,0,0,0.73242903,136.99634,136.99634)">
<path
d="m 853.33,341.33 v 512 c 0,46.93 -38.4,85.34 -85.33,85.34 H 255.57 c -46.93,0 -84.9,-38.41 -84.9,-85.34 l 0.42,-682.66 c 0,-46.93 37.98,-85.34 84.91,-85.34 h 341.33 z m -170.66,256 h -128 v -128 h -85.34 v 128 h -128 v 85.34 h 128 v 128 h 85.34 v -128 h 128 z M 789.33,384 554.67,149.33 V 384 Z"
id="path2558"
inkscape:connector-curvature="0" />
</g>
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 426.6699,917.33988 512.4297,1024 597.3301,917.33988 Z"
id="path3115"
inkscape:connector-curvature="0" />
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 426.6699,106.66012 512.4297,0 597.3301,106.66012 Z"
id="path3115-7"
inkscape:connector-curvature="0" />
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 917.33988,426.6699 1024,512.4297 917.33988,597.3301 Z"
id="path3115-7-9"
inkscape:connector-curvature="0" />
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 106.66016,426.6699 0,512.4297 106.66016,597.3301 Z"
id="path3115-7-9-4"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
viewBox="0,0,1024,1024"
id="svg2562"
sodipodi:docname="create_floating_table.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata2568">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs2566" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview2564"
showgrid="false"
inkscape:zoom="0.23046875"
inkscape:cx="512"
inkscape:cy="512"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2562" />
<desc
id="desc2556">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.)</desc>
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 426.6699,917.33988 512.4297,1024 597.3301,917.33988 Z"
id="path3115"
inkscape:connector-curvature="0" />
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 426.6699,106.66012 512.4297,0 597.3301,106.66012 Z"
id="path3115-7"
inkscape:connector-curvature="0" />
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 917.33988,426.6699 1024,512.4297 917.33988,597.3301 Z"
id="path3115-7-9"
inkscape:connector-curvature="0" />
<path
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
d="M 106.66016,426.6699 0,512.4297 106.66016,597.3301 Z"
id="path3115-7-9-4"
inkscape:connector-curvature="0" />
<g
id="g3198"
style="mix-blend-mode:normal;fill:#03b8e5;fill-rule:nonzero"
transform="matrix(0.73241615,0,0,0.73241615,137.00293,137.00293)">
<path
id="path3196"
d="m 938.67,170.67 v 682.66 c 0,46.93 -38.41,85.34 -85.34,85.34 H 170.67 c -46.93,0 -85.34,-38.41 -85.34,-85.34 V 170.67 c 0,-46.93 38.41,-85.34 85.34,-85.34 h 682.66 c 46.93,0 85.34,38.41 85.34,85.34 z m -597.34,0 H 170.67 v 170.66 h 170.66 z m 0,512 H 170.67 v 170.66 h 170.66 z m 0,-256 H 170.67 v 170.66 h 170.66 z m 256,-256 H 426.67 v 170.66 h 170.66 z m 256,0 H 682.67 v 170.66 h 170.66 z m -256,512 H 426.67 v 170.66 h 170.66 z m 0,-256 H 426.67 v 170.66 h 170.66 z m 256,256 H 682.67 v 170.66 h 170.66 z m 0,-256 H 682.67 v 170.66 h 170.66 z"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M896,213.33v597.34c0,46.93 -38.4,85.33 -85.33,85.33h-597.34c-46.93,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h597.34c46.93,0 85.33,38.4 85.33,85.33zM810.67,213.33h-597.34v597.34h597.34zM746.67,725.33h-469.34l117.34,-150.61l83.62,100.69l117.34,-151.04z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 700 B

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16px" height="16px" viewBox="0 0 16 16" id="svg2" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="38 - menu bar lines option list hamburger web.svg">
<defs id="defs4">
<pattern y="0" x="0" height="6" width="6" patternUnits="userSpaceOnUse" id="EMFhbasepattern"/>
<pattern y="0" x="0" height="6" width="6" patternUnits="userSpaceOnUse" id="EMFhbasepattern-4"/>
<pattern y="0" x="0" height="6" width="6" patternUnits="userSpaceOnUse" id="EMFhbasepattern-3"/>
<pattern y="0" x="0" height="6" width="6" patternUnits="userSpaceOnUse" id="EMFhbasepattern-8"/>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627417" inkscape:cx="6.2316889" inkscape:cy="7.4271635" inkscape:document-units="px" inkscape:current-layer="g5228" showgrid="true" units="px" inkscape:window-width="1366" inkscape:window-height="705" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-global="true">
<inkscape:grid type="xygrid" id="grid3336"/>
</sodipodi:namedview>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1036.3622)">
<g transform="translate(628,-140.49998)" id="g5228">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 4.484375 4 A 0.50005 0.50005 0 0 0 4.5351562 5 L 11.464844 5 A 0.50005 0.50005 0 1 0 11.464844 4 L 4.5351562 4 A 0.50005 0.50005 0 0 0 4.484375 4 z M 4.484375 7 A 0.50005 0.50005 0 0 0 4.5351562 8 L 11.464844 8 A 0.50005 0.50005 0 1 0 11.464844 7 L 4.5351562 7 A 0.50005 0.50005 0 0 0 4.484375 7 z M 4.484375 10 A 0.50005 0.50005 0 0 0 4.5351562 11 L 11.464844 11 A 0.50005 0.50005 0 1 0 11.464844 10 L 4.5351562 10 A 0.50005 0.50005 0 0 0 4.484375 10 z " transform="translate(-628,1176.8622)" id="path3340"/>
</g>
</g>
<metadata>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description about="https://iconscout.com/legal#licenses" dc:title="Menu, Bar, Lines, Option, List, Hamburger, Web" dc:description="Menu, Bar, Lines, Option, List, Hamburger, Web" dc:publisher="Iconscout" dc:date="2016-12-14" dc:format="image/svg+xml" dc:language="en">
<dc:creator>
<rdf:Bag>
<rdf:li>Jemis Mali</rdf:li>
</rdf:Bag>
</dc:creator>
</rdf:Description>
</rdf:RDF>
</metadata></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M896,256v597.33c0,46.93 -38.4,85.34 -85.33,85.34h-597.34c-47.36,0 -85.33,-38.41 -85.33,-85.34l0.43,-597.33c0,-46.93 37.54,-85.33 84.9,-85.33h42.67v-85.34h85.33v85.34h341.34v-85.34h85.33v85.34h42.67c46.93,0 85.33,38.4 85.33,85.33zM810.67,384h-597.34v469.33h597.34zM384,554.67h-85.33v-85.34h85.33zM554.67,554.67h-85.34v-85.34h85.34zM725.33,554.67h-85.33v-85.34h85.33z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 783 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M981.33,256v554.67c0,46.93 -38.4,85.33 -85.33,85.33h-768c-46.93,0 -85.33,-38.4 -85.33,-85.33v-554.67c0,-46.93 38.4,-85.33 85.33,-85.33h768c46.93,0 85.33,38.4 85.33,85.33zM896,256h-384v554.67h384zM554.67,512h298.66v64h-298.66zM554.67,405.33h298.66v64h-298.66zM554.67,618.67h298.66v64h-298.66z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 717 B

6
demo/images/edit.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M599.89,264.11l160,160l-471.89,471.89h-160v-160zM805.55,378.45l-160,-160l78.08,-78.08c16.64,-16.64 43.52,-16.64 60.16,0l99.84,99.84c16.64,16.64 16.64,43.52 0,60.16z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 578 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M689.92,672c22.19,-33.71 35.41,-73.81 35.41,-117.33c0,-117.76 -95.57,-213.34 -213.33,-213.34c-117.76,0 -213.33,95.58 -213.33,213.34c0,117.76 95.57,213.33 213.33,213.33c43.52,0 83.63,-13.22 117.76,-35.41l189.01,189.01c-14.51,10.67 -31.57,17.07 -50.77,17.07h-512.43c-46.93,0 -84.9,-38.41 -84.9,-85.34l0.42,-682.66c0,-46.93 37.98,-85.34 84.91,-85.34h341.33l256,256v494.51zM512,426.67c70.83,0 128,57.17 128,128c0,70.83 -57.17,128 -128,128c-70.83,0 -128,-57.17 -128,-128c0,-70.83 57.17,-128 128,-128z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 915 B

6
demo/images/folder.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M512,256h341.33c46.93,0 85.34,38.4 85.34,85.33v426.67c0,46.93 -38.41,85.33 -85.34,85.33h-682.66c-46.93,0 -85.34,-38.4 -85.34,-85.33l0.43,-512c0,-46.93 37.98,-85.33 84.91,-85.33h256z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 595 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M938.67,341.33v426.67c0,46.93 -38.41,85.33 -85.34,85.33h-682.66c-46.93,0 -85.34,-38.4 -85.34,-85.33l0.43,-512c0,-46.93 37.98,-85.33 84.91,-85.33h256l85.33,85.33h341.33c46.93,0 85.34,38.4 85.34,85.33zM853.33,341.33h-682.66v426.67h682.66z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 655 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M938.67,170.67v682.66c0,46.93 -38.41,85.34 -85.34,85.34h-682.66c-46.93,0 -85.34,-38.41 -85.34,-85.34v-682.66c0,-46.93 38.41,-85.34 85.34,-85.34h682.66c46.93,0 85.34,38.41 85.34,85.34zM769.71,789.33l-218.03,-554.66h-79.36l-218.03,554.66h89.18l47.78,-128h240.64l48.64,128zM512,340.48l88.32,235.52h-176.64z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 724 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M981.33,213.33v597.34c0,46.93 -38.4,85.33 -85.33,85.33h-768c-46.93,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h768c46.93,0 85.33,38.4 85.33,85.33zM896,212.91h-768v598.18h768zM256,597.33l-106.67,-84.9l106.67,-85.76zM597.33,341.33h-170.66l85.76,-106.66zM874.67,512.43l-106.67,84.9v-170.66zM512.43,789.33l-85.76,-106.66h170.66z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 776 B

6
demo/images/grid_on.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M938.67,170.67v682.66c0,46.93 -38.41,85.34 -85.34,85.34h-682.66c-46.93,0 -85.34,-38.41 -85.34,-85.34v-682.66c0,-46.93 38.41,-85.34 85.34,-85.34h682.66c46.93,0 85.34,38.41 85.34,85.34zM341.33,170.67h-170.66v170.66h170.66zM341.33,682.67h-170.66v170.66h170.66zM341.33,426.67h-170.66v170.66h170.66zM597.33,170.67h-170.66v170.66h170.66zM853.33,170.67h-170.66v170.66h170.66zM597.33,682.67h-170.66v170.66h170.66zM597.33,426.67h-170.66v170.66h170.66zM853.33,682.67h-170.66v170.66h170.66zM853.33,426.67h-170.66v170.66h170.66z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 931 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M938.67,512c0,235.52 -191.15,426.67 -426.67,426.67c-235.52,0 -426.67,-191.15 -426.67,-426.67c0,-235.52 191.15,-426.67 426.67,-426.67c235.52,0 426.67,191.15 426.67,426.67zM853.33,512c0,-188.16 -153.17,-341.33 -341.33,-341.33c-188.16,0 -341.33,153.17 -341.33,341.33c0,188.16 153.17,341.33 341.33,341.33c188.16,0 341.33,-153.17 341.33,-341.33zM682.67,426.67c0,106.67 -128,117.33 -128,213.33h-85.34c0,-138.67 128,-128 128,-213.33c0,-46.93 -38.4,-85.34 -85.33,-85.34c-46.93,0 -85.33,38.41 -85.33,85.34h-85.34c0,-94.29 76.38,-170.67 170.67,-170.67c94.29,0 170.67,76.38 170.67,170.67zM469.33,682.67h85.34v85.33h-85.34z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

6
demo/images/lock.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M853.33,426.67v426.66c0,46.93 -38.4,85.34 -85.33,85.34h-512c-46.93,0 -85.33,-38.41 -85.33,-85.34v-426.66c0,-46.93 38.4,-85.34 85.33,-85.34h42.67v-85.33c0,-117.76 95.57,-213.33 213.33,-213.33c117.76,0 213.33,95.57 213.33,213.33v85.33h42.67c46.93,0 85.33,38.41 85.33,85.34zM644.27,256c0,-72.96 -59.31,-132.27 -132.27,-132.27c-72.96,0 -132.27,59.31 -132.27,132.27v85.33h264.54zM597.33,640c0,-46.93 -38.4,-85.33 -85.33,-85.33c-46.93,0 -85.33,38.4 -85.33,85.33c0,46.93 38.4,85.33 85.33,85.33c46.93,0 85.33,-38.4 85.33,-85.33z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 932 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M853.33,426.67v426.66c0,46.93 -38.4,85.34 -85.33,85.34h-512c-46.93,0 -85.33,-38.41 -85.33,-85.34v-426.66c0,-46.93 38.4,-85.34 85.33,-85.34h388.27v-85.33c0,-72.96 -59.31,-132.27 -132.27,-132.27c-72.96,0 -132.27,59.31 -132.27,132.27h-81.06c0,-117.76 95.57,-213.33 213.33,-213.33c117.76,0 213.33,95.57 213.33,213.33v85.33h42.67c46.93,0 85.33,38.41 85.33,85.34zM768,426.67h-512v426.66h512zM426.67,640c0,-46.93 38.4,-85.33 85.33,-85.33c46.93,0 85.33,38.4 85.33,85.33c0,46.93 -38.4,85.33 -85.33,85.33c-46.93,0 -85.33,-38.4 -85.33,-85.33z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 948 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M853.33,426.67v426.66c0,46.93 -38.4,85.34 -85.33,85.34h-512c-46.93,0 -85.33,-38.41 -85.33,-85.34v-426.66c0,-46.93 38.4,-85.34 85.33,-85.34h42.67v-85.33c0,-117.76 95.57,-213.33 213.33,-213.33c117.76,0 213.33,95.57 213.33,213.33v85.33h42.67c46.93,0 85.33,38.41 85.33,85.34zM768,426.67h-512v426.66h512zM379.73,341.33h264.54v-85.33c0,-72.96 -59.31,-132.27 -132.27,-132.27c-72.96,0 -132.27,59.31 -132.27,132.27zM426.67,640c0,-46.93 38.4,-85.33 85.33,-85.33c46.93,0 85.33,38.4 85.33,85.33c0,46.93 -38.4,85.33 -85.33,85.33c-46.93,0 -85.33,-38.4 -85.33,-85.33z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 972 B

View File

@@ -0,0 +1,211 @@
The Google Material icons and modifications can be used free of charge for
commerical and non-commerical projects according to the Apache License 2.0.
An attribution to https://material.io/icons/ and/or https://iconfu.com on
your website or in your app's "about" screen would be wonderful.
Please do not re-sell the icons.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

6
demo/images/note_add.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M853.33,341.33v512c0,46.93 -38.4,85.34 -85.33,85.34h-512.43c-46.93,0 -84.9,-38.41 -84.9,-85.34l0.42,-682.66c0,-46.93 37.98,-85.34 84.91,-85.34h341.33zM682.67,597.33h-128v-128h-85.34v128h-128v85.34h128v128h85.34v-128h128zM789.33,384l-234.66,-234.67v234.67z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 671 B

6
demo/images/panorama.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M896,853.33h-768c-46.93,0 -85.33,-38.4 -85.33,-85.33v-512c0,-46.93 38.4,-85.33 85.33,-85.33h768c46.93,0 85.33,38.4 85.33,85.33v512c0,46.93 -38.4,85.33 -85.33,85.33zM213.33,725.33h597.34l-192,-256l-149.34,192.43l-106.66,-128.43z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 643 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M1024,256v426.67c0,46.93 -38.4,85.33 -85.33,85.33h-682.67c-46.93,0 -85.33,-38.4 -85.33,-85.33l0.42,-512c0,-46.93 37.98,-85.34 84.91,-85.34h256l85.33,85.34h341.34c46.93,0 85.33,38.4 85.33,85.33zM85.33,853.33h768v85.34h-768c-46.93,0 -85.33,-38.41 -85.33,-85.34l0.43,-384h-0.43v-213.33h85.33zM896,640l-149.33,-192l-106.67,128.43l-149.33,-192.43l-192,256z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 769 B

6
demo/images/photo.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M810.67,896h-597.34c-46.93,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h597.34c46.93,0 85.33,38.4 85.33,85.33v597.34c0,46.93 -38.4,85.33 -85.33,85.33zM213.33,768h597.34l-192,-256l-149.34,192.43l-106.66,-128.43z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 649 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M981.33,213.33v597.34c0,46.93 -38.4,84.48 -85.33,84.48h-768c-46.93,0 -85.33,-37.55 -85.33,-84.48v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h768c46.93,0 85.33,38.4 85.33,85.33zM896,212.48h-768v598.61h768zM810.67,554.67h-341.34v-256h341.34z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 663 B

123
demo/images/plus.svg Normal file
View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16px"
height="16px"
viewBox="0 0 16 16"
id="svg2"
version="1.1"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="plus.svg">
<defs
id="defs4">
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern" />
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern-4" />
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern-3" />
<pattern
y="0"
x="0"
height="6"
width="6"
patternUnits="userSpaceOnUse"
id="EMFhbasepattern-8" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.627417"
inkscape:cx="-2.5629517"
inkscape:cy="7.4271635"
inkscape:document-units="px"
inkscape:current-layer="g5228"
showgrid="true"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid3336" />
</sodipodi:namedview>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<g
transform="translate(628,-140.49998)"
id="g5228">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -620.5,1189.8622 v -11"
id="path822-5"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -615,1184.3622 h -11"
id="path822-5-2"
inkscape:connector-curvature="0" />
</g>
</g>
<metadata
id="metadata12">
<rdf:RDF>
<rdf:Description
about="https://iconscout.com/legal#licenses"
dc:title="Menu, Bar, Lines, Option, List, Hamburger, Web"
dc:description="Menu, Bar, Lines, Option, List, Hamburger, Web"
dc:publisher="Iconscout"
dc:date="2016-12-14"
dc:format="image/svg+xml"
dc:language="en">
<dc:creator>
<rdf:Bag>
<rdf:li>Jemis Mali</rdf:li>
</rdf:Bag>
</dc:creator>
</rdf:Description>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

6
demo/images/restore.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M938.67,512c0,212.05 -171.95,384 -384,384c-106.24,0 -201.81,-43.09 -271.36,-112.64l60.58,-60.59c53.76,54.19 128.43,87.9 210.78,87.9c165.12,0 298.66,-133.55 298.66,-298.67c0,-165.12 -133.54,-298.67 -298.66,-298.67c-165.12,0 -298.67,133.55 -298.67,298.67h128l-172.37,171.95l-2.99,-5.98l-165.97,-165.97h128c0,-212.05 171.95,-384 384,-384c212.05,0 384,171.95 384,384zM576,341.33v181.34l149.33,88.74l-30.72,51.63l-182.61,-108.37v-213.34z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 847 B

6
demo/images/save.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M896,298.67v512c0,46.93 -38.4,85.33 -85.33,85.33h-597.34c-47.36,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 37.97,-85.33 85.33,-85.33h512zM640,213.33h-426.67v170.67h426.67zM640,682.67c0,-70.83 -57.17,-128 -128,-128c-70.83,0 -128,57.17 -128,128c0,70.83 57.17,128 128,128c70.83,0 128,-57.17 128,-128z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 712 B

6
demo/images/tab.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M981.33,213.33v597.34c0,46.93 -38.4,85.33 -85.33,85.33h-768c-46.93,0 -85.33,-38.4 -85.33,-85.33v-597.34c0,-46.93 38.4,-85.33 85.33,-85.33h768c46.93,0 85.33,38.4 85.33,85.33zM896,384h-341.33v-170.67h-426.67v597.34h768z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 628 B

6
demo/images/zoom_in.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M874.24,810.67l-63.57,63.57l-213.34,-212.91v-33.7l-11.52,-11.95c-48.64,41.81 -111.79,66.99 -180.48,66.99c-153.17,0 -277.33,-124.17 -277.33,-277.34c0,-153.17 124.16,-277.33 277.33,-277.33c153.17,0 277.34,124.16 277.34,277.33c0,68.69 -25.18,131.84 -66.99,180.48l11.95,11.52h33.7zM597.33,405.33c0,-106.24 -85.76,-192 -192,-192c-106.24,0 -192,85.76 -192,192c0,106.24 85.76,192 192,192c106.24,0 192,-85.76 192,-192zM512,426.67h-85.33v85.33h-42.67v-85.33h-85.33v-42.67h85.33v-85.33h42.67v85.33h85.33z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 909 B

6
demo/images/zoom_out.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M874.24,810.67l-63.57,63.57l-213.34,-212.91v-33.7l-11.52,-11.95c-48.64,41.81 -111.79,66.99 -180.48,66.99c-153.17,0 -277.33,-124.17 -277.33,-277.34c0,-153.17 124.16,-277.33 277.33,-277.33c153.17,0 277.34,124.16 277.34,277.33c0,68.69 -25.18,131.84 -66.99,180.48l11.95,11.52h33.7zM597.33,405.33c0,-106.24 -85.76,-192 -192,-192c-106.24,0 -192,85.76 -192,192c0,106.24 85.76,192 192,192c106.24,0 192,-85.76 192,-192zM298.67,384h213.33v42.67h-213.33z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 859 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,1024,1024">
<desc>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.)</desc>
<g fill="#03b8e5" fill-rule="nonzero" style="mix-blend-mode: normal">
<path d="M896,896h-256l98.13,-98.13l-123.3,-122.46l60.58,-60.58l122.46,123.3l98.13,-98.13zM896,128v256l-98.13,-98.13l-122.46,123.3l-60.58,-60.58l123.3,-122.46l-98.13,-98.13zM128,896v-256l98.13,98.13l122.46,-123.3l60.58,60.58l-123.3,122.46l98.13,98.13zM128,128h256l-98.13,98.13l123.3,122.46l-60.58,60.58l-122.46,-123.3l-98.13,98.13z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 742 B

View File

@@ -35,17 +35,29 @@ void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QS
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#if QT_VERSION >= 0x050600 #if QT_VERSION >= 0x050600
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif #endif
#endif
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
std::shared_ptr<int> b; std::shared_ptr<int> b;
QApplication a(argc, argv); QApplication a(argc, argv);
a.setApplicationName("Advanced Docking System Demo");
a.setQuitOnLastWindowClosed(true); a.setQuitOnLastWindowClosed(true);
a.setWindowIcon(QIcon(":/adsdemo/images/ads_icon2.svg"));
qInstallMessageHandler(myMessageOutput); qInstallMessageHandler(myMessageOutput);
qDebug() << "Message handler test"; qDebug() << "Message handler test";
CMainWindow mw; CMainWindow mw;
mw.show(); mw.show();
QFile StyleSheetFile(":/adsdemo/app.css");
StyleSheetFile.open(QIODevice::ReadOnly);
QTextStream StyleSheetStream(&StyleSheetFile);
a.setStyleSheet(StyleSheetStream.readAll());
StyleSheetFile.close();
return a.exec(); return a.exec();
} }

613
demo/main.py Normal file
View File

@@ -0,0 +1,613 @@
import datetime
import logging
import os
import sys
from PyQt5 import uic
from PyQt5.QtCore import (QCoreApplication, QDir, Qt, QSettings, QSignalBlocker,
QRect, QPoint, qDebug, qInstallMessageHandler,
QtDebugMsg, QtInfoMsg, QtWarningMsg,
QtCriticalMsg, QtFatalMsg, QSize)
from PyQt5.QtGui import (QGuiApplication, QIcon, QCloseEvent)
from PyQt5.QtWidgets import (QCalendarWidget, QFileSystemModel, QFrame, QLabel,
QMenu, QTreeView, QAction, QWidgetAction,
QComboBox, QStyle, QSizePolicy, QInputDialog, QMenu,
QToolButton, QWidget, QPlainTextEdit,
QTableWidget, QTableWidgetItem, QApplication,
QMessageBox)
try:
from PyQt5.QAxContainer import QAxWidget
except ImportError:
ACTIVEX_AVAILABLE = False
else:
ACTIVEX_AVAILABLE = True
from PyQtAds import QtAds
import rc # pyrcc5 demo.qrc -o rc.py
from status_dialog import CStatusDialog
UI_FILE = os.path.join(os.path.dirname(__file__), 'mainwindow.ui')
MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE)
class _State:
label_count = 0
calendar_count = 0
file_system_count = 0
editor_count = 0
table_count = 0
activex_count = 0
def features_string(dock_widget: QtAds.CDockWidget) -> str:
'''Function returns a features string with closable (c), movable (m) and floatable (f)
features. i.e. The following string is for a not closable but movable and floatable
widget: c- m+ f+'''
f = dock_widget.features()
closable = f & QtAds.CDockWidget.DockWidgetClosable
movable = f & QtAds.CDockWidget.DockWidgetMovable
floatable = f & QtAds.CDockWidget.DockWidgetFloatable
return "c{} m{} f{}".format("+" if closable else "-",
"+" if movable else "-",
"+" if floatable else "-")
def append_feature_string_to_window_title(dock_widget: QtAds.CDockWidget):
'''Appends the string returned by features_string() to the window title of
the given DockWidget'''
dock_widget.setWindowTitle(dock_widget.windowTitle() + " ({})".format(features_string(dock_widget)))
def svg_icon(filename: str):
'''Helper function to create an SVG icon'''
# This is a workaround, because because in item views SVG icons are not
# properly scaled and look blurry or pixelate
icon = QIcon(filename)
icon.addPixmap(icon.pixmap(92))
return icon
class CMinSizeTableWidget(QTableWidget):
"""Custom QTableWidget with a minimum size hint to test CDockWidget
setMinimumSizeHintMode() function of CDockWidget"""
def minimumSizeHint(self) -> QSize:
return QSize(300, 100)
class CCustomComponentsFactory(QtAds.CDockComponentsFactory):
def createDockAreaTitleBar(self, dock_area: QtAds.CDockAreaWidget) -> QtAds.CDockAreaTitleBar:
title_bar = QtAds.CDockAreaTitleBar(dock_area)
custom_button = QToolButton(dock_area)
custom_button.setToolTip("Help")
custom_button.setIcon(svg_icon(":/adsdemo/images/help_outline.svg"))
custom_button.setAutoRaise(True)
index = title_bar.indexOf(title_bar.button(QtAds.TitleBarButtonTabsMenu))
title_bar.insertWidget(index + 1, custom_button)
return title_bar
class MainWindow(MainWindowUI, MainWindowBase):
save_perspective_action: QAction
perspective_list_action: QWidgetAction
perspective_combo_box: QComboBox
dock_manager: QtAds.CDockManager
def __init__(self, parent=None):
super().__init__(parent)
self.save_perspective_action = None
self.perspective_list_action = None
self.perspective_combo_box = None
self.dock_manager = None
self.window_title_test_dock_widget = None
self.last_docked_editor = None
self.setupUi(self)
self.create_actions()
# uncomment the following line if the tab close button should be
# a QToolButton instead of a QPushButton
# QtAds.CDockManager.setConfigFlags(QtAds.CDockManager.configFlags() | QtAds.CDockManager.TabCloseButtonIsToolButton)
# uncomment the following line if you want to use opaque undocking and
# opaque splitter resizing
#QtAds.CDockManager.setConfigFlags(QtAds.CDockManager.DefaultOpaqueConfig)
# uncomment the following line if you want a fixed tab width that does
# not change if the visibility of the close button changes
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.RetainTabSizeWhenCloseButtonHidden, True)
# uncomment the following line if you don't want close button on DockArea's title bar
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.DockAreaHasCloseButton, False)
# uncomment the following line if you don't want undock button on DockArea's title bar
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.DockAreaHasUndockButton, False)
# uncomment the following line if you don't want tabs menu button on DockArea's title bar
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.DockAreaHasTabsMenuButton, False)
# uncomment the following line if you don't want disabled buttons to appear on DockArea's title bar
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.DockAreaHideDisabledButtons, True)
# uncomment the following line if you want to show tabs menu button on DockArea's title bar only when there are more than one tab and at least of them has elided title
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.DockAreaDynamicTabsMenuButtonVisibility, True)
# uncomment the following line if you want floating container to always show application title instead of active dock widget's title
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FloatingContainerHasWidgetTitle, False)
# uncomment the following line if you want floating container to show active dock widget's icon instead of always showing application icon
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FloatingContainerHasWidgetIcon, True)
# uncomment the following line if you want a central widget in the main dock container (the dock manager) without a titlebar
# If you enable this code, you can test it in the demo with the Calendar 0
# dock widget.
#QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.HideSingleCentralWidgetTitleBar, True)
# uncomment the following line to enable focus highlighting of the dock
# widget that has the focus
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FocusHighlighting, True)
# uncomment if you would like to enable an equal distribution of the
# available size of a splitter to all contained dock widgets
# QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.EqualSplitOnInsertion, True)
# Now create the dock manager and its content
self.dock_manager = QtAds.CDockManager(self)
# Uncomment the following line to have the old style where the dock
# area close button closes the active tab
# QtAds.CDockManager.setConfigFlags(QtAds.CDockManager.DockAreaHasCloseButton
# | QtAds.CDockManager.DockAreaCloseButtonClosesTab)
self.perspective_combo_box.activated[str].connect(self.dock_manager.openPerspective)
self.create_content()
# Default window geometry - center on screen
self.resize(1280, 720)
self.setGeometry(QStyle.alignedRect(
Qt.LeftToRight, Qt.AlignCenter, self.frameSize(),
QGuiApplication.primaryScreen().availableGeometry()))
# self.restore_state()
self.restore_perspectives()
def create_content(self):
# Test container docking
dock_widget = self.create_calendar_dock_widget()
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetClosable, False)
special_dock_area = self.dock_manager.addDockWidget(QtAds.LeftDockWidgetArea, dock_widget)
# For this Special Dock Area we want to avoid dropping on the center of it (i.e. we don't want this widget to be ever tabbified):
special_dock_area.setAllowedAreas(QtAds.OuterDockAreas)
# special_dock_area.setAllowedAreas(QtAds.LeftDockWidgetArea | QtAds.RightDockWidgetArea) # just for testing
dock_widget = self.create_long_text_label_dock_widget()
self.window_title_test_dock_widget = dock_widget
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetFocusable, False)
self.dock_manager.addDockWidget(QtAds.LeftDockWidgetArea, dock_widget)
file_system_widget = self.create_file_system_tree_dock_widget()
tool_bar = file_system_widget.createDefaultToolBar()
tool_bar.addAction(self.actionSaveState)
tool_bar.addAction(self.actionRestoreState)
file_system_widget.setFeature(QtAds.CDockWidget.DockWidgetFloatable, False)
append_feature_string_to_window_title(file_system_widget)
self.dock_manager.addDockWidget(QtAds.BottomDockWidgetArea, file_system_widget)
file_system_widget = self.create_file_system_tree_dock_widget()
file_system_widget.setFeature(QtAds.CDockWidget.DockWidgetMovable, False)
file_system_widget.setFeature(QtAds.CDockWidget.DockWidgetFloatable, False)
append_feature_string_to_window_title(file_system_widget)
# Test custom factory - we inject a help button into the title bar
QtAds.CDockComponentsFactory.setFactory(CCustomComponentsFactory())
top_dock_area = self.dock_manager.addDockWidget(QtAds.TopDockWidgetArea, file_system_widget)
# Uncomment the next line if you would like to test the
# HideSingleWidgetTitleBar functionality
# top_dock_area.setDockAreaFlag(QtAds.CDockAreaWidget.HideSingleWidgetTitleBar, True)
QtAds.CDockComponentsFactory.resetDefaultFactory()
# We create a calendar widget and clear all flags to prevent the dock area
# from closing
dock_widget = self.create_calendar_dock_widget()
dock_widget.setTabToolTip("Tab ToolTip\nHodie est dies magna")
dock_area = self.dock_manager.addDockWidget(QtAds.CenterDockWidgetArea, dock_widget, top_dock_area)
# Now we create a action to test resizing of DockArea widget
action = self.menuTests.addAction("Resize {}".format(dock_widget.windowTitle()))
def action_triggered():
splitter = QtAds.internal.findParent(QtAds.CDockSplitter, dock_area)
if not splitter:
return
# We change the sizes of the splitter that contains the Calendar 1 widget
# to resize the dock widget
width = splitter.width()
splitter.setSizes([width * 2/3, width * 1/3])
action.triggered.connect(action_triggered)
# Now we add a custom button to the dock area title bar that will create
# new editor widgets when clicked
custom_button = QToolButton(dock_area)
custom_button.setToolTip("Create Editor")
custom_button.setIcon(svg_icon(":/adsdemo/images/plus.svg"))
custom_button.setAutoRaise(True)
title_bar = dock_area.titleBar()
index = title_bar.indexOf(title_bar.tabBar())
title_bar.insertWidget(index + 1, custom_button)
def on_button_clicked():
dock_widget = self.create_editor_widget()
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetDeleteOnClose, True)
self.dock_manager.addDockWidgetTabToArea(dock_widget, dock_area)
dock_widget.closeRequested.connect(self.on_editor_close_requested)
custom_button.clicked.connect(on_button_clicked)
# Test dock area docking
right_dock_area = self.dock_manager.addDockWidget(
QtAds.RightDockWidgetArea,
self.create_long_text_label_dock_widget(), top_dock_area)
self.dock_manager.addDockWidget(
QtAds.TopDockWidgetArea,
self.create_long_text_label_dock_widget(), right_dock_area)
bottom_dock_area = self.dock_manager.addDockWidget(
QtAds.BottomDockWidgetArea,
self.create_long_text_label_dock_widget(), right_dock_area)
self.dock_manager.addDockWidget(
QtAds.CenterDockWidgetArea,
self.create_long_text_label_dock_widget(), right_dock_area)
self.dock_manager.addDockWidget(
QtAds.CenterDockWidgetArea,
self.create_long_text_label_dock_widget(), bottom_dock_area)
action = self.menuTests.addAction("Set {} Floating".format(dock_widget.windowTitle()))
action.triggered.connect(dock_widget.setFloating)
action = self.menuTests.addAction("Set {} As Current Tab".format(dock_widget.windowTitle()))
action.triggered.connect(dock_widget.setAsCurrentTab)
action = self.menuTests.addAction("Raise {}".format(dock_widget.windowTitle()))
action.triggered.connect(dock_widget.raise_)
if ACTIVEX_AVAILABLE:
flags = self.dock_manager.configFlags()
if flags & QtAds.CDockManager.OpaqueUndocking:
self.dock_manager.addDockWidget(QtAds.CenterDockWidgetArea,
self.create_activex_widget(), right_dock_area)
for dock_widget in self.dock_manager.dockWidgetsMap().values():
dock_widget.viewToggled.connect(self.on_view_toggled)
dock_widget.visibilityChanged.connect(self.on_view_visibility_changed)
def create_actions(self):
self.toolBar.addAction(self.actionSaveState)
self.toolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
self.actionSaveState.setIcon(svg_icon(":/adsdemo/images/save.svg"))
self.toolBar.addAction(self.actionRestoreState)
self.actionRestoreState.setIcon(svg_icon(":/adsdemo/images/restore.svg"))
self.save_perspective_action = QAction("Create Perspective", self)
self.save_perspective_action.setIcon(svg_icon(":/adsdemo/images/picture_in_picture.svg"))
self.save_perspective_action.triggered.connect(self.save_perspective)
self.perspective_list_action = QWidgetAction(self)
self.perspective_combo_box = QComboBox(self)
self.perspective_combo_box.setSizeAdjustPolicy(QComboBox.AdjustToContents)
self.perspective_combo_box.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
self.perspective_list_action.setDefaultWidget(self.perspective_combo_box)
self.toolBar.addSeparator()
self.toolBar.addAction(self.perspective_list_action)
self.toolBar.addAction(self.save_perspective_action)
a = self.toolBar.addAction("Create Floating Editor")
a.setProperty("Floating", True)
a.setToolTip("Creates floating dynamic dockable editor windows that are deleted on close")
a.setIcon(svg_icon(":/adsdemo/images/note_add.svg"))
a.triggered.connect(self.create_editor)
self.menuTests.addAction(a)
a = self.toolBar.addAction("Create Docked Editor")
a.setProperty("Floating", False)
a.setToolTip("Creates a docked editor windows that are deleted on close")
a.setIcon(svg_icon(":/adsdemo/images/docked_editor.svg"))
a.triggered.connect(self.create_editor)
self.menuTests.addAction(a)
a = self.toolBar.addAction("Create Floating Table")
a.setToolTip("Creates floating dynamic dockable table with millions of entries")
a.setIcon(svg_icon(":/adsdemo/images/grid_on.svg"))
a.triggered.connect(self.create_table)
self.menuTests.addAction(a)
self.menuTests.addSeparator()
a = self.menuTests.addAction("Show Status Dialog")
a.triggered.connect(self.show_status_dialog)
self.menuTests.addSeparator()
def closeEvent(self, event: QCloseEvent):
self.save_state()
self.dock_manager.deleteLater()
super().closeEvent(event)
def on_actionSaveState_triggered(self, state: bool):
qDebug("MainWindow::on_action_save_state_triggered")
self.save_state()
def on_actionRestoreState_triggered(self, state: bool):
qDebug("MainWindow::on_action_restore_state_triggered")
self.restore_state()
def save_perspective(self):
perspective_name, ok = QInputDialog.getText(self, "Save perspective",
"Enter unique name:")
if ok and perspective_name:
self.dock_manager.addPerspective(perspective_name)
_ = QSignalBlocker(self.perspective_combo_box)
self.perspective_combo_box.clear()
self.perspective_combo_box.addItems(self.dock_manager.perspectiveNames())
self.perspective_combo_box.setCurrentText(perspective_name)
self.save_perspectives()
def on_view_toggled(self, open: bool):
dock_widget = self.sender()
if dock_widget is None:
return
qDebug("{} view_toggled({})".format(dock_widget.objectName(), open))
def on_view_visibility_changed(self, visible: bool):
dock_widget = self.sender()
if dock_widget is None:
return
# qDebug("{} visibility_changed({})".format(dock_widget.objectName(), visible))
def create_editor(self):
sender = self.sender()
floating = sender.property("Floating")
dock_widget = self.create_editor_widget()
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetDeleteOnClose, True)
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetForceCloseWithArea, True)
dock_widget.closeRequested.connect(self.on_editor_close_requested)
if floating:
floating_widget = self.dock_manager.addDockWidgetFloating(dock_widget)
floating_widget.move(QPoint(20, 20))
else:
editor_area = self.last_docked_editor.dockAreaWidget() if self.last_docked_editor is not None else None
if editor_area is not None:
self.dock_manager.setConfigFlag(QtAds.CDockManager.EqualSplitOnInsertion, True)
self.dock_manager.addDockWidget(QtAds.RightDockWidgetArea, dock_widget, editor_area)
else:
self.dock_manager.addDockWidget(QtAds.TopDockWidgetArea, dock_widget)
self.last_docked_editor = dock_widget
def on_editor_close_requested(self):
dock_widget = self.sender()
result = QMessageBox.question(self, "Close Editor",
"Editor {} contains unsaved changes? Would you like to close it?".format(dock_widget.windowTitle()))
if result == QMessageBox.Yes:
dock_widget.closeDockWidget()
def create_table(self):
dock_widget = self.create_table_widget()
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetDeleteOnClose, True)
floating_widget = self.dock_manager.addDockWidgetFloating(dock_widget)
floating_widget.move(QPoint(40, 40))
def show_status_dialog(self):
dialog = CStatusDialog(self.dock_manager)
dialog.exec_()
def toggle_dock_widget_window_title(self):
title = self.window_title_test_dock_widget.windowTitle()
i = title.find(" (Test) ")
if i == -1:
title += " (Test) "
else:
title = title[i]
self.window_title_test_dock_widget.setWindowTitle(title)
def save_state(self):
'''
Saves the dock manager state and the main window geometry
'''
settings = QSettings("Settings.ini", QSettings.IniFormat)
settings.setValue("mainWindow/Geometry", self.saveGeometry())
settings.setValue("mainWindow/State", self.saveState())
settings.setValue("mainWindow/DockingState", self.dock_manager.saveState())
def restore_state(self):
'''
Restores the dock manager state
'''
settings = QSettings("Settings.ini", QSettings.IniFormat)
geom = settings.value("mainWindow/Geometry")
if geom is not None:
self.restoreGeometry(geom)
state = settings.value("mainWindow/State")
if state is not None:
self.restoreState(state)
state = settings.value("mainWindow/DockingState")
if state is not None:
self.dock_manager.restore_state(state)
def save_perspectives(self):
'''
Save the list of perspectives
'''
settings = QSettings("Settings.ini", QSettings.IniFormat)
self.dock_manager.savePerspectives(settings)
def restore_perspectives(self):
'''
Restore the perspective listo of the dock manager
'''
settings = QSettings("Settings.ini", QSettings.IniFormat)
self.dock_manager.loadPerspectives(settings)
self.perspective_combo_box.clear()
self.perspective_combo_box.addItems(self.dock_manager.perspectiveNames())
def save_perspective(self):
perspective_name, ok = QInputDialog.getText(self, 'Save perspective', 'Enter unique name:')
if ok and perspective_name:
self.dock_manager.addPerspective(perspective_name)
_ = QSignalBlocker(self.perspective_combo_box)
self.perspective_combo_box.clear()
self.perspective_combo_box.addItems(self.dock_manager.perspectiveNames())
self.perspective_combo_box.setCurrentText(perspective_name)
self.save_perspectives()
def create_long_text_label_dock_widget(self) -> QtAds.CDockWidget:
label = QLabel()
label.setWordWrap(True)
label.setAlignment(Qt.AlignTop | Qt.AlignLeft)
label.setText('''Label {} {} - Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum
sociis natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium
quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla
vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut,
imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis
pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi.
Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu,
consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra
quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet.
'''.format(_State.label_count, datetime.datetime.now().strftime("%H:%M:%S:%f")))
dock_widget = QtAds.CDockWidget("Label {}".format(_State.label_count))
_State.label_count += 1
dock_widget.setWidget(label)
self.menuView.addAction(dock_widget.toggleViewAction())
return dock_widget
def create_calendar_dock_widget(self) -> QtAds.CDockWidget:
widget = QCalendarWidget()
dock_widget = QtAds.CDockWidget("Calendar {}".format(_State.calendar_count))
_State.calendar_count += 1
# The following lines are for testing the setWidget() and takeWidget()
# functionality
dock_widget.setWidget(widget)
dock_widget.setWidget(widget) # what happens if we set a widget if a widget is already set
dock_widget.takeWidget() # we remove the widget
dock_widget.setWidget(widget) # and set the widget again - there should be no error
dock_widget.setToggleViewActionMode(QtAds.CDockWidget.ActionModeShow)
dock_widget.setIcon(svg_icon(":/adsdemo/images/date_range.svg"))
self.menuView.addAction(dock_widget.toggleViewAction())
return dock_widget
def create_file_system_tree_dock_widget(self) -> QtAds.CDockWidget:
widget = QTreeView()
widget.setFrameShape(QFrame.NoFrame)
m = QFileSystemModel(widget)
m.setRootPath(QDir.currentPath())
widget.setModel(m)
dock_widget = QtAds.CDockWidget("Filesystem {}".format(_State.file_system_count))
_State.file_system_count += 1
dock_widget.setWidget(widget)
self.menuView.addAction(dock_widget.toggleViewAction())
return dock_widget
def create_editor_widget(self) -> QtAds.CDockWidget:
widget = QPlainTextEdit()
widget.setPlaceholderText("This is an editor. If you close the editor, it will be "
"deleted. Enter your text here.")
widget.setStyleSheet("border: none")
dock_widget = QtAds.CDockWidget("Editor {}".format(_State.editor_count))
_State.editor_count += 1
dock_widget.setWidget(widget)
dock_widget.setIcon(svg_icon(":/adsdemo/images/edit.svg"))
dock_widget.setFeature(QtAds.CDockWidget.CustomCloseHandling, True)
self.menuView.addAction(dock_widget.toggleViewAction())
options_menu = QMenu(dock_widget)
options_menu.setTitle("Options")
options_menu.setToolTip(options_menu.title())
options_menu.setIcon(svg_icon(":/adsdemo/images/custom-menu-button.svg"))
menu_action = options_menu.menuAction()
# The object name of the action will be set for the QToolButton that
# is created in the dock area title bar. You can use this name for CSS
# styling
menu_action.setObjectName("options_menu")
dock_widget.setTitleBarActions([options_menu.menuAction()])
a = options_menu.addAction("Clear Editor")
a.triggered.connect(widget.clear)
return dock_widget
def create_table_widget(self) -> QtAds.CDockWidget:
widget = CMinSizeTableWidget()
dock_widget = QtAds.CDockWidget("Table {}".format(_State.table_count))
_State.table_count += 1
COLCOUNT = 5
ROWCOUNT = 30
widget.setColumnCount(COLCOUNT)
widget.setRowCount(ROWCOUNT)
for col in range(ROWCOUNT):
widget.setHorizontalHeaderItem(col, QTableWidgetItem("Col {}".format(col + 1)))
for row in range(ROWCOUNT):
widget.setItem(row, col, QTableWidgetItem("T {:}-{:}".format(row + 1, col + 1)))
dock_widget.setWidget(widget)
dock_widget.setIcon(svg_icon(":/adsdemo/images/grid_on.svg"))
dock_widget.setMinimumSizeHintMode(QtAds.CDockWidget.MinimumSizeHintFromContent)
toolbar = dock_widget.createDefaultToolBar()
action = toolbar.addAction(svg_icon(":/adsdemo/images/fullscreen.svg"), "Toggle Fullscreen")
def on_toggle_fullscreen():
if dock_widget.isFullScreen():
dock_widget.showNormal()
else:
dock_widget.showFullScreen()
action.triggered.connect(on_toggle_fullscreen)
self.menuView.addAction(dock_widget.toggleViewAction())
return dock_widget
def create_activex_widget(self, parent: QWidget = None) -> QtAds.CDockWidget:
widget = QAxWidget("{6bf52a52-394a-11d3-b153-00c04f79faa6}", parent)
dock_widget = QtAds.CDockWidget("Active X {}".format(_State.activex_count))
_State.activex_count += 1
dock_widget.setWidget(widget)
self.menuView.addAction(dock_widget.toggleViewAction())
return dock_widget
def my_message_output(type, context, msg):
if type == QtDebugMsg:
print("Debug: {} ({}:{}, {})".format(msg, context.file, context.line, context.function))
elif type == QtInfoMsg:
print("Info: {} ({}:{}, {})".format(msg, context.file, context.line, context.function))
elif type == QtWarningMsg:
print("Warning: {} ({}:{}, {})".format(msg, context.file, context.line, context.function))
elif type == QtCriticalMsg:
print("Critical: {} ({}:{}, {})".format(msg, context.file, context.line, context.function))
elif type == QtFatalMsg:
print("Fatal: {} ({}:{}, {})".format(msg, context.file, context.line, context.function))
if __name__ == '__main__':
QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
QGuiApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(True)
with open(os.path.join(os.path.dirname(__file__), "app.css"), "r") as style_sheet_file:
app.setStyleSheet(style_sheet_file.read())
qInstallMessageHandler(my_message_output)
qDebug("Message handler test")
mw = MainWindow()
mw.show()
app.exec_()

View File

@@ -1,3 +0,0 @@
<RCC>
<qresource prefix="/main"/>
</RCC>

View File

@@ -31,7 +31,6 @@
<property name="title"> <property name="title">
<string>File</string> <string>File</string>
</property> </property>
<addaction name="actionExit"/>
<addaction name="actionSaveState"/> <addaction name="actionSaveState"/>
<addaction name="actionRestoreState"/> <addaction name="actionRestoreState"/>
</widget> </widget>
@@ -45,8 +44,14 @@
<string>About</string> <string>About</string>
</property> </property>
</widget> </widget>
<widget class="QMenu" name="menuTests">
<property name="title">
<string>Tests</string>
</property>
</widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>
<addaction name="menuView"/> <addaction name="menuView"/>
<addaction name="menuTests"/>
<addaction name="menuAbout"/> <addaction name="menuAbout"/>
</widget> </widget>
<widget class="QToolBar" name="toolBar"> <widget class="QToolBar" name="toolBar">

View File

@@ -0,0 +1,379 @@
/*
* Visual Studio like light theme
*/
/*****************************************************************************
* CDockManager
*****************************************************************************/
ads--CDockManager
{
background: palette(window);
}
/*****************************************************************************
* CDockContainerWidget
*****************************************************************************/
ads--CDockContainerWidget {
background: palette(window);
padding: 2px;
}
/*****************************************************************************
* CDockAreaWidget
*****************************************************************************/
ads--CDockAreaWidget {
background: palette(window);
/*border: 1px solid palette(dark);*/
}
ads--CDockAreaTitleBar {
background: transparent;
border-bottom: 2px solid rgb(204, 204, 204);
padding-bottom: 0px;
}
ads--CTitleBarButton {
padding: 0px 0px;
background: transparent;
border: none;
}
ads--CTitleBarButton:hover {
background: rgba(0, 0, 0, 24);
}
ads--CTitleBarButton:pressed {
background: rgba(0, 0, 0, 48);
}
QScrollArea#dockWidgetScrollArea {
padding: 0px;
border: none;
}
#tabsMenuButton::menu-indicator {
image: none;
}
#dockAreaCloseButton {
qproperty-icon: url(:/ads/images/close-button.svg),
url(:/ads/images/close-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
#detachGroupButton {
qproperty-icon: url(:/ads/images/detach-button.svg),
url(:/ads/images/detach-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar {
border-bottom: 2px solid palette(highlight);
}
/*****************************************************************************
* CDockWidgetTab
*****************************************************************************/
ads--CDockWidgetTab {
background: palette(window);
border: none;
padding: 0 0px;
qproperty-iconSize: 16px 16px;/* this is optional in case you would like to change icon size*/
}
ads--CDockWidgetTab[activeTab="true"] {
background: rgb(204, 204, 204);
}
ads--CDockWidgetTab QLabel {
color: palette(foreground);
}
ads--CDockWidgetTab[activeTab="true"] QLabel {
color: palette(foreground);
}
#tabCloseButton {
margin-top: 2px;
background: none;
border: none;
padding: 0px -2px;
qproperty-icon: url(:/ads/images/close-button.svg),
url(:/ads/images/close-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
#tabCloseButton:hover {
/*border: 1px solid rgba(0, 0, 0, 32);*/
background: rgba(0, 0, 0, 24);
}
#tabCloseButton:pressed {
background: rgba(0, 0, 0, 48);
}
/* Focus related styling */
ads--CDockWidgetTab[focused="true"] {
background: palette(highlight);
border-color: palette(highlight);
}
ads--CDockWidgetTab[focused="true"] > #tabCloseButton {
qproperty-icon: url(:/ads/images/close-button-focused.svg)
}
ads--CDockWidgetTab[focused="true"]>#tabCloseButton:hover {
background: rgba(255, 255, 255, 48);
}
ads--CDockWidgetTab[focused="true"]>#tabCloseButton:pressed {
background: rgba(255, 255, 255, 92);
}
ads--CDockWidgetTab[focused="true"] QLabel {
color: palette(light);
}
/*****************************************************************************
* CDockWidget
*****************************************************************************/
ads--CDockWidget {
background: palette(light);
border: 1px solid rgb(204, 204, 204);
border-top: none;
}
/*****************************************************************************
*
* Styling of auto hide functionality
*
*****************************************************************************/
/*****************************************************************************
* CAutoHideTab
*****************************************************************************/
ads--CAutoHideTab {
qproperty-iconSize: 16px 16px;/* this is optional in case you would like to change icon size*/
background: none;
border: none;
padding-left: 2px;
padding-right: 0px;
text-align: center;
min-height: 20px;
padding-bottom: 2px;
}
ads--CAutoHideTab:hover
{
color: palette(highlight);
}
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"] {
border-top: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"] {
border-bottom: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="0"],
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="2"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"][activeTab="true"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"][activeTab="true"] {
border-top: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="1"],
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="3"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"][activeTab="true"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"][activeTab="true"] {
border-bottom: 6px solid palette(highlight);
}
/**
* Auto hide tabs with icon only
*/
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"] {
border-top: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"] {
border-left: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"] {
border-right: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"] {
border-bottom: 6px solid rgba(0, 0, 0, 48);
}
/**
* Auto hide tabs with icon only hover
*/
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="0"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"][activeTab="true"] {
border-top: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="1"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"][activeTab="true"] {
border-left: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="2"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"][activeTab="true"] {
border-right: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="3"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"][activeTab="true"] {
border-bottom: 6px solid palette(highlight);
}
/*****************************************************************************
* CAutoHideSideBar
*****************************************************************************/
ads--CAutoHideSideBar{
background: palette(window);
border: none;
qproperty-spacing: 12;
}
#sideTabsContainerWidget {
background: transparent;
}
ads--CAutoHideSideBar[sideBarLocation="0"] {
border-bottom: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="1"] {
border-right: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="2"] {
border-left: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="3"] {
border-top: 1px solid palette(dark);
}
/*****************************************************************************
* CAutoHideDockContainer
*****************************************************************************/
ads--CAutoHideDockContainer {
background: palette(window);
}
ads--CAutoHideDockContainer ads--CDockAreaTitleBar {
background: palette(highlight);
padding: 0px;
border: none;
}
/*
* This is required because the ads--CDockAreaWidget[focused="true"] will
* overwrite the ads--CAutoHideDockContainer ads--CDockAreaTitleBar rule
*/
ads--CAutoHideDockContainer ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar {
background: palette(highlight);
padding: 0px;
border: none;
}
#autoHideTitleLabel {
padding-left: 4px;
color: palette(light);
}
/*****************************************************************************
* CAutoHideDockContainer titlebar buttons
*****************************************************************************/
#dockAreaAutoHideButton {
qproperty-icon: url(:/ads/images/vs-pin-button.svg);
qproperty-iconSize: 16px;
}
ads--CAutoHideDockContainer #dockAreaAutoHideButton {
qproperty-icon: url(:/ads/images/vs-pin-button-pinned-focused.svg);
qproperty-iconSize: 16px;
}
ads--CAutoHideDockContainer #dockAreaCloseButton{
qproperty-icon: url(:/ads/images/close-button-focused.svg)
}
ads--CAutoHideDockContainer ads--CTitleBarButton:hover {
background: rgba(255, 255, 255, 48);
}
ads--CAutoHideDockContainer ads--CTitleBarButton:pressed {
background: rgba(255, 255, 255, 96);
}
/*****************************************************************************
* CAutoHideDockContainer Titlebar and Buttons
*****************************************************************************/
/*****************************************************************************
* CResizeHandle
*****************************************************************************/
ads--CResizeHandle {
background: palette(window);
}
ads--CAutoHideDockContainer[sideBarLocation="0"] ads--CResizeHandle {
border-top: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="1"] ads--CResizeHandle {
border-left: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="2"] ads--CResizeHandle {
border-right: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="3"] ads--CResizeHandle {
border-top: 1px solid palette(dark);
}

38
demo/status_dialog.py Normal file
View File

@@ -0,0 +1,38 @@
import os
import sys
from PyQt5 import uic
import PyQtAds as QtAds
UI_FILE = os.path.join(os.path.dirname(__file__), 'StatusDialog.ui')
StatusDialogUI, StatusDialogBase = uic.loadUiType(UI_FILE)
class CStatusDialog(StatusDialogUI, StatusDialogBase):
def __init__(self, dock_manager: QtAds.CDockManager, parent=None):
super().__init__(parent)
self.setupUi(self)
self.dock_manager = dock_manager
self.dock_widgets = self.dock_manager.dockWidgetsMap()
for key, widget in self.dock_widgets.items():
self.dockWidgetsComboBox.addItem(key, widget)
def on_dockWidgetsComboBox_currentIndexChanged(self, index: int):
if not isinstance(index, int):
return
if index < 0:
return
dock_widget = self.dockWidgetsComboBox.currentData()
self.isClosedCheckBox.setChecked(dock_widget.isClosed())
self.isFloatingCheckBox.setChecked(dock_widget.isFloating())
self.tabbedCheckBox.setChecked(dock_widget.isTabbed())
self.isCurrentTabCheckBox.setChecked(dock_widget.isCurrentTab())
self.closableCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetClosable)
self.movableCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetMovable)
self.floatableCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetFloatable)
self.deleteOnCloseCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.DockWidgetDeleteOnClose)
self.customCloseHandlingCheckBox.setChecked(dock_widget.features() & QtAds.CDockWidget.CustomCloseHandling)

BIN
doc/AutoHide_Animation.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

BIN
doc/AutoHide_Movie.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
doc/AutoHide_PinTo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
doc/AutoHide_Sort_Tabs.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

BIN
doc/Feature_ImageViewer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

77
doc/ads_icon.svg Normal file
View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
viewBox="0 0 1023.99 1023.99"
id="svg26"
sodipodi:docname="ads_icon.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
width="1023.99"
height="1023.99"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs30" />
<sodipodi:namedview
id="namedview28"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="0.12999302"
inkscape:cx="3277.099"
inkscape:cy="-257.70614"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg26"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<desc
id="desc2">electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH</desc>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none"
x="1251.1022"
y="1305.4956"
id="text9788"><tspan
sodipodi:role="line"
id="tspan9786"
x="1251.1022"
y="1305.4956" /></text>
<g
id="g94691"
transform="translate(581.23034,1750.5233)">
<path
d="m 191.63966,-726.53328 h -521.75 c -138.69,0 -251.12,-112.43001 -251.12,-251.12 v -521.75002 c 0,-138.69 112.43,-251.12 251.12,-251.12 h 521.75 c 138.69,0 251.12,112.43 251.12,251.12 v 521.75002 c 0,138.68999 -112.43,251.12 -251.12,251.12 z"
fill="#707070"
id="path4-5"
style="mix-blend-mode:normal;fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero" />
<path
id="path927"
style="mix-blend-mode:normal;fill:#009ddd;fill-opacity:1;fill-rule:nonzero"
d="m -175.90039,-1515.8633 v 256 h 469.3301 v -256 z" />
<path
id="path16513"
style="mix-blend-mode:normal;fill:#ff9833;fill-opacity:1;fill-rule:nonzero"
d="m 80.099609,-1217.1934 v 256.00004 H 293.42969 v -256.00004 z" />
<path
id="path16513-5"
style="mix-blend-mode:normal;fill:#accb01;fill-opacity:1;fill-rule:nonzero"
d="m -175.90039,-1217.1933 v 256 H 37.42969 v -256 z" />
<path
id="path24788"
style="mix-blend-mode:normal;fill:#0083c3;fill-opacity:1;fill-rule:nonzero"
d="m -431.90039,-1515.8633 v 554.66994 h 213.33008 v -554.66994 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
doc/ads_icon_256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
doc/ads_icon_512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

33
doc/ads_logo.svg Normal file
View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1032" height="151.81" version="1.1" viewBox="0 0 1032 151.81" xmlns="http://www.w3.org/2000/svg">
<desc>electric_iron icon - Licensed under Iconfu Standard License v1.0 (https://www.iconfu.com/iconfu_standard_license) - Incors GmbH</desc>
<text x="1251.1022" y="1305.4956" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25" xml:space="preserve"><tspan x="1251.1022" y="1305.4956"/></text>
<g transform="scale(.14825)" stroke-width="6.7454">
<g fill="#8f918f" aria-label="Qt Advanced Docking">
<path d="m1416.3 726.04q-93.219 0-148.72-61.942-55.196-61.942-55.196-160.99 0-105.18 56.729-168.35 57.035-63.475 155.47-63.475 88.926 0 143.82 61.022 55.196 60.715 55.196 159.45 0 109.16-56.422 171.72-17.479 19.625-38.944 32.811l106.71 81.26h-51.209l-83.1-66.848q-37.41 15.332-84.327 15.332zm3.0664-427.15q-76.66 0-126.34 55.502-49.369 55.502-49.369 145.35 0 90.766 46.916 144.74 46.916 53.662 125.11 53.662 81.567 0 129.1-53.049 47.53-53.356 47.53-148.41 0-93.219-46.61-145.35-46.303-52.436-126.34-52.436z"/>
<path d="m1826.9 714.08q-22.078 10.426-41.397 10.426-69.608 0-69.608-83.407v-210.97h-56.422v-25.758h56.422v-81.567q6.7461-2.4531 14.106-4.9063 7.3594-2.1465 14.106-4.5996v91.073h82.793v25.758h-82.793v207.29q0 32.504 10.119 47.223 10.426 14.412 34.957 14.412 17.479 0 37.717-11.346z"/>
<path d="m2353.7 718.37-50.289-136.76h-190.73l-50.289 136.76h-33.424l165.89-439.72h28.824l164.05 439.72zm-134.92-367.97q-3.373-9.1993-5.5195-18.092-2.1465-7.6661-4.5997-15.332h-1.2265q-5.2129 20.238-10.119 32.811l-73.901 203.92h169.57z"/>
<path d="m2679 718.37v-57.035h-1.2266q-15.332 29.744-45.383 47.223-30.051 17.479-67.768 17.479-57.955 0-94.752-42.317-36.49-42.317-36.49-116.83 0-76.047 39.864-122.96 40.17-47.223 103.95-47.223 70.528 0 100.58 57.955h1.2266v-201.16h28.211v464.87zm0-191.04q0-43.85-27.904-74.207-27.598-30.664-74.514-30.664-49.369 0-81.567 38.024-32.198 37.717-32.198 103.95 0 65.008 28.824 100.58 29.131 35.264 74.821 35.264 53.662 0 83.1-33.117 29.438-33.424 29.438-81.26z"/>
<path d="m2910.8 718.37h-25.758l-121.43-314h31.584l93.526 249.91q6.7462 18.092 9.5059 32.811h1.2266q3.9864-19.318 8.8926-31.584l96.592-251.14h30.664z"/>
<path d="m3280 718.37v-62.862h-1.2265q-15.026 32.197-43.85 51.516-28.518 19.012-63.475 19.012-44.77 0-70.834-25.145t-26.065-63.475q0-82.18 108.86-99.352l96.592-14.412q0-101.19-76.047-101.19-51.822 0-100.89 41.703v-34.037q17.479-13.799 47.223-23.611 30.051-9.8126 56.422-9.8126 48.449 0 74.821 30.051 26.678 30.051 26.678 87.393v204.22zm-86.473-156.39q-49.369 7.0528-69.301 22.998-19.932 15.639-19.932 51.209 0 27.904 18.398 45.996 18.705 18.092 51.822 18.092 45.383 0 75.434-33.424 30.051-33.731 30.051-86.78v-30.664z"/>
<path d="m3616.1 718.37v-182.76q0-113.15-81.567-113.15-45.383 0-74.514 33.424-29.131 33.117-29.131 82.18v180.31h-28.211v-314h28.211v57.035h1.2266q34.344-64.701 107.32-64.701 50.903 0 77.887 34.037 26.984 33.731 26.984 96.592v191.04z"/>
<path d="m3942.1 704.57q-34.957 21.465-83.407 21.465-64.088 0-103.34-43.85-39.25-44.156-39.25-115.3 0-74.821 44.156-122.35 44.156-47.836 113.46-47.836 35.877 0 69.608 14.719v31.891q-33.731-20.852-73.901-20.852-55.196 0-89.54 39.863-34.344 39.557-34.344 102.73 0 61.022 31.278 98.125 31.584 37.104 83.1 37.104 47.223 0 82.18-25.145z"/>
<path d="m4024.3 562.6q0 64.701 29.744 101.19 30.051 36.49 82.18 36.49 52.742 0 103.03-38.944v30.051q-48.756 34.651-108.86 34.651-60.715 0-98.126-43.543-37.41-43.543-37.41-122.96 0-68.688 38.944-115.6 39.25-47.223 101.81-47.223 58.569 0 89.846 41.09t31.278 112.23v12.572zm203-25.758q-1.8399-54.276-26.065-84.327-24.225-30.051-66.848-30.051-44.156 0-73.287 29.744-28.824 29.438-35.57 84.633z"/>
<path d="m4557.5 718.37v-57.035h-1.2266q-15.332 29.744-45.383 47.223-30.051 17.479-67.768 17.479-57.955 0-94.752-42.317-36.49-42.317-36.49-116.83 0-76.047 39.863-122.96 40.17-47.223 103.95-47.223 70.528 0 100.58 57.955h1.2266v-201.16h28.211v464.87zm0-191.04q0-43.85-27.904-74.207-27.598-30.664-74.514-30.664-49.369 0-81.567 38.024-32.197 37.717-32.197 103.95 0 65.008 28.824 100.58 29.131 35.264 74.821 35.264 53.662 0 83.1-33.117 29.438-33.424 29.438-81.26z"/>
<path d="m4864.5 718.37v-439.72h110.08q109.47 0 166.51 54.582 57.035 54.582 57.035 159.15 0 100.58-61.328 163.44-61.022 62.555-168.65 62.555zm30.358-411.82v384.22h68.994q97.819 0 150.25-50.596 52.436-50.903 52.436-146.57 0-187.05-196.56-187.05z"/>
<path d="m5407.5 726.04q-68.688 0-108.86-45.076-39.863-45.383-39.863-117.75 0-78.194 41.703-122.35 42.01-44.156 110.39-44.156 67.155 0 106.1 43.85 38.944 43.85 38.944 121.43 0 73.287-39.863 118.67-39.557 45.383-108.55 45.383zm2.1465-303.58q-55.502 0-88.62 37.41-32.811 37.41-32.811 103.95 0 61.635 32.197 99.045 32.197 37.41 88.006 37.41 56.729 0 87.393-36.797t30.664-102.11q0-67.155-30.664-103.03-30.358-35.877-86.166-35.877z"/>
<path d="m5837.1 704.57q-34.957 21.465-83.407 21.465-64.088 0-103.34-43.85-39.25-44.156-39.25-115.3 0-74.821 44.156-122.35 44.156-47.836 113.46-47.836 35.877 0 69.608 14.719v31.891q-33.731-20.852-73.901-20.852-55.196 0-89.54 39.863-34.344 39.557-34.344 102.73 0 61.022 31.278 98.125 31.584 37.104 83.1 37.104 47.223 0 82.18-25.145z"/>
<path d="m6092.2 718.37-150.25-155.16h-1.2266v155.16h-28.211v-464.87h28.211v299.59h1.2266l142.59-148.72h36.49l-149.03 152.09 160.99 161.91z"/>
<path d="m6205.1 325.26q-9.1992 0-16.252-6.7461-7.0528-6.7461-7.0528-17.172 0-10.119 7.0528-16.252 7.3594-6.4395 16.252-6.4395 9.506 0 16.559 6.1328 7.3594 6.1328 7.3594 16.559 0 9.8126-7.0527 16.865-7.0528 7.0528-16.865 7.0528zm-13.799 393.12v-314h28.211v314z"/>
<path d="m6533.5 718.37v-182.76q0-113.15-81.567-113.15-45.383 0-74.514 33.424-29.131 33.117-29.131 82.18v180.31h-28.211v-314h28.211v57.035h1.2265q34.344-64.701 107.32-64.701 50.902 0 77.887 34.037 26.984 33.731 26.984 96.592v191.04z"/>
<path d="m6907.3 695.07q0 88.62-38.637 129.71-38.637 41.09-120.2 41.09-45.383 0-93.526-23.918v-29.438q49.676 27.598 94.139 27.598 130.02 0 130.02-137.38v-40.783h-1.2266q-37.104 64.088-113.15 64.088-57.955 0-94.752-42.01-36.49-42.01-36.49-117.14t39.557-122.66q39.557-47.53 104.26-47.53 69.301 0 100.58 57.342h1.2266v-49.676h28.211zm-28.211-170.19q0-41.703-28.211-72.061-27.904-30.358-72.981-30.358-51.822 0-83.407 38.944-31.584 38.944-31.584 103.03 0 64.395 28.824 100.27 29.131 35.57 76.66 35.57 50.596 0 80.647-32.811 30.051-32.811 30.051-80.34z"/>
</g>
<g transform="translate(581.23 1750.5)">
<path d="m191.64-726.53h-521.75c-138.69 0-251.12-112.43-251.12-251.12v-521.75c0-138.69 112.43-251.12 251.12-251.12h521.75c138.69 0 251.12 112.43 251.12 251.12v521.75c0 138.69-112.43 251.12-251.12 251.12z" fill="#e0e0e0" style="mix-blend-mode:normal"/>
<path d="m-175.9-1515.9v256h469.33v-256z" fill="#009ddd" style="mix-blend-mode:normal"/>
<path d="m80.1-1217.2v256h213.33v-256z" fill="#ff9833" style="mix-blend-mode:normal"/>
<path d="m-175.9-1217.2v256h213.33v-256z" fill="#accb01" style="mix-blend-mode:normal"/>
<path d="m-431.9-1515.9v554.67h213.33v-554.67z" fill="#0083c3" style="mix-blend-mode:normal"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
doc/ads_logo_ukraine.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

View File

@@ -0,0 +1,101 @@
# Advanced Docking System for Qt
Qt Advanced Docking System lets you create customizable layouts using a full
featured window docking system similar to what is found in many popular
integrated development environments (IDEs) such as Visual Studio.
[![Video Advanced Docking](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/advanced-docking_video.png)](https://www.youtube.com/watch?v=7pdNfafg3Qc)
Everything is implemented with standard Qt functionality without any
platform specific code. Basic usage of QWidgets and QLayouts and using basic
styles as much as possible.
## Features
### Docking everywhere - with or without a central widget
The Advanced Docking System works with or without a central widget.
You can dock on every border of the main window or you can dock into each dock area - so you are
free to dock almost everywhere.
![Dropping widgets](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/preview-dragndrop.png)
![Dropping widgets](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/preview-dragndrop_dark.png)
### Docking inside floating windows
There is no difference between the main window and a floating window. Docking
into floating windows is supported.
![Docking inside floating windows](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/floating-widget-dragndrop.png)
![Docking inside floating windows](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/floating-widget-dragndrop_dark.png)
### Grouped dragging
When dragging the titlebar of a dock, all the tabs that are tabbed with it are
going to be dragged. So you can move complete groups of tabbed widgets into
a floating widget or from one dock area to another one.
![Grouped dragging](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/grouped-dragging.gif)
![Grouped dragging](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/grouped-dragging_dark.png)
### Perspectives for fast switching of the complete main window layout
A perspective defines the set and layout of dock windows in the main
window. You can save the current layout of the dockmanager into a named
perspective to make your own custom perspective. Later you can simply
select a perspective from the perspective list to quickly switch the complete
main window layout.
![Perspective](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/perspectives.gif)
![Perspective](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/perspectives_dark.png)
### Opaque and non-opaque splitter resizing
The advanced docking system uses standard QSplitters as resize separators and thus supports opaque and non-opaque resizing functionality of QSplitter. In some rare cases, for very complex widgets or on slow machines resizing via separator on the fly may cause flicking and glaring of rendered content inside a widget. The global dock manager flag `OpaqueSplitterResize` configures the resizing behaviour of the splitters. If this flag is set, then widgets are resized dynamically (opaquely) while interactively moving the splitters.
![Opaque resizing](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/opaque_resizing.gif)
If this flag is cleared, the widget resizing is deferred until the mouse button is released - this is some kind of lazy resizing separator.
![Non-opaque resizing](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/non_opaque_resizing.gif)
### Opaque and non-opaque undocking
By default, opaque undocking is active. That means, as soon as you drag a dock widget or a dock area with a number of dock widgets it will be undocked and moved into a floating widget and then the floating widget will be dragged around. That means undocking will take place immediately. You can compare this with opaque splitter resizing. If the flag `OpaqueUndocking` is cleared, then non-opaque undocking is active. In this mode, undocking is more like a standard drag and drop operation. That means, the dragged dock widget or dock area is not undocked immediately. Instead, a drag preview widget is created and dragged around to indicate the future position of the dock widget or dock area. The actual dock operation is only executed when the mouse button is released. That makes it possible, to cancel an active drag operation with the escape key.
The drag preview widget can be configured by a number of global dock manager flags:
- `DragPreviewIsDynamic`: if this flag is enabled, the preview will be adjusted dynamically to the drop area
- `DragPreviewShowsContentPixmap`: the created drag preview window shows a static copy of the content of the dock widget / dock are that is dragged
- `DragPreviewHasWindowFrame`: this flag configures if the drag preview is frameless like a QRubberBand or looks like a real window
The best way to test non-opaque undocking is to set the standard flags: `CDockManager::setConfigFlags(CDockManager::DefaultNonOpaqueConfig)`.
### Tab-menu for easy handling of many tabbed dock widgets
Tabs are a good way to quickly switch between dockwidgets in a dockarea. However, if the number of dockwidgets in a dockarea is too large, this may affect the usability of the tab bar. To keep track in this situation, you can use the tab menu. The menu allows you to quickly select the dockwidget you want to activate from a drop down menu.
![Tab menu](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/tab_menu.gif)
### Many different ways to detach dock widgets
You can detach dock widgets and also dock areas in the following ways:
- by dragging the dock widget tab or the dock area title bar
- by double clicking the tab or title bar
- by using the detach menu entry from the tab and title bar drop down menu
### Supports deletion of dynamically created dock widgets
Normally clicking the close button of a dock widget will just hide the widget and the user can show it again using the toggleView() action of the dock widget. This is meant for user interfaces with a static amount of widgets. But the advanced docking system also supports dynamic dock widgets that will get deleted on close. If you set the dock widget flag `DockWidgetDeleteOnClose` for a certain dock widget, then it will be deleted as soon as you close this dock widget. This enables the implementation of user interfaces with dynamically created editors, like in word processing applications or source code development tools.
### Python PyQt5 Bindings
![Python Logo](https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/python_logo.png)
The Advanced Docking System comes with a complete Python integration based on
PyQt5 bindings. The package is available via [conda-forge](https://github.com/conda-forge/pyqtads-feedstock).

View File

@@ -0,0 +1,30 @@
{
"$schema": "http://qt.io/schema/extension-schema-v1#",
"title": "Qt Advanced Docking System",
"extensionType": [
"library"
],
"version": "3.8.2",
"vendor": {
"name": "githubuser0xFFFF",
"url": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System"
},
"contact": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues",
"icon": "https://raw.githubusercontent.com/githubuser0xFFFF/Qt-Advanced-Docking-System/master/doc/ads_icon.svg",
"licenses": [
{ "licenseType": "LGPL-2.1-only",
"licenseUrl": "https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" }
],
"created": "2017-03-30",
"lastUpdate": "2022-03-02",
"platforms": [
"Windows 7-11", "Kubuntu 18.04", "Kubuntu 19.10", "Ubuntu 19.10", "Ubuntu 20.04"
],
"qtVersions": [
"5.5.1 or newer"
],
"tags": [
"Widgets", "Docking"],
"bugUrl": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues",
"sourceRepoUrl": "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
doc/central_widget.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 KiB

Some files were not shown because too many files have changed in this diff Show More