Compare commits

..

1223 Commits

Author SHA1 Message Date
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
09e4e6fa5a Fixed nullptr access in DockWidgetTab 2023-06-27 10:18:38 +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
Uwe Kindler
9af6622466 Removed non existing resources from main.qrc 2019-01-15 19:45:14 +01:00
githubuser0xFFFF
4fa89374c4 Merge pull request #16 from sgaist/various_fixes
Various fixes
2019-01-15 19:29:32 +01:00
Samuel Gaist
1aaa56ef29 Removed non existing header in include 2019-01-15 17:24:29 +01:00
Samuel Gaist
d298a47bda Removed unused constants 2019-01-15 17:24:11 +01:00
Samuel Gaist
146b65206a Fix missing override warning 2019-01-15 17:23:47 +01:00
Samuel Gaist
616ad9f86e Add more generated files to gitignore 2019-01-15 17:20:29 +01:00
Samuel Gaist
aa9762718c Fix subdirs handling
It's considered bad practice to use the ordered CONFIG option. This
patch properly setups the subdirs dependencies.
2019-01-15 17:17:45 +01:00
githubuser0xFFFF
f26bee6677 Update README.md
Added video
2019-01-15 13:05:21 +01:00
Uwe Kindler
fb18de4868 Added new image for faking embedded youtube video 2019-01-15 13:01:47 +01:00
Uwe Kindler
e204e10113 Removed unused function 2019-01-15 11:47:57 +01:00
githubuser0xFFFF
a06a14d6cd Merge pull request #15 from skartashev/master
Qt 5.5.1 (ubuntu 16.04) compatibility buildfixes
2019-01-15 11:41:37 +01:00
Sergey Kartashev
88d4bea2c1 Qt 5.5.1 (ubuntu 16.04) compatibility buildfixes 2019-01-15 10:12:34 +03:00
Uwe Kindler
b8ad2f7577 Removed superfluous windows.h include from main.cpp and removed unused local variable FloatingContainer from dropIntoSection() function 2019-01-14 14:18:44 +01:00
Uwe Kindler
32e5d599f7 Improved handling of sizes when dropping or removing content 2019-01-14 13:58:40 +01:00
Uwe Kindler
48382ccd82 Merged the two draging state enumerations into a single one and reused it in FloatingDockContainer 2018-12-20 16:25:30 +01:00
Uwe Kindler
e37e4fdf57 Added context menu for dock area title bar to enable closing of area and other areas via context menu and to enable detaching of dock area via context menu 2018-12-20 15:29:38 +01:00
Uwe Kindler
c9a97534a8 Fixed indentationin README.md example 2018-12-20 09:20:17 +01:00
Uwe Kindler
8f54dd2a82 Added example project and updated documentation 2018-12-20 09:15:02 +01:00
githubuser0xFFFF
c0d6f959ec Merge pull request #12 from skartashev/master
fix forward declarations (class/struct)
2018-12-17 16:21:30 +01:00
Sergey Kartashev
8570139cd1 fix forward declarations (class/struct) 2018-12-17 14:41:43 +03:00
githubuser0xFFFF
b38919e909 Update README.md 2018-12-14 23:18:15 +01:00
githubuser0xFFFF
b19cc98c84 Update README.md 2018-12-14 23:16:49 +01:00
githubuser0xFFFF
f3f5b668e5 Update README.md 2018-12-12 11:59:29 +01:00
Uwe Kindler
82d15fbe29 Added new images for documentation 2018-12-12 11:46:16 +01:00
Uwe Kindler
01533a9f85 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2018-12-11 16:15:16 +01:00
Uwe Kindler
fb9f1d851b Updated doc images 2018-12-11 16:14:34 +01:00
githubuser0xFFFF
6fb80fdeb7 Update README.md 2018-12-11 15:26:38 +01:00
githubuser0xFFFF
e94cf9bcb7 Update README.md 2018-12-11 15:25:42 +01:00
Uwe Kindler
da0ec6dd4b Moved images into doc folder 2018-12-11 15:24:08 +01:00
Uwe Kindler
80efed693e Removed unused DockStateSerialization files, added support for opaque splitter resizing 2018-12-11 15:19:59 +01:00
Uwe Kindler
653f475e72 Removed wrong visibility initialisation of titlebar close button, added hideEmptyParentSplitters() function to properly hide tree of empty parent splitters if DockArea or DockWidget is removed, 2018-12-03 12:52:57 +01:00
Uwe Kindler
87e3777e37 Fixed hiding and showing of close button for tab group, added support for removing perspectives 2018-12-02 12:09:31 +01:00
Uwe Kindler
71f66ea6dc Improved ElidingLabel 2018-11-30 16:09:57 +01:00
Uwe Kindler
0b3f419c80 Added missing main.qrc file 2018-11-20 08:00:51 +01:00
Uwe Kindler
f69af82a49 Implemented context menu for dock widget tab to close or detach tab or to close all other tabs 2018-11-09 10:07:56 +01:00
Uwe Kindler
854f542164 Added global config flags to support different dock manager behaviour 2018-11-08 12:57:25 +01:00
Uwe Kindler
b9265fccec Properly implemented setting enable state of dock area close button 2018-11-08 12:22:15 +01:00
Uwe Kindler
b3a272110a Some changes for dockwidget tab close button, some refactorings to make insertion of widgets into dock widget easier, added createDefaultToolBar function for creation of toolbar and removed layout flags from CDockWidget 2018-11-08 10:04:29 +01:00
Uwe Kindler
316e5324ad Fixed showing of unassigned dock widgets 2018-11-07 14:34:49 +01:00
Uwe Kindler
6843703484 Fixed title bar button minimum size to enable stylesheet styling, fixed restore functionality 2018-11-07 13:50:43 +01:00
Uwe Kindler
115a9a5b3d Added High DPI support for the creation of drop indicator pixmaps 2018-11-05 14:12:34 +01:00
Uwe Kindler
a4838a41ac Added ElidingLabel to support text eliding for dock area tabs, removed debug output 2018-11-05 12:00:56 +01:00
Uwe Kindler
74b9d35c7b Fixed start drag distance to be based on QApplication::startDragDistance, fixed dragging of dock widget title bar to support dragging in x and y direction 2018-11-05 09:58:46 +01:00
Uwe Kindler
c973482b2b Properly implemented showing and hiding of TitleBarUndockButton 2018-11-05 09:07:18 +01:00
Uwe Kindler
188624440b Fixed proper selection and deselection of current tab in tabbar 2018-11-03 21:48:35 +01:00
Uwe Kindler
72ec61a043 Added access functions for the titlebar buttons 2018-11-03 20:51:02 +01:00
Uwe Kindler
0ac19ebdfb Update qrc and pro file 2018-11-02 09:31:13 +01:00
Uwe Kindler
bc6ffcc02c Fixed update of floating widget window title, make disabled close button look nicer, fixed restoring of floating dock container, change save and restore functionality of dock area to save the current dock widget name instead of the current index to ensure that the right dock widget is active in an area if the number of dock widgets changes for some reasons (i.e. in plugin based applications) 2018-11-02 09:19:53 +01:00
Uwe Kindler
a9246f7ce4 Switched to ToolButton instead of PushButtons for Close- and TabsMenu button in dock area title bar 2018-11-01 09:07:10 +01:00
Uwe Kindler
3f5697554a Changed store and restore functioality to save the current dock widget name of an dock area instead of the current index because if some dock widgets are missing when loading the configuration, the dock index might be wrong 2018-11-01 08:52:14 +01:00
Uwe Kindler
5e6c82b68d Started implementing VisibleDockAreaCount cache 2018-11-01 07:53:54 +01:00
Uwe Kindler
268f8655a1 Some smal improvements in FloatingDockContainer 2018-10-31 22:13:34 +01:00
Uwe Kindler
1dfabb3bef Fixed handling of dock area removal in floating dock container, added close-button.svg icon to enable display of disabled close button 2018-10-31 00:50:18 +01:00
Uwe Kindler
6617cf6f19 Implemented proper updating of floating widget title 2018-10-30 23:45:59 +01:00
Uwe Kindler
81523b0346 Removed code for disabling close button because this caused trouble, fixed updating of window title if dock area is removed 2018-10-30 14:30:02 +01:00
Uwe Kindler
927be9a7d9 Improved detection of dock widget dragging - uses a distance now (half the height of dock area title bar) 2018-10-15 15:09:59 +02:00
Uwe Kindler
ada3d6b3b5 Added minimumSizeHint function to DockWidget to prevent jumping of the height of a dock area when switching between dock widgets, fixed use of findParent function in DockWidget - non current dock widgets do not have a parent so this function will fail 2018-10-15 08:29:30 +02:00
Uwe Kindler
30bbd26d0a Added license information to DockAreTabBar and to DockAreTitleBar 2018-10-12 15:29:41 +02:00
Uwe Kindler
8637c89a6b Added proper support for closable feature, now the close button is disabled for floating widgets 2018-10-12 15:18:05 +02:00
Uwe Kindler
11e5f9c95a Properly implemented DockAreaTitle bar to encapsulate title bar functionality 2018-10-12 14:51:57 +02:00
Uwe Kindler
9bfb3fbea1 Created new DockAreaTitleBar class to encapsulate all title bar functionality 2018-10-12 13:37:37 +02:00
Uwe Kindler
9c95e34df5 Fixed some bugs in tabbar handling 2018-10-12 11:51:35 +02:00
Uwe Kindler
ceebda7431 Properly implemented tab removal in new DockAreaTabBar class 2018-10-12 10:41:19 +02:00
Uwe Kindler
75288af88c Properly implemented tab moving 2018-10-12 09:17:14 +02:00
Uwe Kindler
7c67d71f68 Fixed DockAreaTabBar.cpp to properly count the contained tabs (ignore stretch item) 2018-10-11 15:23:19 +02:00
Uwe Kindler
548dfb363a Fixed the return value of dockContainer() function if no dock area is assigned, fixed flagAsUnassigned() function 2018-10-11 14:15:27 +02:00
Uwe Kindler
9fec2bd515 Fixed chrash on restore state when accessing FloatingWidget that has been marked for deletion (deleteLater()) 2018-10-11 13:30:12 +02:00
Uwe Kindler
fc04aa2411 Added some debug output 2018-10-11 13:07:27 +02:00
Uwe Kindler
c3a5e3ef21 Fixed dropping of floating widgets with multiple dock widgets 2018-10-11 10:55:36 +02:00
Uwe Kindler
0e85431405 Changed stylesheet to highlight the active tab to improve debugging 2018-10-11 09:21:01 +02:00
Uwe Kindler
b3b6d20d96 Added dockWidgets() function to DockContainerWidget.h because invisible dock widgets are no children of a dock area and therefore FindChildrenRecursively() does not work 2018-10-11 08:54:32 +02:00
Uwe Kindler
272bbe275e Started implementing DockAreaTabBar to improve code, encapsulation and performance 2018-10-10 15:15:59 +02:00
Uwe Kindler
496aec211e Added new signals restoringState(), stateRestored(), openingPerspective(), perspectiveOpened(), improved restore state function to protect against multiple calls and to prevent show() events for all CDockWidgets and content if the widgets are removed from internal stack layout 2018-09-27 16:21:14 +02:00
Uwe Kindler
b9b72df9d4 Fixed some bugs that caused problems when calling toggleView() with the same state, some refactorings to improve code 2018-09-26 09:57:36 +02:00
Uwe Kindler
fcb1846bf5 Fixed resizing of dropped widget to the size of the dock overlay, small improve to improve performance when dropping into a container with many widgets 2018-09-14 15:02:47 +02:00
Uwe Kindler
9f1b2c122a Fixed showing and hiding of dock widget title bar. If a dock widget is the one and only visible widget in a FloatingDockContainer, then this widget does not have a tile bar because the window already has a window frame that provides the same functionality 2018-09-14 13:21:29 +02:00
Uwe Kindler
6ec38b48ef Fixed proper hiding of dock areas without any visible content when dragging out singkle widgets, prevente single dock widget from dragging if it is the last dock widget in a floating widget 2018-09-14 08:46:10 +02:00
Uwe Kindler
b93e723a83 Fixed problem in FloatingDockContainer.cpp that caused problem when dragging a maximized window, added support for sorted insertion of toggleView actions into vieMenu 2018-09-13 22:19:13 +02:00
Uwe Kindler
1a47918bdb Changed FloatingDockContainer to use an internal state machine to improve code clarity and to handle some corner cases on Windows where resizing and moving the floating window to the screen edges caused trouble 2018-09-12 15:37:07 +02:00
Uwe Kindler
ff9d965726 Fixed FloatingDockContainer dragging states 2018-09-12 15:00:16 +02:00
Uwe Kindler
77d2cebe39 Added support for a default tool bar in dockwidgets that can ajust the tool button size according to the floating state, added support for inserting the content widget in a scoll area to provide better resizing for dock widgets 2018-09-12 13:52:10 +02:00
Uwe Kindler
5d380708e1 Added support for make a single tab floating via double click 2018-09-07 13:13:44 +02:00
Uwe Kindler
aa7b36dbd1 Removed debug output 2018-09-07 12:56:20 +02:00
Uwe Kindler
c9123c3640 Fixed setting of tab widget visibility and toggleViewAction() state when dragging dock areas with closed dock widgets 2018-09-07 12:38:11 +02:00
Uwe Kindler
67199a81f4 Fixed docking into empty main dock container, fixed tab handling to properly show the right dock widget tab when removing a dock widget, fixed tab menu to only show visible tabs, tab menu is now dynamically created just befor menu is shown 2018-09-07 11:10:14 +02:00
Uwe Kindler
72ee4a53df Improved documentation, made a lot of member functions protected to make it clearer which functions the user is allowed to use, the CDockWidget constructor now sets the objectName() to the given title, so there is no need to call setObjectName() explicitely if the title is static and unique 2018-08-29 08:47:05 +02:00
Uwe Kindler
0b963d1540 Added support for stylesheet styling of overlay cross icons, fixed problem when dragging a floating widget that was maximized, removed som std::cout debug output 2018-08-28 13:25:44 +02:00
Uwe Kindler
9cd2584de5 Added support for display of dock widget icons in DockArea tab menus 2018-08-27 15:40:01 +02:00
Uwe Kindler
3f40c997e5 Improved and fixed handling of CDockWidget::DockWidgetMovable - moving the tab in the tabbar is always allowed, only moving the complete dock widget can be blocked by clearing this flag 2018-08-24 14:04:21 +02:00
Uwe Kindler
6b93ae9c39 Some refactoring to improve code clarity, renamed DockWidgetTitleBar into DockWidgetTab because in the GUI it is a tab, created new class CDockAreaTabBar for the tabbar of a dock area 2018-08-24 13:41:58 +02:00
githubuser0xFFFF
f5b3c0556d Merge pull request #8 from Opostol/master
DockWidgetClosable now prevents Floating Dock Windows from closing
2018-08-14 11:57:01 +02:00
Opostol
5b3841a038 DockWidgetClosable now prevents Floating Dock Windows from closing
Also std::cout were replaced with common used qDebug()
2018-08-10 18:02:29 +03:00
githubuser0xFFFF
9d00a278e6 Merge pull request #7 from Opostol/master
DockWidgetMovable implemented, some signals introduced
2018-08-10 14:23:00 +02:00
Opostol
b470dd5f99 DockManager stateChanged signal introduced(part2) 2018-08-10 15:12:38 +03:00
Opostol
7b4a19b943 DockManager stateChanged signal introduced(part1)
Can be helpful to reconnect to area signals
2018-08-10 15:11:57 +03:00
Opostol
8eceed9aa3 Dock area currentChanging signal introduced(part2) 2018-08-10 14:48:20 +03:00
Opostol
4188d69356 Dock area currentChanging signal introduced(part1)
currentChanging signal helps to save previous layout state before tab will be changed
2018-08-10 14:46:57 +03:00
Opostol
3fc7c195c3 DockWidgetMovable feature implemented
In my implementation DockWidgetMovable feature also not allows tab to float.
2018-08-10 13:54:09 +03:00
Uwe Kindler
f823b67a4a Added support for export of shared library functions to support MSVC builds 2018-07-17 15:11:49 +02:00
githubuser0xFFFF
064cab405a Merge pull request #4 from emoon/mac-compile-warning-fixes
Compile and warning fixes for macOS
2018-05-07 07:37:54 +02:00
Daniel Collin
75ad302d21 Compile and warning fixes for macOS
Number of warnings like this has been fixed

DockWidget.h:62:9: warning: class 'DockContainerWidgetPrivate' was previously declared as a struct [-Wmismatched-tags]

