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 };