File indexing completed on 2024-05-19 05:35:55
0001 /* 0002 SPDX-FileCopyrightText: 2016 Eike Hein <hein.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #pragma once 0007 0008 #include <config-X11.h> 0009 0010 #include <QAbstractListModel> 0011 #include <QQmlParserStatus> 0012 #include <memory> 0013 #include <qwindowdefs.h> 0014 0015 #if HAVE_X11 0016 #include <QtGui/private/qtx11extras_p.h> 0017 #include <netwm.h> 0018 #endif 0019 0020 class QMimeData; 0021 0022 class PagerModel : public QAbstractListModel, public QQmlParserStatus 0023 { 0024 Q_OBJECT 0025 0026 Q_INTERFACES(QQmlParserStatus) 0027 0028 Q_PROPERTY(int count READ rowCount NOTIFY countChanged) 0029 Q_PROPERTY(PagerType pagerType READ pagerType WRITE setPagerType NOTIFY pagerTypeChanged) 0030 Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) 0031 Q_PROPERTY(bool shouldShowPager READ shouldShowPager NOTIFY shouldShowPagerChanged) 0032 Q_PROPERTY(bool showDesktop READ showDesktop WRITE setShowDesktop NOTIFY showDesktopChanged) 0033 Q_PROPERTY(bool showOnlyCurrentScreen READ showOnlyCurrentScreen WRITE setShowOnlyCurrentScreen NOTIFY showOnlyCurrentScreenChanged) 0034 Q_PROPERTY(QRect screenGeometry READ screenGeometry WRITE setScreenGeometry NOTIFY screenGeometryChanged) 0035 Q_PROPERTY(int currentPage READ currentPage NOTIFY currentPageChanged) 0036 Q_PROPERTY(int layoutRows READ layoutRows NOTIFY layoutRowsChanged) 0037 Q_PROPERTY(QSize pagerItemSize READ pagerItemSize NOTIFY pagerItemSizeChanged) 0038 0039 public: 0040 enum PagerType { 0041 VirtualDesktops = 0, 0042 Activities, 0043 }; 0044 Q_ENUM(PagerType) 0045 0046 enum AdditionalRoles { 0047 TasksModel = Qt::UserRole + 1, 0048 }; 0049 Q_ENUM(AdditionalRoles) 0050 0051 explicit PagerModel(QObject *parent = nullptr); 0052 ~PagerModel() override; 0053 0054 QHash<int, QByteArray> roleNames() const override; 0055 0056 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0057 0058 QVariant data(const QModelIndex &index, int role) const override; 0059 0060 PagerType pagerType() const; 0061 void setPagerType(PagerType type); 0062 0063 bool enabled() const; 0064 void setEnabled(bool enabled); 0065 0066 bool shouldShowPager() const; 0067 0068 bool showDesktop() const; 0069 void setShowDesktop(bool show); 0070 0071 bool showOnlyCurrentScreen() const; 0072 void setShowOnlyCurrentScreen(bool show); 0073 0074 QRect screenGeometry() const; 0075 void setScreenGeometry(const QRect &geometry); 0076 0077 int currentPage() const; 0078 0079 int layoutRows() const; 0080 QSize pagerItemSize() const; 0081 0082 QList<QVariant> stackingOrder(const QModelIndex &window) const; 0083 0084 Q_INVOKABLE void refresh(); 0085 0086 Q_INVOKABLE void moveWindow(const QModelIndex &window, 0087 double x, 0088 double y, 0089 const QVariant &targetItemId, 0090 const QVariant &sourceItemId, 0091 qreal widthScaleFactor, 0092 qreal heightScaleFactor); 0093 Q_INVOKABLE void changePage(int page); 0094 Q_INVOKABLE void drop(QMimeData *mimeData, int modifiers, const QVariant &itemId); 0095 Q_INVOKABLE void addDesktop(); 0096 Q_INVOKABLE void removeDesktop(); 0097 0098 void classBegin() override; 0099 void componentComplete() override; 0100 0101 Q_SIGNALS: 0102 void countChanged() const; 0103 void pagerTypeChanged() const; 0104 void enabledChanged() const; 0105 void shouldShowPagerChanged() const; 0106 void showDesktopChanged() const; 0107 void showOnlyCurrentScreenChanged() const; 0108 void screenGeometryChanged() const; 0109 void currentPageChanged() const; 0110 void layoutRowsChanged() const; 0111 void pagerItemSizeChanged() const; 0112 0113 private Q_SLOTS: 0114 void computePagerItemSize(); 0115 0116 private: 0117 class Private; 0118 std::unique_ptr<Private> d; 0119 };