Also in ads_globals.cpp Clang didn’t like how that code setup so I changed it to what I think is the correct way. This would be good to get verified.
2018-05-06 12:45:46 +02:00
Uwe Kindler
18a4f17fbf Fixed a typo in README.md 2018-02-13 12:56:33 +01:00
Uwe Kindler
6266cd3290 Updated README.md and removed superfluous files 2018-02-13 12:50:35 +01:00
Uwe Kindler
8a401ebd68 Fixed a bug in restore functionality that caused application crash, added initial support for perspectives 2018-02-13 12:00:58 +01:00
Uwe Kindler
805e97946e Fixed some issues with restoreState function 2018-02-13 07:28:38 +01:00
Uwe Kindler
e878bb47ed Added support for setting the DockWidget icon - this icon is shown in the title bar or when using the ToggleViewAction 2018-01-02 08:01:23 +01:00
Uwe Kindler
dae852d9f9 Implemented XML serialization and loading of docking state 2017-12-29 18:18:16 +01:00
Uwe Kindler
8a014a6c2d Fixed typo 2017-09-11 10:16:31 +02:00
Uwe Kindler
9676eeb1bf Fixed removeDockArea function, fixed bug when docking into empty container, fix several small bugs, improved code documentation 2017-09-06 15:45:22 +02:00
Uwe Kindler
412f13e1c4 Implemented fix to prevent display of drop overlays and overlay icons when resizing a floating widget 2017-09-05 14:03:43 +02:00
Uwe Kindler
11a30806f6 Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2017-09-04 08:21:36 +02:00
Uwe Kindler
b9257bbe93 Some small fixes to ignore title bar docking if we are over a container drop indicator - this caused come confusion during docking 2017-09-01 16:14:43 +02:00
githubuser0xFFFF
78e81b02fd Update README.md 2017-08-17 13:35:03 +02:00
Uwe Kindler
52c23dafd5 Changed license to LGPL v2.1 2017-06-09 22:04:02 +02:00
Uwe Kindler
bc37a2788e Fixed placing of drop overlay cross, resizing of floating widget to drop
area rectangle size prior to insertion
2017-04-11 23:26:33 +02:00
Uwe Kindler
051c379e4a Fixed startFloating() for FloatingDockContainer if only one DockArea is visble 2017-04-01 22:31:24 +02:00
Uwe Kindler
844c853768 Fixed a bug with shoing and hiding empty splitters, added some pictures to main page 2017-03-29 15:45:36 +02:00
Uwe Kindler
990d3235c5 Removed external dependencies for build, fixed build system, updated preview images to reflect the current state of the library 2017-03-29 12:18:49 +02:00
Uwe Kindler
fd76e9e62b Improved code documentation 2017-03-29 11:09:05 +02:00
Uwe Kindler
a3ff1ae8ee Fixed restore procedure and deletion of floating widgts 2017-03-28 22:38:47 +02:00
Uwe Kindler
17dff82d12 Moved stylesheet from demo into main library 2017-03-28 13:05:18 +02:00
Uwe Kindler
9af86c4136 Replaced std:cout based debug output with qDebug() 2017-03-28 12:01:27 +02:00
Uwe Kindler
aa8a52b845 Fixed bug with FloatingWidget deletion, fixed handling of unassigned DockWidgets after restoreState() call 2017-03-28 10:57:03 +02:00
Uwe Kindler
9adc524a42 Fixed creation of superfluous splitter when docking into container 2017-03-28 08:48:44 +02:00
Uwe Kindler
549646d113 Fixed some small bugs in drop indicator painting 2017-03-27 16:16:22 +02:00
Uwe Kindler
7ba3c1f244 Improved painting of drop indicators 2017-03-27 15:56:15 +02:00
Uwe Kindler
c532c24f79 Improved indicator pixmaps 2017-03-27 13:56:14 +02:00
Uwe Kindler
c5ea5c80b1 Fixed display of drop overlay 2017-03-27 13:18:16 +02:00
Uwe Kindler
1b1c636107 Improved serialization support 2017-03-27 10:41:27 +02:00
Uwe Kindler
2277ba3630 Added initial support for serialization 2017-03-24 16:17:55 +01:00
Uwe Kindler
5dcd15e2b9 Implemented RootSplitter 2017-03-24 12:54:43 +01:00
Uwe Kindler
a652deba71 Started inserting RootSplitter 2017-03-24 10:18:25 +01:00
Uwe Kindler
1cd1e7d6ec Started implementing serialization and deserialization 2017-03-23 15:57:15 +01:00
Uwe Kindler
16bd1a3bd2 Implemented proper hiding and showing of dock widgets 2017-03-23 10:23:53 +01:00
Uwe Kindler
b6ee26adc2 Improved hide / show functionality of dock widgets 2017-03-22 16:08:44 +01:00
Uwe Kindler
0d6f469a36 Startet implementing and refactoring hide show code 2017-03-21 11:27:26 +01:00
Uwe Kindler
338b10695a Merge branch 'master' of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 2017-03-13 15:34:49 +01:00
Uwe Kindler
239bd4781b Added signals for dock area added and removed 2017-03-13 15:34:40 +01:00
Uwe Kindler
97571e4be8 Refactoring of project structure 2017-03-12 21:41:50 +01:00
Uwe Kindler
c57d14d0d7 Implemented restoring of hidden floating widgets 2017-03-11 21:38:31 +01:00
githubuser0xFFFF
a0849dd19f Set theme jekyll-theme-midnight 2017-03-07 22:15:43 +01:00
Uwe Kindler
52aedfed31 Improved design of drop overlay cross 2017-03-03 15:47:03 +01:00
Uwe Kindler
fade9d7b7c Improved handling of tabified widgets, improced CSS to decrease height of title bars 2017-03-03 14:27:37 +01:00
Uwe Kindler
a8ccbfa407 Implemented support for dropping into a dock are 2017-03-03 13:42:41 +01:00
Uwe Kindler
f9f064dd71 Implemented support for container docking 2017-03-02 15:49:53 +01:00
Uwe Kindler
fac5661280 Improved support when moving widgets out of FloatingWidget 2017-03-02 11:43:48 +01:00
Uwe Kindler
df85c8bee0 Initial and basic implementation of dock overlays 2017-03-01 16:13:37 +01:00
Uwe Kindler
e0a442263e Implemented support for dragging a complete dock area including all dock widgets 2017-03-01 14:36:46 +01:00
Uwe Kindler
2c9ceb8645 Implemented initial support for floating widgets 2017-03-01 14:09:56 +01:00
Uwe Kindler
b31c5f1f3d Added initial support for docking into dock areas 2017-02-28 22:41:34 +01:00
Uwe Kindler
c14352e7c1 Implemented proper tab handling 2017-02-28 15:23:02 +01:00
Uwe Kindler
f0584ff0c5 COntinued implementation of new advanced docking system, added stylesheet 2017-02-27 14:15:20 +01:00
Uwe Kindler
4a0c176327 Implemented support for adding dock widgets to DockContainerWidget 2017-02-26 18:13:56 +01:00
Uwe Kindler
94a6f5e2f1 Started implementing clean improved docking system 2017-02-24 22:44:02 +01:00
Uwe Kindler
842cef2675 Remove macro usage for ads namespace 2017-02-23 22:26:13 +01:00
Uwe Kindler
ca64286117 Moved include files from include to src directory 2017-02-23 21:46:29 +01:00
Uwe Kindler
5dc935f650 Started refactoring of SectionConetent into SectionContentWidget 2017-02-23 21:41:51 +01:00
Uwe Kindler
ad49745b18 Refactorings to improve code, started to refactor secion content 2017-02-22 22:33:48 +01:00
Uwe Kindler
938afb7357 Implemented support for dropping mutiple sections into sections 2017-02-20 23:57:32 +01:00
Uwe Kindler
0edc1b4499 Fixed typo in README.md 2017-02-20 10:08:19 +01:00
Uwe Kindler
d0fc4ace07 Switched license to GPLv3 2017-02-20 10:06:55 +01:00
Uwe Kindler
70a7a7b352 Started implementing support for docking multiple sections into section 2017-02-20 07:36:27 +01:00
Uwe Kindler
b93d2fbd48 Some cleanup and support for dropping floating window with multiple setcion into section 2017-02-17 07:40:12 +01:00
Uwe Kindler
635b96a2ae Fixed some issues with mouse double clicks, remove unused and supefluous code 2017-02-15 21:54:26 +01:00
Uwe Kindler
72fc9cd79a Implemented initial support for dropping multiple sections at the same time 2017-02-14 23:55:38 +01:00
Uwe Kindler
268c49af3b Added debug output 2017-02-12 20:06:45 +01:00
Uwe Kindler
025bedfb65 Preparing dropping of section widgets with multiple sections 2017-02-12 19:59:29 +01:00
Uwe Kindler
df97d17844 Fixed movement of witget on start of floating 2017-02-11 22:05:23 +01:00
Uwe Kindler
2bf1a51627 Fixed container removal from MainCOntainerWidget 2017-02-10 21:23:14 +01:00
Uwe Kindler
a4de5c5560 Added suppport for floating widgets with native toolbar to support the windows desktop docking and split system 2017-02-08 23:03:13 +01:00
Uwe Kindler
0716020ab4 Created CFloatingTitleWidget 2017-02-07 23:51:29 +01:00
Uwe Kindler
7f5e393cfb Startet refactoring common container stuff into CContainerWidget 2017-02-03 22:56:08 +01:00
Uwe Kindler
f4c0d38ba4 Continued refactoring to prepare split of functionality of ContainerWidget 2017-01-30 22:44:27 +01:00
Uwe Kindler
411e4002f1 Improved handling and display of border drop overlays. Now border drop overlay items are visible as soon as a floating widget enters container widget area, some refactoring to improve code quality 2017-01-28 12:18:16 +01:00
Uwe Kindler
3fd20fad16 Continued refactoring, created private ContainerWidget class 2017-01-21 22:22:20 +01:00
Uwe Kindler
889d9bff5b Some refactorings to cleanup code, moved ContainerWidget private data into private data class 2017-01-20 22:43:18 +01:00
Uwe Kindler
68b93f6fa9 Started refactoring to improve code quality, overall designa nd to gain knowledge of the impolemented functionality 2017-01-17 07:57:24 +01:00
mfreiholz
abc8468989 fixes build scripts for linux 2016-10-23 11:15:06 +02:00
372 changed files with 37167 additions and 5395 deletions

151
.appveyor.yml Normal file
View File

@@ -0,0 +1,151 @@
version: '{build}'
branches:
only:
- master
image: Visual Studio 2017
environment:
global:
# Appveyor doesn't have Qt 12 yet
LatestQtVersion: 5.13
matrix:
# 32 bit builds
# MSVC 2015 builds
# Dynamic Library builds
# LTS version of Qt, dll, 32bit, MSVC 2015, qmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: x86
use_mingw: "false"
use_static: "false"
use_cmake: "false"
# LTS version of Qt, dll, 32bit, MSVC 2015, cmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: x86
use_mingw: "false"
use_static: "false"
use_cmake: "true"
# end Dynamic Library builds
# Static Library builds
# LTS version of Qt, static, 32bit, MSVC 2015, qmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: x86
use_mingw: "false"
use_static: "true"
use_cmake: "false"
# LTS version of Qt, static, 32bit, MSVC 2015, cmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: x86
use_mingw: "false"
use_static: "true"
use_cmake: "true"
# end Static Library builds
# end MSVC 2015 builds
# MinGW builds
# Dynamic Library builds
# LTS version of Qt, dll, 32bit, MinGW, qmake
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
COMPILER: C:\Qt\Tools\mingw730_32
targetPlatform: x86
use_mingw: "true"
use_static: "false"
use_cmake: "false"
# LTS version of Qt, dll, 32bit, MinGW, cmake
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
COMPILER: C:\Qt\Tools\mingw730_32
targetPlatform: x86
use_mingw: "true"
use_static: "false"
use_cmake: "true"
# end Dynamic Library builds
# Static Library builds
# LTS version of Qt, static, 32bit, MinGW, qmake
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
COMPILER: C:\Qt\Tools\mingw730_32
targetPlatform: x86
use_mingw: "true"
use_static: "true"
use_cmake: "false"
# LTS version of Qt, static, 32bit, MinGW, cmake
- QT5: C:\Qt\%LatestQtVersion%\mingw73_32
COMPILER: C:\Qt\Tools\mingw730_32
targetPlatform: x86
use_mingw: "true"
use_static: "true"
use_cmake: "true"
# end Static Library builds
# end MinGW builds
# end 32 bit builds
# 64 bit builds
# MSVC 2015 builds
# Dynamic Library builds
# LTS version of Qt, dll, 64bit, MSVC 2015, qmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: amd64
use_mingw: "false"
use_static: "false"
use_cmake: "false"
# LTS version of Qt, dll, 64bit, MSVC 2015, cmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: amd64
use_mingw: "false"
use_static: "false"
use_cmake: "true"
# end Dynamic Library builds
# Static Library builds
# LTS version of Qt, static, 64bit, MSVC 2015, qmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: amd64
use_mingw: "false"
use_static: "true"
use_cmake: "false"
# LTS version of Qt, static, 64bit, MSVC 2015, cmake
- QT5: C:\Qt\%LatestQtVersion%\msvc2017_64
COMPILER: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
targetPlatform: amd64
use_mingw: "false"
use_static: "true"
use_cmake: "true"
# end Static Library builds
# end MSVC 2015 builds
# end 64 bit builds
matrix:
fast_finish: true
before_build:
- set originalWD=%CD%
- call "%QT5%\bin\qtenv2.bat"
- cd /D %originalWD%
- if %use_mingw%==false call "%COMPILER%\vcvarsall.bat" %targetPlatform%
- if %use_static%==true (set USESTATIC=ON) else (set USESTATIC=OFF)
- if %use_mingw%==true (set CMAKEGENERATOR="MinGW Makefiles") else (set CMAKEGENERATOR="NMake Makefiles")
- if %use_mingw%==true (set MAKEENGINE=mingw32-make) else (set MAKEENGINE=nmake)
- if %use_mingw%==true set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
build_script:
- if %use_cmake%==true mkdir build
- if %use_cmake%==true cd build
- if %use_cmake%==true cmake --version
- if %use_cmake%==true cmake -G %CMAKEGENERATOR% -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_EXAMPLES=ON -DCMAKE_DEBUG_POSTFIX=d -DBUILD_STATIC=%USESTATIC% -DCMAKE_INSTALL_PREFIX="./installed" ../
- if %use_cmake%==true cmake --build .
- if %use_cmake%==true cmake --build . --target install
- if %use_cmake%==true cmake -G %CMAKEGENERATOR% -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_STATIC=%USESTATIC% -DCMAKE_INSTALL_PREFIX="./installed" ../
- if %use_cmake%==true cmake --build .
- if %use_cmake%==true cmake --build . --target install
- if %use_cmake%==false if %use_static%==true qmake "CONFIG+=adsBuildStatic"
- if %use_cmake%==false if %use_static%==false qmake
- if %use_cmake%==false %MAKEENGINE% debug
- if %use_cmake%==false %MAKEENGINE% install
- if %use_cmake%==false %MAKEENGINE% release
- if %use_cmake%==false %MAKEENGINE% install
after_build:
- if %use_mingw%==true set PATH=C:\Program Files\Git\usr\bin;%PATH%

View File

@@ -1,14 +0,0 @@
--style=allman
--indent=force-tab=4
--align-pointer=type
--align-reference=type
--pad-oper
--pad-header
--unpad-paren
--remove-comment-prefix
--mode=c

1
.gitattributes vendored Normal file
View File

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

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

@@ -0,0 +1,59 @@
name: linux-builds
on: [push]
jobs:
build:
strategy:
matrix:
os: [ubuntu-20.04]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v1
- name: install qt
run: |
sudo apt-get update --fix-missing
sudo apt-get install qt5-default
sudo apt-get install qtbase5-private-dev
- name: qmake
run: qmake
- name: make
run: make -j4
build_ubuntu_2204:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Cache Qt
id: cache-qt-6-4
uses: actions/cache@v1 # not v2!
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)

385
.gitignore vendored
View File

@@ -1 +1,386 @@
*.pro.user
/build
*.o
*.dylib
*.app
qrc_*
moc_*
ui_*
Makefile
# 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

27
.project Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>QtAdvancedDockingSystem</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@@ -1,24 +1,233 @@
language:
- cpp
language: cpp
# gcc is clang on mac
compiler: gcc
compiler:
- g++
addons:
apt:
matrix:
fast_finish: true
include:
- name: Ubuntu qmake Qt5.5.1
os: linux
dist: trusty
group: stable
addons:
apt:
sources:
- ubuntu-sdk-team
- ubuntu-toolchain-r-test
- sourceline: 'ppa:beineri/opt-qt551-trusty'
update: true
packages:
- qt5-qmake
- qtbase5-dev
- qtdeclarative5-dev
- libqt5webkit5-dev
- libsqlite3-dev
- qt55base
- qt55tools
- gcc-9
- g++-9
script:
- PATH="/opt/qt55/bin:$PATH"
- CXX="g++-9"
- CC="gcc-9"
- qt55-env.sh
- qmake
- make
- make install
- name: Ubuntu qmake dll
os: linux
dist: bionic
group: stable
services:
- xvfb
compiler: gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
update: true
packages:
- qt514base
- qt514tools
- gcc-9
- g++-9
- libc6-i386
- libgl-dev
- libgl1-mesa-dev
- mesa-common-dev
script:
- PATH="/opt/qt514/bin:$PATH"
- CXX="g++-9"
- CC="gcc-9"
- qt514-env.sh
- qmake
- make
- make install
- name: Ubuntu qmake static
os: linux
dist: bionic
group: stable
services:
- xvfb
compiler: gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
update: true
packages:
- qt514base
- qt514tools
- gcc-9
- g++-9
- libc6-i386
- libgl-dev
- libgl1-mesa-dev
- mesa-common-dev
script:
- PATH="/opt/qt514/bin:$PATH"
- CXX="g++-9"
- CC="gcc-9"
- qt514-env.sh
- qmake "CONFIG+=adsBuildStatic"
- make
- make install
- name: Ubuntu CMake dll
os: linux
dist: bionic
group: stable
services:
- xvfb
compiler: gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
update: true
packages:
- qt514base
- qt514tools
- gcc-9
- g++-9
- libc6-i386
- libgl-dev
- libgl1-mesa-dev
- mesa-common-dev
script:
- PATH="/opt/qt514/bin:$PATH"
- CXX="g++-9"
- CC="gcc-9"
- qt514-env.sh
- mkdir ./build
- cd ./build
- cmake --version
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_STATIC=OFF -DBUILD_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_STATIC=OFF -DBUILD_EXAMPLES=ON -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- name: Ubuntu CMake Static
os: linux
dist: bionic
group: stable
services:
- xvfb
compiler: gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: 'ppa:beineri/opt-qt-5.14.2-bionic'
update: true
packages:
- qt514base
- qt514tools
- gcc-9
- g++-9
- libc6-i386
- libgl-dev
- libgl1-mesa-dev
- mesa-common-dev
script:
- PATH="/opt/qt514/bin:$PATH"
- CXX="g++-9"
- CC="gcc-9"
- qt514-env.sh
- mkdir ./build
- cd ./build
- cmake --version
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_STATIC=ON -DBUILD_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_STATIC=ON -DBUILD_EXAMPLES=ON -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- name: macOS CMake dll
os: osx
osx_image: xcode11.3
compiler: clang
addons:
homebrew:
packages:
- qt
update: true
script:
- PATH="/usr/local/opt/qt5/bin:$PATH"
- mkdir -p build
- cd build
- cmake --version
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_DEBUG_POSTFIX=_debug -DBUILD_EXAMPLES=ON -DBUILD_STATIC=OFF -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_STATIC=OFF -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- name: macOS CMake static
os: osx
osx_image: xcode11.3
compiler: clang
addons:
homebrew:
packages:
- qt
update: true
script:
- PATH="/usr/local/opt/qt5/bin:$PATH"
- mkdir -p build
- cd build
- cmake --version
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_DEBUG_POSTFIX=_debug -DBUILD_EXAMPLES=ON -DBUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON -DBUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="./installed" ../
- cmake --build .
- cmake --build . --target install
- name: macOS qmake dll
os: osx
osx_image: xcode11.3
compiler: clang
addons:
homebrew:
packages:
- qt
update: true
script:
- PATH="/usr/local/opt/qt5/bin:$PATH"
- qmake
- make
- make install
- name: macOS qmake static
os: osx
osx_image: xcode11.3
compiler: clang
addons:
homebrew:
packages:
- qt
update: true
script:
- PATH="/usr/local/opt/qt5/bin:$PATH"
- qmake "CONFIG+=adsBuildStatic"
- make
- make install
notifications:
email: false
script:
- qmake -qt=qt5 -v
- qmake -qt=qt5 -r build.pro
- make
#- sudo apt-get install -qq qtbase5-dev qtdeclarative5-dev libqt5webkit5-dev libsqlite3-dev
#- sudo apt-get install -qq qt5-default qttools5-dev-tools

View File

@@ -1,24 +0,0 @@
SOURCES += \
$$PWD/src/API.cpp \
$$PWD/src/ContainerWidget.cpp \
$$PWD/src/SectionWidget.cpp \
$$PWD/src/SectionContent.cpp \
$$PWD/src/SectionTitleWidget.cpp \
$$PWD/src/SectionContentWidget.cpp \
$$PWD/src/DropOverlay.cpp \
$$PWD/src/FloatingWidget.cpp \
$$PWD/src/Internal.cpp \
$$PWD/src/Serialization.cpp
HEADERS += \
$$PWD/include/ads/API.h \
$$PWD/include/ads/ContainerWidget.h \
$$PWD/include/ads/SectionWidget.h \
$$PWD/include/ads/SectionContent.h \
$$PWD/include/ads/SectionTitleWidget.h \
$$PWD/include/ads/SectionContentWidget.h \
$$PWD/include/ads/DropOverlay.h \
$$PWD/include/ads/FloatingWidget.h \
$$PWD/include/ads/Internal.h \
$$PWD/include/ads/Serialization.h

