summaryrefslogtreecommitdiffstats
path: root/Swift
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2016-08-19 08:47:54 (GMT)
committerTobias Markmann <tm@ayena.de>2016-08-19 08:47:54 (GMT)
commit1a12b42c291784bc097487c4f4533df9efaded11 (patch)
treed027ab5d4071c86c97ffae21fa26199a2374697f /Swift
parenta9599ff4edfdc0186b2f5ae3bd22f25cdeb686d1 (diff)
downloadswift-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
Diffstat (limited to 'Swift')
-rw-r--r--Swift/QtUI/QtTabWidget.cpp23
-rw-r--r--Swift/QtUI/QtTabWidget.h6
-rw-r--r--Swift/QtUI/Trellis/QtDNDTabBar.h3
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();