on xenial help sign in
updated mock
a70a372Nick Dedekind
tests/mocks/Unity/Screens/plugin.cpp+2
@@ -33,6 +33,8 @@ void UnityScreensPlugin::registerTypes(const char* uri)
33 Q_ASSERT(QLatin1String(uri) == QLatin1String("Unity.Screens"));
33 Q_ASSERT(QLatin1String(uri) == QLatin1String("Unity.Screens"));
34
34
35 qRegisterMetaType<QScreen*>("QScreen*");
35 qRegisterMetaType<QScreen*>("QScreen*");
36+ qRegisterMetaType<ScreenMode*>("ScreenMode*");
37+ qmlRegisterUncreatableType<ScreenMode>(uri, 0, 1, "ScreenMode", "ScreenMode is not creatable.");
36
38
37 qmlRegisterSingletonType<Screens>(uri, 0, 1, "Screens", screensSingleton);
39 qmlRegisterSingletonType<Screens>(uri, 0, 1, "Screens", screensSingleton);
38 qmlRegisterType<ScreenWindow>(uri, 0, 1, "ScreenWindow");
40 qmlRegisterType<ScreenWindow>(uri, 0, 1, "ScreenWindow");
tests/mocks/Unity/Screens/screens.cpp+39−37
@@ -18,11 +18,8 @@
18
18
19// Qt
19// Qt
20#include <QGuiApplication>
20#include <QGuiApplication>
21−#include <QScreen>
22#include <QDebug>
21#include <QDebug>
23
22
24−Q_DECLARE_METATYPE(QScreen*)
25−
26Screens::Screens(QObject *parent) :
23Screens::Screens(QObject *parent) :
27 QAbstractListModel(parent)
24 QAbstractListModel(parent)
28{
25{
@@ -32,13 +29,18 @@ Screens::Screens(QObject *parent) :
32 QPoint lastPoint(0,0);
29 QPoint lastPoint(0,0);
33 for (int i = 0; i < screenCount; ++i) {
30 for (int i = 0; i < screenCount; ++i) {
34 auto screen = new Screen();
31 auto screen = new Screen();
35− screen->enabled = i == 0;
32+ screen->m_active = i == 0;
36− screen->name = QString("Monitor %1").arg(i);
33+ screen->m_name = QString("Monitor %1").arg(i);
37− screen->sizes = { QSize(640,480), QSize(1024,748), QSize(1280,1024), QSize(1440,900), QSize(1920,1080) };
34+ screen->m_position = QPoint(lastPoint.x(), lastPoint.y());
38− screen->geometry = QRect(lastPoint.x(), lastPoint.y(), 1024, 786 );
35+ screen->m_sizes.append(new ScreenMode(50, QSize(640,480)));
36+ screen->m_sizes.append(new ScreenMode(60, QSize(1280,1024)));
37+ screen->m_sizes.append(new ScreenMode(60, QSize(1440,900)));
38+ screen->m_sizes.append(new ScreenMode(60, QSize(1920,1080)));
39+ screen->m_currentModeIndex = 3;
40+ screen->m_physicalSize = QSize(300,200);
39 m_screenList.append(screen);
41 m_screenList.append(screen);
40
42
41− lastPoint.rx() += screen->geometry.width();
43+ lastPoint.rx() += screen->m_sizes[screen->m_currentModeIndex]->size.width();
42 }
44 }
43}
45}
44
46
@@ -52,13 +54,6 @@ QHash<int, QByteArray> Screens::roleNames() const
52{
54{
53 QHash<int, QByteArray> roles;
55 QHash<int, QByteArray> roles;
54 roles[ScreenRole] = "screen";
56 roles[ScreenRole] = "screen";
55− roles[OutputTypeRole] = "outputType";
56− roles[EnabledRole] = "enabled";
57− roles[NameRole] = "name";
58− roles[ScaleRole] = "scale";
59− roles[FormFactorRole] = "formFactor";
60− roles[GeometryRole] = "geometry";
61− roles[SizesRole] = "sizes";
62 return roles;
57 return roles;
63}
58}
64
59
@@ -70,28 +65,7 @@ QVariant Screens::data(const QModelIndex &index, int role) const
70
65
71 switch(role) {
66 switch(role) {
72 case ScreenRole:
67 case ScreenRole:
73− return QVariant::fromValue(m_screenList.at(index.row())->qScreen);
68+ return QVariant::fromValue(m_screenList.at(index.row()));
74− case OutputTypeRole:
75− return m_screenList.at(index.row())->outputTypes;
76− case EnabledRole:
77− return m_screenList.at(index.row())->enabled;
78− case NameRole:
79− return m_screenList.at(index.row())->name;
80− case ScaleRole:
81− return m_screenList.at(index.row())->scale;
82− case FormFactorRole:
83− return m_screenList.at(index.row())->formFactor;
84− case GeometryRole:
85− return m_screenList.at(index.row())->geometry;
86− case SizesRole:
87− {
88− QVariantList sizes;
89− auto availableSizes = m_screenList.at(index.row())->sizes;
90− Q_FOREACH(auto size, availableSizes) {
91− sizes.append(QVariant(size));
92− }
93− return sizes;
94− }
95 }
69 }
96
70
97 return QVariant();
71 return QVariant();
@@ -109,4 +83,32 @@ int Screens::count() const
109
83
110void Screens::activateScreen(int)
84void Screens::activateScreen(int)
111{
85{
86+ qWarning("Not Implemented");
87+}
88+
89+Screen::Screen(QObject* parent)
90+ : QObject(parent)
91+{
92+}
93+
94+Screen::~Screen()
95+{
96+ qDeleteAll(m_sizes);
97+ m_sizes.clear();
98+}
99+
100+QQmlListProperty<ScreenMode> Screen::availableModes()
101+{
102+ return QQmlListProperty<ScreenMode>(this, m_sizes);
103+}
104+
105+Screen *Screen::beginConfiguration()
106+{
107+ qWarning("Not Implemented");
108+ return nullptr;
109+}
110+
111+void Screen::applyConfiguration()
112+{
113+ qWarning("Not Implemented");
112}
114}
tests/mocks/Unity/Screens/screens.h+65−9
@@ -19,6 +19,7 @@
19
19
20#include <QAbstractListModel>
20#include <QAbstractListModel>
21#include <QScreen>
21#include <QScreen>
22+#include <QQmlListProperty>
22
23
23class Screen;
24class Screen;
24
25
@@ -90,17 +91,72 @@ private:
90 QList<Screen *> m_screenList;
91 QList<Screen *> m_screenList;
91};
92};
92
93
93−class Screen
94+class ScreenMode : public QObject
94{
95{
96+ Q_OBJECT
97+ Q_PROPERTY(qreal refreshRate MEMBER refreshRate CONSTANT)
98+ Q_PROPERTY(QSize size MEMBER size CONSTANT)
99+public:
100+ ScreenMode() {}
101+ ScreenMode(qreal refreshRate, QSize size):refreshRate(refreshRate),size(size) {}
102+ ScreenMode(const ScreenMode& other)
103+ : QObject(nullptr),
104+ refreshRate{other.refreshRate},size{other.size}
105+ {}
106+
107+ qreal refreshRate;
108+ QSize size;
109+};
110+
111+class Screen : public QObject
112+{
113+ Q_OBJECT
114+
115+ Q_PROPERTY(bool active MEMBER m_active NOTIFY activeChanged)
116+
117+ Q_PROPERTY(bool used MEMBER m_used NOTIFY usedChanged)
118+ Q_PROPERTY(QString name MEMBER m_name NOTIFY nameChanged)
119+ Q_PROPERTY(Screens::OutputTypes outputType MEMBER m_outputType NOTIFY outputTypeChanged)
120+ Q_PROPERTY(float scale MEMBER m_scale NOTIFY scaleChanged)
121+ Q_PROPERTY(Screens::FormFactor formFactor MEMBER m_formFactor NOTIFY formFactorChanged)
122+ Q_PROPERTY(QPoint position MEMBER m_position NOTIFY positionChanged)
123+ Q_PROPERTY(uint currentModeIndex MEMBER m_currentModeIndex NOTIFY currentModeIndexChanged)
124+ Q_PROPERTY(QQmlListProperty<ScreenMode> availableModes READ availableModes NOTIFY availableModesChanged)
125+ Q_PROPERTY(QSizeF physicalSize MEMBER m_physicalSize NOTIFY physicalSizeChanged)
95public:
126public:
127+ Screen(QObject* parent = 0);
128+ ~Screen();
129+
130+ QQmlListProperty<ScreenMode> availableModes();
131+
132+ Q_INVOKABLE Screen* beginConfiguration();
133+ Q_INVOKABLE void applyConfiguration();
134+
135+Q_SIGNALS:
136+ void activeChanged();
137+ void usedChanged();
138+ void nameChanged();
139+ void outputTypeChanged();
140+ void scaleChanged();
141+ void formFactorChanged();
142+ void positionChanged();
143+ void currentModeIndexChanged();
144+ void availableModesChanged();
145+ void physicalSizeChanged();
146+
147+public:
148+ bool m_active{false};
149+ bool m_used{true};
150+ QString m_name;
96− Screens::OutputTypes outputTypes = Screens::Unknown;
151+ Screens::OutputTypes m_outputType{Screens::Unknown};
97− QScreen *qScreen = nullptr;
98− bool enabled = false;
99− QString name = QString();
100− float scale = 1.0;
152+ float m_scale{1.0};
101− Screens::FormFactor formFactor = Screens::FormFactorMonitor;
153+ Screens::FormFactor m_formFactor{Screens::FormFactorMonitor};
102− QRect geometry;
154+ QPoint m_position;
103− QList<QSize> sizes;
155+ uint m_currentModeIndex{0};
156+ QList<ScreenMode*> m_sizes;
157+ QSizeF m_physicalSize;
104};
158};
105
159
160+Q_DECLARE_METATYPE(ScreenMode)
161+
106#endif // SCREENS_H
162#endif // SCREENS_H
tests/mocks/Unity/Screens/screenwindow.cpp+7−4
@@ -21,12 +21,15 @@ ScreenWindow::ScreenWindow(QWindow *parent)
21{
21{
22}
22}
23
23
24−QScreen *ScreenWindow::screen() const
24+Screen *ScreenWindow::screenWrapper() const
25{
25{
26− return QQuickWindow::screen();
26+ return m_screen.data();
27}
27}
28
28
29−void ScreenWindow::setScreen(QScreen *screen)
29+void ScreenWindow::setScreenWrapper(Screen *screen)
30{
30{
31− QQuickWindow::setScreen(screen);
31+ if (m_screen != screen) {
32+ m_screen = screen;
33+ Q_EMIT screenWrapperChanged();
34+ }
32}
35}
tests/mocks/Unity/Screens/screenwindow.h+10−4
@@ -18,19 +18,25 @@
18#define SCREENWINDOW_H
18#define SCREENWINDOW_H
19
19
20#include <QQuickWindow>
20#include <QQuickWindow>
21+#include <QPointer>
22+
23+#include "screens.h"
21
24
22class ScreenWindow : public QQuickWindow
25class ScreenWindow : public QQuickWindow
23{
26{
24 Q_OBJECT
27 Q_OBJECT
25− Q_PROPERTY(QScreen *screen READ screen WRITE setScreen NOTIFY screenChanged)
28+ Q_PROPERTY(Screen *screen READ screenWrapper WRITE setScreenWrapper NOTIFY screenWrapperChanged)
26public:
29public:
27 ScreenWindow(QWindow *parent = 0);
30 ScreenWindow(QWindow *parent = 0);
28
31
29− QScreen *screen() const;
32+ Screen *screenWrapper() const;
30− void setScreen(QScreen *screen);
33+ void setScreenWrapper(Screen *screen);
31
34
32Q_SIGNALS:
35Q_SIGNALS:
33− void screenChanged(QScreen *screen);
36+ void screenWrapperChanged();
37+
38+private:
39+ QPointer<Screen> m_screen;
34};
40};
35
41
36#endif // SCREENWINDOW_H
42#endif // SCREENWINDOW_H