View File

@@ -1,35 +0,0 @@
TARGET = AdvancedDockingSystem
TEMPLATE = lib
VERSION = 1.0.0
CONFIG += adsBuildShared
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
greaterThan(QT_MAJOR_VERSION, 4): DEFINES += ADS_NAMESPACE_ENABLED
adsBuildShared {
CONFIG += shared
DEFINES += ADS_EXPORT
}
!adsBuildShared {
CONFIG += staticlib
}
INCLUDEPATH += $$PWD/include
windows {
# MinGW
*-g++* {
QMAKE_CXXFLAGS += -std=c++11
QMAKE_CXXFLAGS += -Wall -Wextra -pedantic
}
# MSVC
*-msvc* {
}
}
RESOURCES += \
res/ads.qrc
include(AdvancedDockingSystem.pri)

View File

@@ -1,74 +0,0 @@
#ifndef ADS_API_H
#define ADS_API_H
#include <QFlags>
class QWidget;
class QSplitter;
// DLL Export API
#ifdef _WIN32
#if defined(ADS_IMPORT)
#define ADS_EXPORT_API
#elif defined(ADS_EXPORT)
#define ADS_EXPORT_API __declspec(dllexport)
#else
#define ADS_EXPORT_API __declspec(dllimport)
#endif
#else
#define ADS_EXPORT_API
#endif
// Use namespace
// Disabled with Qt4, it makes problems with signals and slots.
#ifdef ADS_NAMESPACE_ENABLED
#define ADS_NAMESPACE_BEGIN namespace ads {
#define ADS_NAMESPACE_END }
#define ADS_NS ::ads
#else
#define ADS_NAMESPACE_BEGIN
#define ADS_NAMESPACE_END
#define ADS_NS
#endif
// Always enable "serialization" namespace.
// It is not required for signals and slots.
#define ADS_NAMESPACE_SER_BEGIN namespace ads { namespace serialization {
#define ADS_NAMESPACE_SER_END }}
#define ADS_NS_SER ::ads::serialization
// Width of the native window frame border (based on OS).
#define ADS_WINDOW_FRAME_BORDER_WIDTH 7
// Beautiful C++ stuff.
#define ADS_Expects(cond)
#define ADS_Ensures(cond)
// Indicates whether ADS should include animations.
//#define ADS_ANIMATIONS_ENABLED 1
//#define ADS_ANIMATION_DURATION 150
ADS_NAMESPACE_BEGIN
class ContainerWidget;
class SectionWidget;
enum DropArea
{
InvalidDropArea = 0,
TopDropArea = 1,
RightDropArea = 2,
BottomDropArea = 4,
LeftDropArea = 8,
CenterDropArea = 16,
AllAreas = TopDropArea | RightDropArea | BottomDropArea | LeftDropArea | CenterDropArea
};
Q_DECLARE_FLAGS(DropAreas, DropArea)
void deleteEmptySplitter(ContainerWidget* container);
ContainerWidget* findParentContainerWidget(QWidget* w);
SectionWidget* findParentSectionWidget(QWidget* w);
QSplitter* findParentSplitter(QWidget* w);
QSplitter* findImmediateSplitter(QWidget* w);
ADS_NAMESPACE_END
#endif

View File

