Compare commits

...

1434 Commits

Author SHA1 Message Date
Sergio Martins
f18a288def qtquick: Remove unneeded functions from Stack_qtquick 2022-09-10 15:46:56 +01:00
Sergio Martins
cf6b3c06e0 More m_tabWidget -> m_stack renaming 2022-09-10 15:33:49 +01:00
Sergio Martins
94fcdc990c qtquick: Stack_qtquick doesn't need to be exposed to QML 2022-09-10 15:32:13 +01:00
Sergio Martins
96990be5bb qtquick: Move DockWidgetModel to TabBar_qtquick
It's where it's used
2022-09-10 15:26:46 +01:00
Sergio Martins
0157d7d914 Remove 2 more unneeded TODOs 2022-09-10 13:27:12 +01:00
Sergio Martins
fbfec2f196 Remove unneeded TODO
This is in qtcommon now, so it's fine
2022-09-10 13:25:18 +01:00
Sergio Martins
60dcec9286 Remove some unneeded mentions of QEvent::Show 2022-09-10 12:58:35 +01:00
Sergio Martins
4e3f4e3073 More replacing of show() with open()
This time on DockWidgetViewInterface
2022-09-10 12:40:54 +01:00
Sergio Martins
cf44110033 Rename DockWidget::show() to DockWidget::open()
Since non-current tabs are open but not visible.
2022-09-10 12:26:30 +01:00
Sergio Martins
3cb6c2b8d0 Add DockWidget::open()
Show/hide/visibility is being deprecated
2022-09-10 12:10:25 +01:00
Sergio Martins
b5a9c03c21 Don't handle QEvent::Hide anymore
Update the buttons in DockWidget::setIsOpen() instead.
This makes the controllers self-contained and not depending
on the "view technology". Other frameworks might not even
have the concept of show/hidden events
2022-09-10 11:37:32 +01:00
Sergio Martins
3a280ae377 Minor indirection removal (DockWidget::Private::onDockWidgetShown()) 2022-09-10 11:30:18 +01:00
Sergio Martins
29be2ae819 Remove DockWidget::hidden() and shown() signals
Visibility isn't useful as a concept, since non current tabs
are also hidden. Instead, use DockWidget::isOpen()
2022-09-10 11:23:39 +01:00
Sergio Martins
764385de9f refactor: DockWidget::isOpen() now keeps its state in the controller
No longer tied to QtWidget visibility. This will make it easier to
make new frontends.
2022-09-09 19:51:25 +01:00
Sergio Martins
ea7cb3cbbb README: Explain our versioning 2022-09-08 11:52:29 +01:00
Sergio Martins
4fc43cbadd Merge branch 'master' into 2.0 2022-09-08 11:13:09 +01:00
Sergio Martins
932a80e73b Export SideBarButton
This allows code to link to subclasses of SideBarButton.

(cherry-picked from commit daebe9e680)
2022-09-08 00:15:34 +01:00
Sergio Martins
ac0b00add3 Allow custom sidebars to access its dock widgets
This is useful in cases where a custom sidebar wants behavior that
affects multiple dock widgets it "contains".

(cherry-picked from commit cf7f037af4)
2022-09-08 00:11:16 +01:00
Allen Winter
82729c85ea .reuse/dep5 - minor cleaning
(cherry picked from commit 913c570b2b)
2022-09-07 23:55:57 +01:00
Allen Winter
fd98824184 docs/api/Doxyfile.cmake - add .pngs 2022-09-07 23:52:06 +01:00
Sergio Martins
3ce1a6c77e Add SegmentedIndicators::s_centralIndicatorMaxWidth/height
So the user can change the maximum size of the central indicator

(cherry-picked from commit f84006347b)
2022-09-07 23:41:59 +01:00
Sergio Martins
bc8d17119a Release mouse if Qt doesn't receive mouse release
As explained in commit message for #166, there's a case where Qt
doesn't receive the mouse release from Windows. If that happens
then allow to drop if we're over a drop indicator.

Fixes issue #306

(cherry-picked from commit bde5be9d9c)
2022-09-07 23:29:12 +01:00
Sergio Martins
411750e865 python: Improve Dockerfile
Added more instructions and missing runtime packages

So I can test issue #304

(cherry picked from commit 7e689f0b39)
2022-09-07 23:26:14 +01:00
Sergio Martins
3ac8c5f384 Python: Add a Dockerfile for a python environment
So I can test issue #304

(cherry picked from commit ef78d60751)
2022-09-07 23:24:23 +01:00
Sergio Martins
6b720715bf cmake: Disable unity builds for python preset
It's not supported

(cherry-picked from commit bdbab41674)
2022-09-07 23:07:46 +01:00
Sergio Martins
d515969724 Fix QTabBar::setCurrentIndex() not getting called sometimes
TabBar::setCurrentIndex() was bailing out and not informing the view
because the current dock widget was the same. That happened because
m_currentDockWidget was being set in two places.

Fixes issue #312
2022-09-07 12:47:04 +01:00
Sergio Martins
ad8457490b Add an xfailing test for issue #312 2022-09-07 12:07:03 +01:00
Sergio Martins
c0ef4ae0d2 tests: Add a test for DockWidget:setAsCurrentTab()
CC issue #312
2022-09-07 11:52:19 +01:00
Sergio Martins
ede6dff09b qtquick: Use a simple Item instead of a StackLayout
StackLayout doesn't allow to reorder children. Instead, just stack
them in an arbitrary order and use visibility to hide the non-current ones.
2022-09-06 22:58:49 +01:00
Sergio Martins
c1420a7e80 tests: Check that current tab matches current widget 2022-09-06 21:51:00 +01:00
Sergio Martins
ef1ce9bb1d Remove stray qDebug 2022-09-06 15:50:38 +01:00
Allen Winter
52cd8f753d appveyor.yml - don't build the master branch 2022-09-06 09:09:01 -04:00
Sergio Martins
496be36585 Merge branch '1.6' 2022-09-05 23:13:43 +01:00
Sergio Martins
f277d5efb7 Fix affinity of central frame
Fixes issue #245

(cherry-picked from commit f9e758d02f)
2022-09-05 22:57:02 +01:00
Sergio Martins
f9e758d02f Fix affinity of central frame
Fixes issue #245
2022-09-05 22:10:03 +01:00
Sergio Martins
958d1500e5 Remove unneeded View.h include and tidy forward declarations
Fixes #311
2022-09-05 21:34:11 +01:00
Sergio Martins
282c3106a4 Fix build with installed KDDW, do not expose Screen.h
Screen.h depends on KDDockWidgets_p.h which is not installed.
2022-08-23 07:57:20 +01:00
Sergio Martins
a74dace6e4 tests: Add more tests to TestDocks::tst_addAsPlaceholder()
While I'm debugging an issue.
2022-08-22 19:40:19 +01:00
Sergio Martins
1998800883 Remove unneeded "spontaneous" argument from onShown/hidden 2022-08-21 22:55:45 +01:00
Sergio Martins
c8b16c9712 Remove unneeded Group::onDockWidgetShown 2022-08-21 22:09:06 +01:00
Sergio Martins
ffc8038cc4 qtquick: Fix tests when tabs are removed
As explained in the comment
2022-08-21 17:29:16 +01:00
Sergio Martins
21d7d220c5 Remove legacy Group::onDockWidgetHidden code which is now unneeded
Tests pass without it, so let's simplify.
2022-08-21 17:11:06 +01:00
Sergio Martins
b52bb85190 qtquick: Fix test due to renaming tabs not being implemented
A warning will make the tests fail. Downgrade to qDebug as
this is expected.
2022-08-21 16:59:59 +01:00
Sergio Martins
c8386e6ce1 vscode: Fully scope ${workspaceFolder}
So it works if someone adds additional folders.
For example, working on the flutter examples within the same IDE.
2022-08-21 13:19:28 +01:00
Sergio Martins
9d9bce1860 vscode: Add launchers for more tests 2022-08-21 13:11:21 +01:00
Sergio Martins
12e8549f8f vscode: Remove msvc launchers, lldb launchers work on Windows too
It's easier to use the same launcher on all 3 operating systems.
2022-08-21 13:04:47 +01:00
Sergio Martins
f0c008fae3 tests: Add a unit-test for Adding dock widget hidden 2022-08-21 12:57:53 +01:00
Sergio Martins
61e93a1970 tests: Add a unit-test for DockWidget::isOpen() 2022-08-21 00:54:24 +01:00
Sergio Martins
763ad1ae6b Wrapper views now also get a dummy controller
Now we can finally make all setVisible/isVisible calls go
through the controller
2022-08-20 19:24:21 +01:00
Sergio Martins
bf43df1233 Call setVisible() through the controller instead of view
This is state that's moving to the controller
2022-08-20 18:48:01 +01:00
Sergio Martins
8e0ba911d0 Call isVisible() through the controller instead of view
This will be state that's moving to the controller.
2022-08-20 18:28:58 +01:00
Sergio Martins
a1f427e8e2 Remove unused DockRegistry::dockWidgetForGuest() 2022-08-20 18:09:52 +01:00
Sergio Martins
301af34dec flutter: Generate bindings for the MainWindow controller 2022-08-20 15:54:13 +01:00
Sergio Martins
598fedaf86 flutter: Add virtual onRebuildRequested() to tab bar view
So C++ can call this whenever a tab was removed or inserted
2022-08-20 12:05:59 +01:00
Sergio Martins
809ca9e586 cmake: Add preset to build flutter frontend standalone
It can't be build in conjuction with the QtWidgets one, since
that would mean using QAction from Qt and requiring a QApplication.

Instead just build the flutter frontend.
2022-08-19 23:35:50 +01:00
Sergio Martins
8c881b6db7 flutter: Group now shows the current dockwidget 2022-08-19 22:17:01 +01:00
Sergio Martins
b0f98dfd2d flutter: Only DropArea creates the stack now
It was a bad default. Other widgets can fill parent.
2022-08-19 20:53:54 +01:00
Sergio Martins
8e5e4d9d0e flutter: Refactor DropArea_flutter.dart
Just specialized it, so we can customize it.
2022-08-19 20:46:48 +01:00
Sergio Martins
ee14264655 flutter: Regenerate bindings
Since KDDW API has changed
2022-08-18 00:10:16 +01:00
Sergio Martins
bde5be9d9c Release mouse if Qt doesn't receive mouse release
As explained in commit message for #166, there's a case where Qt
doesn't receive the mouse release from Windows. If that happens
then allow to drop if we're over a drop indicator.

Fixes issue #306
2022-08-16 14:28:49 -07:00
Sergio Martins
7e689f0b39 python: Improve Dockerfile
Added more instructions and missing runtime packages

So I can test issue #304
2022-08-16 20:47:21 +01:00
Sergio Martins
ef78d60751 Python: Add a Dockerfile for a python environment
So I can test issue #304
2022-08-16 00:52:34 +01:00
Sergio Martins
bdbab41674 cmake: Disable unity builds for python preset
It's not supported
2022-08-16 00:03:29 +01:00
Sergio Martins
6757370ca0 Add more documentation 2022-08-15 21:36:31 +01:00
Sergio Martins
91f0a250e7 Workround Qt bug when reordering tabs 2022-08-15 21:25:11 +01:00
Sergio Martins
63ae96a919 Re-add support for reordering tabs
And this time, implement the state in the controllers.
2022-08-15 21:22:53 +01:00
Sergio Martins
65b0b7e140 Remove TabViewInterface::numDockWidgets()
The controller knows how many. Frontends no longer need to
implement this
2022-08-15 21:02:44 +01:00
Sergio Martins
a11414ed8d insertDockWidget() now returns void instead of bool
It doesn't fail.
Furthermore, the views shouldn't dictate anything. The controller
is in charge. Views don't get to say a tab failed to be added.
2022-08-15 20:56:21 +01:00
Sergio Martins
74bd786be8 qtquick: Remove code already handled by the backend
DockWidget controller knows when it's reparented
2022-08-15 20:48:55 +01:00
Sergio Martins
ca26e856db tests: Fix tst_tabbar for QtQuick 2022-08-15 20:46:36 +01:00
Sergio Martins
be2c297fa9 Fix list of tabs not being updated when dock widget closed
When closing, we need to remove from the TabBar controller.

QtWidgets tests no pass again.
2022-08-15 19:55:01 +01:00
Sergio Martins
838e953320 Fix TabBar::moveTabTo() not swapping indexes
The list of dock widgets is now stored in the controller.
2022-08-15 19:38:12 +01:00
Sergio Martins
e61d55df53 Revert "wip"
This reverts commit 4af2f1d46b.
Shouldn't have been commited, it's a local change.
2022-08-15 15:18:14 +01:00
Sergio Martins
376202c3f8 Remove more logic from tabbar view into controller 2022-08-15 14:33:33 +01:00
Sergio Martins
2a37813409 Remove more TabBarViewInterface related to indexes
That's in the controller now, shared by all frontends
2022-08-15 14:14:15 +01:00
Sergio Martins
bbef108e32 Override QTabBar::tabInserted insted of QTabWidget::tabInserted
Since we're moving logic to tab bar instead of tab widget.
Otherwise calling count() on the tab bar while QTabWidget::tabInserted
is running can give the wrong value. So settle with a single class.
2022-08-15 13:47:03 +01:00
Sergio Martins
a0329a01fb Remove from old tab bar before adding to new
By having the state consistent in the controllers it makes it easier
to implement the view counter part code. Relying on the view to
remove from old tab bar implicitly due to reparenting is obscure
2022-08-15 00:09:06 +01:00
Sergio Martins
4af2f1d46b wip 2022-08-14 23:12:21 +01:00
Sergio Martins
24040ccfbf Remove some unneeded code, already covered in TabBar.cpp 2022-08-14 23:11:51 +01:00
Sergio Martins
5a455f86a1 TabBar now knows the list of dockwidgets
It's no longer on the view.
2022-08-14 22:43:33 +01:00
Sergio Martins
9a8ca5135e Fix build 2022-08-14 19:38:51 +01:00
Sergio Martins
a9485ee0b2 Port an old syle connect to Qt5 style 2022-08-14 18:54:54 +01:00
Sergio Martins
6a9988e7b0 Remove more unneeded tab widget code 2022-08-14 18:47:59 +01:00
Sergio Martins
7f072366ed Remove now unneeded TabBar::currentTabChanged(int)
It's all in terms of current dock widget now, not indexes.
2022-08-14 18:31:50 +01:00
Sergio Martins
0b5e9bc6c1 Remove unneeded emissions of currentDockWidgetChanged
It's now wrapped with a setter, so it's emitted at the right
times always
2022-08-14 17:45:33 +01:00
Sergio Martins
8834f7d75b TabBar controller now stores the current dock widget
It's no longer stored in the view.
This makes it easier for new frontends.
2022-08-14 17:34:01 +01:00
Sergio Martins
4627571f3f qtquick: Fix current tab being current even after removed
Added lots of tests for TabBar.
2022-08-14 15:44:38 +01:00
Sergio Martins
d071fc440a Don't run tst_qtquick if KDDW_TEST_FRONTENT=1 is set
Only QtWidgets test should run in that case.
2022-08-14 14:24:51 +01:00
Sergio Martins
bcbb75da72 Add more documentation to GroupViewInterface.h 2022-08-13 23:19:09 +01:00
Sergio Martins
ca0f767f21 Add more documentation and make interfaces simpler 2022-08-13 23:08:10 +01:00
Sergio Martins
30955b5f5b Remove more pure-virtuals from GroupViewInterface
In this case, made them non-pure, as the default impl is enough
for most frontends. Only qtquick does something different
2022-08-13 22:32:49 +01:00
Sergio Martins
7a4c969b86 Removed a lot of unneeded GroupViewInterface methods
These are already implemented in TabViewInterface
2022-08-13 22:17:56 +01:00
Sergio Martins
3ffe116a02 Move more methods away from StackViewInterface
Let's just have TabBarViewInterface, which is similar
2022-08-13 20:35:09 +01:00
Sergio Martins
fb59e30c59 Move more code away from Stack and into TabBar 2022-08-13 16:04:32 +01:00
Sergio Martins
8955ec8bcb Remove unused StackViewInterface::currentIndex() 2022-08-13 14:54:59 +01:00
Sergio Martins
1868ad7bd4 Move more code out of Stack and into TabBar
The signals are more about the tabs.
2022-08-13 14:50:19 +01:00
Sergio Martins
1abebef40b Move move code from StackViewInterface.h to TabBarViewInterface.h
Phasing out the former, so frontend writers don't have to implement
two duplicate interfaces
2022-08-13 14:11:33 +01:00
Sergio Martins
de3ef59506 flutter: Regenerate bindings
Rename some DropArea arguments too, so they don't appear as "arg_X"
in Dart
2022-08-12 23:01:40 +01:00
Sergio Martins
b56e6a8279 flutter: Add convenience to access the controller
Dart can't access the DockWidgetViewInterface since Dartagnan
doesn't support multiple inheritance
2022-08-12 22:49:32 +01:00
Sergio Martins
da21d35f4b flutter: Group will display the dock widget as well 2022-08-12 22:31:33 +01:00
Sergio Martins
73cdaa8698 flutter: Show a title bar and a tab bar
Just placeholders for now, no actual tabs
2022-08-12 21:41:38 +01:00
Sergio Martins
a97e3ae831 flutter: Derive state/widget for all our view types
Mostly boilerplate code, no functionality
2022-08-12 17:58:54 +01:00
Sergio Martins
6bc2979989 flutter: Subclass the widget and state for Group
So we can start adding the title bar and tab bar
2022-08-12 17:31:38 +01:00
Sergio Martins
3c48b3aab3 flutter: Reuse more code, move code into View_mixin 2022-08-12 17:12:12 +01:00
Sergio Martins
7371171115 flutter: Fix crash due to rootView() being null
We can now show a pink dock widget
2022-08-12 16:48:18 +01:00
Sergio Martins
da38c09dec Improve debug output 2022-08-12 16:37:30 +01:00
Sergio Martins
b55656deec flutter: Added DockWidget view
Not implemented yet, but maybe we can show it on screen hosting
a guest user widget
2022-08-12 15:54:44 +01:00
Sergio Martins
76b03f4700 flutter: Add bindings for DockWidget_flutter view wrapper 2022-08-11 19:15:58 +01:00
Sergio Martins
cc719325cc flutter: Generate bindings for Controllers::DockWidget too
Worksaround Dartagnan only knowing "= {}" as a way to default initialize
QFlags
2022-08-11 16:14:34 +01:00
Sergio Martins
a52428cf35 flutter: Regenerate bindings
DropIndicatorOverlay bindings now build.
2022-08-11 15:45:07 +01:00
Sergio Martins
47ada6dd56 flutter: Add more bindings
Some commented out due to bugs in dartagnan. To be fixed.
2022-08-11 15:04:34 +01:00
Sergio Martins
2862f2b76f flutter: Fix moving separators vertically
Needs to use the layout's local coordinate space and not global
space. Horizontally was working since the layout occupies the whole
window. Vertically there's flutter's app bar, so the movements were
off by a few pixels
2022-08-10 22:11:11 +01:00
Sergio Martins
48b067023f Minor rename 2022-08-10 21:50:55 +01:00
Sergio Martins
51b47a26af flutter: Don't resize separator without primary button pressed 2022-08-10 21:41:36 +01:00
Sergio Martins
cc8dbd3d0c Fix typo on View::onResized()
Width and height were swapped. Caught by the tests.
2022-08-10 21:19:07 +01:00
Sergio Martins
c523d514ee Only check for mouse button being pressed on separator move for Qt
That's a workaround for a bug. Other platforms might not have the
same bug and might not have a way to query mouse buttons the same
way Qt does.
2022-08-10 20:30:09 +01:00
Sergio Martins
e9e88d81e8 Fix install step
Separator_quick was old and got renamed to Separator_qtquick
long time ago
2022-08-10 20:26:49 +01:00
Sergio Martins
cffea940ea cmake: Also define KDDW_FRONTEND_QT if we have QtWidgets or QtQuick 2022-08-10 19:45:04 +01:00
Sergio Martins
647cb4c7f6 Remove Utils::isLeftMouseButtonPressed()
It's an unneeded indirection
2022-08-10 19:39:44 +01:00
Sergio Martins
0b2cc6e078 Make separator not depent on QGuiApplication 2022-08-10 19:36:11 +01:00
Sergio Martins
d9f1a04e8d flutter: Layout can now be resized 2022-08-10 19:33:11 +01:00
Sergio Martins
048d156998 flutter: Tell flutter a view was destroyed
So flutter can stop rendering and gc its widget
2022-08-10 19:31:06 +01:00
Sergio Martins
65f23f9c30 flutter: Implement View::parentView() 2022-08-10 19:30:43 +01:00
Sergio Martins
667b9bb28c flutter: Add ViewWrapper
so we can implement View::parentView(), which returns a shared ptr
2022-08-10 19:29:41 +01:00
Sergio Martins
fb6175c4b3 Move the old ViewWrapper to qtcommon
Since it's Qt specific
2022-08-10 19:28:56 +01:00
Sergio Martins
192533647d flutter: Deal in StatefulWidget instead of PositionedWidget
So we can wrap PositionedWidget in something else
2022-08-09 19:07:18 +01:00
Sergio Martins
2afe86e63b flutter: Support showing a basic layout
Next step is adding a MouseRegion for the separators
2022-08-09 18:45:11 +01:00
Sergio Martins
b52070dc0e flutter: Support flutter telling kddw the side of the layout
DropArea's size isn't driven by kddw, that gets resized whenever
the user resizes the window. Flutter now tells KDDW the new size
2022-08-09 01:37:37 +01:00
Sergio Martins
3cbd437ee6 flutter: Regenerate bindings 2022-08-09 01:26:58 +01:00
Sergio Martins
532dc04ec6 Make View::onResized(QSize) receive 2 integers instead
Avoids an allocation when called by dart.
2022-08-09 01:25:56 +01:00
Sergio Martins
8050ca6259 flutter: Remove unneeded callbacks 2022-08-08 23:33:19 +01:00
Sergio Martins
f493c44729 flutter: Use keys instead of callbacks to update state 2022-08-08 22:49:56 +01:00
Sergio Martins
11301e2f0f flutter: PositionedWidget now takes reference for the mixin
Which is the common denominator
2022-08-07 21:36:40 +01:00
Sergio Martins
151bc356fc flutter: Stack, TabBar and TitleBar now also implement View_mixin 2022-08-07 16:08:14 +01:00
Sergio Martins
f4f7e4508b flutter: Group views now implement View_mixin 2022-08-07 16:02:43 +01:00
Sergio Martins
9cf99ff45c flutter: Use a mixin for the View's data
Group_flutter.dart doesn't inherit from View_flutter.dart, it inherits
directly from C++, so wasn't getting the data.

Since Dart doesn't support multiple inheritance we'll use a mixin
2022-08-07 15:56:13 +01:00
Sergio Martins
882f25c7f7 flutter: regenerate bindings 2022-08-07 14:51:00 +01:00
Sergio Martins
69c7d3fd57 Remove View::maximumSize() as we already have View::maxSizeHint()
Having both was due to QWidgets having both. For QtQuick and other
frontends we only want the latter.
2022-08-07 14:49:32 +01:00
Sergio Martins
62d8426ec4 flutter: Name the view method arguments in the header
While usually unneeded, it makes the bindings generator use
proper names instead of generic "arg1" type names.
2022-08-05 16:54:10 +01:00
Sergio Martins
d8189e3e03 .clang-format: wrap at column 100 2022-08-05 16:49:00 +01:00
Sergio Martins
9a4daf8926 flutter: Don't say we have 1 tab, there's 0 still
as the implementation isn't done yet, should fix a crash
2022-08-03 23:42:08 +01:00
Sergio Martins
4c1e45eea9 flutter: Make the ViewFactory return the actual view instances 2022-08-03 23:41:50 +01:00
Sergio Martins
98a7a0e017 flutter: Add a way to dump a dart backtrace
gdb can now call Platform::instance()->dumpManagedBacktrace()
2022-08-03 23:39:22 +01:00
Sergio Martins
c461721456 flutter: Generate bindings for Platform.h too 2022-08-03 23:32:09 +01:00
Sergio Martins
f634a1e3f7 flutter: Add bindings for the views 2022-08-03 12:32:38 +01:00
Sergio Martins
7a8222a063 flutter: Add dummy views
to be implemented as needed
2022-08-03 12:17:00 +01:00
Sergio Martins
35042c2bef Add dummy views to the dummy frontend
Easier to copy-paste to new frontends now.
2022-08-03 11:43:16 +01:00
Sergio Martins
c9c3fdc1a2 Add assert that there's a stack view interface
Helps catch bugs in flutter frontend
2022-08-03 10:03:39 +01:00
Sergio Martins
69c2c0770f tests: Add another test to tst_dropArea 2022-08-03 09:48:30 +01:00
Sergio Martins
3f32bc3dce tests: Move tst_droparea.cpp into tests/controllers/ 2022-08-03 09:24:03 +01:00
Sergio Martins
8a76c63983 flutter: Add bindings for Stack, TitleBar and TabBar 2022-08-03 00:14:36 +01:00
Sergio Martins
7cc4bae1b7 flutter: Regenerate bindings with newest dartagnan bug fixes 2022-08-02 22:56:51 +01:00
Sergio Martins
bf922a2ecb flutter: Add bindings for Group 2022-08-01 00:22:19 +01:00
Sergio Martins
27b8480da6 Make InitialOption's ctor public
Just mark it as internal.
Someone might think it's useful even if bugs reported won't be prioritized.
2022-08-01 00:17:10 +01:00
Sergio Martins
f97a660584 Remove deprecated function 2022-07-31 23:27:07 +01:00
Sergio Martins
6d30643672 Rename "acceptingFrame" to "acceptingGroup"
Frame class has been renamed to group some time ago already
2022-07-31 23:04:50 +01:00
Sergio Martins
e4b2d37f96 Rename "addWidget" to "addTab" 2022-07-31 23:03:16 +01:00
Sergio Martins
45ad75fcd4 flutter: Add multisplitter to the include path 2022-07-31 13:31:03 +01:00
Sergio Martins
8e5225224d flutter: Regenerate bindings
This time without readability tags so we can reduce diff size
2022-07-31 13:30:27 +01:00
Sergio Martins
8a65d2cc0b flutter: Added bindings for Item 2022-07-31 13:07:59 +01:00
Sergio Martins
cfb5c5e2fe flutter: Add InitialOption_wrapper 2022-07-31 13:02:27 +01:00
Sergio Martins
2c58580d06 flutter: Remove unneeded main.dart
We now depend on flutter, not just dart. So need an embedder
to actually run things.
2022-07-31 12:42:50 +01:00
Sergio Martins
4901b977a0 flutter: PositionedWidget can now fill parent 2022-07-31 12:34:59 +01:00
Sergio Martins
120557b8a6 flutter: A view can now be positioned and sized 2022-07-31 12:12:23 +01:00
Sergio Martins
3c51d201d5 reuse: Ignore .yaml config files 2022-07-31 11:49:57 +01:00
Sergio Martins
b1fcae9bc2 flutter: generate more bindings 2022-07-31 11:46:48 +01:00
Sergio Martins
f84006347b Add SegmentedIndicators::s_centralIndicatorMaxWidth/height
So the user can change the maximum size of the central indicator
2022-07-28 19:42:56 +01:00
Sergio Martins
ecd05ffbc5 flutter: Creating a DropArea almost works 2022-07-27 11:44:04 +01:00
Sergio Martins
7b20eedf6d Add tst_dropArea
Removed the requirement to have a parent, it's not really needed,
conceptually.
2022-07-27 10:34:13 +01:00
Sergio Martins
93b3f77969 flutter: instantiate DropArea_flutter 2022-07-27 10:32:10 +01:00
Sergio Martins
f7c3dea53f flutter: Add bindings for Layout 2022-07-26 17:28:01 +01:00
Sergio Martins
02e591fc52 flutter: Add View_flutter.dart 2022-07-26 15:19:57 +01:00
Sergio Martins
3ee9866d84 flutter: Add bindings for CreateViewOptions_wrapper 2022-07-26 15:10:30 +01:00
Sergio Martins
84ec64fade unnest CreateViewOptions so we can create dart bindings for it
Our binding generator doesn't support nested classes yet
2022-07-26 15:03:21 +01:00
Sergio Martins
f8f75cdabc flutter: Add bindings for View 2022-07-26 14:20:27 +01:00
Sergio Martins
feda194b01 flutter: Also create bindings for ViewFactory 2022-07-26 13:37:21 +01:00
Sergio Martins
249ee2ce67 flutter: Add bindings for ViewFactory_flutter.h 2022-07-26 13:30:35 +01:00
Sergio Martins
d97ccb9792 flutter: Add bindings for Config.h 2022-07-26 13:21:14 +01:00
Sergio Martins
90ba005bc6 flutter: Remove unneeded Platform.dart 2022-07-26 13:15:01 +01:00
Sergio Martins
1a762df812 flutter: Add Platform_dart and regenerate bindings 2022-07-26 13:09:26 +01:00
Sergio Martins
0dd41fc7e9 flutter: Rename Platform.dart to Platform_flutter.dart
Makes it consistent with the naming of all other frontends
2022-07-25 17:57:33 +01:00
Sergio Martins
ff7a30dcc3 flutter: Remove duplicate method from QByteArray.dart
Dart doens't support 2 methods with the same name
2022-07-25 17:56:40 +01:00
Sergio Martins
c40f38097a wip 2022-07-25 17:53:26 +01:00
Sergio Martins
7439040147 Don't compare raw Screen pointers directly
Instead compare the underlying QScreen.
2022-07-25 06:13:42 -07:00
Sergio Martins
2fa27e8f62 Add Screen::equals(), as comparing Screen raw pointers is meaningless 2022-07-25 13:49:45 +01:00
Sergio Martins
b5ad2f6870 dummy|flutter: Add missing Platform::primaryScreen() override 2022-07-25 13:30:12 +01:00
Waqar Ahmed
ac082ca846 Add Platform::primaryScreen 2022-07-25 17:24:27 +05:00
Sergio Martins
fb88f37b37 cmake: Build the flutter frontend only when using Qt5
As the bindings were generated against Qt5, not Qt6.
Won't matter much in the future, since it won't depend on Qt. But for
now there's still some dependencies.
2022-07-25 11:49:06 +01:00
Sergio Martins
0e29658664 Fix flutter and dummy frontend builds
Was missing implementation for the new screen methods
2022-07-25 11:46:49 +01:00
Waqar Ahmed
4d5a43ea1f Remove QScreen usage from non-frontend classes 2022-07-25 11:39:36 +05:00
Waqar Ahmed
396973b987 Add Screen::name 2022-07-25 11:37:52 +05:00
Waqar Ahmed
82d6648119 Avoid emitting thousands of timeout signals without any reason 2022-07-24 15:03:50 +05:00
Sergio Martins
b3dd4516ca flutter: Renamed KDDockWidgets package to KDDockWidgetsBindings
The former is needed for the KDDW flutter frontend, which will use
the latter to access the C++ API.

Using two packages instead of one, since one is generated by
dartagnan.
2022-07-23 20:31:50 +01:00
Sergio Martins
7956ec3b73 flutter: Fix Platform::name_calledFromC()
The return type needs to be ffi.Pointer<Utf8>, not String.
This has been fixed in dartagnan
2022-07-23 18:44:20 +01:00
Sergio Martins
9b7eaebd40 flutter: Fix kddockwidgets library name
So dart can load the correct one
2022-07-23 17:21:00 +01:00
Sergio Martins
307161a8f1 flutter: Tell dartagnan to not generate CMakeLists.txt
We have our own already.
2022-07-23 17:13:26 +01:00
Sergio Martins
ee5bd0094b flutter: Add bindings to View, ViewFactory and Platform 2022-07-23 17:03:45 +01:00
Sergio Martins
71f4246ac1 cmake: Add flutter to the dev6 preset 2022-07-23 12:38:01 +01:00
Sergio Martins
d4b515b7a3 Fix Qt6 build 2022-07-23 12:33:09 +01:00
Sergio Martins
162b6b914c flutter: export bindings too 2022-07-23 10:07:41 +01:00
Sergio Martins
a824bba23f codespell: Accept "sharable" as it comes from Qt 2022-07-23 10:06:14 +01:00
Sergio Martins
42ceb96cc2 flutter: Dart bindings are now built within kddockwidgets.dll too
No need to have a separate library with them.

This is just an initial commit to get the cmake right. We'll be adding
more bindings as we go.

Also, at some point, the Qt bindings will be removed and we'll have just
C++ KDDW bindings without any Qt.
2022-07-23 10:01:51 +01:00
Sergio Martins
1e926005c7 Add missing break, fixes fallthrough 2022-07-23 09:46:28 +01:00
Sergio Martins
1252ba40b3 Update .gitignore 2022-07-23 09:46:16 +01:00
Sergio Martins
5419b27a12 Fix linking due to Screen.cpp missing 2022-07-23 09:45:32 +01:00
Sergio Martins
28324e7a6a flutter: Use QT_NO_CAST_FROM_ASCII for bindings
Otherwise kddw won't compile as the QString ascii ctor is private
2022-07-23 09:38:56 +01:00
Sergio Martins
13b94d151b flutter: Add copyright headers to generated bindings
It's done automatically now when refreshing the bindings.
2022-07-23 09:38:56 +01:00
Allen Winter
4e18d198a0 Merge branch '1.6' 2022-07-22 16:00:32 -04:00
Allen Winter
9ce7477cbb docs/api/Doxyfile.cmake - add .pngs 2022-07-22 16:00:08 -04:00
Waqar Ahmed
6e602970fb Add a platform agnostic Screen class 2022-07-22 22:20:18 +05:00
Sergio Martins
4b36717630 flutter: Add binding generation support through dartagnan
For now, only generating a few classes. We'll build up slowly.
2022-07-22 16:20:21 +01:00
Sergio Martins
53e6f6dc0e flutter: Initial boiler-plate commit
Does not have any implementation.
But we can start generating dart bindings for it.
2022-07-22 14:52:50 +01:00
Sergio Martins
0afb9ae113 Actually remove View::parentChanged() signal
Should have gone in the last commit
2022-07-22 10:22:13 +01:00
Sergio Martins
b907c67ee3 Remove View::parentChanged
It was driving too much logic.
The controllers deal with this now. Makes it easier to make
non-Qt frontends
2022-07-22 10:10:17 +01:00
Sergio Martins
fb701e8307 Move DockWidget::parentViewChanged() signal to base class
So it matches the setter, which was already in the base class
2022-07-22 09:54:18 +01:00
Sergio Martins
1097908882 Override DockWidget::setParentView() instead of relying on QEvent
So it works with non-Qt frontends too.
2022-07-22 09:36:20 +01:00
Sergio Martins
5c26aaa9cd Port some raw QObject::setParent() calls 2022-07-21 22:59:27 +01:00
Sergio Martins
d0f1f2ce77 tests: Test DockWidget::isOpen() too 2022-07-21 17:54:39 +01:00
Sergio Martins
a9d2be775b tests: Test that dock widgets are floating after being closed
Not that it means much, since they're hidden. But be consistent.
2022-07-21 17:27:37 +01:00
Sergio Martins
b7665abf68 vscode: Add a launch for tst_docks 2022-07-21 14:42:40 +01:00
Sergio Martins
d4d325a401 qtquick: Don't compare controller parents, compare view parents
Controllers will be ported away from QObject eventually
2022-07-20 18:44:34 +01:00
Sergio Martins
06534bb5d8 tests: Add assert 2022-07-20 14:56:26 +01:00
Sergio Martins
a5589dbe29 tests: Add assert
Makes it easier to debug, as it crashes sooner
2022-07-20 14:53:14 +01:00
Sergio Martins
4706d2527c Remove the *_impl indirection methods from Group
They are no longer virtual, so the indirection doesn't make
sense anymore
2022-07-20 14:26:49 +01:00
Sergio Martins
b5a76a4373 Fix UBSAN warning about Group_qtquick already being deleted
Its dtor was in the stack when the signal was emitted
2022-07-20 14:03:27 +01:00
Sergio Martins
36931e7c45 Allow DragController views to have access to its controller
For consistency
2022-07-20 13:12:52 +01:00
Sergio Martins
013e390428 Don't create unneeded controllers
ViewWrappers don't actually have a controller
2022-07-20 12:39:34 +01:00
Sergio Martins
91821901e3 Override Group::setParentView() instead of listening to QEvent::ParentChanged
The latter is a Qt'ism
2022-07-20 10:35:27 +01:00
Sergio Martins
6e3524f9b2 Fix another two cases of View::setParent() being called directly 2022-07-20 10:16:57 +01:00
Sergio Martins
26acf4dab4 Add Controller::setParentView()
Controllers need to know when the view changes parent. Until know
they listen to event filter's QEvent::ParentChange, which isn't portable
to non-Qt platforms. Instead, always go through the controller.
Then each controller can override setParentView(), which is virtual,
to intercept parent changes without any Qt specific events.

In a followup will inherit from setParentView() in a few controllers
2022-07-19 18:54:45 +01:00
Sergio Martins
d99b842ae1 Always instantiate a controller even if nullptr is passed
During the multisplitter tests we create dummy views without
an associated controller. Let's create the controller anyway, as
more logic is moving into them, even if just for tests.
2022-07-19 18:53:38 +01:00
Allen Winter
913c570b2b .reuse/dep5 - minor cleaning 2022-07-19 12:48:22 -04:00
Shantanu Tushar
daebe9e680 Export SideBarButton
This allows code to link to subclasses of SideBarButton.
2022-07-19 11:39:32 +01:00
Shantanu Tushar
cf7f037af4 Allow custom sidebars to access its dock widgets
This is useful in cases where a custom sidebar wants behavior that
affects multiple dock widgets it "contains".
2022-07-19 11:39:32 +01:00
Sergio Martins
84f0c45cbd qtquick: Add tabs to the customtabbar example
So the user doesn't need to add tabs manually to see them
2022-07-18 10:46:54 +01:00
Sergio Martins
ee59ad5e4b qtquick: Port customtabbar example to TabBarBase.qml
It's now fully functional and styled.
2022-07-18 10:39:53 +01:00
Sergio Martins
82ad2242dd qtquick: Don't assume in the C++ that the tab bar has a list view
Getting the tab index by QPoint is now done in QML, so it can
be overridden by the user.
2022-07-18 10:21:05 +01:00
Sergio Martins
dd1363de6c qtquick: Minor refactoring of getTabAtIndex()
Moved the listview code into a separate function, so it
can be reused soon.
2022-07-18 09:20:32 +01:00
Sergio Martins
92d4922077 qtquick: tabAt(index) now supports non-QtQuickControls TabBar
The C++ had hardcoded looking for the list view. User can now
override and write their own function to get to their custom
tabbar.
2022-07-17 23:53:40 +01:00
Sergio Martins
b8acc8614c qtquick: Split TabBar.qml into two
In general, the kddw logic that shouldn't be touched should go to
TabBarBase.qml while TabBar.qml has customizable bits.

For example, somone might not want to use the tab bar from
QtQuickControls but still inherit some logic from TabBarBase.qml
2022-07-17 22:24:51 +01:00
Sergio Martins
48bac96c71 qtquick: Add example of custom tabBar
Will do some styling in a follow up
2022-07-17 20:11:18 +01:00
Sergio Martins
9b4ac4738a qtquick: Use a Loader to load the TabBar
It now loads the qml file specified in the ViewFactory.
Which by default is the TabBar.qml we ship, but could be something
else.
2022-07-17 20:11:09 +01:00
Sergio Martins
8a2eac8bcb qtquick: Fix "current tab index changed" not being emitted
suppose tab number 5 is current and you remove tab 0. The current
dock widget didn't change but its index is now 4.
2022-07-17 20:11:09 +01:00
Sergio Martins
de40629094 Remove duplicate signal "currentDockWidgetChanged"
Because they were not equivalent, one was emitted in situations
where the other wasn't. Use a single signal to avoid that.
2022-07-17 19:30:28 +01:00
Sergio Martins
3cfc4c484f tests: test that Group::currentIndex is correct 2022-07-17 18:52:18 +01:00
Sergio Martins
a900f73f7b qtquick: Factor out TabBar usage into TabBar.qml
So the user can customize it soon.
2022-07-17 14:27:19 +01:00
Sergio Martins
72ac856fa7 Allow to use TitleBar with non-KDDW widgets
For example, on EGLFS, the user might want some dialogs with similar
decorations. In the future we can make it draggable as well.
2022-07-16 23:51:39 +01:00
Allen Winter
18253c467c Merge branch 'master' into 2.0 2022-07-14 15:30:38 -04:00
Allen Winter
71c221981e Merge branch '1.6' 2022-07-14 15:30:24 -04:00
Allen Winter
579cd3a201 python/examples[-qt6] - minor pylint fixes 2022-07-14 15:29:51 -04:00
Allen Winter
fae03328f6 codespelling fixes 2022-07-13 09:12:36 -04:00
Allen Winter
a113a428e7 README.md, docs_devel - markdown linting 2022-07-13 09:08:50 -04:00
Allen Winter
d4e020eb4a reuse compliance 2022-07-13 08:50:25 -04:00
Allen Winter
53c65c6129 Merge branch 'master' into 2.0 2022-07-13 08:42:44 -04:00
Allen Winter
b60e3ef4c9 Merge branch '1.6' 2022-07-13 08:41:26 -04:00
Allen Winter
3764feaf89 Minimum Qt6 supported version 6.3.0 2022-07-13 08:40:59 -04:00
Allen Winter
f1959e5e16 Revert "CMakeLists.txt - set QT_MAJOR_VERSION for ECM"
This reverts commit 084947612b.
2022-07-13 08:37:38 -04:00
Allen Winter
084947612b CMakeLists.txt - set QT_MAJOR_VERSION for ECM 2022-07-13 06:19:28 -04:00
Sergio Martins
7f71efd5f8 Fix build on older gcc
Error was:
    undefined reference to `KDDockWidgets::Views::View_qtwidgets<QTabBar>::childViewsFor(QWidget const*)'
    (Repeated for QLineEdit and others)
2022-07-13 07:19:37 +01:00
Sergio Martins
fc04dc77c4 Install EventFilterInterface.h too
DockWidgetRegistry.h depends on it. Copy it to private/ instead, don't want people
do use it directly

Fixes issue #302
2022-07-13 07:10:45 +01:00
Sergio Martins
c960673de4 Fix build of standalone applications
add_definitions only had an effect when build kddw itself, not
when applications were using it. Use target_compile_definitions
instead.
2022-07-13 06:59:18 +01:00
Sergio Martins
7d08925ea2 Add missing license to View_qt.cpp 2022-07-12 23:02:23 +01:00
Sergio Martins
688139cd38 Merge branch 'master' into 2.0 2022-07-12 22:48:09 +01:00
Allen Winter
ab40c02b56 Merge branch '1.6' 2022-07-12 16:03:53 -04:00
Allen Winter
710f71e7f0 CMakeLists.txt - fix LIB_NAME for ECMGeneratePriFile for Qt6 2022-07-12 16:03:17 -04:00
Allen Winter
02847c74bd Merge branch '1.6' 2022-07-12 12:54:25 -04:00
Allen Winter
4e6b49f876 CMakeLists.txt - ECMGeneratePriFiles supports Qt6 now 2022-07-12 12:53:50 -04:00
Allen Winter
d12def7baa Merge branch '1.6' 2022-07-12 12:11:04 -04:00
Allen Winter
d28dc745bc buildsystem - InstallLocation.cmake -> KDInstallLocation.cmake 2022-07-12 12:09:55 -04:00
Allen Winter
ad8e14ceff .reuse/dep5 - full project reuse licensing 2022-07-12 12:09:39 -04:00
Allen Winter
f9debe5f09 .pre-commit-config.yaml - add reuse lint checking 2022-07-12 12:08:45 -04:00
Allen Winter
ed52e6a955 Merge branch '1.6' 2022-07-12 11:13:35 -04:00
Allen Winter
b52b1335a6 Markdownlint the project 2022-07-12 11:12:33 -04:00
Sergio Martins
eaa474e76f Merge branch '1.6' 2022-07-12 15:31:36 +01:00
Sergio Martins
fedce40883 Workaround for EGLFS not supporting per window mouse cursor shape
When hovering over the floating window edges our mouse cursor
changes to resize shape, but when leaving and entering the main window
the mouse cursor wasn't unset.

Workaround by using a global event filter and detecting the leave.

Not using QEvent::Leave as we still allow for some margin outside
the floating window to count as a resize cursor
2022-07-12 15:29:43 +01:00
Sergio Martins
5894fd54f5 WidgetResizeHandler: Remove no-op code
We already bail out if o != mTarget a few lines above
2022-07-12 14:09:16 +01:00
Sergio Martins
d788cde263 minor: Improve readability
Mouse cursor setting is directly related to it being global or local
event filter.
2022-07-12 12:50:31 +01:00
Sergio Martins
1051e859f4 minor: Separate "toplevelness" with filter being local/global
It's too separate concepts
2022-07-12 12:22:39 +01:00
Sergio Martins
2fa9c06f9a minor: Pass a dedicated enum instead of bool to WidgetResizeHandler ctor
bool is opaque and needs a comment, the enum is expressive just by itself.
2022-07-12 11:49:58 +01:00
Sergio Martins
d8e0be874b Merge branch 'master' into 2.0
Merged with "-s ours", as master only contained clang-format changes
already present in 2.0.
2022-07-12 11:35:01 +01:00
Sergio Martins
296de10571 Merge branch '1.6' 2022-07-12 11:31:14 +01:00
Sergio Martins
4691f9bfa5 Ran clang-format over the codebase 2022-07-12 11:28:05 +01:00
Sergio Martins
9ae0ab294c Windows: Fix build 2022-07-11 15:06:29 -07:00
Sergio Martins
760fc8d0fb Fix build of dummy frontend with Qt5 2022-07-11 13:52:11 -07:00
Sergio Martins
62020a3ff9 qtquick|example: Allow users to test floating windows with native titlebar 2022-07-11 21:43:16 +01:00
Sergio Martins
e7c51aabd3 Merge branch 'master' into 2.0 2022-07-11 21:15:34 +01:00
Sergio Martins
e83996b402 Merge branch '1.6' 2022-07-11 21:15:18 +01:00
Sergio Martins
c7dd7d954f pre-commit: Don't clang-format json files
Not until I find out how to make vscode use clang-format for
json. It seems to be using its own formatter.
2022-07-11 21:14:15 +01:00
Sergio Martins
64a4ad5029 Fix build when dummy platform is disabled 2022-07-11 19:31:26 +01:00
Sergio Martins
7e051d5e71 Merge branch 'master' into 2.0 2022-07-11 19:24:58 +01:00
Sergio Martins
0d82880ea7 Merge branch '1.6' 2022-07-11 19:24:43 +01:00
Sergio Martins
0f66fe853d pre-commit: Allow for multi-document yaml files
Which is valid yaml.
In case we want to make settings for json formatting in .clang-format.
2022-07-11 19:23:58 +01:00
Sergio Martins
fe18f994ac Allow dummy to be built against Qt5 too 2022-07-11 19:18:42 +01:00
Allen Winter
025c49c583 buildsystem - sync with cmake ECM and KDAB upstream 2022-07-11 12:27:24 -04:00
Sergio Martins
a5e7b94da1 dummy: Don't look for QtWidgets, QtGui is enough
We still depend on QtGui for QMouseEvent, that needs to be
abstracted out
2022-07-11 17:22:39 +01:00
Sergio Martins
77e19fa5bd Revert "cmake: Remove KDDockWidgets_QT6 from dummy preset"
This reverts commit 2666ed3f5e.

It's still needed, didn't notice as it would need a clean build
to repro the failure.
2022-07-11 17:19:45 +01:00
Sergio Martins
8ad64e5e6f Fix dummy frontend build without QtWidgets
Next step is removing QtGui depenency
2022-07-11 17:14:05 +01:00
Sergio Martins
8b3a17d629 cmake: Treat dummy frontend like any other
Gets enabled by cmake presets now
2022-07-11 15:55:52 +01:00
Sergio Martins
2666ed3f5e cmake: Remove KDDockWidgets_QT6 from dummy preset
It doesn't need Qt conceptually.
2022-07-11 15:12:11 +01:00
Sergio Martins
68e9f4bcea dummy: Ifdef the test functions with developer mode
Fixes release build
2022-07-11 15:08:06 +01:00
Sergio Martins
ecb2c4ff47 Remove QtWidgets from ViewFactory_dummy 2022-07-11 14:54:50 +01:00
Sergio Martins
37688e1874 cmake: Allow to build only dummy frontend
The goal will be to make sure that the backend builds without Qt.
For now, dummy still links to Qt, but we're working on it.
2022-07-11 14:23:03 +01:00
Sergio Martins
adcde3a65c tests: Add tst_dummyplatform
Its only purpose is to instantiate some classes so we're sure
they implement all needed pure virtuals

The dummy platform is just used for copy-pasting into a new
platform, so let's cover as much boiler-plate as possible
2022-07-11 13:45:48 +01:00
Allen Winter
1f7c1e4188 Merge branch 'master' into 2.0 2022-07-11 08:38:22 -04:00
Allen Winter
35c9ccdd6a Merge branch '1.6' 2022-07-11 08:36:52 -04:00
Allen Winter
518724132b fix a few missed pylint issues 2022-07-11 08:36:12 -04:00
Sergio Martins
b784780428 Add Dummy enumerator to FrontendTypes
so we can test that it reimplements all pure virtual methods.
We get a compiler-error now if any is missing.

Added the missing pure virtual methods too.
2022-07-11 11:54:38 +01:00
Sergio Martins
6ebb680c92 Re-ran clang-format 14 over the source
Fixes some differences with clang 13
2022-07-11 11:40:38 +01:00
Sergio Martins
ceab323916 Move qobjectAsView() and qobjectAsWindow from Platform.h to Platform_qt.h
As it's Qt specific
2022-07-10 23:04:37 +01:00
Sergio Martins
92b49f78a9 View CTOR no longer receives "thisQObject" via argument
It's unused, views don't need to be QObject based anymore
2022-07-10 22:44:54 +01:00
Sergio Martins
8e7e68eddc Rename View_qt::asObject() to View_qt::asQObject()
Which can be done now since View::asQObject() is gone
2022-07-10 22:31:47 +01:00
Sergio Martins
1c21555767 Finally remove View::asQObject()
It's not required anymore.
2022-07-10 22:29:31 +01:00
Sergio Martins
2f6d618048 Remove View::asQObject() occurrances from Platform_qt 2022-07-10 22:12:54 +01:00
Sergio Martins
f9b806ede5 Fix memory leak 2022-07-10 22:08:08 +01:00
Sergio Martins
8894572174 Remove one usage of asQObject from WidgetResizeHandler
It's being deleted manually, so no need to pass parent.
View::asQObject() will be removed soon
2022-07-10 21:55:13 +01:00
Sergio Martins
2c924a3a82 Remove some QPointer usages and include cleanup 2022-07-10 18:42:28 +01:00
Sergio Martins
640ef58553 Allow to pass View* to qDebug 2022-07-10 18:36:35 +01:00
Sergio Martins
897e0debca Replace draggableForQObject with draggableForView 2022-07-10 17:58:27 +01:00
Sergio Martins
233736a20b Replace QPointer with a ViewGuard 2022-07-09 17:07:23 +01:00
Allen Winter
e3c08593b9 src/qtcommon/Platform_qt.h - QT_NAMESPACE 2022-07-09 12:05:54 -04:00
Allen Winter
f6315ba4c0 src/EventFilterInterface.h - QT_NAMESPACE 2022-07-09 11:51:31 -04:00
Allen Winter
1bb3e5de37 CMakeLists.txt - fix a typo that causing --warn-uninitialize 2022-07-09 11:42:47 -04:00
Allen Winter
54a29b5cae Merge branch 'master' into 2.0 2022-07-09 11:09:35 -04:00
Sergio Martins
800d97c352 Fix 2 clazy warnings 2022-07-09 14:38:01 +01:00
Allen Winter
2f9f2c9ba6 Merge branch '1.6' 2022-07-09 09:17:19 -04:00
Allen Winter
ba7afe20b0 fix misspelling 2022-07-09 09:16:59 -04:00
Allen Winter
146338c9f4 Merge branch '1.6' 2022-07-09 09:14:53 -04:00
Allen Winter
0b5b06dc5a .gitignore - ignore python/examples-qt6/rc_assets.py 2022-07-09 09:12:17 -04:00
Allen Winter
460b898bea cmake-lint, cmake-format CMake files 2022-07-09 09:11:45 -04:00
Allen Winter
b3e398c530 Merge branch '1.6' 2022-07-08 17:35:24 -04:00
Allen Winter
6e5cfd70d1 pylint and autopep8 all python files 2022-07-08 17:34:42 -04:00
Allen Winter
4afc6b62b2 .pre-commit-config.yaml - add pylint,autopep8,cmake-lint,cmake-format 2022-07-08 17:33:12 -04:00
Sergio Martins
0785408a5c Add fwd header for DropAreaWithCentralFrame_p.h 2022-07-08 14:09:57 +01:00
Sergio Martins
2c5df301d8 Bump clang-format to 14.0 2022-07-08 06:56:59 +01:00
Sergio Martins
a0aef05b2d Merge branch '1.6' 2022-07-08 06:56:37 +01:00
Sergio Martins
3364d8ba76 Add .pre-commit-config.yaml
This one is simpler than the one in 2.0 branch, does not include
cmake formatting.
2022-07-08 06:55:59 +01:00
Sergio Martins
b5d1b6d02f vscode: Copy the compile_commands.json from build to source dir
No longer needed to symlink it to make clangd work
2022-07-08 06:53:59 +01:00
Sergio Martins
d958e1cc70 vscode: Copy the compile_commands.json from build to source dir
No longer needed to symlink it to make clangd work
2022-07-08 06:47:41 +01:00
Sergio Martins
9a8539fa42 qtquick: Add support for "Always show tabs" option
Shows the tab even if the group only has 1 dock widget
2022-07-07 18:05:33 +01:00
Sergio Martins
5386d44fdb qtquick: Move the "tabbar autohide" property to TabBar
It's a better location than in Stack
2022-07-07 14:36:48 +01:00
Sergio Martins
019692fd2f Store the "tab auto hide" state in the controller, not the view
Added a signal for the QtQuick view too
2022-07-07 13:52:03 +01:00
Sergio Martins
448313b1e3 Rename Group::m_tabWidget to Group::m_stack
Matches its class name now
2022-07-07 11:41:44 +01:00
Sergio Martins
b1605cc58b Rename Group::tabWidget() to Group::stack()
Matches its class name now
2022-07-07 11:37:47 +01:00
Sergio Martins
8383b227aa qtquick|examples: Add an option to hide title bar 2022-07-07 11:30:34 +01:00
Sergio Martins
cd41697ee6 Added Config::startDragDistance()
Allows the user to change the drag threshold without having
to inherit from Platform
2022-07-07 11:11:02 +01:00
Sergio Martins
4e99b44823 Fix some English typos in comments 2022-07-07 11:04:08 +01:00
Sergio Martins
54802ed856 Remove the last Qt event filter from the backend
Ported to our own event filter
2022-07-06 23:08:21 +01:00
Allen Winter
ddf6847d4e .krazy - fix comment 2022-07-06 09:10:04 -04:00
Sergio Martins
572b62aa9a Port DragController/Wayland code from Qt event filter
Uses our own event filter abstraction now
2022-07-05 23:22:28 +01:00
Sergio Martins
b74ca53ac8 Fix potential crash
It's a 2.0 bug on wayland though, but at least bail early.
2022-07-05 23:04:19 +01:00
Sergio Martins
6f177bc2df Assert that dock widget passed to MainWindow::addDockWidget is valid 2022-07-05 13:48:47 +01:00
Sergio Martins
74e9cc94e6 Also send DnD events through the event filter interface 2022-07-04 23:37:22 +01:00
Sergio Martins
8edf8737ce Port FallbackMouseGrabber to our own event filter abstraction
No longer uses Qt's event filter directly
2022-07-04 22:33:40 +01:00
Sergio Martins
b6460c11f7 Add EventFilterInterface::onMouseEvent()
Some event consumers don't want to overload N methods and just
overload one instead
2022-07-04 22:06:30 +01:00
Allen Winter
d75e691795 appveyor.yml - for Qt6 builds use Qt6.3 2022-07-04 09:20:53 -04:00
Sergio Martins
b68e348ff3 Add a .pre-commit-config.yaml file 2022-07-04 11:22:53 +01:00
Sergio Martins
54ad9ec2f2 cmake: format with cmake-format 2022-07-04 11:20:19 +01:00
Sergio Martins
9283a55364 Fix Platform only sending mouse press event
Was ignoring other mouse event types
2022-07-03 22:26:15 +01:00
Sergio Martins
35c1517709 Handle double click event in EventFilterInterface too 2022-07-03 22:21:57 +01:00
Sergio Martins
7b9bde123b Use ViewGuard instead of QPointer 2022-07-03 22:12:32 +01:00
Sergio Martins
7b780bc7e9 Add Windows to DisplayType enumerator too 2022-07-03 21:49:18 +01:00
Sergio Martins
84da42c262 Add Platform_qt::isLeftMouseButtonPressed() 2022-07-03 21:44:42 +01:00
Sergio Martins
1bcd425849 Add Platform::displayType() 2022-07-03 21:36:32 +01:00
Sergio Martins
aafa9526f6 Add Platform::organizationName()
So we don't use QCoreApplication::organizationName() directly
2022-07-03 20:56:48 +01:00
Sergio Martins
16565fcd46 Add Platform::setMouseCursor()
So we don't depend directly on qGuiApp
2022-07-03 20:04:53 +01:00
Sergio Martins
f288d953fc Add Platform::applicationName()
so controllers don't access qGuiApp directly
2022-07-03 19:55:26 +01:00
Sergio Martins
f1fb3f1eac Remove unneeded event filter from DockWidget.cpp
It has been ported already
2022-07-03 19:47:26 +01:00
Sergio Martins
70da9cc638 appveyor: Trying to fix the QtQuick tests
Error was: Failed to create OpenGL context for format QSurfaceFormat.
Reproduced in my docker and setting this env var fixed it.
2022-07-03 19:44:03 +01:00
Sergio Martins
c63290e6d3 Port WidgetResizeHandler away from Qt event filter 2022-07-02 21:27:11 +01:00
Sergio Martins
57c311f850 Fix some typos in comment 2022-07-02 21:26:02 +01:00
Sergio Martins
0963967939 Add mouse move and release events to EventFilterInterface 2022-07-02 20:15:13 +01:00
Sergio Martins
7d21516f6d Add a m_thisWeakPtr member to Views
Allows to promote back to shared pointer
2022-07-02 20:12:33 +01:00
Sergio Martins
ba71ad7407 View_qt: Deliver events to any subscribed event filters
Next we'll por some Qt event filters to View's event filter abstraction
2022-07-02 13:43:38 +01:00
Sergio Martins
8af8c603c1 Allow to install event filters on view too
So we can port away from Qt event filters.

In a followup will deliver events, one commit per type or so.
Not all events will be filtered, only the ones used by us
2022-07-02 13:31:16 +01:00
Sergio Martins
d461c41d8b Fix release build 2022-07-02 12:54:55 +01:00
Sergio Martins
edb2538220 Port DockRegistry away from Qt event filters
Uses our filter abstraction now
2022-07-02 12:50:52 +01:00
Sergio Martins
5639b5632a tests: Construct QCoreApplication earlier
The global event filter wasn't being set as it didn't have
a qGuiApp at that point
2022-07-02 12:48:16 +01:00
Sergio Martins
c72fdf3586 Add EventFilterInterface and port DockRegistry to it
Some classes wont have any Qt in it, so they need another way
to install global event filters. Added API to Platform.h for this
purpose. Implemented as regular event filter in Platform_qt.
2022-07-01 15:28:15 +01:00
Sergio Martins
a690477b73 Move isProcessingAppQuitEvent from DockRegistry to Platform
As different platforms will do this differently
2022-07-01 11:31:40 +01:00
Waqar Ahmed
3638622c48 Fix unity build 2022-06-30 13:53:40 +05:00
Waqar Ahmed
7fc7fba697 Fix static build 2022-06-30 13:16:20 +05:00
Sergio Martins
e7a4b3ecdd Windows: Require VS 2019 as a minimum
There's build failures in KDBindings with earlier versions, among
other build problems.
2022-06-29 15:16:04 +01:00
Sergio Martins
5977ffcc1c appveyor: Run ctest with -V
So I can see why tests are failing
2022-06-29 14:56:55 +01:00
Sergio Martins
16f6a0f35c Trying to fix Mingw build
FloatingWindow.cpp:42: error: "NOMINMAX" redefined [-Werror]
2022-06-29 14:50:21 +01:00
Sergio Martins
3845f8cfae Trying to fix msvc 2017 build 2022-06-29 14:48:58 +01:00
Sergio Martins
9546e55cb0 Trying to fix msvc 2017 build 2022-06-29 14:46:41 +01:00
Sergio Martins
5407e23d31 qtquick: Fix leaks at test exit 2022-06-29 14:21:01 +01:00
Sergio Martins
99240a2f4e vscode: Add launch for tst_floatingwindow 2022-06-29 14:18:03 +01:00
Sergio Martins
d7f677c8fc Remove unused ClassicIndicatorsOverlay_qtwidgets file 2022-06-29 13:59:36 +01:00
Sergio Martins
1d0a304d2b Fix a bunch of warnings in tst_multisplitter
The handler wasn't installed so they weren't fatal.
2022-06-29 13:33:40 +01:00
Sergio Martins
bf6e8886b1 Don't build TestHelper* in non-dev mode
They're just for the tests.
2022-06-29 12:37:40 +01:00
Sergio Martins
cadd94c233 Fix drop indicator overlay leak 2022-06-29 12:31:16 +01:00
Sergio Martins
a99c3e1b70 Fix potential crash found by the tests
Item::checkSanity() can be called via deleteLater when we don't
have a platform anymore
2022-06-29 12:31:16 +01:00
Sergio Martins
214e7d2013 qtquick: Fix pure-virtual method call 2022-06-29 10:11:30 +01:00
Sergio Martins
219ad5be01 Merge branch '2.0' of github.com:KDAB/KDDockWidgets into 2.0 2022-06-29 10:00:59 +01:00
Sergio Martins
199ad09185 Fix shadowing warning 2022-06-29 10:53:46 +01:00
Sergio Martins
e60d535242 vscode: Add a msvc launch for the qtquick example 2022-06-29 10:00:26 +01:00
Sergio Martins
f3532e6ea0 Re-add windowForHandle to fix the windows build 2022-06-29 09:36:19 +01:00
Sergio Martins
cba3f77906 Revert "Remove Window::setProperty/property"
This reverts commit ff9a7fba69.

It's still being used by windows code paths
2022-06-29 09:35:12 +01:00
Sergio Martins
91e2df3ead Fix QtTest being included without a dev-mode guard 2022-06-29 10:19:57 +01:00
Sergio Martins
fd4431246c Remove the "groupViewInMDIResize" property from DockRegistry
Moved it into the QmlHelpers, as it's QtQuick specific.
Allows to remove a asQObject() call.
2022-06-28 21:40:12 +01:00
Sergio Martins
2f12cd8f3d Replace a QPointer with a ViewGuard
Removes another usage of asQObject
2022-06-28 20:47:57 +01:00
Sergio Martins
3ef91d8b7f Minor rename: m_draggableWidget -> m_draggableView 2022-06-28 20:36:55 +01:00
Sergio Martins
558eef792f Don't connect to QObject::destroyed directly
Connect to View::beingDestroyed instead.
Decouples more from QObject and allows to remove some asQbject()
calls
2022-06-28 20:33:02 +01:00
Sergio Martins
269e062609 Don't connect to QObject::objectNameChanged
Connect to the view's signal instead.
Decouples a bit more from QObject
2022-06-28 20:22:58 +01:00
Sergio Martins
2eb72114d7 Share View::setObjectName() implementation between qtwidgets/qtquick 2022-06-28 20:12:07 +01:00
Sergio Martins
a0d5c25c29 Remove 2 unneeded usages of QObject stuff 2022-06-28 19:23:43 +01:00
Sergio Martins
934ba440b3 Rename itemForWidget to itemForView
itemForObject is removed as it's not used
2022-06-28 18:56:13 +01:00
Sergio Martins
aff9806ab1 Port away from using event filter in DockWidget.cpp
Platform now abstract the emittion of window activation/deactivation
2022-06-28 18:36:10 +01:00
Sergio Martins
0cd515679f Don't handle ParentChange event directly, use the signal instead
This removes some duplicated code and decouples from QObject a bit
more
2022-06-28 17:24:03 +01:00
Sergio Martins
5a657785d7 Remove event filter from Item
In preparation for non-QObject views
2022-06-28 13:43:43 +01:00
Sergio Martins
39274d3e6b Fix crash 2022-06-28 13:35:31 +01:00
Sergio Martins
d92691bc5c Add a View::parentChanged() signal
Will help removing event filters from non-Qt code
2022-06-28 13:19:23 +01:00
Sergio Martins
83a2620015 Remove View_qtwidgets::asQWidget 2022-06-27 23:54:18 +01:00
Sergio Martins
3dd455bfb7 Port some code away from View::asQObject()
Use View_qt::asObject() instead
2022-06-27 23:37:27 +01:00
Sergio Martins
5389bcc825 Add View_qt as a base class for View_qtwidgets and View_qtquick
So it can contain the "asObject()" method, which we're removing
from View.h
2022-06-27 22:53:42 +01:00
Sergio Martins
49ccecbadd Remove some unneeded asQObject calls 2022-06-27 22:41:37 +01:00
Sergio Martins
64619d85e9 tst_qtwidgets: Remove some usages of asQObject() 2022-06-27 22:00:49 +01:00
Sergio Martins
1e5cbed254 View: Group virtual methods together 2022-06-27 21:55:44 +01:00
Sergio Martins
0e6f38381b Rename hostWidget to hostView 2022-06-27 21:41:48 +01:00
Sergio Martins
cad7cb1c8f Remove View::parent() and Item::host()
Those deal in QObject, which is being phased out
2022-06-27 21:40:05 +01:00
Sergio Martins
696ce887a8 docs: Add documentaiton about how to create a new frontend
Will be updating it as we go.
2022-06-26 22:33:46 +01:00
Sergio Martins
0a496aca76 tests: Add more tests for Window 2022-06-26 22:27:06 +01:00
Sergio Martins
68403c866b Fix Windows build 2022-06-26 21:14:13 +01:00
Sergio Martins
5669e07252 docs++ 2022-06-26 20:58:29 +01:00
Sergio Martins
07524ad00c Replace Qt::WindowState with KDDockWidget::WindowState 2022-06-26 20:45:28 +01:00
Sergio Martins
2f261b6b70 Add KDDockWidgets_p.h to hold private enums 2022-06-26 20:14:41 +01:00
Sergio Martins
ff9a7fba69 Remove Window::setProperty/property
Mostly unused and much easier to use a member variable.
2022-06-26 20:08:21 +01:00
Sergio Martins
d43c68bef4 Add a test for Window::handle 2022-06-26 20:01:56 +01:00
Sergio Martins
5dbf3590f8 Minor API cleanups 2022-06-26 20:00:07 +01:00
Sergio Martins
6ff0a5d759 Window documentation and make some functions not virtual 2022-06-26 19:42:06 +01:00
Sergio Martins
2ee9debb66 dummy: Add needed virtual implementations to Window_dummy.cpp 2022-06-26 19:14:16 +01:00
Sergio Martins
9aab0af1dc qtquick: Fix View::setVisible(false) always showing the window
Adds some tests for Window too.
2022-06-26 01:23:26 +01:00
Sergio Martins
820161ba29 tests: Added Platform::createDefaultViewFactory test 2022-06-26 00:37:10 +01:00
Sergio Martins
0024ed54c8 tests: Add tst_platform 2022-06-25 23:34:30 +01:00
Sergio Martins
f08efcdab7 Add missing pure virtual implementation to dummy frontend 2022-06-25 23:07:36 +01:00
Sergio Martins
3b8e3b6c6b Add a dummy frontend
Goal will be that people can copy it to start a new frontend
2022-06-25 20:34:49 +01:00
Sergio Martins
c1f6d64ac3 Remove a TODO and add some docs 2022-06-25 19:00:12 +01:00
Sergio Martins
a74d2aae7a tests: Add initial test for Window 2022-06-25 18:52:36 +01:00
Sergio Martins
113cdbafe9 Trying to stabilize a test 2022-06-25 18:05:20 +01:00
Sergio Martins
c9fede2aab Remove the FloatingWindow window state overrides
Nothing is inheriting from controller now. Those methods are already
virtual in view, so just remove them from the controller
2022-06-25 17:41:03 +01:00
Sergio Martins
f640d8852b Fix maximize button not being updated
Moved logic into controller
2022-06-25 16:29:41 +01:00
Sergio Martins
8f10d86cad Fix minimize button not being updated 2022-06-25 16:14:36 +01:00
Sergio Martins
02ef55f9f1 Fix auto-hide button not being updated
Moved logic from view into controller.
2022-06-25 13:50:17 +01:00
Sergio Martins
6cd6408bef cmake: Install v1.x compatible headers for QtWidgets
It's nicer to include DockWidget.h than views/DockWidget_qtwidget.h.
QtQuick won't need pretty headers as the recommended way is to use from QML
directly, not C++
2022-06-25 13:13:00 +01:00
Sergio Martins
7ec71d65be Merge branch 'master' into 2.0 2022-06-25 12:54:32 +01:00
Sergio Martins
8ad2ece8b9 Merge branch '1.6' 2022-06-25 12:54:20 +01:00
Sergio Martins
7cc63926d4 Merge branch '1.6' into 2.0 2022-06-25 12:53:44 +01:00
Sergio Martins
6184b06d12 qtquick: Silence benign warning 2022-06-25 12:30:44 +01:00
Sergio Martins
559a195669 Rename layoutWidget to layout
As already done with the class names
2022-06-25 11:47:55 +01:00
Sergio Martins
95d711ece7 qtquick: Allow to use the MDI feature from QML
No need to use low level C++ API anymore
2022-06-25 11:45:01 +01:00
Sergio Martins
74a1520382 examples: Use less controllers 2022-06-25 11:13:21 +01:00
Sergio Martins
31ba0ec52d mdi: Don't expose the controllers directly in the API 2022-06-24 22:42:31 +01:00
Sergio Martins
10f70c8dd6 Move the QString based API from MainWindow_qtquick to MainWindowViewInterface
Makes sense for other frontends too
2022-06-24 22:26:02 +01:00
Sergio Martins
452a89bfa2 Remove some controllers from the QML interface 2022-06-24 21:21:45 +01:00
Sérgio Martins
5b7630b318 Fix namespaced build 2022-06-24 20:36:01 +01:00
Sergio Martins
82b3aba854 Remove ViewWrapper*h from public API 2022-06-24 17:20:09 +01:00
Sergio Martins
0a9506cd21 Probably fix Qt namespaced build 2022-06-24 17:00:01 +01:00
Sergio Martins
10c918b93c Use View instead of ViewWrapper in the api
The latter will be an implementation detail soon
2022-06-24 00:10:50 +01:00
Sergio Martins
2ac996218f Minor typo fix 2022-06-23 22:13:10 +01:00
Sergio Martins
429bcfc4e0 Rename Frame.qml to Group.qml 2022-06-23 16:03:46 +01:00
Sergio Martins
ae5cf1d723 More renaming of "frame" to "group" 2022-06-23 16:01:43 +01:00
Waqar Ahmed
4ba58ac1be Add DockWidget::aboutToDelete
Relying on QObject::destroyed might not be a good idea, fixes the
following ASAN issue:

```
SideBar.cpp:80:22: runtime error: downcast of address 0x6040005c8b90
which does not point to an object of type 'DockWidget'
0x6040005c8b90: note: object is of type 'QObject'
 00 00 00 00  88 64 e7 43 3f 7f 00 00  a0 ff 0e 00 80 60 00 00
70 81 0c 00 c0 60 00 00  01 be be be
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for 'QObject'
```
2022-06-22 19:16:56 +05:00
Sergio Martins
cc918c5195 More "frame" to "group" renaming 2022-06-22 13:42:22 +01:00
Sergio Martins
bc767cefac Rename asFrameController to asGroupController 2022-06-21 17:32:38 +01:00
Sergio Martins
0aec6dfdb1 Rename more frame variables to group 2022-06-21 17:31:28 +01:00
Sergio Martins
9469273c7a Rename "frame" variables to "group" 2022-06-21 17:12:11 +01:00
Sergio Martins
fe7a8d450c Rename Frame class to Group 2022-06-21 16:34:20 +01:00
Sergio Martins
e9eee0e69e wayland: Fix StateDragging::handleMouseMove() being called
For wayland we override StateDragging and deal in QDrag instead
but some spurious mouse event got in and were handled in the base
class.

Fixes a crash when receiving mouse move during a drag
2022-06-21 11:17:31 +01:00
Sergio Martins
d2339d1b12 wayland: Fix QEvent::DragEnter being accepted by user code
Otherwise we stop receiving drag moves.
If we're dragging a window we're absolutely sure that user code
won't be interested.

As reproduced by using graphic views.
2022-06-21 11:10:11 +01:00
Sergio Martins
b45644af74 Rename FrameViewInterface class to GroupViewInterface 2022-06-21 09:01:44 +01:00
Sergio Martins
73d627554a Remove Frame.h/cpp to Group.h/cpp
It's a better name.
Files only for now. Contents will come in a followup.
2022-06-21 08:51:52 +01:00
Sergio Martins
e980dc9bb1 Add some trace debugging to DragController 2022-06-20 14:27:28 +01:00
Sergio Martins
b9773cd262 qtquick: Move some Q_INVOKABLES to the views
As only the views are exposed
2022-06-19 23:27:21 +01:00
Allen Winter
47ad860921 Merge branch '1.6' 2022-06-19 16:02:49 -04:00
Allen Winter
a2f0e2e689 codespell fix 2022-06-19 16:02:29 -04:00
Allen Winter
1c6c7e767f Merge branch '1.6' 2022-06-19 15:39:46 -04:00
Allen Winter
1b1d963d3e .krazy - exclude spelling checking -- use codespell instead 2022-06-19 15:39:24 -04:00
Sergio Martins
da70b1baed qtquick: Don't overload Q_INVOKABLES
Apparently QML doesn't support it very well.

Fixes #291
2022-06-19 20:26:19 +01:00
Sergio Martins
2dff66fb97 README: Move the supported toolchain section into the build section
So it's easier for users to find that they need a C++17 compiler.
Won't add exact compiler versions as I have no idea which gcc and which
clang version introduced such support.

Fixes #296
2022-06-19 17:59:09 +01:00
Sergio Martins
a44886279b README: Move building section to before the example
Since you need to build kddw before building the examples.

As a drive-by, added a mention to X11Extras.
Won't mention any package names as that's distro dependent and the amount
of distros is open ended. Would rather remove our current mentions of package names
to make it consistent.

Fixes #297
2022-06-19 17:15:17 +01:00
Sergio Martins
9072555814 ChangeLog: Explain what 2.0 is about 2022-06-19 15:22:54 +01:00
Sergio Martins
b599554ba7 Update ChangeLog with the one from master 2022-06-19 15:14:17 +01:00
Sergio Martins
2b62b1965a Merge branch 'master' into 2.0
empty merge with "-s ours" just to reconcile. All changes from
master have been cherry-picked manually since the code has changed
too much todo a normal merge
2022-06-19 14:43:22 +01:00
Sergio Martins
ea55c74768 Added MainWindow::internalLayout()
Allows the application to add more widgets next to the drop area.

(cherry-picked from commit 74dcbd994a)
2022-06-19 14:40:59 +01:00
Sergio Martins
729624ab04 EGLFS: Don't raise the main window when docking
EGLFS doesn't honour that the floating windows should be
on top and will make the floating windows go behind.

It's also unneeded to raise it on eglfs, since it's fullscreen.

(cherry-picked from commit d06c6e8f11)
2022-06-19 14:37:52 +01:00
Sergio Martins
4fa43c7ba1 Make numSideBySide_recursive() ignore invisible items
We have invisible items that just remember the position of
other items.

(cherry-picked from commit 9f96eff663)
2022-06-19 14:37:06 +01:00
Sergio Martins
1f95f67a15 Add DropLocation_Horizontal and DropLocation_Vertical
So we can quickly use a bitwise and to see if an arbitrary
drop location is vertical or horizontal.

(cherry-picked from commit 3260c65a6c)
2022-06-19 14:27:32 +01:00
Sergio Martins
73fd21939f Allow segmented indicators to disable individual segments
The application developer might now want to show some segments.
Now he can use Config::setDropIndicatorAllowedFunc(), which previously
only worked for classic indicators

(cherry-picked from commit 2c8ceb67ef)
2022-06-19 14:23:35 +01:00
Sergio Martins
104a065aeb Pass the DropArea to setDropIndicatorAllowedFunc() too
So the lambda can have more advanced usage and inspect the
target layout before allowing or disallowing the drop.

For our use case, we want to limit max 3 dock widgets side by side,
for example.

(cherry-picked from commit 982904e2ba)
2022-06-19 14:22:12 +01:00
Sergio Martins
7b4e04703d Added MultiSplitter::numSideBySide_recursive()
(cherry-picked from commit f5622732ce)
2022-06-19 13:52:30 +01:00
Sergio Martins
a705ccfe5e Fix typo in code snippet 2022-06-19 13:48:44 +01:00
Sergio Martins
84a8fd61b4 MainWindow: Allow to avoid the immediate QWidget::create()
In case you're going to put the main window into a layout you
don't want to have it create a QWindow.

(cherry-picked from commit 4727c9c7fc)
2022-06-19 13:25:53 +01:00
Sergio Martins
724a67f2ef distro/ - update for ubuntu22.04 and fedora36
(cherry-picked from commit bf255c104f)
2022-06-19 13:21:44 +01:00
Sergio Martins
d1e29e6773 Add the possibility of setting the margin used for overlay docks
(cherry-picked from commit 9b8759c472)
2022-06-19 13:19:50 +01:00
Sergio Martins
f2ddbd2cc3 Added KDDockWidgets::InitialVisibilityOption::PreserveCurrentTab
So you can insert into a tab group without changing the current
tab, if you want.

(cherry-picked from commit 58b8633e3d)
2022-06-19 13:14:54 +01:00
Sergio Martins
8a0fa46deb Don't show middle dock indicator if frame isn't dockable
This was implemented but the logic was wrong.
Fixes central persistent showing the central indicator.

(cherry-picked from 6166e5805c)
2022-06-19 13:06:09 +01:00
Sergio Martins
28cc64be4a Remove unused/duplicated file 2022-06-19 13:04:05 +01:00
Sergio Martins
4856da3bec .pylintrc - initial pylint config file
(cherry-picked from commit b1379f0bef)
2022-06-19 13:00:49 +01:00
Sergio Martins
08518e02e0 various - fix some misspellings
(cherry-picked from commit f3da0f0547)
2022-06-19 13:00:06 +01:00
Sergio Martins
1e7f0d7c5f various - update copyright year
(cherry-picked from commit b2fc0c3eb1)
2022-06-19 12:57:51 +01:00
Sergio Martins
793661ea09 Workaround QTBUG-102430, don't move still maximized window
When dragging a maximized window we show normal, but we can
only start moving it when the window managers acknowledges the new
state. The state in QWidget isn't reliable.

(cherry-picked from commit 6e7268e42a)
2022-06-19 12:54:12 +01:00
Sergio Martins
4c177d7823 Save the last known window state from the window manager POV
Required for QTBUG-102430

(cherry-picked from commit 7e6c5b2d9f)
2022-06-19 12:52:35 +01:00
Sergio Martins
e763cb138a Add a comment regarding QTBUG-102430 2022-06-19 12:47:11 +01:00
Sergio Martins
6da693c5da Workaround FloatingWindow::windowStateChanged regarding QTBUG-102430
QWidget::windowStateChanged isn't useful as it's emitted once sync
and another async, with the same value. Only the async one is useful
as it will represent the real window manager state. Then we can do
further moves.

The QWindow one happens to be good (async), so use that one instead.

(cherry-picked from commit d4fe17a0bf)
2022-06-19 12:42:48 +01:00
Sergio Martins
d1de3a29b4 CMakeLists.txt - Python bindings are not supported in Unity builds
fixes #284

(cherry-picked from commit c6ce421432)
2022-06-19 12:30:57 +01:00
Sergio Martins
940991c75e Use FloatingWindow::isMaximizedOverride() instead of isMaximized()
This is for issue #286.
Allows users to workaround buggy window managers.

(cherry-picked from commit 47f773ab7c)
2022-06-19 12:22:32 +01:00
Sergio Martins
c0d1bd3f92 tests|qtquick|Windows: Stabilize a test
The warning is benign and unrelated to anything kddw is doing

(cherry-picked from commit 1f638d2c7a)
2022-06-19 12:16:46 +01:00
Sergio Martins
92192b7949 Fix position of right overlay dockwidgets when there's a toolbar on the left
(cherry-picked from commit 7b73393095)
2022-06-19 12:15:23 +01:00
Sergio Martins
9fda86a511 Linux: Fix dragging of maximized floating windows
They should restore their normal size when the drag starts

(cherry-picked from commit 1305dee081)
2022-06-19 12:13:50 +01:00
Sergio Martins
4114f00183 Added dockWidgetInserted|Removed signals to TabBarWidget
Since QTabBar doesn't have them.
Useful for custom tab bars

(cherry-picked from commit 743dbc0718)
2022-06-19 12:04:25 +01:00
Sergio Martins
848327d8b3 TitleBarWidget: Mark members as protected
So custom titlebars have more power

(cherry-picked from commit fd4588de0f)
2022-06-19 11:59:21 +01:00
Sergio Martins
44d38f9f84 Added TitleBar::tabBar()
Useful for people writing custom titlebar's with style that depends
on the current tab

(cherry-picked from commit 6ba10cfe12)
2022-06-19 11:57:26 +01:00
Sergio Martins
fe7f71d986 MDI: Fix another case of showing resize handles wrong
(cherry-picked from commit 25b04d7ed8)
2022-06-19 11:48:08 +01:00
Sergio Martins
05b7980cfe MDI: Fix case where resize cursor would be shown for frame bellow
Was already fixed a few days ago, but this is the case for nested
mdi.

(cherry-picked from commit e345e89c35)
2022-06-19 11:46:18 +01:00
Sergio Martins
e2e34fb11b examples: Remove more duplicate MyWidget.cpp/h files
share with main example instead

(cherry-picked from commit bb4cf802f5)
2022-06-19 11:35:54 +01:00
Sergio Martins
1935d3bace example: Allow to test propagation of close event in the mdi example
(cherry-picked from commit 701069617c)
2022-06-19 11:32:37 +01:00
Sergio Martins
8767159cc9 example: Remove duplicate minimal-mdi/MyWidget.cpp
It was using the cpp from the main example but the header from
minimal-mdi. Instead, share both the impl and the header

(cherry-picked from commit a8c50f1876)
2022-06-19 11:28:41 +01:00
Sergio Martins
198bd60565 example: Added --blocks-close-event
Makes dock widget #0 reject the close event, meaning it won't close.

(cherry-picked from commit 21765efbac)
2022-06-19 11:18:02 +01:00
Sergio Martins
f8b1745c68 Forward QCloseEvent to the MDI widgets too
Fixes case where docked MDI widgets were not able to block a close

(cherry-picked from commit 61cca1e5ec)
2022-06-19 00:56:42 +01:00
Sergio Martins
30f43d7579 Fix MainWindow not propagating close events to docked widgets
Nested FloatingWindows already supported it, so make it consistent.

Personal take: In a non-docking world, users can override their
main window close event and prevent a close, to save a document
or such. However, in a docking world, the main window developer
won't know which widgets are docked, so forwarding needs to happen,
as some might have documents to save.

(cherry-picked from commit 7db9938b85)
2022-06-19 00:46:49 +01:00
Sergio Martins
950914e15c Further move onCloseEvent to base class
So that it can be reused by MDI layouts too

(cherry-picked from commit 01cc915734)
2022-06-19 00:34:31 +01:00
Sergio Martins
bd4aed18c9 Refactor: Move close event logic from FloatingWindow to DropArea
So main window can use it too

(cherry-picked from commit 3454b67a45)
2022-06-19 00:32:46 +01:00
Sergio Martins
d47130f0c8 appveyor: cherry-picked changed from master
f98ce37c12
339edf1143
2022-06-19 00:25:07 +01:00
Sergio Martins
f530668711 Don't dereference potentially nullptr 2022-06-19 00:23:54 +01:00
Sergio Martins
67bb7c16cf CMakeLists.txt - find COMPONENTS to search for Qt modules
(cherry-picked from commit 8b8ef7f2b0)
2022-06-19 00:22:01 +01:00
Sergio Martins
c30a266c01 Don't try to restore to previous position if there isn't any
(cherry-picked from commit 524dff9105)
2022-06-19 00:14:33 +01:00
Sergio Martins
66b91c1de3 Make redocking floating windows with tabs possible
TitleBar::isFloating() was returning false, while it should
have returned true.

Fixed by making isFloating() simpler and dumb. isFloating() should
only say if it belongs to a floating window or not. It shouldn't
contain any logic about whether button should be visible or not.

There's already logic elsewhere that will hide the float button
in case there's nesting.

Fixes issue #96 and #44

(cherry-picked from commit 0099a19a82)
2022-06-19 00:09:21 +01:00
Sergio Martins
4c670a552e MDI: Fix resize cursor appearing for frames that had others on top
(cherry-picked from commit e6b8636e88)
2022-06-19 00:05:19 +01:00
Sergio Martins
d5e46dff31 MDI: Fixed closing dock widget in MDI would close main window
We only close the window when the window is a FloatingWindow and
it's the last frame

(cherry picked from commit 86419fd979)
2022-06-18 23:37:02 +01:00
Sergio Martins
3695595826 Merge branch '1.6' 2022-06-18 23:08:40 +01:00
Sergio Martins
303532483b vscode: filter-out some todo-tree folders, mostly 3rdparty 2022-06-18 22:24:21 +01:00
Sergio Martins
ff92af1e62 Removed some TODOs
The comment is still there in case it's interesting for someone,
but it's not something that will be worked on
2022-06-18 22:24:21 +01:00
Sergio Martins
cd1ce835d7 Add cmake presets for ci 2022-06-18 21:49:12 +01:00
Sergio Martins
49b2a10cc6 Fix QtQuick build on Windows 2022-06-18 19:13:45 +01:00
Sergio Martins
a3f7126dfe cmake: Prefix ci build dirs with "build-" 2022-06-18 19:49:08 +01:00
Sergio Martins
2faecc68c0 Don't build the "Fuzzer"
It hasn't been needed in a long time.
I'll enable it once it's needed. Build needs fixing though
2022-06-18 19:48:19 +01:00
Sergio Martins
fe75297a29 cmake: Add CI presets
The idea is to test the different code paths, that means:
  - Qt5 vs Qt6
  - dev-mode vs release

but also to test that the qtquick frontend isn't including anything
from qtwidgets and vice-versa.
2022-06-18 19:40:59 +01:00
Sergio Martins
60c6ffaabb Rename MDIArea class to MDIArea_qtwidgets
To match the filename now
2022-06-18 18:15:19 +01:00
Sergio Martins
408fe315ed Rename MDIArea.h to views/MDIArea_qtwidgets.h
As done for all other views. This one was missing
2022-06-18 17:51:19 +01:00
Sergio Martins
5ec68ef608 README: Add a note to use 1.6 branch instead 2022-06-18 13:46:17 +01:00
Sergio Martins
c7f33f589e README: Add warning that 2.0 is in active development 2022-06-18 13:44:49 +01:00
Sergio Martins
942d086905 Fix linking on Qt/macOS 2022-06-18 13:36:07 +01:00
Sergio Martins
8dbd87ae0d cmake: Only add qtquick/ to include path if it's being built
And vice-versa for qtwidgets
2022-06-18 13:32:36 +01:00
Sergio Martins
f04e813af3 Fix Platform.h not being installed 2022-06-18 13:17:58 +01:00
Sergio Martins
a0accacb5d Rename views/MainWindowMDI.h -> ../views/MainWindowMDIViewInterface.h
This one was missing
2022-06-18 13:14:18 +01:00
Sergio Martins
1b0bae7780 Don't include Window.h in DockRegistry.h
As the latter is installed while the former is not.
Window.h depends on KDBindings so would rather not require it publically.
2022-06-18 13:06:29 +01:00
Sergio Martins
f7bb0c1dbd Fix examples trying to be installed to /
Only worked when being built from within kddw.
2022-06-18 12:42:24 +01:00
Sergio Martins
4c4dcf4423 Move KDBindings usage from Platform.h to Platform_p.h.
So user doesn't need to install it
2022-06-18 12:28:54 +01:00
Sergio Martins
7017ce8396 Move KDBindings usage from View.h to View_p.h
KDBindings is implementation detail. User won't have to install
it, at this point.
2022-06-18 12:15:42 +01:00
Sergio Martins
9f1a9df621 cmake: Install view interface headers too 2022-06-18 11:48:29 +01:00
Sergio Martins
d7b57d460f cmake: Don't install Window*h and Item_p.h
They are unneeded, and expose kdbindings
2022-06-18 11:46:46 +01:00
Sergio Martins
6be5339fd3 Add d-ptr to DockRegistry, hides usage of kdbindings 2022-06-18 11:21:53 +01:00
Sergio Martins
82d933ad34 Remove unused include 2022-06-18 11:16:41 +01:00
Sergio Martins
cae9627e06 Add a d-ptr to FloatingWindow_qtwidgets
So we don't expose kdbindings in the API
2022-06-18 11:14:15 +01:00
Sergio Martins
5a6ceade6c cmake: Fix QtQuick not being found when using installed kddw 2022-06-18 10:39:50 +01:00
Sergio Martins
e2870dbe4f cmake: Fix warning about KDDockWidgets_LIBRARY_QTID not being defined 2022-06-18 10:35:19 +01:00
Sergio Martins
d5471aceb6 cmake: Install headers 2022-06-18 10:25:52 +01:00
Sergio Martins
e63a34a4a5 Rename DockRegistry_p.h -> DockRegistry.h
People use it.
2022-06-18 09:28:03 +01:00
Sergio Martins
8be6183543 Include cleanup
Removed unneeded controllers/ includes from headers
2022-06-18 09:15:30 +01:00
Sergio Martins
1ee5d21d4a examples: Remove controller usage, use views instead
Controllers is low level API
2022-06-18 08:36:09 +01:00
Sergio Martins
26ba2199cb Moved 2 more DockWidget enums to KDDockWidget.h
So users don't have to include controllers/DockWidget.h
2022-06-18 08:16:16 +01:00
Sergio Martins
08d2b6f764 Fix documentation of MyTitleBar_CSS.h
It was still refering to the old widgets
2022-06-18 07:54:05 +01:00
Sergio Martins
7ae49ee330 qtquick: Move last DockWidget Q_PROPERTY from controller to view 2022-06-18 00:34:26 +01:00
Sergio Martins
a609f2233b Move DockWidgetOption enum to KDDockWidget.h
controllers/DockWidget.h is not something users will include directly
2022-06-18 00:27:58 +01:00
Sergio Martins
d3de373995 Move "widget" Q_PROPERTY to the qtquick view 2022-06-17 21:54:30 +01:00
Sergio Martins
a5f364da03 qtquick: Fix qml accessing the frame controller
It should access the view instead, as the controller will cease to
be QObject
2022-06-17 20:12:44 +01:00
Sergio Martins
499c9412bb Don't make all DropArea views all DropArea::onResized()
Do it in the controller once, instead of repeating it
2022-06-17 20:06:51 +01:00
Sergio Martins
c48a100f73 Remove unused titleBar() method 2022-06-17 19:58:22 +01:00
Sergio Martins
7e7c9d7300 Rename the remaining view interfaces to *ViewInterface 2022-06-17 18:56:34 +01:00
Sergio Martins
0600c42775 Move common code info FrameViewInterface
So it's not duplicated between QtWidgets and QtQuick
2022-06-17 18:19:01 +01:00
Sergio Martins
4a47366ba0 Suffix our view interfaces with "*ViewInterface.h"
So we know they are a view interface. They'd have the same name
as the controller otherwise
2022-06-17 11:19:27 +01:00
Sergio Martins
a330042339 qtquick: Use enum instead of hardcoded number 2022-06-15 22:01:27 +01:00
Sergio Martins
5e2cc2cc12 Remove old fwd header 2022-06-15 21:56:18 +01:00
Sergio Martins
2a6bd9e415 Add overloads taking view interface instead of controller
People won't be using the controllers directly
2022-06-15 21:51:56 +01:00
Sergio Martins
1e3acd2a92 Remove done TODO 2022-06-15 21:18:56 +01:00
Sergio Martins
ab50f0f19b qtquick: Add the invokables to DockWidget_qtquick.h
Actually in the interface class and we mark them invokable with
Q_MOC_RUN trick
2022-06-15 21:13:27 +01:00
Sergio Martins
1283cc87dc qtwidgets: Added DockWidget_qtwidgets::widget() 2022-06-15 20:30:01 +01:00
Sergio Martins
c373354c0c qtquick: Move some properties to DockWidget view
The controller won't be a QObject soon
2022-06-15 20:25:02 +01:00
Sergio Martins
d2aba705fb qtquick: Rename guestView to guestItem in the public API 2022-06-15 20:13:42 +01:00
Sergio Martins
78815664cc Move some dock widget view code into the shared DockWidgetViewInterface 2022-06-15 20:10:20 +01:00
Sergio Martins
e754bb25c6 Pass the controller to DockWidgetViewInterface
So it can start to have an API
2022-06-15 19:56:34 +01:00
Sergio Martins
4a3d15432e Add a DockWidgetViewInterface
to share code between both QtQuick and QtWidget DockWidget views
2022-06-15 19:52:34 +01:00
Sergio Martins
921d94d731 Added MainWindow_qtwidgets::setPersistentCentralWidget()
Which is nicer for the end user as it deals in QWidget
2022-06-15 19:37:12 +01:00
Sergio Martins
01b2bbc11c Rename "persistent widget" to "persistent view" 2022-06-15 19:27:04 +01:00
Sergio Martins
a45f53f9d9 examples: Don't mention mainWindow much in the examples
Added DockRegistry::mainDockingAreas() as synonym for mainwindows().
2022-06-15 18:45:37 +01:00
Sergio Martins
3e44e0c9a9 qtquick: Add API to the MainWindow view
QtQuick can't access our controllers (as they won't be QObject),
so they need to access via the view.
2022-06-15 18:37:27 +01:00
Sergio Martins
63f0bc9e02 Move some invokables from MainWindow controller to the qtquick view
As Q_INVOKABLE is just for QtQuick.
There's still some remaining to move, but they are exposing Controllers,
so will need a different API.
2022-06-15 18:13:50 +01:00
Sergio Martins
1c9b44394e Add a comment 2022-06-15 18:01:49 +01:00
Sergio Martins
84315daa1a Move MainWindow Q_PROPERTIES to the qtquick view
qtquick and views in general won't have access to controllers much
2022-06-15 17:59:17 +01:00
Sergio Martins
337afd2919 Minor header cleanup 2022-06-15 17:16:02 +01:00
Sergio Martins
126ed773cd Make MainWindow::init() private 2022-06-15 16:55:46 +01:00
Sergio Martins
38432ccacd Make MainWindow::windowGeometry() private 2022-06-15 16:09:04 +01:00
Sergio Martins
0825a6bdc2 Move sidebars into MainWindow controller
No reason to have them duplicated between qtwidgets and qtquick
2022-06-15 15:57:50 +01:00
Sergio Martins
cd35f1ff62 MainWindow header cleanup 2022-06-15 15:29:42 +01:00
Sergio Martins
0c95550af6 Move some common view code into MainWindowViewInterface
So that it's not duplicated between QtWidgets and QtQuick
2022-06-15 12:29:14 +01:00
Sergio Martins
e1fe8054d0 Remove public MainWindow::onResized 2022-06-15 11:23:51 +01:00
Sergio Martins
29c675661f cleanup regarding DockWidget::show() 2022-06-15 05:32:54 +01:00
Sergio Martins
de917f103a Remove unneeded QtWidget ifdefs and TODO 2022-06-15 05:25:09 +01:00
Sergio Martins
95ff95e995 Remove TODO and shorten namespace 2022-06-15 05:22:41 +01:00
Sergio Martins
9fdf0c2ae1 examples: Remove unneeded header and TODO 2022-06-15 05:18:11 +01:00
Sergio Martins
3b2a395668 Fix build with Wweak-vtables
Have to move kdbindings to its own target so we can use -isystem
with it, as it doesn't support Wweak-vtables
2022-06-15 05:01:10 +01:00
Sergio Martins
fec58dd217 Add missing exports 2022-06-15 04:34:49 +01:00
Sergio Martins
148a25a452 Fix some Wweak-tables warnings 2022-06-15 04:33:35 +01:00
Sergio Martins
e6dd002ca8 qtquick: Rename MainWindowLayout to DockingArea
Since it's not an actual Window, it's just a QQuickItem. QtQuick has
proper Window items that mean an actual Window.
2022-06-15 00:27:41 +01:00
Sergio Martins
95acf7a4cb qtquick: Don't register Item, it's unneeded 2022-06-15 00:18:40 +01:00
Sergio Martins
73a5809f62 qtquick: Remove unneeded qml types registering 2022-06-15 00:17:10 +01:00
Sergio Martins
627b6a1593 qtquick: Bump qml imports to 2.0 2022-06-15 00:15:44 +01:00
Sergio Martins
755bc6ac14 cmake: Don't add src/ to include path
Fully qualify includes instead
2022-06-14 16:57:22 +01:00
Sergio Martins
dafa14536f examples: include cleanup 2022-06-13 23:39:31 +01:00
Sergio Martins
a4d337e891 Fully qualify header paths when including controllers
so this still works when private headers are installed
2022-06-13 23:24:43 +01:00
Sergio Martins
44476789c2 Add fwd headers for the controllers 2022-06-13 23:01:57 +01:00
Sergio Martins
458ae05564 Move qtquick qrc into qtquick folder/
as it's unrelated to the other frontends
2022-06-13 22:51:22 +01:00
Sergio Martins
169d2fe8e2 qtquick: Fix custom titlebar example
qrc path was wrong
2022-06-13 22:45:34 +01:00
Sergio Martins
4615936f9e Fix minor typo 2022-06-13 22:42:28 +01:00
Sergio Martins
ebaf0d170f examples: Rename minimal_mdi to mdi
There's not much functionality to show, so no point in saying it's
minimal
2022-06-13 22:39:31 +01:00
Sergio Martins
040fe14907 examples: Uncomment code that sets separator thickness
It works now
2022-06-13 22:32:55 +01:00
Sergio Martins
59013303ac examples: Port MyViewFactory to new design
It was commented out still
2022-06-13 22:31:13 +01:00
Sergio Martins
4dab634abf docs++ 2022-06-13 20:44:59 +01:00
Sergio Martins
32b6c3acbe Simplify ViewFactory by making it receive View parents instead of Controllers
Users don't need to worry about such details, like casting to QWidget.
2022-06-13 20:35:57 +01:00
Sergio Martins
91398d5fab Minor: Make method protected instead of private 2022-06-13 20:16:11 +01:00
Sergio Martins
b596aaf1f4 Add the qtwidget and qtquick fwd headers to include path 2022-06-13 19:48:37 +01:00
Sergio Martins
ec56120290 Don't include controller headers in view headers
view headers will be installed, so shouldn't leak impl details
much. Controllers are more low level things that the user won't use
much
2022-06-13 19:44:47 +01:00
Sergio Martins
8ba160b0f6 Add forward headers for the views 2022-06-13 19:16:51 +01:00
Sergio Martins
6a6854ed84 example: Rename MyFrameworkWidgetFactory to MyViewFactory 2022-06-13 19:00:58 +01:00
Sergio Martins
8b49eabe95 Bump KDBindings 2022-06-13 18:45:05 +01:00
Waqar Ahmed
a17f6468cd use 0 as default serializationVersion 2022-06-13 14:50:43 +05:00
Waqar Ahmed
c62b1a5a9b Dont use nlohmann::operator[], use value() instead 2022-06-13 14:47:30 +05:00
Sergio Martins
2e4c01f604 Move some m2 TODOs to m3, as they're not related to QtQuick stabilization 2022-06-13 02:46:31 +01:00
Sergio Martins
3ab3076263 Fix some low hanging TODOs 2022-06-13 02:37:03 +01:00
Sergio Martins
efc42e8d3f Move updating size constraints from FloatingWindow view to controller 2022-06-13 02:28:56 +01:00
Sergio Martins
e49ecc880e Replace View::onLayoutRequest() with a signal
Which moves more logic into the controllers.
2022-06-13 02:12:12 +01:00
Sergio Martins
cfd4e61a3b Remove View::setLayoutItem()
Because it's specific to Frame
2022-06-13 01:49:06 +01:00
Sergio Martins
b56cf151fe TitleBar_qtwidgets: Header cleanup 2022-06-12 16:34:35 +01:00
Sergio Martins
87414585ea SideBar_qtwidgets: Cleanups
Include cleanups and making things protected/private.
2022-06-12 16:27:04 +01:00
Sergio Martins
3b814866e2 Remove unneeded isVertical() from Sidebar view 2022-06-12 16:21:11 +01:00
Sergio Martins
55620a5d10 TODO cleanup
Removed stale TODOs and promoted some to TODOm2 , as they should
be tackled next
2022-06-12 16:07:29 +01:00
Sergio Martins
5a99c8390a qtquick: Allow the user to pass a different QQmlEngine to DockWidget
Like was the case in v1.x
2022-06-12 15:51:00 +01:00
Sergio Martins
1f7ac6897c qtquick: Rename setWidget to setGuestView 2022-06-12 15:33:56 +01:00
Sergio Martins
24f1f6be33 qtquick: Remove unnneeded connect from frame view
It's already done in the controller
2022-06-12 15:29:21 +01:00
Sergio Martins
6c589f0500 Postpone some m2 TODOs to m3
m2 will focus on QtQuick being usable
2022-06-12 15:25:35 +01:00
Sergio Martins
767bbcb251 Make layout linter work against any frontend 2022-06-12 15:16:30 +01:00
Sergio Martins
c12da6b6d5 cmake: Don't link against QTTest in release builds 2022-06-12 14:51:57 +01:00
Sergio Martins
ab2b481a80 cmake: QtQuick frontend no longer needs to link against QtWidgets 2022-06-12 14:43:17 +01:00
Sergio Martins
fb844bc989 Don't use QAction directly
In prepartion for qtquick frontend not needing QtWidgets
2022-06-11 18:48:37 +01:00
Sergio Martins
098a368c79 qtquick: Use QGuiApplication for tests, not QApplication 2022-06-11 18:29:12 +01:00
Sergio Martins
1acbf48786 Don't depend directly on QSizePolicy, as that's QtWidgets
Introduce our own enum. Soon our qtquick frontend won't link
against QtWidgets
2022-06-11 18:22:38 +01:00
Sergio Martins
e120f6f318 tests: Fix windows tests regarding frame pos vs client pos confusion
It's also more readable now.
Might break on linux though, will need to investigate further if that's
the case. In many cases it's just a timing issue, as some platforms are
"more async" than others to add frame
2022-06-11 16:17:10 +01:00
Sergio Martins
a7b6dd5f24 Port the rest of win32 specific code 2022-06-11 15:50:03 +01:00
Sergio Martins
5cd46d572e Remove a Q_OS_WIN_TODO, nothing to port there 2022-06-11 15:24:32 +01:00
Sergio Martins
0031f1bcfd Release build now builds 2022-06-11 15:24:19 +01:00
Sergio Martins
42998971cc Make DockWidget's d ptr public
This gives more power to users, at their own risk ofc.
2022-06-11 15:22:34 +01:00
Sergio Martins
35f8e3c3f6 cmake: Disable unity build from release builds
It makes it hard to catch missing includes
2022-06-11 15:14:00 +01:00
Sergio Martins
98a8e67f9b Build fixes for release builds 2022-06-11 15:08:25 +01:00
Sergio Martins
6c53777f1b Fix build on Windows 2022-06-11 14:31:20 +01:00
Sergio Martins
02a8da4fb8 tests: Remove whitelisted warning
It doesn't happen anymore
2022-06-11 14:10:00 +01:00
Sergio Martins
29fd6f4a40 qtquick: Fix binding loops
This also restores behaviour with v1.x regarding setParent
2022-06-11 14:03:41 +01:00
Sergio Martins
0f6be75620 vscode: Add a qtquick launcher to the workspace too 2022-06-11 13:25:52 +01:00
Sergio Martins
78025d1e34 Fix name of examples in README and such, since they got renamed 2022-06-11 13:20:26 +01:00
Sergio Martins
b75a10b9eb examples: Normalize names of examples 2022-06-11 13:06:41 +01:00
Sergio Martins
6aed1508af tests: Don't run tst_qtwidgets if only qtquick tests were specified 2022-06-11 12:38:57 +01:00
Sergio Martins
e9c050b659 tests: Delete all QWidgets when test stops
So we don't go with garbage to the QtQuick tests
2022-06-11 12:38:11 +01:00
Sergio Martins
3c9598a560 tests: Fix Qt6/qtquick tests by supressing benign warnings
The main window can be smaller than our layout, we have no way
of imposing a min size to the QWindow, as we don't know what
the user has in main.qml, so don't qWarn when that happens.

This can be handled in the user side of things though, as our
layout exposes its min size, which the user should honour
2022-06-11 12:07:19 +01:00
Sergio Martins
6bded5e832 remove code line that was a no-op 2022-06-11 10:52:46 +01:00
Sergio Martins
e34b4c4d09 tests: Fix Qt6 qtquick tests regarding mouse grabbing not working
QtQuick tests don't work well if run after the QtWidget ones,
so change order.
2022-06-11 00:24:42 +01:00
Sergio Martins
3662f30ea4 vscode: Update the workspace file for Qt6 2022-06-10 23:42:44 +01:00
Sergio Martins
63ff503568 vscode: Remove qtquick workspace files
The same build builds both qtwidgets and qtquick
2022-06-10 23:25:34 +01:00
Sergio Martins
1070cbce87 tests: Remove unneeded test skipping on Qt < 5.15
Minimum is 5.15 nowadays
2022-06-10 23:12:10 +01:00
Sergio Martins
a1d62522f3 Fix Qt6 build 2022-06-10 19:28:25 +01:00
Sergio Martins
cfd90b6779 tests: Enable tests for QtQuick as they pass now 2022-06-10 19:25:37 +01:00
Sergio Martins
b184c6f830 qtquick: Reduce number of sanity checks during incomplete resizes
Fixes the last broken QtQuick test.
2022-06-10 19:24:11 +01:00
Sergio Martins
2aefa9efa0 qtquick: Fix windows being resized bellow their min size 2022-06-10 18:59:53 +01:00
Sergio Martins
5791198c51 qtquick: Fix some benign sizing warnings
During resize QtQuick will trigger lots of calls to setSize()
since it updates the width and the height separately.

Run our sanity checks only after with width and height are done
being updated, and not twice
2022-06-10 15:33:16 +01:00
Sergio Martins
a94daba3fc Bound the suggested floating window geometry
Because why not, seems correct. No bug would happen with QtWidgets
since QtWidgets respect the min sizes of their children, but for
QtQuick it's more flaky as there's no intrinsic mechanism for
min sizes, so give it some help
2022-06-10 14:16:57 +01:00
Sergio Martins
8e85e46ee9 tests: Make the view min size be the same as it was in 1.x 2022-06-08 19:02:01 +01:00
Sergio Martins
74dcbd994a Added MainWindow::internalLayout()
Allows the application to add more widgets next to the drop area.
2022-06-08 16:31:35 +01:00
Sergio Martins
118fe3d32e qtquick: Fix guest view not getting parented when getting added
To be improved on milestone 3
2022-06-08 12:22:57 +01:00
Sergio Martins
189fc7356a Don't install DropArea_p.h twice
Adding the fwd header is enough, so it builds with same include
name for both system and submodule install
2022-06-08 08:17:02 +01:00
Sergio Martins
2ef569c114 Add a fwd area for DropArea 2022-06-08 08:09:26 +01:00
Sergio Martins
fb31f893ae Remove unneeded QJsonDocument include 2022-06-08 00:59:16 +01:00
Sergio Martins
d275226df9 qtquick: Fix Stack creating two TabBar's
It's created by the controller, we shouldn't create another one
in the view
2022-06-08 00:32:14 +01:00
Sergio Martins
a5279b5efd qtquick: Minor refactoring, add TabBar_qtquick::qmlTabs() 2022-06-08 00:00:41 +01:00
Sergio Martins
81007f629f qtquick: Fix flaky handling of tabs
The flickable of TabBar from QtQuickControls has a bogus contentX
when removing and readding tabs. Instead implement tabAt() via
iteration and checking which tab contains the point
2022-06-07 23:34:54 +01:00
Sergio Martins
060fe44e71 Remove some unneeded QApplication includes 2022-06-07 17:14:05 +01:00
Sergio Martins
3c13f51017 tests: Also resize the view, not only the window when creating main window
Both are needed. This is how it worked in v1
2022-06-07 00:24:38 +01:00
Sergio Martins
ad9cdad927 qtquick: Don't do geometry changes at destruction
It's unneeded and makes tests fail. Setting visibility would trigger
a bunch of code that we don't want at destruction time
2022-06-06 23:53:22 +01:00
Sergio Martins
31992dcb83 tests: Fix tst_honourGeometryOfHiddenWindow on XCB
The suggested height should be smaller than the floating window
min-size.
2022-06-06 23:35:31 +01:00
Sergio Martins
a5ecfbdd91 tests: Fix createMainWindow having different behavior between frontends 2022-06-06 23:03:53 +01:00
Sergio Martins
0929fb1c75 qtquick: Fix showing qtquick window not setting the root item visible 2022-06-06 15:43:53 +01:00
Sergio Martins
4515c85f91 Don't call "Frame::isMDI" when layout is being destroyed
Just emit the signal always, QtQuick will reread the property.
It's better than doing a complex solution
2022-06-06 15:30:34 +01:00
Sergio Martins
230f562cb4 qtquick: Fix floating window being deleted at construction
When the window is hidden we destroy it, but not while it's
still being constructed.
2022-06-06 14:58:09 +01:00
Sergio Martins
3758dc7dda Fix weird logic in FloatingWindow::isBeingDeleted() 2022-06-06 14:48:58 +01:00
Sergio Martins
464624f2a5 qtquick: Don't dereference FloatingWindow while it's being destructed
Caught by UBSAN
2022-06-06 13:53:31 +01:00
Sergio Martins
0be61b0a1b qtquick: Don't delete dock widgets in frame view dtor
views shouldn't delete controllers
2022-06-06 13:44:53 +01:00
Sergio Martins
5faf36700b Use qGuiApp instead of qApp
As QtQuick applications might not have QApplication.
2022-06-06 13:24:38 +01:00
Sergio Martins
995df8e3e8 qtquick: Remove qFatal in TabBar_qtquick::tabsAreMovable
It wasn't implemented in v 1.x either.
2022-06-06 11:29:14 +01:00
Sergio Martins
14189dc601 Make LayoutSaver deserializeWindowGeometry deal in Window instead of View 2022-06-06 11:23:07 +01:00
Sergio Martins
9c881ec53e Normalize how we set top level window geometry
Prefer Window API, since for QtQuick the root view isn't so tighly
coupled with the QWindow as in QWidgets world. Hide the difference in
Window_qtwidgets.cpp, which now prefers the QWidget API whenever possible,
as that's better tested than using QWindow direclty.
2022-06-06 11:17:42 +01:00
Sergio Martins
581451c342 Remove old ViewWrapper::asDropArea()
It's unneeded, and it wasn't implemented for QtQuick
2022-06-06 10:28:44 +01:00
Sergio Martins
eb198736b8 qtquick: Fixed drag indicators not working on main window
ViewWrapper::asDropArea() was dummy. Will remove it.
2022-06-06 10:23:48 +01:00
Sergio Martins
e8f390f2ad tests|qtquick: Don't create lots of spurious QQuickView
Most of the times we just want to create a dock widget which
will be parented immediately, we don't need the window.
2022-06-06 10:13:19 +01:00
Sergio Martins
2beb4982b0 qtquick: Make Window_qtquick::rootView() behave like in v 1.x
The MainWindow might not be the QQuickView's root item, but
version 1.x would still return that. So preserve that, since it's
what tests expect.

We can improve after having tests passing.
2022-06-06 09:42:06 +01:00
Sergio Martins
46159d88bd Add Window::containsView() 2022-06-06 09:25:45 +01:00
Sergio Martins
fbff1ed4a7 qtquick: Fix min size being violated in FloatingWindow ctor
Only set the suggested geometry after we added the frame.
This is the behaviour in 1.x too.
2022-06-06 09:24:38 +01:00
Sergio Martins
6bd87113b4 Simplify some code, add a View::transientWindow() shortcut 2022-06-05 14:19:08 +01:00
Sergio Martins
7e3a82ed3e qtquick: Fix setting of transient parent window
We need to go through Window, not through View.
This even makes things cleaner, as parentView() shouldn't go across
window boundaries. That's the case for QtWidgets but it's not consistent
with QtQuick. Our View abstraction has saner rules
2022-06-05 14:12:22 +01:00
Sergio Martins
f9efe2755e Fix LayoutSaver not restoring geometry correctly
"normalGeometry" was repeated twice due to typo
2022-06-05 13:31:08 +01:00
Sergio Martins
a88beb7574 qtquick: Implement missing methods for classic indicators 2022-06-05 12:53:22 +01:00
Sergio Martins
792aaf76da Normalize handling of close event for Frame and FloatingWindow too
Fixes windows not closing correctly for QtQuick
2022-06-05 12:47:53 +01:00
Sergio Martins
f11a6a6a8c Honour View::closeRequested signal
This noramalizes how both qtwidgets and qtquick were handling it.
Fixes tests related to close events in qtquick
2022-06-05 03:23:19 +01:00
Sergio Martins
6d926ee6e4 qtquick: Remove two more unneeded signals 2022-06-05 02:39:52 +01:00
Sergio Martins
666d4be478 qtquick: Fix wrong signal being emitted
It's the controller signal that is connected
2022-06-05 02:30:45 +01:00
Sergio Martins
ce88a00b4b tests: Don't enable these qtquick tests yet
Was commited by mistake
2022-06-05 01:14:32 +01:00
Sergio Martins
075a9d30f0 qtquick: Make Layout::floatingWindow()
The layout might be parented to other intermediate stuff.
2022-06-05 01:12:18 +01:00
Sergio Martins
ec4e22b5ae qtquick: Move the ClassicIndicator Q_PROPERTIES to the view
as that's what will be exposed to QtQuick
2022-06-05 00:54:30 +01:00
Sergio Martins
56ca80e8fc qtquick: Fix crash when dereferencing incomplete stack controler
The stack controller CTOR was still in the stack (pun intended), then
dereferenced by tabbar. Instead, call Stack_qtquick::init() to intitialize
the the TabBar. At this point the Stack controller is already usable.
2022-06-04 21:30:43 +01:00
Sergio Martins
ec144472ce Remove unneeded QWidget reference 2022-06-04 21:23:49 +01:00
Sergio Martins
991ced33f6 Rename createTabWidget() to createStack()
as done with the other classes already
2022-06-04 21:21:22 +01:00
Sergio Martins
78357b53a4 move some todos to milestone 3 2022-06-04 20:55:42 +01:00
Sergio Martins
16529c6704 qtquick: Port code that emitted frameGeometryChanged()
It's a public signal used by client code
2022-06-04 20:52:49 +01:00
Sergio Martins
1ead71442f qtquick: Remove old rubber band code, this has been ported already 2022-06-04 20:41:57 +01:00
Sergio Martins
a3f2e8ec9a qtquick: Rename tabBarObj to tabBarViewObj
Makes it clear it's a view
2022-06-04 20:39:41 +01:00
Sergio Martins
a2b5f40ed1 qtquick: Implement Stack_qtquick::tabBarObj() 2022-06-04 20:38:40 +01:00
Sergio Martins
d63a9db5a2 Port wayland commented out code 2022-06-04 20:30:20 +01:00
Sergio Martins
03a17c3a9d Fix TODO about renaming variable 2022-06-04 20:26:35 +01:00
Sergio Martins
0f8823664c qtquick: Remove old references to FrameQuick 2022-06-04 20:24:12 +01:00
Sergio Martins
cdaa03a413 qtquick: Fix Frame_qtquick::updateConstriants() not being called yet 2022-06-04 20:22:49 +01:00
Sergio Martins
e25a940ad1 qtquick: Implement DockWidget_qtquick::frameVisualItem() 2022-06-04 20:18:41 +01:00
Sergio Martins
9332eb3bf8 Remove unneeded FrameOptions argument from createFrame()
It's passed to the controller, the view doesn't need it.
2022-06-04 20:08:26 +01:00
Sergio Martins
84561a9d67 tests: Remove unused color argument from createDockWidget() 2022-06-04 20:03:43 +01:00
Sergio Martins
f1f722f1ce Replace TODOv2 tags with TODOm2 and TODOm3 tags
Not all todos are required for milestone m2
2022-06-04 19:53:25 +01:00
Sergio Martins
e5b82e0a45 qtquick: Fix frame not getting parented to DropArea 2022-06-04 12:32:20 +01:00
Sergio Martins
6c5f477c31 cmake: Remove qtquick presets, they are unneeded now
The build will build both frontends now.
2022-06-04 12:15:23 +01:00
Sergio Martins
20546acc4e cmake: Remove unneeded condition for old Qt
5.15. is the minimum nowadays
2022-06-04 12:07:51 +01:00
Sergio Martins
87319c69d2 cmake: Swap if/else branches to remove a negation 2022-06-04 12:05:59 +01:00
Sergio Martins
dc36435b35 cmake: Make the frontend discovery shorter
The fatal messages aren't needed, replaced by a REQUIRED find_package.
Added missing QtQuickControls find package from one branch, it was
only looking for QtQuick.
2022-06-04 12:03:26 +01:00
Sergio Martins
ea9bf1ef0f cmake: Remove unneeded negation 2022-06-04 11:48:53 +01:00
Sergio Martins
adbaedef89 cmake: Don't require the user to specify a frontend.
It would error-out with "OFF is not a frontend"
Just use find_package instead and enable any compatible frontend.
2022-06-03 19:18:53 +01:00
Sergio Martins
2fafef87df cmake: Replace ${PROJECT_NAME} with the actual project name
Because:
 - Doesn't select the whole option name on double-click
 - Not easily greppable on the terminal

It make's sense for any reusable cmake code though, we can replace
with ${PROJECT_NAME} again after factoring out any of our non-reusable
cmake code into a reusable module, if any.
2022-06-03 19:14:01 +01:00
Sergio Martins
d06c6e8f11 EGLFS: Don't raise the main window when docking
EGLFS doesn't honour that the floating windows should be
on top and will make the floating windows go behind.

It's also unneeded to raise it on eglfs, since it's fullscreen.
2022-06-03 14:42:08 +01:00
Waqar Ahmed
cd88e19648 cmake: Add KDDockWidgets_FRONTENDS option 2022-06-03 16:10:41 +05:00
Sergio Martins
a2f1c1347a cmake: Explicitly add QtWidgets as dependency of our widgets frontend 2022-06-02 23:33:20 +01:00
Sergio Martins
596c330a77 Make numSideBySide_recursive() ignore invisible items
This amends previous commit, which missed a code path
2022-06-02 16:49:12 +01:00
Sergio Martins
9f96eff663 Make numSideBySide_recursive() ignore invisible items
We have invisible items that just remember the position of
other items.
2022-06-02 16:30:02 +01:00
Sergio Martins
3260c65a6c Add DropLocation_Horizontal and DropLocation_Vertical
So we can quickly use a bitwise and to see if an arbitrary
drop location is vertical or horizontal.
2022-06-02 16:16:24 +01:00
Sergio Martins
2c8ceb67ef Allow segmented indicators to disable individual segments
The application developer might now want to show some segments.
Now he can use Config::setDropIndicatorAllowedFunc(), which previously
only worked for classic indicators
2022-06-02 16:02:00 +01:00
Sergio Martins
982904e2ba Pass the DropArea to setDropIndicatorAllowedFunc() too
So the lambda can have more advanced usage and inspect the
target layout before allowing or disallowing the drop.

For our use case, we want to limit max 3 dock widgets side by side,
for example.
2022-06-02 15:19:01 +01:00
Sergio Martins
b2b75cd5bb Fix typo in snippet 2022-06-02 14:44:14 +01:00
Sergio Martins
90ad1a7f23 Added MultiSplitter::numSideBySide_recursive()
Since ItemBoxContainer isn't exported.
2022-06-02 14:01:47 +01:00
Sergio Martins
f5622732ce Added ItemBoxContainer::tst_numSideBySide_recursive() 2022-06-02 13:59:20 +01:00
Sergio Martins
e74055c1fd qtquick: Move titlebar invokables to the view
As that's what's exposed to QtQuick
2022-06-01 08:53:11 +01:00
Sergio Martins
1acafd8a6c Remove unneeded MultiSplitterConfig
Config.cpp is enough
2022-05-31 23:31:29 +01:00
Sergio Martins
529cedfcbf Remove the last occurrences of KDDOCKWIDGETS_QTWIDGETS
Don't define it in cmake anymore as it's official dead
2022-05-31 22:43:35 +01:00
Sergio Martins
affd1d12ae tests: Move the last qtwidgets only test to tst_qtwidgets.cpp
tst_docks.cpp is now completely rid of the widget ifdefs
2022-05-31 15:14:16 +01:00
Sergio Martins
300bd89728 tests: Port a bunch of KDDOCKWIDGETS_QTWIDGETS defines
These already existed in version 1.0, so just use the proper
guard. They won't be made generic at this point
2022-05-31 15:09:36 +01:00
Sergio Martins
61fb31b62a tests: Move a qtquick only test to tst_qtquick 2022-05-31 15:05:27 +01:00
Sergio Martins
58f1900b06 Port lazy separator resize 2022-05-31 14:43:47 +01:00
Sergio Martins
b6038bd7d7 Port two instances of KDDOCKWIDGETS_QTWIDGETS
These are OK, so just rename to the new macro
2022-05-31 14:19:02 +01:00
Sergio Martins
07853bdc4d Remove the last two remaining KDDOCKWIDGETS_QTQUICK ifdefs 2022-05-31 14:14:31 +01:00
Sergio Martins
6289e92e54 qtquick: Fix resizing root view
And uncommented the qtquick test for this, which now passes.
Moved the test to its own qtquick tests file.
2022-05-31 14:06:36 +01:00
Sergio Martins
0a1023aa83 Remove qFatal from ViewWrapper_qtquick::setAttribute()
It's ok to be a no-op
2022-05-31 11:33:19 +01:00
Sergio Martins
bc6417c923 Added Window::framePosition() 2022-05-31 11:33:08 +01:00
Sergio Martins
b201737149 Abstract mouse grabbing
It's done via the platforms, not via ifdefs anymore
2022-05-31 11:06:25 +01:00
Sergio Martins
c93911016f tests: remove unused already ported class 2022-05-31 10:37:51 +01:00
Sergio Martins
2e92357adc Add View::setZOrder()
Only relevant to QtQuick.
Removes some ifdefs.
2022-05-31 10:37:14 +01:00
Sergio Martins
8223f462c6 Remove Q_OBJECT from inside comments, so cmake doesn't trigger moc
Fixes a warning where moc says "No relevant classes found"
2022-05-31 10:08:55 +01:00
Sergio Martins
b9b8bfc430 Fix Werorr build due to missing override 2022-05-31 10:05:39 +01:00
Sergio Martins
f9df3c5872 windows: Port system move support 2022-05-30 23:42:41 +01:00
Sergio Martins
9881e0488f windows: Port FloatingWindow's nchittest code
Only DragController needs to be ported on Windows now
2022-05-30 23:36:54 +01:00
Sergio Martins
5a4342c0af windows: Port FloatingWindow::nativeEventFilter() 2022-05-30 23:26:26 +01:00
Sergio Martins
c244d7628d windows: Port AeroSnap to the new API 2022-05-30 23:19:58 +01:00
Sergio Martins
ab830bb6ee windows: Port nchittest code 2022-05-30 23:10:21 +01:00
Sergio Martins
827008a96a windows: Port some code from QWindow to Window
Removed the respectives Q_OS_WIN_TODO as they compile now
2022-05-30 22:54:20 +01:00
Sergio Martins
340e65df0b windows: Remove some Q_OS_WIN_TODO from FloatingWindow 2022-05-30 22:44:52 +01:00
Sergio Martins
83cc6f1b0c Add Window min/max size getter 2022-05-30 22:27:58 +01:00
Sergio Martins
35a44574a0 windows: Port a few leftovers 2022-05-30 22:07:42 +01:00
Sergio Martins
7a21857ea7 Added Window::property() 2022-05-30 22:05:43 +01:00
Sergio Martins
94afae2729 windows: Reviewed and ported a bunch of Q_OS_WIN_OLD usages
Those are fine. Will tackle the difficult ones next.
2022-05-30 22:04:35 +01:00
Sergio Martins
d8e703275f windows: Replace Q_OS_WIN with Q_OS_WIN_TODO so we can start porting
Now it builds. This way I can port each Q_OS_WIN one by one and make
sure everything still builds, without risking breaking Linux/macOS.
2022-05-30 21:55:49 +01:00
Sergio Martins
08dc12e8d7 Move globalGeometry() into View
Allows to remove some cruft
2022-05-30 19:50:58 +01:00
Sergio Martins
31d43b6608 qtquick: Port inDisallowedDragView() 2022-05-30 19:45:58 +01:00
Sergio Martins
ab9396af61 Remove unneeded KDDockWidgets::isWindow() 2022-05-30 19:35:20 +01:00
Sergio Martins
30ca6769e4 qtquick: Use the fallback mouse grabber
This code was needing porting.
2022-05-30 19:31:30 +01:00
Sergio Martins
22f6f4b2f1 Rename DockWidget::parentChanged() to parentViewChanged() for clarity
As this about the visual parent
2022-05-30 19:25:24 +01:00
Sergio Martins
b19f2dfbed Remove unneeded ifdefs 2022-05-30 19:23:12 +01:00
Sergio Martins
82f3cd9c5f Remove some unneeded ifdefs from MDIArea.cpp
Trying to get rid of them as some need to get ported
2022-05-30 19:20:11 +01:00
Sergio Martins
567308934e qtquick: Properly comment out a QtWidgets specific code path
Fixes crash when hovering with mouse
2022-05-30 19:17:49 +01:00
Sergio Martins
4d1add5221 qtquick: Fix assert that assumed the content item only had 1 child
QQuickWindow has other things like popup overlays parented to
the content item too.
2022-05-30 19:14:22 +01:00
Sergio Martins
c619c72094 tests: Introduce an env var to allow to run a subset of tests
by frontend
2022-05-30 18:57:59 +01:00
Sergio Martins
e2bb4fb830 qtquick: Register the main window and dock widget instantiators 2022-05-30 18:46:02 +01:00
Sergio Martins
5c0176f35b qtquick: Implement min/max size for the wrappers 2022-05-30 18:43:48 +01:00
Sergio Martins
095dbe1a7f qtquick|examples: Initialize the platform
Fixes a crash.
There's more (unrelated) crashes though, will look at those next.
2022-05-30 18:39:35 +01:00
Sergio Martins
230317551b Move installMessageHandler() to Platform.h
It's not Qt specific, as other frontends might want to install
their own handler
2022-05-30 18:31:14 +01:00
Sergio Martins
a48ce5ccff tests: Don't fail due to benign warnings 2022-05-30 18:07:14 +01:00
Sergio Martins
10cf965be2 Fix inifinite loop in ViewWrapper_qtquick::maximumSize 2022-05-30 17:59:12 +01:00
Waqar Ahmed
39c058cd29 Fix messageHandler installation for Qt backends 2022-05-30 20:28:44 +05:00
Waqar Ahmed
2815a5e84a Fix build errors 2022-05-30 17:11:05 +05:00
Sergio Martins
08dc4540f8 qtquick: Make customtitlebar example compile 2022-05-30 12:20:44 +01:00
Sergio Martins
bcb0668ace qtquick: Make mdi example compile 2022-05-30 12:16:11 +01:00
Sergio Martins
0b36b7c7e8 qtquick: Port the example 2022-05-30 12:01:04 +01:00
Sergio Martins
2421e607a9 Users now instantiate DockWidget view instead of controller
The controllers are private and not intentend for the public.
2022-05-30 11:45:43 +01:00
Sergio Martins
403f0626b4 tests: Comment the QtQuick examples one by one
so we can uncomment them one by one too as we port them
2022-05-30 10:15:16 +01:00
Sergio Martins
1bb0b13d77 qtquick: Make MainWindowInstantiator compile 2022-05-29 23:27:27 +01:00
Sergio Martins
1787a69edb qtquick: Make DockWidgetInstantiator compile 2022-05-29 23:16:56 +01:00
Sergio Martins
04b9590d59 cmake: Compile tst_qtwidgets only if QtWidgets frontend is built
The QtQuick frontend is now buildable withotu the QtWidgets one.
2022-05-29 22:14:45 +01:00
Sergio Martins
c36832d71c Port tst_viewguard away from QtWidgets 2022-05-29 22:07:38 +01:00
Sergio Martins
eff711b9ca Port MainWindowMDI to the new architecture
Has a qtquick implementation now.
2022-05-29 21:57:08 +01:00
Sergio Martins
340f618060 Split MainWindowMDI in two, so it can be reused by QtQuick 2022-05-29 21:09:24 +01:00
Sergio Martins
58c246cedc Remove unneeded qtquick ifdef 2022-05-29 20:55:42 +01:00
Sergio Martins
e27f142ec8 Fix KDDockWidgets::initFrontend() not initializing qtquick
As a drive-by add the required ifdefs
2022-05-29 20:27:50 +01:00
Sergio Martins
6d760cb5e1 Rename Some _p.h headers to .h
Easier for vscode to toggle between header the source
2022-05-29 20:24:11 +01:00
Sergio Martins
85f02d8ceb DockRegistry doesn't depend on QtWidgets anymore 2022-05-29 20:14:25 +01:00
Sergio Martins
fe87380d83 Layout.cpp no longer depends on QtWidgets 2022-05-29 20:09:26 +01:00
Sergio Martins
20c41fa3b1 qtquick: Implement Platform_qtquick::tests_createNonClosableView() 2022-05-29 19:54:37 +01:00
Sergio Martins
34d4ba6f64 Remove TODO, it has been renamed already 2022-05-28 20:01:32 +01:00
Sergio Martins
bdb5c533f2 Remove unused forward declaration 2022-05-28 19:55:55 +01:00
Sergio Martins
07bcea1226 cmake: Make QtQuick frontend build without QtWidgets frontend
Fails to link but compiles.
2022-05-28 19:50:59 +01:00
Sergio Martins
f645a4345f Don't run tests on unsupported frontends
If kddw wasn't compiled with QtQuick support then don't run the
QtQuick tests.
2022-05-28 16:06:17 +01:00
Sergio Martins
1c0c594abe cmake: Add qtwidgets/qtquick ifdefs
Code now builds without QtQuick if needed
2022-05-28 16:02:14 +01:00
Sergio Martins
c77b9628b4 cmake: Only link to QtWidgets when building qtwidgets frontend
And the same for QtQuick
2022-05-28 15:34:59 +01:00
Sergio Martins
a3750ea79a cmake: allow to build qtquick and qtwidgets independently
Still hardcoded to on, but the sources are now separated
2022-05-28 15:13:22 +01:00
Sergio Martins
4cd362dc33 cmake: Set minimum Qt6 version to 6.2
Anything else is untested
2022-05-28 14:31:39 +01:00
Sergio Martins
812892f3f2 bump version to 2.0 2022-05-28 14:25:25 +01:00
Sergio Martins
2e6924ec43 qtquick: Remove isWrapper
Will readd it if it's really needed
2022-05-28 11:57:20 +01:00
Sergio Martins
56a871b86b tests: Remove unneeded setContentsMargin() call 2022-05-27 15:50:16 +01:00
Sergio Martins
8354043337 qtquick: Don't abort when setContentsMargins() are called
It wasn't implemented for version 1.x either
2022-05-27 15:48:55 +01:00
Sergio Martins
410d893de9 qtquick: Implement the missing methods in ViewWrapper 2022-05-27 15:39:08 +01:00
Sergio Martins
406dd19285 qtquick: Don't dereference null FloatingWindow controller
Controller is already gone
2022-05-27 14:29:51 +01:00
Sergio Martins
586ed8d70b Replace View_qtquick::windowIsBeingDestroyed with View::aboutToBeDestroyed
Easier if it's generic.
2022-05-27 14:26:34 +01:00
Sergio Martins
da8539820e qtquick: Find the correct controller when using ViewWrapper 2022-05-27 14:00:19 +01:00
Sergio Martins
267bc4ec79 tests: Test that a floating window is created 2022-05-27 13:35:52 +01:00
Sergio Martins
fb8639969c Delete QObject::setParent() in the controller
To find places where we're setting parent on the controller instead
of in the view. Fix such case where the dock widget view
wasn't being parented to the frame view.
2022-05-27 13:25:06 +01:00
Sergio Martins
5fdbc12524 Add some asserts 2022-05-27 12:53:22 +01:00
Sergio Martins
18651bbf7a qtquick: Add some qFatal to some unimplemented methods
So I can easy get feedback they are missing impl.
2022-05-27 12:47:44 +01:00
Sergio Martins
bcaf0737e9 Move Platform::createMainWindow() to dev mode
This is for tests only
2022-05-27 12:11:43 +01:00
Sergio Martins
ad7f5f5970 tests: Remove some manual creation of QQuickView
It's abstracted by the platform now
2022-05-27 12:11:43 +01:00
Sergio Martins
652286760b qtquick: Fix creation of main window
It wasn't initializing the controller
2022-05-27 10:57:54 +01:00
Sergio Martins
df0dde80ef Remove unneeded "initView" parameter from MainWindow 2022-05-27 10:41:50 +01:00
Sergio Martins
03f1a6930c Added Platform::createMainWindow()
Called by tests and layout linter to create a main window.

Simplifies creation of the main window, we can now remove one of the ctors.
Before we supported both the controller creating the view and vice-versa,
while this is convenient it's complex to support, due to order or initializations.

Now, you a create a view, and it creates the controller behind the scenes.
MainWindow is special in this sense, as it's created by the end user, it's
not something internal we want in the ViewFactory.
2022-05-27 10:36:54 +01:00
Sergio Martins
e20a8ba396 Remove unneeded KDDOCKWIDGETS_QTQUICK ifdef 2022-05-26 23:24:38 +01:00
Sergio Martins
73dd788fa1 cmake: Remove unneeded -DKDDOCKWIDGETS_QTQUICK 2022-05-26 23:20:27 +01:00
Sergio Martins
ebb623f080 Initialize static resources in the correct platform
Non-Qt platforms won't have to do this
2022-05-26 23:16:02 +01:00
Sergio Martins
1dde7e3e99 Add a generic interface for the classic indicator window
this removes QWidget references from ClassicIndicators.cpp.
Both the QtQuick and QtWidgets impl will implement this new
interface, which is what ClassicIndicators.cpp uses now
2022-05-26 23:10:26 +01:00
Sergio Martins
fc74698dac Remove some unused qtwidget includes from controllers/ 2022-05-26 10:02:28 +01:00
Sergio Martins
c554bdc68c Fix DropArea only looking for QtWidget children
Instead of using findChildren(), just ask the layout for the
items.

tst_floatingWindow now doesn't crash anymore when looking for
the layout items.
2022-05-26 09:58:23 +01:00
Sergio Martins
4a8ac4a309 Remove unneeded assignment, since we're using scoped rollback 2022-05-26 09:54:31 +01:00
Sergio Martins
042cabbe5d Use a RAII class to emit floatingChanging()
Otherwise during reparenting the signal can be emitted by mistake.
Now we only check at the end if we need to emit it.
2022-05-26 09:29:37 +01:00
Sergio Martins
1e1204a991 Merge branch '1.6' 2022-05-25 00:38:49 +01:00
Sergio Martins
4727c9c7fc MainWindow: Allow to avoid the immediate QWidget::create()
In case you're going to put the main window into a layout you
don't want to have it create a QWindow.
2022-05-25 00:36:40 +01:00
Allen Winter
6c42a2d40e Merge branch '1.6' 2022-05-24 17:22:41 -04:00
Allen Winter
f8ca5ca1ef KDDockWidgetsConfig.cmake.in - make sure QuickControls2 is found
if building for QTQUICK we'll have dependencies
on the Qt libraries QtQuick and QuickControls2
2022-05-24 17:20:16 -04:00
Sergio Martins
a85c56a25a Implement ViewWrapper::is() 2022-05-23 23:37:25 +01:00
Sergio Martins
ac51ffc7d4 tests: Add tests for DockWidget and FloatingWindow ctor
To catch potential QML errors in the .qml files.
2022-05-23 23:06:32 +01:00
Sergio Martins
c648e5fbba qtquick: View::rootView() now returns itself if no parent
This matches QWidget::window() behaviour
2022-05-23 22:51:57 +01:00
Sergio Martins
6fd88a8570 qtquick: Add missing properties to floating window
They return QObject as they can't be fwd declared in Qt 6 and might
have circular dependency.
2022-05-23 22:31:54 +01:00
Sergio Martins
bab0c99d13 tests: Added tst_separator
Helps finding problems in the respective qml file
2022-05-23 19:12:32 +01:00
Sergio Martins
79ef648a27 tests: Added tst_stack and tst_tabbar
Finds errors in the respective qml files
2022-05-23 19:00:21 +01:00
Sergio Martins
0f55a2f87a tests: Add tst_titlebar
At least for the ctor, which already helps to find bugs in
the .qml file
2022-05-23 18:07:56 +01:00
Sergio Martins
87e9cbc388 tests: Add tst_frame 2022-05-23 17:15:43 +01:00
Sergio Martins
821002ce43 qtquick: Add QML interface to TitleBar_qtquick 2022-05-23 17:12:35 +01:00
Allen Winter
ea00ecf33d qt6-kddockwidgets.dsc - fix package list 2022-05-23 12:00:29 -04:00
Sergio Martins
dab7195408 tests: Fix view factory being overridden
It's set during init
2022-05-23 16:39:03 +01:00
Sergio Martins
349816dab7 qtquick: Add QML interface for Frame
Since the controllers won't be QObjects eventually, we need the
C++ views to hold the properties.
2022-05-23 15:55:54 +01:00
Sergio Martins
46968556bb tests: Add missing viewwrapper ctest 2022-05-23 14:59:48 +01:00
Allen Winter
bf255c104f distro/ - update for ubuntu22.04 and fedora36 2022-05-22 10:04:17 -04:00
Sergio Martins
e09a328281 qtquick: Add missing isMDI Q_PROPERTY 2022-05-21 10:36:41 +01:00
Sergio Martins
8c757955b5 qtquick: Fix signal connection in Frame 2022-05-21 10:33:14 +01:00
Sergio Martins
e7d20a403a qtquick: Dont' crash in frame ctor 2022-05-21 10:26:12 +01:00
Sergio Martins
bafa21d11c tests: Abort tests if there were warnings 2022-05-21 00:00:14 +01:00
Sergio Martins
07fc7d0437 tests: Move waitForDeleted() into Platform
So each platform can implement their own.
Meaning old Testing.cpp can be deleted too.
2022-05-20 16:41:59 +01:00
Sergio Martins
cc1f75b1b3 tests: Move our message filter into Platform_qt
So it can be reused by other tests
2022-05-20 16:29:14 +01:00
Sergio Martins
4a7446e57b qtquick: Build QmlTypes.cpp
Still a bit commented out
2022-05-20 15:02:33 +01:00
Sergio Martins
fc0fa1c58c qtquick: Return the correct paths for qml files 2022-05-19 19:28:48 +01:00
Sergio Martins
bb4f5a5037 Mass renaming of last usages of FrameworkWidgetFactory 2022-05-19 08:12:29 +01:00
Sergio Martins
09eb303bab Rename some methods from FrameworkWidget to View 2022-05-19 08:00:20 +01:00
Sergio Martins
4708b2c25d Rename FrameworkWidgetFactory_qtwidgets|qtquick to ViewFactory_* 2022-05-19 07:51:50 +01:00
Sergio Martins
e514a8c3e1 Rename FrameworkWidgetFactory to ViewFactory
We now deal in views instead of widgets, and the "Framework"
part was redundant. It's also shorter now
2022-05-18 23:12:43 +01:00
Sergio Martins
aefbbd5738 Allow the classic/segmented views be created by FrameworkWidgetFactory
Instead of the controllers. We only allow the user to customize
the views.
2022-05-18 23:10:27 +01:00
Sergio Martins
ab881c9b5a Fix fwd declaration typo 2022-05-18 22:54:49 +01:00
Sergio Martins
e54ebd096c Both ClassicIndicatorsWindow qtquick and qtwidgets build
They don't clash anymore. Rename them to include the suffix.
Next step is abstracting the creation of IndicatorWindow so we
remove the last qtwidget traces from ClassicIndicators.cpp
2022-05-18 05:27:24 +01:00
Sergio Martins
6054ccfdf2 Move Indicator class into .cpp file
It's impl detail
2022-05-18 05:19:24 +01:00
Sergio Martins
2fda6d11e1 Removed the qtquick/qtwidgets ifdefs from ClassicIndicatorsWindow_*
They now each have their own implementation.
qtquick one still not compiling, as it duplicates symbols.
2022-05-18 05:10:01 +01:00
Sergio Martins
34c25a065a Copy ClassicIndicatorsWindow.cpp into qtwidgets and qtquick
No other changes made.
In preparation to remove the ifdefs.
2022-05-18 05:03:15 +01:00
Sergio Martins
89ceb01b59 Remove some classes that were copied instead of renamed 2022-05-18 04:49:54 +01:00
Sergio Martins
65c1b53ea0 tests: Some include cleanup 2022-05-18 04:48:31 +01:00
Sergio Martins
522b2623be Moved DropIndicatorOverlay into controllers/ folder 2022-05-18 04:47:01 +01:00
Sergio Martins
d2bf83e4ac Rename DropIndicatorOverlayInterface to DropIndicatorOverlay
We don't suffix our base classes with "Interface"
2022-05-18 04:39:21 +01:00
Sergio Martins
30c3a047d1 Move the indicator classes into controllers/indicators/ 2022-05-18 04:35:33 +01:00
Sergio Martins
2b6c18dbcd Move the drop indicators into Controllers namespace 2022-05-18 04:24:16 +01:00
Sergio Martins
7b486bb28c qtwidgets: Add views for the Classical and Segmented indicators
Copied from indicators/
2022-05-18 04:10:01 +01:00
Sergio Martins
10b61f0e30 Remove unused Type::DropIndicatorOverlayInterface 2022-05-17 23:45:54 +01:00
Sergio Martins
1b35810766 Add Platform::createView()
For when kddw internalls need to create an empty view.
Use case will be to create the parent widget for the drop indicators.
2022-05-17 23:43:41 +01:00
Sergio Martins
fc0160213e Remove old MDILayoutWidget_p.h file
It has been renamed already
2022-05-17 22:18:40 +01:00
Sergio Martins
a039f102a3 Remove some unneeded QWidget includes 2022-05-17 22:16:00 +01:00
Albert Astals Cid
9b8759c472 Add the possibility of setting the margin used for overlay docks 2022-05-17 15:32:28 +01:00
Sergio Martins
41efefa21e Port away from ViewWrapper_qtwidgets in the backend
Only qtwidgets frontend is allow to use this type
2022-05-16 23:10:04 +01:00
Sergio Martins
cc8ee097a3 Remove last usage of QWidgetOrQuick type 2022-05-16 23:04:29 +01:00
Sergio Martins
1bacb31949 tests: Use generic view instead of QWidget NonClosableWidget 2022-05-16 22:55:46 +01:00
Sergio Martins
be75247dba tests: Remove some unused includes 2022-05-16 22:37:22 +01:00
Sergio Martins
6bc68fece8 tests: Remove instances of QTextEdit in tests
It's generic now
2022-05-16 22:30:57 +01:00
Sergio Martins
be8250acb7 tests: Remove instances of QLineEdit from the tests
It's now generic
2022-05-16 21:59:43 +01:00
Sergio Martins
8372ffc0d7 tests: Remove all instances of QPushButton from tst_docks
Now uses generic alternatives that will work with other frontends too
2022-05-16 21:29:46 +01:00
Sergio Martins
a10187ed5d tests: Port away further from "QWidgetOrQuick" 2022-05-16 20:01:08 +01:00
Sergio Martins
7fbd1ea920 Added Platform::startDragDistance()
As its value is per platform.
2022-05-15 22:31:40 +01:00
Sergio Martins
ef4a0214ed Added Platform::isQtWidgets()
Removes it from Utils_p.h
2022-05-15 22:23:34 +01:00
Sergio Martins
d5ac23a8d2 qtquick: Implement DefaultWidgetFactory_qtquick
Requires implementing some pure-virtuals in the views too
2022-05-15 22:14:51 +01:00
Sergio Martins
7434865967 Move Layout.cpp to controllers/ folder
as it's a controller
2022-05-15 21:30:31 +01:00
Sergio Martins
f29d3bf5f8 Move Layout into Controllers namespace 2022-05-15 21:22:26 +01:00
Sergio Martins
97baed0ef9 Rename layoutWidget variable/method name to layout
It's a controller, so don't suffix it with Widget/View
2022-05-15 21:12:01 +01:00
Sergio Martins
378f380968 Rename LayoutWidget to Layout , since it's not a view
Controllers shouldn't be suffixed
2022-05-15 21:04:07 +01:00
Sergio Martins
8e506aa327 Rename LayoutWidget.cpp to Layout.cpp , as it's a controller 2022-05-15 16:51:55 +01:00
Sergio Martins
df96b7ab81 Move MDILayout into Controllers namespace 2022-05-15 16:47:05 +01:00
Sergio Martins
20cd7b04a5 Rename MDILayoutWidget class to MDILayout
Since it's a controller, we strip the suffix
2022-05-15 16:27:51 +01:00
Sergio Martins
fa16020d61 Rename MDILayoutWidget to MDILayout and move it to controllers/
Since it's not a view, remove the "Widget" suffix
2022-05-15 16:24:57 +01:00
Sergio Martins
5ba4e0ee9d qtquick: Added MDILayout_qtquick 2022-05-15 16:17:28 +01:00
Sergio Martins
a27ee4944a qtquick: Added DropArea_qtquick 2022-05-15 16:12:25 +01:00
Sergio Martins
f537ff007c qtquick: Remove type registring from MultiSplitterConfig.cpp
It's specific to QtQuick
2022-05-15 15:38:04 +01:00
Sergio Martins
c563fc7d42 Fix path of ClassicIndicatorsOverlay.qml 2022-05-15 15:33:43 +01:00
Sergio Martins
9d0f137f9d qtquick: FloatingWindow and MainWindow are now ported and compile 2022-05-15 15:29:54 +01:00
Sergio Martins
bcc823e900 qtquick: Do the boring boilerplate porting for MainWindow/FloatingWindow
Mostly interesting things left to port there only.
2022-05-15 14:26:49 +01:00
Sergio Martins
23b2ade6bd qtquick: Port some commented out code 2022-05-15 14:13:21 +01:00
Sergio Martins
9bebf50d4d qtquick: Some initial porting for DockWidgetInstantiator 2022-05-15 14:10:21 +01:00
Sergio Martins
6b98322d96 qtquick: Ported rubberband to the new architecture 2022-05-15 14:02:36 +01:00
Sergio Martins
97faaea983 qtquick: Store the public class in 'q' pointer
As usual in Qt
2022-05-15 13:54:16 +01:00
Sergio Martins
35c7964365 qtquick: More porting of DockWidget_qtquick
Compiles now, but some things are commented out still.
2022-05-15 13:51:32 +01:00
Sergio Martins
65f74077d3 tests: Replace a usage of QWidgetOrQuick with View 2022-05-15 13:00:08 +01:00
Sergio Martins
d8cf526b5a Remove some dead code 2022-05-15 12:58:06 +01:00
Sergio Martins
5ce2c0eefd Replace another usage of QWidgetOrQuick with View 2022-05-15 12:56:55 +01:00
Sergio Martins
1a47d52ed9 Make View::handle() non virtual
So we can still do comparisons if ~View_qtwidgets was already called.
Otherwise it would be calling a pure-virtual.
2022-05-15 12:55:55 +01:00
Sergio Martins
383e4f8abd tests: Use tests_createView() instead of MyWidget2
Decouples tests from Qt a bit more
2022-05-15 12:20:30 +01:00
Sergio Martins
9698baefd0 tests: Remove unused HostedWidget 2022-05-15 12:20:30 +01:00
Sergio Martins
c5f05694aa Fix build due to missing include 2022-05-15 11:41:46 +01:00
Sergio Martins
cda924ac74 Ported RubberBand from QWidget to View 2022-05-14 10:36:53 +01:00
Sergio Martins
f719697852 Remove DockWidget::setWidget(QWidget) 2022-05-14 09:38:55 +01:00
Sergio Martins
df61c35314 Implemented ViewWrapper::sizePolicy() 2022-05-14 09:26:07 +01:00
Sergio Martins
a3f80ef2f8 Add .DS_Store to .gitignore 2022-05-13 15:33:15 +01:00
Sergio Martins
e6f05a7815 docs: Added documentation about the basic concepts.
Will add images next.
2022-05-13 00:39:00 +01:00
Sergio Martins
1ce6d3721e Add a mkdocs.yml file
So we can start writing internal documentation
2022-05-12 23:41:33 +01:00
Sergio Martins
07be3dd0d4 Port away from DockWidget::widget()
Use guestView() instead
2022-05-11 23:59:10 +01:00
Sergio Martins
f5fe7e6cc8 tests: Port away from QWidget further
DockWidget::widget() is getting removed in favor of guestView()
2022-05-11 23:51:57 +01:00
Sergio Martins
6d9fa9eecd cmake: Add an lcov preset and disable it on the dev preset
It's not very good for incremental development as one needs
to constantly remove the gcda files
2022-05-11 17:25:06 +01:00
Sergio Martins
313be585ae tests: More focus tests 2022-05-11 17:23:31 +01:00
Sergio Martins
8a725298de Added View::hasFocus() 2022-05-11 00:02:18 +01:00
Sergio Martins
721402b710 Remove a few usages of DockWidget::widget()
Use View instead of QWidget
2022-05-10 23:43:07 +01:00
Sergio Martins
73e6822a1d Added View::focusPolicy() 2022-05-10 23:23:27 +01:00
Sergio Martins
9f7c4cb217 Removed the DockWidgetBase typedef
That existed only to ease porting
2022-05-10 22:53:16 +01:00
Sergio Martins
855b572656 cmake: Enable gcov code coverage by default for dev preset 2022-05-09 23:46:27 +01:00
Sergio Martins
93e388e04f tests: tst_multisplitter is now run against all platforms 2022-05-09 17:38:22 +01:00
Sergio Martins
146b929b5d qtquick: Implement View::maximumSize() and test 2022-05-09 17:28:48 +01:00
Sergio Martins
5f38814fd2 qtquick: Fix crash during instantiation of Separator_qtquick
The qml file would call into the view which would call into the
controller while its d ptr wasn't initialized yet
2022-05-09 16:31:49 +01:00
Sergio Martins
45a364c44b qtquick: Normalize location of Separator.qml
We don't want any qml files outside of qtquick/ folder
2022-05-09 15:44:45 +01:00
Sergio Martins
d35afdf81c qtquick: Compile our qrc file too
Updated paths
2022-05-09 15:40:20 +01:00
Sergio Martins
5f7eb335e6 qtquick: Warn and bailout whenever we can't find the requested QML file 2022-05-09 15:37:36 +01:00
Sergio Martins
9173226be7 tests: Normalise signature of argc/argv to match QApplication's
Fixes crash when passing "platform -xcb", because argc was being
passed by value, decremented in QApplication, then going out
of bounds in QTest
2022-05-09 15:16:36 +01:00
Sergio Martins
5d8da8aab6 qtquick: Compile and return Separator in the framework factory 2022-05-09 14:41:21 +01:00
Waqar Ahmed
df00c13899 Add code coverage 2022-05-09 16:45:41 +05:00
Waqar Ahmed
d1567322ec Fix unused variable warning 2022-05-09 16:44:18 +05:00
Sergio Martins
eb42d9e3f0 workaround linking examples 2022-05-09 12:17:15 +01:00
Sergio Martins
79eb41298c qtquick: Port Separator to the new view architecture 2022-05-09 10:25:58 +01:00
Sergio Martins
e0f48c9f32 Added convenience View_qtquick::createQQuickItem() 2022-05-09 10:06:43 +01:00
Sergio Martins
f033e4eb36 qtquick: Fix the qml engine not being set 2022-05-08 23:13:44 +01:00
Sergio Martins
8751216f62 qtquick: Added a FrameworkWidgetFactory too
The impl is dummy, but at least Config doesn't return a nullptr
one, meaning we can have more involved tests for QtQuick
2022-05-08 23:12:20 +01:00
Sergio Martins
cfeb59ee8f qtquick: Move m_qmlEngine from Config to Platform_qtquick
As it's QtQuick specific it should be in the qtquick frontend folder.
2022-05-08 20:16:23 +01:00
Sergio Martins
3c340aee40 tests: Remove last traces of QWidget from tst_multisplitter 2022-05-08 19:56:25 +01:00
Sergio Martins
2b2c5efd1a tests: Don't instance Separator_qtwidgets directly
So it can support qtquick
2022-05-08 19:50:15 +01:00
Sergio Martins
985224f24b tests: Run tst_view on offscreen by default
Moved the QPA offscreen defaulting to Platform_qt
2022-05-08 19:38:52 +01:00
Sergio Martins
97f26743e5 tests: Decouple tst_multisplitter from QWidget more
It now asks the platform to create a test view instead of
using one that inherits from QWidget.
2022-05-08 19:33:04 +01:00
Sergio Martins
a3bf159281 tests: Minor, add two QCOMPARE 2022-05-08 19:21:28 +01:00
Sergio Martins
543427255f tests: Make the maxSize test compabitle with 1.0
we didn't call QWidget::setMaximumSize(), we just set a hint
2022-05-08 19:17:53 +01:00
Sergio Martins
8eba26fd53 tests: minor, add 2 QVERIFY 2022-05-08 19:09:39 +01:00
Sergio Martins
17b6b7f7b9 tests: minor, add a QCOMPARE for min position 2022-05-08 18:38:48 +01:00
Sergio Martins
0997d48d60 tests: Test View: Also set max size 2022-05-08 17:10:56 +01:00
Sergio Martins
6e6bd92d5e Minor debug improvement 2022-05-08 16:56:54 +01:00
Sergio Martins
a6e0fdb6b9 qtwidgets: Add missing layoutInvalidated() emittions
So tst_multisplitter can use generic View instead of its own
QtWidget specific implementation
2022-05-08 16:53:22 +01:00
Sergio Martins
7d27d76448 Port layoutInvalidated signal to KDBindings
This removes triplication between qtquick, qtwidgets and tests.
It also allows us to remove the usage of old-style Qt connect.
2022-05-08 15:23:40 +01:00
Sergio Martins
418c4514df tests: Remove some unneeded overridden methods in tst_multisplitter 2022-05-08 15:13:42 +01:00
Sergio Martins
bd675c09a1 Remove unused and old Widget_qwidget/Widget_quick 2022-05-08 14:00:00 +01:00
Sergio Martins
bacaa0127a qtquick: Move remaining contents from old/ into views/
They are not ported yet, bet let's do things in batches so we have less
context switches.
2022-05-08 13:54:56 +01:00
Sergio Martins
76b1a394f2 qtquick: Ported the old DockWidgetQuick to the new architecture
Mostly anyway. Facing several blockers that need to be ported first,
for example DockWidget::setWidget() is still receiving QWidget
2022-05-08 13:27:37 +01:00
Sergio Martins
984bcd5f06 qtquick: Ported Frame view to the new architecture 2022-05-08 12:20:33 +01:00
Sergio Martins
7ba5d1de3b qtquick: Remove old TabWidgetQuick 2022-05-06 18:50:43 +01:00
Sergio Martins
16cca5a719 qtquick: Move LayoutSaverInstantiator to new location 2022-05-06 18:48:33 +01:00
Sergio Martins
9d5c7bfc53 qtquick: Ported TabWidget to the new architecture 2022-05-06 18:04:25 +01:00
Sergio Martins
62c25eec2e Merge branch '1.6' 2022-05-05 14:28:47 +01:00
Sergio Martins
58b8633e3d Added KDDockWidgets::InitialVisibilityOption::PreserveCurrentTab
So you can insert into a tab group without changing the current
tab, if you want.
2022-05-05 14:28:07 +01:00
Sergio Martins
bc3126ebee Merge branch '1.6' 2022-05-05 10:46:14 +01:00
Sergio Martins
a743eafca1 Added DockWidgetBase::currentTabIndex() 2022-05-05 10:45:55 +01:00
Sergio Martins
d6f56169e1 qtquick: Ported TabBar to the new architecture 2022-05-03 22:01:47 +01:00
Sergio Martins
c0d9e3247b qtquick: Ported TitleBar to the new architecture 2022-05-03 20:24:20 +01:00
Sergio Martins
0a1a783054 Implemented ViewWrapper::window()
Implementation was missing for qtquick and add a bug for qtwidgets.
2022-05-03 20:02:14 +01:00
Sergio Martins
dc9a0145e2 tests: Rename ViewWrapper tests, they still said "View::" 2022-05-03 19:46:30 +01:00
Albert Astals Cid
2446519024 SideBar_p.h: Fix includes to make it usable from external projects 2022-05-03 10:43:37 +01:00
Sergio Martins
9f532fb543 qtquick: Implement ViewWrapper::minSize() 2022-05-02 23:40:14 +01:00
Sergio Martins
b719435ae8 qtquick: Implement ViewWrapper::objectName() 2022-05-02 23:27:09 +01:00
Sergio Martins
16816d47d6 Added Window::screen()
Which allows to make View::screen() non-virtual
2022-05-02 23:24:49 +01:00
Sergio Martins
a693a995b1 qtquick: Implement ViewWrapper_qtquick::grabMouse and releaseMouse 2022-05-02 23:19:21 +01:00
Sergio Martins
f8a287675b qtquick: Implement ViewWrapper::setParent and childViews 2022-05-02 23:10:00 +01:00
Sergio Martins
e462098cce tests: Move tst_view.cpp's main into a separate file, so it can be shared 2022-05-02 22:40:33 +01:00
Sergio Martins
3d2e45b5d5 tests: Add test for View::closeRequested 2022-05-02 22:00:15 +01:00
Sergio Martins
a49faeced6 Remove some duplicate TODOs, already in header 2022-05-02 21:35:04 +01:00
Sergio Martins
401ebc586e qtquick: Move all inline View methods into .cpp file 2022-05-02 21:33:07 +01:00
Sergio Martins
cccd3a47f0 View::closeWindow() is no longer virtual.
Implementation is common to all frontends.
Renamed it to closeRootView() to be consistent.
2022-05-02 17:54:00 +01:00
Sergio Martins
96912515a8 View::windowGeometry() is no longer virtual.
Implementation is the same for all frontends.
2022-05-02 17:33:44 +01:00
Sergio Martins
04785a8b49 View::parentSize() is no longer virtual
The implementation is common to all frontends.
2022-05-02 17:30:47 +01:00
Sergio Martins
2b129380d6 qtquick: Move a few implementations to cpp file 2022-05-02 17:28:41 +01:00
Sergio Martins
a6e698b0fe tests: Add a test for View::objectName 2022-05-02 17:23:39 +01:00
Sergio Martins
33d7d730f4 tests: Add a test for View::minSize() 2022-05-02 17:21:31 +01:00
Sergio Martins
5607fab8db tests: Add test for View::sizeHint 2022-05-02 10:29:46 +01:00
Sergio Martins
c2ae9abfb5 tests_createView() now receives a struct
As we'll be passing more parameters
2022-05-02 10:20:19 +01:00
Sergio Martins
a8cb498eb5 Amend previous commit, use *Controller as suffix 2022-05-02 00:05:18 +01:00
Sergio Martins
d0c1b94585 Remove *View and *Widget suffixes from layouts
They are controllers, not views.
2022-05-02 00:01:44 +01:00
Sergio Martins
e17f6c0066 Add some missing const 2022-05-01 23:58:14 +01:00
Sergio Martins
a550567a4c Rename asMultisplitterView to asDropArea
It's no longer a view.
2022-05-01 23:56:41 +01:00
Sergio Martins
3fabf34bee Renamed View::windowHandle() to View::window()
windowHandle() is missnamed in Qt because QWidget::window() was already
taken in Qt4. But we can make it better here.
2022-05-01 23:09:18 +01:00
Sergio Martins
0d02be6387 qtquick: Implement View::rootView() 2022-05-01 23:00:19 +01:00
Sergio Martins
fff3adf967 Rename View::window() to View::rootView()
window() was an artifact of Qt4 times, when QWindow didn't exist yet.
2022-05-01 22:52:00 +01:00
Sergio Martins
4b41291830 qtquick: Fix geometry() always returning 0,0 as position 2022-05-01 22:42:23 +01:00
Sergio Martins
8dd8eabf1a tests: tests_createView now can create visible views too 2022-05-01 22:21:08 +01:00
Sergio Martins
1591ed49da tests: Added tests for View::geometry,pos,x,y,width,height,rect 2022-05-01 21:15:27 +01:00
Sergio Martins
a069a812db tests: Remove qDebug() from doctest based tests
TestExplorer will fail to work if we print to stderr. Instead
we now print to stdout.
2022-05-01 20:17:51 +01:00
Sergio Martins
3416a74723 Don't make View::move(QPoint) pure-virtual
We already have a virtual overload, just call it.
2022-05-01 20:12:32 +01:00
Sergio Martins
58afb97eb2 qtquick: Move the rest of old/QWidgetAdapter_quick to View_qtquick 2022-05-01 20:01:46 +01:00
Sergio Martins
738a78d12b qtquick: Implement View::windowHandle() and Window_qtquick::rootView()
For QtWidgets it now calls create() in the ctor so we have a window
during tests.
2022-05-01 14:38:20 +01:00
Sergio Martins
545c45e78d qtquick: Port a bunch of methods from the old QWidgetAdapter 2022-05-01 13:11:32 +01:00
Sergio Martins
0a3c2433e7 qtquick: Implement setGeometry and related methods 2022-05-01 12:46:14 +01:00
Waqar Ahmed
df7627c08a Use QVariant::userType instead of QVariant::type 2022-05-01 02:43:31 +05:00
Sergio Martins
b089b49b28 qtquick: Implement and test View::hide() too 2022-04-30 11:47:02 +01:00
Sergio Martins
7547163d2d qtquick: Implement View::isVisible/setVisible 2022-04-30 11:42:53 +01:00
Sergio Martins
95f61629a9 tests: Print the name of the platform we're testing 2022-04-30 11:33:02 +01:00
Sergio Martins
3227ffab81 qtquick: Implemented and tested View::parentView/childViews
tst_view is now enabled for QtQuick too
2022-04-30 11:27:47 +01:00
Sergio Martins
1ecc42d50c tests: Fix memory leaks in tst_view 2022-04-30 11:19:12 +01:00
Sergio Martins
712751e89b tests: Make tst_view test View, not ViewWrapper 2022-04-30 11:08:54 +01:00
Sergio Martins
b6d87d10c4 Add a TestHelpers_ file for each platform
So we don't have too much ifdefed stuff that's only for tests in
the main files.
2022-04-30 10:31:31 +01:00
Sergio Martins
59e5759bc2 qtquick: initialize the the QQmlEngine during tests 2022-04-30 01:20:09 +01:00
Sergio Martins
ee256284cc Remove View::isWindow(), use isRootView() instead.
QWidget::isWindow() is misnamed in Qt, it's an artifact from Qt4
times.
2022-04-30 01:10:24 +01:00
Sergio Martins
f3934ebd2c Rename View::isTopLevel() to isRootView() 2022-04-30 01:06:03 +01:00
Sergio Martins
22a43eb9af Add 3rdparty/doctest
It's header only.
2022-04-30 00:56:28 +01:00
Sergio Martins
ba92225678 Implement View_qtquick::setParent and setObjectName 2022-04-30 00:43:27 +01:00
Sergio Martins
496451c434 Implemented Platform_qtquick::tests_createView()
Creates a view for us to test with.
2022-04-29 19:15:02 +01:00
Sergio Martins
9d52f40632 Make the qtquick files compile
They weren't being built.
Build-system is simplified for now.
2022-04-29 19:00:40 +01:00
Sergio Martins
c55cac97d0 tests: Add unit-test for View::setParent() 2022-04-29 18:46:28 +01:00
Sergio Martins
8d09acdf5f tests: Fix warning about requiring to call init after qApp 2022-04-29 18:05:24 +01:00
Sergio Martins
fcf02fc8bf tests: Move isGammaray() into Platform_qt 2022-04-29 15:52:46 +01:00
Sergio Martins
721d344533 tests: Delete platform when test finishes 2022-04-29 15:47:54 +01:00
Sergio Martins
9dc53f9755 tests: Create the QApplication in Platform ctor
Other frontends won't use QApplication, and QtQuick might even use
just QGuiApplication eventually
2022-04-29 15:36:16 +01:00
Sergio Martins
aa72a8cd5a Add Platform_qtwidgets::init(), so we can share some code with ctors 2022-04-29 15:09:43 +01:00
Sergio Martins
099a9018df Make it easier for tests to init the platform
Only a single static method is needed now, instead of 2.
2022-04-29 14:34:32 +01:00
Sergio Martins
34b07ef340 Delete the Platform when a test is complete
So that we support testing multiple platforms in the same test run
2022-04-29 14:05:35 +01:00
Sergio Martins
3907660dde Set s_platform to nullptr when dtor runs 2022-04-29 13:53:36 +01:00
Sergio Martins
3d1b450cbb Remove View::minimumSizeHint()
It's a QWidget specific concept, so move it to the qtwidgets
frontendcode. QtQuick won't need it.
2022-04-29 00:27:07 +01:00
Sergio Martins
93ccaff407 test: Fix test failure due to unimplemented wrapper method 2022-04-28 21:27:32 +01:00
Sergio Martins
a2d17fd0b9 Added Platform::frontendTypes()
Needed by the tests
2022-04-27 10:44:44 +01:00
Sergio Martins
9fa80d2061 vscode: Remove the Qt6 build folder from the Qt5 namespace 2022-04-26 23:40:35 +01:00
Sergio Martins
5ef9f4e8ac vscode: Configure TestMate extension, tell it where the tests are 2022-04-26 23:39:48 +01:00
Sergio Martins
bcd639599a Port tst_viewguard.cpp to doctest
doctest will be the unit-test framework for new tests, since we'll
have a lot of non-Qt code.
2022-04-26 23:35:25 +01:00
Sergio Martins
1b8ac876ce Port away from WidgetType typedef
Introduces View::childViews(), required for the porting
2022-04-26 00:13:07 +01:00
Sergio Martins
420a85943a Finally remove View::asQWidget()
Soon we can start the QtQuick port to the new architecture
2022-04-26 00:00:23 +01:00
Sergio Martins
00bee2edcb Move the "kddockwidgets_qwidget" property hack into the Qt platform
This removes the last usages of asQWidget() from the generic part.
2022-04-25 20:44:05 +01:00
Sergio Martins
41383bf7a4 Remove more asQWidget() instances, only 3 remaining now 2022-04-25 20:25:56 +01:00
Sergio Martins
3bb0c6a8d2 Move MDIArea to qtwidgets/ as it was never ported to QtQuick
Can be ported if needed
2022-04-25 20:16:25 +01:00
Sergio Martins
0f61ef63a2 Split DropArea and MDILayout into View/Controller 2022-04-25 18:50:41 +01:00
Sergio Martins
6ebb432932 Port LayoutWidget away from QWidget
DropArea and MDILayout now inherit from it, in addittion to QWidget.
This mean DropArea can now be split into View/Controller alone,
without having to port LayoutWidget and MDILayout in the same commit,
which would be hard to review.
2022-04-24 12:57:20 +01:00
Sergio Martins
b08c49e788 Update KDBindings/signal.h
Has support for scoped connection handle now.
It disconnects the connection when deleted
2022-04-24 12:56:06 +01:00
Sergio Martins
1b6fa1bd36 Rename Type::MultiSplitter to Type::DropArea
MultiSplitter was removed
2022-04-23 15:28:17 +01:00
Sergio Martins
dc6d77e266 Fold MultiSplitter into DropArea
The separation was never very useful. There's was always only
one derived class, the DropArea. Merge the two.
2022-04-23 15:22:38 +01:00
Sergio Martins
4f5ffa2370 Add DropArea_qtwidgets stub 2022-04-23 14:42:03 +01:00
Sergio Martins
860a1a1bb0 Move DropArea into Controllers namespace
In preparation for View/Controller split.
2022-04-23 12:14:30 +01:00
Sergio Martins
daa6afd14c Move DropArea into controllers/
In preparation to split it into View/Controller.
This is just the move, no code changed yet.
Next will be the namespace change.
2022-04-23 11:46:11 +01:00
Sergio Martins
28754ec260 Fold DropAreaWithCentralFrame into DropArea
This separation was never useful
2022-04-23 00:17:20 +01:00
Sergio Martins
ab0208b603 Remove the remaining asQWidget usages from WidgetResizeHandler
Remaining ones in the code base are because DropArea isn't ported
to View yet, that will come next
2022-04-21 23:15:04 +01:00
Sergio Martins
358dfd4cb7 Replace some usages of asQWidget with asQObject
That at least allows us to start the QtQuick port
2022-04-21 22:57:57 +01:00
Sergio Martins
6d2d5ca0ed Add View::setMouseTracking() 2022-04-21 22:50:46 +01:00
Sergio Martins
e71c54f041 Add View::setCursor() 2022-04-21 22:41:52 +01:00
Sergio Martins
f9c3a301b5 Add View::render() 2022-04-21 22:31:11 +01:00
Sergio Martins
2c162630f4 Add View::setWindowOpacity() 2022-04-21 22:24:18 +01:00
Sergio Martins
8015e49bee Add Platform::screenSizeFor(window), removes more asQWidget() usage 2022-04-21 22:10:59 +01:00
Sergio Martins
3f97845c9c Use Window instead of QWindow in a few more places 2022-04-21 21:50:58 +01:00
Sergio Martins
4946cdeed3 Add Platform::screenNumberFor, removes more asQWidget() usage 2022-04-21 21:47:55 +01:00
Sergio Martins
eff3798987 Remove a few unused functions 2022-04-21 20:20:49 +01:00
Sergio Martins
554deb22da Add View::releaseKeyboard(), removes some asQWidget() usage 2022-04-21 20:13:10 +01:00
Sergio Martins
0249b0e933 Remove more usages of asQWidget()
Adds View::mapTo()
2022-04-20 23:18:41 +01:00
Sergio Martins
2f59fb197b Remove more usages of asQWidget() 2022-04-20 23:07:16 +01:00
Sergio Martins
38df31e99f Port away from qApp->sendEvent() 2022-04-19 19:38:20 +01:00
Sergio Martins
a6cbfbf065 Rename tests_sendEvent() to sendEvent()
Non-test code will also need it
2022-04-19 19:32:56 +01:00
Sergio Martins
28b210586c Remove deprecated and now unused Widget_*h classes 2022-04-19 19:28:15 +01:00
Sergio Martins
33073c75ee tests: Remove the last usage of asQWidget() from tests/
Now only a few remaining in src/
2022-04-19 19:26:34 +01:00
Sergio Martins
23b2ea7195 tests: Remove last usage of asQWidget() from tst_docks.cpp 2022-04-19 19:20:46 +01:00
Sergio Martins
80beeb7ffb tests: Remove last 2 usages of asQWidget from tst_qtwidgets.cpp
That method will be removed from View soon
2022-04-19 19:17:48 +01:00
Sergio Martins
d2b5bedfa1 tests: Remove another usage of deprecated asQWidget() 2022-04-19 19:14:58 +01:00
Sergio Martins
d5cec9f5de tests: Move QtWidget specific tests to tst_qtwidgets.cpp
Let's have less ifdefs
2022-04-19 19:07:57 +01:00
Sergio Martins
05deea3cd8 tests: Move some ifdefed code to their respective platforms 2022-04-19 17:44:36 +01:00
Sergio Martins
7632278ba8 Remove asQWidget() instances from tst_multisplitter
This test is QWidget only, but we want to remove View::asQWidget(),
so just cast directly here.
2022-04-19 16:55:33 +01:00
Sergio Martins
faf3971044 Merge branch '1.6' 2022-04-19 15:54:26 +01:00
Sergio Martins
6166e5805c Don't show middle dock indicator if frame isn't dockable
This was implemented but the logic was wrong.
Fixes central persistent showing the central indicator.
2022-04-19 15:53:42 +01:00
Sergio Martins
8e4e998e74 tests: port away from QApplication::topLevelAt() 2022-04-14 23:44:39 +01:00
Sergio Martins
995882d2d1 tests: More porting away from asQWidget() 2022-04-14 19:06:41 +01:00
Sergio Martins
c8b896bdd6 tests: Remove casts to QTabBar 2022-04-14 18:31:41 +01:00
Sergio Martins
201e631a0b tests: Remove some QPointer usage
Which in turn also removes some asQWidget() usage
2022-04-14 18:22:32 +01:00
Sergio Martins
a3d1990857 tests: Port more tests away from asQWidget() 2022-04-14 18:05:23 +01:00
Allen Winter
ba79f754dc Merge branch '1.6' 2022-04-14 12:40:48 -04:00
Allen Winter
b1379f0bef .pylintrc - initial pylint config file 2022-04-14 12:40:17 -04:00
Allen Winter
f3da0f0547 various - fix some misspellings 2022-04-14 12:27:29 -04:00
Allen Winter
61a4373459 Merge branch '1.6' 2022-04-14 12:01:28 -04:00
Allen Winter
b2fc0c3eb1 various - update copyright year 2022-04-14 12:01:05 -04:00
Sergio Martins
924b32b3c5 tests: Port some QWindow based utils to Window::Ptr
So it doesn't depend on Qt
2022-04-13 23:49:29 +01:00
Sergio Martins
664798ee6e tests: Remove some asQWidget() calls 2022-04-13 22:28:04 +01:00
Sergio Martins
2dd39ad0cb Merge branch '1.6' 2022-04-12 17:02:17 +01:00
Sergio Martins
6e7268e42a Workaround QTBUG-102430, don't move still maximized window
When dragging a maximized window we show normal, but we can
only start moving it when the window managers acknowledges the new
state. The state in QWidget isn't reliable.
2022-04-12 16:37:14 +01:00
Sergio Martins
7e6c5b2d9f Save the last known window state from the window manager POV
Required for QTBUG-102430
2022-04-12 14:56:20 +01:00
Sergio Martins
9a9676cb7a Add a TODOv2 comment about writing the same fix for QtQuick 2022-04-11 22:33:45 +01:00
Sergio Martins
aff86c3e0f Add a comment regarding QTBUG-102430 2022-04-11 22:31:26 +01:00
Sergio Martins
d4fe17a0bf Workaround FloatingWindow::windowStateChanged regarding QTBUG-102430
QWidget::windowStateChanged isn't useful as it's emitted once sync
and another async, with the same value. Only the async one is useful
as it will represent the real window manager state. Then we can do
further moves.

The QWindow one happens to be good (async), so use that one instead.
2022-04-11 22:10:30 +01:00
Sergio Martins
90bd78846a tests: Port away from a few Qt specific waitForEvent
Removes a bunch of asQWidget() from the tests
2022-04-11 15:14:51 +01:00
Sergio Martins
31db3d9562 Port away from QTest::qWaitForWindowActive, it's Qt specific
Simpliy moved it to Platform_qt
2022-04-11 11:37:31 +01:00
Sergio Martins
52d91d350b Remove qtwidgets usage from Config 2022-04-11 01:51:41 +01:00
Sergio Martins
432ff65cc2 Remove QTimer hacks from Platform
It's now instantiated after qApp, so it's safe
2022-04-11 01:48:48 +01:00
Sergio Martins
037140b980 Add KDDockWidgets::initPlatform()
Instead of using the static variable, which is initialized before
having QApplication.

Will allow us to remove the QTimer from Platform init
2022-04-11 00:55:28 +01:00
Sergio Martins
8cd05c7314 Add Platform::createDefaultFrameworkWidgetFactory() 2022-04-10 23:54:52 +01:00
Sergio Martins
ec0e841bb8 Introduce qtwidgets/FrameworkWidgetFactory_qtwidgets
It doesn't scale to support all platforms with ifdefs, instead, use one
file per platform
2022-04-10 21:15:10 +01:00
Sergio Martins
613a18f60c Delete operator== for ViewWrapper
Fixes a bug in the tests too
2022-04-10 20:47:33 +01:00
Sergio Martins
d6fd54cec4 Por all usages of QWindop/windowHandle to KDDockWidgets::Window
Removes a lot of asQWidget() code and is also prepared for non-Qt
views.
2022-04-09 19:21:56 +01:00
Sergio Martins
4e47518a3f Merge branch '1.6' 2022-04-08 14:27:28 +01:00
Sergio Martins
ab2843f3ef Update ChangeLog 2022-04-08 14:12:35 +01:00
Sergio Martins
0e5247e039 Use FloatingWindow::isMaximizedOverride() instead of isMaximized()
This is for issue #286.
Allows users to workaround buggy window managers.
2022-04-08 14:12:35 +01:00
Sergio Martins
6413266df3 Linux: Fix dragging of maximized floating windows
They should restore their normal size when the drag starts

(cherry picked from commit 1305dee081)
2022-04-08 14:12:35 +01:00
Allen Winter
c6ce421432 CMakeLists.txt - Python bindings are not supported in Unity builds
fixes #284
2022-04-08 08:42:06 -04:00
Sergio Martins
47f773ab7c Use FloatingWindow::isMaximizedOverride() instead of isMaximized()
This is for issue #286.
Allows users to workaround buggy window managers.
2022-04-08 12:17:37 +01:00
Sergio Martins
5a8f176860 Add Window
A non-Qt abstraction around QWindow
2022-04-08 11:45:15 +01:00
Sergio Martins
8cfb10ef10 Use View::setParent() instead of QWidget::setParent() 2022-04-07 22:54:50 +01:00
Sergio Martins
95671f9d9a Add Platform_qt, a baseclass for both Qt frontends
So we can share some code between QtQuick and QtWidgets
2022-04-07 23:48:40 +01:00
Sergio Martins
427af43904 Remove some QtWidgetisms from DockRegistry 2022-04-07 23:16:43 +01:00
Sergio Martins
4944ad5882 Add Platform::qobjectAsView()
to be removed once we port away from Qt, but needed for now to
support QtQuick
2022-04-07 23:10:01 +01:00
Sergio Martins
59f9824cc2 Fix typo during porting of test 2022-04-07 22:48:09 +01:00
Sergio Martins
71f0b644f2 Port away from including TitleBar_qtwidgets in tests 2022-04-07 22:43:56 +01:00
Sergio Martins
b60b54327b Port away from Item::guestAsQObject()
Use Item::guestView() instead.
2022-04-07 22:27:22 +01:00
Sergio Martins
0f2da43737 Rename guestWidget to guestView
As we deal in View now
2022-04-07 20:12:47 +01:00
Sergio Martins
558bd42447 tests: Remove more QWidget dependencies 2022-04-07 00:49:36 +01:00
Sergio Martins
7107bfe3e6 Remove _qtwidget include from utils.h 2022-04-07 00:40:25 +01:00
Sergio Martins
be150c1c52 Port DockRegistry away from QGuiApplication::focusObjectChanged
Use the Qt agnostic way, from Platform.h
2022-04-07 00:24:06 +01:00
Sergio Martins
9f4cb1a13e Port FocusScope away from QGuiApplication 2022-04-05 23:01:29 +01:00
Sergio Martins
0addad590e ViewGuard: Add a -> const operator too
So we can call it if const
2022-04-05 23:00:20 +01:00
Sergio Martins
793e48150a Don't access qApp directly from Platform's ctor
QApplication might not be created yet, so delay it
With a timer for now. Don't guarantee this will stay.
Explicit init by the user might be an alternative.
2022-04-05 22:29:01 +01:00
Sergio Martins
3ba4bc2d08 Add Platform::focusedView() and respective signal
Implemented as QGuiApplication::focusObjectChanged() for Qt,
other frontends will have their own impl.
2022-04-05 21:53:52 +01:00
Sergio Martins
43faf85eb4 Add View::isNull()
ViewWrappers don't have ownership of the gui element.
The gui element might have been deleted, leaving us with a
stale wrapper

For impl simply use a QPointer in the QtWidgets and QtQuick
backends
2022-04-05 21:50:21 +01:00
Sergio Martins
ad3febd87e Add copyright headers to tst_viewguard 2022-04-05 21:29:35 +01:00
Sergio Martins
3e4d172765 ViewGuard: Add a copy-ctor 2022-04-05 21:29:35 +01:00
Waqar Ahmed
607ec01feb Extend tst_viewguard to test signal trigger after destruction 2022-04-06 01:13:50 +05:00
Sergio Martins
dc14a309a7 ViewGuard: Fix potential crash if the ViewGuard is deleted.
There was nothing disconnecting from the lambda.
Probably KDBindings needs a ConnectionHolder RAII class
2022-04-05 20:28:05 +01:00
Sergio Martins
fdc56b938e ViewGuard: Fix ctor and assign operator having different behaviours
The difference was very small: The ctor honoured View::inDtor()
while the assign op didn't. It's easy to make them behave the same
by creating a setView() method

As a side-effect the duplicate connect() is also gone now
2022-04-05 20:25:14 +01:00
Sergio Martins
4b62714ef5 ViewGuard: Fix clear() not disconnecting
When clear is called we should disconnect the signal, as it won't
be needed anymore. Benign though.
2022-04-05 20:18:09 +01:00
Sergio Martins
2763aec6c2 ViewGuard: Fix English typo in comment 2022-04-05 20:15:05 +01:00
Sergio Martins
73b874ec0b Remove stray qDebug from Platform.cpp 2022-04-05 20:10:24 +01:00
Sergio Martins
124b521308 ViewGuard: Add copyright headers
Some formatting too.
2022-04-05 20:09:24 +01:00
Sergio Martins
e09d4e2d3b Merge branch '1.6' 2022-04-05 17:27:37 +01:00
Sergio Martins
1f638d2c7a tests|qtquick|Windows: Stabilize a test
The warning is benign and unrelated to anything kddw is doing
2022-04-05 17:26:38 +01:00
Sergio Martins
0897263fc9 Merge branch '1.6' 2022-04-05 17:14:21 +01:00
Albert Astals Cid
7b73393095 Fix position of right overlay dockwidgets when there's a toolbar on the left 2022-04-05 17:13:29 +01:00
Albert Astals Cid
570f2c7e30 Fix position of right overlay dockwidgets when there's a toolbar on the left 2022-04-05 17:11:01 +01:00
Waqar Ahmed
b573d3f0f7 Introduce ViewGuard: A weak ptr to View 2022-04-05 17:05:17 +05:00
Sergio Martins
862c5f21d4 Update ChangeLog
For 1305dee081
Fixes #286

I might backport to 1.6 if I'm happy with it
2022-04-05 12:21:01 +01:00
Sergio Martins
1305dee081 Linux: Fix dragging of maximized floating windows
They should restore their normal size when the drag starts
2022-04-05 12:18:57 +01:00
Waqar Ahmed
84497f422d Fix fallthrough warning 2022-04-05 10:11:46 +01:00
Sergio Martins
ccd7557c75 Add View::beingDestroyed signal
It's emitted in ~View
2022-04-05 10:11:37 +01:00
Sergio Martins
1116eff816 Don't create ViewWrappers with nullptr
Instead return a null shared ptr
2022-04-04 22:36:16 +01:00
Sergio Martins
55ab08129a Deal the wrappers in shared_ptr instead of unique_ptr
Easier to pass around and better for our use case, where we
actual can have shared usage
2022-04-04 22:14:19 +01:00
Sergio Martins
c94705593f Update qtquick stubs
Not compilable yet, but not in cmake either
2022-04-04 21:54:27 +01:00
Sergio Martins
4f0f82f6b4 Add ViewWrapper_qtquick stub 2022-04-04 21:52:41 +01:00
Sergio Martins
b76e45064f Add View_qtquick stub 2022-04-04 19:06:17 +01:00
Sergio Martins
97653f03be qtquick: Move old (unported) files to old/ folder
We'll start moving them to views/ and cleaning/porting them
2022-04-04 18:35:12 +01:00
Waqar Ahmed
96f3100f77 Cleanup nlohmann_qt_helpers 2022-04-04 22:27:29 +05:00
Waqar Ahmed
06501c8a70 Header include guards for nlohmann_qt_helpers 2022-04-04 22:20:59 +05:00
Waqar Ahmed
dc93db9276 Add nlohmann QDebug helper 2022-04-04 22:20:59 +05:00
Waqar Ahmed
d6e678883c remove toVariantMap/fromVariantMap functions 2022-04-04 21:51:16 +05:00
Waqar Ahmed
3c424474ee Restore layout using nlohmann directly 2022-04-04 21:51:16 +05:00
Sergio Martins
631736b202 Abstract away a call to qApp->activePopupWidget()
It's now generic and doesn't depend on QApplication.
Removes an ifdef.
2022-04-04 16:43:01 +01:00
Sergio Martins
495ef0dd6a Move QmlTypes references out of DockRegistry
As it's specific to QtQuick
2022-04-04 16:36:17 +01:00
Sergio Martins
2a379d8735 Add Platform_qtquick
CMake hacked for now. Not sure if we should allow building
both QtWidgets and QtQuick frontends at the same time
2022-04-04 16:30:57 +01:00
Sergio Martins
6fcc55ce60 Add missing include 2022-04-04 16:30:41 +01:00
Sergio Martins
a36f85aae3 Add Platform and Platform_qtwidgets
So we can start removing QtWidgets vs QtQuick ifdefs.
Each "platform" will implement the differences
2022-04-04 16:21:35 +01:00
Sergio Martins
ac5cb637e7 Move DebugWindow to qtwidgets
As it's QtWidgets specific
2022-04-04 14:51:15 +01:00
Allen Winter
185ef5eb63 appveyor.yml - exclude wip/v2 branch 2022-04-04 14:51:15 +01:00
Waqar Ahmed
46b4e50a23 Save layout directly using nlohmann 2022-04-04 12:28:06 +05:00
Sergio Martins
e593233b8f Renamed views_qtwidgets/ into qtwidgets/views/
As there will be some files that are specific to QtWidgets and
but aren't views
2022-04-03 23:51:02 +01:00
Sergio Martins
852ff762c5 Rename views_qtquick/ qtquick/views/ 2022-04-03 23:44:31 +01:00
Sergio Martins
c12b0c161f Port layoutlinter away from direct QtWidget dependencies 2022-04-03 23:43:02 +01:00
Sergio Martins
84fb080d13 Remove more QWidget dependencies 2022-04-03 23:40:01 +01:00
Sergio Martins
81e5d14e4f Cleanup DropArea and base classes re receiving QWidget
They receive View now
2022-04-03 23:19:53 +01:00
Sergio Martins
ad1b77f79e Add MainWindow view interface 2022-04-03 22:25:57 +01:00
Sergio Martins
6cbf7247ce Fix crash, was mis-ported 2022-04-03 21:29:04 +01:00
Sergio Martins
d5700d94e6 MainWindow controller now receives View parent instead of QWidget 2022-04-03 21:23:03 +01:00
Sergio Martins
e9f287e2d7 More porting away from _qtwidgets 2022-04-03 21:09:37 +01:00
Sergio Martins
79f9f72ef4 DockWidget: decouple more from QtWidgets 2022-04-03 20:06:31 +01:00
Sergio Martins
a70b419c34 Remove one usage of DockWidget_qtwidgets 2022-04-03 00:23:39 +01:00
Sergio Martins
3cdd33f42f Add Frame view interface 2022-04-02 23:57:48 +01:00
Sergio Martins
2f0cbf83e9 Added SideBar view interface 2022-04-02 22:47:26 +01:00
Sergio Martins
f2aaf65674 Added TabBar view interface
Removes some dependencies to QtWidget
2022-04-02 22:38:33 +01:00
Sergio Martins
5681a5a231 Add a Stack view interface
So that stack controller doesn't depend on QtWidgets
2022-04-02 19:36:25 +01:00
Sergio Martins
aab3de29e1 Add a title bar interface, so we don't need to depend on TitleBar_qtwidgets 2022-04-02 18:50:35 +01:00
Sergio Martins
08d84337e7 Remove some unneeded includes 2022-04-02 15:45:06 +01:00
Sergio Martins
9b18ffb05c Port away from asQWidget()->screen(), use screen() directly 2022-04-02 15:45:00 +01:00
Sergio Martins
dcdd9333d4 Remove a bunch of asQWidget() calls 2022-04-02 15:34:38 +01:00
Waqar Ahmed
7bb363d3b2 Start moving layout saving to use nlohmann without involving Qt 2022-04-02 00:41:15 +05:00
Waqar Ahmed
c8127c1b36 Add QRect, QSize, QStringList nlohmann helpers 2022-04-02 00:40:20 +05:00
Waqar Ahmed
57dc7396ee Allow using system nlohmann 2022-04-01 23:47:27 +05:00
Waqar Ahmed
c781e82c37 Move nlohmann_qt_helpers.h to src 2022-04-01 23:45:15 +05:00
Waqar Ahmed
ea1fbf021d Move nlohmann into a subdirectory of 3rdparty
This helps us to use system one.
2022-04-01 23:44:35 +05:00
Sergio Martins
a754743014 More porting away from using Frame_qtwidgets directly in backend 2022-03-31 23:40:20 +01:00
Sergio Martins
c95d857483 Port away from casting to Frame_qtwidgets in most places
it's generic now
2022-03-31 23:17:27 +01:00
Sergio Martins
8ea346ca4a Added View::asFrameController() 2022-03-31 18:39:52 +01:00
Sergio Martins
1b3f90d73f Port away from casting to FloatingWindow_qtwidgets in the backend
Backend shouldn't know _qtwidget types exist
2022-03-31 18:36:40 +01:00
Sergio Martins
6687485e4c Introduce View::handle() and View::equals()
So we can compare two windows without calling asQWidget().
2022-03-31 17:34:37 +01:00
Sergio Martins
79abef21a5 Introduce View::parentView()
Similar to QWidget::parentWidget(), but not tied to QWidgets.

Allows to start removing some asQWidget() calls, as seen in Frame::floatingWindow(),
did it for POC.

Still need to find a generic way to compare 2 QWidget pointers
2022-03-31 16:47:37 +01:00
Sergio Martins
3fe1a8e79f Add View::asFloatingWindowController() 2022-03-31 16:27:37 +01:00
Sergio Martins
076125e0cf Add Controller::is() 2022-03-31 12:37:07 +01:00
Sergio Martins
0d8479b206 Add Controller::type() 2022-03-31 12:28:34 +01:00
Sergio Martins
cb2930f0e9 Move Type enum out of View, into KDDockWidgets namespace 2022-03-31 11:45:28 +01:00
Sergio Martins
2574e91634 Add convenience View::is(Type) 2022-03-30 23:09:08 +01:00
Sergio Martins
17cac581b8 Don't access side bar controller before it's initialized
As detected by UBSAN
2022-03-30 19:57:59 +01:00
Sergio Martins
b6bc3810bd tests: Remove unneeded deletion of top-level windows
They are deleted automatically nowadays
2022-03-30 19:36:17 +01:00
Sergio Martins
15cb93ed43 Port away from Controller::window() returning a QWidget
It now returns a ViewWrapper, which is agnostic to QtWidgets
2022-03-30 19:30:18 +01:00
Sergio Martins
bc09ec8a6a Merge branch '1.6' 2022-03-30 15:34:58 +01:00
Allen Winter
1354fa8a4a appveyor.yml - exclude wip/v2 branch 2022-03-30 10:30:10 -04:00
Sergio Martins
1a85363faf Preserve order of tabs when re-docking a tabbed group
Since our workaround isn't an atomic operation, each dock widget
was saving its new tab index while we were in the middle of a restore.

So be sure we set their correct index and restore "current" at the end.

Fixes #279
2022-03-30 15:26:11 +01:00
Sergio Martins
7f021248bf vscode: Remove ms-vscode.cpptools based launchers from linux/macOS
Replaced them with CodeLLDB based launchers.
This allows to not depend on binary-blob from microsoft and reduces
having to have 2 configs, now macOS uses the same one as Linux.
2022-03-30 14:49:42 +01:00
Sergio Martins
9d8d6f33ef Update ChangeLog with 3rdparty JSON library dependency 2022-03-30 11:51:31 +01:00
Sergio Martins
15601fc3c9 Split MainWindow into view/controller 2022-03-30 11:51:31 +01:00
Waqar Ahmed
eb3ad6b5a3 Use nlohmann for layout save/restore instead of QJson* 2022-03-30 11:51:26 +01:00
Waqar Ahmed
2434455d41 Add nlohmann helpers for qt 2022-03-30 11:51:13 +01:00
Waqar Ahmed
62fe37be9f Add nlohmann::json 2022-03-30 11:50:45 +01:00
Sergio Martins
f2957e35d5 Moved MainWindow into Controllers namespace
All renamings and movings are done, next step is to make the controller
a proper controller, and same for the view.
2022-03-25 11:30:40 +00:00
Sergio Martins
ba08d0c131 Fix clang build due to -Wweak-vtables
That's to be fixed in KDBindings first
2022-03-25 11:30:04 +00:00
Sergio Martins
65a6201121 Fix unused private field warning on clang
More methods to be implemented soon, but let's have at least 1
now to get rid of the warning
2022-03-25 11:29:49 +00:00
Sergio Martins
9fba1e9799 Rename Controller::DockWidgetBase to Controller::DockWidget
As done for other controllers
2022-03-25 10:53:02 +00:00
Sergio Martins
8656108e81 Renamed MainWindowBase to MainWindow
As done for other controllers
2022-03-25 10:47:20 +00:00
Sergio Martins
63b5109113 Rename Views::MainWindow to Views::MainWindow_qtwidgets
As done for other views
2022-03-25 10:41:46 +00:00
Sergio Martins
264b08a731 Move MainWindow view into Views namespace 2022-03-25 10:40:16 +00:00
Sergio Martins
0c686c1339 Renamed MainWindowBase.h to MainWindow.h
As done for other controllers
2022-03-25 10:30:07 +00:00
Sergio Martins
27007184aa Rename MainWindow.h to MainWindow_qtwidgets.h
Just like the other views.
2022-03-25 10:27:25 +00:00
Sergio Martins
7e2f448ae1 Moved MainWindowBase/MainWindow into controllers/view folder
This is just the move, not ported yet
2022-03-25 10:21:07 +00:00
Sergio Martins
90a9159748 Introduce ViewWrapper - a non-owning view
In many cases we need to access widgets that weren't created by
KDDW, in that case we have no View. Since all our APIs want to
deal in View and not in QWidget, we need a way to wrap stuff like
QWidget::window() and windowHandle()

All methods are unimplemented. Will only implement those that
are required/used.
2022-03-25 10:03:46 +00:00
Sergio Martins
e0e6d1fd3e Merge both Logging_p.cpp into the same one
the multisplitter abstraction is no longer the way we want to
abstract the framework
2022-03-24 16:59:50 +00:00
Sergio Martins
123fcdde1f Remove unused backend_temp_includes/ folder 2022-03-24 16:53:27 +00:00
Sergio Martins
15956ab222 Move all the QtQuick files to views_qtquick/
It's not ported yet, bet at least they are in their final folder
and not polutting the rest
2022-03-24 16:43:27 +00:00
Sergio Martins
c6d95c42a8 Split most widgets into a Controller and a View
Controllers don't have any GUI and don't depend on the frontend
technology.

Views are implemented in a specific GUI tech (QtWidgets, QtQuick, etc).

For now only QtWidgets work. There's still a lot to decouple.

This will make it easier to introduce non-Qt backends.
2022-03-24 16:05:37 +00:00
Sergio Martins
bec69e17a2 Fix QtQuick build 2022-03-21 15:40:07 +00:00
Allen Winter
fe7497ab92 Merge branch '1.6' 2022-03-15 08:09:25 -04:00
Allen Winter
057b33179a Changelog - we didn't have a formal 1.5.1 release
move the 1.5.1 changes to 1.6.0 since we never had a 1.5.1
2022-03-15 08:08:14 -04:00
Allen Winter
030b3c34d2 CMakeLists.txt, Changelog - open for version 1.7 2022-03-15 08:04:35 -04:00
Allen Winter
4945e6318c CMakeLists.txt - set version to 1.5.99 (ie. Release Candidate) 2022-03-15 08:00:46 -04:00
Allen Winter
339edf1143 appveyor.yml - re-enable testing on Windows 2022-03-15 07:59:43 -04:00
Allen Winter
f98ce37c12 appveyor.yml - fix PATH on Windows
forgot the Qt "bin"
2022-03-15 07:58:39 -04:00
Sergio Martins
743dbc0718 Added dockWidgetInserted|Removed signals to TabBarWidget
Since QTabBar doesn't have them.
Useful for custom tab bars
2022-03-12 12:47:26 +00:00
Sergio Martins
fd4588de0f TitleBarWidget: Mark members as protected
So custom titlebars have more power
2022-03-12 12:31:53 +00:00
Sergio Martins
6ba10cfe12 Added TitleBar::tabBar()
Useful for people writing custom titlebar's with style that depends
on the current tab
2022-03-11 18:21:49 +00:00
Sergio Martins
096176dc72 Don't dereference potentially nullptr 2022-03-10 18:37:28 +00:00
Sergio Martins
25b04d7ed8 MDI: Fix another case of showing resize handles wrong
the logic for 'y' only makes sense if 'x' is bounded and vice-versa
2022-03-10 10:55:17 +00:00
Sergio Martins
e345e89c35 MDI: Fix case where resize cursor would be shown for frame bellow
Was already fixed a few days ago, but this is the case for nested
mdi.
2022-03-09 19:08:29 +00:00
Sergio Martins
a97663294c example: Allow to test propagation of close event in the mdi example 2022-03-09 17:18:11 +00:00
Sergio Martins
bb4cf802f5 examples: Remove more duplicate MyWidget.cpp/h files
share with main example instead
2022-03-09 16:42:15 +00:00
Sergio Martins
701069617c example: Allow to test propagation of close event in the mdi example 2022-03-09 16:30:26 +00:00
Sergio Martins
a8c50f1876 example: Remove duplicate minimal-mdi/MyWidget.cpp
It was using the cpp from the main example but the header from
minimal-mdi. Instead, share both the impl and the header
2022-03-09 16:27:25 +00:00
Sergio Martins
61cca1e5ec Forward QCloseEvent to the MDI widgets too
Fixes case where docked MDI widgets were not able to block a close
2022-03-09 16:11:55 +00:00
Sergio Martins
7db9938b85 Fix MainWindow not propagating close events to docked widgets
Nested FloatingWindows already supported it, so make it consistent.

Personal take: In a non-docking world, users can override their
main window close event and prevent a close, to save a document
or such. However, in a docking world, the main window developer
won't know which widgets are docked, so forwarding needs to happen,
as some might have documents to save.
2022-03-09 15:47:02 +00:00
Sergio Martins
01cc915734 Further move onCloseEvent to base class
So that it can be reused by MDI layouts too
2022-03-09 14:58:35 +00:00
Sergio Martins
3454b67a45 Refactor: Move close event logic from FloatingWindow to DropArea
So main window can use it too
2022-03-09 14:39:20 +00:00
Sergio Martins
21765efbac example: Added --blocks-close-event
Makes dock widget #0 reject the close event, meaning it won't close.
2022-03-09 12:46:20 +00:00
Allen Winter
60a1e46453 CMakeLists.txt - fix setting KDDockWidgets_DEPS
broken with last commit
2022-03-08 12:06:53 -05:00
Allen Winter
8b8ef7f2b0 CMakeLists.txt - find COMPONENTS to search for Qt modules 2022-03-08 12:01:13 -05:00
Sergio Martins
c0e8fe3869 Update ChangeLog regarding #44 and #96 being fixed 2022-03-07 16:38:40 +00:00
Sergio Martins
524dff9105 Don't try to restore to previous position if there isn't any 2022-03-07 16:36:38 +00:00
Sergio Martins
0099a19a82 Make redocking floating windows with tabs possible
TitleBar::isFloating() was returning false, while it should
have returned true.

Fixed by making isFloating() simpler and dumb. isFloating() should
only say if it belongs to a floating window or not. It shouldn't
contain any logic about whether button should be visible or not.

There's already logic elsewhere that will hide the float button
in case there's nesting.

Fixes issue #96 and #44
2022-03-07 15:56:15 +00:00
Sergio Martins
e6b8636e88 MDI: Fix resize cursor appearing for frames that had others on top 2022-03-04 11:34:35 +00:00
Sergio Martins
86419fd979 MDI: Fixed closing dock widget in MDI would close main window
We only close the window when the window is a FloatingWindow and
it's the last frame
2022-03-03 17:52:13 +00:00
Eism
220471f746 Corrected the updating of normal geometry for window 2022-02-14 15:34:01 +00:00
Sergio Martins
ca3fe4070a Port layouting signals to KDBindings 2022-02-12 16:15:07 +00:00
Sergio Martins
bef7aab7f6 Move kdbindings to src/3rdparty 2022-02-12 14:45:12 +00:00
Sergio Martins
d4bcc96f2f Add KDBindings to 3rdparty
To replace Qt in the backend.
2022-02-12 14:45:12 +00:00
Sergio Martins
b5003f8fb8 Make sure the layouting builds standalone
Goal will be for it to be C++ only, eventually.
backend_temp_includes/ is to be removed, but required to build currently.
2022-02-12 14:45:12 +00:00
Sergio Martins
412860abac tests: Use QT_NO_KEYWORDS too 2022-02-12 14:43:37 +00:00
Sergio Martins
2eeb4aac27 Fix Item_p.h being exposed in public API
Forward declare Item instead
2022-02-12 14:37:19 +00:00
Sergio Martins
bfb2ec701e cmake: Add a dedicated ASAN preset
It's not doing well on Windows, so make the default be a non-asan
build
2022-02-11 22:55:54 +00:00
Sergio Martins
54bf24d5d4 Added Config::setDropIndicatorAllowedFunc() 2022-02-11 19:49:23 +00:00
Sergio Martins
76cbb760ed Minor refactoring before introducing DropIndicatorAllowedFunc
Deals with all the false case first
2022-02-11 19:07:28 +00:00
Sergio Martins
4824a398ab Move DropIndicatorOverlayInterface::DropLocation enum to namespace scope
It's public now
2022-02-11 18:14:26 +00:00
Sergio Martins
a502a8250b Fix possible nullptr dereference 2022-02-11 17:42:09 +00:00
Sergio Martins
85fb4ff671 indicators: Prepare the visibility to be more granular
Currently either all or none inner indicators can be hidden/shown,
and same of the outter.

We'll soon allow some of them to be hidden, selectively, by the
client app.
2022-02-11 17:37:26 +00:00
Sergio Martins
6db3ccc87f .gitignore: Add a few clangd files 2022-02-11 17:10:22 +00:00
Sergio Martins
5811cab164 segmented indicators: Fix potential bugs due to decoupled drop types
The returned QVector was indexed by the enum values, but the enum
is flag based now, no longer sequential. Instead of depending
on ordering of the enum, let's instead return a QHash where the
type is coupled with the corresponding QPolygon already
2022-02-11 17:08:30 +00:00
Sergio Martins
1387c2f573 segmented indicators: Use the base class logic
Instead of repeating it
2022-02-11 16:58:12 +00:00
Sergio Martins
79cc347cd8 Refactor: Move indicator visibility logic into base class 2022-02-11 16:42:07 +00:00
Sergio Martins
e62bde3152 Improve documentation for MainWindowOption_HasCentralWidget
Fixes issue #272
2022-02-11 14:36:19 +00:00
Sergio Martins
81abb3cea5 Fix build on OpenBSD
Fixes #265
2022-02-11 14:31:00 +00:00
Sergio Martins
ecd3c20adf Fix build with Qt5+C++20
Error was:
qvector.h:532:18: error: use of overloaded operator '!=' is ambiguous (with operand types 'int *' and 'QTypedArrayData<int>::iterator')
        while (i != d->begin())
2022-02-10 11:01:14 +00:00
Sergio Martins
755d53432b Fix "drag to detach" MDI windows when in nested MDI mode
We were deleting the draggable, causing the drag to stop
2022-02-04 17:54:43 +00:00
Sergio Martins
e00a552bf8 Add DragController::currentStateChanged() signal 2022-02-04 17:52:54 +00:00
Sergio Martins
faf93fe597 Add DragController::isIdle() 2022-02-04 17:48:42 +00:00
Sergio Martins
4f8aac7df3 Fix floating windows not restoring to previous position
The dock widget wrapper that we deleted had that info. We need
to preserve it.
2022-02-04 16:57:44 +00:00
Sergio Martins
719803ecfa Fix a test with offscreen QPA
We were pressing on pos 6,6 to start a drag but that triggered
a window resize instead.
2022-02-04 16:10:13 +00:00
Sergio Martins
f0ef24383b Debug++ 2022-02-04 16:10:13 +00:00
Sergio Martins
4f8b174a8d Fixed Frame::isFloating() for the nested MDI case 2022-02-04 15:17:11 +00:00
Sergio Martins
675b166956 Added the last crash fix to the ChangeLog 2022-02-04 15:11:17 +00:00
Sergio Martins
b13ba1e42e Fix crash due to use of native widgets on Windows
Qt has corner cases when all of its widgets are native widgets.
This particular crash was a loop between QWidget::create()
and QWidget::createWinId().
2022-02-02 13:21:14 +00:00
Sergio Martins
481dae64c3 nested_mdi: Fix floating windows not going back to their previous location
When floating a mdi window that was nested in a drop area, clicking the
float button should put it back to the MDI area.
2022-01-30 02:55:02 +00:00
Sergio Martins
6b04e20a7e Add some doxygen 2022-01-30 02:40:53 +00:00
Sergio Martins
8a3ee35993 Fix firstParentOfType() going through different windows 2022-01-30 02:15:58 +00:00
Sergio Martins
146c656e29 Minor: Use OOP, add ItemRef::isInMainWindow() 2022-01-29 21:43:41 +00:00
Sergio Martins
a190e2dfbf Fix -Wshadow warning 2022-01-29 20:57:19 +00:00
Sergio Martins
d0daff6771 vscode: Add an entry to run the mdi with dock widgets example 2022-01-29 20:15:29 +00:00
Sergio Martins
721795b113 Remove LastPosition struct, move its members to Position
It was an unneeded indirection that didn't provide added semantics
2022-01-29 19:29:03 +00:00
Sergio Martins
40231b7fae Minor coding style 2022-01-29 19:02:17 +00:00
Sergio Martins
1d0300ecc8 Fix another unused variable 2022-01-26 00:14:01 +00:00
Sergio Martins
ce20628555 Remove unused variable - fixes Werror build 2022-01-25 23:23:54 +00:00
Sergio Martins
d0dcac6b03 Make DockWidgetBase::setMDIPosition|setMDISize support nesting
They now honour Option_MDINestable.
Before they would bail out assuming they weren't in a MDI area.
Now they look further up the hierarchy to find our MDIArea, if any.
2022-01-25 20:14:04 +00:00
Sergio Martins
2b1aa44eff Fix crash when floating nested mdi 2022-01-24 19:18:55 +00:00
Sergio Martins
ae42dffcb1 Update Changelog regarding new nested MDI feature 2022-01-24 18:48:00 +00:00
Sergio Martins
21adfe06ad Add an example for nested docking within MDI 2022-01-24 18:31:10 +00:00
Sergio Martins
7de26139a2 Restore source-compat for TabWidgetWidget() 2022-01-24 15:47:06 +00:00
Sergio Martins
894ff9fea0 Minor: Fix overridden signature 2022-01-24 15:34:37 +00:00
Sergio Martins
942c462586 Fix release build 2022-01-24 15:27:24 +00:00
Sergio Martins
128645693c nested_mdi: Fix DnD over dock widgets docked in MDI
Dragging was always detecting the main window's drop indicator
overlay. Make it transparent for mouse events, so that
QWidget::childAt() doesn't pick it, and we can see the inner
drop areas.
2022-01-23 23:31:50 +00:00
Sergio Martins
86bceb4c48 nested mdi: Fix detaching inner dock widgets
Only the outter-most MDI frame is dragged in MDI mode. The inner ones
are dragged in normal docking mode, they become real floating windows.
2022-01-23 21:46:37 +00:00
Sergio Martins
ea64aae861 tests++ 2022-01-23 21:46:37 +00:00
Sergio Martins
d1645dff73 tests: Remove unneeded sleep 2022-01-23 21:46:37 +00:00
Sergio Martins
a72e018f3b nested mdi: Also test floating a nested MDI 2022-01-23 21:46:37 +00:00
Sergio Martins
66b0ba8902 Added MDIArea::frames() 2022-01-23 21:46:37 +00:00
Sergio Martins
18457d80aa nested mdi: Get rid of unneeded drop area mdi wrapper when floating
When floating, the FloatingWindow has its own DropArea for nesting.
We delete the redundant level of wrappers when floating.
2022-01-23 21:46:37 +00:00
Sergio Martins
95c12dbd4c nested mdi: Fix floating picking the wrong title bar
Use DockWidget::titleBar() which will always travel the hierarchy
and pick the first visible title bar. We have more nesting now.
2022-01-23 21:46:37 +00:00
Sergio Martins
c7682a3524 Use QScopedValueRollback, it's more expressive 2022-01-23 21:46:37 +00:00
Sergio Martins
4922363e71 Simplify expression 2022-01-23 21:46:37 +00:00
Sergio Martins
9f6ec0244f nested mdi: More tests for closing docks 2022-01-23 21:46:37 +00:00
Sergio Martins
747e987f28 test++ 2022-01-23 21:46:37 +00:00
Sergio Martins
68e01c70ee nested mdi: Delete wrappers once we close the last nested DW 2022-01-23 21:46:37 +00:00
Sergio Martins
296b2a3370 nested mdi: Fix MDI's frame title not being updated
Before we didn't need to update it because there was only 1
dock widget. But now, if there's more than one we need to set the
application's name instead of the dock widget's name as title.
2022-01-23 21:46:37 +00:00
Sergio Martins
074bc26be9 Added DropArea::mdiDockWidgetWrapper() 2022-01-23 21:46:37 +00:00
Sergio Martins
f8e6ecf821 Remove DropArea::setIsMDIWrapper(), use ctor instead
This propery is meant to be set only once, so enforce it via
compiler.
2022-01-23 21:46:37 +00:00
Sergio Martins
3e70a2cc71 nested mdi: Added DockWidgetBase::Private::isMDIWrapper 2022-01-23 21:46:37 +00:00
Sergio Martins
65ced9604f nested mdi: Fixed title bar visibility
When there's only one docked widget we only show 1 title bar.
Just like happens with a FloatingWindow
2022-01-23 21:46:37 +00:00
Sergio Martins
45b0536c6a Added DropArea::hasSingleFrame()
For readability
2022-01-23 21:46:37 +00:00
Sergio Martins
8c8f5a8fda Introduce Option_MDINestable
Should allow MDI dock widgets to also accept drops.
Befor, each MDI "window" only had 1 dock widget, but now each
MDI "window" a layout of dock widgets.

This is implemented by nesting the actual dock widget inside
a wrapper drop area. This drop area gives the drop support.

There's still bugs and more tests to fix before merging.
2022-01-23 21:46:37 +00:00
Sergio Martins
22a9ce2596 Merge branch '1.5' 2022-01-21 12:01:38 +00:00
Sergio Martins
93b664414b X11: Add support for robust z-order detection
Qt doesn't provide any way to know which window is directly
bellow the cursor. Generally this is fine since floating windows
are always on top of the main window. However, if Qt::Tool is removed,
then they can be behind, and KDDW can't know which window to overlay
the drop indicators onto.

This patch uses XLib's XQueryTree to solve this.
This is still experimental, hence disabled by default.

For now it's disabled by default, since it's experimental.
You can turn it on by passing -DKDDockWidgets_XLib=ON

Fixes bug #256

(cherry-picked from b20ce0895b as it's safe enough)
2022-01-21 11:56:48 +00:00
Sergio Martins
866788674f Minor: Added Utils::isXCB() 2022-01-21 11:56:48 +00:00
Mauro Persano
f13f0129d4 Add API to set center widget margins on MainWindow
We can't change the margins by subclassing MainWindow and overriding
centerWidgetMargins, since the margins are initialized in MainWindow's
constructor. This adds public API to MainWindow to allow us to change
the margins later on.
2022-01-20 22:37:36 +00:00
Sergio Martins
22ffc6c7ea Fix QtQuick build 2022-01-20 22:37:36 +00:00
Mauro Persano
d1767b5534 Don't render frame for central persistent widget
When the main window has a central persistent widget, make sure the
containing tab widget doesn't render a frame around it.
2022-01-20 22:08:17 +00:00
Allen Winter
2fbe4f872e Merge branch '1.5' 2022-01-20 08:15:23 -05:00
Allen Winter
93e60a743e update copyright year 2022-01-20 08:05:26 -05:00
Allen Winter
328a14b46a src/private/FloatingWindow.cpp - fix compile with mingw
NOMINMAX should only be defined with MSVC on Windows.
2022-01-20 07:50:24 -05:00
Allen Winter
9c17b44ad7 Merge branch '1.5' 2022-01-19 16:23:47 -05:00
Allen Winter
cf40cadce8 cmake/KDAB/modules/KDQtInstallPaths.cmake - sync to upstream 2022-01-19 16:23:28 -05:00
Sergio Martins
16c43b8c24 Make cmake config file honour KDDockWidgets_X11EXTRAS 2022-01-12 09:55:02 +00:00
Allen Winter
8391d85d48 appveyor.yml - add libxkbcommon on ubuntu for qt6 2022-01-09 10:17:39 -05:00
Allen Winter
e59e5d7a71 appveyor.yml - add builders for Qt6 2022-01-09 09:50:58 -05:00
Sergio Martins
aa3c3272ee Fix examples build on macOS and Windows
For some reason a X11 dependency was commited by mistake.
2022-01-08 18:39:16 +00:00
Sergio Martins
1d8fad245a Fix build with 5.12
This is a special request from a customer who can't upgrade right
now.

Min is still 5.15 in CMakeLists.
2022-01-07 17:55:53 +00:00
Sergio Martins
789c531f3d Fix parent of the MDIArea layout
Fixes tests on QtQuick. On QtWidgets it would get reparented
so tests already passed.
2022-01-07 17:45:37 +00:00
Sergio Martins
5b87fb4435 Add an examples/mdi_with_docking/ example 2022-01-07 17:31:20 +00:00
Sergio Martins
402f0b9d90 Add a fwd header for MDIArea.h 2022-01-07 17:27:45 +00:00
Sergio Martins
37567d3980 Introduce MDIArea, a widget that can host MDI dock widgets
This is a public wrapper to MDILayoutWidget. The latter is private
and has internals we don't want to expose. Instead create a public
class with a thin API.

You no longer need to create a MainWindowMDI to have MDI support.
You can now have a normal MainWindow (with normal docking) and
add some dock widget that as a MDIArea as widget.
2022-01-07 17:13:16 +00:00
Sergio Martins
6cef4cea2c Port frameParent() to firstParentOfType() 2022-01-07 14:59:33 +00:00
Sergio Martins
aea2bf971b Add TestDocks::tst_mdi_mixed_with_docking
Tests that we can dock a MDI Layout.
Meaning the main window would support both docking and MDI.
This basic test passes. But there's still a lot of bugs to fix
2022-01-07 12:50:25 +00:00
Sergio Martins
00a0e455e7 Make MDILayoutWidget::addDockWidget's initial opt param optional
It's seldom needed
2022-01-07 12:41:24 +00:00
Sergio Martins
d5c7fbfedd Install MDILayoutWidget_p.h too 2022-01-07 12:32:39 +00:00
Sergio Martins
bea6c09494 CMake: Add a clang -ftime-trace preset
Just for profiling build times.
2022-01-06 13:54:34 +00:00
Allen Winter
0adb130d4b src/private/FloatingWindow.cpp - on Windows, define NOMINMAX
else windows.h will define the max() macro which doesn't
play nice with the std::numeric_limits::max()

Issue #266
2021-12-27 08:09:09 -05:00
Allen Winter
92d0d74641 src/private/FloatingWindow.cpp - on Windows, define NOMINMAX
else windows.h will define the max() macro which doesn't
play nice with the std::numeric_limits::max()

Issue #266
2021-12-27 07:56:00 -05:00
Sergio Martins
4d4f2a0183 Merge branch '1.5' 2021-12-22 17:07:24 +00:00
Alistair Baxter
f1e19ec59c Ensure that floating windows are not positioned off-screen when they are shown
At points when a Rect is to be used to position a floating widget,
test to see if it overlaps any of the system's screens.

If it does not, adjust the Rect to within the closest screen edges.
2021-12-22 16:48:45 +00:00
Sergio Martins
64b5564f99 README: Clarify that for QtQuick we suggest Qt6 2021-12-22 16:08:55 +00:00
Sergio Martins
66cc9ddc03 Updated ChangeLog
Closes #259
2021-12-22 15:39:00 +00:00
Eism
336f1146d3 Fixed the restoration of geometry when user closed maximized window 2021-12-22 15:31:26 +00:00
Mauro Persano
29b1a434c4 Make lazy resize rubber bands optionally top-level
To workaround MFC bug
2021-12-14 11:32:45 +00:00
Allen Winter
c0c8399bd7 README.md - add a bit of info about Qt private packages on linux
related to issue#257
2021-11-26 09:04:30 -05:00
Sergio Martins
b20ce0895b X11: Add support for robust z-order detection
Qt doesn't provide any way to know which window is directly
bellow the cursor. Generally this is fine since floating windows
are always on top of the main window. However, if Qt::Tool is removed,
then they can be behind, and KDDW can't know which window to overlay
the drop indicators onto.

This patch uses XLib's XQueryTree to solve this.
This is still experimental, hence disabled by default.

For now it's disabled by default, since it's experimental.
You can turn it on by passing -DKDDockWidgets_XLib=ON

Fixes bug #256
2021-11-25 20:59:16 +00:00
Sergio Martins
e67f55af51 Minor: Added Utils::isXCB() 2021-11-25 17:22:58 +00:00
Allen Winter
f1410948f8 Merge branch '1.5' 2021-11-24 16:51:38 -05:00
Allen Winter
30185d5b2a This is would become version 1.5.1 2021-11-24 16:49:11 -05:00
Allen Winter
9990300006 distro/qt5-kddockwidgets.spec - add BuildRequires for SUSE
libqt5-qtbase-private-headers-devel is needed
2021-11-24 12:32:06 -05:00
Allen Winter
573e82e9eb update 1.5.0 release date 2021-11-24 12:20:15 -05:00
Allen Winter
07a135a10a ECMGeneratePriFile.cmake - restore "Fix issues with pri file"
commit b81c32b1c9
Author: Jacob Young <jacobly0@users.noreply.github.com>
Date:   Mon Dec 28 20:46:28 2020 -0500
2021-11-24 12:14:16 -05:00
Sergio Martins
fc172b66f8 Explain that changing window manager flags isn't portable
This restriction comes from Qt itself, not from KDDW.
Relates to bug #256

I will however try to reproduce it
2021-11-24 11:16:36 +00:00
Sergio Martins
2be0d5d1d9 Add a warning about using private headers and ABI compat 2021-11-24 10:04:52 +00:00
Allen Winter
3007b46892 ready for 1.5 release 2021-11-22 08:16:54 -05:00
Allen Winter
1419db80a2 OBS distro fixes 2021-11-19 18:03:22 -05:00
Allen Winter
5376ceec7e prep for the 1.5.0 release 2021-11-19 15:39:19 -05:00
Allen Winter
d3a3e7502e appveyor.yml - temporarily disable testing on Windows
until I have the time to figure out a proper solution
2021-11-19 12:22:20 -05:00
Allen Winter
50c3f9b899 appveyor.yml - add bin to PATH on Windows
to fix 'ctest' on Windows
2021-11-19 11:00:44 -05:00
Allen Winter
8845fae147 appveyor.yml - fix typo 2021-11-19 10:23:55 -05:00
Allen Winter
0c291116b9 appveyor.yml - install mesa on ubuntu 2021-11-19 10:05:07 -05:00
Allen Winter
f0fa0281bf CMakeLists.txt - fix default install location on Windows 2021-11-19 09:59:56 -05:00
Allen Winter
313a17a96c appveyor.yml - add Qt to PATH 2021-11-19 08:58:07 -05:00
Allen Winter
9e2b1d3e44 move github CI to appveyor for all platforms 2021-11-19 08:33:43 -05:00
Allen Winter
d832750eb7 CMakeLists.txt - increase min Qt to version 5.15 2021-11-18 09:07:36 -05:00
Allen Winter
a82a283b4b CMakeLists.txt - increase min Qt to version 5.15 2021-11-18 09:06:50 -05:00
Sergio Martins
77392709e2 Merge branch '1.5' 2021-11-18 14:03:00 +00:00
Sergio Martins
b6770217bb README: Mention 5.15 is required
5.12 no longer compiles
2021-11-18 14:01:59 +00:00
Sergio Martins
c8b22e7ea5 Fix "Unpin" button not showing up in overlayed widgets 2021-11-18 12:15:23 +00:00
Sergio Martins
8dcaaaf853 tests|Qt6: Ignore benign warning coming from QQC material style
Needs to be fixed in Qt
2021-11-17 17:00:16 +00:00
Sergio Martins
32ecdb5b37 README-QtQuick: Bump the patch revisions of min supported Qt
Probably works with earlier, but not tested
2021-11-17 15:59:46 +00:00
Sergio Martins
099c7eafc8 tests: Fix QtQuick tests
normal geometry isn't supported for QWindow, only QWidget.
2021-11-17 15:41:50 +00:00
Sergio Martins
f872d6fbc1 tests: Fix issue found by ASAN
We need to ungrab the window before deleting it.
2021-11-17 15:12:06 +00:00
Sergio Martins
3e21787efb qtquick: Fully qualify setPersistentCentralWidget() arguments
So it works from QtQuick too
2021-11-17 14:13:01 +00:00
Allen Winter
58fcd8d04d conan/conanfile.py - change to version 1.5.0 2021-11-15 09:57:14 -05:00
Allen Winter
6fd0b4ddee CMakeLists.txt, Changelog - this will be version 1.6 2021-11-15 09:55:47 -05:00
Allen Winter
95d5146fce CMakeLists.txt - increase version for release candidate 2021-11-15 09:51:21 -05:00
Sergio Martins
ea6adafc13 Fix QtQuick build
Fixes #254
2021-11-09 09:45:15 +00:00
Allen Winter
f65cb2c0ce README.md - minor 2021-11-04 17:20:51 -04:00
Sergio Martins
fbde2bd202 cmake: Allow to not create "docs" target
Fixes integrating KDDW as sub-repo of other projects that
already define "docs" target. It would conflict.

namespacing the target name would be another optionm but in doubt
keep things simple
2021-11-03 09:14:25 +00:00
Sergio Martins
0cee15c0d3 Don't do relative positioning restore if main window changed screen
We only shift floating windows position for simple cases.
Fixes floating windows being restored out of bounds in some cases.
2021-11-02 19:11:29 +00:00
Sergio Martins
4b56a336a0 Fix build on macOS 2021-10-19 14:34:27 +01:00
Sergio Martins
56bec0db04 Replace KDDOCKWIDGETS_RUBBERBAND_IS_TOPLEVEL with config option
This way one doesn't need to rebuild KDDW to make the rubber band
top-level.

Added it as internal option, as this will seldom be used.
2021-10-17 11:17:41 +01:00
Allen Winter
dd979d191f CMakeLists.txt, python/CMakeLists.txt - some restructuring 2021-10-13 17:33:32 -04:00
Sergio Martins
a5f37f851b Fix relative inner resizing not working properly
When we resize the main window then we also resize the inner
dock widgets in the same proportion (based on saved percentages),
during a resize we should not recompute those percentages due to
rounding errors.

They were being recomputed by mistake, since only the root Item
was blocking them, but the function recurses into inner items

Fixes #186
2021-10-13 18:33:45 +01:00
Sergio Martins
052d8680dc Add a test for #186
Was hard to reproduce, doesn't happen with many other layouts
2021-10-13 15:37:02 +01:00
Sergio Martins
21e8aae823 Add a test for #238
Which I can't reproduce yet, but at least tests another case.
2021-10-12 18:36:50 +01:00
Sergio Martins
0e866079da qtquick: Fix parentChanged() passing the wrong argument
QQuickItem::parentChanged(QQuickItem *parent) passes the *new*
parent, not *this*

Fixes #243 which is actually invalid, but uncovered this bug.
For #243 you can just use sender(), or connect to a lambda that
captures the dock widget.
2021-10-12 11:46:16 +01:00
Sergio Martins
a8bd6ba840 Fix corrupt layout when restoring old JSON
If the old *.json file doesn't know about some new docked widget
then we need to float it before restoring the main window

Fixes #237
2021-10-12 11:16:15 +01:00
Sergio Martins
96aefdd3c7 Make tst_restoreNonExistingDockWidget more minimal
dock1 isn't required

And it's ok that dock2 remains open, the bug is actually that it
doesn't get resized when we resize the main window
2021-10-11 00:50:53 +01:00
Sergio Martins
753fe57b30 Add a failing test for bug #237 2021-10-11 00:25:10 +01:00
Sergio Martins
9587c1b1e3 Add a test for issue #245
I can't repro still. Will wait for more feedback from reporter.
2021-10-10 19:32:27 +01:00
Sergio Martins
bc1b296440 README: Explain that StyleSheets are not supported
It's intentional.

Closes #246
2021-10-10 19:20:00 +01:00
Allen Winter
5626b0120d PySide[2,6]ModuleBuild.cmake - restore noisy compiler warnings removal
somehow got lost
2021-10-05 17:08:32 -04:00
Allen Winter
e5d2f5f857 PySide[2,6]ModuleBuild.cmake - restore noisy compiler warnings removal
somehow got lost
2021-10-03 16:54:26 -04:00
Allen Winter
3eb52c46b1 python/examples/main.py - add instructions to generate rc_assets.py 2021-09-30 15:57:22 -04:00
Allen Winter
aaa64bf769 Merge pull request #248 from KDAB/pyside6-unittest
Fixed unit test for PySide6
2021-09-30 15:49:17 -04:00
Renato Araujo
b7b1d6d4e9 Fixed unit test for PySide6 2021-09-30 06:04:52 -07:00
Allen Winter
a90417de55 python/examples-qt6/main.py - uncomment rc_assets
commented by mistake
2021-09-29 17:17:54 -04:00
Allen Winter
73f08df224 Merge pull request #247 from KDAB/python38
Fixed module import for python 3.8
2021-09-29 16:41:26 -04:00
Renato Araujo Oliveira Filho
db9babbdca Fixed module import for python 3.8 2021-09-29 13:36:16 -07:00
Allen Winter
463dd2261e various - spelling fixes 2021-09-28 16:45:44 -04:00
Allen Winter
4dd66969af examples/dockwidgets/MyTitleBar_CSS.h - add multiple include guard 2021-09-28 16:36:55 -04:00
Allen Winter
2c98003219 CMakeLists.txt,python/tests/CMakeLists.txt - minor coding style 2021-09-28 16:28:51 -04:00
Allen Winter
dd853a8f72 python/tests/ - add copyright+license header 2021-09-28 16:24:35 -04:00
Allen Winter
88d5e6b29d Merge pull request #242 from KDAB/python-unittest
Fixed import module for windows and python 3.7
2021-09-28 16:03:40 -04:00
810 changed files with 146687 additions and 24950 deletions

View File

@@ -47,7 +47,7 @@ AlignAfterOpenBracket: true
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackParameters: true
ColumnLimit: 0
ColumnLimit: 100
Cpp11BracedListStyle: false
DerivePointerBinding: false
ExperimentalAutoDetectBinPacking: false
@@ -70,4 +70,3 @@ SpacesInAngles: false
SpacesInCStyleCastParentheses: true
SpacesInParentheses: false
...

240
.cmake-format.py Normal file
View File

@@ -0,0 +1,240 @@
# ----------------------------------
# Options affecting listfile parsing
# ----------------------------------
with section("parse"):
# Specify structure for custom cmake functions
additional_commands = {'foo': {'flags': ['BAR', 'BAZ'],
'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}}
# Override configurations per-command where available
override_spec = {}
# Specify variable tags.
vartags = []
# Specify property tags.
proptags = []
# -----------------------------
# Options affecting formatting.
# -----------------------------
with section("format"):
# Disable formatting entirely, making cmake-format a no-op
disable = False
# How wide to allow formatted cmake files
line_width = 120
# How many spaces to tab for indent
tab_size = 4
# If true, lines are indented using tab characters (utf-8 0x09) instead of
# <tab_size> space characters (utf-8 0x20). In cases where the layout would
# require a fractional tab character, the behavior of the fractional
# indentation is governed by <fractional_tab_policy>
use_tabchars = False
# If <use_tabchars> is True, then the value of this variable indicates how
# fractional indentions are handled during whitespace replacement. If set to
# 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set
# to `round-up` fractional indentation is replaced with a single tab character
# (utf-8 0x09) effectively shifting the column to the next tabstop
fractional_tab_policy = 'use-space'
# If an argument group contains more than this many sub-groups (parg or kwarg
# groups) then force it to a vertical layout.
max_subgroups_hwrap = 2
# If a positional argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 6
# If a cmdline positional group consumes more than this many lines without
# nesting, then invalidate the layout (and nest)
max_rows_cmdline = 2
# If true, separate flow control names from their parentheses with a space
separate_ctrl_name_with_space = False
# If true, separate function names from parentheses with a space
separate_fn_name_with_space = False
# If a statement is wrapped to more than one line, than dangle the closing
# parenthesis on its own line.
dangle_parens = True
# If the trailing parenthesis must be 'dangled' on its on line, then align it
# to this reference: `prefix`: the start of the statement, `prefix-indent`:
# the start of the statement, plus one indentation level, `child`: align to
# the column of the arguments
dangle_align = 'prefix'
# If the statement spelling length (including space and parenthesis) is
# smaller than this amount, then force reject nested layouts.
min_prefix_chars = 4
# If the statement spelling length (including space and parenthesis) is larger
# than the tab width by more than this amount, then force reject un-nested
# layouts.
max_prefix_chars = 10
# If a candidate layout is wrapped horizontally but it exceeds this many
# lines, then reject the layout.
max_lines_hwrap = 2
# What style line endings to use in the output.
line_ending = 'unix'
# Format command names consistently as 'lower' or 'upper' case
command_case = 'lower'
# Format keywords consistently as 'lower' or 'upper' case
keyword_case = 'upper'
# A list of command names which should always be wrapped
always_wrap = []
# If true, the argument lists which are known to be sortable will be sorted
# lexicographicall
enable_sort = True
# If true, the parsers may infer whether or not an argument list is sortable
# (without annotation).
autosort = False
# By default, if cmake-format cannot successfully fit everything into the
# desired linewidth it will apply the last, most agressive attempt that it
# made. If this flag is True, however, cmake-format will print error, exit
# with non-zero status code, and write-out nothing
require_valid_layout = False
# A dictionary mapping layout nodes to a list of wrap decisions. See the
# documentation for more information.
layout_passes = {}
# ------------------------------------------------
# Options affecting comment reflow and formatting.
# ------------------------------------------------
with section("markup"):
# What character to use for bulleted lists
bullet_char = '*'
# What character to use as punctuation after numerals in an enumerated list
enum_char = '.'
# If comment markup is enabled, don't reflow the first comment block in each
# listfile. Use this to preserve formatting of your copyright/license
# statements.
first_comment_is_literal = False
# If comment markup is enabled, don't reflow any comment block which matches
# this (regex) pattern. Default is `None` (disabled).
literal_comment_pattern = None
# Regular expression to match preformat fences in comments default=
# ``r'^\s*([`~]{3}[`~]*)(.*)$'``
fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
# Regular expression to match rulers in comments default=
# ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
# If a comment line matches starts with this pattern then it is explicitly a
# trailing comment for the preceeding argument. Default is '#<'
explicit_trailing_pattern = '#<'
# If a comment line starts with at least this many consecutive hash
# characters, then don't lstrip() them off. This allows for lazy hash rulers
# where the first hash char is not separated by space
hashruler_min_length = 10
# If true, then insert a space between the first hash char and remaining hash
# chars in a hash ruler, and normalize its length to fill the column
canonicalize_hashrulers = True
# enable comment markup parsing and reflow
enable_markup = False
# ----------------------------
# Options affecting the linter
# ----------------------------
with section("lint"):
# a list of lint codes to disable
disabled_codes = []
# regular expression pattern describing valid function names
function_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid macro names
macro_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid names for variables with global
# (cache) scope
global_var_pattern = '[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# scope (but internal semantic)
internal_var_pattern = '[A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with local
# scope
local_var_pattern = '[_A-Za-z][A-Za-z0-9_]+'
# regular expression pattern describing valid names for privatedirectory
# variables
private_var_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid names for public directory
# variables
public_var_pattern = '.*'
# regular expression pattern describing valid names for function/macro
# arguments and loop variables.
argument_var_pattern = '[a-z_][a-z0-9_]+'
# regular expression pattern describing valid names for keywords used in
# functions or macros
keyword_pattern = '[A-Z][0-9A-Z_]+'
# In the heuristic for C0201, how many conditionals to match within a loop in
# before considering the loop a parser.
max_conditionals_custom_parser = 2
# Require at least this many newlines between statements
min_statement_spacing = 1
# Require no more than this many newlines between statements
max_statement_spacing = 2
max_returns = 6
max_branches = 15
max_arguments = 10
max_localvars = 15
max_statements = 50
# -------------------------------
# Options affecting file encoding
# -------------------------------
with section("encode"):
# If true, emit the unicode byte-order mark (BOM) at the start of the file
emit_byteorder_mark = False
# Specify the encoding of the input file. Defaults to utf-8
input_encoding = 'utf-8'
# Specify the encoding of the output file. Defaults to utf-8. Note that cmake
# only claims to support utf-8 so be careful when using anything else
output_encoding = 'utf-8'
# -------------------------------------
# Miscellaneous configurations options.
# -------------------------------------
with section("misc"):
# A dictionary containing any per-command configuration overrides. Currently
# only `command_case` is supported.
per_command = {}

View File

@@ -1,4 +1,4 @@
[codespell]
skip = ./build-*,.git
skip = ./build-*,.git,*.svg,rc_assets.py,./src/flutter/generated*
interactive = 3
ignore-words-list = overlay,overlayed
ignore-words-list = overlay,overlayed,seh,sharable

10
.gitignore vendored
View File

@@ -47,6 +47,7 @@ mylayout.json
*.cbp
*.pyc
/python/examples/rc_assets.py
/python/examples-qt6/rc_assets.py
*.pri
/docks-w
kddockwidgets_minimal_example
@@ -64,3 +65,12 @@ kddockwidgets_minimal_example
*.sln
*.dir
.vscode
/.cache
/compile_commands.json
/site
.DS_Store
.packages
pubspec.lock
.dart_tool
mjb_rejected_*
mjb_rejected_classes.log

6
.krazy
View File

@@ -8,6 +8,8 @@ EXTRA kdabcopyright-reuse,kdabcontactus,fosslicense-reuse
#exclude checks now being done by clazy or clang-tools
EXCLUDE strings,explicit,normalize,passbyvalue,operators,nullstrcompare,nullstrassign,doublequote_chars,qobject,sigsandslots,staticobjects,dpointer,inline,postfixop
#exclude spelling as codespell is much, much better tool
EXCLUDE spelling
#exclude more checks
EXCLUDE style
@@ -18,6 +20,6 @@ SKIP Doxyfile.cmake
SKIP /KDDockWidgetsConfig.cmake.in
#skip more files
SKIP CMakePresets.json
SKIP \.cmake-format\.py
#skip the borrowed code in the cmake subdir
SKIP /cmake/InstallLocation.cmake|/cmake/ECM/|/cmake/KDAB/
SKIP /cmake/ECM/|/cmake/KDAB/

1
.mdlrc Normal file
View File

@@ -0,0 +1 @@
style ".mdlrc.rb"

4
.mdlrc.rb Normal file
View File

@@ -0,0 +1,4 @@
all
rule 'MD013', :line_length => 100, :tables => false
rule 'MD029', :style => :ordered
exclude_rule 'MD033'

2
.pep8 Normal file
View File

@@ -0,0 +1,2 @@
[pycodestyle]
max_line_length = 120

51
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,51 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
exclude: ^(cmake/ECM|cmake/KDAB/|src/3rdparty/)
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-added-large-files
- id: check-case-conflict
- id: check-yaml
args: [--allow-multiple-documents]
- id: check-json
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v14.0.0
hooks:
- id: clang-format
exclude: (.json)
- repo: https://github.com/PyCQA/pylint
rev: v2.12.2
hooks:
- id: pylint
exclude: ^(.cmake-format.py|conan/conanfile.py)
additional_dependencies: ["PySide2", "PySide6"]
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.6.0
hooks:
- id: autopep8
- repo: https://github.com/codespell-project/codespell
rev: v2.1.0
hooks:
- id: codespell
- repo: https://github.com/cheshirekow/cmake-format-precommit
rev: v0.6.13
hooks:
- id: cmake-lint
exclude: (.py.cmake|Doxyfile.cmake)
- id: cmake-format
exclude: (.py.cmake|Doxyfile.cmake)
- repo: https://github.com/markdownlint/markdownlint
rev: v0.11.0
hooks:
- id: markdownlint
entry: mdl
language: ruby
files: \.(md|mdown|markdown)$
- repo: https://github.com/fsfe/reuse-tool
rev: v1.0.0
hooks:
- id: reuse

595
.pylintrc Normal file
View File

@@ -0,0 +1,595 @@
[MASTER]
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-whitelist=
# Specify a score threshold to be exceeded before program exits with error.
fail-under=10.0
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS
# Add files or directories matching the regex patterns to the blacklist. The
# regex matches against base names, not paths.
ignore-patterns=rc_assets.py
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
# number of processors available to use.
jobs=1
# Control the amount of potential inferred values when inferring a single
# object. This can help the performance when dealing with large functions or
# complex, nested conditions.
limit-inference-results=100
# List of plugins (as comma separated values of python module names) to load,
# usually to register additional checkers.
load-plugins=
# Pickle collected data for later comparisons.
persistent=yes
# When enabled, pylint would attempt to guess common misconfiguration and emit
# user-friendly hints instead of false-positive error messages.
suggestion-mode=yes
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
confidence=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once). You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
disable=print-statement,
parameter-unpacking,
unpacking-in-except,
old-raise-syntax,
backtick,
long-suffix,
old-ne-operator,
old-octal-literal,
import-star-module-level,
non-ascii-bytes-literal,
raw-checker-failed,
bad-inline-option,
locally-disabled,
file-ignored,
suppressed-message,
useless-suppression,
deprecated-pragma,
use-symbolic-message-instead,
apply-builtin,
basestring-builtin,
buffer-builtin,
cmp-builtin,
coerce-builtin,
execfile-builtin,
file-builtin,
long-builtin,
raw_input-builtin,
reduce-builtin,
standarderror-builtin,
unicode-builtin,
xrange-builtin,
coerce-method,
delslice-method,
getslice-method,
setslice-method,
no-absolute-import,
old-division,
dict-iter-method,
dict-view-method,
next-method-called,
metaclass-assignment,
indexing-exception,
raising-string,
reload-builtin,
oct-method,
hex-method,
nonzero-method,
cmp-method,
input-builtin,
round-builtin,
intern-builtin,
unichr-builtin,
map-builtin-not-iterating,
zip-builtin-not-iterating,
range-builtin-not-iterating,
filter-builtin-not-iterating,
using-cmp-argument,
eq-without-hash,
div-method,
idiv-method,
rdiv-method,
exception-message-attribute,
invalid-str-codec,
sys-max-int,
bad-python3-import,
deprecated-string-function,
deprecated-str-translate-call,
deprecated-itertools-function,
deprecated-types-field,
next-method-defined,
dict-items-not-iterating,
dict-keys-not-iterating,
dict-values-not-iterating,
deprecated-operator-function,
deprecated-urllib-function,
xreadlines-attribute,
deprecated-sys-function,
exception-escape,
comprehension-escape,
consider-using-f-string,
R0801,I1101,E0401
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
enable=c-extension-no-member=
[REPORTS]
# Python expression which should return a score less than or equal to 10. You
# have access to the variables 'error', 'warning', 'refactor', and 'convention'
# which contain the number of messages in each category, as well as 'statement'
# which is the total number of statements analyzed. This score is used by the
# global evaluation report (RP0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# Template used to display messages. This is a python new-style format string
# used to format the message information. See doc for all details.
#msg-template=
# Set the output format. Available formats are text, parseable, colorized, json
# and msvs (visual studio). You can also give a reporter class, e.g.
# mypackage.mymodule.MyReporterClass.
output-format=text
# Tells whether to display a full report or only the messages.
reports=no
# Activate the evaluation score.
score=yes
[REFACTORING]
# Maximum number of nested blocks for function / method body
max-nested-blocks=6
# Complete name of functions that never returns. When checking for
# inconsistent-return-statements if a never returning function is called then
# it will be considered as an explicit return statement and no message will be
# printed.
never-returning-functions=sys.exit
[BASIC]
# Naming style matching correct argument names.
argument-naming-style=camelCase
# Regular expression matching correct argument names. Overrides argument-
# naming-style.
#argument-rgx=
# Naming style matching correct attribute names.
attr-naming-style=camelCase
# Regular expression matching correct attribute names. Overrides attr-naming-
# style.
#attr-rgx=
# Bad variable names which should always be refused, separated by a comma.
bad-names=foo,
bar,
baz,
toto,
tutu,
tata
# Bad variable names regexes, separated by a comma. If names match any regex,
# they will always be refused
bad-names-rgxs=
# Naming style matching correct class attribute names.
class-attribute-naming-style=any
# Regular expression matching correct class attribute names. Overrides class-
# attribute-naming-style.
#class-attribute-rgx=
# Naming style matching correct class names.
class-naming-style=PascalCase
# Regular expression matching correct class names. Overrides class-naming-
# style.
#class-rgx=
# Naming style matching correct constant names.
const-naming-style=camelCase
# Regular expression matching correct constant names. Overrides const-naming-
# style.
#const-rgx=
# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
# Naming style matching correct function names.
function-naming-style=camelCase
# Regular expression matching correct function names. Overrides function-
# naming-style.
#function-rgx=
# Good variable names which should always be accepted, separated by a comma.
good-names=i,
j,
k,
ex,
Run,
_
# Good variable names regexes, separated by a comma. If names match any regex,
# they will always be accepted
good-names-rgxs=^[a-z]?$
# Include a hint for the correct naming format with invalid-name.
include-naming-hint=no
# Naming style matching correct inline iteration names.
inlinevar-naming-style=any
# Regular expression matching correct inline iteration names. Overrides
# inlinevar-naming-style.
#inlinevar-rgx=
# Naming style matching correct method names.
method-naming-style=any
# Regular expression matching correct method names. Overrides method-naming-
# style.
#method-rgx=
# Naming style matching correct module names.
module-naming-style=any
# Regular expression matching correct module names. Overrides module-naming-
# style.
#module-rgx=
# Colon-delimited sets of names that determine each other's naming style when
# the name regexes allow several styles.
name-group=
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
# List of decorators that produce properties, such as abc.abstractproperty. Add
# to this list to register other decorators that produce valid properties.
# These decorators are taken in consideration only for invalid-name.
property-classes=abc.abstractproperty
# Naming style matching correct variable names.
variable-naming-style=camelCase
# Regular expression matching correct variable names. Overrides variable-
# naming-style.
#variable-rgx="[a-z0-9_]{1,30}$"
[FORMAT]
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format=
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren=4
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# Maximum number of characters on a single line.
max-line-length=120
# Maximum number of lines in a module.
max-module-lines=1000
# Allow the body of a class to be on the same line as the declaration if body
# contains single statement.
single-line-class-stmt=no
# Allow the body of an if to be on the same line as the test if there is no
# else.
single-line-if-stmt=no
[LOGGING]
# The type of string formatting that logging methods do. `old` means using %
# formatting, `new` is for `{}` formatting.
logging-format-style=old
# Logging modules to check that the string format arguments are in logging
# function parameter format.
logging-modules=logging
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,
XXX,
TODO
# Regular expression of note tags to take in consideration.
#notes-rgx=
[SIMILARITIES]
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# Ignore imports when computing similarities.
ignore-imports=yes
# Minimum lines number of a similarity.
min-similarity-lines=4
[SPELLING]
# Limits count of emitted suggestions for spelling mistakes.
max-spelling-suggestions=4
# Spelling dictionary name. Available dictionaries: en_AG (hunspell), en_AU
# (hunspell), en_BS (hunspell), en_BW (hunspell), en_BZ (hunspell), en_CA
# (hunspell), en_DK (hunspell), en_GB (hunspell), en_GH (hunspell), en_HK
# (hunspell), en_IE (hunspell), en_IN (hunspell), en_JM (hunspell), en_MW
# (hunspell), en_NA (hunspell), en_NG (hunspell), en_NZ (hunspell), en_PH
# (hunspell), en_SG (hunspell), en_TT (hunspell), en_US (hunspell), en_ZA
# (hunspell), en_ZM (hunspell), en_ZW (hunspell).
spelling-dict=
# List of comma separated words that should not be checked.
spelling-ignore-words=
# A path to a file that contains the private dictionary; one word per line.
spelling-private-dict-file=
# Tells whether to store unknown words to the private dictionary (see the
# --spelling-private-dict-file option) instead of raising a message.
spelling-store-unknown-words=no
[STRING]
# This flag controls whether inconsistent-quotes generates a warning when the
# character used as a quote delimiter is used inconsistently within a module.
check-quote-consistency=no
# This flag controls whether the implicit-str-concat should generate a warning
# on implicit string concatenation in sequences defined over several lines.
check-str-concat-over-line-jumps=no
[TYPECHECK]
# List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers.
contextmanager-decorators=contextlib.contextmanager
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# Tells whether to warn about missing members when the owner of the attribute
# is inferred to be None.
ignore-none=yes
# This flag controls whether pylint should warn about no-member and similar
# checks whenever an opaque object is returned when inferring. The inference
# can return multiple potential results while evaluating a Python object, but
# some branches might not be evaluated, which results in partial inference. In
# that case, it might be useful to still emit no-member and other checks for
# the rest of the inferred objects.
ignore-on-opaque-inference=yes
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
ignored-classes=optparse.Values,thread._local,_thread._local
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis). It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=
# Show a hint with possible names when a member name was not found. The aspect
# of finding the hint is based on edit distance.
missing-member-hint=yes
# The minimum edit distance a name should have in order to be considered a
# similar match for a missing member name.
missing-member-hint-distance=1
# The total number of similar names that should be taken in consideration when
# showing a hint for a missing member.
missing-member-max-choices=1
# List of decorators that change the signature of a decorated function.
signature-mutators=
[VARIABLES]
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid defining new builtins when possible.
additional-builtins=
# Tells whether unused global variables should be treated as a violation.
allow-global-unused-variables=yes
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
callbacks=cb_,
_cb
# A regular expression matching the name of dummy variables (i.e. expected to
# not be used).
dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
# Argument names that match this expression will be ignored. Default to name
# with leading underscore.
ignored-argument-names=_.*|^ignored_|^unused_
# Tells whether we should check for unused import in __init__ files.
init-import=no
# List of qualified module names which can have objects that can redefine
# builtins.
redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
[CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,
__new__,
setUp,
__post_init__
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected=_asdict,
_fields,
_replace,
_source,
_make
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=cls
[DESIGN]
# Maximum number of arguments for function / method.
max-args=10
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Maximum number of boolean expressions in an if statement (see R0916).
max-bool-expr=6
# Maximum number of branch for function / method body.
max-branches=15
# Maximum number of locals for function / method body.
max-locals=20
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
# Maximum number of return / yield for function / method body.
max-returns=6
# Maximum number of statements in function / method body.
max-statements=50
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
[IMPORTS]
# List of modules that can be imported at any level, not just the top level
# one.
allow-any-import-level=
# Allow wildcard imports from modules that define __all__.
allow-wildcard-with-all=no
# Analyse import fallback blocks. This can be used to support both Python 2 and
# 3 compatible code, which means that the block might have code that exists
# only in one or another interpreter, leading to false positives when analysed.
analyse-fallback-blocks=no
# Deprecated modules which should not be used, separated by a comma.
deprecated-modules=optparse,tkinter.tix
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled).
ext-import-graph=
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report RP0402 must not be disabled).
import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled).
int-import-graph=
# Force import order to recognize a module as part of the standard
# compatibility libraries.
known-standard-library=
# Force import order to recognize a module as part of a third party library.
known-third-party=enchant
# Couples of modules and preferred modules, separated by a comma.
preferred-modules=
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "BaseException, Exception".
overgeneral-exceptions=BaseException,
Exception

View File

@@ -1,18 +1,38 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: KDDockWidgets
Upstream-Contact: <info@kdab.com>
Upstream-Contact: <info@kdab.com>
Source: https://www.github.com/KDAB/KDDockWidgets
Files: *.qrc *.json *.xml *.html src/fwd_headers/*
Copyright: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
#misc source code
Files: *.qrc *.json *.xml src/fwd_headers/*
Copyright: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
License: GPL-2.0-only OR GPL-3.0-only
#misc documentation
Files: CONTRIBUTORS.txt Changelog README.md README-QtQuick.md README-WASM.md README-Wayland.md README-bindings.md README-troubleshooting conan/README.txt python/examples/README.txt python/examples-qt6/README.txt docs_devel/*.md docs/KDDockWidgets-CopyrightAssignmentForm.pdf *.html
Copyright: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
License: GPL-2.0-only OR GPL-3.0-only
#misc config files
Files: .pre-commit-config.yaml .codespellrc .krazy .cmake-format .clang-format .clazy .gitignore .mdlrc .mdlrc.rb .pep8 .pylintrc appveyor.yml mkdocs.yml code.dev-*.code-workspace code.dev*.code-workspace docs/api/Doxyfile.cmake distro/* *.yaml
Copyright: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
License: BSD-3-Clause
#artwork
Files: screencap.gif images/* src/img/* docs/api/*.png examples/dockwidgets/assets/*.png src/img/classic_indicators/*.png
Copyright: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Copyright: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
License: GPL-2.0-only OR GPL-3.0-only
#3rdparty
Files: cmake/ECM/modules/*
Copyright:
Copyright: The KDE Project
License: BSD-3-Clause
#3rdparty C++
Files: src/3rdparty/kdbindings/genindex_array.h
Copyright: 2021 Jeremy Burns
License: MIT
Files: src/3rdparty/doctest/doctest.h
Copyright: 2016-2021 Viktor Kirilov <vik.kirilov@gmail.com>
License: MIT

View File

@@ -1,66 +0,0 @@
env:
global:
- secure: "NlWO/NTPlOU6cowOMuPOvjAprXVwIjmpHHf9CoMR71E2c/eBFFKIHj10kXuyFwz2KihHAIExmo9OlGtGniNWobvIrVrabO3dsOSb6UGbPAQkzQiyQLKsDNQAZx3nMuWEKBtMsVRee6rd7/2uGTY4WB5Ot3VhrUYcN1FoRgQQ9gk="
branches:
only:
- master
matrix:
include:
- os: linux
dist: bionic
- os: osx
osx_image: xcode11.5
env:
- QT_SELECT=qt5
- CMAKE_PREFIX_PATH=/usr/local/opt/qt
language: cpp
compiler:
- gcc
- clang
script:
- mkdir build
- cd build
- cmake -DCMAKE_BUILD_TYPE=Release -DKDDockWidgets_TESTS=True -KDDockWidgets_EXAMPLES=True -DKDDockWidgets_DEVELOPER_MODE=True ..
- make
- make test
notifications:
email:
recipients:
- allen.winter@kdab.com
- sergio.martins@kdab.com
on_success: never
on_failure: always
dist: bionic
addons:
apt:
update: true
packages:
- qt5-default
- qtbase5-dev
- qtbase5-dev-tools
- qtbase5-private-dev
- qttools5-dev
- qttools5-dev-tools
- qtdeclarative5-dev
- qtdeclarative5-dev-tools
- libqt5xmlpatterns5-dev
- libqt5xmlpatterns5
- qtxmlpatterns5-dev-tools
- libqt5x11extras5-dev
homebrew:
update: true
packages:
- qt5
coverity_scan:
project:
name: KDAB/KDDockWidgets
notification_email: allen.winter@kdab.com
build_command_prepend: cd build && cmake ..
build_command: make
branch_pattern: coverity_scan

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,165 +11,251 @@
# Pass the following variables to cmake to control the build:
#
# -DKDDockWidgets_QT6=[true|false]
# Build against Qt6 rather than Qt5
# Default=false (Qt5 will be used even if Qt6 is available)
# -DKDDockWidgets_QT6=[true|false] Build against Qt6 rather than Qt5
# Default=false (Qt5 will be used even if Qt6 is available)
#
# -DKDDockWidgets_STATIC=[true|false]
# Build static versions of the libraries
# Default=false
# -DKDDockWidgets_STATIC=[true|false] Build static versions of the libraries
# Default=false
#
# -DKDDockWidgets_TESTS=[true|false]
# Build the test harness.
# Currently ignored unless you also set KDDockWidgets_DEVELOPER_MODE=True
# Default=false
# -DKDDockWidgets_TESTS=[true|false] Build the test harness. Currently ignored
# (except for Python bindings) unless KDDockWidgets_DEVELOPER_MODE=True.
# Default=false
#
# -DKDDockWidgets_EXAMPLES=[true|false]
# Build the examples.
# Default=true
# -DKDDockWidgets_EXAMPLES=[true|false] Build the examples. Default=true
#
# -DKDDockWidgets_DOCS=[true|false]
# Build the API documentation. Enables the 'docs' build target.
# Default=false
# -DKDDockWidgets_DOCS=[true|false] Build the API documentation. Enables the
# 'docs' build target. Default=false
#
# -DKDDockWidgets_QTQUICK=[true|false]
# Build for QtQuick instead of QtWidgets.
# Default=false
# -DKDDockWidgets_PYTHON_BINDINGS=[true|false] Build/Generate python bindings.
# Always false for Debug builds (If your shiboken or pyside is installed in a
# non-standard locations try passing the SHIBOKEN_CUSTOM_PREFIX and
# PYSIDE_CUSTOM_PREFIX variables.) Default=false
#
# -DKDDockWidgets_PYTHON_BINDINGS=[true|false]
# Build/Generate python bindings. Always false for Debug builds
# (If your shiboken or pyside is installed in a non-standard locations
# try passing the SHIBOKEN_CUSTOM_PREFIX and PYSIDE_CUSTOM_PREFIX variables.)
# Default=false
#
# -DKDDockWidgets_PYTHON_BINDINGS_INSTALL_PREFIX=[path]
# Set an alternative install path for Python bindings
# Default=CMAKE_INSTALL_PREFIX
# -DKDDockWidgets_PYTHON_BINDINGS_INSTALL_PREFIX=[path] Set an alternative
# install path for Python bindings Default=CMAKE_INSTALL_PREFIX
# ## DO NOT USE IF YOU ARE AN END-USER. FOR THE DEVELOPERS ONLY!!
## Special CMake Options for Developers
# ## DO NOT USE IF YOU ARE AN END-USER. FOR THE DEVELOPERS ONLY!! # Special
# CMake Options for Developers
#
# -DKDDockWidgets_DEVELOPER_MODE=[true|false]
# Configure the build for a developer setup.
# Enables some features that are not geared towards end-users.
# Forces the test harness to be built.
# Default=false
# -DKDDockWidgets_DEVELOPER_MODE=[true|false] Configure the build for a
# developer setup. Enables some features that are not geared towards end-users.
# Forces the test harness to be built. Default=false
#
# -DKDDockWidgets_WERROR=[true|false]
# Compile with the -Werror gcc/clang option (always true for developer-mode)
# Default=false
# -DKDDockWidgets_WERROR=[true|false] Compile with the -Werror gcc/clang option
# (always true for developer-mode) Default=false
#
# -DKDDockWidgets_LINTER=[true|false]
# Build the layout linter.
# Ignored unless KDDockWidgets_DEVELOPER_MODE=True
# Default=true
# -DKDDockWidgets_LINTER=[true|false] Build the layout linter. Ignored unless
# KDDockWidgets_DEVELOPER_MODE=True Default=true
#
# -DKDDockWidgets_FUZZER=[true|false]
# Build the fuzzer.
# Ignored unless KDDockWidgets_DEVELOPER_MODE=True
# Default=true
# -DKDDockWidgets_CODE_COVERAGE=[true|false] Enable coverage reporting. Ignored
# unless KDDockWidgets_DEVELOPER_MODE=True Default=false
#
# -DKDDockWidgets_FRONTENDS='qtwidgets;qtquick' Semicolon separated list of
# frontends to enable. If not specified, frontends will be enabled based on
# availability of libraries on your system.
cmake_minimum_required(VERSION 3.7)
# Allow using a non-KDAB install location.
set(KDAB_INSTALL True CACHE INTERNAL "Install to default KDAB Location")
set(KDAB_INSTALL
True
CACHE INTERNAL "Install to default KDAB Location"
)
if(DEFINED CMAKE_INSTALL_PREFIX)
if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "")
set(KDAB_INSTALL False CACHE INTERNAL "Install to non-KDAB Location")
endif()
if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "")
set(KDAB_INSTALL
False
CACHE INTERNAL "Install to non-KDAB Location"
)
endif()
endif()
if(${CMAKE_VERSION} VERSION_LESS "3.12.0")
project(KDDockWidgets LANGUAGES CXX)
project(KDDockWidgets LANGUAGES CXX)
else()
project(KDDockWidgets
DESCRIPTION "An advanced docking system for Qt"
HOMEPAGE_URL "https://github.com/KDAB/KDDockWidgets"
LANGUAGES CXX)
project(
KDDockWidgets
DESCRIPTION "An advanced docking system for Qt"
HOMEPAGE_URL "https://github.com/KDAB/KDDockWidgets"
LANGUAGES CXX
)
endif()
set(${PROJECT_NAME}_VERSION_MAJOR 1)
set(${PROJECT_NAME}_VERSION_MINOR 4)
set(${PROJECT_NAME}_VERSION_PATCH 95)
set(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH})
set(PROJECT_VERSION ${${PROJECT_NAME}_VERSION}) #PROJECT_VERSION is needed by some ECM modules
set(${PROJECT_NAME}_SOVERSION "1.5")
set(KDDockWidgets_VERSION_MAJOR 2)
set(KDDockWidgets_VERSION_MINOR 0)
set(KDDockWidgets_VERSION_PATCH 9)
set(KDDockWidgets_VERSION ${KDDockWidgets_VERSION_MAJOR}.${KDDockWidgets_VERSION_MINOR}.${KDDockWidgets_VERSION_PATCH})
set(PROJECT_VERSION ${KDDockWidgets_VERSION}) # PROJECT_VERSION is needed by some ECM modules
set(KDDockWidgets_SOVERSION "2.0")
include(FeatureSummary)
option(${PROJECT_NAME}_QT6 "Build against Qt 6" OFF)
option(${PROJECT_NAME}_DEVELOPER_MODE "Developer Mode" OFF)
option(${PROJECT_NAME}_PYTHON_BINDINGS "Build python bindings" OFF)
option(${PROJECT_NAME}_QTQUICK "Build for QtQuick instead of QtWidgets" OFF)
option(${PROJECT_NAME}_STATIC "Build statically" OFF)
option(${PROJECT_NAME}_TESTS "Build the tests" OFF)
option(${PROJECT_NAME}_EXAMPLES "Build the examples" ON)
option(${PROJECT_NAME}_DOCS "Build the API documentation" OFF)
option(${PROJECT_NAME}_WERROR "Use -Werror (will be true for developer-mode unconditionally)" OFF)
option(${PROJECT_NAME}_X11EXTRAS "On Linux, link against QtX11Extras so we can detect if the compositor supports transparency. Not applicable to other platforms or Qt6." ON)
option(KDDockWidgets_QT6 "Build against Qt 6" OFF)
option(KDDockWidgets_DEVELOPER_MODE "Developer Mode" OFF)
option(KDDockWidgets_PYTHON_BINDINGS "Build python bindings" OFF)
option(KDDockWidgets_STATIC "Build statically" OFF)
option(KDDockWidgets_TESTS "Build the tests" OFF)
option(KDDockWidgets_EXAMPLES "Build the examples" ON)
option(KDDockWidgets_DOCS "Build the API documentation" OFF)
option(KDDockWidgets_WERROR "Use -Werror (will be true for developer-mode unconditionally)" OFF)
option(KDDockWidgets_X11EXTRAS
"Link against QtX11Extras to detect if the compositor supports transparency. Not applicable on non-Linux or Qt6."
ON
)
option(KDDockWidgets_XLib "On Linux, link against XLib, for a more robust window z-order detection." OFF)
option(KDDockWidgets_CODE_COVERAGE "Enable coverage reporting" OFF)
option(KDDockWidgets_FRONTENDS "Semicolon separated list of frontends to enable" "")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/ECM/modules")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/KDAB/modules")
# Set a default build type if none was specified
set(default_build_type "Release")
if(EXISTS "${CMAKE_SOURCE_DIR}/.git" OR ${PROJECT_NAME}_DEVELOPER_MODE)
set(default_build_type "Debug")
if(EXISTS "${CMAKE_SOURCE_DIR}/.git" OR KDDockWidgets_DEVELOPER_MODE)
set(default_build_type "Debug")
endif()
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to ${default_build_type} as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
message(STATUS "Setting build type to ${default_build_type} as none was specified.")
set(CMAKE_BUILD_TYPE
"${default_build_type}"
CACHE STRING "Choose the type of build." FORCE
)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
if(${PROJECT_NAME}_QT6)
set(Qt_VERSION_MAJOR 6)
set(QT_MIN_VERSION "6.0.0")
find_package(Qt6Widgets ${QT_MIN_VERSION} REQUIRED)
find_package(Qt6Test ${QT_MIN_VERSION} REQUIRED)
set(${PROJECT_NAME}_LIBRARY_QTID "-qt6")
if(KDDockWidgets_XLib)
add_definitions(-DKDDockWidgets_XLIB)
endif()
if(MSVC AND MSVC_TOOLSET_VERSION LESS 142)
message(FATAL_ERROR "VS 2019 is the minimum required toolset")
endif()
if(KDDockWidgets_QT6)
set(Qt_VERSION_MAJOR 6)
set(QT_MIN_VERSION "6.3.0")
set(KDDockWidgets_LIBRARY_QTID "-qt6")
else()
set(Qt_VERSION_MAJOR 5)
set(QT_MIN_VERSION "5.12")
find_package(Qt5Widgets ${QT_MIN_VERSION} REQUIRED)
find_package(Qt5Test ${QT_MIN_VERSION} REQUIRED)
set(${PROJECT_NAME}_LIBRARY_QTID "")
set(Qt_VERSION_MAJOR 5)
set(QT_MIN_VERSION "5.15")
set(KDDockWidgets_LIBRARY_QTID "")
endif()
include(KDQtInstallPaths) #to set QT_INSTALL_FOO variables
set(${PROJECT_NAME}_DEPS "widgets")
if(${PROJECT_NAME}_QTQUICK)
find_package(Qt${Qt_VERSION_MAJOR}Quick)
find_package(Qt${Qt_VERSION_MAJOR}QuickControls2)
add_definitions(-DKDDOCKWIDGETS_QTQUICK)
set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} quick quickcontrols2")
# BEGIN frontend enabling
if(KDDockWidgets_FRONTENDS)
set(KDDockWidgets_ALL_FRONTENDS "qtwidgets;qtquick;dummy;flutter")
foreach(frontend ${KDDockWidgets_FRONTENDS})
if(NOT ${frontend} IN_LIST KDDockWidgets_ALL_FRONTENDS)
message(FATAL_ERROR "Unknown frontend ${frontend}")
endif()
endforeach()
endif()
if(KDDockWidgets_FRONTENDS)
# qtwidgets
if("qtwidgets" IN_LIST KDDockWidgets_FRONTENDS)
find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Widgets)
set(KDDW_FRONTEND_QTWIDGETS ON)
endif()
# qtquick
if("qtquick" IN_LIST KDDockWidgets_FRONTENDS)
find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Quick QuickControls2)
set(KDDW_FRONTEND_QTQUICK ON)
endif()
# dummy
if("dummy" IN_LIST KDDockWidgets_FRONTENDS)
# For now dummy still depends on Qt
find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Gui)
set(KDDW_FRONTEND_DUMMY ON)
endif()
# flutter
if("flutter" IN_LIST KDDockWidgets_FRONTENDS)
# For now flutter still depends on Qt
find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Gui)
set(KDDW_FRONTEND_FLUTTER ON)
endif()
else()
add_definitions(-DKDDOCKWIDGETS_QTWIDGETS)
set(ENABLED_FRONTENDS "")
message("No frontends specified explicitly.")
# qtwidgets
find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE COMPONENTS Widgets Quick QuickControls2)
if(Qt${Qt_VERSION_MAJOR}Widgets_FOUND)
list(APPEND ENABLED_FRONTENDS "qtwidgets")
set(KDDW_FRONTEND_QTWIDGETS ON)
endif()
# qtquick
if(Qt${Qt_VERSION_MAJOR}Quick_FOUND AND Qt${Qt_VERSION_MAJOR}QuickControls2_FOUND)
list(APPEND ENABLED_FRONTENDS "qtquick")
set(KDDW_FRONTEND_QTQUICK ON)
endif()
if(NOT ENABLED_FRONTENDS)
message(FATAL_ERROR "Failed to enable any frontends. Please install the required libraries and try again.")
endif()
message("Following frontends have been enabled:")
foreach(frontend ${ENABLED_FRONTENDS})
message("* ${frontend}")
endforeach()
endif()
if(NOT WIN32 AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ${PROJECT_NAME}_QT6 AND ${PROJECT_NAME}_X11EXTRAS)
set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} x11extras")
# END frontend enabling
include(KDQtInstallPaths) # to set QT_INSTALL_FOO variables
add_definitions(-DQT_NO_KEYWORDS)
option(KDockWidgets_PRETTY_QTWIDGETS_HEADERS
"Install DockWidget.h and MainWindow.h as synonyms to the *_qtwidgets.h counterparts."
${KDDW_FRONTEND_QTWIDGETS}
)
if(KDDW_FRONTEND_QTWIDGETS)
set(KDDockWidgets_DEPS "widgets")
endif()
#Always build the test harness in developer-mode
if(${PROJECT_NAME}_DEVELOPER_MODE)
set(${PROJECT_NAME}_TESTS ON)
set(${PROJECT_NAME}_WERROR ON)
include(ECMEnableSanitizers)
if(KDDW_FRONTEND_QTQUICK)
set(KDDockWidgets_DEPS "${KDDockWidgets_DEPS} quick quickcontrols2")
endif()
if(NOT WIN32
AND NOT APPLE
AND NOT EMSCRIPTEN
AND NOT KDDockWidgets_QT6
AND KDDockWidgets_X11EXTRAS
)
set(KDDockWidgets_DEPS "${KDDockWidgets_DEPS} x11extras")
endif()
# Always build the test harness in developer-mode
if(KDDockWidgets_DEVELOPER_MODE)
set(KDDockWidgets_TESTS ON)
set(KDDockWidgets_WERROR ON)
include(ECMEnableSanitizers)
# find_package(doctest REQUIRED) TODOm3
endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(IS_CLANG_BUILD TRUE)
set(IS_CLANG_BUILD TRUE)
else()
set(IS_CLANG_BUILD FALSE)
set(IS_CLANG_BUILD FALSE)
endif()
if(${PROJECT_NAME}_QTQUICK)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
@@ -179,116 +265,174 @@ set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
# Sets compiler flags for the specified target, taking platform into consideration.
macro(set_compiler_flags targetName)
if(${PROJECT_NAME}_DEVELOPER_MODE)
target_compile_definitions(${targetName} PUBLIC DOCKS_DEVELOPER_MODE PRIVATE QT_FORCE_ASSERTS)
if(KDDockWidgets_DEVELOPER_MODE)
target_compile_definitions(
${targetName}
PUBLIC DOCKS_DEVELOPER_MODE
PRIVATE QT_FORCE_ASSERTS
)
if(NOT MSVC)
target_compile_options(${targetName} PRIVATE -Wall -Wextra)
if(NOT MSVC)
target_compile_options(${targetName} PRIVATE -Wall -Wextra)
endif()
if(APPLE)
target_compile_options(${targetName} PRIVATE -Wweak-vtables)
endif()
endif()
if(APPLE)
target_compile_options(${targetName} PRIVATE -Wweak-vtables)
# Enable -Werror
if(KDDockWidgets_WERROR AND (NOT MSVC OR IS_CLANG_BUILD)) # clang-cl accepts these too
target_compile_options(${targetName} PRIVATE -Werror -Wundef -Wno-error=deprecated-declarations)
endif()
endif()
# Enable -Werror
if(${PROJECT_NAME}_WERROR AND (NOT MSVC OR IS_CLANG_BUILD)) # clang-cl accepts these too
target_compile_options(${targetName} PRIVATE -Werror -Wundef -Wno-error=deprecated-declarations)
endif()
endmacro()
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE) OR
(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE) OR
(CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32))
# Linker warnings should be treated as errors
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_MODULE_LINKER_FLAGS}")
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE)
OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32)
)
# Linker warnings should be treated as errors
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_MODULE_LINKER_FLAGS}")
string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" compileflags)
if("${CMAKE_CXX_FLAGS} ${${compileflags}}" MATCHES "-fsanitize")
set(sanitizers_enabled TRUE)
else()
set(sanitizers_enabled FALSE)
endif()
string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" compileflags)
# cannot enable this for clang + sanitizers
if (NOT sanitizers_enabled OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Do not allow undefined symbols, even in non-symbolic shared libraries
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}")
endif()
if("${CMAKE_CXX_FLAGS} ${${compileflags}}" MATCHES "-fsanitize")
set(sanitizers_enabled TRUE)
else()
set(sanitizers_enabled FALSE)
endif()
if(APPLE OR LINUX)
# cannot enable this for clang + sanitizers
if(NOT sanitizers_enabled OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Do not allow undefined symbols, even in non-symbolic shared libraries
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}")
endif()
endif()
endif()
if(${PROJECT_NAME}_STATIC)
set(${PROJECT_NAME}_LIBRARY_MODE "STATIC")
if(KDDockWidgets_STATIC)
set(KDDockWidgets_LIBRARY_MODE "STATIC")
else()
set(${PROJECT_NAME}_LIBRARY_MODE "SHARED")
set(KDDockWidgets_LIBRARY_MODE "SHARED")
endif()
if(KDAB_INSTALL)
if(UNIX)
set(CMAKE_INSTALL_PREFIX "/usr/local/KDAB/${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}" CACHE INTERNAL "Install to default KDAB Location")
elseif(WIN32)
set(CMAKE_INSTALL_PREFIX "C:\\KDAB\\${PROJECT_NAME}-$$VERSION" CACHE INTERNAL "Install to default KDAB Location")
endif()
if(UNIX)
set(CMAKE_INSTALL_PREFIX
"/usr/local/KDAB/KDDockWidgets-${KDDockWidgets_VERSION}"
CACHE INTERNAL "Install to default KDAB Location"
)
elseif(WIN32)
set(CMAKE_INSTALL_PREFIX
"C:\\KDAB\\KDDockWidgets-${KDDockWidgets_VERSION}"
CACHE INTERNAL "Install to default KDAB Location"
)
endif()
endif()
# setup default install locations
include(InstallLocation)
include(KDInstallLocation)
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
set(${PROJECT_NAME}_IS_ROOT_PROJECT TRUE)
set(KDDockWidgets_IS_ROOT_PROJECT TRUE)
message(STATUS "Building ${PROJECT_NAME} ${${PROJECT_NAME}_VERSION} in ${CMAKE_BUILD_TYPE} mode. Installing to ${CMAKE_INSTALL_PREFIX}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
install(FILES LICENSE.txt README.md DESTINATION ${INSTALL_DOC_DIR})
install(DIRECTORY LICENSES DESTINATION ${INSTALL_DOC_DIR})
# Generate .pri file for qmake users
#TODO: ECM does not support Qt6 yet
if(Qt_VERSION_MAJOR EQUAL 5 AND
CMAKE_VERSION VERSION_GREATER "3.11.99" AND NOT CMAKE_CONFIGURATION_TYPES) # Not working with VS generator or older cmake versions
include(ECMGeneratePriFile)
set(PROJECT_VERSION_STRING ${${PROJECT_NAME}_VERSION})
ecm_generate_pri_file(BASE_NAME KDDockWidgets
LIB_NAME kddockwidgets
DEPS ${${PROJECT_NAME}_DEPS}
FILENAME_VAR pri_filename
INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}
message(STATUS "Building KDDockWidgets ${KDDockWidgets_VERSION} in ${CMAKE_BUILD_TYPE} mode. "
"Installing to ${CMAKE_INSTALL_PREFIX}"
)
install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
install(FILES LICENSE.txt README.md DESTINATION ${INSTALL_DOC_DIR})
install(DIRECTORY LICENSES DESTINATION ${INSTALL_DOC_DIR})
# Generate .pri file for qmake users
# (except for older cmake versions and when using the VS generator)
if(CMAKE_VERSION VERSION_GREATER "3.11.99" AND NOT CMAKE_CONFIGURATION_TYPES)
include(ECMGeneratePriFile)
set(PROJECT_VERSION_STRING ${KDDockWidgets_VERSION})
ecm_generate_pri_file(
BASE_NAME
KDDockWidgets
LIB_NAME
kddockwidgets${${PROJECT_NAME}_LIBRARY_QTID}
DEPS
${KDDockWidgets_DEPS}
FILENAME_VAR
pri_filename
INCLUDE_INSTALL_DIR
${CMAKE_INSTALL_INCLUDEDIR}
)
install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
endif()
else()
# Always disable tests, examples, docs when used as a submodule
set(KDDockWidgets_IS_ROOT_PROJECT FALSE)
set(KDDockWidgets_TESTS FALSE)
set(KDDockWidgets_EXAMPLES FALSE)
set(KDDockWidgets_DOCS FALSE)
endif()
if(KDDockWidgets_TESTS)
enable_testing()
endif()
add_subdirectory(src)
if(${PROJECT_NAME}_IS_ROOT_PROJECT)
if(${PROJECT_NAME}_EXAMPLES)
if(${PROJECT_NAME}_QTQUICK)
add_subdirectory(examples/qtquick)
else()
add_subdirectory(examples/dockwidgets)
add_subdirectory(examples/minimal)
add_subdirectory(examples/minimal-mdi)
set_compiler_flags(kddockwidgets_example)
set_compiler_flags(kddockwidgets_minimal_example)
if(KDDockWidgets_PYTHON_BINDINGS)
if(CMAKE_BUILD_TYPE MATCHES "^[Dd]eb" OR KDDockWidgets_STATIC)
message(FATAL_ERROR "** Python Bindings are disabled in debug or static builds.")
endif()
endif()
if(${PROJECT_NAME}_DEVELOPER_MODE)
if(CMAKE_UNITY_BUILD)
message(FATAL_ERROR "** Python Bindings are disabled in Unity builds. Try again with CMAKE_UNITY_BUILD=OFF")
endif()
if(${PROJECT_NAME}_TESTS)
enable_testing()
add_subdirectory(tests)
add_subdirectory(python)
endif()
# Require Qt5.15.1 or higher to run the tests_launcher tests on Mac
if(NOT APPLE OR Qt5Widgets_VERSION VERSION_GREATER 5.15.0)
# tst_docks.exe is pretty big (160 tests), so split it in more runs so we can use threads.
if(KDDockWidgets_EXAMPLES)
if(KDDW_FRONTEND_QTQUICK)
add_subdirectory(examples/qtquick)
endif()
if(KDDW_FRONTEND_QTWIDGETS)
add_subdirectory(examples/dockwidgets)
add_subdirectory(examples/minimal)
add_subdirectory(examples/mdi)
add_subdirectory(examples/mdi_with_docking)
set_compiler_flags(qtwidgets_dockwidgets)
set_compiler_flags(qtwidgets_minimal)
set_compiler_flags(qtwidgets_mdi_with_docking)
set_target_properties(
qtwidgets_dockwidgets PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)
set_target_properties(
qtwidgets_mdi_with_docking PROPERTIES RUNTIME_OUTPUT_DIRECTORY
"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)
set_target_properties(
qtwidgets_mdi PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)
set_target_properties(
qtwidgets_minimal PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)
endif()
endif()
if(KDDockWidgets_TESTS)
if(KDDockWidgets_DEVELOPER_MODE)
add_subdirectory(tests)
# tst_docks.exe is pretty big (160 tests), so split it in more runs so we
# can use threads.
add_test(NAME tst_docks0 COMMAND tests_launcher 0 5)
add_test(NAME tst_docks1 COMMAND tests_launcher 1 5)
add_test(NAME tst_docks2 COMMAND tests_launcher 2 5)
@@ -311,32 +455,38 @@ if(${PROJECT_NAME}_IS_ROOT_PROJECT)
add_test(NAME tst_docks19 COMMAND tests_launcher 18 5)
add_test(NAME tst_docks20 COMMAND tests_launcher 19 5)
add_test(NAME tst_docks21 COMMAND tests_launcher 20 5) # one more for rounding leftovers
endif()
if(NOT ${PROJECT_NAME}_QTQUICK)
# tst_multisplitter depends on QWidget
add_test(NAME tst_view COMMAND tst_view)
add_test(NAME tst_window COMMAND tst_window)
add_test(NAME tst_droparea COMMAND tst_droparea)
add_test(NAME tst_platform COMMAND tst_platform)
add_test(NAME tst_viewguard COMMAND tst_viewguard)
add_test(NAME tst_group COMMAND tst_group)
add_test(NAME tst_titlebar COMMAND tst_titlebar)
add_test(NAME tst_stack COMMAND tst_stack)
add_test(NAME tst_tabbar COMMAND tst_tabbar)
add_test(NAME tst_separator COMMAND tst_separator)
add_test(NAME tst_floatingwindow COMMAND tst_floatingwindow)
add_test(NAME tst_dockwidget COMMAND tst_dockwidget)
add_test(NAME tst_multisplitter COMMAND tst_multisplitter)
endif()
if(KDDW_FRONTEND_QTWIDGETS)
add_test(NAME tst_qtwidgets COMMAND tst_qtwidgets)
endif()
if(KDDW_FRONTEND_QTQUICK)
add_test(NAME tst_qtquick COMMAND tst_qtquick)
endif()
endif()
endif()
if(${PROJECT_NAME}_DOCS)
add_subdirectory(docs) # needs to go last, in case there are build source files
else()
add_custom_target(docs
COMMAND ${CMAKE_COMMAND} -E echo "Sorry, there is no docs target since KDDockWidgets_DOCS=OFF."
"Re-run cmake with the -DKDDockWidgets_DOCS=True option if you want to generate the documentation.")
endif()
# Add uninstall target
include(ECMUninstallTarget)
endif()
if(${PROJECT_NAME}_PYTHON_BINDINGS)
if(CMAKE_BUILD_TYPE MATCHES "^[Dd]eb" OR ${PROJECT_NAME}_STATIC)
message(FATAL_ERROR "** Python Bindings are disabled in debug or static builds.")
endif()
add_subdirectory(python)
if(KDDockWidgets_DOCS)
add_subdirectory(docs) # needs to go last, in case there are build source files
endif()
if(KDDockWidgets_IS_ROOT_PROJECT)
# Add uninstall target (not for submodules since parent projects typically have uninstall too)
include(ECMUninstallTarget)
endif()
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

View File

@@ -9,28 +9,64 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"ECM_ENABLE_SANITIZERS" : "'address;undefined'",
"CMAKE_EXPORT_COMPILE_COMMANDS" : "ON",
"KDDockWidgets_FUZZER" : "OFF"
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick;dummy"
},
"warnings" : {
"uninitialized" : true
"warnings": {
"uninitialized": true
}
},
{
"name": "dev-gammaray",
"displayName": "dev-gammaray",
"description": "A Gammaray friendly build. (No ASAN)",
"name": "dev-asan",
"displayName": "dev-asan",
"description": "An ASAN/UBSAN build",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-gammaray",
"binaryDir": "${sourceDir}/build-dev-asan",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS" : "ON",
"KDDockWidgets_FUZZER" : "OFF"
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"ECM_ENABLE_SANITIZERS": "'address;undefined'",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick;dummy"
},
"warnings" : {
"uninitialized" : true
"warnings": {
"uninitialized": true
}
},
{
"name": "dev-flutter",
"displayName": "dev-flutter",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-flutter",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"KDDockWidgets_FRONTENDS": "flutter",
"ECM_ENABLE_SANITIZERS": "'address;undefined'"
},
"warnings": {
"uninitialized": true
}
},
{
"name": "dev-lcov",
"displayName": "dev-lcov",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-lcov",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"KDDockWidgets_CODE_COVERAGE": "ON",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
},
"warnings": {
"uninitialized": true
}
},
{
@@ -41,27 +77,12 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_WERROR": "ON",
"KDDockWidgets_EXAMPLES" : "OFF"
"KDDockWidgets_EXAMPLES": "OFF",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick;dummy;flutter"
},
"environment": {
"CXX": "clazy",
"CCACHE_DISABLE" : "ON"
}
},
{
"name": "clazy-qtquick",
"displayName": "clazy-qtquick",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-clazy-qtquick",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_EXAMPLES" : "OFF",
"KDDockWidgets_WERROR": "ON",
"KDDockWidgets_QTQUICK": "ON"
},
"environment": {
"CXX": "clazy",
"CCACHE_DISABLE" : "ON"
"CCACHE_DISABLE": "ON"
}
},
{
@@ -71,7 +92,8 @@
"binaryDir": "${sourceDir}/build-release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_UNITY_BUILD" : "ON"
"CMAKE_UNITY_BUILD": "OFF",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
@@ -81,33 +103,9 @@
"binaryDir": "${sourceDir}/build-release-no-x11extras",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_UNITY_BUILD" : "ON",
"KDDockWidgets_X11EXTRAS" : "OFF"
}
},
{
"name": "release-qtquick",
"displayName": "release-qtquick",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-release-qtquick",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_QTQUICK": "ON",
"CMAKE_UNITY_BUILD" : "ON"
}
},
{
"name": "dev-qtquick",
"displayName": "dev-qtquick",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-qtquick",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_QTQUICK": "ON",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"ECM_ENABLE_SANITIZERS" : "'address;undefined'",
"CMAKE_EXPORT_COMPILE_COMMANDS" : "ON",
"KDDockWidgets_FUZZER" : "OFF"
"CMAKE_UNITY_BUILD": "OFF",
"KDDockWidgets_X11EXTRAS": "OFF",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
@@ -118,7 +116,8 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_PYTHON_BINDINGS": "ON",
"CMAKE_UNITY_BUILD" : "ON"
"CMAKE_UNITY_BUILD": "OFF",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
@@ -129,19 +128,8 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_STATIC": "ON",
"CMAKE_UNITY_BUILD" : "ON"
}
},
{
"name": "static-qtquick",
"displayName": "static-qtquick",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-static-qtquick",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_STATIC": "ON",
"KDDockWidgets_QTQUICK": "ON",
"CMAKE_UNITY_BUILD" : "ON"
"CMAKE_UNITY_BUILD": "ON",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
@@ -152,8 +140,9 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_QT6": "ON",
"CMAKE_UNITY_BUILD" : "ON",
"CMAKE_PREFIX_PATH" : "$env{QT6_DIR}"
"CMAKE_UNITY_BUILD": "OFF",
"CMAKE_PREFIX_PATH": "$env{QT6_DIR}",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
},
"environment": {
"PATH": "$env{QT6_DIR}/bin:$penv{PATH}"
@@ -168,49 +157,32 @@
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_QT6": "ON",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS" : "ON",
"ECM_ENABLE_SANITIZERS" : "'address;undefined'",
"KDDockWidgets_FUZZER" : "OFF",
"CMAKE_PREFIX_PATH" : "$env{QT6_DIR}"
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"CMAKE_PREFIX_PATH": "$env{QT6_DIR}",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick;dummy"
},
"environment": {
"PATH": "$env{QT6_DIR}/bin:$penv{PATH}"
}
},
{
"name": "release-qtquick6",
"displayName": "release-qtquick6",
"name": "dev-asan6",
"displayName": "dev-asan6",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-release-qtquick6",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_QTQUICK": "ON",
"KDDockWidgets_QT6": "ON",
"CMAKE_UNITY_BUILD" : "ON",
"CMAKE_PREFIX_PATH" : "$env{QT6_DIR}"
},
"environment": {
"PATH": "$env{QT6_DIR}/bin:$penv{PATH}"
}
},
{
"name": "dev-qtquick6",
"displayName": "dev-qtquick6",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-qtquick6",
"binaryDir": "${sourceDir}/build-dev-asan6",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_QTQUICK": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS" : "ON",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"ECM_ENABLE_SANITIZERS" : "'address;undefined'",
"KDDockWidgets_QT6": "ON",
"CMAKE_PREFIX_PATH" : "$env{QT6_DIR}"
"KDDockWidgets_QT6": "ON",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"ECM_ENABLE_SANITIZERS": "'address;undefined'",
"KDDockWidgets_FUZZER": "OFF",
"CMAKE_PREFIX_PATH": "$env{QT6_DIR}",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick;dummy"
},
"environment": {
"PATH": "$env{QT6_DIR}/bin:$penv{PATH}",
"QML2_IMPORT_PATH" : "$env{QT6_DIR}/imports:$env{QT6_DIR}/qml",
"LD_LIBRARY_PATH" : "$env{QT6_DIR}/lib"
"PATH": "$env{QT6_DIR}/bin:$penv{PATH}"
}
},
{
@@ -221,30 +193,12 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS" : "ON",
"KDDockWidgets_FUZZER" : "ON"
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "ON",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
},
"warnings" : {
"uninitialized" : true
},
"environment": {
"CC": "clang-cl",
"CXX": "clang-cl"
}
},
{
"name": "dev-qtquick-clangcl",
"displayName": "dev-qtquick-clangcl",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-qtquick-clangcl",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"KDDockWidgets_FUZZER" : "OFF",
"KDDockWidgets_QTQUICK": "ON"
},
"warnings" : {
"uninitialized" : true
"warnings": {
"uninitialized": true
},
"environment": {
"CC": "clang-cl",
@@ -259,12 +213,13 @@
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"KDDockWidgets_FUZZER" : "ON",
"KDDockWidgets_FUZZER": "ON",
"KDDockWidgets_QT6": "ON",
"CMAKE_PREFIX_PATH" : "$env{QT6_DIR}"
"CMAKE_PREFIX_PATH": "$env{QT6_DIR}",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
},
"warnings" : {
"uninitialized" : true
"warnings": {
"uninitialized": true
},
"environment": {
"CC": "clang-cl",
@@ -273,27 +228,176 @@
}
},
{
"name": "dev-qtquick-clangcl6",
"displayName": "dev-qtquick-clangcl6",
"name": "dev-time-trace",
"displayName": "dev-time-trace",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev-qtquick-clangcl6",
"binaryDir": "${sourceDir}/build-dev-time-trace",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"KDDockWidgets_FUZZER" : "OFF",
"KDDockWidgets_QTQUICK": "ON",
"KDDockWidgets_QT6": "ON",
"CMAKE_PREFIX_PATH" : "$env{QT6_DIR}"
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"CMAKE_C_FLAGS_INIT": "-ftime-trace",
"CMAKE_CXX_FLAGS_INIT": "-ftime-trace",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
},
"warnings" : {
"uninitialized" : true
"warnings": {
"uninitialized": true
},
"environment": {
"CC": "clang-cl",
"CXX": "clang-cl",
"PATH": "$env{QT6_DIR}/bin:$penv{PATH}",
"QML2_IMPORT_PATH" : "$env{QT6_DIR}/imports:$env{QT6_DIR}/qml",
"LD_LIBRARY_PATH" : "$env{QT6_DIR}/lib"
"CC": "clang",
"CXX": "clang++",
"CCACHE_DISABLE": "ON"
}
},
{
"name": "dev6-time-trace",
"displayName": "dev6-time-trace",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build-dev6-time-trace",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"KDDockWidgets_FUZZER": "OFF",
"KDDockWidgets_QT6": "ON",
"CMAKE_C_FLAGS_INIT": "-ftime-trace",
"CMAKE_CXX_FLAGS_INIT": "-ftime-trace",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
},
"warnings": {
"uninitialized": true
},
"environment": {
"CC": "clang",
"CXX": "clang++",
"CCACHE_DISABLE": "ON"
}
},
{
"name": "ci-dev-qt5",
"displayName": "ci-dev-qt5",
"description": "Qt5 dev-mode build",
"binaryDir": "${sourceDir}/build-ci-dev-qt5",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
"name": "ci-release-qt5",
"displayName": "ci-release-qt5",
"description": "Qt5 non dev-mode build",
"binaryDir": "${sourceDir}/build-ci-release-qt5",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
"name": "ci-qtwidgets-qt5",
"displayName": "ci-qtwidgets-qt5",
"description": "Qt5 build which excludes QtQuick",
"binaryDir": "${sourceDir}/build-ci-qtwidgets-qt5",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_FRONTENDS": "qtwidgets"
}
},
{
"name": "ci-qtquick-qt5",
"displayName": "ci-qtquick-qt5",
"description": "Qt5 build which excludes QtWidgets",
"binaryDir": "${sourceDir}/build-ci-qtquick-qt5",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_FRONTENDS": "qtquick"
}
},
{
"name": "ci-dummy",
"displayName": "ci-dummy",
"description": "Builds only the dummy frontend. Tests that build passes without Qt.",
"binaryDir": "${sourceDir}/build-ci-dummy",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_FRONTENDS": "dummy",
"KDDockWidgets_QT6": "ON"
}
},
{
"name": "ci-flutter",
"displayName": "ci-flutter",
"description": "Builds only the flutter frontend. Tests that build passes without Qt.",
"binaryDir": "${sourceDir}/build-ci-flutter",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_FRONTENDS": "flutter",
"KDDockWidgets_QT6": "ON"
}
},
{
"name": "ci-dev-qt6",
"displayName": "ci-dev-qt6",
"description": "Qt6 dev-mode",
"binaryDir": "${sourceDir}/build-ci-dev-qt6",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "ON",
"CMAKE_BUILD_TYPE": "Debug",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick",
"KDDockWidgets_QT6": "ON"
}
},
{
"name": "ci-release-qt6",
"description": "Qt6 non dev-mode",
"displayName": "ci-release-qt6",
"binaryDir": "${sourceDir}/build-ci-release-qt6",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_QT6": "ON",
"KDDockWidgets_FRONTENDS": "qtwidgets;qtquick"
}
},
{
"name": "ci-qtwidgets-qt6",
"description": "Qt6 build which excludes QtQuick",
"displayName": "ci-qtwidgets-qt6",
"binaryDir": "${sourceDir}/build-ci-qtwidgets-qt6",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_QT6": "ON",
"KDDockWidgets_FRONTENDS": "qtwidgets"
}
},
{
"name": "ci-qtquick-qt6",
"description": "Qt6 build which excludes QtWidgets",
"displayName": "ci-qtquick-qt6",
"binaryDir": "${sourceDir}/build-ci-qtquick-qt6",
"generator": "Ninja",
"cacheVariables": {
"KDDockWidgets_DEVELOPER_MODE": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"KDDockWidgets_QT6": "ON",
"KDDockWidgets_FRONTENDS": "qtquick"
}
}
],
@@ -302,17 +406,9 @@
"name": "clazy",
"configurePreset": "clazy",
"environment": {
"CLAZY_CHECKS" : "level2,detaching-member,heap-allocated-small-trivial-type,isempty-vs-count,qstring-varargs,qvariant-template-instantiation,raw-environment-function,reserve-candidates,signal-with-return-value,thread-with-slots,no-ctor-missing-parent-argument,no-missing-typeinfo",
"CCACHE_DISABLE" : "ON"
}
},
{
"name": "clazy-qtquick",
"configurePreset": "clazy-qtquick",
"environment": {
"CLAZY_CHECKS" : "level2,detaching-member,heap-allocated-small-trivial-type,isempty-vs-count,qstring-varargs,qvariant-template-instantiation,raw-environment-function,reserve-candidates,signal-with-return-value,thread-with-slots,no-ctor-missing-parent-argument,no-missing-typeinfo",
"CCACHE_DISABLE" : "ON"
"CLAZY_CHECKS": "level2,detaching-member,heap-allocated-small-trivial-type,isempty-vs-count,qstring-varargs,qvariant-template-instantiation,raw-environment-function,reserve-candidates,signal-with-return-value,thread-with-slots,no-ctor-missing-parent-argument,no-missing-typeinfo",
"CCACHE_DISABLE": "ON"
}
}
]
}
}

View File

@@ -1,11 +1,38 @@
* v1.5.0 (unreleased)
* v2.0.0 (unreleased)
- Architecture rewrite to support more frontends besides QtWidgets and QtQuick.
2.0 isn't very interesting for users, but will allow developers to make KDDW
support other GUI frameworks more easily. Also QtQuick is now better integrated,
without being shoehorned with ifdefs into the QtWidgets implementation.
- Split into a view/controller architecture
- Non-gui logic moved to controllers
- Each controller has a gui counter part, implemented for each supported frontend
- Uses nlohmann JSON library (MIT) instead of QJsonDocument, for saving/restoring layouts
- Added Config::setStartDragDistance()
* v1.6.0 (unreleased)
- Minimum Qt6 version is now 6.3.0
- Fixed restoring of normal geometry when closing a maximized window (#259)
- Experimental support for docking into dock widgets which are in a MDI area.
- Fixed potential crash involving infinite loop between QWidget::create() and QWidget::createWinId()
- Moved DropIndicatorOverlayInterface::DropLocation enum to KDDockWidgets namespace scope
- Added Config::setDropIndicatorAllowedFunc() and corresponding example
(kddockwidgets_example --hide-certain-docking-indicators)
- Fixed case where unfloating wouldn't restore to the main window (#44 and #96)
- Fixed MainWindow not propagating close events to docked widgets
- X11: Improved detecting which window is under the cursor, by using native X11 API
- X11: Fixed dragging a maximized floating window. Its size is now restored to normal size when the drag starts.
- Added DockWidgetBase::currentTabIndex()
- Added InitialVisibilityOption::PreserveCurrentTab
- Added MainWindow::internalLayout() for advanced customization
* v1.5.0 (24 November 2021)
- Install the Python bindings to "site-packages"
- The Python bindings for Qt6 use the "PyKDDockWidgetsQt6" namespace
- Co-installable with Qt6
- Adds support for non-detachable central widget, MainWindowOption_HasCentralWidget. (#225)
* v1.4.1 (unreleased)
-
- Fix corrupt layout when restoring old JSON
- Fix "Unpin" button not showing up in overlayed widgets
- Minimum Qt version is now 5.15
* v1.4.0 (16 July 2021)
- No longer supports Qt versions less than 5.12
@@ -21,7 +48,7 @@
- FloatingWindow now honours the dockwidget's max-size, if there's a single
dock widget docked. Tabbed cases are more difficult since QStackedLayout doesn't
propagate size constraints.
- Added MainWindowBase::frameCountChanged()
- Added MainWindowBase::groupCountChanged()
- Introduced Config::setDropIndicatorsInhibited(), which allows you to disable support
for drop indicators while dragging.
- Fixed embedding the main window into a non-kddw main window (#204, #168)

View File

@@ -1,4 +1,4 @@
The KDDockWidgets software is Copyright (C) 2018-2021 Klaralvdalens Datakonsult AB.
The KDDockWidgets software is Copyright (C) 2018-2022 Klaralvdalens Datakonsult AB.
You may use, distribute and copy the KDDockWidgets software under the terms of
the GNU General Public License version 2 or under the terms of GNU General

View File

@@ -1,4 +1,4 @@
KDDockWidgets is (C) 2018-2021, Klarälvdalens Datakonsult AB, and is licensed
KDDockWidgets is (C) 2018-2022, Klarälvdalens Datakonsult AB, and is licensed
according to the terms of the:
GNU General Public License version 2.0 (see LICENSES/GPL-2.0-only.txt)
or the

9
LICENSES/MIT.txt Normal file
View File

@@ -0,0 +1,9 @@
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -1,12 +1,13 @@
Supported Qt versions and toolchains
=====================================
# KDDockWidgets and QtQuick
KDDockWidgets for QtQuick requires a C++17 capable compiler and either
Qt >= 5.15.0 or Qt >= 6.2.
## Supported Qt versions and toolchains
KDDockWidgets for QtQuick requires a C++17 capable compiler and Qt >= 6.2.1.
TROUBLESHOOTING
===============
Qt 5.15.2 will probably also work, but it's not built and tested by KDAB CI, we
advise users to move to Qt6 as soon as possible.
## Troubleshooting
- QtGraphicalEffects is not supported, as it's buggy when moving between different QWindows.
See for example QTBUG-94943, KDDockWidgets issue #213. Also search the Qt bug tracker

View File

@@ -1,33 +1,40 @@
WebAssembly
===========
# KDDockWidgets with WebAssembly
KDDockWidgets works with WebAssembly with the following known limitations:
- Classic drop indicators are not supported, only the segmented ones. This is because
WASM doesn't support windows with translucency.
WASM doesn't support windows with translucency.
- Might be slow on Linux, depending on your browser, while dragging or resizing windows.
Please file a bug with Qt, as it's out of scope for KDDW to fix.
Please file a bug with Qt, as it's out of scope for KDDW to fix.
Demo:
=====
## Demo
A demo is available at https://demos.kdab.com/wasm/kddockwidgets/dockwidgets.html
A demo is available at <https://demos.kdab.com/wasm/kddockwidgets/dockwidgets.html>.
Build tips for KDDW:
====================
## Build tips for KDDW
- Visit <https://doc.qt.io/qt-5/wasm.html> if you haven't yet
- Visit https://doc.qt.io/qt-5/wasm.html if you haven't yet
- Open a terminal suitable for WASM development (with the correct Qt and toolchain in PATH, etc)
- KDDockWidgets can be built with `cmake -DCMAKE_TOOLCHAIN_FILE=/usr/local/emsdk-1.39.8/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_FIND_ROOT_PATH=~/Qt/5.15.1/wasm_32/ -DKDDockWidgets_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release`
(Adapt the paths to your own situation)
Builds tips for your own app:
=============================
- KDDockWidgets can be built with:
```bash
cmake \
-DCMAKE_TOOLCHAIN_FILE=/usr/local/emsdk-1.39.8/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
-DCMAKE_FIND_ROOT_PATH=~/Qt/5.15.1/wasm_32/ -DKDDockWidgets_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release`
(Adapt the paths to your own situation)
```
## Builds tips for your own app ==
- Link to KDDW (libkddockwidgets.a, or similar)
- As the build is static, don't forget to initialize KDDW's resources:
```
#ifdef QT_STATIC
Q_INIT_RESOURCE(kddockwidgets_resources);
#endif
```cpp
#ifdef QT_STATIC
Q_INIT_RESOURCE(kddockwidgets_resources);
#endif
```

View File

@@ -1,13 +1,13 @@
# KDDockWidgets and Wayland
Wayland support is done and has been tested on KDE (Kwin) and weston.
Limitations
============
## Limitations
Wayland works very differently than traditional desktops and imposes us some,
limitations. Here's a list of different behaviours which KDDockWidgets will have
when running on Wayland:
- A title bar can either be used for drag&dock or for moving the window around.
- For this reason, floating windows now have two title bars.
@@ -28,7 +28,5 @@ when running on Wayland:
- Kwin specific:
- The pixmap that's shown during a drag can't be bigger than 250x250. Might be a bug.
All in all it's pretty decent and usable. Any further improvements should be done at the server or
protocol level now.

View File

@@ -1,26 +1,29 @@
# KDDockWidgets and Python bindings
These are the instructions for building the Python bindings for KDDockWidgets.
Make sure you have PySide2, shiboken2 and shiboken2-generator installed.
As this time, you cannot get shiboken2-generator because the wheels are not on PyPi.
To use the wheels do this:
```
```bash
% pip3 install \
--index-url=http://download.qt.io/official_releases/QtForPython/ \
--trusted-host download.qt.io \
shiboken2 pyside2 shiboken2_generator
```
For more info visit https://doc.qt.io/qtforpython/shiboken2/gettingstarted.html
For more info visit <https://doc.qt.io/qtforpython/shiboken2/gettingstarted.html>.
afterwards run 'pip3 list | grep PySide2'
Note the version *must* match the same Qt you intend to use when building KDDockWidgets.
Not supported:
- Debug builds
- static builds
- python2 bindings
- only some 32-bit platforms are supported. see https://wiki.qt.io/Qt_for_Python
- debug builds
- static builds
- python2 bindings
- only some 32-bit platforms are supported (see <https://wiki.qt.io/Qt_for_Python>)
Tell CMake to build the bindings by passing the `-DKDDockWidgets_PYTHON_BINDINGS=True' option,
followed by the make command.
@@ -33,42 +36,42 @@ to CMake (adjust to the python path on your system).
To run the KDDW python example
```
$ export PYTHONPATH=/kddw/install/path # Only if needed
$ cd python/examples/
$ rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc
$ python3 main.py
```bash
export PYTHONPATH=/kddw/install/path # Only if needed
cd python/examples/
rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc
python3 main.py
```
Build Issues
* If you see errors like "Unable to locate Clang's built-in include directory"
then first make sure you have llvm installed. If you still have problems try
- If you see errors like "Unable to locate Clang's built-in include directory"
then first mROUBLESHOOTINGake sure you have llvm installed. If you still have problems try
setting the environment variable `LLVM_INSTALL_DIR` to point to your llvm installation.
Examples:
```
export LLVM_INSTALL_DIR=/usr/local/opt/llvm-11
set "LLVM_INSTALL_DIR=C:\Program Files\LLVM" #Windows
```
```bash
export LLVM_INSTALL_DIR=/usr/local/opt/llvm-11
set "LLVM_INSTALL_DIR=C:\Program Files\LLVM" #Windows
```
* When building the examples you may encounter errors loading shared libraries from shiboken2_generator.
- When building the examples you may encounter errors loading shared libraries from shiboken2_generator.
Try:
```
export LD_LIBRARY_PATH=/usr/local/lib/python/dist-packages/PySide2/Qt/lib #linux
export DYLD_LIBRARY_PATH=/usr/local/lib/python/dist-packages/PySide2/Qt/lib #Mac
#adjust to wherever your PySide is installed
```
```bash
export LD_LIBRARY_PATH=/usr/local/lib/python/dist-packages/PySide2/Qt/lib #linux
export DYLD_LIBRARY_PATH=/usr/local/lib/python/dist-packages/PySide2/Qt/lib #Mac
(Adjust to wherever your PySide is installed)
```
* On Windows the `libclang.dll` that ship with QtForPython is not compatible with MSVC2019.
- On Windows the `libclang.dll` that ship with QtForPython is not compatible with MSVC2019.
To fix this, copy the `libclang.dll` that comes with llvm into shiboken2, like so:
```
cd C:\Python37\Lib\site-packages\shiboken2_generator
copy libclang.dll libclang.dll.save
copy "C:\Program Files\llvm\bin\libclang.dll" libclang.dll
#Python3 installation in C:\Python37 and llvm in c:\Program Files\llvm. adjust as needed
```
```bash
cd C:\Python37\Lib\site-packages\shiboken2_generator
copy libclang.dll libclang.dll.save
copy "C:\Program Files\llvm\bin\libclang.dll" libclang.dll
(Python3 installation in C:\Python37 and llvm in c:\Program Files\llvm. adjust as needed)
```

166
README.md
View File

@@ -1,7 +1,11 @@
# KDDockWidgets
[![Build Status](https://travis-ci.com/KDAB/KDDockWidgets.svg?branch=master)](https://travis-ci.com/KDAB/KDDockWidgets)
KDDockWidgets
=============
> ⚠️⚠️: 2.0 is under development, there might be API breaks before release.
> Stick with version 1.6 if you're using QtWidgets. However, if you're using
> QtQuick it's better to base on 2.0, as 1.6 won't be receiving much QtQuick development.
`KDDockWidgets` is a Qt dock widget library written by KDAB, suitable for replacing
`QDockWidget` and implementing advanced functionalities missing in Qt.
@@ -9,9 +13,8 @@ Although `KDDockWidgets` is ready to be used out of the box, it can also be seen
as a framework to allow building very tailored custom docking systems. It tries
to expose every internal widget and every knob for the app developer to tune.
## Motivation
Motivation
==========
Throughout the years KDAB contributed and funded bug fixes and features to `QDockWidget`.
Sadly, this was very painful. Each bug fix or feature took many days of implementation,
and an equal number of days just to fix dozens of regressions.
@@ -22,15 +25,15 @@ creative with their requests, so it was clear we needed a better docking framewo
You will find more information in these places:
* [our official home page](https://www.kdab.com/development-resources/qt-tools/kddockwidgets)
* [online detailed browsable API reference](https://docs.kdab.com/kddockwidgets)
* [our example programs](examples/)
- [our official home page](https://www.kdab.com/development-resources/qt-tools/kddockwidgets)
- [online detailed browsable API reference](https://docs.kdab.com/kddockwidgets)
- [our example programs](examples/)
We also have an [in browser demo](https://demos.kdab.com/wasm/kddockwidgets/dockwidgets.html). Note
however that this demo isn't fully featured, as it's running on Qt for WebAssembly.
Features
========
## Features
- Provide advanced docking that QDockWidget doesn't support
- Native window resize on Windows (allowing for Aero-snap even with custom title bar decorations)
- Arrow drop indicators for great drop precision
@@ -66,55 +69,79 @@ Features
- Optional minimize and maximize button on the title bar
- FloatingWindows can be utility windows or full native
Screen capture
==============
## Screen capture
![Screen capture](./screencap.gif?raw=true "The docking system in action")
## Building and requirements
Trying out the examples
=======================
A full demo that showcases most of the features lives in [examples/dockwidgets](examples/dockwidgets).
To build KDDockWidgets you'll need:
A simpler example can be found in [examples/minimal](examples/minimal),
which might be more indicated to learn the API, as it's less overwhelming than the full demo.
- CMake
- Qt 5.15.x or Qt6 >= 6.2
- Ninja (Other generators might work but are untested)
- C++17 capable compiler. Minimum VS2019 on Windows.
- Qt Widgets module
- Qt X11Extras module if on Linux/X11
- Qt Quick and QuickControls2 modules if using the QtQuick support
- Qt private development headers, for instance, for Qt5:
- SUSE: libqt5-qtbase-private-headers-devel
- Ubuntu, debian-based: qtbase5-private-dev
- Fedora, redhat-based: qt5-qtbase-private-devel
- others: consult your distro
Open a terminal capable of building Qt5 applications.
Open a terminal capable of building Qt applications.
Make sure you have cmake, ninja, compiler, Qt, etc in PATH.
Adapt the instructions to suit your cmake generator and operating system.
Build and install the KDDockWidgets framework:
```
$ cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/path/where/to/install ../path/to/kddockwidgets
$ cmake --build .
$ cmake --build . --target install
```bash
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/path/where/to/install ../path/to/kddockwidgets
cmake --build .
cmake --build . --target install
```
Now build and run the example:
```
$ cd path/to/kddockwidgets/examples/dockwidgets/
$ cmake -G Ninja -DCMAKE_PREFIX_PATH=/path/where/to/install
$ cmake --build .
$ ./kddockwidgets_example
```bash
cd path/to/kddockwidgets/examples/dockwidgets/
cmake -G Ninja -DCMAKE_PREFIX_PATH=/path/where/to/install
cmake --build .
./bin/examples/qtwidgets_dockwidgets
```
The installation directory defaults to `c:\KDAB\KDDockWidgets-<version>` on Windows
and `/usr/local/KDAB/KDDockWidgets-<version>` on non-Windows.
You can change the installation location by passing the option `-DCMAKE_INSTALL_PREFIX=/install/path` to cmake.
Change the installation location by passing the option `-DCMAKE_INSTALL_PREFIX=/install/path` to CMake.
## Trying out the examples
A full demo that showcases most of the features lives in [examples/dockwidgets](examples/dockwidgets).
A simpler example can be found in [examples/minimal](examples/minimal),
which might be more indicated to learn the API, as it's less overwhelming than the full demo.
To build and run the example:
```bash
cd path/to/kddockwidgets/examples/dockwidgets/
cmake -G Ninja -DCMAKE_PREFIX_PATH=/path/where/kddw/is/installed
cmake --build .
./kddockwidgets_example
```
## Using
Using
=====
From your CMake Qt5 project, add
```
```cmake
find_package(KDDockWidgets CONFIG)
```
or for Qt6
```
```cmake
find_package(KDDockWidgets-qt6 CONFIG)
```
@@ -124,58 +151,63 @@ That's all you need to do (the imported target also brings in the include direct
You may also need to modify the `CMAKE_PREFIX_PATH` environment variable depending
on where you installed KDDockWidgets.
## Python Bindings
Python Bindings
================
Please refer to [README-bindings.md](README-bindings.md).
Versioning
==========
## Versioning
New features go to master while the stable branch only accepts non-intrusive bug fixes.
There's currently two lines of development: `v1` which is very mature and stable and `v2` which is an ongoing effort to make
KDDW support multiple "frontends" (QtWidgets, QtQuick and even non-Qt technologies, like flutter).
We'll try to remain source-compatible across versions. API will get a deprecation
notice before being removed in the next version. Note that this source-compatibility
effort is only for the public API. Private API (headers ending in _p.h) might change so you
shouldn't depend on them. Private API is only exposed so more advanced users can
override, for example `paintEvent()`, and not so they can change internal business logic.
1.x will be supported for many years to come, at least for bug fixes and small features.
Use `v1.5.0` tag for the latest stable. `v1.6.0` will be released soon, so branch `1.6` is also safe.
Use `2.0` if you need non-QtWidgets support, for example `QtQuick/QML`. While `1.6` has support for `QtQuick/QML` it won't be receiving bug fixes. `2.0` is under active development, you might encounter minor source/ABI incompatibilities. Despite that,
it is pretty stable, and all 200 unit-tests pass.
We'll try to remain source-compatible across versions (except for the v1 -> v2 jump).
API will get a deprecation notice before being removed in the next version. Note that this
compatibility effort is only for the public API. Private API (headers ending
in _p.h) might change so you shouldn't depend on them. Private API is only
exposed so more advanced users can override, for example `paintEvent()`, and
not so they can change internal business logic.
We don't promise or test binary compatibility. It's advised that you recompile
your application whenever updating KDDW.
## Styling
Supported Qt versions and toolchains
=====================================
KDDockWidgets requires Qt5 >= 5.12 or Qt6 >= 6.1.
The QtQuick support requires Qt5 >= 5.15 or Qt6 >= 6.1.
Almost all private widgets used by KDDW can be derived by the user to give them
a custom look. That's done by providing your own ViewFactory. Run
"examples/qtwidgets_dockwidgets -p" to see that in action.
Qt StyleSheets are not, and will not, be supported. See the comments in
`examples/dockwidgets/MyTitleBar_CSS.h` for why. You can however use some minimal
CSS, as shown in that example, just don't report bugs about it.
Regarding compilers, whatever toolchain is able to build Qt 5.9 should also be
fine. Note however that MSVC 2013 isn't supported anymore due to compiler crashes.
Warning: When using private headers, be sure to rebuild your application whenever you
update to a new KDDW version. Binary compatibility is only kept when using public
headers.
## Licensing
Licensing
=========
KDDockWidgets is (C) 2019-2021, Klarälvdalens Datakonsult AB, and is licensed according to
KDDockWidgets is (C) 2019-2022, Klarälvdalens Datakonsult AB, and is licensed according to
the terms of the [GPL 2.0](LICENSES/GPL-2.0-only.txt) or [GPL 3.0](LICENSES/GPL-3.0-only.txt).
Contact KDAB at <info@kdab.com> to inquire about commercial licensing.
## Get Involved
Get Involved
============
Please submit your issue reports to our GitHub space at
https://github.com/KDAB/KDDockWidgets
Please submit your issue reports to our GitHub space at <https://github.com/KDAB/KDDockWidgets>.
When reporting bugs please make it easy for the maintainer to reproduce it. Use `examples/minimal/` or
`examples/dockwidgets/` for reproducing the problem. If you did modifications to the example in order to
reproduce then please attach the *patch* and not a picture of your changes. You can get a patch by doing
`git diff > repro.diff` at the repo root.
When reporting bugs please make it easy for the maintainer to reproduce it. Use `examples/minimal/`
or `examples/dockwidgets/` for reproducing the problem. If you did modifications to the example
in order to reproduce then please attach the *patch* and not a picture of your changes. You can
get a patch by doing `git diff > repro.diff` at the repo root.
Also state which KDDW sha1, branch or version you're using, and which operating system.
KDAB will happily accept external contributions; however, **all** contributions require a
signed [Copyright Assignment Agreement](docs/KDDockWidgets-CopyrightAssignmentForm.pdf).
@@ -185,8 +217,8 @@ Contact info@kdab.com for more information.
Thanks to our [contributors](CONTRIBUTORS.txt).
About KDAB
==========
## About KDAB
KDDockWidgets is supported and maintained by Klarälvdalens Datakonsult AB (KDAB).
The KDAB Group is the global No.1 software consultancy for Qt, C++ and
@@ -198,10 +230,10 @@ We continue to help develop parts of Qt and are one of the major contributors
to the Qt Project. We can give advanced or standard trainings anywhere
around the globe on Qt as well as C++, OpenGL, 3D and more.
Please visit https://www.kdab.com to meet the people who write code like this.
Please visit <https://www.kdab.com> to meet the people who write code like this.
Stay up-to-date with KDAB product announcements:
* [KDAB Newsletter](https://news.kdab.com)
* [KDAB Blogs](https://www.kdab.com/category/blogs)
* [KDAB on Twitter](https://twitter.com/KDABQt)
- [KDAB Newsletter](https://news.kdab.com)
- [KDAB Blogs](https://www.kdab.com/category/blogs)
- [KDAB on Twitter](https://twitter.com/KDABQt)

0
a Normal file
View File

View File

@@ -9,6 +9,8 @@ version: 1.0.{build}-{branch}
branches:
except:
- gh-pages
- wip/v2
- master
# Do not build on tags (GitHub and BitBucket)
skip_tags: false
@@ -19,6 +21,8 @@ skip_tags: false
# Build worker image
image:
- Ubuntu2004
- macos
- Visual Studio 2019
# scripts that are called at very beginning, before repo cloning
@@ -36,16 +40,32 @@ platform:
# build Configuration, i.e. Debug, Release, etc.
configuration:
- Release
- Debug
environment:
matrix:
- useqt6: False
- useqt6: True
install:
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
- set QTDIR=C:\Qt\5.15\msvc2019_64
- set PATH=%QTDIR%\bin;%PATH%
- sh: if [ "`uname -s`" = "Darwin" ]; then brew install ninja; else sudo apt-get -y update; sudo apt-get -y install mesa-common-dev libglu1-mesa-dev libxkbcommon-dev libxkbcommon-x11-dev; fi
before_build:
- cmd: call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
- cmd: set PATH=C:\Qt\6.3\msvc2019_64\bin;C:\Qt\5.15\msvc2019_64\bin;%PATH%
- sh: export QT_QUICK_BACKEND=software
- sh: if [ "`uname -s`" = "Darwin" ]; then export PATH=$HOME/Qt/6.3/macos/bin:$HOME/Qt/5.15/clang_64/bin:$PATH; else export PATH=$HOME/Qt/6.3/gcc_64/bin:$HOME/Qt/5.15/gcc_64/bin:$PATH; fi
build_script:
- mkdir build
- cd build
- cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DKDDockWidgets_TESTS=True -DKDDockWidgets_EXAMPLES=True -DKDDockWidgets_DEVELOPER_MODE=True ..
- nmake
- cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DKDDockWidgets_QT6=%useqt6% -DKDDockWidgets_TESTS=True -DKDDockWidgets_EXAMPLES=True -DKDDockWidgets_DEVELOPER_MODE=True ..
- sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DKDDockWidgets_QT6=$useqt6 -DKDDockWidgets_TESTS=True -DKDDockWidgets_EXAMPLES=True -DKDDockWidgets_DEVELOPER_MODE=True ..
- cmake --build .
- cmd: cmake --build . --target install
- sh: sudo cmake --build . --target install
- cmd: set PATH=.\bin;%PATH%
- ctest --test-dir . -V
# to disable automatic builds
#build: off
@@ -54,11 +74,8 @@ build_script:
# tests configuration #
#---------------------------------#
test_script:
- nmake test
# to disable automatic tests
#test: off
test: off
#---------------------------------#

View File

@@ -22,24 +22,24 @@ Generate C/C++ CamelCase forwarding headers.
[COMMON_HEADER <HeaderName>]
[RELATIVE <relative_path>])
For each CamelCase header name passed to HEADER_NAMES, a file of that name
For each CamelCase header name passed to ``HEADER_NAMES``, a file of that name
will be generated that will include a version with ``.h`` or, if set,
``.<header_extension>`` appended.
For example, the generated header ``ClassA`` will include ``classa.h`` (or
``ClassA.h``, see ORIGINAL).
``ClassA.h``, see ``ORIGINAL``).
If a CamelCaseName consists of multiple comma-separated files, e.g.
``ClassA,ClassB,ClassC``, then multiple camelcase header files will be
generated which are redirects to the first header file.
The file locations of these generated headers will be stored in
<camelcase_forwarding_headers_var>.
ORIGINAL specifies how the name of the original header is written: lowercased
or also camelcased. The default is LOWERCASE. Since 1.8.0.
``ORIGINAL`` specifies how the name of the original header is written: lowercased
or also camelcased. The default is "LOWERCASE". Since 1.8.0.
HEADER_EXTENSION specifies what file name extension is used for the header
``HEADER_EXTENSION`` specifies what file name extension is used for the header
files. The default is "h". Since 5.48.0.
PREFIX places the generated headers in subdirectories. This should be a
``PREFIX`` places the generated headers in subdirectories. This should be a
CamelCase name like ``KParts``, which will cause the CamelCase forwarding
headers to be placed in the ``KParts`` directory (e.g. ``KParts/Part``). It
will also, for the convenience of code in the source distribution, generate
@@ -47,36 +47,36 @@ forwarding headers based on the original names (e.g. ``kparts/part.h``). This
allows includes like ``"#include <kparts/part.h>"`` to be used before
installation, as long as the include_directories are set appropriately.
OUTPUT_DIR specifies where the files will be generated; this should be within
``OUTPUT_DIR`` specifies where the files will be generated; this should be within
the build directory. By default, ``${CMAKE_CURRENT_BINARY_DIR}`` will be used.
This option can be used to avoid file conflicts.
REQUIRED_HEADERS specifies an output variable name where all the required
``REQUIRED_HEADERS`` specifies an output variable name where all the required
headers will be appended so that they can be installed together with the
generated ones. This is mostly intended as a convenience so that adding a new
header to a project only requires specifying the CamelCase variant in the
CMakeLists.txt file; the original variant will then be added to this
variable.
COMMON_HEADER generates an additional convenience header which includes all
``COMMON_HEADER`` generates an additional convenience header which includes all
other header files.
The RELATIVE argument indicates where the original headers can be found
relative to CMAKE_CURRENT_SOURCE_DIR. It does not affect the generated
CamelCase forwarding files, but ecm_generate_headers() uses it when checking
The ``RELATIVE`` argument indicates where the original headers can be found
relative to ``CMAKE_CURRENT_SOURCE_DIR``. It does not affect the generated
CamelCase forwarding files, but ``ecm_generate_headers()`` uses it when checking
that the original header exists, and to generate originally named forwarding
headers when PREFIX is set.
headers when ``PREFIX`` is set.
To allow other parts of the source distribution (eg: tests) to use the
generated headers before installation, it may be desirable to set the
INCLUDE_DIRECTORIES property for the library target to output_dir. For
example, if OUTPUT_DIR is CMAKE_CURRENT_BINARY_DIR (the default), you could do
``INCLUDE_DIRECTORIES`` property for the library target to output_dir. For
example, if ``OUTPUT_DIR`` is ``CMAKE_CURRENT_BINARY_DIR`` (the default), you could do
.. code-block:: cmake
target_include_directories(MyLib PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>")
Example usage (without PREFIX):
Example usage (without ``PREFIX``):
.. code-block:: cmake
@@ -93,7 +93,7 @@ Example usage (without PREFIX):
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
COMPONENT Devel)
Example usage (with PREFIX):
Example usage (with ``PREFIX``):
.. code-block:: cmake

View File

@@ -26,7 +26,8 @@ the default qmake ``mkspecs`` directory or of a directory that will be in the
[VERSION <version>] # since 5.83
[DEPS "<dep> [<dep> [...]]"]
[FILENAME_VAR <filename_variable>]
[INCLUDE_INSTALL_DIR <dir>]
[INCLUDE_INSTALL_DIRS <dir> [<dir> [...]]] # since 5.92
[INCLUDE_INSTALL_DIR <dir>] # deprecated since 5.92
[LIB_INSTALL_DIR <dir>])
If your CMake project produces a Qt-based library, you may expect there to be
@@ -36,31 +37,34 @@ library convenient for them, in much the same way that CMake config files make
things convenient for CMake-based applications. ``ecm_generate_pri_file()``
generates just such a file.
VERSION specifies the version of the library the ``.pri`` file describes. If
``VERSION`` specifies the version of the library the ``.pri`` file describes. If
not set, the value is taken from the context variable ``PROJECT_VERSION``.
This variable is usually set by the ``project(... VERSION ...)`` command or,
if CMake policy CMP0048 is not NEW, by :module:`ECMSetupVersion`.
if CMake policy CMP0048 is not ``NEW``, by :module:`ECMSetupVersion`.
For backward-compatibility with older ECM versions the
``PROJECT_VERSION_STRING`` variable as set by :module:`ECMSetupVersion`
will be preferred over ``PROJECT_VERSION`` if set, unless the minimum
required version of ECM is 5.83 and newer. Since 5.83.
BASE_NAME specifies the name qmake project (.pro) files should use to refer to
the library (eg: KArchive). LIB_NAME is the name of the actual library to
link to (ie: the first argument to add_library()). DEPS is a space-separated
``BASE_NAME`` specifies the name qmake project (.pro) files should use to refer to
the library (eg: KArchive). ``LIB_NAME`` is the name of the actual library to
link to (ie: the first argument to add_library()). ``DEPS`` is a space-separated
list of the base names of other libraries (for Qt libraries, use the same
names you use with the ``QT`` variable in a qmake project file, such as "core"
for QtCore). FILENAME_VAR specifies the name of a variable to store the path
for QtCore). ``FILENAME_VAR`` specifies the name of a variable to store the path
to the generated file in.
INCLUDE_INSTALL_DIR is the path (relative to ``CMAKE_INSTALL_PREFIX``) that
``INCLUDE_INSTALL_DIRS`` are the paths (relative to ``CMAKE_INSTALL_PREFIX``) that
include files will be installed to. It defaults to
``${INCLUDE_INSTALL_DIR}/<baseName>`` if the ``INCLUDE_INSTALL_DIR`` variable
is set. If that variable is not set, the ``CMAKE_INSTALL_INCLUDEDIR`` variable
is used instead, and if neither are set ``include`` is used. LIB_INSTALL_DIR
is used instead, and if neither are set ``include`` is used. ``LIB_INSTALL_DIR``
operates similarly for the installation location for libraries; it defaults to
``${LIB_INSTALL_DIR}``, ``${CMAKE_INSTALL_LIBDIR}`` or ``lib``, in that order.
``INCLUDE_INSTALL_DIR`` is the old variant of ``INCLUDE_INSTALL_DIRS``, taking only one
directory.
Example usage:
.. code-block:: cmake
@@ -85,19 +89,19 @@ Since pre-1.0.0.
# Replicate the logic from KDEInstallDirs.cmake as we can't depend on it
# Ask qmake if we're using the same prefix as Qt
set(_askqmake OFF)
set(_should_query_qt OFF)
if(NOT DEFINED KDE_INSTALL_USE_QT_SYS_PATHS)
include(ECMQueryQmake)
query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX TRY)
include(ECMQueryQt)
ecm_query_qt(qt_install_prefix_dir QT_INSTALL_PREFIX TRY)
if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}")
set(_askqmake ON)
set(_should_query_qt ON)
endif()
endif()
if(KDE_INSTALL_USE_QT_SYS_PATHS OR _askqmake)
include(ECMQueryQmake)
query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX)
query_qmake(qt_host_data_dir QT_HOST_DATA)
if(KDE_INSTALL_USE_QT_SYS_PATHS OR _should_query_qt)
include(ECMQueryQt)
ecm_query_qt(qt_install_prefix_dir QT_INSTALL_PREFIX)
ecm_query_qt(qt_host_data_dir QT_HOST_DATA)
if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}")
file(RELATIVE_PATH qt_host_data_dir ${qt_install_prefix_dir} ${qt_host_data_dir})
endif()
@@ -114,7 +118,7 @@ endif()
function(ECM_GENERATE_PRI_FILE)
set(options )
set(oneValueArgs BASE_NAME LIB_NAME DEPS FILENAME_VAR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR VERSION)
set(multiValueArgs )
set(multiValueArgs INCLUDE_INSTALL_DIRS)
cmake_parse_arguments(EGPF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
@@ -145,13 +149,19 @@ function(ECM_GENERATE_PRI_FILE)
endif()
endif()
endif()
if(NOT EGPF_INCLUDE_INSTALL_DIR)
if(EGPF_INCLUDE_INSTALL_DIR)
if(EGPF_INCLUDE_INSTALL_DIRS)
message(FATAL_ERROR "Only one argument of INCLUDE_INSTALL_DIR & INCLUDE_INSTALL_DIRS can be used in ECM_GENERATE_PRI_FILE() call")
endif()
set(EGPF_INCLUDE_INSTALL_DIRS ${EGPF_INCLUDE_INSTALL_DIR})
endif()
if(NOT EGPF_INCLUDE_INSTALL_DIRS)
if(INCLUDE_INSTALL_DIR)
set(EGPF_INCLUDE_INSTALL_DIR "${INCLUDE_INSTALL_DIR}/${EGPF_BASE_NAME}")
set(EGPF_INCLUDE_INSTALL_DIRS "${INCLUDE_INSTALL_DIR}/${EGPF_BASE_NAME}")
elseif(CMAKE_INSTALL_INCLUDEDIR)
set(EGPF_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${EGPF_BASE_NAME}")
set(EGPF_INCLUDE_INSTALL_DIRS "${CMAKE_INSTALL_INCLUDEDIR}/${EGPF_BASE_NAME}")
else()
set(EGPF_INCLUDE_INSTALL_DIR "include/${EGPF_BASE_NAME}")
set(EGPF_INCLUDE_INSTALL_DIRS "include/${EGPF_BASE_NAME}")
endif()
endif()
if(NOT EGPF_LIB_INSTALL_DIR)
@@ -193,11 +203,15 @@ function(ECM_GENERATE_PRI_FILE)
set(PRI_TARGET_BASENAME ${EGPF_BASE_NAME})
set(PRI_TARGET_LIBNAME ${EGPF_LIB_NAME})
set(PRI_TARGET_QTDEPS ${EGPF_DEPS})
if(IS_ABSOLUTE "${EGPF_INCLUDE_INSTALL_DIR}")
set(PRI_TARGET_INCLUDES "${EGPF_INCLUDE_INSTALL_DIR}")
else()
set(PRI_TARGET_INCLUDES "${BASEPATH}/${EGPF_INCLUDE_INSTALL_DIR}")
endif()
set(PRI_TARGET_INCLUDES)
foreach(_dir ${EGPF_INCLUDE_INSTALL_DIRS})
# separate list entries with space
if(IS_ABSOLUTE "${_dir}")
string(APPEND PRI_TARGET_INCLUDES " ${_dir}")
else()
string(APPEND PRI_TARGET_INCLUDES " ${BASEPATH}/${_dir}")
endif()
endforeach()
if(IS_ABSOLUTE "${EGPF_LIB_INSTALL_DIR}")
set(PRI_TARGET_LIBS "${EGPF_LIB_INSTALL_DIR}")
else()

View File

@@ -1,46 +0,0 @@
find_package(Qt5Core QUIET)
if (Qt5Core_FOUND)
set(_qmake_executable_default "qmake-qt5")
endif ()
if (TARGET Qt5::qmake)
get_target_property(_qmake_executable_default Qt5::qmake LOCATION)
endif()
set(QMAKE_EXECUTABLE ${_qmake_executable_default}
CACHE FILEPATH "Location of the Qt5 qmake executable")
# Helper method
# This is not public API (yet)!
# Usage: query_qmake(<result_variable> <qt_variable> [TRY])
# Passing TRY will result in the method not failing fatal if no qmake executable
# has been found, but instead simply returning an empty string
function(query_qmake result_variable qt_variable)
set(options TRY)
set(oneValueArgs )
set(multiValueArgs )
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT QMAKE_EXECUTABLE)
if(ARGS_TRY)
set(${result_variable} "" PARENT_SCOPE)
message(STATUS "No qmake Qt5 binary found. Can't check ${qt_variable}")
return()
else()
message(FATAL_ERROR "No qmake Qt5 binary found. Can't check ${qt_variable} as required")
endif()
endif()
execute_process(
COMMAND ${QMAKE_EXECUTABLE} -query "${qt_variable}"
RESULT_VARIABLE return_code
OUTPUT_VARIABLE output
)
if(return_code EQUAL 0)
string(STRIP "${output}" output)
file(TO_CMAKE_PATH "${output}" output_path)
set(${result_variable} "${output_path}" PARENT_SCOPE)
else()
message(WARNING "Failed call: ${QMAKE_EXECUTABLE} -query \"${qt_variable}\"")
message(FATAL_ERROR "QMake call failed: ${return_code}")
endif()
endfunction()

View File

@@ -0,0 +1,100 @@
# SPDX-FileCopyrightText: 2014 Rohan Garg <rohan16garg@gmail.com>
# SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org>
# SPDX-FileCopyrightText: 2014-2016 Aleix Pol <aleixpol@kde.org>
# SPDX-FileCopyrightText: 2017 Friedrich W. H. Kossebau <kossebau@kde.org>
# SPDX-FileCopyrightText: 2022 Ahmad Samir <a.samir78@gmail.com>
#
# SPDX-License-Identifier: BSD-3-Clause
#[=======================================================================[.rst:
ECMQueryQt
---------------
This module can be used to query the installation paths used by Qt.
For Qt5 this uses ``qmake``, and for Qt6 this used ``qtpaths`` (the latter has built-in
support to query the paths of a target platform when cross-compiling).
This module defines the following function:
::
ecm_query_qt(<result_variable> <qt_variable> [TRY])
Passing ``TRY`` will result in the method not making the build fail if the executable
used for querying has not been found, but instead simply print a warning message and
return an empty string.
Example usage:
.. code-block:: cmake
include(ECMQueryQt)
ecm_query_qt(bin_dir QT_INSTALL_BINS)
If the call succeeds ``${bin_dir}`` will be set to ``<prefix>/path/to/bin/dir`` (e.g.
``/usr/lib64/qt/bin/``).
Since: 5.93
#]=======================================================================]
include(${CMAKE_CURRENT_LIST_DIR}/QtVersionOption.cmake)
include(CheckLanguage)
check_language(CXX)
if (CMAKE_CXX_COMPILER)
# Enable the CXX language to let CMake look for config files in library dirs.
# See: https://gitlab.kitware.com/cmake/cmake/-/issues/23266
enable_language(CXX)
endif()
if (QT_MAJOR_VERSION STREQUAL "5")
# QUIET to accommodate the TRY option
find_package(Qt${QT_MAJOR_VERSION}Core QUIET)
if(TARGET Qt5::qmake)
get_target_property(_qmake_executable_default Qt5::qmake LOCATION)
set(QUERY_EXECUTABLE ${_qmake_executable_default}
CACHE FILEPATH "Location of the Qt5 qmake executable")
set(_exec_name_text "Qt5 qmake")
set(_cli_option "-query")
endif()
elseif(QT_MAJOR_VERSION STREQUAL "6")
# QUIET to accommodate the TRY option
find_package(Qt6 COMPONENTS CoreTools QUIET CONFIG)
if (TARGET Qt6::qtpaths)
get_target_property(_qtpaths_executable Qt6::qtpaths LOCATION)
set(QUERY_EXECUTABLE ${_qtpaths_executable}
CACHE FILEPATH "Location of the Qt6 qtpaths executable")
set(_exec_name_text "Qt6 qtpaths")
set(_cli_option "--query")
endif()
endif()
function(ecm_query_qt result_variable qt_variable)
set(options TRY)
set(oneValueArgs)
set(multiValueArgs)
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT QUERY_EXECUTABLE)
if(ARGS_TRY)
set(${result_variable} "" PARENT_SCOPE)
message(STATUS "No ${_exec_name_text} executable found. Can't check ${qt_variable}")
return()
else()
message(FATAL_ERROR "No ${_exec_name_text} executable found. Can't check ${qt_variable} as required")
endif()
endif()
execute_process(
COMMAND ${QUERY_EXECUTABLE} ${_cli_option} "${qt_variable}"
RESULT_VARIABLE return_code
OUTPUT_VARIABLE output
)
if(return_code EQUAL 0)
string(STRIP "${output}" output)
file(TO_CMAKE_PATH "${output}" output_path)
set(${result_variable} "${output_path}" PARENT_SCOPE)
else()
message(WARNING "Failed call: ${_command} \"${qt_variable}\"")
message(FATAL_ERROR "${_exec_name_text} call failed: ${return_code}")
endif()
endfunction()

View File

@@ -36,7 +36,7 @@ version of ECM is < 5.83)::
<prefix>_VERSION_STRING - <version> (use <prefix>_VERSION instead)
If CMake policy CMP0048 is not NEW, the following CMake variables will also
If CMake policy CMP0048 is not ``NEW``, the following CMake variables will also
be set::
PROJECT_VERSION_MAJOR - <major>
@@ -44,14 +44,14 @@ be set::
PROJECT_VERSION_PATCH - <patch>
PROJECT_VERSION - <version>
For backward-compatibility, if CMake policy CMP0048 is not NEW, also this variable is set
For backward-compatibility, if CMake policy CMP0048 is not ``NEW``, also this variable is set
(only if the minimum required version of ECM is < 5.83)::
PROJECT_VERSION_STRING - <version> (use PROJECT_VERSION instead)
If the VERSION_HEADER option is used, a simple C header is generated with the
If the ``VERSION_HEADER`` option is used, a simple C header is generated with the
given filename. If filename is a relative path, it is interpreted as relative
to CMAKE_CURRENT_BINARY_DIR. The generated header contains the following
to ``CMAKE_CURRENT_BINARY_DIR``. The generated header contains the following
macros::
<prefix>_VERSION_MAJOR - <major> as an integer
@@ -64,15 +64,15 @@ macros::
next 8 bits and ``<major>`` in the remaining bits. Note that ``<patch>`` and
``<minor>`` must be less than 256.
If the PACKAGE_VERSION_FILE option is used, a simple CMake package version
file is created using the write_basic_package_version_file() macro provided by
If the ``PACKAGE_VERSION_FILE`` option is used, a simple CMake package version
file is created using the ``write_basic_package_version_file()`` macro provided by
CMake. It should be installed in the same location as the Config.cmake file of
the library so that it can be found by find_package(). If the filename is a
relative path, it is interpreted as relative to CMAKE_CURRENT_BINARY_DIR. The
optional COMPATIBILITY option is forwarded to
write_basic_package_version_file(), and defaults to AnyNewerVersion.
the library so that it can be found by ``find_package()``. If the filename is a
relative path, it is interpreted as relative to ``CMAKE_CURRENT_BINARY_DIR``. The
optional ``COMPATIBILITY`` option is forwarded to
``write_basic_package_version_file()``, and defaults to ``AnyNewerVersion``.
If CMake policy CMP0048 is NEW, an alternative form of the command is
If CMake policy CMP0048 is ``NEW``, an alternative form of the command is
available::
ecm_setup_version(PROJECT
@@ -81,14 +81,14 @@ available::
[VERSION_HEADER <filename>]
[PACKAGE_VERSION_FILE <filename>] )
This will use the version information set by the project() command.
VARIABLE_PREFIX defaults to the project name. Note that PROJECT must be the
This will use the version information set by the ``project()`` command.
``VARIABLE_PREFIX`` defaults to the project name. Note that ``PROJECT`` must be the
first argument. In all other respects, it behaves like the other form of the
command.
Since pre-1.0.0.
COMPATIBILITY option available since 1.6.0.
``COMPATIBILITY`` option available since 1.6.0.
#]=======================================================================]
include(CMakePackageConfigHelpers)
@@ -132,9 +132,10 @@ function(ecm_setup_version _version)
if(use_project_version)
set(_version "${PROJECT_VERSION}")
set(_major "${PROJECT_VERSION_MAJOR}")
set(_minor "${PROJECT_VERSION_MINOR}")
set(_patch "${PROJECT_VERSION_PATCH}")
# drop leading 0 from values to avoid bogus octal values in c/C++ e.g. with 08 or 09
string(REGEX REPLACE "0*([0-9]+)" "\\1" _major "${PROJECT_VERSION_MAJOR}")
string(REGEX REPLACE "0*([0-9]+)" "\\1" _minor "${PROJECT_VERSION_MINOR}")
string(REGEX REPLACE "0*([0-9]+)" "\\1" _patch "${PROJECT_VERSION_PATCH}")
else()
string(REGEX REPLACE "^0*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major "${_version}")
string(REGEX REPLACE "^[0-9]+\\.0*([0-9]+)\\.[0-9]+.*" "\\1" _minor "${_version}")

View File

@@ -0,0 +1,36 @@
# SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
#
# SPDX-License-Identifier: BSD-3-Clause
#[=======================================================================[.rst:
QtVersionOption
---------------
Adds a build option to select the major Qt version if necessary,
that is, if the major Qt version has not yet been determined otherwise
(e.g. by a corresponding ``find_package()`` call).
This module is typically included by other modules requiring knowledge
about the major Qt version.
``QT_MAJOR_VERSION`` is defined to either be "5" or "6".
Since 5.82.0.
#]=======================================================================]
if (DEFINED QT_MAJOR_VERSION)
return()
endif()
if (TARGET Qt5::Core)
set(QT_MAJOR_VERSION 5)
elseif (TARGET Qt6::Core)
set(QT_MAJOR_VERSION 6)
else()
option(BUILD_WITH_QT6 "Build against Qt 6" OFF)
if (BUILD_WITH_QT6)
set(QT_MAJOR_VERSION 6)
else()
set(QT_MAJOR_VERSION 5)
endif()
endif()

View File

@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
@@ -58,7 +58,11 @@ else()
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT PYSIDE2_BASEDIR)
message(FATAL_ERROR "The PySide2 module could not be imported. Make sure you have it installed by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\"")
message(
FATAL_ERROR
"The PySide2 module could not be imported. Make sure you have it installed "
"by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\""
)
endif()
set(PYSIDE_BASEDIR ${PYSIDE2_BASEDIR} CACHE PATH "Top level install of PySide2" FORCE)

View File

@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
@@ -33,7 +33,11 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT PYSIDE6_BASEDIR)
message(FATAL_ERROR "The PySide6 module could not be imported. Make sure you have it installed by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\"")
message(
FATAL_ERROR
"The PySide6 module could not be imported. Make sure you have it installed "
"by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\""
)
endif()
if(PYSIDE6_BASEDIR)

View File

@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
@@ -11,7 +11,8 @@
# SHIBOKEN_BUILD_TYPE - Tells if Shiboken was compiled in Release or Debug mode.
# You can install Shiboken from Qt repository with
# pip3 install --index-url=https://download.qt.io/official_releases/QtForPython --trusted-host download.qt.io shiboken2-generator
# pip3 install --index-url=https://download.qt.io/official_releases/QtForPython \
# --trusted-host download.qt.io shiboken2-generator
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
@@ -51,7 +52,11 @@ else()
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT SHIBOKEN_GENERATOR_BASEDIR)
message(FATAL_ERROR "The shiboken2_generator module could not be imported. Make sure you have it installed by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\"")
message(
FATAL_ERROR
"The shiboken2_generator module could not be imported. Make sure you have it installed "
"by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\""
)
endif()
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "if True:
@@ -66,7 +71,11 @@ else()
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT SHIBOKEN_BASEDIR)
message(FATAL_ERROR "The shiboken2 module could not be imported. Make sure you have it installed by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\"")
message(
FATAL_ERROR
"The shiboken2 module could not be imported. Make sure you have it installed "
"by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\""
)
endif()
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "if True:

View File

@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
@@ -11,7 +11,8 @@
# SHIBOKEN_BUILD_TYPE - Tells if Shiboken was compiled in Release or Debug mode.
# You can install Shiboken from Qt repository with
# pip3 install --index-url=https://download.qt.io/official_releases/QtForPython --trusted-host download.qt.io shiboken6-generator
# pip3 install --index-url=https://download.qt.io/official_releases/QtForPython \
# --trusted-host download.qt.io shiboken6-generator
set(SHIBOKEN_FOUND FALSE)
@@ -28,7 +29,11 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT SHIBOKEN_GENERATOR_BASEDIR)
message(FATAL_ERROR "The shiboken6_generator module could not be imported. Make sure you have it installed by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\"")
message(
FATAL_ERROR
"The shiboken6_generator module could not be imported. Make sure you have it installed "
"by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\""
)
endif()
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "if True:
@@ -43,7 +48,11 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT SHIBOKEN_BASEDIR)
message(FATAL_ERROR "The shiboken6 module could not be imported. Make sure you have it installed by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\"")
message(
FATAL_ERROR
"The shiboken6 module could not be imported. Make sure you have it installed "
"by checking the output of \"pip${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} list\""
)
endif()
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "if True:
@@ -142,7 +151,7 @@ if(SHIBOKEN_FOUND)
message(STATUS "Shiboken binary: ${SHIBOKEN_BINARY}")
message(STATUS "Shiboken version: ${SHIBOKEN_VERSION}")
# Create shiboke2 target
# Create shiboken2 target
add_library(Shiboken6::libshiboken SHARED IMPORTED GLOBAL)
if(MSVC)
set_property(TARGET Shiboken6::libshiboken PROPERTY
@@ -161,7 +170,8 @@ if(SHIBOKEN_FOUND)
set_property(TARGET Shiboken6::shiboken PROPERTY IMPORTED_LOCATION ${SHIBOKEN_BINARY})
endif()
find_package_handle_standard_args(Shiboken6
find_package_handle_standard_args(
Shiboken6
REQUIRED_VARS SHIBOKEN_BASEDIR SHIBOKEN_INCLUDE_DIR SHIBOKEN_LIBRARY SHIBOKEN_BINARY
VERSION_VAR SHIBOKEN_VERSION
)

View File

@@ -1,3 +1,9 @@
#
# SPDX-FileCopyrightText: 2012-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Some default installation locations. These should be global, with any project
# specific locations added to the end. These paths are all relative to the
# install prefix.
@@ -9,27 +15,27 @@
include(GNUInstallDirs)
if(NOT INSTALL_RUNTIME_DIR)
set(INSTALL_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR})
set(INSTALL_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR})
endif()
if(NOT INSTALL_LIBRARY_DIR)
set(INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR})
set(INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR})
endif()
if(NOT INSTALL_ARCHIVE_DIR)
set(INSTALL_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR})
set(INSTALL_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR})
endif()
if(NOT INSTALL_INCLUDE_DIR)
set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(NOT INSTALL_DATADIR)
set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR})
set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR})
endif()
if(NOT INSTALL_DOC_DIR)
set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}${KDDockWidgets_LIBRARY_QTID})
set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}${KDDockWidgets_LIBRARY_QTID})
endif()
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
if(APPLE)
set(CMAKE_MACOSX_RPATH ON)
set(CMAKE_MACOSX_RPATH ON)
else()
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${INSTALL_LIBRARY_DIR}")
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${INSTALL_LIBRARY_DIR}")
endif()

View File

@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2016-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2016-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Allen Winter <allen.winter@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
@@ -28,14 +28,14 @@ execute_process(
OUTPUT_VARIABLE ALL_VARS
)
if(NOT return_code EQUAL 0)
message(WARNING "Failed call: ${QMAKE_EXECUTABLE} -query")
message(WARNING "Failed call: ${QT_QMAKE_EXECUTABLE} -query")
message(FATAL_ERROR "QMake call failed: ${return_code}")
endif()
string(REPLACE "\n" ";" VARS_LIST ${ALL_VARS})
foreach(QVAL ${VARS_LIST})
if(QVAL MATCHES "QT_INSTALL_")
string(REPLACE ":" ";" QVAL_LIST ${QVAL})
foreach(qval ${VARS_LIST})
if(qval MATCHES "QT_INSTALL_")
string(REPLACE ":" ";" QVAL_LIST ${qval})
list(LENGTH QVAL_LIST listlen)
list(GET QVAL_LIST 0 var)
if(WIN32 AND ${listlen} GREATER 2)

View File

@@ -1,12 +1,15 @@
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
#
if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX)
set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Custom path to install python bindings.")
# cmake-lint: disable=C0103
set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
CACHE FILEPATH "Custom path to install python bindings."
)
endif()
message(STATUS "PYTHON INSTALL PREFIX ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}")
@@ -19,6 +22,10 @@ endif()
#Qt5 requires C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#remove noisy compiler warnings (as the generated code is not necessarily super-warning-free)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-all -Wno-extra")
endif()
# On macOS, check if Qt is a framework build. This affects how include paths should be handled.
get_target_property(QtCore_is_framework Qt5::Core FRAMEWORK)
@@ -61,6 +68,7 @@ if(WIN32 OR DEFINED AVOID_PROTECTED_HACK)
add_definitions(-DAVOID_PROTECTED_HACK)
endif()
# Replace all semicolons in a string with this platform's path separator
macro(make_path varname)
# accepts any number of path variables
string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}")
@@ -69,35 +77,35 @@ endmacro()
# Creates a PySide module target based on the arguments
# This will:
# 1 - Create a Cmake custom-target that call shiboken-generator passign the correct arguments
# 2 - Create a Cmake library target called "Py${LIBRARY_NAME}" the output name of this target
# 2 - Create a Cmake library target called "Py${libraryName}" the output name of this target
# will be changed to match PySide template
# Args:
# LIBRARY_NAME - The name of the output module
# TYPESYSTEM_PATHS - A list of paths where shiboken should look for typesystem files
# INCLUDE_PATHS - Include paths necessary to parse your class. *This is not the same as build*
# OUTPUT_SOURCES - The files that will be generated by shiboken
# TARGET_INCLUDE_DIRS - This will be passed to target_include_directories
# TARGET_LINK_LIBRARIES - This will be passed to target_link_libraries
# GLOBAL_INCLUDE - A header-file that contains all classes that will be generated
# TYPESYSTEM_XML - The target binding typesystem (that should be the full path)
# DEPENDS - This var will be passed to add_custom_command(DEPENDS) so a new generation will be
# libraryName - The name of the output module
# typesystemPaths - A list of paths where shiboken should look for typesystem files
# includePaths - Include paths necessary to parse your class. *This is not the same as build*
# outputSource - The files that will be generated by shiboken
# targetIncludeDirs - This will be passed to target_include_directories
# targetLinkLibraries - This will be passed to targetLinkLibraries
# globalInclude - A header-file that contains all classes that will be generated
# typesystemXML - The target binding typesystem (that should be the full path)
# dependsArg - This var will be passed to add_custom_command(DEPENDS) so a new generation will be
# trigger if one of these files changes
# MODULE_OUTPUT_DIR - Where the library file should be stored
macro(CREATE_PYTHON_BINDINGS
LIBRARY_NAME
TYPESYSTEM_PATHS
INCLUDE_PATHS
OUTPUT_SOURCES
TARGET_INCLUDE_DIRS
TARGET_LINK_LIBRARIES
GLOBAL_INCLUDE
TYPESYSTEM_XML
DEPENDS
MODULE_OUTPUT_DIR)
# moduleOutputDir - Where the library file should be stored
macro(create_python_bindings
libraryName
typesystemPaths
includePaths
outputSource
targetIncludeDirs
targetLinkLibraries
globalInclude
typesystemXML
dependsArg
moduleOutputDir)
# Transform the path separators into something shiboken understands.
make_path(shiboken_include_dirs ${INCLUDE_PATHS})
make_path(shiboken_typesystem_dirs ${TYPESYSTEM_PATHS})
make_path(shiboken_include_dirs ${includePaths})
make_path(shiboken_typesystem_dirs ${typesystemPaths})
get_property(raw_python_dir_include_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
make_path(python_dir_include_dirs ${raw_python_dir_include_dirs})
set(shiboken_include_dirs "${shiboken_include_dirs}${PATH_SEP}${python_dir_include_dirs}")
@@ -108,54 +116,55 @@ macro(CREATE_PYTHON_BINDINGS
make_path(shiboken_framework_include_dirs ${shiboken_framework_include_dirs})
set(shiboken_framework_include_dirs_option "--framework-include-paths=${shiboken_framework_include_dirs}")
endif()
set_property(SOURCE ${OUTPUT_SOURCES} PROPERTY SKIP_AUTOGEN ON)
add_custom_command(OUTPUT ${OUTPUT_SOURCES}
set_property(SOURCE ${outputSource} PROPERTY SKIP_AUTOGEN ON)
add_custom_command(
OUTPUT ${outputSource}
COMMAND $<TARGET_PROPERTY:Shiboken2::shiboken,LOCATION> ${GENERATOR_EXTRA_FLAGS}
${GLOBAL_INCLUDE}
${globalInclude}
--include-paths=${shiboken_include_dirs}
--typesystem-paths=${shiboken_typesystem_dirs}
${shiboken_framework_include_dirs_option}
--output-directory=${CMAKE_CURRENT_BINARY_DIR}
${TYPESYSTEM_XML}
DEPENDS ${TYPESYSTEM_XML} ${DEPENDS}
${typesystemXML}
DEPENDS ${typesystemXML} ${dependsArg}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Running generator for ${LIBRARY_NAME} binding...")
COMMENT "Running generator for ${libraryName} binding..."
)
set(TARGET_NAME "Py${LIBRARY_NAME}")
set(MODULE_NAME "${LIBRARY_NAME}")
add_library(${TARGET_NAME} MODULE ${OUTPUT_SOURCES})
set(TARGET_NAME "Py${libraryName}")
set(MODULE_NAME "${libraryName}")
add_library(${TARGET_NAME} MODULE ${outputSource})
set_target_properties(${TARGET_NAME} PROPERTIES
PREFIX ""
OUTPUT_NAME ${MODULE_NAME}
LIBRARY_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}
)
if(APPLE)
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
elseif(NOT WIN32) #ie. linux
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
endif()
set_target_properties(
${TARGET_NAME} PROPERTIES
PREFIX ""
OUTPUT_NAME ${MODULE_NAME}
LIBRARY_OUTPUT_DIRECTORY ${moduleOutputDir}
)
if(APPLE)
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
elseif(NOT WIN32) #ie. linux
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
endif()
if(WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".pyd")
endif()
if(WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".pyd")
endif()
target_include_directories(${TARGET_NAME} PUBLIC
${TARGET_INCLUDE_DIRS}
)
target_include_directories(${TARGET_NAME} PUBLIC ${targetIncludeDirs})
target_link_libraries(${TARGET_NAME}
${TARGET_LINK_LIBRARIES}
PySide2::pyside2
Shiboken2::libshiboken
)
target_compile_definitions(${TARGET_NAME}
PRIVATE Py_LIMITED_API=0x03050000
)
if(APPLE)
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
LINK_FLAGS "-undefined dynamic_lookup")
endif()
install(TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX})
target_link_libraries(
${TARGET_NAME}
${targetLinkLibraries}
PySide2::pyside2
Shiboken2::libshiboken
)
target_compile_definitions(${TARGET_NAME} PRIVATE Py_LIMITED_API=0x03050000)
if(APPLE)
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY LINK_FLAGS "-undefined dynamic_lookup")
endif()
install(
TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}
)
endmacro()

View File

@@ -1,12 +1,15 @@
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
#
# SPDX-License-Identifier: BSD-3-Clause
#
if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX)
set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Custom path to install python bindings.")
# cmake-lint: disable=C0103
set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
CACHE FILEPATH "Custom path to install python bindings."
)
endif()
message(STATUS "PYTHON INSTALL PREFIX ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}")
@@ -19,6 +22,10 @@ endif()
#Qt6 requires C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#remove noisy compiler warnings (as the generated code is not necessarily super-warning-free)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-all -Wno-extra")
endif()
# On macOS, check if Qt is a framework build. This affects how include paths should be handled.
get_target_property(QtCore_is_framework Qt6::Core FRAMEWORK)
@@ -61,6 +68,7 @@ if(WIN32 OR DEFINED AVOID_PROTECTED_HACK)
add_definitions(-DAVOID_PROTECTED_HACK)
endif()
# Replace all semicolons in a string with this platform's path separator
macro(make_path varname)
# accepts any number of path variables
string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}")
@@ -69,35 +77,35 @@ endmacro()
# Creates a PySide module target based on the arguments
# This will:
# 1 - Create a Cmake custom-target that call shiboken-generator passign the correct arguments
# 2 - Create a Cmake library target called "Py${LIBRARY_NAME}" the output name of this target
# 2 - Create a Cmake library target called "Py${libraryName}" the output name of this target
# will be changed to match PySide template
# Args:
# LIBRARY_NAME - The name of the output module
# TYPESYSTEM_PATHS - A list of paths where shiboken should look for typesystem files
# INCLUDE_PATHS - Include paths necessary to parse your class. *This is not the same as build*
# OUTPUT_SOURCES - The files that will be generated by shiboken
# TARGET_INCLUDE_DIRS - This will be passed to target_include_directories
# TARGET_LINK_LIBRARIES - This will be passed to target_link_libraries
# GLOBAL_INCLUDE - A header-file that contains all classes that will be generated
# TYPESYSTEM_XML - The target binding typesystem (that should be the full path)
# DEPENDS - This var will be passed to add_custom_command(DEPENDS) so a new generation will be
# libraryName - The name of the output module
# typesystemPaths - A list of paths where shiboken should look for typesystem files
# includePaths - Include paths necessary to parse your class. *This is not the same as build*
# outputSource - The files that will be generated by shiboken
# targetIncludeDirs - This will be passed to target_include_directories
# targetLinkLibraries - This will be passed to targetLinkLibraries
# globalInclude - A header-file that contains all classes that will be generated
# typesystemXML - The target binding typesystem (that should be the full path)
# dependsArg - This var will be passed to add_custom_command(DEPENDS) so a new generation will be
# trigger if one of these files changes
# MODULE_OUTPUT_DIR - Where the library file should be stored
macro(CREATE_PYTHON_BINDINGS
LIBRARY_NAME
TYPESYSTEM_PATHS
INCLUDE_PATHS
OUTPUT_SOURCES
TARGET_INCLUDE_DIRS
TARGET_LINK_LIBRARIES
GLOBAL_INCLUDE
TYPESYSTEM_XML
DEPENDS
MODULE_OUTPUT_DIR)
# moduleOutputDir - Where the library file should be stored
macro(create_python_bindings
libraryName
typesystemPaths
includePaths
outputSource
targetIncludeDirs
targetLinkLibraries
globalInclude
typesystemXML
dependsArg
moduleOutputDir)
# Transform the path separators into something shiboken understands.
make_path(shiboken_include_dirs ${INCLUDE_PATHS})
make_path(shiboken_typesystem_dirs ${TYPESYSTEM_PATHS})
make_path(shiboken_include_dirs ${includePaths})
make_path(shiboken_typesystem_dirs ${typesystemPaths})
get_property(raw_python_dir_include_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
make_path(python_dir_include_dirs ${raw_python_dir_include_dirs})
set(shiboken_include_dirs "${shiboken_include_dirs}${PATH_SEP}${python_dir_include_dirs}")
@@ -108,54 +116,55 @@ macro(CREATE_PYTHON_BINDINGS
make_path(shiboken_framework_include_dirs ${shiboken_framework_include_dirs})
set(shiboken_framework_include_dirs_option "--framework-include-paths=${shiboken_framework_include_dirs}")
endif()
set_property(SOURCE ${OUTPUT_SOURCES} PROPERTY SKIP_AUTOGEN ON)
add_custom_command(OUTPUT ${OUTPUT_SOURCES}
set_property(SOURCE ${outputSource} PROPERTY SKIP_AUTOGEN ON)
add_custom_command(
OUTPUT ${outputSource}
COMMAND $<TARGET_PROPERTY:Shiboken6::shiboken,LOCATION> ${GENERATOR_EXTRA_FLAGS}
${GLOBAL_INCLUDE}
${globalInclude}
--include-paths=${shiboken_include_dirs}
--typesystem-paths=${shiboken_typesystem_dirs}
${shiboken_framework_include_dirs_option}
--output-directory=${CMAKE_CURRENT_BINARY_DIR}
${TYPESYSTEM_XML}
DEPENDS ${TYPESYSTEM_XML} ${DEPENDS}
${typesystemXML}
DEPENDS ${typesystemXML} ${dependsArg}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Running generator for ${LIBRARY_NAME} binding...")
COMMENT "Running generator for ${libraryName} binding..."
)
set(TARGET_NAME "Py${LIBRARY_NAME}")
set(MODULE_NAME "${LIBRARY_NAME}")
add_library(${TARGET_NAME} MODULE ${OUTPUT_SOURCES})
set(TARGET_NAME "Py${libraryName}")
set(MODULE_NAME "${libraryName}")
add_library(${TARGET_NAME} MODULE ${outputSource})
set_target_properties(${TARGET_NAME} PROPERTIES
PREFIX ""
OUTPUT_NAME ${MODULE_NAME}
LIBRARY_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}
)
if(APPLE)
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
elseif(NOT WIN32) #ie. linux
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
endif()
set_target_properties(
${TARGET_NAME} PROPERTIES
PREFIX ""
OUTPUT_NAME ${MODULE_NAME}
LIBRARY_OUTPUT_DIRECTORY ${moduleOutputDir}
)
if(APPLE)
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
elseif(NOT WIN32) #ie. linux
set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
endif()
if(WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".pyd")
endif()
if(WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".pyd")
endif()
target_include_directories(${TARGET_NAME} PUBLIC
${TARGET_INCLUDE_DIRS}
)
target_include_directories(${TARGET_NAME} PUBLIC ${targetIncludeDirs})
target_link_libraries(${TARGET_NAME}
${TARGET_LINK_LIBRARIES}
PySide6::pyside6
Shiboken6::libshiboken
)
target_compile_definitions(${TARGET_NAME}
PRIVATE Py_LIMITED_API=0x03050000
)
if(APPLE)
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
LINK_FLAGS "-undefined dynamic_lookup")
endif()
install(TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX})
target_link_libraries(
${TARGET_NAME}
${targetLinkLibraries}
PySide6::pyside6
Shiboken6::libshiboken
)
target_compile_definitions(${TARGET_NAME} PRIVATE Py_LIMITED_API=0x03050000)
if(APPLE)
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY LINK_FLAGS "-undefined dynamic_lookup")
endif()
install(
TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}
)
endmacro()

View File

@@ -1,147 +0,0 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"C_Cpp.default.compileCommands": "${workspaceFolder}/build-dev-qtquick/compile_commands.json",
"C_Cpp.default.cStandard": "c17",
"files.trimTrailingWhitespace": true,
"editor.formatOnType": true,
"C_Cpp.autocompleteAddParentheses": true
},
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "gdb-kddockwidgets_customtitlebar_quick",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_customtitlebar_quick",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-kddockwidgets_example_mdi_quick",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_example_mdi_quick",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-kddockwidgets_example_quick",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_example_quick",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-tst_docks",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_customtitlebar_quick",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_customtitlebar_quick",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_example_mdi_quick",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_example_mdi_quick",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_example_quick",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_example_quick",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-tst_docks",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_customtitlebar_quick",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_customtitlebar_quick",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_example_mdi_quick",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_example_mdi_quick",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_example_quick",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/kddockwidgets_example_quick",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-tst_docks",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev-qtquick/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
}
]
}
}

View File

@@ -1,147 +0,0 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"C_Cpp.default.compileCommands": "${workspaceFolder}/build-dev/compile_commands.json",
"C_Cpp.default.cStandard": "c17",
"files.trimTrailingWhitespace": true,
"editor.formatOnType": true,
"C_Cpp.autocompleteAddParentheses": true
},
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "gdb-kddockwidgets_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-kddockwidgets_minimal_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_minimal_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-kddockwidgets_minimal_mdi_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_minimal_mdi_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-tst_docks",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_minimal_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_minimal_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_minimal_mdi_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_minimal_mdi_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-tst_docks",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_example",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_example",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_minimal_example",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_minimal_example",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_minimal_mdi_example",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/kddockwidgets_minimal_mdi_example",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-tst_docks",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
}
]
}
}

View File

@@ -1,147 +0,0 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"C_Cpp.default.compileCommands": "${workspaceFolder}/build-dev6/compile_commands.json",
"C_Cpp.default.cStandard": "c17",
"files.trimTrailingWhitespace": true,
"editor.formatOnType": true,
"C_Cpp.autocompleteAddParentheses": true
},
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "gdb-kddockwidgets_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-kddockwidgets_minimal_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_minimal_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-kddockwidgets_minimal_mdi_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_minimal_mdi_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "gdb-tst_docks",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_minimal_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_minimal_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-kddockwidgets_minimal_mdi_example",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_minimal_mdi_example",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "lldb-tst_docks",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"MIMode": "lldb",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_example",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_example",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_minimal_example",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_minimal_example",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-kddockwidgets_minimal_mdi_example",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/kddockwidgets_minimal_mdi_example",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-tst_docks",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
}
]
}
}

160
code.dev.code-workspace Normal file
View File

@@ -0,0 +1,160 @@
{
"folders": [
{
"name": "kddockwidgets",
"path": "."
},
{
"path": "/data/sources/kddockwidgets-flutter-example"
}
],
"settings": {
"C_Cpp.default.compileCommands": "${workspaceFolder:kddockwidgets}/build-dev/compile_commands.json",
"C_Cpp.default.cStandard": "c17",
"files.trimTrailingWhitespace": true,
"editor.formatOnSave": true,
"C_Cpp.autocompleteAddParentheses": true,
"clangd.arguments": [
"-header-insertion=never"
],
"todo-tree.tree.scanMode": "workspace only",
"todo-tree.tree.disableCompactFolders": false,
"todo-tree.tree.showBadges": true,
"todo-tree.general.tags": [
"BUG",
"HACK",
"FIXME",
"TODO",
"XXX",
"[ ]",
"[x]",
"TODOm2",
"TODOm3",
"TODOm4"
],
"testMate.cpp.test.executables": "{build-dev}/**/*{tst}*",
"todo-tree.filtering.excludeGlobs": [
"**/ECM",
"**/3rdparty"
],
"cmake.copyCompileCommands": "${workspaceFolder:kddockwidgets}/compile_commands.json"
},
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "qtwidgets_dockwidgets",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/examples/qtwidgets_dockwidgets",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "qtwidgets_minimal",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/examples/qtwidgets_minimal",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "qtwidgets_mdi",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/examples/qtwidgets_mdi",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "qtwidgets_mdi_with_docking",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/examples/qtwidgets_mdi_with_docking",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "qtquick_dockwidgets",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/examples/qtquick_dockwidgets",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_docks",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_droparea",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_droparea",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_dockwidget",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_dockwidget",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_group",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_group",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_separator",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_separator",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_stack",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_stack",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_tabbar",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_tabbar",
"args": [],
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_floatingwindow",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_floatingwindow",
"cwd": "${workspaceFolder:kddockwidgets}"
},
{
"name": "tst_qtwidgets",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder:kddockwidgets}/build-dev/bin/tst_qtwidgets",
"args": [
"tst_mainWindowAlwaysHasCentralWidget"
],
"cwd": "${workspaceFolder:kddockwidgets}"
}
]
}
}

142
code.dev6.code-workspace Normal file
View File

@@ -0,0 +1,142 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"C_Cpp.default.compileCommands": "${workspaceFolder}/build-dev6/compile_commands.json",
"C_Cpp.default.cStandard": "c17",
"files.trimTrailingWhitespace": true,
"editor.formatOnSave": true,
"C_Cpp.autocompleteAddParentheses": true,
"clangd.arguments": [
"-header-insertion=never"
],
"todo-tree.tree.scanMode": "workspace only",
"todo-tree.tree.disableCompactFolders": false,
"todo-tree.tree.showBadges": true,
"todo-tree.filtering.excludeGlobs": [
"**/ECM",
"**/3rdparty"
],
"todo-tree.general.tags": [
"BUG",
"HACK",
"FIXME",
"TODO",
"XXX",
"[ ]",
"[x]",
"TODOm2",
"TODOm3",
"TODOm4"
],
"testMate.cpp.test.executables": "{build-dev6}/**/*{tst}*"
},
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "qtwidgets_dockwidgets",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_dockwidgets",
"args": [],
"cwd": "${workspaceFolder}"
},
{
"name": "qtwidgets_minimal",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_minimal",
"args": [],
"cwd": "${workspaceFolder}"
},
{
"name": "qtwidgets_mdi",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_mdi",
"args": [],
"cwd": "${workspaceFolder}"
},
{
"name": "qtwidgets_mdi_with_docking",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_mdi_with_docking",
"args": [],
"cwd": "${workspaceFolder}"
},
{
"name": "qtquick_dockwidgets",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtquick_dockwidgets",
"args": [],
"cwd": "${workspaceFolder}"
},
{
"name": "tst_docks",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/tst_docks",
"args": [
"tst_addMDIDockWidget"
],
"cwd": "${workspaceFolder}"
},
{
"name": "msvc-qtwidgets_dockwidgets",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_dockwidgets",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-qtwidgets_minimal",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_minimal",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-qtwidgets_mdi",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtwidgets_mdi",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-qtquick_dockwidgets",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/examples/qtquick_dockwidgets.exe",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
},
{
"name": "msvc-tst_docks",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build-dev6/bin/tst_docks",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"externalConsole": false
}
]
}
}

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
#
# Contact KDAB at <info@kdab.com> for commercial licensing options.
@@ -9,9 +9,10 @@
from conans import ConanFile, CMake, tools
class KDDockWidgetsConan(ConanFile):
name = "kddockwidgets"
version = "1.4.0"
version = "1.5.0"
default_user = "kdab"
default_channel = "stable"
license = ("https://raw.githubusercontent.com/KDAB/KDDockWidgets/master/LICENSES/GPL-2.0-only.txt",
@@ -20,7 +21,7 @@ class KDDockWidgetsConan(ConanFile):
url = "https://github.com/KDAB/KDDockWidgets"
description = "Advanced Dock Widget Framework for Qt"
generators = "cmake"
topics = ("qt", "dockwidget" , "kdab")
topics = ("qt", "dockwidget", "kdab")
settings = "os", "compiler", "build_type", "arch"
options = {
"qt_version": "ANY",
@@ -65,4 +66,5 @@ class KDDockWidgetsConan(ConanFile):
self.env_info.CMAKE_PREFIX_PATH.append(self.package_folder)
def package_id(self):
self.info.requires["qt"].minor_mode() # Check only the major and minor version!
# Check only the major and minor version!
self.info.requires["qt"].minor_mode()

View File

@@ -1,3 +1,9 @@
kddockwidgets (1.5.0) release candidate; urgency=high
* 1.5.0 final
-- Allen Winter <allen.winter@kdab.com> Mon, 24 Nov 2021 12:00:00 -0500
kddockwidgets (1.4.0) release candidate; urgency=high
* 1.4.0 final

View File

@@ -6,7 +6,7 @@ Build-Depends: debhelper (>=9), cdbs, cmake
Standards-Version: 3.9.6
Homepage: https://github.com/KDAB/KDDockWidgets
Package: kddockwidgets
Package: qt5-kddockwidgets
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: KDAB's Dock Widget Framework for Qt
Description: KDAB's Dock Widget Framework for Qt

View File

@@ -1,10 +1,10 @@
Format: 1.0
Source: kddockwidgets
Version: 1.4.0-1
Version: 1.5.0-1
Binary: kddockwidgets
Maintainer: Allen Winter <allen.winter@kdab.com>
Architecture: any
Build-Depends: debhelper (>=9), cdbs, cmake, qtbase5-dev, libqt5x11extras5-dev
Build-Depends: debhelper (>=9), cdbs, cmake, qtbase5-dev, qtbase5-private-dev, libqt5x11extras5-dev, libfontconfig-dev, libfreetype-dev
Files:
00000000000000000000000000000000 00000 qt5-kddockwidgets-1.4.0.tar.gz
00000000000000000000000000000000 00000 qt5-kddockwidgets-1.5.0.tar.gz

View File

@@ -1,5 +1,5 @@
Name: qt5-kddockwidgets
Version: 1.4.0
Version: 1.5.0
Release: 1
Summary: KDAB's Dock Widget Framework for Qt5
Source0: %{name}-%{version}.tar.gz
@@ -14,15 +14,15 @@ Packager: Klaralvdalens Datakonsult AB (KDAB) <info@kdab.com>
BuildRequires: cmake
%if %{defined suse_version}
BuildRequires: libqt5-qtbase-devel libqt5-qtx11extras-devel
BuildRequires: libqt5-qtbase-devel libqt5-qtbase-private-headers-devel libqt5-qtx11extras-devel
%endif
%if %{defined fedora}
BuildRequires: gcc-c++ qt5-qtbase-devel qt5-qtx11extras-devel desktop-file-utils
BuildRequires: gcc-c++ qt5-qtbase-devel qt5-qtbase-private-devel qt5-qtx11extras-devel desktop-file-utils util-linux
%endif
%if %{defined rhel}
BuildRequires: gcc-c++ qt5-qtbase-devel qt5-qtx11extras-devel desktop-file-utils
BuildRequires: gcc-c++ qt5-qtbase-devel qt5-qtbase-private-devel qt5-qtx11extras-devel desktop-file-utils
%endif
%description
@@ -98,6 +98,8 @@ cmake . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
%{_libdir}/libkddockwidgets.so
%changelog
* Mon Nov 24 2021 Allen Winter <allen.winter@kdab.com> 1.5.0
1.5.0 final
* Fri Jul 16 2021 Allen Winter <allen.winter@kdab.com> 1.4.0
1.4.0 final
* Mon Jun 07 2021 Allen Winter <allen.winter@kdab.com> 1.3.1

12
distro/qt6-debian.control Normal file
View File

@@ -0,0 +1,12 @@
Source: kddockwidgets
Section: Miscellaneous
Priority: optional
Maintainer: Allen Winter <allen.winter@kdab.com>
Build-Depends: debhelper (>=9), cdbs, cmake
Standards-Version: 3.9.6
Homepage: https://github.com/KDAB/KDDockWidgets
Package: qt6-kddockwidgets
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: KDAB's Dock Widget Framework for Qt

View File

@@ -1,10 +1,10 @@
Format: 1.0
Source: kddockwidgets
Version: 1.4.0-1
Version: 1.5.0-1
Binary: kddockwidgets
Maintainer: Allen Winter <allen.winter@kdab.com>
Architecture: any
Build-Depends: debhelper (>=9), cdbs, cmake, qtbase6-dev, libqt6x11extras5-dev
Build-Depends: debhelper (>=9), cdbs, cmake, qt6-base-dev, qt6-base-private-dev, libgl1-mesa-dev, libfontconfig-dev, libfreetype-dev
Files:
00000000000000000000000000000000 00000 qt6-kddockwidgets-1.4.0.tar.gz
00000000000000000000000000000000 00000 qt6-kddockwidgets-1.5.0.tar.gz

View File

@@ -1,5 +1,5 @@
Name: qt6-kddockwidgets
Version: 1.4.0
Version: 1.5.0
Release: 1
Summary: KDAB's Dock Widget Framework for Qt6
Source0: %{name}-%{version}.tar.gz
@@ -14,15 +14,15 @@ Packager: Klaralvdalens Datakonsult AB (KDAB) <info@kdab.com>
BuildRequires: cmake
%if %{defined suse_version}
BuildRequires: libqt6-qtbase-devel libqt6-qtx11extras-devel
BuildRequires: libqt6-qtbase-devel libqt6-qtbase-private-headers-devel libqt6-qtx11extras-devel
%endif
%if %{defined fedora}
BuildRequires: gcc-c++ qt6-qtbase-devel desktop-file-utils
BuildRequires: gcc-c++ qt6-qtbase-devel qt6-qtbase-private-devel desktop-file-utils libxkbcommon-devel
%endif
%if %{defined rhel}
BuildRequires: gcc-c++ qt6-qtbase-devel qt6-qtx11extras-devel desktop-file-utils
BuildRequires: gcc-c++ qt6-qtbase-devel qt6-qtbase-private-devel qt6-qtx11extras-devel desktop-file-utils libxkbcommon-devel
%endif
%description
@@ -87,6 +87,8 @@ cmake . -DCMAKE_INSTALL_PREFIX=/usr -DKDDockWidgets_QT6=True -DCMAKE_BUILD_TYPE=
#%{_prefix}/mkspecs/modules/* ECMGeneratePriFile isn't ported to Qt6 yet
%changelog
* Mon Nov 24 2021 Allen Winter <allen.winter@kdab.com> 1.5.0
1.5.0 final
* Fri Jul 16 2021 Allen Winter <allen.winter@kdab.com> 1.4.0
1.4.0 final
* Mon Jun 07 2021 Allen Winter <allen.winter@kdab.com> 1.3.1

42
docker/pyside2/Dockerfile Normal file
View File

@@ -0,0 +1,42 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sérgio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
#
# Contact KDAB at <info@kdab.com> for commercial licensing options.
# The purpose of this Dockerfile is just for quickly getting a running python build for testing.
# Instructions:
# $ docker build -t kddw-pyside2 .
# $ docker run -it -v ~/Qt/5.15.2/gcc_64/:/Qt/ -v /tmp/.X11-unix:/tmp/.X11-unix kddw-pyside2
# git checkout 2.0
# cmake --preset=python -G Ninja . && cd build-python/ && ninja
# Test with:
# cd ../python/examples && rcc -g python -o rc_assets.py ../../examples/dockwidgets/resources_example.qrc
# python3 main.py
FROM ubuntu:22.04
MAINTAINER Sergio Martins (sergio.martins@kdab.com)
ENV TZ=Europe/Berlin
ENV LC_CTYPE=C.UTF-8
ENV DISPLAY=:0
ENV PATH=$PATH:/Qt/bin/
ENV LD_LIBRARY_PATH=/Qt/lib/
ENV PYTHONPATH=/KDDockWidgets/build-python/python/
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update
RUN apt install build-essential software-properties-common git ninja-build libssl-dev mesa-common-dev libglu1-mesa-dev libglib2.0-dev libfontconfig libxkbcommon-x11-0 libdbus-1-3 cmake pip libxslt1-dev llvm-dev clang libxcb-keysyms1 libxcb-image0 libxcb-icccm4 libxcb-xinerama0 libxcb-shape0 libxcb-render-util0 -y
RUN pip3 install --index-url=http://download.qt.io/official_releases/QtForPython/ --trusted-host download.qt.io shiboken2 pyside2 shiboken2_generator
WORKDIR /
RUN git clone https://github.com/KDAB/KDDockWidgets.git
WORKDIR /KDDockWidgets/

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Allen Winter <allen.winter@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,13 +11,14 @@
# Doxygen
find_package(Doxygen)
set_package_properties(Doxygen PROPERTIES
TYPE OPTIONAL
DESCRIPTION "API Documentation system"
URL "https://www.doxygen.org"
PURPOSE "Needed to build the API documentation."
set_package_properties(
Doxygen PROPERTIES
TYPE OPTIONAL
DESCRIPTION "API Documentation system"
URL "https://www.doxygen.org"
PURPOSE "Needed to build the API documentation."
)
if(DOXYGEN_FOUND)
add_subdirectory(api)
add_subdirectory(api)
endif()

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Allen Winter <allen.winter@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,61 +11,74 @@
# dot should come with Doxygen find_package(Doxygen)
if(DOXYGEN_DOT_EXECUTABLE)
set(HAVE_DOT "YES")
set(HAVE_DOT "YES")
else()
set(HAVE_DOT "NO")
message(STATUS "Unable to provide inheritance diagrams for the API documentation. To fix, install the graphviz project from https://www.graphviz.org")
set(HAVE_DOT "NO")
message(STATUS "Unable to provide inheritance diagrams for the API documentation. "
"To fix, install the graphviz project from https://www.graphviz.org"
)
endif()
# qhelpgenerator
find_program(QHELPGEN_EXECUTABLE qhelpgenerator
HINTS ${QT_INSTALL_BINS}
)
find_program(QHELPGEN_EXECUTABLE qhelpgenerator HINTS ${QT_INSTALL_BINS})
if(QHELPGEN_EXECUTABLE)
set(HAVE_QHELPGEN "YES")
set(HAVE_QHELPGEN "YES")
else()
set(HAVE_QHELPGEN "NO")
message(STATUS "Unable to generate the API documentation in qch format. To fix, install the qthelpgenerator program which comes with Qt.")
set(HAVE_QHELPGEN "NO")
message(STATUS "Unable to generate the API documentation in qch format. "
"To fix, install the qthelpgenerator program which comes with Qt."
)
endif()
find_file(QDOC_QTCORE_TAG qtcore.tags
HINTS ${QT_INSTALL_DOCS}/qtcore
HINTS ${QT_INSTALL_DATA}/doc/qtcore
)
find_file(QDOC_QTCORE_TAG qtcore.tags HINTS ${QT_INSTALL_DOCS}/qtcore ${QT_INSTALL_DATA}/doc/qtcore)
set(QDOC_TAG_DIR "<QDOC_TAG_DIR_not_found>")
if(QDOC_QTCORE_TAG)
get_filename_component(QDOC_TAG_DIR ${QDOC_QTCORE_TAG} DIRECTORY)
get_filename_component(QDOC_TAG_DIR ${QDOC_TAG_DIR} DIRECTORY)
get_filename_component(QDOC_TAG_DIR ${QDOC_QTCORE_TAG} DIRECTORY)
get_filename_component(QDOC_TAG_DIR ${QDOC_TAG_DIR} DIRECTORY)
endif()
file(GLOB _dox_deps *.dox *.html)
set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
#apidox generation using doxygen
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
)
# apidox generation using doxygen
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
add_custom_command(
OUTPUT ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
#handle a bug in doxygen where image files referred to in markdown are not copied the output
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../screencap.gif ${DOXYGEN_OUTPUT_DIR}/html
#copy some files by-hand that are referred to by the markdown README
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/README-bindings.md ${DOXYGEN_OUTPUT_DIR}/html
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/LICENSES
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-2.0-only.txt ${DOXYGEN_OUTPUT_DIR}/html/LICENSES
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0-only.txt ${DOXYGEN_OUTPUT_DIR}/html/LICENSES
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/docs
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/docs/KDDockWidgets-CopyrightAssignmentForm.pdf ${DOXYGEN_OUTPUT_DIR}/html/docs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/examples ${DOXYGEN_OUTPUT_DIR}/html/examples
DEPENDS ${_dox_deps} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
OUTPUT ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
# handle a bug in doxygen where image files referred to in markdown are not
# copied the output
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../screencap.gif
${DOXYGEN_OUTPUT_DIR}/html
# copy some files by-hand that are referred to by the markdown README
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/README-bindings.md ${DOXYGEN_OUTPUT_DIR}/html
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/LICENSES
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-2.0-only.txt
${DOXYGEN_OUTPUT_DIR}/html/LICENSES
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0-only.txt
${DOXYGEN_OUTPUT_DIR}/html/LICENSES
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/docs
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/docs/KDDockWidgets-CopyrightAssignmentForm.pdf
${DOXYGEN_OUTPUT_DIR}/html/docs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/examples ${DOXYGEN_OUTPUT_DIR}/html/examples
DEPENDS ${_dox_deps} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Generate the .qch file"
)
add_custom_target(
kddockwidgets-api.qch ALL
DEPENDS ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch
COMMENT "Target to generate the .qch file"
)
add_custom_target(
docs
DEPENDS kddockwidgets-api.qch
COMMENT "Target to generate the documentation"
)
add_custom_target(kddockwidgets-api.qch ALL DEPENDS ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch)
add_custom_target(docs DEPENDS kddockwidgets-api.qch)
set(QCH_INSTALL_DIR ${INSTALL_DOC_DIR} CACHE STRING "Install location of Qt Assistant help files.")
set(QCH_INSTALL_DIR
${INSTALL_DOC_DIR}
CACHE STRING "Install location of Qt Assistant help files."
)
install(FILES ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch DESTINATION ${QCH_INSTALL_DIR})
install(FILES ${DOXYGEN_OUTPUT_DIR}/kddockwidgets.tags DESTINATION ${INSTALL_DOC_DIR})

View File

@@ -876,7 +876,8 @@ FILE_PATTERNS = *.cpp \
*.h \
*.dox \
*.md \
*.gif
*.gif \
*.png
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
@@ -1102,38 +1103,6 @@ USE_HTAGS = NO
VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
# cost of reduced performance. This can be particularly helpful with template
# rich C++ code for which doxygen's built-in parser lacks the necessary type
# information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS =
# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the "-p" option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
CLANG_DATABASE_PATH =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------

View File

@@ -1,7 +1,7 @@
<hr>
<div style="float: left;">
<img src="kdab-logo-16x16.png">
<font style="font-weight: bold;">&copy; 2019-2021 Klar&auml;lvdalens Datakonsult AB (KDAB)</font>
<font style="font-weight: bold;">&copy; 2019-2022 Klar&auml;lvdalens Datakonsult AB (KDAB)</font>
<br>
"The Qt, C++ and OpenGL Experts"<br>
<a href="https://www.kdab.com/">https://www.kdab.com/</a>

1
docs_devel/about.md Normal file
View File

@@ -0,0 +1 @@
# About

82
docs_devel/concepts.md Normal file
View File

@@ -0,0 +1,82 @@
# Concepts
Before digging into code we need to learn some high level concepts which will make it easy
to learn the API afterwards.
## Views or Widgets
A view, or widget is the most basic GUI element usually provided by your framework.
KDDockWidget's has its roots in the Qt QWidget GUI framework, hence the term widget
will appear in many places. However, since KDDW's goal is to support other GUI toolkits,
we've introduced a more generic term, view.
For the QtWidget frontend, a view will be internally implemented as a QWidget, while for
the QtQuick frontend it will be implemented as a QQuickItem.
## Guest View
This is the view that the user (library user) wants to dock. It has some custom content that
is only relevant for the application. From KDDW's perspective we don't care what's inside,
we'll just help dock it.
## DockWidget
The DockWidget is a visual container for the Guest, in other words, its visual parent.
Visually, DockWidget and Guest might be indistinguishable, except for some margin added by
DockWidget. One reason to have this extra indirection is that it allows us to have a common API
to deal with the Guest. Since guest is provided by the application developer it doesn't have any interface.
## TitleBar
A TitleBar is the area that has the dock widget title and the float and close buttons.
Usually KDDW won't use native OS title bars but draw its own.
## TabBar
DockWidgets can be grouped together in tabs. A tab bar is just a group of tabs.
In Qt this is something like QTabBar.
## Stack
A stack is closely related to TabBar. A stack is a group of dock widgets where only one is visible
at a time, the visible one is controlled by the current tab. In Qt this would be QTabWidget.
## Frame
The Frame is a container that ties the previous concepts all together.
It's composed of 1 or more tabbed DockWidgets, a TitleBar, a Stack and a TabBar.
## Layout
Represents a docking layout. Currently 2 are supported, the traditional nested docking with
resizable splitters (this is the default), implemented by MultiSplitter. And a MDI layout, where
the dock widgets can be arbitrary positioned and even overlap inside an area.
The layouts deal in Frame. You add Frame objects to a layout.
## Separator
A visual separator between two widgets, which allows the user to resize dock widgets with mouse.
## FloatingWindow
When a dock widget isn't embedded into a window it's said to be floating. It's its own
top-level native window. This class ties all the previous together. It contains one layout, which
contains multiple groups.
## MainWindow
Not much different from FloatingWindow technically, but users will often add status bar, tool bar
and menu bars to a main window, while FloatingWindow is just an utility window (Qt::Tool).
MainWindow also has support for a SideBar.
## SideBar
A side bar is a place in the MainWindow where you can "minimize" dock widgets.
It's also called the auto-hide future. When you send a dock widget to the sidebar it will close
but show a button in the sidebar, if you press it, it will show the dock widget as an overlay.
## Drop Indicators
When dragging a dock widgets, KDDW will highlight the places where you can drop it, so
it embeds in the correct position.

1
docs_devel/index.md Normal file
View File

@@ -0,0 +1 @@
# Welcome to KDDockWidgets

View File

@@ -0,0 +1,11 @@
# Creating a new frontend
- Copy `src/dummy/` into `src/yourfrontend/`
- Rename the files from `_dummy` to `_yourfrontend`
- Edit `CMakeLists.txt` and `src/CMakeLists.txt`
- Edit the `FrontendType` enum in `KDDockWidgets.h` and add a new enumerator for your frontend
- Edit `Platform::frontendTypes()` in `Platform.cpp` and honour your new enumerator, properly ifdefed
- In `Platform.cpp` add the needed `#include "yourplatform/Platform_yourplatform.h` include
- Edit `Platform::tests_initPlatform()` and add your enumerator
- Edit `Platform_yourfrontend::name()` to return an ID for your frontend
- Run `./bin/tst_platform -tc="Platform::Platform,Platform::name"` , make sure it passes

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -10,30 +10,20 @@
#
cmake_minimum_required(VERSION 3.7)
project(kddockwidgets_example)
project(qtwidgets_dockwidgets)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
if(NOT TARGET kddockwidgets)
# This will look for Qt, do find_package yourself manually before
# if you want to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
# This will look for Qt, do find_package yourself manually before if you want
# to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
endif()
set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_example.qrc)
add_executable(kddockwidgets_example
main.cpp
MyFrameworkWidgetFactory.cpp
MyMainWindow.cpp
MyWidget.cpp
${RESOURCES_EXAMPLE_SRC}
)
target_link_libraries(kddockwidgets_example
PRIVATE
KDAB::kddockwidgets
)
add_executable(qtwidgets_dockwidgets main.cpp MyViewFactory.cpp MyMainWindow.cpp MyWidget.cpp ${RESOURCES_EXAMPLE_SRC})
target_link_libraries(qtwidgets_dockwidgets PRIVATE KDAB::kddockwidgets)

View File

@@ -1,106 +0,0 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "MyFrameworkWidgetFactory.h"
#include "MyTitleBar_CSS.h"
#include <kddockwidgets/FrameworkWidgetFactory.h>
#include <kddockwidgets/private/TabWidget_p.h>
#include <kddockwidgets/private/widgets/FrameWidget_p.h>
#include <kddockwidgets/private/widgets/TabBarWidget_p.h>
#include <kddockwidgets/private/widgets/TabWidgetWidget_p.h>
#include <kddockwidgets/private/widgets/TitleBarWidget_p.h>
#include <kddockwidgets/private/multisplitter/Separator_qwidget.h>
#include <QApplication>
// clazy:excludeall=missing-qobject-macro,ctor-missing-parent-argument
class MyTitleBar : public KDDockWidgets::TitleBarWidget
{
public:
explicit MyTitleBar(KDDockWidgets::Frame *frame)
: KDDockWidgets::TitleBarWidget(frame)
{
init();
}
explicit MyTitleBar(KDDockWidgets::FloatingWindow *fw)
: KDDockWidgets::TitleBarWidget(fw)
{
init();
}
~MyTitleBar() override;
void init()
{
setFixedHeight(60);
}
void paintEvent(QPaintEvent *) override
{
QPainter p(this);
QPen pen(Qt::black);
const QColor focusedBackgroundColor = Qt::yellow;
const QColor backgroundColor = focusedBackgroundColor.darker(115);
QBrush brush(isFocused() ? focusedBackgroundColor : backgroundColor);
pen.setWidth(4);
p.setPen(pen);
p.setBrush(brush);
p.drawRect(rect().adjusted(4, 4, -4, -4));
QFont f = qApp->font();
f.setPixelSize(30);
f.setBold(true);
p.setFont(f);
p.drawText(QPoint(10,40), title());
}
};
MyTitleBar::~MyTitleBar() = default;
// Inheriting from SeparatorWidget instead of Separator as it handles moving and mouse cursor changing
class MySeparator : public Layouting::SeparatorWidget
{
public:
explicit MySeparator(Layouting::Widget *parent)
: Layouting::SeparatorWidget(parent)
{
}
~MySeparator() override;
void paintEvent(QPaintEvent *) override
{
QPainter p(this);
p.fillRect(QWidget::rect(), Qt::cyan);
}
};
MySeparator::~MySeparator() = default;
KDDockWidgets::TitleBar * CustomWidgetFactory::createTitleBar(KDDockWidgets::Frame *frame) const
{
// Feel free to return MyTitleBar_CSS here instead, but just for education purposes!
return new MyTitleBar(frame);
}
KDDockWidgets::TitleBar * CustomWidgetFactory::createTitleBar(KDDockWidgets::FloatingWindow *fw) const
{
// Feel free to return MyTitleBar_CSS here instead, but just for education purposes!
return new MyTitleBar(fw);
}
Layouting::Separator * CustomWidgetFactory::createSeparator(Layouting::Widget *parent) const
{
return new MySeparator(parent);
}

View File

@@ -1,27 +0,0 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#pragma once
#include <kddockwidgets/FrameworkWidgetFactory.h>
#include <QPainter>
// clazy:excludeall=ctor-missing-parent-argument
class CustomWidgetFactory : public KDDockWidgets::DefaultWidgetFactory
{
Q_OBJECT
public:
KDDockWidgets::TitleBar *createTitleBar(KDDockWidgets::Frame *frame) const override;
KDDockWidgets::TitleBar *createTitleBar(KDDockWidgets::FloatingWindow *fw) const override;
Layouting::Separator *createSeparator(Layouting::Widget *parent = nullptr) const override;
};

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -45,15 +45,17 @@ static MyWidget *newMyWidget()
}
MyMainWindow::MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowOptions options,
bool dockWidget0IsNonClosable, bool nonDockableDockWidget9, bool restoreIsRelative,
bool maxSizeForDockWidget8, bool dockwidget5DoesntCloseBeforeRestore,
bool dockWidget0IsNonClosable, bool nonDockableDockWidget9,
bool restoreIsRelative, bool maxSizeForDockWidget8,
bool dockwidget5DoesntCloseBeforeRestore, bool dock0BlocksCloseEvent,
const QString &affinityName, QWidget *parent)
: MainWindow(uniqueName, options, parent)
: KDDockWidgets::Views::MainWindow_qtwidgets(uniqueName, options, parent)
, m_dockWidget0IsNonClosable(dockWidget0IsNonClosable)
, m_dockWidget9IsNonDockable(nonDockableDockWidget9)
, m_restoreIsRelative(restoreIsRelative)
, m_maxSizeForDockWidget8(maxSizeForDockWidget8)
, m_dockwidget5DoesntCloseBeforeRestore(dockwidget5DoesntCloseBeforeRestore)
, m_dock0BlocksCloseEvent(dock0BlocksCloseEvent)
{
auto menubar = menuBar();
auto fileMenu = new QMenu(QStringLiteral("File"), this);
@@ -71,10 +73,11 @@ MyMainWindow::MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowO
count++;
auto w = newMyWidget();
w->setGeometry(100, 100, 400, 400);
auto dock = new KDDockWidgets::DockWidget(QStringLiteral("new dock %1").arg(count));
auto dock = new KDDockWidgets::Views::DockWidget_qtwidgets(
QStringLiteral("new dock %1").arg(count));
dock->setWidget(w);
dock->resize(600, 600);
dock->show();
dock->resize(QSize(600, 600));
dock->open();
});
auto saveLayoutAction = fileMenu->addAction(QStringLiteral("Save Layout"));
@@ -101,12 +104,13 @@ MyMainWindow::MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowO
});
auto layoutEqually = fileMenu->addAction(QStringLiteral("Layout Equally"));
connect(layoutEqually, &QAction::triggered, this, &MainWindow::layoutEqually);
connect(layoutEqually, &QAction::triggered, this, [this] { this->layoutEqually(); });
auto quitAction = fileMenu->addAction(QStringLiteral("Quit"));
connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
QAction *toggleDropIndicatorSupport = miscMenu->addAction(QStringLiteral("Toggle Drop Indicator Support"));
QAction *toggleDropIndicatorSupport =
miscMenu->addAction(QStringLiteral("Toggle Drop Indicator Support"));
toggleDropIndicatorSupport->setCheckable(true);
toggleDropIndicatorSupport->setChecked(true);
connect(toggleDropIndicatorSupport, &QAction::toggled, this, [](bool checked) {
@@ -132,8 +136,8 @@ void MyMainWindow::createDockWidgets()
const int numDockWidgets = m_dockWidget9IsNonDockable ? 10 : 9;
// Create 9 KDDockWidget::DockWidget and the respective widgets they're hosting (MyWidget instances)
// Create 9 KDDockWidget::DockWidget and the respective widgets they're hosting (MyWidget
// instances)
for (int i = 0; i < numDockWidgets; i++)
m_dockwidgets << newDockWidget();
@@ -155,31 +159,34 @@ void MyMainWindow::createDockWidgets()
m_dockwidgets[6]->addDockWidgetAsTab(m_dockwidgets.at(7));
// Floating windows also support nesting, here we add 8 to the bottom of the group
m_dockwidgets[6]->addDockWidgetToContainingWindow(m_dockwidgets.at(8), KDDockWidgets::Location_OnBottom);
m_dockwidgets[6]->addDockWidgetToContainingWindow(m_dockwidgets.at(8),
KDDockWidgets::Location_OnBottom);
auto floatingWindow = m_dockwidgets.at(6)->window();
auto floatingWindow = m_dockwidgets.at(6)->rootView();
floatingWindow->move(100, 100);
}
KDDockWidgets::DockWidgetBase *MyMainWindow::newDockWidget()
KDDockWidgets::Views::DockWidget_qtwidgets *MyMainWindow::newDockWidget()
{
static int count = 0;
// Passing options is optional, we just want to illustrate Option_NotClosable here
KDDockWidgets::DockWidget::Options options = KDDockWidgets::DockWidget::Option_None;
KDDockWidgets::DockWidget::LayoutSaverOptions layoutSaverOptions = KDDockWidgets::DockWidget::LayoutSaverOption::None;
KDDockWidgets::DockWidgetOptions options = KDDockWidgets::DockWidgetOption_None;
KDDockWidgets::LayoutSaverOptions layoutSaverOptions = KDDockWidgets::LayoutSaverOption::None;
if (count == 0 && m_dockWidget0IsNonClosable)
options |= KDDockWidgets::DockWidget::Option_NotClosable;
options |= KDDockWidgets::DockWidgetOption_NotClosable;
if (count == 9 && m_dockWidget9IsNonDockable)
options |= KDDockWidgets::DockWidget::Option_NotDockable;
options |= KDDockWidgets::DockWidgetOption_NotDockable;
if (count == 5 && m_dockwidget5DoesntCloseBeforeRestore)
layoutSaverOptions |= KDDockWidgets::DockWidget::LayoutSaverOption::Skip;
layoutSaverOptions |= KDDockWidgets::LayoutSaverOption::Skip;
auto dock = new KDDockWidgets::DockWidget(QStringLiteral("DockWidget #%1").arg(count), options, layoutSaverOptions);
dock->setAffinities(affinities()); // optional, just to show the feature. Pass -mi to the example to see incompatible dock widgets
auto dock = new KDDockWidgets::Views::DockWidget_qtwidgets(
QStringLiteral("DockWidget #%1").arg(count), options, layoutSaverOptions);
dock->setAffinities(affinities()); // optional, just to show the feature. Pass -mi to the
// example to see incompatible dock widgets
if (count == 1)
dock->setIcon(QIcon::fromTheme(QStringLiteral("mail-message")));
@@ -190,15 +197,18 @@ KDDockWidgets::DockWidgetBase *MyMainWindow::newDockWidget()
myWidget->setMaximumSize(200, 200);
}
if (count == 0 && m_dock0BlocksCloseEvent)
myWidget->blockCloseEvent();
dock->setWidget(myWidget);
if (dock->options() & KDDockWidgets::DockWidget::Option_NotDockable) {
if (dock->options() & KDDockWidgets::DockWidgetOption_NotDockable) {
dock->setTitle(QStringLiteral("DockWidget #%1 (%2)").arg(count).arg("non dockable"));
} else {
dock->setTitle(QStringLiteral("DockWidget #%1").arg(count));
}
dock->resize(600, 600);
dock->resize(QSize(600, 600));
m_toggleMenu->addAction(dock->toggleAction());
dock->toggleAction()->setShortcut(QStringLiteral("ctrl+%1").arg(count));

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -14,25 +14,28 @@
#include <kddockwidgets/DockWidget.h>
#include <kddockwidgets/MainWindow.h>
class MyMainWindow : public KDDockWidgets::MainWindow
class MyMainWindow : public KDDockWidgets::Views::MainWindow_qtwidgets
{
Q_OBJECT
public:
explicit MyMainWindow(const QString &uniqueName, KDDockWidgets::MainWindowOptions options,
bool dockWidget0IsNonClosable, bool nonDockableDockWidget9, bool restoreIsRelative,
bool maxSizeForDockWidget8, bool dockwidget5DoesntCloseBeforeRestore,
const QString &affinityName = {}, // Usually not needed. Just here to show the feature.
bool dockWidget0IsNonClosable, bool nonDockableDockWidget9,
bool restoreIsRelative, bool maxSizeForDockWidget8,
bool dockwidget5DoesntCloseBeforeRestore, bool dock0BlocksCloseEvent,
const QString &affinityName = {}, // Usually not needed. Just here to show
// the feature.
QWidget *parent = nullptr);
~MyMainWindow() override;
private:
void createDockWidgets();
KDDockWidgets::DockWidgetBase* newDockWidget();
KDDockWidgets::Views::DockWidget_qtwidgets *newDockWidget();
QMenu *m_toggleMenu = nullptr;
const bool m_dockWidget0IsNonClosable;
const bool m_dockWidget9IsNonDockable;
const bool m_restoreIsRelative;
const bool m_maxSizeForDockWidget8;
const bool m_dockwidget5DoesntCloseBeforeRestore;
KDDockWidgets::DockWidget::List m_dockwidgets;
const bool m_dock0BlocksCloseEvent;
QVector<KDDockWidgets::Views::DockWidget_qtwidgets *> m_dockwidgets;
};

View File

@@ -1,23 +1,29 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include <kddockwidgets/private/widgets/TitleBarWidget_p.h>
#ifndef EXAMPLETITLEBAR_CSS_H
#define EXAMPLETITLEBAR_CSS_H
#pragma once
#include <kddockwidgets/views/TitleBar_qtwidgets.h>
#include <kddockwidgets/controllers/TitleBar.h>
/**
* @brief Shows how to implement a custom titlebar which uses "Qt StyleSheets".
*
* Derive from KDDockWidgets::DefaultWidgetFactory and override the two createTitleBar() methods.
*
* To try it out, modify examples/dockwidgets/MyFrameworkWidgetFactory.cpp to return a MyTitleBar_CSS instance.
* Run the example with: ./bin/kddockwidgets_example -p
*
* Derive from KDDockWidgets::ViewFactory_qtwidgets and override the createTitleBar() method.
*
* To try it out, modify examples/dockwidgets/MyViewFactory.cpp to return a MyTitleBar_CSS instance.
* Run the example with: ./bin/examples/qtwidgets_dockwidgets -p
*
* WARNINGS:
* - Qt StyleSheets are not recommended for new applications. Often you are able to style 90% of
@@ -25,27 +31,29 @@
* - The Qt maintainers have manifested intention to deprecated stylesheets.
* - Stylesheets are supported for built-in QWidgets (QPushButton, QComboBox, etc.), any widget
* that's not in Qt needs to be crafted by the user, that includes, for example, having to paint
* your background manually. KDDockWidget::TitleBarWidget does this for your convenience though.
* your background manually. KDDockWidget::Views::TitleBar_qtwidgets does this for your
* convenience though.
* - Qt stylesheets don't react to property changes (known old bug in Qt), for example:
* QLineEdit[readOnly="true"] { color: gray }
* this won't trigger when readOnly changes to false, you need to set/unset. This is QTBUG-51236
* - KDDockWidgets::TitleBarWidget::isFocused is a property, there for needs to workaround the
* above bug by unsetting the sheet and setting it again.
* - KDDockWidget::Views::TitleBar_qtwidgets::isFocused is a property, there for needs to
* workaround the above bug by unsetting the sheet and setting it again.
*/
class MyTitleBar_CSS : public KDDockWidgets::TitleBarWidget
class MyTitleBar_CSS : public KDDockWidgets::Views::TitleBar_qtwidgets
{
public:
explicit MyTitleBar_CSS(KDDockWidgets::Frame *frame)
: KDDockWidgets::TitleBarWidget(frame)
explicit MyTitleBar_CSS(KDDockWidgets::Controllers::TitleBar *controller,
View *parent = nullptr)
: KDDockWidgets::Views::TitleBar_qtwidgets(controller, parent)
{
init();
initStyleSheet();
connect(controller, &KDDockWidgets::Controllers::TitleBar::isFocusedChanged, this, [this] {
// Workaround QTBUG-51236, this makes the [isFocused=true] syntax useful
setStyleSheet(QString());
initStyleSheet();
});
}
explicit MyTitleBar_CSS(KDDockWidgets::FloatingWindow *fw)
: KDDockWidgets::TitleBarWidget(fw)
{
init();
}
~MyTitleBar_CSS() override;
@@ -62,18 +70,10 @@ public:
"background: green"
"}"));
}
void init()
{
initStyleSheet();
connect(this, &KDDockWidgets::TitleBar::isFocusedChanged, this, [this] {
// Workaround QTBUG-51236, this makes the [isFocused=true] syntax useful
setStyleSheet(QString());
initStyleSheet();
});
}
};
MyTitleBar_CSS::~MyTitleBar_CSS()
{
}
#endif

View File

@@ -0,0 +1,93 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "MyViewFactory.h"
#include "MyTitleBar_CSS.h"
#include <kddockwidgets/views/TitleBar_qtwidgets.h>
#include <kddockwidgets/views/Separator_qtwidgets.h>
#include <QApplication>
#include <QPainter>
// clazy:excludeall=missing-qobject-macro,ctor-missing-parent-argument
class MyTitleBar : public KDDockWidgets::Views::TitleBar_qtwidgets
{
public:
explicit MyTitleBar(KDDockWidgets::Controllers::TitleBar *controller, View *parent = nullptr)
: KDDockWidgets::Views::TitleBar_qtwidgets(controller, parent)
, m_controller(controller)
{
setFixedHeight(60);
}
~MyTitleBar() override;
void paintEvent(QPaintEvent *) override
{
QPainter p(this);
QPen pen(Qt::black);
const QColor focusedBackgroundColor = Qt::yellow;
const QColor backgroundColor = focusedBackgroundColor.darker(115);
QBrush brush(m_controller->isFocused() ? focusedBackgroundColor : backgroundColor);
pen.setWidth(4);
p.setPen(pen);
p.setBrush(brush);
p.drawRect(rect().adjusted(4, 4, -4, -4));
QFont f = qGuiApp->font();
f.setPixelSize(30);
f.setBold(true);
p.setFont(f);
p.drawText(QPoint(10, 40), m_controller->title());
}
private:
KDDockWidgets::Controllers::TitleBar *const m_controller;
};
MyTitleBar::~MyTitleBar() = default;
// Inheriting from SeparatorWidget instead of Separator as it handles moving and mouse cursor
// changing
class MySeparator : public KDDockWidgets::Views::Separator_qtwidgets
{
public:
explicit MySeparator(KDDockWidgets::Controllers::Separator *controller, View *parent)
: KDDockWidgets::Views::Separator_qtwidgets(controller, parent)
{
}
~MySeparator() override;
void paintEvent(QPaintEvent *) override
{
QPainter p(this);
p.fillRect(QWidget::rect(), Qt::cyan);
}
};
MySeparator::~MySeparator() = default;
KDDockWidgets::View *
CustomWidgetFactory::createTitleBar(KDDockWidgets::Controllers::TitleBar *controller,
KDDockWidgets::View *parent) const
{
// Feel free to return MyTitleBar_CSS here instead, but just for education purposes!
return new MyTitleBar(controller, parent);
}
KDDockWidgets::View *
CustomWidgetFactory::createSeparator(KDDockWidgets::Controllers::Separator *controller,
KDDockWidgets::View *parent) const
{
return new MySeparator(controller, parent);
}

View File

@@ -0,0 +1,26 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#pragma once
#include <kddockwidgets/ViewFactory_qtwidgets.h>
// clazy:excludeall=ctor-missing-parent-argument
class CustomWidgetFactory : public KDDockWidgets::ViewFactory_qtwidgets
{
Q_OBJECT
public:
KDDockWidgets::View *createTitleBar(KDDockWidgets::Controllers::TitleBar *,
KDDockWidgets::View *parent) const override;
KDDockWidgets::View *createSeparator(KDDockWidgets::Controllers::Separator *,
KDDockWidgets::View *parent = nullptr) const override;
};

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -15,6 +15,7 @@
#include <QDebug>
#include <QFile>
#include <QLineEdit>
#include <QCloseEvent>
static QHash<QString, QImage> s_images; /// clazy:exclude=non-pod-global-static
@@ -61,17 +62,31 @@ void MyWidget::drawLogo(QPainter &p)
const int proposedHeight = int(maxWidth * ratio);
const int width = proposedHeight <= maxHeight ? maxWidth
: int(maxHeight / ratio);
const int width = proposedHeight <= maxHeight ? maxWidth : int(maxHeight / ratio);
const int height = int(width * ratio);
QRect targetLogoRect(0,0, width, height);
QRect targetLogoRect(0, 0, width, height);
targetLogoRect.moveCenter(rect().center() + QPoint(0, -int(size().height() * 0.00)));
p.drawImage(targetLogoRect, m_logo, m_logo.rect());
}
void MyWidget::blockCloseEvent()
{
m_blocksCloseEvent = true;
}
void MyWidget::closeEvent(QCloseEvent *ev)
{
if (m_blocksCloseEvent) {
ev->ignore();
} else {
QWidget::closeEvent(ev);
}
}
MyWidget1::MyWidget1(MyWidget::QWidget *parent)
: MyWidget(QStringLiteral(":/assets/triangles.png"), QStringLiteral(":/assets/KDAB_bubble_white.png"), parent)
: MyWidget(QStringLiteral(":/assets/triangles.png"),
QStringLiteral(":/assets/KDAB_bubble_white.png"), parent)
{
}
@@ -97,7 +112,8 @@ void MyWidget2::paintEvent(QPaintEvent *)
}
MyWidget3::MyWidget3(MyWidget::QWidget *parent)
: MyWidget(QStringLiteral(":/assets/base.png"), QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"), parent)
: MyWidget(QStringLiteral(":/assets/base.png"),
QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"), parent)
, m_triangle(QImage(QStringLiteral(":/assets/tri.png")))
{
}
@@ -109,7 +125,8 @@ void MyWidget3::paintEvent(QPaintEvent *)
p.drawImage(m_background.rect(), m_background, m_background.rect());
const QRect targetRect = QRect({ width() - m_triangle.width(), height() - m_triangle.height() }, m_triangle.size());
const QRect targetRect =
QRect({ width() - m_triangle.width(), height() - m_triangle.height() }, m_triangle.size());
p.drawImage(targetRect, m_triangle, m_triangle.rect());
drawLogo(p);

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -24,12 +24,19 @@ class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(const QString &backgroundFile, const QString &logoFile, QWidget *parent = nullptr);
explicit MyWidget(const QString &backgroundFile, const QString &logoFile,
QWidget *parent = nullptr);
~MyWidget();
// These two are just for demonstrating how to block the close event, if desired
void blockCloseEvent();
void closeEvent(QCloseEvent *) override;
protected:
void drawLogo(QPainter &);
QImage m_background;
QImage m_logo;
bool m_blocksCloseEvent = false;
};
class MyWidget1 : public MyWidget
@@ -37,8 +44,9 @@ class MyWidget1 : public MyWidget
Q_OBJECT
public:
explicit MyWidget1(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
void paintEvent(QPaintEvent *) override;
};
class MyWidget2 : public MyWidget
@@ -46,8 +54,9 @@ class MyWidget2 : public MyWidget
Q_OBJECT
public:
explicit MyWidget2(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
void paintEvent(QPaintEvent *) override;
};
class MyWidget3 : public MyWidget
@@ -55,8 +64,9 @@ class MyWidget3 : public MyWidget
Q_OBJECT
public:
explicit MyWidget3(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
void paintEvent(QPaintEvent *) override;
QImage m_triangle;
};

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,15 +11,19 @@
#include "MyWidget.h"
#include "MyMainWindow.h"
#include "MyFrameworkWidgetFactory.h"
#include "MyViewFactory.h"
#include <kddockwidgets/Config.h>
#include <kddockwidgets/ViewFactory.h>
#include <kddockwidgets/controllers/DockWidget.h>
#include <QStyleFactory>
#include <QApplication>
#include <QDebug>
#include <QCommandLineParser>
#include <algorithm>
// clazy:excludeall=qstring-allocations
using namespace KDDockWidgets;
@@ -31,10 +35,11 @@ int main(int argc, char **argv)
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif
QApplication app(argc, argv);
app.setOrganizationName(QStringLiteral("KDAB"));
app.setApplicationName(QStringLiteral("Test app"));
KDDockWidgets::initFrontend(KDDockWidgets::FrontendType::QtWidgets);
QCommandLineParser parser;
parser.setApplicationDescription("KDDockWidgets example application");
parser.addHelpOption();
@@ -42,112 +47,195 @@ int main(int argc, char **argv)
// Fusion looks better in general, but feel free to change
qApp->setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
QCommandLineOption customStyle("p", QCoreApplication::translate("main", "Shows how to style framework internals via FrameworkWidgetFactory"));
QCommandLineOption customStyle(
"p",
QCoreApplication::translate("main",
"Shows how to style framework internals via ViewFactory"));
parser.addOption(customStyle);
QCommandLineOption reorderTabsOption("r", QCoreApplication::translate("main", "Support re-ordering tabs with mouse"));
QCommandLineOption reorderTabsOption(
"r", QCoreApplication::translate("main", "Support re-ordering tabs with mouse"));
parser.addOption(reorderTabsOption);
QCommandLineOption noTitleBars("t", QCoreApplication::translate("main", "Hide titlebars when tabs are visible"));
QCommandLineOption noTitleBars(
"t", QCoreApplication::translate("main", "Hide titlebars when tabs are visible"));
parser.addOption(noTitleBars);
QCommandLineOption alwaysTitleBarWhenFloating("q", QCoreApplication::translate("main", "Don't hide title bars if floating, even if Flag_HideTitleBarWhenTabsVisible is specified."));
QCommandLineOption alwaysTitleBarWhenFloating(
"q",
QCoreApplication::translate("main",
"Don't hide title bars if floating, even if "
"Flag_HideTitleBarWhenTabsVisible is specified."));
parser.addOption(alwaysTitleBarWhenFloating);
QCommandLineOption alwaysTabs("z", QCoreApplication::translate("main", "Show tabs even if there's only one"));
QCommandLineOption alwaysTabs(
"z", QCoreApplication::translate("main", "Show tabs even if there's only one"));
parser.addOption(alwaysTabs);
QCommandLineOption lazyResizeOption("l", QCoreApplication::translate("main", "Use lazy resize"));
QCommandLineOption lazyResizeOption("l",
QCoreApplication::translate("main", "Use lazy resize"));
parser.addOption(lazyResizeOption);
QCommandLineOption multipleMainWindows("m", QCoreApplication::translate("main", "Shows two multiple main windows"));
QCommandLineOption multipleMainWindows(
"m", QCoreApplication::translate("main", "Shows two multiple main windows"));
parser.addOption(multipleMainWindows);
QCommandLineOption incompatibleMainWindows("i", QCoreApplication::translate("main", "Only usable with -m. Make the two main windows incompatible with each other. (Illustrates (MainWindowBase::setAffinityName))"));
QCommandLineOption incompatibleMainWindows(
"i",
QCoreApplication::translate(
"main",
"Only usable with -m. Make the two main windows incompatible with each other. "
"(Illustrates (MainWindowBase::setAffinityName))"));
parser.addOption(incompatibleMainWindows);
QCommandLineOption tabsHaveCloseButton("c", QCoreApplication::translate("main", "Tabs have a close button"));
QCommandLineOption tabsHaveCloseButton(
"c", QCoreApplication::translate("main", "Tabs have a close button"));
parser.addOption(tabsHaveCloseButton);
QCommandLineOption nonClosableDockWidget("n", QCoreApplication::translate("main", "DockWidget #0 will be non-closable"));
QCommandLineOption nonClosableDockWidget(
"n", QCoreApplication::translate("main", "DockWidget #0 will be non-closable"));
parser.addOption(nonClosableDockWidget);
QCommandLineOption relativeRestore("s", QCoreApplication::translate("main", "Don't restore main window geometry, restore dock widgets in relative sizes"));
QCommandLineOption relativeRestore(
"s",
QCoreApplication::translate(
"main", "Don't restore main window geometry, restore dock widgets in relative sizes"));
parser.addOption(relativeRestore);
QCommandLineOption doubleClickMaximize("x", QCoreApplication::translate("main", "Double clicking a title bar will maximize a floating window"));
QCommandLineOption doubleClickMaximize(
"x",
QCoreApplication::translate("main",
"Double clicking a title bar will maximize a floating window"));
parser.addOption(doubleClickMaximize);
QCommandLineOption nonDockable("d", QCoreApplication::translate("main", "DockWidget #9 will be non-dockable"));
QCommandLineOption nonDockable(
"d", QCoreApplication::translate("main", "DockWidget #9 will be non-dockable"));
parser.addOption(nonDockable);
QCommandLineOption maximizeButtonOption("b", QCoreApplication::translate("main", "Floating dockWidgets have maximize/restore buttons instead of float/dock button"));
QCommandLineOption maximizeButtonOption(
"b",
QCoreApplication::translate(
"main",
"Floating dockWidgets have maximize/restore buttons instead of float/dock button"));
parser.addOption(maximizeButtonOption);
QCommandLineOption minimizeButtonOption("k", QCoreApplication::translate("main", "Floating dockWidgets have a minimize button. Implies not being an utility window (~Qt::Tool)"));
QCommandLineOption minimizeButtonOption(
"k",
QCoreApplication::translate("main",
"Floating dockWidgets have a minimize button. Implies not "
"being an utility window (~Qt::Tool)"));
parser.addOption(minimizeButtonOption);
QCommandLineOption segmentedIndicators("y", QCoreApplication::translate("main", "Use segmented indicators instead of classical"));
QCommandLineOption segmentedIndicators(
"y", QCoreApplication::translate("main", "Use segmented indicators instead of classical"));
parser.addOption(segmentedIndicators);
QCommandLineOption noUtilityWindows("u", QCoreApplication::translate("main", "FloatingWindows will be normal windows instead of utility windows"));
QCommandLineOption noUtilityWindows(
"u",
QCoreApplication::translate(
"main", "FloatingWindows will be normal windows instead of utility windows"));
parser.addOption(noUtilityWindows);
QCommandLineOption keepAbove("o", QCoreApplication::translate("main", "FloatingWindows will have Qt::WindowStaysOnTopHint. Implies not being an utility window (try it with -u too)"));
QCommandLineOption keepAbove(
"o",
QCoreApplication::translate("main",
"FloatingWindows will have Qt::WindowStaysOnTopHint. Implies "
"not being an utility window (try it with -u too)"));
parser.addOption(keepAbove);
parser.addPositionalArgument("savedlayout", QCoreApplication::translate("main", "loads the specified json file at startup"));
parser.addPositionalArgument(
"savedlayout",
QCoreApplication::translate("main", "loads the specified json file at startup"));
#ifdef KDDOCKWIDGETS_SUPPORTS_NESTED_MAINWINDOWS
QCommandLineOption dockableMainWindows("j", QCoreApplication::translate("main", "Allow main windows to be docked inside other main windows"));
QCommandLineOption dockableMainWindows(
"j",
QCoreApplication::translate("main",
"Allow main windows to be docked inside other main windows"));
parser.addOption(dockableMainWindows);
#endif
QCommandLineOption maxSizeOption("g", QCoreApplication::translate("main", "Make dock #8 have a max-size of 200x200."));
QCommandLineOption maxSizeOption(
"g", QCoreApplication::translate("main", "Make dock #8 have a max-size of 200x200."));
parser.addOption(maxSizeOption);
QCommandLineOption centralFrame("f", QCoreApplication::translate("main", "Persistent central frame"));
QCommandLineOption centralFrame(
"f", QCoreApplication::translate("main", "Persistent central group"));
QCommandLineOption autoHideSupport("w", QCoreApplication::translate("main", "Enables auto-hide/minimization to side-bar support"));
QCommandLineOption autoHideSupport(
"w",
QCoreApplication::translate("main", "Enables auto-hide/minimization to side-bar support"));
parser.addOption(autoHideSupport);
QCommandLineOption closeOnlyCurrentTab("close-only-current-tab",
QCoreApplication::translate("main", "The title bar's close button will only close the current tab instead of all. Illustrates using Config::Flag_CloseOnlyCurrentTab"));
QCommandLineOption closeOnlyCurrentTab(
"close-only-current-tab",
QCoreApplication::translate(
"main",
"The title bar's close button will only close the current tab instead of all. "
"Illustrates using Config::Flag_CloseOnlyCurrentTab"));
parser.addOption(closeOnlyCurrentTab);
QCommandLineOption dontCloseBeforeRestore("dont-close-widget-before-restore", //krazy:exclude=spelling
QCoreApplication::translate("main", "DockWidget #5 won't be closed before a restore. Illustrates LayoutSaverOption::DontCloseBeforeRestore"));
QCommandLineOption dontCloseBeforeRestore(
"dont-close-widget-before-restore", // krazy:exclude=spelling
QCoreApplication::translate("main",
"DockWidget #5 won't be closed before a restore. Illustrates "
"LayoutSaverOption::DontCloseBeforeRestore"));
parser.addOption(dontCloseBeforeRestore);
QCommandLineOption showButtonsInTabBarIfTitleBarHidden("show-buttons-in-tabbar-if-titlebar-hidden",
QCoreApplication::translate("main", "If we're not using title bars we'll still show the close and float button in the tab bar"));
QCommandLineOption blockCloseEvent(
"block-close-event",
QCoreApplication::translate("main", "DockWidget #0 will block close events"));
parser.addOption(blockCloseEvent);
QCommandLineOption showButtonsInTabBarIfTitleBarHidden(
"show-buttons-in-tabbar-if-titlebar-hidden",
QCoreApplication::translate("main",
"If we're not using title bars we'll still show the close and "
"float button in the tab bar"));
parser.addOption(showButtonsInTabBarIfTitleBarHidden);
QCommandLineOption centralWidget("central-widget",
QCoreApplication::translate("main", "The main window will have a non-detachable central widget"));
QCommandLineOption centralWidget(
"central-widget",
QCoreApplication::translate("main",
"The main window will have a non-detachable central widget"));
parser.addOption(centralWidget);
QCommandLineOption ctxtMenuOnTabs("allow-switch-tabs-via-menu",
QCoreApplication::translate("main", "Allow switching tabs via context menu in tabs area"));
QCommandLineOption ctxtMenuOnTabs(
"allow-switch-tabs-via-menu",
QCoreApplication::translate("main", "Allow switching tabs via context menu in tabs area"));
parser.addOption(ctxtMenuOnTabs);
QCommandLineOption hideCertainDockingIndicators(
"hide-certain-docking-indicators",
QCoreApplication::translate("main",
"Illustrates usage of Config::setDropIndicatorAllowedFunc()"));
parser.addOption(hideCertainDockingIndicators);
#if defined(DOCKS_DEVELOPER_MODE)
parser.addOption(centralFrame);
QCommandLineOption noQtTool("no-qttool", QCoreApplication::translate("main", "(internal) Don't use Qt::Tool"));
QCommandLineOption noParentForFloating("no-parent-for-floating", QCoreApplication::translate("main", "(internal) FloatingWindows won't have a parent"));
QCommandLineOption nativeTitleBar("native-title-bar", QCoreApplication::translate("main", "(internal) FloatingWindows a native title bar"));
QCommandLineOption noDropIndicators("no-drop-indicators", QCoreApplication::translate("main", "(internal) Don't use any drop indicators"));
QCommandLineOption noQtTool(
"no-qttool", QCoreApplication::translate("main", "(internal) Don't use Qt::Tool"));
QCommandLineOption noParentForFloating(
"no-parent-for-floating",
QCoreApplication::translate("main", "(internal) FloatingWindows won't have a parent"));
QCommandLineOption nativeTitleBar(
"native-title-bar",
QCoreApplication::translate("main", "(internal) FloatingWindows a native title bar"));
QCommandLineOption noDropIndicators(
"no-drop-indicators",
QCoreApplication::translate("main", "(internal) Don't use any drop indicators"));
parser.addOption(noQtTool);
parser.addOption(noParentForFloating);
parser.addOption(nativeTitleBar);
parser.addOption(noDropIndicators);
# if defined(Q_OS_WIN)
QCommandLineOption noAeroSnap("no-aero-snap", QCoreApplication::translate("main", "(internal) Disable AeroSnap"));
#if defined(Q_OS_WIN)
QCommandLineOption noAeroSnap(
"no-aero-snap", QCoreApplication::translate("main", "(internal) Disable AeroSnap"));
parser.addOption(noAeroSnap);
# endif
#endif
#else
Q_UNUSED(centralFrame)
#endif
@@ -155,22 +243,22 @@ int main(int argc, char **argv)
parser.process(app);
if (parser.isSet(customStyle)) {
Config::self().setFrameworkWidgetFactory(new CustomWidgetFactory()); // Sets our custom factory
Config::self().setViewFactory(new CustomWidgetFactory()); // Sets our custom factory
// Increase the separator size, just for demo
Config::self().setSeparatorThickness(10);
}
if (parser.isSet(segmentedIndicators))
KDDockWidgets::DefaultWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::Segmented;
KDDockWidgets::ViewFactory::s_dropIndicatorType =
KDDockWidgets::DropIndicatorType::Segmented;
MainWindowOptions options = MainWindowOption_None;
auto flags = KDDockWidgets::Config::self().flags();
#if defined(DOCKS_DEVELOPER_MODE)
auto internalFlags = KDDockWidgets::Config::self().internalFlags();
options = parser.isSet(centralFrame) ? MainWindowOption_HasCentralFrame
: MainWindowOption_None;
options = parser.isSet(centralFrame) ? MainWindowOption_HasCentralFrame : MainWindowOption_None;
if (parser.isSet(centralWidget))
options |= MainWindowOption_HasCentralWidget;
@@ -188,12 +276,12 @@ int main(int argc, char **argv)
flags |= KDDockWidgets::Config::Flag_NativeTitleBar;
if (parser.isSet(noDropIndicators))
KDDockWidgets::DefaultWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::None;
KDDockWidgets::ViewFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::None;
# if defined(Q_OS_WIN)
#if defined(Q_OS_WIN)
if (parser.isSet(noAeroSnap))
internalFlags |= KDDockWidgets::Config::InternalFlag_NoAeroSnap;
# endif
#endif
Config::self().setInternalFlags(internalFlags);
#endif
@@ -218,13 +306,16 @@ int main(int argc, char **argv)
if (parser.isSet(alwaysTitleBarWhenFloating)) {
flags |= KDDockWidgets::Config::Flag_AlwaysTitleBarWhenFloating;
if (!(flags & KDDockWidgets::Config::Flag_HideTitleBarWhenTabsVisible)) {
qWarning() << "Flag_AlwaysTitleBarWhenFloating is unneeded if Flag_HideTitleBarWhenTabsVisible isn't used."
qWarning() << "Flag_AlwaysTitleBarWhenFloating is unneeded if "
"Flag_HideTitleBarWhenTabsVisible isn't used."
<< "As floating windows already have title bars by default.";
}
}
if (parser.isSet(customStyle) || qEnvironmentVariableIsSet("KDDW_DEBUG_FOCUS"))
flags |= KDDockWidgets::Config::Flag_TitleBarIsFocusable; // also showing title bar focus with -p, just to not introduce another switch
flags |= KDDockWidgets::Config::Flag_TitleBarIsFocusable; // also showing title bar focus
// with -p, just to not introduce
// another switch
if (parser.isSet(reorderTabsOption))
flags |= KDDockWidgets::Config::Flag_AllowReorderTabs;
@@ -253,6 +344,29 @@ int main(int argc, char **argv)
return 1;
}
if (parser.isSet(hideCertainDockingIndicators)) {
// Here we exemplify adding a restriction to "Dock Widget 8"
// Dock widget 8 will only be allowed to dock to the outer areas
auto func = [](KDDockWidgets::DropLocation location,
const KDDockWidgets::Controllers::DockWidget::List &source,
const KDDockWidgets::Controllers::DockWidget::List &target,
Controllers::DropArea *) {
Q_UNUSED(target); // When dragging into a tab, 'target' would have the list of already
// tabbed dock widgets
const bool isDraggingDW8 =
std::find_if(source.cbegin(), source.cend(),
[](KDDockWidgets::Controllers::DockWidget *dw) {
return dw->uniqueName() == QLatin1String("DockWidget #8");
})
!= source.cend();
return (location & KDDockWidgets::DropLocation_Outter) || !isDraggingDW8;
};
KDDockWidgets::Config::self().setDropIndicatorAllowedFunc(func);
}
KDDockWidgets::Config::self().setFlags(flags);
const bool nonClosableDockWidget0 = parser.isSet(nonClosableDockWidget);
@@ -261,6 +375,7 @@ int main(int argc, char **argv)
const bool maxSizeForDockWidget8 = parser.isSet(maxSizeOption);
const bool dontCloseDockWidget5BeforeRestore = parser.isSet(dontCloseBeforeRestore);
const bool usesMainWindowsWithAffinity = parser.isSet(multipleMainWindows);
const bool dock0BlocksCloseEvent = parser.isSet(blockCloseEvent);
#ifdef KDDOCKWIDGETS_SUPPORTS_NESTED_MAINWINDOWS
const bool usesDockableMainWindows = parser.isSet(dockableMainWindows);
@@ -270,26 +385,28 @@ int main(int argc, char **argv)
MyMainWindow mainWindow(QStringLiteral("MyMainWindow"), options, nonClosableDockWidget0,
nonDockableDockWidget9, restoreIsRelative, maxSizeForDockWidget8,
dontCloseDockWidget5BeforeRestore);
dontCloseDockWidget5BeforeRestore, dock0BlocksCloseEvent);
mainWindow.setWindowTitle("Main Window 1");
mainWindow.resize(1200, 1200);
mainWindow.show();
if (usesMainWindowsWithAffinity) {
if (usesDockableMainWindows) {
qWarning() << "MainWindows with affinity option is incompatible with Dockable Main Windows option";
qWarning() << "MainWindows with affinity option is incompatible with Dockable Main "
"Windows option";
return 1;
}
// By default a dock widget can dock into any main window.
// By setting an affinity name we can prevent that. Dock widgets of different affinities are incompatible.
const QString affinity = parser.isSet(incompatibleMainWindows) ? QStringLiteral("affinity1")
: QString();
// By setting an affinity name we can prevent that. Dock widgets of different affinities are
// incompatible.
const QString affinity =
parser.isSet(incompatibleMainWindows) ? QStringLiteral("affinity1") : QString();
auto mainWindow2 = new MyMainWindow(QStringLiteral("MyMainWindow-2"), options,
nonClosableDockWidget0, nonDockableDockWidget9,
restoreIsRelative, maxSizeForDockWidget8,
dontCloseDockWidget5BeforeRestore, affinity);
auto mainWindow2 =
new MyMainWindow(QStringLiteral("MyMainWindow-2"), options, nonClosableDockWidget0,
nonDockableDockWidget9, restoreIsRelative, maxSizeForDockWidget8,
dontCloseDockWidget5BeforeRestore, dock0BlocksCloseEvent, affinity);
if (affinity.isEmpty())
mainWindow2->setWindowTitle("Main Window 2");
else
@@ -298,22 +415,22 @@ int main(int argc, char **argv)
mainWindow2->resize(1200, 1200);
mainWindow2->show();
} else if (usesDockableMainWindows) {
auto mainWindowDockWidget = new DockWidget(QStringLiteral("MyMainWindow-2-DW"));
auto mainWindowDockWidget =
new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyMainWindow-2-DW"));
const QString affinity = QStringLiteral("Inner-DockWidgets-2");
auto dockableMainWindow = new MyMainWindow(QStringLiteral("MyMainWindow-2"), options,
false, false, restoreIsRelative, false,
false, affinity);
auto dockableMainWindow =
new MyMainWindow(QStringLiteral("MyMainWindow-2"), options, false, false,
restoreIsRelative, false, false, false, affinity);
dockableMainWindow->setAffinities({ affinity });
dockableMainWindow->setStyleSheet(QStringLiteral("background: yellow"));
dockableMainWindow->setWindowTitle("Dockable Main Window");
dockableMainWindow->show();
mainWindowDockWidget->setWidget(dockableMainWindow);
mainWindowDockWidget->show();
mainWindowDockWidget->resize(800, 800);
mainWindowDockWidget->open();
mainWindowDockWidget->resize(QSize(800, 800));
}
const QStringList args = parser.positionalArguments();

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -10,28 +10,23 @@
#
cmake_minimum_required(VERSION 3.7)
project(kddockwidgets_minimal_mdi_example)
project(qtwidgets_mdi)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
if(NOT TARGET kddockwidgets)
# This will look for Qt, do find_package yourself manually before
# if you want to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
# This will look for Qt, do find_package yourself manually before if you want
# to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
endif()
set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc)
add_executable(kddockwidgets_minimal_mdi_example
main.cpp
../dockwidgets/MyWidget.cpp
${RESOURCES_EXAMPLE_SRC}
)
# Just to reuse MyWidget.h
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/)
target_link_libraries(kddockwidgets_minimal_mdi_example
PRIVATE
KDAB::kddockwidgets
)
add_executable(qtwidgets_mdi main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC})
target_link_libraries(qtwidgets_mdi PRIVATE KDAB::kddockwidgets)

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,8 +11,8 @@
#include "MyWidget.h"
#include <kddockwidgets/views/MainWindowMDI_qtwidgets.h>
#include <kddockwidgets/DockWidget.h>
#include <kddockwidgets/MainWindowMDI.h>
#include <QStyleFactory>
#include <QApplication>
@@ -30,29 +30,34 @@ int main(int argc, char **argv)
app.setOrganizationName(QStringLiteral("KDAB"));
app.setApplicationName(QStringLiteral("Test app"));
KDDockWidgets::initFrontend(KDDockWidgets::FrontendType::QtWidgets);
// Fusion looks better in general, but feel free to change
qApp->setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
// # 1. Create our main window
KDDockWidgets::MainWindowMDI mainWindow(QStringLiteral("MyMainWindow"));
KDDockWidgets::Views::MainWindowMDI_qtwidgets mainWindow(QStringLiteral("MyMainWindow"));
mainWindow.setWindowTitle("Main Window");
mainWindow.resize(1200, 1200);
mainWindow.show();
// # 2. Create a dock widget, it needs a unique name
auto dock1 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock1"));
auto dock1 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock1"));
auto widget1 = new MyWidget1();
dock1->setWidget(widget1);
auto dock2 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock2"));
auto dock2 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock2"));
auto widget2 = new MyWidget2();
dock2->setWidget(widget2);
auto dock3 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock3"));
auto dock3 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock3"));
auto widget3 = new MyWidget3();
dock3->setWidget(widget3);
// Just for my personal testing: Overkill to add an option
// widget3->blockCloseEvent();
// # 3. Dock them
mainWindow.addDockWidget(dock1, QPoint(10, 10));
mainWindow.addDockWidget(dock2, QPoint(50, 50));

View File

@@ -0,0 +1,32 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
#
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
cmake_minimum_required(VERSION 3.7)
project(qtwidgets_mdi_with_docking)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
if(NOT TARGET kddockwidgets)
# This will look for Qt, do find_package yourself manually before if you want
# to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
endif()
set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc)
# Just to reuse MyWidget.h
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/)
add_executable(qtwidgets_mdi_with_docking main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC})
target_link_libraries(qtwidgets_mdi_with_docking PRIVATE KDAB::kddockwidgets)

View File

@@ -0,0 +1,101 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "MyWidget.h"
#include <kddockwidgets/MainWindow.h>
#include <kddockwidgets/DockWidget.h>
#include <kddockwidgets/views/MDIArea_qtwidgets.h>
#include <QStyleFactory>
#include <QApplication>
#include <QCommandLineParser>
// clazy:excludeall=qstring-allocations
int main(int argc, char **argv)
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif
QApplication app(argc, argv);
app.setOrganizationName(QStringLiteral("KDAB"));
app.setApplicationName(QStringLiteral("App supporting both docking and a MDI area"));
KDDockWidgets::initFrontend(KDDockWidgets::FrontendType::QtWidgets);
QCommandLineParser parser;
parser.setApplicationDescription("KDDockWidgets MDI mixed with normal docking");
parser.addHelpOption();
QCommandLineOption nestedDocking(
"n",
QCoreApplication::translate(
"main", "The MDI dock widgets will serve as drop areas, allowing for further nesting"));
parser.addOption(nestedDocking);
parser.process(app);
// Fusion looks better in general, but feel free to change
qApp->setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
// # 1. Create our main window
KDDockWidgets::Views::MainWindow_qtwidgets mainWindow(
QStringLiteral("MyMainWindow"), KDDockWidgets::MainWindowOption_HasCentralWidget);
mainWindow.setWindowTitle("Main Window");
mainWindow.resize(1600, 1200);
mainWindow.show();
// # 2. Create a dock widget, it needs a unique name
auto dock1 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock1"));
auto widget1 = new MyWidget1();
dock1->setWidget(widget1);
auto dock2 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock2"));
auto widget2 = new MyWidget2();
dock2->setWidget(widget2);
// # 3. Dock them
mainWindow.addDockWidget(dock1, KDDockWidgets::Location_OnLeft, nullptr,
KDDockWidgets::InitialOption(QSize(300, 0)));
mainWindow.addDockWidget(dock2, KDDockWidgets::Location_OnBottom, nullptr,
KDDockWidgets::InitialOption(QSize(0, 300)));
KDDockWidgets::DockWidgetOptions options = {};
if (parser.isSet(nestedDocking)) {
options |= KDDockWidgets::DockWidgetOption_MDINestable;
}
// 4. Create our MDI widgets, which will go into the MDI area
auto mdiWidget1 =
new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MDI widget1"), options);
mdiWidget1->setWidget(new MyWidget1());
auto mdiWidget2 =
new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MDI widget2"), options);
mdiWidget2->setWidget(new MyWidget2());
auto mdiWidget3 =
new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MDI widget3"), options);
mdiWidget3->setWidget(new MyWidget3());
auto mdiArea = new KDDockWidgets::Views::MDIArea_qtwidgets();
mainWindow.setPersistentCentralWidget(mdiArea);
mdiArea->addDockWidget(mdiWidget1, QPoint(10, 10));
mdiArea->addDockWidget(mdiWidget2, QPoint(50, 50));
mdiArea->addDockWidget(mdiWidget3, QPoint(110, 110));
return app.exec();
}

View File

@@ -1,116 +0,0 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "MyWidget.h"
#include <QPainter>
#include <QDebug>
#include <QFile>
#include <QLineEdit>
static QHash<QString, QImage> s_images; /// clazy:exclude=non-pod-global-static
MyWidget::MyWidget(const QString &backgroundFile, const QString &logoFile, QWidget *parent)
: QWidget(parent)
{
if (!backgroundFile.isEmpty()) {
auto it = s_images.find(backgroundFile);
if (it == s_images.end())
it = s_images.insert(backgroundFile, QImage(backgroundFile));
m_background = it.value();
}
if (!logoFile.isEmpty()) {
auto it = s_images.find(logoFile);
if (it == s_images.end())
it = s_images.insert(logoFile, QImage(logoFile));
m_logo = it.value();
}
setFocusPolicy(Qt::StrongFocus);
#if 0
// Uncomment to show focus propagation working
new QLineEdit(this);
auto l2 = new QLineEdit(this);
l2->move(0, 100);
setFocusProxy(l2);
#endif
}
MyWidget::~MyWidget()
{
}
void MyWidget::drawLogo(QPainter &p)
{
if (m_logo.isNull())
return;
const qreal ratio = m_logo.height() / (m_logo.width() * 1.0);
const int maxWidth = int(0.80 * size().width());
const int maxHeight = int(0.80 * size().height());
const int proposedHeight = int(maxWidth * ratio);
const int width = proposedHeight <= maxHeight ? maxWidth
: int(maxHeight / ratio);
const int height = int(width * ratio);
QRect targetLogoRect(0,0, width, height);
targetLogoRect.moveCenter(rect().center() + QPoint(0, -int(size().height() * 0.00)));
p.drawImage(targetLogoRect, m_logo, m_logo.rect());
}
MyWidget1::MyWidget1(MyWidget::QWidget *parent)
: MyWidget(QStringLiteral(":/assets/triangles.png"), QStringLiteral(":/assets/KDAB_bubble_white.png"), parent)
{
}
void MyWidget1::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.fillRect(rect(), QColor(0xCC, 0xCC, 0xCC));
p.drawImage(m_background.rect(), m_background, m_background.rect());
drawLogo(p);
}
MyWidget2::MyWidget2(MyWidget::QWidget *parent)
: MyWidget(QString(), QStringLiteral(":/assets/KDAB_bubble_blue.png"), parent)
{
}
void MyWidget2::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.fillRect(rect(), Qt::white);
drawLogo(p);
}
MyWidget3::MyWidget3(MyWidget::QWidget *parent)
: MyWidget(QStringLiteral(":/assets/base.png"), QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"), parent)
, m_triangle(QImage(QStringLiteral(":/assets/tri.png")))
{
}
void MyWidget3::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.fillRect(rect(), QColor(0xD5, 0xD5, 0xD5));
p.drawImage(m_background.rect(), m_background, m_background.rect());
const QRect targetRect = QRect({ width() - m_triangle.width(), height() - m_triangle.height() }, m_triangle.size());
p.drawImage(targetRect, m_triangle, m_triangle.rect());
drawLogo(p);
}

View File

@@ -1,65 +0,0 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#ifndef EXAMPLEDOCKABLEWIDGET_H
#define EXAMPLEDOCKABLEWIDGET_H
#pragma once
#include <QWidget>
QT_BEGIN_NAMESPACE
class QPainter;
QT_END_NAMESPACE
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget() = default;
explicit MyWidget(const QString &backgroundFile, const QString &logoFile, QWidget *parent = nullptr);
~MyWidget();
protected:
void drawLogo(QPainter &);
QImage m_background;
QImage m_logo;
};
class MyWidget1 : public MyWidget
{
Q_OBJECT
public:
explicit MyWidget1(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
};
class MyWidget2 : public MyWidget
{
Q_OBJECT
public:
explicit MyWidget2(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
};
class MyWidget3 : public MyWidget
{
Q_OBJECT
public:
explicit MyWidget3(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
QImage m_triangle;
};
#endif

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -10,28 +10,20 @@
#
cmake_minimum_required(VERSION 3.7)
project(kddockwidgets_minimal_example)
project(qtwidgets_minimal)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
if(NOT TARGET kddockwidgets)
# This will look for Qt, do find_package yourself manually before
# if you want to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
# This will look for Qt, do find_package yourself manually before if you want
# to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
endif()
set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc)
add_executable(kddockwidgets_minimal_example
main.cpp
../dockwidgets/MyWidget.cpp
${RESOURCES_EXAMPLE_SRC}
)
target_link_libraries(kddockwidgets_minimal_example
PRIVATE
KDAB::kddockwidgets
)
add_executable(qtwidgets_minimal main.cpp MyWidget.cpp ${RESOURCES_EXAMPLE_SRC})
target_link_libraries(qtwidgets_minimal PRIVATE KDAB::kddockwidgets)

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -61,17 +61,17 @@ void MyWidget::drawLogo(QPainter &p)
const int proposedHeight = int(maxWidth * ratio);
const int width = proposedHeight <= maxHeight ? maxWidth
: int(maxHeight / ratio);
const int width = proposedHeight <= maxHeight ? maxWidth : int(maxHeight / ratio);
const int height = int(width * ratio);
QRect targetLogoRect(0,0, width, height);
QRect targetLogoRect(0, 0, width, height);
targetLogoRect.moveCenter(rect().center() + QPoint(0, -int(size().height() * 0.00)));
p.drawImage(targetLogoRect, m_logo, m_logo.rect());
}
MyWidget1::MyWidget1(MyWidget::QWidget *parent)
: MyWidget(QStringLiteral(":/assets/triangles.png"), QStringLiteral(":/assets/KDAB_bubble_white.png"), parent)
: MyWidget(QStringLiteral(":/assets/triangles.png"),
QStringLiteral(":/assets/KDAB_bubble_white.png"), parent)
{
}
@@ -97,7 +97,8 @@ void MyWidget2::paintEvent(QPaintEvent *)
}
MyWidget3::MyWidget3(MyWidget::QWidget *parent)
: MyWidget(QStringLiteral(":/assets/base.png"), QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"), parent)
: MyWidget(QStringLiteral(":/assets/base.png"),
QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"), parent)
, m_triangle(QImage(QStringLiteral(":/assets/tri.png")))
{
}
@@ -109,7 +110,8 @@ void MyWidget3::paintEvent(QPaintEvent *)
p.drawImage(m_background.rect(), m_background, m_background.rect());
const QRect targetRect = QRect({ width() - m_triangle.width(), height() - m_triangle.height() }, m_triangle.size());
const QRect targetRect =
QRect({ width() - m_triangle.width(), height() - m_triangle.height() }, m_triangle.size());
p.drawImage(targetRect, m_triangle, m_triangle.rect());
drawLogo(p);

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -25,8 +25,10 @@ class MyWidget : public QWidget
Q_OBJECT
public:
MyWidget() = default;
explicit MyWidget(const QString &backgroundFile, const QString &logoFile, QWidget *parent = nullptr);
explicit MyWidget(const QString &backgroundFile, const QString &logoFile,
QWidget *parent = nullptr);
~MyWidget();
protected:
void drawLogo(QPainter &);
QImage m_background;
@@ -38,8 +40,9 @@ class MyWidget1 : public MyWidget
Q_OBJECT
public:
explicit MyWidget1(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
void paintEvent(QPaintEvent *) override;
};
class MyWidget2 : public MyWidget
@@ -47,8 +50,9 @@ class MyWidget2 : public MyWidget
Q_OBJECT
public:
explicit MyWidget2(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
void paintEvent(QPaintEvent *) override;
};
class MyWidget3 : public MyWidget
@@ -56,8 +60,9 @@ class MyWidget3 : public MyWidget
Q_OBJECT
public:
explicit MyWidget3(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent*) override;
void paintEvent(QPaintEvent *) override;
QImage m_triangle;
};

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,8 +11,8 @@
#include "MyWidget.h"
#include <kddockwidgets/DockWidget.h>
#include <kddockwidgets/MainWindow.h>
#include <kddockwidgets/DockWidget.h>
#include <QStyleFactory>
#include <QApplication>
@@ -28,41 +28,42 @@ int main(int argc, char **argv)
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
#endif
QApplication app(argc, argv);
app.setOrganizationName(QStringLiteral("KDAB"));
app.setApplicationName(QStringLiteral("Test app"));
KDDockWidgets::initFrontend(KDDockWidgets::FrontendType::QtWidgets);
// Fusion looks better in general, but feel free to change
qApp->setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
// # 1. Create our main window
KDDockWidgets::MainWindow mainWindow(QStringLiteral("MyMainWindow"));
KDDockWidgets::Views::MainWindow_qtwidgets mainWindow(QStringLiteral("MyMainWindow"));
mainWindow.setWindowTitle("Main Window");
mainWindow.resize(1200, 1200);
mainWindow.show();
// # 2. Create a dock widget, it needs a unique name
auto dock1 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock1"));
auto dock1 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock1"));
auto widget1 = new MyWidget();
dock1->setWidget(widget1);
auto dock2 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock2"));
auto dock2 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock2"));
auto widget2 = new MyWidget(QStringLiteral(":/assets/base.png"),
QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"));
dock2->setWidget(widget2);
auto dock3 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock3"));
auto dock3 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock3"));
auto widget3 = new MyWidget(QStringLiteral(":/assets/base.png"),
QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"));
dock3->setWidget(widget3);
auto dock4 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock4"));
auto dock4 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock4"));
auto widget4 = new MyWidget(QStringLiteral(":/assets/base.png"),
QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"));
dock4->setWidget(widget4);
auto dock5 = new KDDockWidgets::DockWidget(QStringLiteral("MyDock5"));
auto dock5 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock5"));
auto widget5 = new MyWidget(QStringLiteral(":/assets/base.png"),
QStringLiteral(":/assets/KDAB_bubble_fulcolor.png"));
dock5->setWidget(widget5);
@@ -75,12 +76,12 @@ int main(int argc, char **argv)
mainWindow.addDockWidget(dock3, KDDockWidgets::Location_OnRight, dock2);
// 5. dock4 is docked at the bottom, with 200px height
const QSize preferredSize(QSize(/*ignored*/0, 200));
const QSize preferredSize(QSize(/*ignored*/ 0, 200));
mainWindow.addDockWidget(dock4, KDDockWidgets::Location_OnBottom, nullptr, preferredSize);
// 5. dock5 will be its own top level (floating window)
dock5->show();
dock5->open();
return app.exec();
}

View File

@@ -1,6 +1,6 @@
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -8,10 +8,24 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
add_subdirectory(customtitlebar)
add_subdirectory(dockwidgets)
add_subdirectory(mdi)
set_compiler_flags(qtquick_dockwidgets)
set_target_properties(
qtquick_dockwidgets PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)
set_compiler_flags(kddockwidgets_example_quick)
set_compiler_flags(kddockwidgets_example_mdi_quick)
set_compiler_flags(kddockwidgets_customtitlebar_quick)
add_subdirectory(mdi)
set_compiler_flags(qtquick_mdi)
set_target_properties(qtquick_mdi PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/")
add_subdirectory(customtitlebar)
set_compiler_flags(qtquick_customtitlebar)
set_target_properties(
qtquick_customtitlebar PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)
add_subdirectory(customtabbar)
set_compiler_flags(qtquick_customtabbar)
set_target_properties(
qtquick_customtabbar PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/examples/"
)

View File

@@ -0,0 +1,31 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
#
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
cmake_minimum_required(VERSION 3.7)
project(qtquick_customtabbar)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
if(NOT TARGET kddockwidgets)
# This will look for Qt, do find_package yourself manually before if you want
# to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
endif()
set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc
${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc
)
add_executable(qtquick_customtabbar main.cpp ${RESOURCES_EXAMPLE_SRC})
target_link_libraries(qtquick_customtabbar PRIVATE KDAB::kddockwidgets)

View File

@@ -0,0 +1,36 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
import QtQuick 2.9
Item {
anchors.fill: parent
property alias background: background.source
property alias logo: logo.source
Image {
id: background
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
Image {
id: logo
fillMode: Image.PreserveAspectFit
anchors {
fill: parent
margins: 50
}
}
}
}

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -9,4 +9,10 @@
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "../../DockWidgetBase.h"
import QtQuick 2.9
Guest {
anchors.fill: parent
background: "qrc:/assets/triangles.png"
logo: "qrc:/assets/KDAB_bubble_white.png"
}

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -9,4 +9,9 @@
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "../../FrameworkWidgetFactory.h"
import QtQuick 2.9
Guest {
anchors.fill: parent
logo: "qrc:/assets/KDAB_bubble_blue.png"
}

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -9,4 +9,10 @@
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "../../DockWidget.h"
import QtQuick 2.9
Guest {
anchors.fill: parent
background: "qrc:/assets/base.png"
logo: "qrc:/assets/KDAB_bubble_fulcolor.png"
}

View File

@@ -0,0 +1,84 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
import QtQuick 2.6
// Will be moved to a plugin in the future, if there's enough demand
import "qrc:/kddockwidgets/qtquick/views/qml/" as KDDW
/// Example of a QML Tab Bar that doesn't use QtQuick.Controls, just for demo purposes.
/// Se the comments named "#HERE#" for important things you shouldn't forget.
KDDW.TabBarBase {
id: root
implicitHeight: 30
currentTabIndex: 0
/// #HERE#. This function required in all derived tab bars. It's called by C++;
/// Returns the tab bar (QQuickItem*) at the specified index.
function getTabAtIndex(index) {
return tabBar.children[index];
}
/// #HERE#. This function required in all derived tab bars. It's called by C++;
/// Returns an int, with the index of the tab that's at the specified position.
function getTabIndexAtPosition(globalPoint) {
for (var i = 0; i < tabBar.children.length; ++i) {
var tab = tabBar.children[i];
var localPt = tab.mapFromGlobal(globalPoint.x, globalPoint.y);
if (tab.contains(localPt)) {
return i;
}
}
return -1;
}
Row {
id: tabBar
anchors.fill: parent
spacing: 2
/// ##HERE## The list of tabs is stored in a C++ model. This repeater populates our tab bar
Repeater {
model: root.groupCpp ? root.groupCpp.tabBar.dockWidgetModel : 0
Rectangle {
id: tab
height: parent.height
width: 100
color: "orange"
border.color: "black"
// ##HERE## Illustrating how to have a different style in case the tab is current
border.width: index == root.groupCpp.currentIndex ? 3 : 1
// ##HERE## The index of the tab. This is required in all custom tab bar implementations
// It is be used by "getTabAtIndex()" and "getTabIndexAtPosition()" functions
readonly property int tabIndex: index
Text {
anchors.centerIn: parent
text: title
}
/// ##HERE## Tells the C++ backend that the current tab should change
MouseArea {
anchors.fill: parent
onClicked: {
root.currentTabIndex = index;
}
}
}
}
}
}

View File

@@ -0,0 +1,74 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include <kddockwidgets/Config.h>
#include <kddockwidgets/views/DockWidget_qtquick.h>
#include <kddockwidgets/Platform_qtquick.h>
#include <kddockwidgets/ViewFactory_qtquick.h>
#include <kddockwidgets/private/DockRegistry.h>
#include <kddockwidgets/views/MainWindow_qtquick.h>
#include <QQuickView>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
class CustomViewFactory : public KDDockWidgets::ViewFactory_qtquick
{
public:
~CustomViewFactory() override;
QUrl tabbarFilename() const override
{
return QUrl("qrc:/MyTabBar.qml");
}
};
CustomViewFactory::~CustomViewFactory() = default;
int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN
QGuiApplication::setAttribute(Qt::AA_UseOpenGLES);
#endif
QGuiApplication app(argc, argv);
KDDockWidgets::initFrontend(KDDockWidgets::FrontendType::QtQuick);
auto &config = KDDockWidgets::Config::self();
auto flags = config.flags();
config.setFlags(flags);
config.setViewFactory(new CustomViewFactory());
QQmlApplicationEngine appEngine;
KDDockWidgets::Platform_qtquick::instance()->setQmlEngine(&appEngine);
appEngine.load((QUrl("qrc:/main.qml")));
auto dw1 = new KDDockWidgets::Views::DockWidget_qtquick("Dock #1");
dw1->setGuestItem(QStringLiteral("qrc:/Guest1.qml"));
auto dw2 = new KDDockWidgets::Views::DockWidget_qtquick("Dock #2");
dw2->setGuestItem(QStringLiteral("qrc:/Guest2.qml"));
auto dw3 = new KDDockWidgets::Views::DockWidget_qtquick("Dock #3");
dw3->setGuestItem(QStringLiteral("qrc:/Guest3.qml"));
// Access the main area we created in QML with DockingArea {}
auto mainArea = KDDockWidgets::DockRegistry::self()->mainDockingAreas().constFirst();
mainArea->addDockWidget(dw1, KDDockWidgets::Location_OnTop);
dw1->addDockWidgetAsTab(dw2);
dw1->addDockWidgetAsTab(dw3);
return app.exec();
}

View File

@@ -0,0 +1,27 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
import QtQuick 2.6
import QtQuick.Controls 2.12
import com.kdab.dockwidgets 2.0 as KDDW
ApplicationWindow {
visible: true
width: 1000
height: 800
KDDW.DockingArea {
id: dockWidgetArea
anchors.fill: parent
uniqueName: "MyMainLayout"
}
}

View File

@@ -0,0 +1,10 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>Guest1.qml</file>
<file>Guest2.qml</file>
<file>Guest3.qml</file>
<file>Guest.qml</file>
<file>MyTabBar.qml</file>
</qresource>
</RCC>

View File

@@ -1,7 +1,7 @@
#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2019-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sergio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -10,28 +10,22 @@
#
cmake_minimum_required(VERSION 3.7)
project(kddockwidgets_customtitlebar_quick)
project(qtquick_customtitlebar)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
if(NOT TARGET kddockwidgets)
# This will look for Qt, do find_package yourself manually before
# if you want to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
# This will look for Qt, do find_package yourself manually before if you want
# to look for a specific Qt version for instance.
find_package(KDDockWidgets REQUIRED)
endif()
set(RESOURCES_EXAMPLE_SRC
${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc
${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc)
add_executable(kddockwidgets_customtitlebar_quick
main.cpp
${RESOURCES_EXAMPLE_SRC}
set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc
${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc
)
target_link_libraries(kddockwidgets_customtitlebar_quick
PRIVATE
KDAB::kddockwidgets
)
add_executable(qtquick_customtitlebar main.cpp ${RESOURCES_EXAMPLE_SRC})
target_link_libraries(qtquick_customtitlebar PRIVATE KDAB::kddockwidgets)

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,8 +11,8 @@
import QtQuick 2.6
// Will be moved to a plugin in the future
import "qrc:/kddockwidgets/private/quick/qml/" as KDDW
// Will be moved to a plugin in the future, if there's enough demand
import "qrc:/kddockwidgets/qtquick/views/qml/" as KDDW
KDDW.TitleBarBase {
id: root

View File

@@ -1,8 +1,8 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company
<info@kdab.com> Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,19 +11,21 @@
#include <kddockwidgets/Config.h>
#include <kddockwidgets/DockWidgetQuick.h>
#include <kddockwidgets/private/DockRegistry_p.h>
#include <kddockwidgets/FrameworkWidgetFactory.h>
#include <kddockwidgets/views/DockWidget_qtquick.h>
#include <kddockwidgets/Platform_qtquick.h>
#include <kddockwidgets/ViewFactory_qtquick.h>
#include <kddockwidgets/private/DockRegistry.h>
#include <kddockwidgets/views/MainWindow_qtquick.h>
#include <QQuickView>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
class CustomFrameworkWidgetFactory : public KDDockWidgets::DefaultWidgetFactory
class CustomViewFactory : public KDDockWidgets::ViewFactory_qtquick
{
public:
~CustomFrameworkWidgetFactory() override;
~CustomViewFactory() override;
QUrl titleBarFilename() const override
{
@@ -31,7 +33,7 @@ public:
}
};
CustomFrameworkWidgetFactory::~CustomFrameworkWidgetFactory() = default;
CustomViewFactory::~CustomViewFactory() = default;
int main(int argc, char *argv[])
{
@@ -39,34 +41,37 @@ int main(int argc, char *argv[])
QGuiApplication::setAttribute(Qt::AA_UseOpenGLES);
#endif
QGuiApplication app(argc, argv);
KDDockWidgets::initFrontend(KDDockWidgets::FrontendType::QtQuick);
auto &config = KDDockWidgets::Config::self();
auto flags = config.flags();
config.setFlags(flags);
config.setFrameworkWidgetFactory(new CustomFrameworkWidgetFactory());
config.setViewFactory(new CustomViewFactory());
QQmlApplicationEngine appEngine;
KDDockWidgets::Config::self().setQmlEngine(&appEngine);
KDDockWidgets::Platform_qtquick::instance()->setQmlEngine(&appEngine);
appEngine.load((QUrl("qrc:/main.qml")));
auto dw1 = new KDDockWidgets::DockWidgetQuick("Dock #1");
auto dw1 = new KDDockWidgets::Views::DockWidget_qtquick("Dock #1");
dw1->setWidget(QStringLiteral("qrc:/Guest1.qml"));
dw1->setGuestItem(QStringLiteral("qrc:/Guest1.qml"));
dw1->resize(QSize(800, 800));
dw1->show();
dw1->open();
auto dw2 = new KDDockWidgets::DockWidgetQuick("Dock #2");
dw2->setWidget(QStringLiteral("qrc:/Guest2.qml"));
auto dw2 = new KDDockWidgets::Views::DockWidget_qtquick("Dock #2");
dw2->setGuestItem(QStringLiteral("qrc:/Guest2.qml"));
dw2->resize(QSize(800, 800));
dw2->show();
dw2->open();
auto dw3 = new KDDockWidgets::DockWidgetQuick("Dock #3");
dw3->setWidget(QStringLiteral("qrc:/Guest3.qml"));
auto dw3 = new KDDockWidgets::Views::DockWidget_qtquick("Dock #3");
dw3->setGuestItem(QStringLiteral("qrc:/Guest3.qml"));
dw1->addDockWidgetToContainingWindow(dw3, KDDockWidgets::Location_OnRight);
KDDockWidgets::MainWindowBase *mainWindow = KDDockWidgets::DockRegistry::self()->mainwindows().constFirst();
mainWindow->addDockWidget(dw2, KDDockWidgets::Location_OnTop);
// Access the main area we created in QML with DockingArea {}
auto mainArea = KDDockWidgets::DockRegistry::self()->mainDockingAreas().constFirst();
mainArea->addDockWidget(dw2, KDDockWidgets::Location_OnTop);
return app.exec();
}

View File

@@ -1,7 +1,7 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sergio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
@@ -11,14 +11,14 @@
import QtQuick 2.6
import QtQuick.Controls 2.12
import com.kdab.dockwidgets 1.0 as KDDW
import com.kdab.dockwidgets 2.0 as KDDW
ApplicationWindow {
visible: true
width: 1000
height: 800
KDDW.MainWindowLayout {
KDDW.DockingArea {
id: dockWidgetArea
anchors.fill: parent

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