File indexing completed on 2025-02-02 05:43:19
0001 /* 0002 This file is part of the Kasten Framework, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2018 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "tabwidget.hpp" 0010 0011 // lib 0012 #include "tabbar.hpp" 0013 // Qt 0014 #include <QMouseEvent> 0015 #include <QDragEnterEvent> 0016 #include <QDragMoveEvent> 0017 0018 namespace Kasten { 0019 0020 TabWidget::TabWidget(QWidget* parent) 0021 : QTabWidget(parent) 0022 { 0023 auto* tabBar = new TabBar(this); 0024 setTabBar(tabBar); 0025 // slightly fragile as the relative pos of the event is not adapted, but currently not used anyway 0026 connect(tabBar, &TabBar::testCanDecode, 0027 this, &TabWidget::testCanDecode); 0028 connect(tabBar, &TabBar::receivedDropEvent, 0029 this, &TabWidget::receivedDropEvent); 0030 connect(tabBar, &TabBar::mouseMiddleClick, 0031 this, &TabWidget::mouseMiddleClick); 0032 connect(tabBar, &TabBar::emptySpaceMouseDoubleClicked, 0033 this, &TabWidget::emptySpaceMouseDoubleClicked); 0034 0035 setTabsClosable(true); 0036 setDocumentMode(true); 0037 setAcceptDrops(true); 0038 } 0039 0040 TabWidget::~TabWidget() = default; 0041 0042 void TabWidget::mouseReleaseEvent(QMouseEvent* event) 0043 { 0044 if (event->button() == Qt::MiddleButton) { 0045 if (count() == 0) { 0046 Q_EMIT mouseMiddleClick(); 0047 event->setAccepted(true); 0048 return; 0049 } 0050 } 0051 0052 QTabWidget::mouseReleaseEvent(event); 0053 } 0054 0055 void TabWidget::mouseDoubleClickEvent(QMouseEvent *event) 0056 { 0057 if ((count() == 0) && (event->button() == Qt::LeftButton)) { 0058 Q_EMIT emptySpaceMouseDoubleClicked(); 0059 event->setAccepted(true); 0060 return; 0061 } 0062 0063 QTabWidget::mouseDoubleClickEvent(event); 0064 } 0065 0066 void TabWidget::dragEnterEvent(QDragEnterEvent* event) 0067 { 0068 if (count() == 0) { 0069 bool accept = false; 0070 // The receivers of the testCanDecode() signal has to adjust 0071 // 'accept' accordingly. 0072 Q_EMIT testCanDecode(event, accept); 0073 event->setAccepted(accept); 0074 return; 0075 } 0076 0077 QTabWidget::dragEnterEvent(event); 0078 } 0079 0080 void TabWidget::dragMoveEvent(QDragMoveEvent* event) 0081 { 0082 if (count() == 0) { 0083 bool accept = false; 0084 // The receivers of the testCanDecode() signal has to adjust 0085 // 'accept' accordingly. 0086 Q_EMIT testCanDecode(event, accept); 0087 0088 event->setAccepted(accept); 0089 return; 0090 } 0091 0092 QTabWidget::dragMoveEvent(event); 0093 } 0094 0095 void TabWidget::dropEvent(QDropEvent* event) 0096 { 0097 if (count() == 0) { 0098 Q_EMIT receivedDropEvent(event); 0099 return; 0100 } 0101 0102 QTabWidget::dropEvent(event); 0103 } 0104 0105 } 0106 0107 #include "moc_tabwidget.cpp"