@@ -1,191 +0,0 @@
#ifndef ADS_CONTAINERWIDGET_H
#define ADS_CONTAINERWIDGET_H
#include <QList>
#include <QHash>
#include <QPointer>
#include <QFrame>
class QPoint;
class QSplitter;
class QMenu;
class QGridLayout;
#include "ads/API.h"
#include "ads/Internal.h"
#include "ads/SectionContent.h"
#include "ads/FloatingWidget.h"
#include "ads/Serialization.h"
ADS_NAMESPACE_BEGIN
class SectionWidget;
class DropOverlay;
class InternalContentData;
/*!
* ContainerWidget is the main container to provide the docking
* functionality. It manages multiple sections with all possible areas.
*/
class ADS_EXPORT_API ContainerWidget : public QFrame
{
Q_OBJECT
friend class SectionContent;
friend class SectionWidget;
friend class FloatingWidget;
friend class SectionTitleWidget;
friend class SectionContentWidget;
public:
explicit ContainerWidget(QWidget *parent = NULL);
virtual ~ContainerWidget();
//
// Public API
//
/*!
* Adds the section-content <em>sc</em> to this container-widget into the section-widget <em>sw</em>.
* If <em>sw</em> is not NULL, the <em>area</em> is used to indicate how the content should be arranged.
* Returns a pointer to the SectionWidget of the added SectionContent. Do not use it for anything else than adding more
* SectionContent elements with this method.
*/
SectionWidget* addSectionContent(const SectionContent::RefPtr& sc, SectionWidget* sw = NULL, DropArea area = CenterDropArea);
/*!
* Completely removes the <em>sc</em> from this ContainerWidget.
* This container will no longer hold a reference to the content.
* The content can be safely deleted.
*/
bool removeSectionContent(const SectionContent::RefPtr& sc);
/*!
* Shows the specific SectionContent in UI.
* Independed of the current state, whether it is used inside a section or is floating.
*/
bool showSectionContent(const SectionContent::RefPtr& sc);
/*!
* Closes the specified SectionContent from UI.
* Independed of the current state, whether it is used inside a section or is floating.
*/
bool hideSectionContent(const SectionContent::RefPtr& sc);
/*!
* Selects the specific SectionContent as current, if it is part of a SectionWidget.
* If SC is floating, it does nothing (or should we show it?)
*/
bool raiseSectionContent(const SectionContent::RefPtr& sc);
/*!
* Indicates whether the SectionContent <em>sc</em> is visible.
*/
bool isSectionContentVisible(const SectionContent::RefPtr& sc);
/*!
* Creates a QMenu based on available SectionContents.
* The caller is responsible to delete the menu.
*/
QMenu* createContextMenu() const;
/*!
* Serializes the current state of contents and returns it as a plain byte array.
* \see restoreState(const QByteArray&)
*/
QByteArray saveState() const;
/*!
* Deserilizes the state of contents from <em>data</em>, which was written with <em>saveState()</em>.
* \see saveState()
*/
bool restoreState(const QByteArray& data);
//
// Advanced Public API
// You usually should not need access to this methods
//
// Outer DropAreas
QRect outerTopDropRect() const;
QRect outerRightDropRect() const;
QRect outerBottomDropRect() const;
QRect outerLeftDropRect() const;
/*!
* \brief contents
* \return List of known SectionContent for this ContainerWidget.
*/
QList<SectionContent::RefPtr> contents() const;
QPointer<DropOverlay> dropOverlay() const;
private:
//
// Internal Stuff Begins Here
//
SectionWidget* newSectionWidget();
SectionWidget* dropContent(const InternalContentData& data, SectionWidget* targetSection, DropArea area, bool autoActive = true);
void addSection(SectionWidget* section);
SectionWidget* sectionAt(const QPoint& pos) const;
SectionWidget* dropContentOuterHelper(QLayout* l, const InternalContentData& data, Qt::Orientation orientation, bool append);
// Serialization
QByteArray saveHierarchy() const;
void saveFloatingWidgets(QDataStream& out) const;
void saveSectionWidgets(QDataStream& out, QWidget* widget) const;
bool saveSectionIndex(ADS_NS_SER::SectionIndexData &sid) const;
bool restoreHierarchy(const QByteArray& data);
bool restoreFloatingWidgets(QDataStream& in, int version, QList<FloatingWidget*>& floatings);
bool restoreSectionWidgets(QDataStream& in, int version, QSplitter* currentSplitter, QList<SectionWidget*>& sections, QList<SectionContent::RefPtr>& contentsToHide);
bool takeContent(const SectionContent::RefPtr& sc, InternalContentData& data);
private slots:
void onActiveTabChanged();
void onActionToggleSectionContentVisibility(bool visible);
signals:
void orientationChanged();
/*!
* Emits whenever the "isActiveTab" state of a SectionContent changes.
* Whenever the users sets another tab as active, this signal gets invoked
* for the old tab and the new active tab (the order is unspecified).
*/
void activeTabChanged(const SectionContent::RefPtr& sc, bool active);
/*!
* Emits whenever the visibility of a SectionContent changes.
* \see showSectionContent(), hideSectionContent()
* \since 0.2
*/
void sectionContentVisibilityChanged(const SectionContent::RefPtr& sc, bool visible);
private:
// Elements inside container.
QList<SectionWidget*> _sections;
QList<FloatingWidget*> _floatings;
QHash<int, HiddenSectionItem> _hiddenSectionContents;
// Helper lookup maps, restricted to this container.
QHash<int, SectionContent::WeakPtr> _scLookupMapById;
QHash<QString, SectionContent::WeakPtr> _scLookupMapByName;
QHash<int, SectionWidget*> _swLookupMapById;
// Layout stuff
QGridLayout* _mainLayout;
Qt::Orientation _orientation;
QPointer<QSplitter> _splitter; // $mfreiholz: I'd like to remove this variable entirely,
// because it changes during user interaction anyway.
// Drop overlay stuff.
QPointer<DropOverlay> _dropOverlay;
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,86 +0,0 @@
#ifndef DROP_OVERLAY_H
#define DROP_OVERLAY_H
#include <QPointer>
#include <QHash>
#include <QRect>
#include <QFrame>
class QGridLayout;
#include "ads/API.h"
ADS_NAMESPACE_BEGIN
class DropOverlayCross;
/*!
* DropOverlay paints a translucent rectangle over another widget. The geometry
* of the rectangle is based on the mouse location.
*/
class ADS_EXPORT_API DropOverlay : public QFrame
{
Q_OBJECT
friend class DropOverlayCross;
public:
DropOverlay(QWidget* parent);
virtual ~DropOverlay();
void setAllowedAreas(DropAreas areas);
DropAreas allowedAreas() const;
void setAreaWidgets(const QHash<DropArea, QWidget*>& widgets);
DropArea cursorLocation() const;
DropArea showDropOverlay(QWidget* target);
void showDropOverlay(QWidget* target, const QRect& targetAreaRect);
void hideDropOverlay();
protected:
virtual void paintEvent(QPaintEvent *e);
virtual void showEvent(QShowEvent* e);
virtual void hideEvent(QHideEvent* e);
virtual void resizeEvent(QResizeEvent* e);
virtual void moveEvent(QMoveEvent* e);
private:
DropAreas _allowedAreas;
DropOverlayCross* _cross;
bool _fullAreaDrop;
QPointer<QWidget> _target;
QRect _targetRect;
DropArea _lastLocation;
};
/*!
* DropOverlayCross shows a cross with 5 different drop area possibilities.
* I could have handled everything inside DropOverlay, but because of some
* styling issues it's better to have a separate class for the cross.
*/
class DropOverlayCross : public QWidget
{
Q_OBJECT
friend class DropOverlay;
public:
DropOverlayCross(DropOverlay* overlay);
virtual ~DropOverlayCross();
void setAreaWidgets(const QHash<DropArea, QWidget*>& widgets);
DropArea cursorLocation() const;
protected:
virtual void showEvent(QShowEvent* e);
private:
void reset();
private:
DropOverlay* _overlay;
QHash<DropArea, QWidget*> _widgets;
QGridLayout* _grid;
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,46 +0,0 @@
#ifndef FLOATINGWIDGET_H
#define FLOATINGWIDGET_H
#include <QWidget>
class QBoxLayout;
#include "ads/API.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class ContainerWidget;
class SectionTitleWidget;
class SectionContentWidget;
class InternalContentData;
// FloatingWidget holds and displays SectionContent as a floating window.
// It can be resized, moved and dropped back into a SectionWidget.
class FloatingWidget : public QWidget
{
Q_OBJECT
friend class ContainerWidget;
public:
FloatingWidget(ContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent = NULL);
virtual ~FloatingWidget();
SectionContent::RefPtr content() const { return _content; }
public://private:
bool takeContent(InternalContentData& data);
private slots:
void onCloseButtonClicked();
private:
ContainerWidget* _container;
SectionContent::RefPtr _content;
SectionTitleWidget* _titleWidget;
SectionContentWidget* _contentWidget;
QBoxLayout* _titleLayout;
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,54 +0,0 @@
#ifndef ADS_INTERNAL_HEADER
#define ADS_INTERNAL_HEADER
#include <QSharedPointer>
#include <QWeakPointer>
#include "ads/API.h"
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#else
#include "ads/SectionContent.h"
#endif
#define SCLookupMapById(X) X->_scLookupMapById
#define SCLookupMapByName(X) X->_scLookupMapByName
#define SWLookupMapById(X) X->_swLookupMapById
ADS_NAMESPACE_BEGIN
class SectionContent;
class SectionTitleWidget;
class SectionContentWidget;
class InternalContentData
{
public:
typedef QSharedPointer<InternalContentData> RefPtr;
typedef QWeakPointer<InternalContentData> WeakPtr;
InternalContentData();
~InternalContentData();
QSharedPointer<SectionContent> content;
SectionTitleWidget* titleWidget;
SectionContentWidget* contentWidget;
};
class HiddenSectionItem
{
public:
HiddenSectionItem() :
preferredSectionId(-1),
preferredSectionIndex(-1)
{}
int preferredSectionId;
int preferredSectionIndex;
InternalContentData data;
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,78 +0,0 @@
#ifndef SECTIONCONTENT_H
#define SECTIONCONTENT_H
#include <QSharedPointer>
#include <QWeakPointer>
#include <QPointer>
class QWidget;
#include "ads/API.h"
ADS_NAMESPACE_BEGIN
class ContainerWidget;
class ADS_EXPORT_API SectionContent
{
friend class ContainerWidget;
private:
SectionContent();
SectionContent(const SectionContent&);
SectionContent& operator=(const SectionContent&);
public:
typedef QSharedPointer<SectionContent> RefPtr;
typedef QWeakPointer<SectionContent> WeakPtr;
enum Flag
{
None = 0,
Closeable = 1,
AllFlags = Closeable
};
Q_DECLARE_FLAGS(Flags, Flag)
/*!
* Creates new content, associates it to <em>container</em> and takes ownership of
* <em>title</em>- and <em>content</em>- widgets.
* \param uniqueName An unique identifier across the entire process.
* \param container The parent ContainerWidget in which this content will be active.
* \param title The widget to use as title.
* \param content The widget to use as content.
* \return May return a invalid ref-pointer in case of invalid parameters.
*/
static RefPtr newSectionContent(const QString& uniqueName, ContainerWidget* container, QWidget* title, QWidget* content);
virtual ~SectionContent();
int uid() const;
QString uniqueName() const;
ContainerWidget* containerWidget() const;
QWidget* titleWidget() const;
QWidget* contentWidget() const;
Flags flags() const;
QString visibleTitle() const;
QString title() const;
void setTitle(const QString& title);
void setFlags(const Flags f);
private:
const int _uid;
QString _uniqueName;
QPointer<ContainerWidget> _containerWidget;
QPointer<QWidget> _titleWidget;
QPointer<QWidget> _contentWidget;
// Optional attributes
QString _title;
Flags _flags;
/* Note: This method could be a problem in static build environment
* since it may begin with 0 for every module which uses ADS.
*/
static int GetNextUid();
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,28 +0,0 @@
#ifndef SECTION_CONTENT_WIDGET_H
#define SECTION_CONTENT_WIDGET_H
#include <QFrame>
#include "ads/API.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class ContainerWidget;
class SectionWidget;
class SectionContentWidget : public QFrame
{
Q_OBJECT
friend class ContainerWidget;
public:
SectionContentWidget(SectionContent::RefPtr c, QWidget* parent = 0);
virtual ~SectionContentWidget();
private:
SectionContent::RefPtr _content;
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,54 +0,0 @@
#ifndef SECTION_TITLE_WIDGET_H
#define SECTION_TITLE_WIDGET_H
#include <QPointer>
#include <QPoint>
#include <QFrame>
#include "ads/API.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class ContainerWidget;
class SectionWidget;
class FloatingWidget;
class SectionTitleWidget : public QFrame
{
Q_OBJECT
Q_PROPERTY(bool activeTab READ isActiveTab WRITE setActiveTab NOTIFY activeTabChanged)
friend class ContainerWidget;
friend class SectionWidget;
SectionContent::RefPtr _content;
// Drag & Drop (Floating)
QPointer<FloatingWidget> _fw;
QPoint _dragStartPos;
// Drag & Drop (Title/Tabs)
bool _tabMoving;
// Property values
bool _activeTab;
public:
SectionTitleWidget(SectionContent::RefPtr content, QWidget* parent);
virtual ~SectionTitleWidget();
bool isActiveTab() const;
void setActiveTab(bool active);
protected:
virtual void mousePressEvent(QMouseEvent* ev);
virtual void mouseReleaseEvent(QMouseEvent* ev);
virtual void mouseMoveEvent(QMouseEvent* ev);
signals:
void activeTabChanged();
void clicked();
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,103 +0,0 @@
#ifndef SECTION_WIDGET_H
#define SECTION_WIDGET_H
#include <QDebug>
#include <QPointer>
#include <QList>
#include <QFrame>
#include <QScrollArea>
class QBoxLayout;
class QStackedLayout;
class QPushButton;
class QMenu;
#include "ads/API.h"
#include "ads/Internal.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class ContainerWidget;
class SectionTitleWidget;
class SectionContentWidget;
// SectionWidget manages multiple instances of SectionContent.
// It displays a title TAB, which is clickable and will switch to
// the contents associated to the title when clicked.
class ADS_EXPORT_API SectionWidget : public QFrame
{
Q_OBJECT
friend class ContainerWidget;
explicit SectionWidget(ContainerWidget* parent);
public:
virtual ~SectionWidget();
int uid() const;
ContainerWidget* containerWidget() const;
QRect titleAreaGeometry() const;
QRect contentAreaGeometry() const;
const QList<SectionContent::RefPtr>& contents() const { return _contents; }
void addContent(const SectionContent::RefPtr& c);
void addContent(const InternalContentData& data, bool autoActivate);
bool takeContent(int uid, InternalContentData& data);
int indexOfContent(const SectionContent::RefPtr& c) const;
int indexOfContentByUid(int uid) const;
int indexOfContentByTitlePos(const QPoint& pos, QWidget* exclude = NULL) const;
int currentIndex() const;
void moveContent(int from, int to);
protected:
virtual void showEvent(QShowEvent*);
public slots:
void setCurrentIndex(int index);
private slots:
void onSectionTitleClicked();
void onCloseButtonClicked();
void onTabsMenuActionTriggered(bool);
void updateTabsMenu();
private:
const int _uid;
QPointer<ContainerWidget> _container;
QList<SectionContent::RefPtr> _contents;
QList<SectionTitleWidget*> _sectionTitles;
QList<SectionContentWidget*> _sectionContents;
QBoxLayout* _topLayout;
QScrollArea* _tabsScrollArea;
QWidget* _tabsContainerWidget;
QBoxLayout* _tabsLayout;
QPushButton* _tabsMenuButton;
QPushButton* _closeButton;
int _tabsLayoutInitCount; // used for calculations on _tabsLayout modification calls.
QStackedLayout *_contentsLayout;
QPoint _mousePressPoint;
SectionContent::RefPtr _mousePressContent;
SectionTitleWidget* _mousePressTitleWidget;
static int GetNextUid();
};
/* Custom scrollable implementation for tabs */
class SectionWidgetTabsScrollArea : public QScrollArea
{
public:
SectionWidgetTabsScrollArea(SectionWidget* sectionWidget, QWidget* parent = NULL);
virtual ~SectionWidgetTabsScrollArea();
protected:
virtual void wheelEvent(QWheelEvent*);
};
ADS_NAMESPACE_END
#endif

View File

@@ -1,165 +0,0 @@
#ifndef ADS_SERIALIZATION_H
#define ADS_SERIALIZATION_H
#include <QtGlobal>
#include <QList>
#include <QString>
#include <QDataStream>
#include <QBuffer>
#include "ads/API.h"
ADS_NAMESPACE_SER_BEGIN
enum EntryType
{
ET_Unknown = 0x00000000,
ET_Hierarchy = 0x00000001,
ET_SectionIndex = 0x00000002,
// Begin of custom entry types (e.g. CustomType + 42)
ET_Custom = 0x0000ffff
};
class ADS_EXPORT_API HeaderEntity
{
public:
static qint32 MAGIC;
static qint32 MAJOR_VERSION;
static qint32 MINOR_VERSION;
HeaderEntity();
qint32 magic;
qint32 majorVersion;
qint32 minorVersion;
};
QDataStream& operator<<(QDataStream& out, const HeaderEntity& data);
QDataStream& operator>>(QDataStream& in, HeaderEntity& data);
class ADS_EXPORT_API OffsetsHeaderEntity
{
public:
OffsetsHeaderEntity();
qint64 entriesCount;
QList<class OffsetsHeaderEntryEntity> entries;
};
QDataStream& operator<<(QDataStream& out, const OffsetsHeaderEntity& data);
QDataStream& operator>>(QDataStream& in, OffsetsHeaderEntity& data);
class ADS_EXPORT_API OffsetsHeaderEntryEntity
{
public:
OffsetsHeaderEntryEntity();
qint32 type;
qint64 offset;
qint64 contentSize;
};
QDataStream& operator<<(QDataStream& out, const OffsetsHeaderEntryEntity& data);
QDataStream& operator>>(QDataStream& in, OffsetsHeaderEntryEntity& data);
class ADS_EXPORT_API SectionEntity
{
public:
SectionEntity();
qint32 x;
qint32 y;
qint32 width;
qint32 height;
qint32 currentIndex;
qint32 sectionContentsCount;
QList<class SectionContentEntity> sectionContents;
};
QDataStream& operator<<(QDataStream& out, const SectionEntity& data);
QDataStream& operator>>(QDataStream& in, SectionEntity& data);
class ADS_EXPORT_API SectionContentEntity
{
public:
SectionContentEntity();
QString uniqueName;
bool visible;
qint32 preferredIndex;
};
QDataStream& operator<<(QDataStream& out, const SectionContentEntity& data);
QDataStream& operator>>(QDataStream& in, SectionContentEntity& data);
class ADS_EXPORT_API FloatingContentEntity
{
public:
FloatingContentEntity();
QString uniqueName;
qint32 xpos;
qint32 ypos;
qint32 width;
qint32 height;
bool visible;
};
QDataStream& operator<<(QDataStream& out, const FloatingContentEntity& data);
QDataStream& operator>>(QDataStream& in, FloatingContentEntity& data);
// Type: OffsetHeaderEntry::Hierarchy
class ADS_EXPORT_API HierarchyData
{
public:
HierarchyData();
QByteArray data;
};
QDataStream& operator<<(QDataStream& out, const HierarchyData& data);
QDataStream& operator>>(QDataStream& in, HierarchyData& data);
// Type: OffsetHeaderEntry::SectionIndex
class ADS_EXPORT_API SectionIndexData
{
public:
SectionIndexData();
qint32 sectionsCount;
QList<SectionEntity> sections;
};
QDataStream& operator<<(QDataStream& out, const SectionIndexData& data);
QDataStream& operator>>(QDataStream& in, SectionIndexData& data);
/*!
* \brief The InMemoryWriter class writes into a QByteArray.
*/
class ADS_EXPORT_API InMemoryWriter
{
public:
InMemoryWriter();
bool write(qint32 entryType, const QByteArray& data);
bool write(const SectionIndexData& data);
QByteArray toByteArray() const;
qint32 offsetsCount() const { return _offsetsHeader.entriesCount; }
private:
QBuffer _contentBuffer;
OffsetsHeaderEntity _offsetsHeader;
};
/*!
* \brief The InMemoryReader class
*/
class ADS_EXPORT_API InMemoryReader
{
public:
InMemoryReader(const QByteArray& data);
bool initReadHeader();
bool read(qint32 entryType, QByteArray &data);
bool read(SectionIndexData& sid);
qint32 offsetsCount() const { return _offsetsHeader.entriesCount; }
private:
QByteArray _data;
OffsetsHeaderEntity _offsetsHeader;
};
ADS_NAMESPACE_SER_END
#endif

View File

@@ -1,7 +0,0 @@
<RCC>
<qresource prefix="/ads">
<file>stylesheets/default-windows.css</file>
<file>stylesheets/vendor-partsolutions.css</file>
<file>stylesheets/modern-windows.css</file>
</qresource>
</RCC>

View File

@@ -1,77 +0,0 @@
/*
* Default style sheet on Windows Platforms
* Note: Always use CSS-classes with and without "ads--" namespace to support Qt4 & Qt5
*/
ads--ContainerWidget,
ContainerWidget
{
background: palette(dark);
}
ads--ContainerWidget QSplitter::handle,
ContainerWidget QSplitter::handle
{
background: palette(dark);
}
ads--SectionWidget,
SectionWidget
{
background: palette(window);
border: 1px solid palette(light);
}
ads--SectionWidget #tabsMenuButton::menu-indicator,
SectionWidget #tabsMenuButton::menu-indicator
{
image: none;
}
ads--SectionTitleWidget,
SectionTitleWidget
{
background: palette(window);
border-color: palette(light);
border-style: solid;
border-width: 0 1px 0 0;
padding: 0 9px;
}
ads--SectionTitleWidget[activeTab="true"],
SectionTitleWidget[activeTab="true"]
{
/* background: palette(light);*/
/* background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 255, 255, 255), stop:1 rgba(240, 240, 240, 255));*/
background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:0.5, stop:0 palette(window), stop:1 palette(light));
}
ads--SectionContentWidget,
SectionContentWidget
{
background: palette(light);
border-color: palette(light);
border-style: solid;
border-width: 1px 0 0 0;
}
/* Special: QLabels inside SectionTitleWidget
*/
ads--SectionTitleWidget QLabel,
SectionTitleWidget QLabel
{
color: palette(dark);
}
ads--SectionTitleWidget[activeTab="true"] QLabel,
SectionTitleWidget[activeTab="true"] QLabel
{
color: palette(foreground);
}
/* Special: QLabels inside SectionTitleWidget, which is floating
*/
ads--FloatingWidget ads--SectionTitleWidget QLabel,
FloatingWidget SectionTitleWidget QLabel
{
color: palette(foreground);
}

View File

@@ -1,35 +0,0 @@
QSplitter::handle {
background: palette(light);
}
ads--ContainerWidget, ContainerWidget {
background: palette(light);
}
ads--SectionWidget, SectionWidget {
background: palette(light);
}
ads--SectionTitleWidget, SectionTitleWidget {
background: #ffffff;
}
ads--SectionTitleWidget QLabel, SectionTitleWidget QLabel {
color: #000000;
}
ads--SectionTitleWidget[activeTab="true"], SectionTitleWidget[activeTab="true"] {
background: #000000;
border-right: 1px solid #000000;
padding: 9px;
}
ads--SectionTitleWidget[activeTab="true"] QLabel, SectionTitleWidget[activeTab="true"] QLabel {
color: #ffffff;
}
ads--SectionContentWidget, SectionContentWidget {
border: 1px solid #000000;
}
QAbstractItemView {
border: 0;
}

View File

@@ -1,63 +0,0 @@
/*
* Style sheet used by CADENAS PARTsolutions product line
* Requires Qt4 compatibility
*/
QSplitter::handle:vertical {
image: url(:/img/splitter-horizontal.png);
}
QSplitter::handle:horizontal {
image: url(:/img/splitter-vertical.png);
}
ads--ContainerWidget, ContainerWidget {
background: #9ab6ca;
border: 0;
}
ads--SectionWidget, SectionWidget {
background: #7c9eb3;
border-color: #ffffff;
border-style: solid;
border-width: 1px;
}
ads--SectionTitleWidget, SectionTitleWidget {
background: #7c9eb3;
border-right: 1px solid #E7F3F8;
padding: 6px 6px;
}
ads--SectionTitleWidget[activeTab="true"], SectionTitleWidget[activeTab="true"] {
background: #E7F3F8;
border: 1px solid #E7F3F8;
}
ads--SectionWidget QPushButton#closeButton, SectionWidget QPushButton#closeButton,
ads--FloatingWidget QPushButton#closeButton, FloatingWidget QPushButton#closeButton {
background: #ff0000;
border: 1px solid red;
}
ads--SectionContentWidget, SectionContentWidget {
background: #ffffff;
border: 0px solid #E7F3F8;
}
/* Special */
IconTitleWidget {
padding: 0;
margin: 0;
}
ads--SectionTitleWidget QLabel, SectionTitleWidget QLabel {
color: #ffffff;
background: #7c9eb3;
}
ads--SectionTitleWidget[activeTab="true"] QLabel, SectionTitleWidget[activeTab="true"] QLabel {
color: #000000;
background: #E7F3F8;
}

View File

@@ -1,115 +0,0 @@
#include "ads/API.h"
#include <QWidget>
#include <QSplitter>
#include <QLayout>
#include <QVariant>
#include "ads/ContainerWidget.h"
#include "ads/SectionWidget.h"
ADS_NAMESPACE_BEGIN
static bool splitterContainsSectionWidget(QSplitter* splitter)
{
for (int i = 0; i < splitter->count(); ++i)
{
QWidget* w = splitter->widget(i);
QSplitter* sp = qobject_cast<QSplitter*>(w);
SectionWidget* sw = NULL;
if (sp && splitterContainsSectionWidget(sp))
return true;
else if ((sw = qobject_cast<SectionWidget*>(w)) != NULL)
return true;
}
return false;
}
void deleteEmptySplitter(ContainerWidget* container)
{
bool doAgain = false;
do
{
doAgain = false;
QList<QSplitter*> splitters = container->findChildren<QSplitter*>();
for (int i = 0; i < splitters.count(); ++i)
{
QSplitter* sp = splitters.at(i);
if (!sp->property("ads-splitter").toBool())
continue;
if (sp->count() > 0 && splitterContainsSectionWidget(sp))
continue;
delete splitters[i];
doAgain = true;
break;
}
}
while (doAgain);
}
ContainerWidget* findParentContainerWidget(QWidget* w)
{
ContainerWidget* cw = 0;
QWidget* next = w;
do
{
if ((cw = dynamic_cast<ContainerWidget*>(next)) != 0)
{
break;
}
next = next->parentWidget();
}
while (next);
return cw;
}
SectionWidget* findParentSectionWidget(class QWidget* w)
{
SectionWidget* cw = 0;
QWidget* next = w;
do
{
if ((cw = dynamic_cast<SectionWidget*>(next)) != 0)
{
break;
}
next = next->parentWidget();
}
while (next);
return cw;
}
QSplitter* findParentSplitter(class QWidget* w)
{
QSplitter* cw = 0;
QWidget* next = w;
do
{
if ((cw = dynamic_cast<QSplitter*>(next)) != 0)
{
break;
}
next = next->parentWidget();
}
while (next);
return cw;
}
QSplitter* findImmediateSplitter(class QWidget* w)
{
QSplitter* sp = NULL;
QLayout* l = w->layout();
if (!l || l->count() <= 0)
return sp;
for (int i = 0; i < l->count(); ++i)
{
QLayoutItem* li = l->itemAt(0);
if (!li->widget())
continue;
if ((sp = dynamic_cast<QSplitter*>(li->widget())) != NULL)
break;
}
return sp;
}
ADS_NAMESPACE_END

File diff suppressed because it is too large Load Diff

View File

@@ -1,441 +0,0 @@
#include "ads/DropOverlay.h"
#include <QPointer>
#include <QPaintEvent>
#include <QResizeEvent>
#include <QMoveEvent>
#include <QPainter>
#include <QGridLayout>
#include <QCursor>
#include <QIcon>
#include <QLabel>
ADS_NAMESPACE_BEGIN
// Helper /////////////////////////////////////////////////////////////
static QPixmap createDropIndicatorPixmap(const QPalette& pal, const QSizeF& size, DropArea dropArea)
{
const QColor borderColor = pal.color(QPalette::Active, QPalette::Highlight);
const QColor backgroundColor = pal.color(QPalette::Active, QPalette::Base);
const QColor areaBackgroundColor = pal.color(QPalette::Active, QPalette::Highlight).lighter(150);
QPixmap pm(size.width(), size.height());
pm.fill(QColor(0, 0, 0, 0));
QPainter p(&pm);
QPen pen = p.pen();
QRectF baseRect(pm.rect());
// Fill
p.fillRect(baseRect, backgroundColor);
// Drop area rect.
if (true)
{
p.save();
QRectF areaRect;
QLineF areaLine;
QLinearGradient gradient;
switch (dropArea)
{
case TopDropArea:
areaRect = QRectF(baseRect.x(), baseRect.y(), baseRect.width(), baseRect.height() * .5f);
areaLine = QLineF(areaRect.bottomLeft(), areaRect.bottomRight());
gradient.setStart(areaRect.topLeft());
gradient.setFinalStop(areaRect.bottomLeft());
gradient.setColorAt(0.f, areaBackgroundColor);
gradient.setColorAt(1.f, areaBackgroundColor.lighter(120));
break;
case RightDropArea:
areaRect = QRectF(baseRect.width() * .5f, baseRect.y(), baseRect.width() * .5f, baseRect.height());
areaLine = QLineF(areaRect.topLeft(), areaRect.bottomLeft());
gradient.setStart(areaRect.topLeft());
gradient.setFinalStop(areaRect.topRight());
gradient.setColorAt(0.f, areaBackgroundColor.lighter(120));
gradient.setColorAt(1.f, areaBackgroundColor);
break;
case BottomDropArea:
areaRect = QRectF(baseRect.x(), baseRect.height() * .5f, baseRect.width(), baseRect.height() * .5f);
areaLine = QLineF(areaRect.topLeft(), areaRect.topRight());
gradient.setStart(areaRect.topLeft());
gradient.setFinalStop(areaRect.bottomLeft());
gradient.setColorAt(0.f, areaBackgroundColor.lighter(120));
gradient.setColorAt(1.f, areaBackgroundColor);
break;
case LeftDropArea:
areaRect = QRectF(baseRect.x(), baseRect.y(), baseRect.width() * .5f, baseRect.height());
areaLine = QLineF(areaRect.topRight(), areaRect.bottomRight());
gradient.setStart(areaRect.topLeft());
gradient.setFinalStop(areaRect.topRight());
gradient.setColorAt(0.f, areaBackgroundColor);
gradient.setColorAt(1.f, areaBackgroundColor.lighter(120));
break;
default:
break;
}
if (areaRect.isValid())
{
p.fillRect(areaRect, gradient);
pen = p.pen();
pen.setColor(borderColor);
pen.setStyle(Qt::DashLine);
p.setPen(pen);
p.drawLine(areaLine);
}
p.restore();
}
// Border
if (true)
{
p.save();
pen = p.pen();
pen.setColor(borderColor);
pen.setWidth(1);
p.setPen(pen);
p.drawRect(baseRect.adjusted(0, 0, -pen.width(), -pen.width()));
p.restore();
}
return pm;
}
static QWidget* createDropIndicatorWidget(DropArea dropArea)
{
QLabel* l = new QLabel();
l->setObjectName("DropAreaLabel");
const qreal metric = static_cast<qreal>(l->fontMetrics().height()) * 2.f;
const QSizeF size(metric, metric);
l->setPixmap(createDropIndicatorPixmap(l->palette(), size, dropArea));
return l;
}
///////////////////////////////////////////////////////////////////////
DropOverlay::DropOverlay(QWidget* parent) :
QFrame(parent),
_allowedAreas(InvalidDropArea),
_cross(new DropOverlayCross(this)),
_fullAreaDrop(false),
_lastLocation(InvalidDropArea)
{
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
setWindowOpacity(0.2);
setWindowTitle("DropOverlay");
QBoxLayout* l = new QBoxLayout(QBoxLayout::TopToBottom);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
setLayout(l);
// Cross with default drop area widgets.
QHash<DropArea, QWidget*> areaWidgets;
areaWidgets.insert(ADS_NS::TopDropArea, createDropIndicatorWidget(TopDropArea)); //createDropWidget(":/img/split-top.png"));
areaWidgets.insert(ADS_NS::RightDropArea, createDropIndicatorWidget(RightDropArea));//createDropWidget(":/img/split-right.png"));
areaWidgets.insert(ADS_NS::BottomDropArea, createDropIndicatorWidget(BottomDropArea));//createDropWidget(":/img/split-bottom.png"));
areaWidgets.insert(ADS_NS::LeftDropArea, createDropIndicatorWidget(LeftDropArea));//createDropWidget(":/img/split-left.png"));
areaWidgets.insert(ADS_NS::CenterDropArea, createDropIndicatorWidget(CenterDropArea));//createDropWidget(":/img/dock-center.png"));
_cross->setAreaWidgets(areaWidgets);
_cross->setVisible(false);
setVisible(false);
}
DropOverlay::~DropOverlay()
{
}
void DropOverlay::setAllowedAreas(DropAreas areas)
{
if (areas == _allowedAreas)
return;
_allowedAreas = areas;
_cross->reset();
}
DropAreas DropOverlay::allowedAreas() const
{
return _allowedAreas;
}
void DropOverlay::setAreaWidgets(const QHash<DropArea, QWidget*>& widgets)
{
_cross->setAreaWidgets(widgets);
}
DropArea DropOverlay::cursorLocation() const
{
return _cross->cursorLocation();
}
DropArea DropOverlay::showDropOverlay(QWidget* target)
{
if (_target == target)
{
// Hint: We could update geometry of overlay here.
DropArea da = cursorLocation();
if (da != _lastLocation)
{
repaint();
_lastLocation = da;
}
return da;
}
hideDropOverlay();
_fullAreaDrop = false;
_target = target;
_targetRect = QRect();
_lastLocation = InvalidDropArea;
// Move it over the target.
resize(target->size());
move(target->mapToGlobal(target->rect().topLeft()));
show();
return cursorLocation();
}
void DropOverlay::showDropOverlay(QWidget* target, const QRect& targetAreaRect)
{
if (_target == target && _targetRect == targetAreaRect)
{
return;
}
hideDropOverlay();
_fullAreaDrop = true;
_target = target;
_targetRect = targetAreaRect;
_lastLocation = InvalidDropArea;
// Move it over the target's area.
resize(targetAreaRect.size());
move(target->mapToGlobal(QPoint(targetAreaRect.x(), targetAreaRect.y())));
show();
return;
}
void DropOverlay::hideDropOverlay()
{
hide();
_fullAreaDrop = false;
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
_target.clear();
#else
_target = 0;
#endif
_targetRect = QRect();
_lastLocation = InvalidDropArea;
}
void DropOverlay::paintEvent(QPaintEvent*)
{
QPainter p(this);
const QColor areaColor = palette().color(QPalette::Active, QPalette::Highlight);//QColor(0, 100, 255)
// Always draw drop-rect over the entire rect()
if (_fullAreaDrop)
{
QRect r = rect();
p.fillRect(r, QBrush(areaColor, Qt::Dense4Pattern));
p.setBrush(QBrush(areaColor));
p.drawRect(r);
return;
}
// Draw rect based on location
QRect r = rect();
const DropArea da = cursorLocation();
switch (da)
{
case ADS_NS::TopDropArea:
r.setHeight(r.height() / 2);
break;
case ADS_NS::RightDropArea:
r.setX(r.width() / 2);
break;
case ADS_NS::BottomDropArea:
r.setY(r.height() / 2);
break;
case ADS_NS::LeftDropArea:
r.setWidth(r.width() / 2);
break;
case ADS_NS::CenterDropArea:
r = rect();
break;
default:
r = QRect();
}
if (!r.isNull())
{
p.fillRect(r, QBrush(areaColor, Qt::Dense4Pattern));
p.setBrush(QBrush(areaColor));
p.drawRect(r);
}
// Draw rect over the entire size + border.
// auto r = rect();
// r.setWidth(r.width() - 1);
// r.setHeight(r.height() - 1);
// p.fillRect(r, QBrush(QColor(0, 100, 255), Qt::Dense4Pattern));
// p.setBrush(QBrush(QColor(0, 100, 255)));
// p.drawRect(r);
}
void DropOverlay::showEvent(QShowEvent*)
{
_cross->show();
}
void DropOverlay::hideEvent(QHideEvent*)
{
_cross->hide();
}
void DropOverlay::resizeEvent(QResizeEvent* e)
{
_cross->resize(e->size());
}
void DropOverlay::moveEvent(QMoveEvent* e)
{
_cross->move(e->pos());
}
///////////////////////////////////////////////////////////////////////
static QPair<QPoint, int> gridPosForArea(const DropArea area)
{
switch (area)
{
case ADS_NS::TopDropArea:
return qMakePair(QPoint(0, 1), (int) Qt::AlignHCenter | Qt::AlignBottom);
case ADS_NS::RightDropArea:
return qMakePair(QPoint(1, 2), (int) Qt::AlignLeft | Qt::AlignVCenter);
case ADS_NS::BottomDropArea:
return qMakePair(QPoint(2, 1), (int) Qt::AlignHCenter | Qt::AlignTop);
case ADS_NS::LeftDropArea:
return qMakePair(QPoint(1, 0), (int) Qt::AlignRight | Qt::AlignVCenter);
case ADS_NS::CenterDropArea:
return qMakePair(QPoint(1, 1), (int) Qt::AlignCenter);
default:
return QPair<QPoint, int>();
}
}
DropOverlayCross::DropOverlayCross(DropOverlay* overlay) :
QWidget(overlay->parentWidget()),
_overlay(overlay),
_widgets()
{
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
setWindowTitle("DropOverlayCross");
setAttribute(Qt::WA_TranslucentBackground);
_grid = new QGridLayout();
_grid->setContentsMargins(0, 0, 0, 0);
_grid->setSpacing(6);
QBoxLayout* bl1 = new QBoxLayout(QBoxLayout::TopToBottom);
bl1->setContentsMargins(0, 0, 0, 0);
bl1->setSpacing(0);
setLayout(bl1);
QBoxLayout* bl2 = new QBoxLayout(QBoxLayout::LeftToRight);
bl2->setContentsMargins(0, 0, 0, 0);
bl2->setSpacing(0);
bl1->addStretch(1);
bl1->addLayout(bl2);
bl2->addStretch(1);
bl2->addLayout(_grid, 0);
bl2->addStretch(1);
bl1->addStretch(1);
}
DropOverlayCross::~DropOverlayCross()
{
}
void DropOverlayCross::setAreaWidgets(const QHash<DropArea, QWidget*>& widgets)
{
// Delete old widgets.
QMutableHashIterator<DropArea, QWidget*> i(_widgets);
while (i.hasNext())
{
i.next();
QWidget* widget = i.value();
_grid->removeWidget(widget);
delete widget;
i.remove();
}
// Insert new widgets into grid.
_widgets = widgets;
QHashIterator<DropArea, QWidget*> i2(_widgets);
while (i2.hasNext())
{
i2.next();
const DropArea area = i2.key();
QWidget* widget = i2.value();
const QPair<QPoint, int> opts = gridPosForArea(area);
_grid->addWidget(widget, opts.first.x(), opts.first.y(), (Qt::Alignment) opts.second);
}
reset();
}
DropArea DropOverlayCross::cursorLocation() const
{
const QPoint pos = mapFromGlobal(QCursor::pos());
QHashIterator<DropArea, QWidget*> i(_widgets);
while (i.hasNext())
{
i.next();
if (_overlay->allowedAreas().testFlag(i.key())
&& i.value()
&& i.value()->isVisible()
&& i.value()->geometry().contains(pos))
{
return i.key();
}
}
return InvalidDropArea;
}
void DropOverlayCross::showEvent(QShowEvent*)
{
resize(_overlay->size());
move(_overlay->pos());
}
void DropOverlayCross::reset()
{
QList<DropArea> allAreas;
allAreas << ADS_NS::TopDropArea << ADS_NS::RightDropArea << ADS_NS::BottomDropArea << ADS_NS::LeftDropArea << ADS_NS::CenterDropArea;
const DropAreas allowedAreas = _overlay->allowedAreas();
// Update visibility of area widgets based on allowedAreas.
for (int i = 0; i < allAreas.count(); ++i)
{
const QPair<QPoint, int> opts = gridPosForArea(allAreas.at(i));
QLayoutItem* item = _grid->itemAtPosition(opts.first.x(), opts.first.y());
QWidget* w = NULL;
if (item && (w = item->widget()) != NULL)
{
w->setVisible(allowedAreas.testFlag(allAreas.at(i)));
}
}
}
ADS_NAMESPACE_END

View File

@@ -1,84 +0,0 @@
#include "ads/FloatingWidget.h"
#include <QBoxLayout>
#include <QPushButton>
#include <QSizePolicy>
#include <QMouseEvent>
#include <QStyle>
#include "ads/ContainerWidget.h"
#include "ads/SectionTitleWidget.h"
#include "ads/SectionContentWidget.h"
#include "ads/Internal.h"
ADS_NAMESPACE_BEGIN
FloatingWidget::FloatingWidget(ContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent) :
QWidget(parent, Qt::CustomizeWindowHint | Qt::Tool),
_container(container),
_content(sc),
_titleWidget(titleWidget),
_contentWidget(contentWidget)
{
QBoxLayout* l = new QBoxLayout(QBoxLayout::TopToBottom);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
setLayout(l);
// Title + Controls
_titleLayout = new QBoxLayout(QBoxLayout::LeftToRight);
_titleLayout->addWidget(titleWidget, 1);
l->addLayout(_titleLayout, 0);
titleWidget->setActiveTab(false);
if (sc->flags().testFlag(SectionContent::Closeable))
{
QPushButton* closeButton = new QPushButton();
closeButton->setObjectName("closeButton");
closeButton->setFlat(true);
closeButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
closeButton->setToolTip(tr("Close"));
closeButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
_titleLayout->addWidget(closeButton);
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
QObject::connect(closeButton, &QPushButton::clicked, this, &FloatingWidget::onCloseButtonClicked);
#else
QObject::connect(closeButton, SIGNAL(clicked(bool)), this, SLOT(onCloseButtonClicked()));
#endif
}
// Content
l->addWidget(contentWidget, 1);
contentWidget->show();
// _container->_floatingWidgets.append(this);
}
FloatingWidget::~FloatingWidget()
{
_container->_floatings.removeAll(this); // Note: I don't like this here, but we have to remove it from list...
}
bool FloatingWidget::takeContent(InternalContentData& data)
{
data.content = _content;
data.titleWidget = _titleWidget;
data.contentWidget = _contentWidget;
_titleLayout->removeWidget(_titleWidget);
_titleWidget->setParent(_container);
_titleWidget = NULL;
layout()->removeWidget(_contentWidget);
_contentWidget->setParent(_container);
_contentWidget = NULL;
return true;
}
void FloatingWidget::onCloseButtonClicked()
{
_container->hideSectionContent(_content);
}
ADS_NAMESPACE_END

View File

@@ -1,15 +0,0 @@
#include "ads/Internal.h"
ADS_NAMESPACE_BEGIN
InternalContentData::InternalContentData() :
titleWidget(NULL),
contentWidget(NULL)
{
}
InternalContentData::~InternalContentData()
{
}
ADS_NAMESPACE_END

View File

@@ -1,115 +0,0 @@
#include "ads/SectionContent.h"
#include <QWidget>
#include <QLabel>
#include "ads/Internal.h"
#include "ads/ContainerWidget.h"
ADS_NAMESPACE_BEGIN
SectionContent::SectionContent() :
_uid(GetNextUid()),
_flags(AllFlags)
{
}
SectionContent::RefPtr SectionContent::newSectionContent(const QString& uniqueName, ContainerWidget* container, QWidget* title, QWidget* content)
{
if (uniqueName.isEmpty())
{
qFatal("Can not create SectionContent with empty uniqueName");
return RefPtr();
}
else if (SCLookupMapByName(container).contains(uniqueName))
{
qFatal("Can not create SectionContent with already used uniqueName");
return RefPtr();
}
else if (!container || !title || !content)
{
qFatal("Can not create SectionContent with NULL values");
return RefPtr();
}
QSharedPointer<SectionContent> sc(new SectionContent());
sc->_uniqueName = uniqueName;
sc->_containerWidget = container;
sc->_titleWidget = title;
sc->_contentWidget = content;
SCLookupMapById(container).insert(sc->uid(), sc);
SCLookupMapByName(container).insert(sc->uniqueName(), sc);
return sc;
}
SectionContent::~SectionContent()
{
if (_containerWidget)
{
SCLookupMapById(_containerWidget).remove(_uid);
SCLookupMapByName(_containerWidget).remove(_uniqueName);
}
delete _titleWidget;
delete _contentWidget;
}
int SectionContent::uid() const
{
return _uid;
}
QString SectionContent::uniqueName() const
{
return _uniqueName;
}
ContainerWidget* SectionContent::containerWidget() const
{
return _containerWidget;
}
QWidget* SectionContent::titleWidget() const
{
return _titleWidget;
}
QWidget* SectionContent::contentWidget() const
{
return _contentWidget;
}
SectionContent::Flags SectionContent::flags() const
{
return _flags;
}
QString SectionContent::visibleTitle() const
{
if (_title.isEmpty())
return _uniqueName;
return _title;
}
QString SectionContent::title() const
{
return _title;
}
void SectionContent::setTitle(const QString& title)
{
_title = title;
}
void SectionContent::setFlags(const Flags f)
{
_flags = f;
}
int SectionContent::GetNextUid()
{
static int NextUid = 0;
return ++NextUid;
}
ADS_NAMESPACE_END

View File

@@ -1,23 +0,0 @@
#include "ads/SectionContentWidget.h"
#include <QBoxLayout>
ADS_NAMESPACE_BEGIN
SectionContentWidget::SectionContentWidget(SectionContent::RefPtr c, QWidget* parent) :
QFrame(parent),
_content(c)
{
QBoxLayout* l = new QBoxLayout(QBoxLayout::TopToBottom);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
l->addWidget(_content->contentWidget());
setLayout(l);
}
SectionContentWidget::~SectionContentWidget()
{
layout()->removeWidget(_content->contentWidget());
}
ADS_NAMESPACE_END

View File

@@ -1,291 +0,0 @@
#include "ads/SectionTitleWidget.h"
#include <QString>
#include <QApplication>
#include <QBoxLayout>
#include <QMouseEvent>
#include <QMimeData>
#include <QDrag>
#include <QCursor>
#include <QStyle>
#include <QSplitter>
#ifdef ADS_ANIMATIONS_ENABLED
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
#endif
#include "ads/Internal.h"
#include "ads/DropOverlay.h"
#include "ads/SectionContent.h"
#include "ads/SectionWidget.h"
#include "ads/FloatingWidget.h"
#include "ads/ContainerWidget.h"
ADS_NAMESPACE_BEGIN
SectionTitleWidget::SectionTitleWidget(SectionContent::RefPtr content, QWidget* parent) :
QFrame(parent),
_content(content),
_tabMoving(false),
_activeTab(false)
{
QBoxLayout* l = new QBoxLayout(QBoxLayout::LeftToRight);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
l->addWidget(content->titleWidget());
setLayout(l);
}
SectionTitleWidget::~SectionTitleWidget()
{
layout()->removeWidget(_content->titleWidget());
}
bool SectionTitleWidget::isActiveTab() const
{
return _activeTab;
}
void SectionTitleWidget::setActiveTab(bool active)
{
if (active != _activeTab)
{
_activeTab = active;
style()->unpolish(this);
style()->polish(this);
update();
emit activeTabChanged();
}
}
void SectionTitleWidget::mousePressEvent(QMouseEvent* ev)
{
if (ev->button() == Qt::LeftButton)
{
ev->accept();
_dragStartPos = ev->pos();
return;
}
QFrame::mousePressEvent(ev);
}
void SectionTitleWidget::mouseReleaseEvent(QMouseEvent* ev)
{
SectionWidget* section = NULL;
ContainerWidget* cw = findParentContainerWidget(this);
// Drop contents of FloatingWidget into SectionWidget.
if (_fw)
{
SectionWidget* sw = cw->sectionAt(cw->mapFromGlobal(ev->globalPos()));
if (sw)
{
cw->_dropOverlay->setAllowedAreas(ADS_NS::AllAreas);
DropArea loc = cw->_dropOverlay->showDropOverlay(sw);
if (loc != InvalidDropArea)
{
#if !defined(ADS_ANIMATIONS_ENABLED)
InternalContentData data;
_fw->takeContent(data);
_fw->deleteLater();
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
_fw.clear();
#else
_fw = 0;
#endif
cw->dropContent(data, sw, loc, true);
#else
QPropertyAnimation* moveAnim = new QPropertyAnimation(_fw, "pos", this);
moveAnim->setStartValue(_fw->pos());
moveAnim->setEndValue(sw->mapToGlobal(sw->rect().topLeft()));
moveAnim->setDuration(ADS_ANIMATION_DURATION);
QPropertyAnimation* resizeAnim = new QPropertyAnimation(_fw, "size", this);
resizeAnim->setStartValue(_fw->size());
resizeAnim->setEndValue(sw->size());
resizeAnim->setDuration(ADS_ANIMATION_DURATION);
QParallelAnimationGroup* animGroup = new QParallelAnimationGroup(this);
QObject::connect(animGroup, &QPropertyAnimation::finished, [this, data, sw, loc]()
{
InternalContentData data = _fw->takeContent();
_fw->deleteLater();
_fw.clear();
cw->dropContent(data, sw, loc);
});
animGroup->addAnimation(moveAnim);
animGroup->addAnimation(resizeAnim);
animGroup->start(QAbstractAnimation::DeleteWhenStopped);
#endif
}
}
// Mouse is over a outer-edge drop area
else
{
DropArea dropArea = ADS_NS::InvalidDropArea;
if (cw->outerTopDropRect().contains(cw->mapFromGlobal(ev->globalPos())))
dropArea = ADS_NS::TopDropArea;
if (cw->outerRightDropRect().contains(cw->mapFromGlobal(ev->globalPos())))
dropArea = ADS_NS::RightDropArea;
if (cw->outerBottomDropRect().contains(cw->mapFromGlobal(ev->globalPos())))
dropArea = ADS_NS::BottomDropArea;
if (cw->outerLeftDropRect().contains(cw->mapFromGlobal(ev->globalPos())))
dropArea = ADS_NS::LeftDropArea;
if (dropArea != ADS_NS::InvalidDropArea)
{
#if !defined(ADS_ANIMATIONS_ENABLED)
InternalContentData data;
_fw->takeContent(data);
_fw->deleteLater();
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
_fw.clear();
#else
_fw = 0;
#endif
cw->dropContent(data, NULL, dropArea, true);
#else
#endif
}
}
}
// End of tab moving, change order now
else if (_tabMoving
&& (section = findParentSectionWidget(this)) != NULL)
{
// Find tab under mouse
QPoint pos = ev->globalPos();
pos = section->mapFromGlobal(pos);
const int fromIndex = section->indexOfContent(_content);
const int toIndex = section->indexOfContentByTitlePos(pos, this);
section->moveContent(fromIndex, toIndex);
}
if (!_dragStartPos.isNull())
emit clicked();
// Reset
_dragStartPos = QPoint();
_tabMoving = false;
cw->_dropOverlay->hideDropOverlay();
QFrame::mouseReleaseEvent(ev);
}
void SectionTitleWidget::mouseMoveEvent(QMouseEvent* ev)
{
ContainerWidget* cw = findParentContainerWidget(this);
SectionWidget* section = NULL;
// Move already existing FloatingWidget
if (_fw && (ev->buttons() & Qt::LeftButton))
{
ev->accept();
const QPoint moveToPos = ev->globalPos() - (_dragStartPos + QPoint(ADS_WINDOW_FRAME_BORDER_WIDTH, ADS_WINDOW_FRAME_BORDER_WIDTH));
_fw->move(moveToPos);
// Show drop indicator
if (true)
{
// Mouse is over a SectionWidget
section = cw->sectionAt(cw->mapFromGlobal(QCursor::pos()));
if (section)
{
cw->_dropOverlay->setAllowedAreas(ADS_NS::AllAreas);
cw->_dropOverlay->showDropOverlay(section);
}
// Mouse is at the edge of the ContainerWidget
// Top, Right, Bottom, Left
else if (cw->outerTopDropRect().contains(cw->mapFromGlobal(QCursor::pos())))
{
cw->_dropOverlay->setAllowedAreas(ADS_NS::TopDropArea);
cw->_dropOverlay->showDropOverlay(cw, cw->outerTopDropRect());
}
else if (cw->outerRightDropRect().contains(cw->mapFromGlobal(QCursor::pos())))
{
cw->_dropOverlay->setAllowedAreas(ADS_NS::RightDropArea);
cw->_dropOverlay->showDropOverlay(cw, cw->outerRightDropRect());
}
else if (cw->outerBottomDropRect().contains(cw->mapFromGlobal(QCursor::pos())))
{
cw->_dropOverlay->setAllowedAreas(ADS_NS::BottomDropArea);
cw->_dropOverlay->showDropOverlay(cw, cw->outerBottomDropRect());
}
else if (cw->outerLeftDropRect().contains(cw->mapFromGlobal(QCursor::pos())))
{
cw->_dropOverlay->setAllowedAreas(ADS_NS::LeftDropArea);
cw->_dropOverlay->showDropOverlay(cw, cw->outerLeftDropRect());
}
else
{
cw->_dropOverlay->hideDropOverlay();
}
}
return;
}
// Begin to drag/float the SectionContent.
else if (!_fw && !_dragStartPos.isNull() && (ev->buttons() & Qt::LeftButton)
&& (section = findParentSectionWidget(this)) != NULL
&& !section->titleAreaGeometry().contains(section->mapFromGlobal(ev->globalPos())))
{
ev->accept();
// Create floating widget.
InternalContentData data;
if (!section->takeContent(_content->uid(), data))
{
qWarning() << "THIS SHOULD NOT HAPPEN!!" << _content->uid() << _content->uniqueName();
return;
}
_fw = new FloatingWidget(cw, data.content, data.titleWidget, data.contentWidget, cw);
_fw->resize(section->size());
cw->_floatings.append(_fw); // Note: I don't like this...
const QPoint moveToPos = ev->globalPos() - (_dragStartPos + QPoint(ADS_WINDOW_FRAME_BORDER_WIDTH, ADS_WINDOW_FRAME_BORDER_WIDTH));
_fw->move(moveToPos);
_fw->show();
// Delete old section, if it is empty now.
if (section->contents().isEmpty())
{
delete section;
section = NULL;
}
deleteEmptySplitter(cw);
return;
}
// Handle movement of this tab
else if (_tabMoving
&& (section = findParentSectionWidget(this)) != NULL)
{
ev->accept();
int left, top, right, bottom;
getContentsMargins(&left, &top, &right, &bottom);
QPoint moveToPos = mapToParent(ev->pos()) - _dragStartPos;
moveToPos.setY(0/* + top*/);
move(moveToPos);
return;
}
// Begin to drag title inside the title area to switch its position inside the SectionWidget.
else if (!_dragStartPos.isNull() && (ev->buttons() & Qt::LeftButton)
&& (ev->pos() - _dragStartPos).manhattanLength() >= QApplication::startDragDistance() // Wait a few pixels before start moving
&& (section = findParentSectionWidget(this)) != NULL
&& section->titleAreaGeometry().contains(section->mapFromGlobal(ev->globalPos())))
{
ev->accept();
_tabMoving = true;
raise(); // Raise current title-widget above other tabs
return;
}
QFrame::mouseMoveEvent(ev);
}
ADS_NAMESPACE_END

View File

@@ -1,458 +0,0 @@
#include "ads/SectionWidget.h"
#include <QApplication>
#include <QBoxLayout>
#include <QStackedLayout>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QDragEnterEvent>
#include <QMimeData>
#include <QPainter>
#include <QStyle>
#include <QSplitter>
#include <QPushButton>
#include <QScrollBar>
#include <QMenu>
#if defined(ADS_ANIMATIONS_ENABLED)
#include <QGraphicsDropShadowEffect>
#endif
#include "ads/Internal.h"
#include "ads/DropOverlay.h"
#include "ads/SectionContent.h"
#include "ads/SectionTitleWidget.h"
#include "ads/SectionContentWidget.h"
#include "ads/FloatingWidget.h"
#include "ads/ContainerWidget.h"
ADS_NAMESPACE_BEGIN
SectionWidget::SectionWidget(ContainerWidget* parent) :
QFrame(parent),
_uid(GetNextUid()),
_container(parent),
_tabsLayout(NULL),
_tabsLayoutInitCount(0),
_contentsLayout(NULL),
_mousePressTitleWidget(NULL)
{
QBoxLayout* l = new QBoxLayout(QBoxLayout::TopToBottom);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
setLayout(l);
/* top area with tabs and close button */
_topLayout = new QBoxLayout(QBoxLayout::LeftToRight);
_topLayout->setContentsMargins(0, 0, 0, 0);
_topLayout->setSpacing(0);
l->addLayout(_topLayout);
_tabsScrollArea = new SectionWidgetTabsScrollArea(this);
_topLayout->addWidget(_tabsScrollArea, 1);
_tabsContainerWidget = new QWidget();
_tabsContainerWidget->setObjectName("tabsContainerWidget");
_tabsScrollArea->setWidget(_tabsContainerWidget);
_tabsLayout = new QBoxLayout(QBoxLayout::LeftToRight);
_tabsLayout->setContentsMargins(0, 0, 0, 0);
_tabsLayout->setSpacing(0);
_tabsLayout->addStretch(1);
_tabsContainerWidget->setLayout(_tabsLayout);
_tabsMenuButton = new QPushButton();
_tabsMenuButton->setObjectName("tabsMenuButton");
_tabsMenuButton->setFlat(true);
_tabsMenuButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarUnshadeButton));
_tabsMenuButton->setMaximumWidth(_tabsMenuButton->iconSize().width());
_topLayout->addWidget(_tabsMenuButton, 0);
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
//QObject::connect(_tabsMenuButton, &QPushButton::clicked, this, &SectionWidget::onTabsMenuButtonClicked);
#else
//QObject::connect(_tabsMenuButton, SIGNAL(clicked()), this, SLOT(onTabsMenuButtonClicked()));
#endif
_closeButton = new QPushButton();
_closeButton->setObjectName("closeButton");
_closeButton->setFlat(true);
_closeButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
_closeButton->setToolTip(tr("Close"));
_closeButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
_topLayout->addWidget(_closeButton, 0);
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
QObject::connect(_closeButton, &QPushButton::clicked, this, &SectionWidget::onCloseButtonClicked);
#else
QObject::connect(_closeButton, SIGNAL(clicked(bool)), this, SLOT(onCloseButtonClicked()));
#endif
_tabsLayoutInitCount = _tabsLayout->count();
/* central area with contents */
_contentsLayout = new QStackedLayout();
_contentsLayout->setContentsMargins(0, 0, 0, 0);
_contentsLayout->setSpacing(0);
l->addLayout(_contentsLayout, 1);
#if defined(ADS_ANIMATIONS_ENABLED)
QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(this);
shadow->setOffset(0, 0);
shadow->setBlurRadius(8);
setGraphicsEffect(shadow);
#endif
SWLookupMapById(_container).insert(_uid, this);
}
SectionWidget::~SectionWidget()
{
if (_container)
{
SWLookupMapById(_container).remove(_uid);
_container->_sections.removeAll(this); // Note: I don't like this here, but we have to remove it from list...
}
// Delete empty QSplitter.
QSplitter* splitter = findParentSplitter(this);
if (splitter && splitter->count() == 0)
{
splitter->deleteLater();
}
}
int SectionWidget::uid() const
{
return _uid;
}
ContainerWidget* SectionWidget::containerWidget() const
{
return _container;
}
QRect SectionWidget::titleAreaGeometry() const
{
return _topLayout->geometry();
}
QRect SectionWidget::contentAreaGeometry() const
{
return _contentsLayout->geometry();
}
void SectionWidget::addContent(const SectionContent::RefPtr& c)
{
_contents.append(c);
SectionTitleWidget* title = new SectionTitleWidget(c, NULL);
_sectionTitles.append(title);
_tabsLayout->insertWidget(_tabsLayout->count() - _tabsLayoutInitCount, title);
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
QObject::connect(title, &SectionTitleWidget::clicked, this, &SectionWidget::onSectionTitleClicked);
#else
QObject::connect(title, SIGNAL(clicked()), this, SLOT(onSectionTitleClicked()));
#endif
SectionContentWidget* content = new SectionContentWidget(c, NULL);
_sectionContents.append(content);
_contentsLayout->addWidget(content);
// Active first TAB.
if (_contents.size() == 1)
setCurrentIndex(0);
// Switch to newest.
// else
// setCurrentIndex(_contentsLayout->count() - 1);
updateTabsMenu();
}
void SectionWidget::addContent(const InternalContentData& data, bool autoActivate)
{
_contents.append(data.content);
// Add title-widget to tab-bar
// #FIX: Make it visible, since it is possible that it was hidden previously.
_sectionTitles.append(data.titleWidget);
_tabsLayout->insertWidget(_tabsLayout->count() - _tabsLayoutInitCount, data.titleWidget);
data.titleWidget->setVisible(true);
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
QObject::connect(data.titleWidget, &SectionTitleWidget::clicked, this, &SectionWidget::onSectionTitleClicked);
#else
QObject::connect(data.titleWidget, SIGNAL(clicked()), this, SLOT(onSectionTitleClicked()));
#endif
// Add content-widget to stack.
// Visibility is managed by QStackedWidget.
_sectionContents.append(data.contentWidget);
_contentsLayout->addWidget(data.contentWidget);
// Activate first TAB.
if (_contents.size() == 1)
setCurrentIndex(0);
// Switch to just added TAB.
else if (autoActivate)
setCurrentIndex(_contents.count() - 1);
// Mark it as inactive tab.
else
data.titleWidget->setActiveTab(false); // or: setCurrentIndex(currentIndex())
updateTabsMenu();
}
bool SectionWidget::takeContent(int uid, InternalContentData& data)
{
// Find SectionContent.
SectionContent::RefPtr sc;
int index = -1;
for (int i = 0; i < _contents.count(); i++)
{
if (_contents[i]->uid() != uid)
continue;
index = i;
sc = _contents.takeAt(i);
break;
}
if (!sc)
return false;
// Title wrapper widget (TAB)
SectionTitleWidget* title = _sectionTitles.takeAt(index);
if (title)
{
_tabsLayout->removeWidget(title);
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
title->setAttribute(Qt::WA_WState_Created, false); /* fix: floating rubberband #16 */
#endif
title->disconnect(this);
title->setParent(_container);
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
title->setAttribute(Qt::WA_WState_Created, true); /* fix: floating rubberband #16 */
#endif
}
// Content wrapper widget (CONTENT)
SectionContentWidget* content = _sectionContents.takeAt(index);
if (content)
{
_contentsLayout->removeWidget(content);
content->disconnect(this);
content->setParent(_container);
}
// Select the previous tab as activeTab.
if (_contents.size() > 0 && title->isActiveTab())
{
if (index > 0)
setCurrentIndex(index - 1);
else
setCurrentIndex(0);
}
updateTabsMenu();
data.content = sc;
data.titleWidget = title;
data.contentWidget = content;
return !data.content.isNull();
}
int SectionWidget::indexOfContent(const SectionContent::RefPtr& c) const
{
return _contents.indexOf(c);
}
int SectionWidget::indexOfContentByUid(int uid) const
{
for (int i = 0; i < _contents.count(); ++i)
{
if (_contents[i]->uid() == uid)
return i;
}
return -1;
}
int SectionWidget::indexOfContentByTitlePos(const QPoint& p, QWidget* exclude) const
{
int index = -1;
for (int i = 0; i < _sectionTitles.size(); ++i)
{
if (_sectionTitles[i]->geometry().contains(p) && (exclude == NULL || _sectionTitles[i] != exclude))
{
index = i;
break;
}
}
return index;
}
int SectionWidget::currentIndex() const
{
return _contentsLayout->currentIndex();
}
void SectionWidget::moveContent(int from, int to)
{
if (from >= _contents.size() || from < 0 || to >= _contents.size() || to < 0 || from == to)
{
qDebug() << "Invalid index for tab movement" << from << to;
_tabsLayout->update();
return;
}
_contents.move(from, to);
_sectionTitles.move(from, to);
_sectionContents.move(from, to);
QLayoutItem* liFrom = NULL;
liFrom = _tabsLayout->takeAt(from);
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
_tabsLayout->insertItem(to, liFrom);
#else
_tabsLayout->insertWidget(to, liFrom->widget());
delete liFrom;
liFrom = NULL;
#endif
liFrom = _contentsLayout->takeAt(from);
_contentsLayout->insertWidget(to, liFrom->widget());
delete liFrom;
updateTabsMenu();
}
void SectionWidget::showEvent(QShowEvent*)
{
_tabsScrollArea->ensureWidgetVisible(_sectionTitles.at(currentIndex()));
}
void SectionWidget::setCurrentIndex(int index)
{
if (index < 0 || index > _contents.count() - 1)
{
qWarning() << Q_FUNC_INFO << "Invalid index" << index;
return;
}
// Set active TAB
for (int i = 0; i < _tabsLayout->count(); ++i)
{
QLayoutItem* item = _tabsLayout->itemAt(i);
if (item->widget())
{
SectionTitleWidget* stw = dynamic_cast<SectionTitleWidget*>(item->widget());
if (stw)
{
if (i == index)
{
stw->setActiveTab(true);
_tabsScrollArea->ensureWidgetVisible(stw);
if (stw->_content->flags().testFlag(SectionContent::Closeable))
_closeButton->setEnabled(true);
else
_closeButton->setEnabled(false);
}
else
stw->setActiveTab(false);
}
}
}
// Set active CONTENT
_contentsLayout->setCurrentIndex(index);
}
void SectionWidget::onSectionTitleClicked()
{
SectionTitleWidget* stw = qobject_cast<SectionTitleWidget*>(sender());
if (stw)
{
int index = _tabsLayout->indexOf(stw);
setCurrentIndex(index);
}
}
void SectionWidget::onCloseButtonClicked()
{
const int index = currentIndex();
if (index < 0 || index > _contents.size() - 1)
return;
SectionContent::RefPtr sc = _contents.at(index);
if (sc.isNull())
return;
_container->hideSectionContent(sc);
}
void SectionWidget::onTabsMenuActionTriggered(bool)
{
QAction* a = qobject_cast<QAction*>(sender());
if (a)
{
const int uid = a->data().toInt();
const int index = indexOfContentByUid(uid);
if (index >= 0)
setCurrentIndex(index);
}
}
void SectionWidget::updateTabsMenu()
{
QMenu* m = new QMenu();
for (int i = 0; i < _contents.count(); ++i)
{
const SectionContent::RefPtr& sc = _contents.at(i);
QAction* a = m->addAction(QIcon(), sc->visibleTitle());
a->setData(sc->uid());
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
QObject::connect(a, &QAction::triggered, this, &SectionWidget::onTabsMenuActionTriggered);
#else
QObject::connect(a, SIGNAL(triggered(bool)), this, SLOT(onTabsMenuActionTriggered(bool)));
#endif
}
QMenu* old = _tabsMenuButton->menu();
_tabsMenuButton->setMenu(m);
delete old;
}
int SectionWidget::GetNextUid()
{
static int NextUid = 0;
return ++NextUid;
}
/*****************************************************************************/
SectionWidgetTabsScrollArea::SectionWidgetTabsScrollArea(SectionWidget*,
QWidget* parent) :
QScrollArea(parent)
{
/* Important: QSizePolicy::Ignored makes the QScrollArea behaves
like a QLabel and automatically fits into the layout. */
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);
setFrameStyle(QFrame::NoFrame);
setWidgetResizable(true);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
SectionWidgetTabsScrollArea::~SectionWidgetTabsScrollArea()
{
}
void SectionWidgetTabsScrollArea::wheelEvent(QWheelEvent* e)
{
e->accept();
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
const int direction = e->angleDelta().y();
#else
const int direction = e->delta();
#endif
if (direction < 0)
horizontalScrollBar()->setValue(horizontalScrollBar()->value() + 20);
else
horizontalScrollBar()->setValue(horizontalScrollBar()->value() - 20);
}
ADS_NAMESPACE_END

View File

@@ -1,440 +0,0 @@
#include "ads/Serialization.h"
#include <QDebug>
ADS_NAMESPACE_SER_BEGIN
/*
\namespace ads::serialization
Serialization of ContainerWidget
--------------------------------
# Data Format Header
quint32 Magic
quint32 Major Version
quint32 Minor Version
# Offsets of available contents
qint32 Number of offset headers
LOOP
qint32 Type (e.g. Hierachy, SectionIndex)
qint64 Offset
qint64 Length
# Type: Hierachy
# Used to recreate the GUI geometry and state.
int Number of floating widgets
LOOP Floating widgets
QString Unique name of content
QByteArray Geometry of floating widget
bool Visibility
int Number of layout items (Valid values: 0, 1)
IF 0
int Number of hidden contents
LOOP Contents
QString Unique name of content
ELSEIF 1
... todo ...
ENDIF
# Type: SectionIndex
# Can be used for quick lookups on details for SectionWidgets.
# It includes sizes and its contents.
qint32 Number of section-widgets
LOOP
qint32 Width
qint32 Height
qint32 Current active tab index
qint32 Number of contents
LOOP
QString Unique name of content
bool Visibility
qint32 Preferred tab index
*/
///////////////////////////////////////////////////////////////////////////////
qint32 HeaderEntity::MAGIC = 0x00001337;
qint32 HeaderEntity::MAJOR_VERSION = 2;
qint32 HeaderEntity::MINOR_VERSION = 0;
HeaderEntity::HeaderEntity() :
magic(0), majorVersion(0), minorVersion(0)
{
}
QDataStream& operator<<(QDataStream& out, const HeaderEntity& data)
{
out << data.magic;
out << data.majorVersion;
out << data.minorVersion;
return out;
}
QDataStream& operator>>(QDataStream& in, HeaderEntity& data)
{
in >> data.magic;
in >> data.majorVersion;
in >> data.minorVersion;
return in;
}
///////////////////////////////////////////////////////////////////////////////
OffsetsHeaderEntity::OffsetsHeaderEntity() :
entriesCount(0)
{
}
QDataStream& operator<<(QDataStream& out, const OffsetsHeaderEntity& data)
{
out << data.entriesCount;
for (int i = 0; i < data.entriesCount; ++i)
{
out << data.entries.at(i);
}
return out;
}
QDataStream& operator>>(QDataStream& in, OffsetsHeaderEntity& data)
{
in >> data.entriesCount;
for (int i = 0; i < data.entriesCount; ++i)
{
OffsetsHeaderEntryEntity entry;
in >> entry;
data.entries.append(entry);
}
return in;
}
///////////////////////////////////////////////////////////////////////////////
OffsetsHeaderEntryEntity::OffsetsHeaderEntryEntity() :
type(ET_Unknown), offset(0), contentSize(0)
{
}
QDataStream& operator<<(QDataStream& out, const OffsetsHeaderEntryEntity& data)
{
out << data.type;
out << data.offset;
out << data.contentSize;
return out;
}
QDataStream& operator>>(QDataStream& in, OffsetsHeaderEntryEntity& data)
{
in >> data.type;
in >> data.offset;
in >> data.contentSize;
return in;
}
///////////////////////////////////////////////////////////////////////////////
SectionEntity::SectionEntity() :
x(0), y(0), width(0), height(0), currentIndex(0), sectionContentsCount(0)
{
}
QDataStream& operator<<(QDataStream& out, const SectionEntity& data)
{
out << data.x;
out << data.y;
out << data.width;
out << data.height;
out << data.currentIndex;
out << data.sectionContentsCount;
for (int i = 0; i < data.sectionContentsCount; ++i)
{
out << data.sectionContents.at(i);
}
return out;
}
QDataStream& operator>>(QDataStream& in, SectionEntity& data)
{
in >> data.x;
in >> data.y;
in >> data.width;
in >> data.height;
in >> data.currentIndex;
in >> data.sectionContentsCount;
for (int i = 0; i < data.sectionContentsCount; ++i)
{
SectionContentEntity sc;
in >> sc;
data.sectionContents.append(sc);
}
return in;
}
///////////////////////////////////////////////////////////////////////////////
SectionContentEntity::SectionContentEntity() :
visible(false), preferredIndex(0)
{
}
QDataStream& operator<<(QDataStream& out, const SectionContentEntity& data)
{
out << data.uniqueName;
out << data.visible;
out << data.preferredIndex;
return out;
}
QDataStream& operator>>(QDataStream& in, SectionContentEntity& data)
{
in >> data.uniqueName;
in >> data.visible;
in >> data.preferredIndex;
return in;
}
///////////////////////////////////////////////////////////////////////////////
FloatingContentEntity::FloatingContentEntity() :
xpos(0), ypos(0), width(0), height(0), visible(false)
{
}
QDataStream& operator<<(QDataStream& out, const FloatingContentEntity& data)
{
out << data.uniqueName;
out << data.xpos;
out << data.ypos;
out << data.width;
out << data.height;
out << data.visible;
return out;
}
QDataStream& operator>>(QDataStream& in, FloatingContentEntity& data)
{
in >> data.uniqueName;
in >> data.xpos;
in >> data.ypos;
in >> data.width;
in >> data.height;
in >> data.visible;
return in;
}
///////////////////////////////////////////////////////////////////////////////
HierarchyData::HierarchyData()
{
}
QDataStream& operator<<(QDataStream& out, const HierarchyData& data)
{
out << data.data;
return out;
}
QDataStream& operator>>(QDataStream& in, HierarchyData& data)
{
in >> data.data;
return in;
}
///////////////////////////////////////////////////////////////////////////////
SectionIndexData::SectionIndexData() :
sectionsCount(0)
{
}
QDataStream& operator<<(QDataStream& out, const SectionIndexData& data)
{
out << data.sectionsCount;
for (int i = 0; i < data.sectionsCount; ++i)
{
out << data.sections.at(i);
}
return out;
}
QDataStream& operator>>(QDataStream& in, SectionIndexData& data)
{
in >> data.sectionsCount;
for (int i = 0; i < data.sectionsCount; ++i)
{
SectionEntity s;
in >> s;
data.sections.append(s);
}
return in;
}
///////////////////////////////////////////////////////////////////////////////
InMemoryWriter::InMemoryWriter()
{
_contentBuffer.open(QIODevice::ReadWrite);
}
bool InMemoryWriter::write(qint32 entryType, const QByteArray& data)
{
OffsetsHeaderEntryEntity entry;
entry.type = entryType;
entry.offset = _contentBuffer.pos(); // Relative offset!
entry.contentSize = data.size();
_contentBuffer.write(data);
_offsetsHeader.entries.append(entry);
_offsetsHeader.entriesCount += 1;
return true;
}
bool InMemoryWriter::write(const SectionIndexData& data)
{
OffsetsHeaderEntryEntity entry;
entry.type = ET_SectionIndex;
entry.offset = _contentBuffer.pos(); // Relative offset!
QDataStream out(&_contentBuffer);
out.setVersion(QDataStream::Qt_4_5);
out << data;
entry.contentSize = _contentBuffer.size() - entry.offset;
_offsetsHeader.entries.append(entry);
_offsetsHeader.entriesCount += 1;
return true;
}
QByteArray InMemoryWriter::toByteArray() const
{
QByteArray data;
QDataStream out(&data, QIODevice::ReadWrite);
out.setVersion(QDataStream::Qt_4_5);
// Basic format header.
HeaderEntity header;
header.magic = HeaderEntity::MAGIC;
header.majorVersion = HeaderEntity::MAJOR_VERSION;
header.minorVersion = HeaderEntity::MINOR_VERSION;
out << header;
// Offsets-Header
// - Save begin pos
// - Write OffsetsHeader
// - Convert relative- to absolute-offsets
// - Seek back to begin-pos and write OffsetsHeader again.
// Use a copy of OffsetsHeader to keep the _offsetsHeader relative.
const qint64 posOffsetHeaders = out.device()->pos();
OffsetsHeaderEntity offsetsHeader = _offsetsHeader;
out << offsetsHeader;
// Now we know the size of the entire header.
// We can update the relative- to absolute-offsets now.
const qint64 allHeaderSize = out.device()->pos();
for (int i = 0; i < offsetsHeader.entriesCount; ++i)
{
offsetsHeader.entries[i].offset += allHeaderSize; // Absolute offset!
}
// Seek back and write again with absolute offsets.
// TODO Thats not nice, but it works...
out.device()->seek(posOffsetHeaders);
out << offsetsHeader;
// Write contents.
out.writeRawData(_contentBuffer.data().constData(), _contentBuffer.size());
return data;
}
///////////////////////////////////////////////////////////////////////////////
InMemoryReader::InMemoryReader(const QByteArray& data) :
_data(data)
{
}
bool InMemoryReader::initReadHeader()
{
QDataStream in(_data);
in.setVersion(QDataStream::Qt_4_5);
// Basic format header.
HeaderEntity header;
in >> header;
if (header.magic != HeaderEntity::MAGIC)
{
qWarning() << QString("invalid format (magic=%1)").arg(header.magic);
return false;
}
if (header.majorVersion != HeaderEntity::MAJOR_VERSION)
{
qWarning() << QString("format is too new (major=%1; minor=%2)")
.arg(header.majorVersion).arg(header.minorVersion);
return false;
}
// OffsetsHeader.
in >> _offsetsHeader;
return !in.atEnd();
}
bool InMemoryReader::read(qint32 entryType, QByteArray& data)
{
// Find offset for "type".
int index = -1;
for (int i = 0; i < _offsetsHeader.entriesCount; ++i)
{
if (_offsetsHeader.entries.at(i).type == entryType)
{
index = i;
break;
}
}
if (index < 0)
return false;
else if (_offsetsHeader.entries.at(index).offset == 0)
return false;
const OffsetsHeaderEntryEntity& entry = _offsetsHeader.entries.at(index);
QDataStream in(_data);
in.setVersion(QDataStream::Qt_4_5);
in.device()->seek(entry.offset);
char* buff = new char[entry.contentSize];
in.readRawData(buff, entry.contentSize);
data.append(buff, entry.contentSize);
delete[] buff;
return true;
}
bool InMemoryReader::read(SectionIndexData& sid)
{
QByteArray sidData;
if (!read(ET_SectionIndex, sidData) || sidData.isEmpty())
return false;
QDataStream in(sidData);
in.setVersion(QDataStream::Qt_4_5);
in >> sid;
return in.atEnd();
}
///////////////////////////////////////////////////////////////////////////////
ADS_NAMESPACE_SER_END

View File

@@ -1,55 +0,0 @@
TARGET = AdvancedDockingSystemDemo
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
greaterThan(QT_MAJOR_VERSION, 4): DEFINES += ADS_NAMESPACE_ENABLED
windows {
# MinGW
*-g++* {
QMAKE_CXXFLAGS += -std=c++11
}
# MSVC
*-msvc* {
}
}
SOURCES += \
src/main.cpp \
src/mainwindow.cpp \
src/icontitlewidget.cpp \
src/dialogs/SectionContentListModel.cpp \
src/dialogs/SectionContentListWidget.cpp
HEADERS += \
src/mainwindow.h \
src/icontitlewidget.h \
src/dialogs/SectionContentListModel.h \
src/dialogs/SectionContentListWidget.h
FORMS += \
src/mainwindow.ui \
src/dialogs/SectionContentListWidget.ui
# Dependency: AdvancedDockingSystem (staticlib)
#win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../AdvancedDockingSystem/release/ -lAdvancedDockingSystem
#else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../AdvancedDockingSystem/debug/ -lAdvancedDockingSystem
#else:unix: LIBS += -L$$OUT_PWD/../AdvancedDockingSystem/ -lAdvancedDockingSystem
#INCLUDEPATH += $$PWD/../AdvancedDockingSystem/include
#DEPENDPATH += $$PWD/../AdvancedDockingSystem/include
#win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../AdvancedDockingSystem/release/libAdvancedDockingSystem.a
#else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../AdvancedDockingSystem/debug/libAdvancedDockingSystem.a
#else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../AdvancedDockingSystem/release/AdvancedDockingSystem.lib
#else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../AdvancedDockingSystem/debug/AdvancedDockingSystem.lib
#else:unix: PRE_TARGETDEPS += $$OUT_PWD/../AdvancedDockingSystem/libAdvancedDockingSystem.a
# Dependency: AdvancedDockingSystem (shared)
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../AdvancedDockingSystem/release/ -lAdvancedDockingSystem1
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../AdvancedDockingSystem/debug/ -lAdvancedDockingSystem1
else:unix: LIBS += -L$$OUT_PWD/../AdvancedDockingSystem/ -lAdvancedDockingSystem1
INCLUDEPATH += $$PWD/../AdvancedDockingSystem/include
DEPENDPATH += $$PWD/../AdvancedDockingSystem/include

View File

@@ -1,96 +0,0 @@
#include "SectionContentListModel.h"
SectionContentListModel::SectionContentListModel(QObject* parent) :
QAbstractTableModel(parent)
{
_headers.insert(UidColumn, "UID");
_headers.insert(UniqueNameColumn, "Unique Name");
_headers.insert(TitleColumn, "Title");
_headers.insert(VisibleColumn, "Visible");
}
SectionContentListModel::~SectionContentListModel()
{
}
void SectionContentListModel::init(ADS_NS::ContainerWidget* cw)
{
#if QT_VERSION >= 0x050000
beginResetModel();
_cw = cw;
_contents = _cw->contents();
endResetModel();
#else
_cw = cw;
_contents = _cw->contents();
reset();
#endif
}
int SectionContentListModel::columnCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
return _headers.count();
}
QVariant SectionContentListModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
return _headers.value(section);
return QVariant();
}
int SectionContentListModel::rowCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
return _contents.count();
}
QVariant SectionContentListModel::data(const QModelIndex& index, int role) const
{
if (!index.isValid() || index.row() > rowCount(index) - 1)
return QVariant();
const ADS_NS::SectionContent::RefPtr sc = _contents.at(index.row());
if (sc.isNull())
return QVariant();
switch (role)
{
case Qt::DisplayRole:
{
switch (index.column())
{
case UidColumn:
return sc->uid();
case UniqueNameColumn:
return sc->uniqueName();
case TitleColumn:
return sc->title();
case VisibleColumn:
return _cw->isSectionContentVisible(sc);
}
}
}
return QVariant();
}
bool SectionContentListModel::removeRows(int row, int count, const QModelIndex& parent)
{
if (row > rowCount(parent) - 1)
return false;
const int first = row;
const int last = row + count - 1;
beginRemoveRows(parent, first, last);
for (int i = last; i >= first; --i)
{
const ADS_NS::SectionContent::RefPtr sc = _contents.at(i);
_cw->removeSectionContent(sc);
_contents.removeAt(i);
}
endRemoveRows();
return true;
}

