diff options
author | Ken Moore <ken@ixsystems.com> | 2017-10-13 14:00:14 -0400 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2017-10-13 14:00:14 -0400 |
commit | 27992c407e1d67b14c7d20aa378193d5590b1d52 (patch) | |
tree | 0a7b10db476e55a9d1e21bb0a32fdbc542daaf06 /src-qt5 | |
parent | Add the beginnings of the root desktop QML system. Not finished yet. (diff) | |
download | lumina-27992c407e1d67b14c7d20aa378193d5590b1d52.tar.gz lumina-27992c407e1d67b14c7d20aa378193d5590b1d52.tar.bz2 lumina-27992c407e1d67b14c7d20aa378193d5590b1d52.zip |
Another checkpoint commit - almost ready to start running tests with QML for the desktop background/wallpapers
Diffstat (limited to 'src-qt5')
-rw-r--r-- | src-qt5/src-cpp/Desktop.pri | 9 | ||||
-rw-r--r-- | src-qt5/src-cpp/RootDesktopObject.h | 39 | ||||
-rw-r--r-- | src-qt5/src-cpp/ScreenObject.h | 50 | ||||
-rw-r--r-- | src-qt5/src-qml/RootDesktop.qml | 27 | ||||
-rw-r--r-- | src-qt5/src-qml/src-qml.pri | 9 | ||||
-rw-r--r-- | src-qt5/src-qml/src-qml.qrc | 5 | ||||
-rw-r--r-- | src-qt5/src-qml/test/CPUGaugeStyle.qml (renamed from src-qt5/src-qml/CPUGaugeStyle.qml) | 0 | ||||
-rw-r--r-- | src-qt5/src-qml/test/Clock.qml (renamed from src-qt5/src-qml/Clock.qml) | 0 | ||||
-rw-r--r-- | src-qt5/src-qml/test/ListData.h | 41 | ||||
-rw-r--r-- | src-qt5/src-qml/test/ListTest.qml | 19 | ||||
-rw-r--r-- | src-qt5/src-qml/test/test-basic.qml (renamed from src-qt5/src-qml/test-basic.qml) | 0 | ||||
-rw-r--r-- | src-qt5/src-qml/test/test-cpugauge.qml (renamed from src-qt5/src-qml/test-cpugauge.qml) | 0 | ||||
-rw-r--r-- | src-qt5/src-qml/test/testlist.cpp | 37 | ||||
-rw-r--r-- | src-qt5/src-qml/test/testlist.pro | 7 |
14 files changed, 210 insertions, 33 deletions
diff --git a/src-qt5/src-cpp/Desktop.pri b/src-qt5/src-cpp/Desktop.pri new file mode 100644 index 00000000..c7da397d --- /dev/null +++ b/src-qt5/src-cpp/Desktop.pri @@ -0,0 +1,9 @@ + +QT *= gui qml quick + +SOURCES *= RootDesktopObject.cpp + +HEADERS *= RootDesktopObject.h \ + ScreenObject.h + +include(../src-qml/src-qml.pri) diff --git a/src-qt5/src-cpp/RootDesktopObject.h b/src-qt5/src-cpp/RootDesktopObject.h index 08c15fa2..b706bcb6 100644 --- a/src-qt5/src-cpp/RootDesktopObject.h +++ b/src-qt5/src-cpp/RootDesktopObject.h @@ -9,38 +9,7 @@ #ifndef _LUMINA_DESKTOP_ROOT_DESKTOP_OBJECT_H #define _LUMINA_DESKTOP_ROOT_DESKTOP_OBJECT_H -class ScreenObject : public QObject{ - Q_OBJECT - Q_PROPERTY( QString name READ name ) - Q_PROPERTY( QString background READ background NOTIFY backgroundChanged) - Q_PROPERTY( QScreen * screen READ screen) - -private: - QScreen* bg_screen; - QString bg; - -public - ScreenObject(QScreen *scrn, QObject *parent = 0) : QObject(parent){ - bg_screen = scrn; - } - - QString name(){ return bg_screen->name(); } - QString background(){ return bg; } - QScreen* screen(){ return screen; } - -public slots: - void setBackground(QString fileOrColor){ - if(bg!=fileOrColor){ - bg = fileOrColor; - emit backgroundChanged(); - } - } - -signals: - void backgroundChanged(); -}; - - +#include "ScreenObject.h" class RootDesktopObject : public QObject{ Q_OBJECT //Define all the QML Properties here (interface between QML and the C++ methods below) @@ -50,12 +19,18 @@ public: //main contructor/destructor RootDesktopObject(QObject *parent = 0); ~RootDesktopObject(); + + static void RegisterType(){ qmlRegisterType<RootDesktopObject>("Lumina.Backend.RootDesktopObject",2,0, "RootDesktopObject"); + //primary interface to fetch the current instance of the class (so only one is running at any given time) static RootDesktopObject* instance(); //QML Read Functions QList<ScreenObject*> screens(); + //QML Access Functions + Q_INVOKABLE void logout(); + private: QList<ScreenObject*> s_objects; diff --git a/src-qt5/src-cpp/ScreenObject.h b/src-qt5/src-cpp/ScreenObject.h new file mode 100644 index 00000000..49f266c3 --- /dev/null +++ b/src-qt5/src-cpp/ScreenObject.h @@ -0,0 +1,50 @@ +//=========================================== +// Lumina-desktop source code +// Copyright (c) 2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This is the base C++ object that is used to pass information to the QML "RootDesktop" object +//=========================================== +#ifndef _LUMINA_DESKTOP_ROOT_DESKTOP_OBJECT_H +#define _LUMINA_DESKTOP_ROOT_DESKTOP_OBJECT_H + +class ScreenObject : public QObject{ + Q_OBJECT + Q_PROPERTY( QString name READ name ) + Q_PROPERTY( QString background READ background NOTIFY backgroundChanged) + Q_PROPERTY( int x READ x NOTIFY geomChanged) + Q_PROPERTY( int y READ y NOTIFY geomChanged) + Q_PROPERTY( int width READ width NOTIFY geomChanged) + Q_PROPERTY( int height READ height NOTIFY geomChanged) + +private: + QScreen *bg_screen; + QString bg; + +public + ScreenObject(QScreen *scrn, QObject *parent = 0) : QObject(parent){ + bg_screen = scrn; + } + + static void RegisterType(){ qmlRegisterType<RootDesktopObject>("Lumina.Backend.ScreenObject",2,0, "ScreenObject"); + + QString name(){ return bg_screen->name(); } + QString background(){ return bg; } + int x(){ return bg_screen->geometry().x(); } + int y(){ return bg_screen->geometry().y(); } + int width(){ return bg_screen->geometry().width(); } + int height(){ return bg_screen->geometry().height(); } + +public slots: + void setBackground(QString fileOrColor){ + if(bg!=fileOrColor){ + bg = fileOrColor; + emit backgroundChanged(); + } + } + +signals: + void backgroundChanged(); + void geomChanged(); +}; diff --git a/src-qt5/src-qml/RootDesktop.qml b/src-qt5/src-qml/RootDesktop.qml index d4d7fed7..0003366b 100644 --- a/src-qt5/src-qml/RootDesktop.qml +++ b/src-qt5/src-qml/RootDesktop.qml @@ -13,15 +13,40 @@ // RootDesktopObject *rootobj = new RootDesktopObject(); // QQuickView *root = new QQuickView(); // root->setResizeMode(QQuickView::SizeRootObjectToView); -// root->engine()->rootContext->setContextProperty("RootObject", rootobj); +// root->engine()->rootContext()->setContextProperty("RootObject", rootobj); //=========================================== import QtQuick 2.0 import QtQuick.Window 2.2 +import Lumina.Backend.RootDesktopObject 2.0 +import Lumina.Backend.ScreenObject 2.0 + Rectangle { id: RootCanvas color: "black" + //Setup the right-click context menu + MouseArea { + anchors.fill: RootCanvas + acceptedButton: Qt.RightButton + onClicked: { contextMenu.open() } + } + + //Create the context menu itself + Menu { + id: contextMenu + + MenuItem { + test: qtTr("Logout") + indicator: Image{ + asynchronous: true + autoTransform: true + source: "image://theme/system-logout" + } + onTriggered: RootObject.logout() + } + } + //Setup the wallpapers Repeater{ model: RootObject.screens diff --git a/src-qt5/src-qml/src-qml.pri b/src-qt5/src-qml/src-qml.pri new file mode 100644 index 00000000..bcdd439d --- /dev/null +++ b/src-qt5/src-qml/src-qml.pri @@ -0,0 +1,9 @@ +#Show the QML files to lupdate for translation purposes - not for the actual build + +QT *= quick qml + +lupdate_only{ + SOURCES *= RootDesktop.qml +} + +RESOURCES *= src-qml.qrc diff --git a/src-qt5/src-qml/src-qml.qrc b/src-qt5/src-qml/src-qml.qrc new file mode 100644 index 00000000..41f9d54b --- /dev/null +++ b/src-qt5/src-qml/src-qml.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="QML"> + <file alias="RootDesktop">RootDesktop.qml</file> + </qresource> +</RCC> diff --git a/src-qt5/src-qml/CPUGaugeStyle.qml b/src-qt5/src-qml/test/CPUGaugeStyle.qml index 4728d136..4728d136 100644 --- a/src-qt5/src-qml/CPUGaugeStyle.qml +++ b/src-qt5/src-qml/test/CPUGaugeStyle.qml diff --git a/src-qt5/src-qml/Clock.qml b/src-qt5/src-qml/test/Clock.qml index 685346cb..685346cb 100644 --- a/src-qt5/src-qml/Clock.qml +++ b/src-qt5/src-qml/test/Clock.qml diff --git a/src-qt5/src-qml/test/ListData.h b/src-qt5/src-qml/test/ListData.h new file mode 100644 index 00000000..7dd6f6e2 --- /dev/null +++ b/src-qt5/src-qml/test/ListData.h @@ -0,0 +1,41 @@ +#include <QDebug> +#include <QApplication> +#include <QQuickView> +#include <QQmlEngine> +#include <QQmlContext> +#include <QObject> +#include <QStringList> +#include <QTimer> + +class ListData : public QObject{ + Q_OBJECT + Q_PROPERTY(QList<QScreen*> list READ list NOTIFY listchanged); +signals: + void listchanged(); + +private: + QStringList m_list; + //QTimer *timer; + //bool increasing; + +private slots: + void changeList(){ + /*if(m_list.isEmpty()){ increasing = true; } + else if(m_list.length() == 5){ increasing = false; } + if(increasing){ m_list << "Text - "+QString::number( m_list.length()+1 ); } + else{ m_list.takeAt(m_list.count()-1); } + emit listchanged();*/ + } + +public: + ListData() : QObject(){ + /*increasing = true; + timer = new QTimer(this); + timer->setInterval(1000); + timer->setSingleShot(false); + connect(timer, SIGNAL(timeout()), this, SLOT(changeList()) ); + timer->start();*/ + } + + QList<QScreen*> list() { return QApplication::screens(); } //m_list; } +}; diff --git a/src-qt5/src-qml/test/ListTest.qml b/src-qt5/src-qml/test/ListTest.qml new file mode 100644 index 00000000..e6b6ba35 --- /dev/null +++ b/src-qt5/src-qml/test/ListTest.qml @@ -0,0 +1,19 @@ +import QtQuick 2.2 +import QtQuick.Layouts 1.3 + +Rectangle { + id: canvas + color: "black" + + ColumnLayout{ + anchors.fill: canvas + + Repeater{ + model: cppdata.list + Text{ + color: "white" + text: modelData + } + } + } //end row layout +} diff --git a/src-qt5/src-qml/test-basic.qml b/src-qt5/src-qml/test/test-basic.qml index 5d21ae41..5d21ae41 100644 --- a/src-qt5/src-qml/test-basic.qml +++ b/src-qt5/src-qml/test/test-basic.qml diff --git a/src-qt5/src-qml/test-cpugauge.qml b/src-qt5/src-qml/test/test-cpugauge.qml index 1151c435..1151c435 100644 --- a/src-qt5/src-qml/test-cpugauge.qml +++ b/src-qt5/src-qml/test/test-cpugauge.qml diff --git a/src-qt5/src-qml/test/testlist.cpp b/src-qt5/src-qml/test/testlist.cpp new file mode 100644 index 00000000..cc54c501 --- /dev/null +++ b/src-qt5/src-qml/test/testlist.cpp @@ -0,0 +1,37 @@ +#include <QDebug> +#include <QApplication> +#include <QQuickView> +#include <QQmlEngine> +#include <QQmlContext> +#include <QObject> +#include <QStringList> +#include <QTimer> + +#include "ListData.h" + +int main(int argc, char** argv){ + QString QMLFile; + for(int i=1; i<argc; i++){ + if(QFile::exists(argv[i])){ QMLFile = QString(argv[i]); } + } + if(QMLFile.isEmpty()){ + qDebug() << "No QML File provided!"; + qDebug() << " Please provide a valid qml file path as an input argument"; + return 1; + } + QApplication A(argc,argv); + qDebug() << "Creating base widget"; + ListData data; + QQuickView base; + base.setResizeMode(QQuickView::SizeRootObjectToView); + qDebug() << "Resize base widget"; + base.resize(1024,768); + base.engine()->rootContext()->setContextProperty("cppdata", &data); + qDebug() << "Load QML File:" << QMLFile; + base.setSource(QUrl::fromLocalFile(QMLFile)); + qDebug() << "Start Event loop"; + base.show(); + int ret = A.exec(); + qDebug() << " - Finished"; + return ret; +} diff --git a/src-qt5/src-qml/test/testlist.pro b/src-qt5/src-qml/test/testlist.pro new file mode 100644 index 00000000..69c7bc23 --- /dev/null +++ b/src-qt5/src-qml/test/testlist.pro @@ -0,0 +1,7 @@ +QT = core gui widgets quick quickwidgets qml + +TARGET = test + +SOURCES += testlist.cpp + +HEADERS += ListData.h |