17#ifndef LOMIRI_SCREENS_H
18#define LOMIRI_SCREENS_H
20#include <QAbstractListModel>
21#include <QSharedPointer>
32class ScreensConfiguration;
34class Screens :
public QAbstractListModel
37 Q_PROPERTY(
int count READ count NOTIFY countChanged)
38 Q_PROPERTY(QVariant activeScreen READ activeScreen WRITE activateScreen NOTIFY activeScreenChanged)
42 ScreenRole = Qt::UserRole + 1
48 QHash<int, QByteArray> roleNames()
const override;
49 QVariant data(
const QModelIndex &index,
int role = ScreenRole)
const override;
50 int rowCount(
const QModelIndex &parent = QModelIndex())
const override;
52 Q_INVOKABLE
int indexOf(Screen*)
const;
53 Q_INVOKABLE Screen* get(
int index)
const;
56 QVariant activeScreen()
const;
58 const QVector<Screen*>& list()
const {
return m_screens; }
61 void activateScreen(
const QVariant& index);
65 void activeScreenChanged();
67 void screenAdded(Screen* screen);
68 void screenRemoved(Screen* screen);
71 Screens(
const QSharedPointer<qtmir::Screens>& model);
73 QVector<Screen*> m_screens;
74 const QSharedPointer<qtmir::Screens> m_wrapped;
76 friend class ProxyScreens;
79class ConcreteScreens :
public Screens
83 explicit ConcreteScreens(
const QSharedPointer<qtmir::Screens>& model, ScreensConfiguration* config);
86 Q_INVOKABLE ProxyScreens *createProxy();
87 Q_INVOKABLE
void sync(ProxyScreens *proxy);
89 static ConcreteScreens *self();
92 void onScreenAdded(qtmir::Screen *screen);
93 void onScreenRemoved(qtmir::Screen *screen);
96 ScreensConfiguration* m_config;
98 static ConcreteScreens* m_self;
101class ProxyScreens :
public Screens
104 explicit ProxyScreens(Screens*
const screens);
106 void setSyncing(
bool syncing);
107 bool isSyncing()
const {
return m_syncing; }
110 const QPointer<Screens> m_original;