View File

@@ -1,48 +0,0 @@
#ifndef ADS_SECTIONCONTENTMODEL_H
#define ADS_SECTIONCONTENTMODEL_H
#include <QHash>
#include <QList>
#include <QString>
#include <QAbstractTableModel>
#include "ads/API.h"
#include "ads/ContainerWidget.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class ContainerWidget;
ADS_NAMESPACE_END
class SectionContentListModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum Column
{
UidColumn,
UniqueNameColumn,
TitleColumn,
VisibleColumn
};
SectionContentListModel(QObject* parent);
virtual ~SectionContentListModel();
void init(ADS_NS::ContainerWidget* cw);
virtual int columnCount(const QModelIndex &parent) const;
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
virtual int rowCount(const QModelIndex &parent) const;
virtual QVariant data(const QModelIndex &index, int role) const;
virtual bool removeRows(int row, int count, const QModelIndex &parent);
private:
QHash<int, QString> _headers;
ADS_NS::ContainerWidget* _cw;
QList<ADS_NS::SectionContent::RefPtr> _contents;
};
#endif

View File

@@ -1,38 +0,0 @@
#include "SectionContentListWidget.h"
#include "SectionContentListModel.h"
SectionContentListWidget::SectionContentListWidget(QWidget* parent) :
QDialog(parent)
{
_ui.setupUi(this);
connect(_ui.deleteButton, SIGNAL(clicked(bool)), this, SLOT(onDeleteButtonClicked()));
}
void SectionContentListWidget::setValues(const SectionContentListWidget::Values& v)
{
_v = v;
// Reset
QAbstractItemModel* m = _ui.tableView->model();
if (m)
{
_ui.tableView->setModel(NULL);
delete m;
m = NULL;
}
// Fill.
SectionContentListModel* sclm = new SectionContentListModel(this);
sclm->init(_v.cw);
_ui.tableView->setModel(sclm);
}
void SectionContentListWidget::onDeleteButtonClicked()
{
const QModelIndex mi = _ui.tableView->currentIndex();
if (!mi.isValid())
return;
_ui.tableView->model()->removeRows(mi.row(), 1, mi.parent());
}

