#pragma once #include "WindowTypes.hpp" #include #include #include class WindowModel : public QAbstractListModel { Q_OBJECT QML_ELEMENT QML_UNCREATABLE("Obtained from WindowService") Q_PROPERTY(int count READ count NOTIFY countChanged) public: enum Roles { WindowIdRole = Qt::UserRole + 1, TitleRole, AppIdRole, WindowClassRole, WorkspaceRole, FocusedRole, FloatingRole, FullscreenRole, XRole, YRole, WidthRole, HeightRole, DisplayNameRole, IconNameRole, MinimizedRole, MaximizedRole, OutputRole }; Q_ENUM(Roles) explicit WindowModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; int count() const; void setWindows(QVector windows); const WindowInfo *windowAt(int row) const; const WindowInfo *windowById(qint64 windowId) const; signals: void countChanged(); private: QVector m_windows; };