File indexing completed on 2025-04-27 04:37:43
0001 /* 0002 SPDX-FileCopyrightText: 2009 Tony Murray <murraytony@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef TABBEDVIEWWIDGET_H 0008 #define TABBEDVIEWWIDGET_H 0009 0010 #include <QAbstractItemModel> 0011 #include <QMouseEvent> 0012 #include <QTabWidget> 0013 0014 class TabbedViewWidgetModel : public QAbstractItemModel 0015 { 0016 friend class TabbedViewWidget; 0017 Q_OBJECT 0018 public: 0019 explicit TabbedViewWidgetModel(QTabWidget *modelTarget); 0020 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0021 QModelIndex parent(const QModelIndex &index) const override; 0022 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0023 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0024 Qt::ItemFlags flags(const QModelIndex &index) const override; 0025 bool setData(const QModelIndex &index, const QVariant &value, int role) override; 0026 QVariant data(const QModelIndex &index, int role) const override; 0027 0028 protected: 0029 void emitLayoutAboutToBeChanged(); 0030 void emitLayoutChanged(); 0031 void emitDataChanged(int index); 0032 0033 private: 0034 QTabWidget *m_tabWidget; 0035 }; 0036 0037 class TabbedViewWidget : public QTabWidget 0038 { 0039 Q_OBJECT 0040 public: 0041 explicit TabbedViewWidget(QWidget *parent = nullptr); 0042 ~TabbedViewWidget() override; 0043 TabbedViewWidgetModel *getModel(); 0044 int addTab(QWidget *page, const QString &label); 0045 int addTab(QWidget *page, const QIcon &icon, const QString &label); 0046 int insertTab(int index, QWidget *page, const QString &label); 0047 int insertTab(int index, QWidget *page, const QIcon &icon, const QString &label); 0048 void removeTab(int index); 0049 void removePage(QWidget *page); 0050 void moveTab(int from, int to); 0051 void setTabText(int index, const QString &label); 0052 0053 Q_SIGNALS: 0054 void mouseMiddleClick(int index); 0055 0056 protected: 0057 void mouseDoubleClickEvent(QMouseEvent *event) override; 0058 void mouseReleaseEvent(QMouseEvent *) override; 0059 0060 private: 0061 TabbedViewWidgetModel *m_model; 0062 bool isEmptyTabbarSpace(const QPoint &point) const; 0063 }; 0064 0065 #endif // FULLSCREENWINDOW_H