View File

@@ -1,33 +0,0 @@
#ifndef SECTIONCONTENTLISTWIDGET
#define SECTIONCONTENTLISTWIDGET
#include <QDialog>
#include "ui_SectionContentListWidget.h"
#include "ads/API.h"
#include "ads/ContainerWidget.h"
#include "ads/SectionContent.h"
class SectionContentListWidget : public QDialog
{
Q_OBJECT
public:
class Values
{
public:
ADS_NS::ContainerWidget* cw;
};
SectionContentListWidget(QWidget* parent);
void setValues(const Values& v);
private slots:
void onDeleteButtonClicked();
private:
Ui::SectionContentListWidgetForm _ui;
Values _v;
};
#endif

View File

@@ -1,61 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SectionContentListWidgetForm</class>
<widget class="QWidget" name="SectionContentListWidgetForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>522</width>
<height>258</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTableView" name="tableView">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="deleteButton">
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -1,65 +0,0 @@
#include "icontitlewidget.h"
#include <QIcon>
#include <QString>
#include <QBoxLayout>
#include <QLabel>
#include <QStyle>
IconTitleWidget::IconTitleWidget(const QIcon& icon, const QString& title, QWidget *parent) :
QFrame(parent)
{
QBoxLayout* l = new QBoxLayout(QBoxLayout::LeftToRight);
l->setContentsMargins(0, 0, 0, 0);
setLayout(l);
_iconLabel = new QLabel();
l->addWidget(_iconLabel);
_titleLabel = new QLabel();
l->addWidget(_titleLabel, 1);
setIcon(icon);
setTitle(title);
}
void IconTitleWidget::setIcon(const QIcon& icon)
{
if (icon.isNull())
{
_iconLabel->setPixmap(QPixmap());
_iconLabel->setVisible(false);
}
else
{
_iconLabel->setPixmap(icon.pixmap(16, 16));
_iconLabel->setVisible(true);
}
}
void IconTitleWidget::setTitle(const QString& title)
{
if (title.isEmpty())
{
_titleLabel->setText(QString());
_titleLabel->setVisible(false);
}
else
{
_titleLabel->setText(title);
_titleLabel->setVisible(true);
}
}
void IconTitleWidget::polishUpdate()
{
QList<QWidget*> widgets;
widgets.append(_iconLabel);
widgets.append(_titleLabel);
foreach (QWidget* w, widgets)
{
w->style()->unpolish(w);
w->style()->polish(w);
w->update();
}
}

