1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-10-07 01:37:08 +02:00

Add dynamic screen changes

This commit is contained in:
kelteseth 2018-02-28 17:24:52 +01:00
parent 2efec7bdae
commit 529e961df2
3 changed files with 37 additions and 10 deletions

View File

@ -64,6 +64,7 @@ int main(int argc, char* argv[])
QCoreApplication::setApplicationName("ScreenPlay");
QCoreApplication::setApplicationVersion("0.1.0");
app.setWindowIcon(QIcon(":/assets/icons/favicon.ico"));
bool steamErrorRestart = false;
@ -81,7 +82,7 @@ int main(int argc, char* argv[])
GlobalNavigationHelper gnh;
InstalledListModel installedListModel;
MonitorListModel monitorListModel;
MonitorListModel monitorListModel(&app);
PackageFileHandler packageFileHandler;
ProfileListModel profileListModel;
SteamWorkshopListModel steamWorkshopListModel;
@ -127,6 +128,7 @@ int main(int argc, char* argv[])
QQmlApplicationEngine mainWindowEngine;
mainWindowEngine.rootContext()->setContextProperty("globalNavigationHelper", &gnh);
mainWindowEngine.rootContext()->setContextProperty("installedListFilter", &installedListFilter);
mainWindowEngine.rootContext()->setContextProperty("workshopListModel", &steamWorkshopListModel);

View File

@ -1,9 +1,12 @@
#include "monitorlistmodel.h"
MonitorListModel::MonitorListModel(QObject* parent)
MonitorListModel::MonitorListModel(QGuiApplication* guiapp, QObject* parent)
: QAbstractListModel(parent)
{
loadMonitors();
m_qGuiApplication = guiapp;
connect(m_qGuiApplication, &QGuiApplication::screenAdded, this, &MonitorListModel::screenAdded);
connect(m_qGuiApplication, &QGuiApplication::screenRemoved, this, &MonitorListModel::screenRemoved);
}
QHash<int, QByteArray> MonitorListModel::roleNames() const
@ -139,9 +142,6 @@ void MonitorListModel::loadMonitors()
qDebug() << offsetX << offsetY;
beginInsertRows(QModelIndex(), 0, QApplication::screens().count());
for (int i = 0; i < QApplication::screens().count(); i++) {
QScreen* screen = QApplication::screens().at(i);
@ -151,10 +151,10 @@ void MonitorListModel::loadMonitors()
screen->model(),
screen->name(),
screen->size(),
QRect(screen->availableGeometry().x() + offsetX , screen->availableGeometry().y() + offsetY , screen->geometry().width(), screen->geometry().height()),
QRect(screen->availableGeometry().x() + offsetX, screen->availableGeometry().y() + offsetY, screen->geometry().width(), screen->geometry().height()),
// More convenient for the user if the first monitor == 1
i + 1,
QRect(screen->availableVirtualGeometry().x() , screen->availableVirtualGeometry().y() , screen->availableVirtualGeometry().width(), screen->availableVirtualGeometry().height()),
QRect(screen->availableVirtualGeometry().x(), screen->availableVirtualGeometry().y(), screen->availableVirtualGeometry().width(), screen->availableVirtualGeometry().height()),
QRect(screen->geometry().x() + offsetX, screen->geometry().y() + offsetY, screen->geometry().width(), screen->geometry().height()),
screen));
}
@ -178,11 +178,31 @@ bool MonitorListModel::getMonitorListItemAt(int position, Monitor* monitor)
}
}
void MonitorListModel::screenAdded(QScreen* screen)
{
reset();
loadMonitors();
}
void MonitorListModel::screenRemoved(QScreen* screen)
{
reset();
loadMonitors();
}
void MonitorListModel::reset()
{
beginResetModel();
m_monitorList.clear();
m_monitorList.squeeze();
endResetModel();
}
Monitor::Monitor()
{
}
Monitor::Monitor(QString manufacturer, QString model, QString name, QSize size, QRect availableGeometry, int number, QRect availableVirtualGeometry, QRect geometry, QScreen *screen)
Monitor::Monitor(QString manufacturer, QString model, QString name, QSize size, QRect availableGeometry, int number, QRect availableVirtualGeometry, QRect geometry, QScreen* screen)
{
m_screen = screen;

View File

@ -8,7 +8,7 @@
#include <QScreen>
#include <QDebug>
#include <QApplication>
#include <QGuiApplication>
class Monitor;
@ -18,7 +18,7 @@ class MonitorListModel : public QAbstractListModel
public:
explicit MonitorListModel(QObject *parent = nullptr);
explicit MonitorListModel(QGuiApplication *guiapp, QObject *parent = nullptr);
QHash<int, QByteArray> roleNames() const override;
Q_INVOKABLE QRect getAbsoluteDesktopSize();
@ -64,9 +64,14 @@ public:
bool getMonitorListItemAt(int position, Monitor *monitor);
void screenAdded(QScreen *screen);
void screenRemoved(QScreen *screen);
void reset();
private:
QVector<Monitor> m_monitorList;
QGuiApplication* m_qGuiApplication;
signals:
void monitorReloadCompleted();