aboutsummaryrefslogtreecommitdiff
path: root/src-qt5
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2017-10-13 14:00:14 -0400
committerKen Moore <ken@ixsystems.com>2017-10-13 14:00:14 -0400
commit27992c407e1d67b14c7d20aa378193d5590b1d52 (patch)
tree0a7b10db476e55a9d1e21bb0a32fdbc542daaf06 /src-qt5
parentAdd the beginnings of the root desktop QML system. Not finished yet. (diff)
downloadlumina-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.pri9
-rw-r--r--src-qt5/src-cpp/RootDesktopObject.h39
-rw-r--r--src-qt5/src-cpp/ScreenObject.h50
-rw-r--r--src-qt5/src-qml/RootDesktop.qml27
-rw-r--r--src-qt5/src-qml/src-qml.pri9
-rw-r--r--src-qt5/src-qml/src-qml.qrc5
-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.h41
-rw-r--r--src-qt5/src-qml/test/ListTest.qml19
-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.cpp37
-rw-r--r--src-qt5/src-qml/test/testlist.pro7
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
bgstack15