View File

@@ -1,26 +0,0 @@
#ifndef ICONTITLEWIDGET_H
#define ICONTITLEWIDGET_H
#include <QFrame>
class QIcon;
class QString;
class QLabel;
class IconTitleWidget : public QFrame
{
Q_OBJECT
public:
explicit IconTitleWidget(const QIcon& icon, const QString& title, QWidget *parent = 0);
public slots:
void setIcon(const QIcon& icon);
void setTitle(const QString& title);
void polishUpdate();
public:
QLabel* _iconLabel;
QLabel* _titleLabel;
};
#endif // ICONTITLEWIDGET_H

View File

@@ -1,28 +0,0 @@
#include <QString>
#include <QFile>
#include <QApplication>
#include "mainwindow.h"
static void initStyleSheet(QApplication& a)
{
//Q_INIT_RESOURCE(ads); // If static linked.
QFile f(":ads/stylesheets/default-windows.css");
if (f.open(QFile::ReadOnly))
{
const QByteArray ba = f.readAll();
f.close();
a.setStyleSheet(QString(ba));
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(true);
initStyleSheet(a);
MainWindow mw;
mw.show();
return a.exec();
}

View File

@@ -1,209 +0,0 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTime>
#include <QLabel>
#include <QTextEdit>
#include <QCalendarWidget>
#include <QFrame>
#include <QTreeView>
#include <QFileSystemModel>
#include <QBoxLayout>
#include "ads/SectionWidget.h"
#include "ads/DropOverlay.h"
#include "dialogs/SectionContentListWidget.h"
#include "icontitlewidget.h"
///////////////////////////////////////////////////////////////////////
static int CONTENT_COUNT = 0;
static ADS_NS::SectionContent::RefPtr createLongTextLabelSC(ADS_NS::ContainerWidget* container)
{
QWidget* w = new QWidget();
QBoxLayout* bl = new QBoxLayout(QBoxLayout::TopToBottom);
w->setLayout(bl);
QLabel* l = new QLabel();
l->setWordWrap(true);
l->setAlignment(Qt::AlignTop | Qt::AlignLeft);
l->setText(QString("Lorem Ipsum ist ein einfacher Demo-Text für die Print- und Schriftindustrie. Lorem Ipsum ist in der Industrie bereits der Standard Demo-Text seit 1500, als ein unbekannter Schriftsteller eine Hand voll Wörter nahm und diese durcheinander warf um ein Musterbuch zu erstellen. Es hat nicht nur 5 Jahrhunderte überlebt, sondern auch in Spruch in die elektronische Schriftbearbeitung geschafft (bemerke, nahezu unverändert). Bekannt wurde es 1960, mit dem erscheinen von Letrase, welches Passagen von Lorem Ipsum enhielt, so wie Desktop Software wie Aldus PageMaker - ebenfalls mit Lorem Ipsum."));
bl->addWidget(l);
const int index = ++CONTENT_COUNT;
ADS_NS::SectionContent::RefPtr sc = ADS_NS::SectionContent::newSectionContent(QString("uname-%1").arg(index), container, new IconTitleWidget(QIcon(), QString("Label %1").arg(index)), w);
sc->setTitle("Ein Label " + QString::number(index));
return sc;
}
static ADS_NS::SectionContent::RefPtr createCalendarSC(ADS_NS::ContainerWidget* container)
{
QCalendarWidget* w = new QCalendarWidget();
const int index = ++CONTENT_COUNT;
return ADS_NS::SectionContent::newSectionContent(QString("uname-%1").arg(index), container, new IconTitleWidget(QIcon(), QString("Calendar %1").arg(index)), w);
}
static ADS_NS::SectionContent::RefPtr createFileSystemTreeSC(ADS_NS::ContainerWidget* container)
{
QTreeView* w = new QTreeView();
w->setFrameShape(QFrame::NoFrame);
// QFileSystemModel* m = new QFileSystemModel(w);
// m->setRootPath(QDir::currentPath());
// w->setModel(m);
const int index = ++CONTENT_COUNT;
return ADS_NS::SectionContent::newSectionContent(QString("uname-%1").arg(index), container, new IconTitleWidget(QIcon(), QString("Filesystem %1").arg(index)), w);
}
static void storeDataHelper(const QString& fname, const QByteArray& ba)
{
QFile f(fname + QString(".dat"));
if (f.open(QFile::WriteOnly))
{
f.write(ba);
f.close();
}
}
static QByteArray loadDataHelper(const QString& fname)
{
QFile f(fname + QString(".dat"));
if (f.open(QFile::ReadOnly))
{
QByteArray ba = f.readAll();
f.close();
return ba;
}
return QByteArray();
}
///////////////////////////////////////////////////////////////////////
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// Setup actions.
QObject::connect(ui->actionContentList, SIGNAL(triggered()), this, SLOT(showSectionContentListDialog()));
// ADS - Create main container (ContainerWidget).
_container = new ADS_NS::ContainerWidget();
#if QT_VERSION >= 0x050000
QObject::connect(_container, &ADS_NS::ContainerWidget::activeTabChanged, this, &MainWindow::onActiveTabChanged);
QObject::connect(_container, &ADS_NS::ContainerWidget::sectionContentVisibilityChanged, this, &MainWindow::onSectionContentVisibilityChanged);
#else
QObject::connect(_container, SIGNAL(activeTabChanged(const SectionContent::RefPtr&, bool)), this, SLOT(onActiveTabChanged(const SectionContent::RefPtr&, bool)));
QObject::connect(_container, SIGNAL(sectionContentVisibilityChanged(SectionContent::RefPtr,bool)), this, SLOT(onSectionContentVisibilityChanged(SectionContent::RefPtr,bool)));
#endif
setCentralWidget(_container);
// Optional: Use custom drop area widgets.
if (false)
{
QHash<ADS_NS::DropArea, QWidget*> areaWidgets;
areaWidgets.insert(ADS_NS::TopDropArea, new QPushButton("TOP"));
areaWidgets.insert(ADS_NS::RightDropArea, new QPushButton("RIGHT"));
areaWidgets.insert(ADS_NS::BottomDropArea, new QPushButton("BOTTOM"));
areaWidgets.insert(ADS_NS::LeftDropArea, new QPushButton("LEFT"));
areaWidgets.insert(ADS_NS::CenterDropArea, new QPushButton("CENTER"));
_container->dropOverlay()->setAreaWidgets(areaWidgets);
}
// ADS - Adding some contents.
if (true)
{
// Test #1: Use high-level public API
ADS_NS::ContainerWidget* cw = _container;
ADS_NS::SectionWidget* sw = NULL;
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::CenterDropArea);
sw = _container->addSectionContent(createCalendarSC(cw), sw, ADS_NS::RightDropArea);
sw = _container->addSectionContent(createFileSystemTreeSC(cw), sw, ADS_NS::CenterDropArea);
_container->addSectionContent(createCalendarSC(_container));
_container->addSectionContent(createLongTextLabelSC(_container));
_container->addSectionContent(createLongTextLabelSC(_container));
_container->addSectionContent(createLongTextLabelSC(_container));
ADS_NS::SectionContent::RefPtr sc = createLongTextLabelSC(cw);
sc->setFlags(ADS_NS::SectionContent::AllFlags ^ ADS_NS::SectionContent::Closeable);
_container->addSectionContent(sc);
}
else if (false)
{
// Issue #2: If the first drop is not into CenterDropArea, the application crashes.
ADS_NS::ContainerWidget* cw = _container;
ADS_NS::SectionWidget* sw = NULL;
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::LeftDropArea);
sw = _container->addSectionContent(createCalendarSC(cw), sw, ADS_NS::LeftDropArea);
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::CenterDropArea);
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::CenterDropArea);
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::CenterDropArea);
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::RightDropArea);
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::BottomDropArea);
}
// Default window geometry
resize(800, 600);
restoreGeometry(loadDataHelper("MainWindow"));
// ADS - Restore geometries and states of contents.
_container->restoreState(loadDataHelper("ContainerWidget"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showSectionContentListDialog()
{
SectionContentListWidget::Values v;
v.cw = _container;
SectionContentListWidget w(this);
w.setValues(v);
w.exec();
}
void MainWindow::onActiveTabChanged(const ADS_NS::SectionContent::RefPtr& sc, bool active)
{
Q_UNUSED(active);
IconTitleWidget* itw = dynamic_cast<IconTitleWidget*>(sc->titleWidget());
if (itw)
{
itw->polishUpdate();
}
}
void MainWindow::onSectionContentVisibilityChanged(const ADS_NS::SectionContent::RefPtr& sc, bool visible)
{
qDebug() << Q_FUNC_INFO << sc->uniqueName() << visible;
}
void MainWindow::onActionAddSectionContentTriggered()
{
return;
}
void MainWindow::contextMenuEvent(QContextMenuEvent* e)
{
Q_UNUSED(e);
QMenu* m = _container->createContextMenu();
m->exec(QCursor::pos());
delete m;
}
void MainWindow::closeEvent(QCloseEvent* e)
{
Q_UNUSED(e);
storeDataHelper("MainWindow", saveGeometry());
storeDataHelper("ContainerWidget", _container->saveState());
}

View File

@@ -1,43 +0,0 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "ads/API.h"
#include "ads/ContainerWidget.h"
#include "ads/SectionContent.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
virtual ~MainWindow();
public slots:
void showSectionContentListDialog();
private slots:
#if QT_VERSION >= 0x050000
void onActiveTabChanged(const ADS_NS::SectionContent::RefPtr& sc, bool active);
void onSectionContentVisibilityChanged(const ADS_NS::SectionContent::RefPtr& sc, bool visible);
#else
void onActiveTabChanged(const SectionContent::RefPtr& sc, bool active);
void onSectionContentVisibilityChanged(const SectionContent::RefPtr& sc, bool visible);
#endif
void onActionAddSectionContentTriggered();
protected:
virtual void contextMenuEvent(QContextMenuEvent* e);
virtual void closeEvent(QCloseEvent* e);
private:
Ui::MainWindow *ui;
ADS_NS::ContainerWidget* _container;
};
#endif // MAINWINDOW_H

View File

@@ -1,7 +0,0 @@
HEADERS += \
$$PWD/src/TestCore.h
SOURCES += \
$$PWD/src/main.cpp \
$$PWD/src/TestCore.cpp

View File

@@ -1,14 +0,0 @@
TARGET = AdvancedDockingSystemUnitTests
QT += core gui testlib
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
greaterThan(QT_MAJOR_VERSION, 4): DEFINES += ADS_NAMESPACE_ENABLED
DEFINES += ADS_IMPORT
INCLUDEPATH += $$PWD/src
INCLUDEPATH += $$PWD/../AdvancedDockingSystem/include
DEPENDPATH += $$PWD/../AdvancedDockingSystem/include
include(AdvancedDockingSystemUnitTests.pri)
include(../AdvancedDockingSystem/AdvancedDockingSystem.pri)

View File

@@ -1,68 +0,0 @@
#include "TestCore.h"
#include "ads/API.h"
#include "ads/Serialization.h"
void TestCore::serialization()
{
QList<QByteArray> datas;
datas.append(QByteArray("Custom Data Here!!!"));
datas.append(QByteArray("Even More..."));
datas.append(QByteArray("lalalaalalalalalalal").toBase64());
// WRITE some data.
ADS_NS_SER::InMemoryWriter writer;
for (int i = 0; i < datas.count(); ++i)
{
QVERIFY(writer.write(ADS_NS_SER::ET_Custom + i, datas.at(i)));
}
// Type: SectionIndexData
ADS_NS_SER::SectionIndexData sid;
for (int i = 0; i < 1; ++i)
{
ADS_NS_SER::SectionEntity se;
se.x = i;
se.y = i;
se.width = 100 + i;
se.height = 100 + i;
se.currentIndex = i;
for (int j = 0; j < 1; ++j)
{
ADS_NS_SER::SectionContentEntity sce;
sce.uniqueName = QString("uname-%1-%2").arg(i).arg(j);
sce.preferredIndex = 8;
sce.visible = true;
se.sectionContents.append(sce);
se.sectionContentsCount += 1;
}
sid.sections.append(se);
sid.sectionsCount += 1;
}
QVERIFY(writer.write(sid));
QVERIFY(writer.offsetsCount() == datas.count() + 1);
const QByteArray writtenData = writer.toByteArray();
QVERIFY(writtenData.size() > 0);
// READ and validate written data.
ADS_NS_SER::InMemoryReader reader(writtenData);
QVERIFY(reader.initReadHeader());
QVERIFY(reader.offsetsCount() == datas.count() + 1);
for (int i = 0; i < datas.count(); ++i)
{
QByteArray readData;
QVERIFY(reader.read(ADS_NS_SER::ET_Custom + i, readData));
QVERIFY(readData == datas.at(i));
}
// Type: SectionIndexData
ADS_NS_SER::SectionIndexData sidRead;
QVERIFY(reader.read(sidRead));
// TODO compare sidRead with sid
}
QTEST_MAIN(TestCore)

View File

@@ -1,14 +0,0 @@
#ifndef TEST_CORE_H
#define TEST_CORE_H
#include <QtTest/QtTest>
class TestCore : public QObject
{
Q_OBJECT
private slots:
void serialization();
};
#endif

View File

@@ -1 +0,0 @@
#include <QtTest/QtTest>

43
CMakeLists.txt Normal file
View File

@@ -0,0 +1,43 @@
cmake_minimum_required(VERSION 3.5)
# 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}")
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})
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!

