diff options
author | Tobias Markmann <tm@ayena.de> | 2016-08-19 08:47:54 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2016-08-19 08:47:54 (GMT) |
commit | 1a12b42c291784bc097487c4f4533df9efaded11 (patch) | |
tree | d027ab5d4071c86c97ffae21fa26199a2374697f | |
parent | a9599ff4edfdc0186b2f5ae3bd22f25cdeb686d1 (diff) | |
download | swift-1a12b42c291784bc097487c4f4533df9efaded11.zip swift-1a12b42c291784bc097487c4f4533df9efaded11.tar.bz2 |
Support dropping tabs on tab widgets
Previously users could only drag and drop tabs on other tab
bars. With this change the user can simply drop the tab on
another tab widgets. This works on all QtTabWidgets that have
a QtDNDTabBar set, regardless of their number of child widgets.
This works by forwarding dragEnverEvent() and dropEvent() calls
on the QtTabWidget to the corresponding QtDNDTabBar.
Tabs dropped on the tab widget instead of the tab bar are
added at the end of the tab bar.
Test-Information:
Tested with Qt 5.5.1 on OS X 10.11.6 and Windows 7.
Change-Id: Ie73e02de24472eab2d20a89c937fb6630b1ef7b8
-rw-r--r-- | Swift/QtUI/QtTabWidget.cpp | 23 | ||||
-rw-r--r-- | Swift/QtUI/QtTabWidget.h | 6 | ||||
-rw-r--r-- | Swift/QtUI/Trellis/QtDNDTabBar.h | 3 |
3 files changed, 31 insertions, 1 deletions
diff --git a/Swift/QtUI/QtTabWidget.cpp b/Swift/QtUI/QtTabWidget.cpp index 9f353d7..cda1847 100644 --- a/Swift/QtUI/QtTabWidget.cpp +++ b/Swift/QtUI/QtTabWidget.cpp @@ -6,6 +6,8 @@ #include <Swift/QtUI/QtTabWidget.h> +#include <Swift/QtUI/Trellis/QtDNDTabBar.h> + namespace Swift { QtTabWidget::QtTabWidget(QWidget* parent) : QTabWidget(parent) { @@ -22,5 +24,26 @@ QTabBar* QtTabWidget::tabBar() { void QtTabWidget::setTabBar(QTabBar* tabBar) { QTabWidget::setTabBar(tabBar); + if (dynamic_cast<QtDNDTabBar*>(tabBar)) { + setAcceptDrops(true); + } + else { + setAcceptDrops(false); + } +} + +void QtTabWidget::dragEnterEvent(QDragEnterEvent* event) { + QtDNDTabBar* dndTabBar = dynamic_cast<QtDNDTabBar*>(tabBar()); + if (dndTabBar) { + dndTabBar->dragEnterEvent(event); + } } + +void QtTabWidget::dropEvent(QDropEvent* event) { + QtDNDTabBar* dndTabBar = dynamic_cast<QtDNDTabBar*>(tabBar()); + if (dndTabBar) { + dndTabBar->dropEvent(event); + } +} + } diff --git a/Swift/QtUI/QtTabWidget.h b/Swift/QtUI/QtTabWidget.h index de1a846..a9d0df8 100644 --- a/Swift/QtUI/QtTabWidget.h +++ b/Swift/QtUI/QtTabWidget.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -17,5 +17,9 @@ namespace Swift { QTabBar* tabBar(); void setTabBar(QTabBar* tabBar); + + protected: + virtual void dragEnterEvent(QDragEnterEvent* event); + virtual void dropEvent(QDropEvent* event); }; } diff --git a/Swift/QtUI/Trellis/QtDNDTabBar.h b/Swift/QtUI/Trellis/QtDNDTabBar.h index 40eb66d..e9b6771 100644 --- a/Swift/QtUI/Trellis/QtDNDTabBar.h +++ b/Swift/QtUI/Trellis/QtDNDTabBar.h @@ -8,6 +8,8 @@ #include <QTabBar> +#include <Swift/QtUI/QtTabWidget.h> + namespace Swift { class QtDNDTabBar : public QTabBar { @@ -22,6 +24,7 @@ class QtDNDTabBar : public QTabBar { virtual QSize sizeHint() const; + friend class QtTabWidget; signals: void onDropSucceeded(); |