on xenial help sign in
updated mock
commita70a37206b8211deb389414efaee30e320ec1ca2 authorNick Dedekind <nick.dedekind@canonical.com> dateFri 3 Feb 2017, 15:16 (10 years ago) parent4816066
5 files changed+123−54
tests/mocks/Unity/Screens/plugin.cpp+2 tests/mocks/Unity/Screens/screens.cpp+39−37 tests/mocks/Unity/Screens/screens.h+65−9 tests/mocks/Unity/Screens/screenwindow.cpp+7−4 tests/mocks/Unity/Screens/screenwindow.h+10−4
tests/mocks/Unity/Screens/plugin.cpp+2
@@ -33,6 +33,8 @@ void UnityScreensPlugin::registerTypes(const char* uri)
3333 Q_ASSERT(QLatin1String(uri) == QLatin1String("Unity.Screens"));
3434
3535 qRegisterMetaType<QScreen*>("QScreen*");
36+ qRegisterMetaType<ScreenMode*>("ScreenMode*");
37+ qmlRegisterUncreatableType<ScreenMode>(uri, 0, 1, "ScreenMode", "ScreenMode is not creatable.");
3638
3739 qmlRegisterSingletonType<Screens>(uri, 0, 1, "Screens", screensSingleton);
3840 qmlRegisterType<ScreenWindow>(uri, 0, 1, "ScreenWindow");
tests/mocks/Unity/Screens/screens.cpp+39−37
@@ -18,11 +18,8 @@
1818
1919// Qt
2020#include <QGuiApplication>
21−#include <QScreen>
2221#include <QDebug>
2322
24−Q_DECLARE_METATYPE(QScreen*)
25−
2623Screens::Screens(QObject *parent) :
2724 QAbstractListModel(parent)
2825{
@@ -32,13 +29,18 @@ Screens::Screens(QObject *parent) :
3229 QPoint lastPoint(0,0);
3330 for (int i = 0; i < screenCount; ++i) {
3431 auto screen = new Screen();
35− screen->enabled = i == 0;
36− screen->name = QString("Monitor %1").arg(i);
37− screen->sizes = { QSize(640,480), QSize(1024,748), QSize(1280,1024), QSize(1440,900), QSize(1920,1080) };
38− screen->geometry = QRect(lastPoint.x(), lastPoint.y(), 1024, 786 );
32+ screen->m_active = i == 0;
33+ screen->m_name = QString("Monitor %1").arg(i);
34+ screen->m_position = QPoint(lastPoint.x(), lastPoint.y());
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);
3941 m_screenList.append(screen);
4042
41− lastPoint.rx() += screen->geometry.width();
43+ lastPoint.rx() += screen->m_sizes[screen->m_currentModeIndex]->size.width();
4244 }
4345}
4446
@@ -52,13 +54,6 @@ QHash<int, QByteArray> Screens::roleNames() const
5254{
5355 QHash<int, QByteArray> roles;
5456 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";
6257 return roles;
6358}
6459
@@ -70,28 +65,7 @@ QVariant Screens::data(const QModelIndex &index, int role) const
7065
7166 switch(role) {
7267 case ScreenRole:
73− return QVariant::fromValue(m_screenList.at(index.row())->qScreen);
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− }
68+ return QVariant::fromValue(m_screenList.at(index.row()));
9569 }
9670
9771 return QVariant();
@@ -109,4 +83,32 @@ int Screens::count() const
10983
11084void Screens::activateScreen(int)
11185{
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");
112114}
tests/mocks/Unity/Screens/screens.h+65−9
@@ -19,6 +19,7 @@
1919
2020#include <QAbstractListModel>
2121#include <QScreen>
22+#include <QQmlListProperty>
2223
2324class Screen;
2425
@@ -90,17 +91,72 @@ private:
9091 QList<Screen *> m_screenList;
9192};
9293
93−class Screen
94+class ScreenMode : public QObject
9495{
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)
95126public:
96− Screens::OutputTypes outputTypes = Screens::Unknown;
97− QScreen *qScreen = nullptr;
98− bool enabled = false;
99− QString name = QString();
100− float scale = 1.0;
101− Screens::FormFactor formFactor = Screens::FormFactorMonitor;
102− QRect geometry;
103− QList<QSize> sizes;
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;
151+ Screens::OutputTypes m_outputType{Screens::Unknown};
152+ float m_scale{1.0};
153+ Screens::FormFactor m_formFactor{Screens::FormFactorMonitor};
154+ QPoint m_position;
155+ uint m_currentModeIndex{0};
156+ QList<ScreenMode*> m_sizes;
157+ QSizeF m_physicalSize;
104158};
105159
160+Q_DECLARE_METATYPE(ScreenMode)
161+
106162#endif // SCREENS_H
tests/mocks/Unity/Screens/screenwindow.cpp+7−4
@@ -21,12 +21,15 @@ ScreenWindow::ScreenWindow(QWindow *parent)
2121{
2222}
2323
24−QScreen *ScreenWindow::screen() const
24+Screen *ScreenWindow::screenWrapper() const
2525{
26− return QQuickWindow::screen();
26+ return m_screen.data();
2727}
2828
29−void ScreenWindow::setScreen(QScreen *screen)
29+void ScreenWindow::setScreenWrapper(Screen *screen)
3030{
31− QQuickWindow::setScreen(screen);
31+ if (m_screen != screen) {
32+ m_screen = screen;
33+ Q_EMIT screenWrapperChanged();
34+ }
3235}
tests/mocks/Unity/Screens/screenwindow.h+10−4
@@ -18,19 +18,25 @@
1818#define SCREENWINDOW_H
1919
2020#include <QQuickWindow>
21+#include <QPointer>
22+
23+#include "screens.h"
2124
2225class ScreenWindow : public QQuickWindow
2326{
2427 Q_OBJECT
25− Q_PROPERTY(QScreen *screen READ screen WRITE setScreen NOTIFY screenChanged)
28+ Q_PROPERTY(Screen *screen READ screenWrapper WRITE setScreenWrapper NOTIFY screenWrapperChanged)
2629public:
2730 ScreenWindow(QWindow *parent = 0);
2831
29− QScreen *screen() const;
30− void setScreen(QScreen *screen);
32+ Screen *screenWrapper() const;
33+ void setScreenWrapper(Screen *screen);
3134
3235Q_SIGNALS:
33− void screenChanged(QScreen *screen);
36+ void screenWrapperChanged();
37+
38+private:
39+ QPointer<Screen> m_screen;
3440};
3541
3642#endif // SCREENWINDOW_H