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"