2
MANIFEST.in Normal file
View File

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

739
README.md
View File

@@ -1,94 +1,645 @@
# Advanced Docking System for Qt
[![Gitter](https://badges.gitter.im/mfreiholz/Qt-Advanced-Docking-System.svg)](https://gitter.im/mfreiholz/Qt-Advanced-Docking-System?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
Manages content widgets more like Visual Studio or similar programs.
I also try to get everything done with basic Qt functionality.
Basic usage of QWidgets an QLayouts and using basic styles as much as possible.
![Layout of widgets](preview.png)
![Dropping widgets](preview-dragndrop.png)
## Tested Compatible Environments
- Windows 7 / 8 / 8.1 / 10
- Ubuntu 15.10
## Build
Open the `build.pro` with QtCreator and start the build, that's it.
You can run the demo project and test it yourself.
## Release & Development
The `master` branch is not guaranteed to be stable or does not even build, since it is the main working branch.
If you want a version that builds, you should always use a release/beta tag.
## Getting started / Example
The following example shows the minimum code required to use ADS.
_MyWindow.h_
```cpp
#include <QMainWindow>
#include "ads/API.h"
#include "ads/ContainerWidget.h"
#include "ads/SectionContent.h"
class MyWindow : public QMainWindow
{
Q_OBJECT
public:
MyWindow(QWidget* parent);
private:
// The main container for dockings.
ADS_NS::ContainerWidget* _container;
// You always want to keep a reference of your content,
// in case you need to perform any action on it (show, hide, ...)
ADS_NS::SectionContent::RefPtr _sc1;
};
```
_MyWindow.cpp_
```cpp
#include "MyWindow.h"
#include <QLabel>
MyWindow::MyWindow(QWidget* parent) : QMainWindow(parent)
{
_container = new ADS_NS::ContainerWidget();
setCentralWidget(_container);
_sc1 = ADS_NS::SectionContent::newSectionContent(QString("Unique-Internal-Name"), _container, new QLabel("Visible Title"), new QLabel("Content Widget"));
_container->addSectionContent(_sc1, NULL, ADS_NS::CenterDropArea);
}
static void initStyleSheet(QApplication& a)
{
//Q_INIT_RESOURCE(ads); // If static linked.
QFile f(":ads/stylesheets/default-windows.css");
if (f.open(QFile::ReadOnly))
{
const QByteArray ba = f.readAll();
f.close();
a.setStyleSheet(QString(ba));
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(true);
initStyleSheet(a);
MainWindow mw;
mw.show();
return a.exec();
}
```
## Developers
[Manuel Freiholz](https://mfreiholz.de), Project Maintainer
## License information
![WTFPL](license.png)
This projects uses the [WTFPL license](http://www.wtfpl.net/)
(Do **W**hat **T**he **F**uck You Want To **P**ublic **L**icense)
Using it? Let us know by creating a [new issue](https://github.com/mfreiholz/qt-docks/issues/new) (You don't have to, of course).
![ukraine](doc/ukraine.jpg)
![logo](doc/ads_logo.svg)
------------------
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/githubuser0xFFFF/Qt-Advanced-Docking-System?color=%23ff9833)](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
[![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)
[![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)
[![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)
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.
- [What's new...](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
- [Documentation](doc/user-guide.md)
- Original Repository: https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System
[![Video Advanced Docking](doc/advanced-docking_video.png)](https://www.youtube.com/watch?v=7pdNfafg3Qc)
## New and Noteworthy
The [release 4.0](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/latest)
adds the following features:
- Auto-Hide functionality ([read more...](#auto-hide-functionality))
![Auto Hide Functionality](doc/AutoHide_Animation.gif)
- improved demo application with new image viewer dock widgets
![Auto Hide Functionality](doc/Feature_ImageViewer.png)
- Visual Studio like CSS theme in demo application
The [release 3.8](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/3.8.3)
adds the following features:
- option to close tabs with the middle mouse button
- `DeleteContentOnClose` flag for dynamic deletion and creation of dock widget
content
- improved focus highlighting functionality
The [release 3.7](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/tag/3.7.2)
adds the following features:
- support for **Qt6.**
- support for [empty dock area](doc/user-guide.md#empty-dock-area)
The [release 3.6](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/releases/tag/3.6.3)
adds some nice new features:
- support for [central widget](doc/user-guide.md#central-widget) concept
![Central Widget](doc/central_widget.gif)
- support for [native floating widgets](doc/user-guide.md#floatingcontainerforcenativetitlebar-linux-only) on Linux
![FloatingContainerForceNativeTitleBar true](doc/cfg_flag_FloatingContainerForceNativeTitleBar_true.png)
Both features are contributions from ADS users. Read the [documentation](doc/user-guide.md)
to learn more about both new features.
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)
- [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)
- [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)
- [DREAM.3D NX](#dream3d-nx)
- [LabPlot](#labplot)
- [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** 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.
### 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 [![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)
The library was developed on and for Windows. It is used in a commercial Windows application and is therefore constantly tested.
### macOS
macOS [![Build Status](https://travis-ci.org/githubuser0xFFFF/Qt-Advanced-Docking-System.svg?branch=master)](https://travis-ci.org/githubuser0xFFFF/Qt-Advanced-Docking-System)
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://travis-ci.org/githubuser0xFFFF/Qt-Advanced-Docking-System.svg?branch=master)](https://travis-ci.org/githubuser0xFFFF/Qt-Advanced-Docking-System)
[![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 this 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 the 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.
### 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
```
### Qt6 on Ubuntu 22.04
```bash
sudo apt install qt6-base-dev qt6-base-private-dev qt6-tools-dev libqt6svg6
```
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.
m_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 = new ads::CDockWidget("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
m_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 re-use 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)
### [DREAM.3D NX](https://github.com/BlueQuartzSoftware/DREAM3D)
DREAM.3D *(Digital Representation Environment for Analysis of Materials in 3D)* is an open source, 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/) is currently completely rewriting the DREAM.3D application. For the upcoming version **[DREAM3D NX](http://www.dream3d.io/)** they improved the UI by using the Advanced Docking System. An [early version](http://www.dream3d.io/) of **DREAM3D NX** with ADS is already available to any user who would like to take the brand new version out for a spin.
![DREAM.3D NX](doc/showcase_dream3d_nx.png)
[read more...](http://dream3d.bluequartz.net/)
### [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/)
## 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
}

9
ads.pro Normal file
View File

@@ -0,0 +1,9 @@
TEMPLATE = subdirs
SUBDIRS = \
src \
demo \
examples
demo.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

@@ -1,6 +0,0 @@
TEMPLATE = subdirs
SUBDIRS = \
AdvancedDockingSystem \
AdvancedDockingSystemDemo \
AdvancedDockingSystemUnitTests

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()

45
demo/CMakeLists.txt Normal file
View File

@@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.5)
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 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)
if(WIN32 AND QT_VERSION_MAJOR LESS 6)
target_link_libraries(AdvancedDockingSystemDemo PUBLIC Qt${QT_VERSION_MAJOR}::AxContainer)
endif()
target_link_libraries(AdvancedDockingSystemDemo PRIVATE qt${QT_VERSION_MAJOR}advanceddocking)
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

1024
demo/MainWindow.cpp Normal file

File diff suppressed because it is too large Load Diff

73
demo/MainWindow.h Normal file
View File

@@ -0,0 +1,73 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_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/>.
******************************************************************************/
//============================================================================
/// \file MainWindow.h
/// \author Uwe Kindler
/// \date 13.02.2018
/// \brief Declaration of CMainWindow class
//============================================================================
//============================================================================
// INCLUDES
//============================================================================
#include <QMainWindow>
struct MainWindowPrivate;
/**
* Simple main window for demo
*/
class CMainWindow : public QMainWindow
{
Q_OBJECT
private:
MainWindowPrivate* d;///< private data - pimpl
friend struct MainWindowPrivate;
protected:
virtual void closeEvent(QCloseEvent* event) override;
public:
explicit CMainWindow(QWidget *parent = 0);
virtual ~CMainWindow();
private slots:
void on_actionSaveState_triggered(bool);
void on_actionRestoreState_triggered(bool);
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();
};
#endif // MAINWINDOW_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"

49
demo/demo.pro Normal file
View File

@@ -0,0 +1,49 @@
ADS_OUT_ROOT = $${OUT_PWD}/..
TARGET = AdvancedDockingSystemDemo
DESTDIR = $${ADS_OUT_ROOT}/lib
QT += core gui widgets quick quickwidgets
include(../ads.pri)
lessThan(QT_MAJOR_VERSION, 6) {
win32 {
QT += axcontainer
}
}
CONFIG += c++14
CONFIG += debug_and_release
DEFINES += QT_DEPRECATED_WARNINGS
RC_FILE += app.rc
adsBuildStatic {
DEFINES += ADS_STATIC
}
HEADERS += \
MainWindow.h \
StatusDialog.h \
ImageViewer.h \
RenderWidget.h
SOURCES += \
main.cpp \
MainWindow.cpp \
StatusDialog.cpp \
ImageViewer.cpp \
RenderWidget.cpp
FORMS += \
mainwindow.ui \
StatusDialog.ui
RESOURCES += demo.qrc
LIBS += -L$${ADS_OUT_ROOT}/lib
INCLUDEPATH += ../src
DEPENDPATH += ../src

40
demo/demo.qrc Normal file
View File

@@ -0,0 +1,40 @@
<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>
</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

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

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