aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2016-03-31 10:19:55 +0200
committerDominik Holland <dominik.holland@pelagicore.com>2016-03-31 11:21:33 +0000
commit9b05221285ce2369e1e87e88c86970b943797294 (patch)
tree63a431b9ebc759e1cefe1e9fb1ae64c610ab08bd /plugins
parentd53ea69bc4cbc9c4ae1f0c26db36b5a81d27516b (diff)
Added a ScreenManager plugin and use it in ClusterAndHUD.qml
Currently there is no QML api for selecting which screen a window should use, this is a small helper which makes it possible to do that from QML. The ClusterAndHUD.qml now moves the cluster to the second Screen. This only works if the QPA handles the screens separately, which means in a modern desktop environment the screen will be set for the window, but it won't move there. As before the ClusterAndHUD.qml can only be started on system with a WindowManager running or a system with 2 screens Change-Id: Ia854dd420d72c8349c90b19971c88a27adab7bdf Reviewed-by: Nedim Hadzic <nedim.hadzic@pelagicore.com>
Diffstat (limited to 'plugins')
-rw-r--r--plugins/screenManager/plugin.cpp57
-rw-r--r--plugins/screenManager/qmldir2
-rw-r--r--plugins/screenManager/screenManager.pro30
-rw-r--r--plugins/screenManager/screenmanager.cpp55
-rw-r--r--plugins/screenManager/screenmanager.h54
5 files changed, 198 insertions, 0 deletions
diff --git a/plugins/screenManager/plugin.cpp b/plugins/screenManager/plugin.cpp
new file mode 100644
index 0000000..7b98066
--- /dev/null
+++ b/plugins/screenManager/plugin.cpp
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: http://www.qt.io/ or http://www.pelagicore.com/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL3-PELAGICORE$
+** Commercial License Usage
+** Licensees holding valid commercial Pelagicore Neptune IVI UI
+** licenses may use this file in accordance with the commercial license
+** agreement provided with the Software or, alternatively, in accordance
+** with the terms contained in a written agreement between you and
+** Pelagicore. For licensing terms and conditions, contact us at:
+** http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+#include <QtQml/qqmlextensionplugin.h>
+#include <qqml.h>
+#include "screenmanager.h"
+
+static QObject *screenManagerSingletonFactory(QQmlEngine *engine, QJSEngine *scriptEngine)
+{
+ Q_UNUSED(scriptEngine)
+ Q_UNUSED(engine)
+
+ return new ScreenManager();
+}
+
+class HoundPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")
+public:
+ virtual void registerTypes(const char *uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("com.pelagicore.ScreenManager"));
+ Q_UNUSED(uri);
+
+ qmlRegisterSingletonType<ScreenManager>(uri, 1, 0, "ScreenManager", screenManagerSingletonFactory);
+ }
+};
+
+#include "plugin.moc"
diff --git a/plugins/screenManager/qmldir b/plugins/screenManager/qmldir
new file mode 100644
index 0000000..5472c91
--- /dev/null
+++ b/plugins/screenManager/qmldir
@@ -0,0 +1,2 @@
+module com.pelagicore.ScreenManager
+plugin screenmanagerplugin
diff --git a/plugins/screenManager/screenManager.pro b/plugins/screenManager/screenManager.pro
new file mode 100644
index 0000000..2681be6
--- /dev/null
+++ b/plugins/screenManager/screenManager.pro
@@ -0,0 +1,30 @@
+TEMPLATE = lib
+TARGET = screenmanagerplugin
+QT += qml quick
+CONFIG += qt plugin c++11
+
+TARGET = $$qtLibraryTarget($$TARGET)
+uri = com.pelagicore.ScreenManager
+
+SOURCES += \
+ plugin.cpp \
+ screenmanager.cpp \
+
+HEADERS += \
+ screenmanager.h \
+
+OTHER_FILES = qmldir
+
+!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
+ copy_qmldir.target = $$OUT_PWD/qmldir
+ copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
+ copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
+ QMAKE_EXTRA_TARGETS += copy_qmldir
+ PRE_TARGETDEPS += $$copy_qmldir.target
+}
+
+qmldir.files = qmldir
+installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
+qmldir.path = $$installPath
+target.path = $$installPath
+INSTALLS += target qmldir
diff --git a/plugins/screenManager/screenmanager.cpp b/plugins/screenManager/screenmanager.cpp
new file mode 100644
index 0000000..b993bf8
--- /dev/null
+++ b/plugins/screenManager/screenmanager.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: http://www.qt.io/ or http://www.pelagicore.com/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL3-PELAGICORE$
+** Commercial License Usage
+** Licensees holding valid commercial Pelagicore Neptune IVI UI
+** licenses may use this file in accordance with the commercial license
+** agreement provided with the Software or, alternatively, in accordance
+** with the terms contained in a written agreement between you and
+** Pelagicore. For licensing terms and conditions, contact us at:
+** http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+#include "screenmanager.h"
+#include <QGuiApplication>
+#include <QScreen>
+#include <QDebug>
+
+ScreenManager::ScreenManager(QObject *parent)
+ : QObject(parent)
+{
+ connect(qApp, &QGuiApplication::screenAdded, this, &ScreenManager::availableScreensChanged);
+ connect(qApp, &QGuiApplication::screenAdded, this, &ScreenManager::availableScreensChanged);
+}
+
+void ScreenManager::setScreen(QWindow *window, int screen)
+{
+ if (screen >= 0 && screen < QGuiApplication::screens().count()) {
+ window->setScreen(QGuiApplication::screens().at(screen));
+ } else {
+ qWarning() << "invalid Screen";
+ }
+}
+
+QList<QScreen *> ScreenManager::availableScreens() const
+{
+ return QGuiApplication::screens();
+}
diff --git a/plugins/screenManager/screenmanager.h b/plugins/screenManager/screenmanager.h
new file mode 100644
index 0000000..83094dc
--- /dev/null
+++ b/plugins/screenManager/screenmanager.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Pelagicore AG
+** Contact: http://www.qt.io/ or http://www.pelagicore.com/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL3-PELAGICORE$
+** Commercial License Usage
+** Licensees holding valid commercial Pelagicore Neptune IVI UI
+** licenses may use this file in accordance with the commercial license
+** agreement provided with the Software or, alternatively, in accordance
+** with the terms contained in a written agreement between you and
+** Pelagicore. For licensing terms and conditions, contact us at:
+** http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+#ifndef SCREENMANAGER_H
+#define SCREENMANAGER_H
+
+#include <QtCore/QObject>
+#include <QWindow>
+
+class ScreenManager : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QList<QScreen*> availableScreens READ availableScreens NOTIFY availableScreensChanged)
+
+public:
+ explicit ScreenManager(QObject *parent = 0);
+
+ Q_INVOKABLE int screenCount() const;
+ Q_INVOKABLE void setScreen(QWindow * window, int screen);
+ QList<QScreen*> availableScreens() const;
+
+signals:
+ void availableScreensChanged();
+};
+
+#endif // SCREENMANAGER_H