aboutsummaryrefslogtreecommitdiff
path: root/src-qt5
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2017-12-19 23:54:07 -0500
committerKen Moore <ken@ixsystems.com>2017-12-19 23:54:07 -0500
commit7b03f5af04943e2de6f3041e67be23280219a238 (patch)
treec78551fe9c36684840b70e73a984f843ecaccf9d /src-qt5
parentAdded test QML files (diff)
downloadlumina-7b03f5af04943e2de6f3041e67be23280219a238.tar.gz
lumina-7b03f5af04943e2de6f3041e67be23280219a238.tar.bz2
lumina-7b03f5af04943e2de6f3041e67be23280219a238.zip
Add a new C++ object: PanelObject
This is tied into the RootDesktopObject as well as the ScreenObject, resulting in global-session panels as well as per-screen panels.
Diffstat (limited to 'src-qt5')
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp44
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h49
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp24
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h8
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp26
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h9
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri7
7 files changed, 164 insertions, 3 deletions
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp
new file mode 100644
index 00000000..471da58f
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp
@@ -0,0 +1,44 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2017, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "PanelObject.h"
+#include <QQmlEngine>
+#include <QDebug>
+
+PanelObject::PanelObject(QString id, QObject *parent) : QObject(parent){
+ panel_id = id;
+}
+
+void PanelObject::RegisterType(){
+ static bool done = false;
+ if(done){ return; }
+ done=true;
+ qmlRegisterType<PanelObject>("Lumina.Backend.PanelObject",2,0, "PanelObject");
+}
+
+QString PanelObject::name(){ return panel_id; }
+QString PanelObject::background(){
+ if(bg.isEmpty()){ return "transparent"; }
+ return bg;
+}
+int PanelObject::x(){ return geom.x(); }
+int PanelObject::y(){ return geom.y(); }
+int PanelObject::width(){ return geom.width(); }
+int PanelObject::height(){ return geom.height(); }
+
+void PanelObject::setBackground(QString fileOrColor){
+ if(bg!=fileOrColor){
+ bg = fileOrColor;
+ emit backgroundChanged();
+ }
+}
+
+void PanelObject::setGeometry( QRect newgeom ){
+ if(geom!=newgeom){
+ geom = newgeom;
+ emit geomChanged();
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h
new file mode 100644
index 00000000..a788fa07
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h
@@ -0,0 +1,49 @@
+//===========================================
+// 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 Panel info to the QML classes
+//===========================================
+#ifndef _LUMINA_DESKTOP_PANEL_OBJECT_H
+#define _LUMINA_DESKTOP_PANEL_OBJECT_H
+#include <QObject>
+#include <QString>
+#include <QScreen>
+
+class PanelObject : 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:
+ QString panel_id, bg;
+ QRect geom;
+
+public:
+ PanelObject(QString id = "", QObject *parent = 0);
+
+ static void RegisterType();
+
+ Q_INVOKABLE QString name();
+ Q_INVOKABLE QString background();
+ Q_INVOKABLE int x();
+ Q_INVOKABLE int y();
+ Q_INVOKABLE int width();
+ Q_INVOKABLE int height();
+
+public slots:
+ void setBackground(QString fileOrColor);
+ void setGeometry(QRect newgeom);
+
+signals:
+ void backgroundChanged();
+ void geomChanged();
+};
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp
index 60cf56c3..c1652ba6 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp
@@ -21,6 +21,9 @@ RootDesktopObject::~RootDesktopObject(){
}
void RootDesktopObject::RegisterType(){
+ static bool done = false;
+ if(done){ return; }
+ done=true;
qmlRegisterType<RootDesktopObject>("Lumina.Backend.RootDesktopObject", 2, 0, "RootDesktopObject");
//Also register any types that are needed by this class
ScreenObject::RegisterType();
@@ -47,6 +50,26 @@ ScreenObject* RootDesktopObject::screen(QString id){
return 0;
}
+QStringList RootDesktopObject::panels(){
+ //qDebug() << "Request Panels:" << panel_objects.length();
+ QStringList names;
+ for(int i=0; i<panel_objects.length(); i++){ names << panel_objects[i]->name(); }
+ return names;
+}
+
+PanelObject* RootDesktopObject::panel(QString id){
+ //qDebug() << "Got Panel Request:" << id;
+ for(int i=0; i<panel_objects.length(); i++){
+ if(panel_objects[i]->name()==id){ return panel_objects[i]; }
+ }
+ return 0;
+}
+
+void RootDesktopObject::setPanels(QList<PanelObject*> list){
+ panel_objects = list;
+ emit panelsChanged();
+}
+
void RootDesktopObject::logout(){
emit startLogout();
}
@@ -85,4 +108,5 @@ void RootDesktopObject::ChangeWallpaper(QString screen, QString value){
}
}
+
// === PRIVATE ===
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h
index ba586701..93beb6e4 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h
@@ -17,6 +17,7 @@ class RootDesktopObject : public QObject{
Q_OBJECT
//Define all the QML Properties here (interface between QML and the C++ methods below)
Q_PROPERTY( QStringList screens READ screens NOTIFY screensChanged)
+ Q_PROPERTY( QStringList panels READ panels NOTIFY panelsChanged)
public:
//main contructor/destructor
@@ -31,13 +32,19 @@ public:
//QML Read Functions
QStringList screens();
Q_INVOKABLE ScreenObject* screen(QString id);
+ Q_INVOKABLE QStringList panels();
+ Q_INVOKABLE PanelObject* panel(QString id);
+
+ void setPanels(QList<PanelObject*> list);
//QML Access Functions
Q_INVOKABLE void logout();
Q_INVOKABLE void lockscreen();
Q_INVOKABLE void mousePositionChanged();
+
private:
QList<ScreenObject*> s_objects;
+ QList<PanelObject*> panel_objects;
public slots:
void updateScreens(); //rescan/update screen objects
@@ -47,6 +54,7 @@ private slots:
signals:
void screensChanged();
+ void panelsChanged();
void startLogout();
void mouseMoved();
void lockScreen();
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp
index 4c1d6189..82622403 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp
@@ -13,7 +13,12 @@ ScreenObject::ScreenObject(QScreen *scrn, QObject *parent) : QObject(parent){
}
void ScreenObject::RegisterType(){
+ static bool done = false;
+ if(done){ return; }
+ done=true;
qmlRegisterType<ScreenObject>("Lumina.Backend.ScreenObject",2,0, "ScreenObject");
+ //Also register any types that are needed by this class
+ PanelObject::RegisterType();
}
QString ScreenObject::name(){ return bg_screen->name(); }
@@ -29,3 +34,24 @@ void ScreenObject::setBackground(QString fileOrColor){
emit backgroundChanged();
}
}
+
+void ScreenObject::setPanels(QList<PanelObject*> list){
+ panel_objects = list;
+ emit panelsChanged();
+}
+
+//QML Read Functions
+QStringList ScreenObject::panels(){
+ //qDebug() << "Request Panels:" << panel_objects.length();
+ QStringList names;
+ for(int i=0; i<panel_objects.length(); i++){ names << panel_objects[i]->name(); }
+ return names;
+}
+
+PanelObject* ScreenObject::panel(QString id){
+ //qDebug() << "Got Panel Request:" << id;
+ for(int i=0; i<panel_objects.length(); i++){
+ if(panel_objects[i]->name()==id){ return panel_objects[i]; }
+ }
+ return 0;
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h
index 8076f1ae..1afff6d2 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h
@@ -12,6 +12,8 @@
#include <QString>
#include <QScreen>
+#include "PanelObject.h"
+
class ScreenObject : public QObject {
Q_OBJECT
Q_PROPERTY( QString name READ name )
@@ -20,10 +22,12 @@ class ScreenObject : public QObject {
Q_PROPERTY( int y READ y NOTIFY geomChanged)
Q_PROPERTY( int width READ width NOTIFY geomChanged)
Q_PROPERTY( int height READ height NOTIFY geomChanged)
+ Q_PROPERTY( QStringList panels READ panels NOTIFY panelsChanged)
private:
QScreen *bg_screen;
QString bg;
+ QList<PanelObject*> panel_objects;
public:
ScreenObject(QScreen *scrn = 0, QObject *parent = 0);
@@ -36,6 +40,10 @@ public:
Q_INVOKABLE int y();
Q_INVOKABLE int width();
Q_INVOKABLE int height();
+ Q_INVOKABLE QStringList panels();
+ Q_INVOKABLE PanelObject* panel(QString id);
+
+ void setPanels(QList<PanelObject*> list);
public slots:
void setBackground(QString fileOrColor);
@@ -43,6 +51,7 @@ public slots:
signals:
void backgroundChanged();
void geomChanged();
+ void panelsChanged();
};
#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri
index 33b699da..899f4968 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri
@@ -1,8 +1,9 @@
SOURCES *= $${PWD}/RootDesktopObject.cpp \
- $${PWD}/ScreenObject.cpp
+ $${PWD}/ScreenObject.cpp \
+ $${PWD}/PanelObject.cpp
HEADERS *= $${PWD}/RootDesktopObject.h \
- $${PWD}/ScreenObject.h
+ $${PWD}/ScreenObject.h \
+ $${PWD}/PanelObject.h
INCLUDEPATH *= $${PWD}
-
bgstack15