aboutsummaryrefslogtreecommitdiff
path: root/src-qt5
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2018-02-28 16:42:53 -0500
committerKen Moore <ken@ixsystems.com>2018-02-28 16:42:53 -0500
commit9e5a4904de5f70d1686d824d024a0ea3ad0f547c (patch)
treeff9eb9739fe287295a9823861ffc8c2b028b93a1 /src-qt5
parentGet lumina-pdf all up and running again. (diff)
downloadlumina-9e5a4904de5f70d1686d824d024a0ea3ad0f547c.tar.gz
lumina-9e5a4904de5f70d1686d824d024a0ea3ad0f547c.tar.bz2
lumina-9e5a4904de5f70d1686d824d024a0ea3ad0f547c.zip
Some work on Lumina 2.
1. Get dynamic loading of panel plugins functional. 2. Get some layout work for the panels functional (clock plugin still not aligned right - size issue?) 3. Looks like something related to the gridLayout flow pattern is still not getting respected.
Diffstat (limited to 'src-qt5')
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp29
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h5
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml42
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml8
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml5
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml21
6 files changed, 72 insertions, 38 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
index 9b7b8da7..e8830bde 100644
--- 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
@@ -34,6 +34,10 @@ bool PanelObject::isVertical(){
return ( geom.width() < geom.height() );
}
+QStringList PanelObject::plugins(){
+ return panel_plugins;
+}
+
void PanelObject::setBackground(QString fileOrColor){
if(bg!=fileOrColor){
bg = fileOrColor;
@@ -48,6 +52,30 @@ void PanelObject::setGeometry( QRect newgeom ){
}
}
+void PanelObject::setPlugins( QStringList plist){
+ //Iterate through the list and find the URL's for the files
+ QStringList dirs; dirs << ":/qml/plugins/"; //add local directories here
+ for(int i=0; i<plist.length(); i++){
+ bool found = false;
+ for(int j=0; j<dirs.length() && !found; j++){
+ if(QFile::exists(dirs[j]+plist[i]+".qml")){
+ plist[i] = QUrl::fromLocalFile(dirs[j]+plist[i]+".qml").url();
+ found = true;
+ }
+ }
+ if(!found){
+ qWarning() << "Could not find panel plugin on system:" << plist[i];
+ plist.removeAt(i);
+ i--;
+ }
+ }
+ //Now update the internal list if it has changed
+ if(panel_plugins != plist){
+ panel_plugins = plist;
+ this->emit pluginsChanged();
+ }
+}
+
void PanelObject::syncWithSettings(QRect parent_geom){
//Read off all the settings
QString id = panel_id.section("/",-1); //last section (allow for prefixes to distinguish multiple monitors with the same profile but different screens)
@@ -88,4 +116,5 @@ void PanelObject::syncWithSettings(QRect parent_geom){
newgeom.translate(parent_geom.x(), parent_geom.y());
//qDebug() << " - Calculated Geometry (global):" << newgeom;
this->setGeometry(newgeom); //shift to global coordinates
+ this->setPlugins( DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/plugins", QStringList()).toStringList() );
}
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
index 04c47e06..945deec0 100644
--- 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
@@ -21,10 +21,12 @@ class PanelObject : public QObject {
Q_PROPERTY( int width READ width NOTIFY geomChanged)
Q_PROPERTY( int height READ height NOTIFY geomChanged)
Q_PROPERTY( bool isVertical READ isVertical NOTIFY geomChanged)
+ Q_PROPERTY( QStringList plugins READ plugins NOTIFY pluginsChanged)
private:
QString panel_id, bg;
QRect geom;
+ QStringList panel_plugins;
public:
PanelObject(QString id = "", QObject *parent = 0);
@@ -38,15 +40,18 @@ public:
Q_INVOKABLE int width();
Q_INVOKABLE int height();
Q_INVOKABLE bool isVertical();
+ Q_INVOKABLE QStringList plugins();
public slots:
void setBackground(QString fileOrColor);
void setGeometry(QRect newgeom);
void syncWithSettings(QRect parent_geom);
+ void setPlugins(QStringList plist);
signals:
void backgroundChanged();
void geomChanged();
+ void pluginsChanged();
};
#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml
index 2a8579a8..65c8a0eb 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml
@@ -10,13 +10,13 @@ import QtQuick.Controls 1
import QtQuick.Layouts 1.3
import Lumina.Backend.PanelObject 2.0
-import "./plugins" as PLUGINS
Rectangle {
//C++ backend object
property string panel_id
property PanelObject object
+ id: panel
//Normal geometries/placements
color: object.background
x: object.x
@@ -26,30 +26,24 @@ Rectangle {
GridLayout{
id: layout
- anchors.fill: parent;
- columns: parent.object.isVertical ? 1 : -1
- rows: parent.object.isVertical ? -1 : 1
+ anchors.fill: parent
+ //columns: parent.object.isVertical ? 1 : -1
+ //rows: parent.object.isVertical ? -1 : 1
+ flow: parent.isVertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
+ //horizontalItemAlignment: parent.object.isVertical ? Grid.AlignHCenter : Qt.AlignLeft
+ //verticalItemAlignment: parent.object.isVertical ? Grid.AlignTop : Qt.AlignVCenter
+ Repeater {
+ model: panel.object.plugins
+ Loader{
+ asynchronous: true
+ property bool vertical : layout.parent.object.isVertical
+ property bool isspacer : modelData.endsWith("/Spacer.qml");
+ source: modelData
+ Layout.fillWidth : (vertical || isspacer) ? true : false
+ Layout.fillHeight : (vertical && ! isspacer) ? false : true
+ Layout.alignment : Qt.AlignVCenter | Qt.AlignHCenter
+ }
- //hardcode some plugins for the moment
- //PLUGINS.Spacer{}
-
- PLUGINS.StatusTray{
- id: "statustray"
- vertical: layout.parent.object.isVertical
- //Layout.fillWidth: layout.parent.object.isVertical ? true : false
- //Layout.fillHeight: layout.parent.object.isVertical ? false : true
- }
-
- //PLUGINS.Spacer{}
-
- PLUGINS.Clock_Digital{
- id: "clock"
- vertical: layout.parent.object.isVertical
- //Layout.fillWidth: layout.parent.object.isVertical ? true : false
- //Layout.fillHeight: layout.parent.object.isVertical ? false : true
}
-
- //PLUGINS.Spacer{}
-
} //end of grid layout
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml
index f82d398b..e68788f6 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml
@@ -13,9 +13,11 @@ import QtQuick.Controls 1
import Lumina.Backend.RootDesktopObject 2.0
Label{
- property bool vertical
+ anchors.fill: parent
text: RootObject.currentTime
- wrapMode: Text.WrapWord
- rotation: vertical ? 90 : 0
+ wrapMode: Text.WordWrap
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ rotation: parent.vertical ? 90 : 0
transformOrigin: Item.Center
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml
index d46e486c..93556790 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml
@@ -4,13 +4,12 @@
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
-// This is the QML plugin that displays the OS status/system tray
+// This is a tiny QML plugin for a basic Item which can be set to grow
//===========================================
import QtQuick 2.2
import QtQuick.Layouts 1.3
Item{
- Layout.fillWidth: true
- Layout.fillHeight: true
+ anchors.fill: parent
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml
index a2d49b35..f4063ed9 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml
@@ -17,42 +17,47 @@ import "./status_tray" as QML
Item {
- property bool vertical
- property int prefsize: vertical ? parent.width : parent.height
+ property int prefsize: parent.vertical ? parent.width : parent.height
id: "status_tray"
+ anchors.fill: parent
GridLayout{
anchors.fill: parent
- flow: parent.vertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
- columns: vertical ? 2 : -1
- rows: vertical ? -1 : 2
- //columnSpacing: 2
- //rowSpacing: 2
+ flow: status_tray.parent.vertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
+ //columns: vertical ? 1 : -1
+ //rows: vertical ? -1 : 1
+ columnSpacing: 2
+ rowSpacing: 2
//Volume Status
QML.VolumeButton{
//Layout.preferredHeight: status_tray.prefsize
//Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
}
//Network Status
QML.NetworkButton{
//Layout.preferredHeight: status_tray.prefsize
//Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
}
//Battery Status
QML.BatteryButton{
//Layout.preferredHeight: status_tray.prefsize
//Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
}
//Update Status
QML.UpdateButton{
//Layout.preferredHeight: status_tray.prefsize
//Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
}
//System Tray Menu Button
ToolButton{
id: "trayButton"
text: "Tray"
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
//iconName: "view-more-vertical"
visible: RootObject.hasTrayWindows
onClicked: trayMenu.open()
@@ -60,7 +65,7 @@ Item {
id: "trayMenu"
//MenuItem{ text: "sample" }
//MenuItem{ text: "sample2" }
- //Rectangle{ color: "blue"; width: 50; height: 50 }
+ Rectangle{ color: "blue"; width: 48; height: 48 }
GridLayout{
columns: 4
Repeater{
bgstack15