Merge branch 'main' of github.com:noctalia-dev/noctalia-shell

This commit is contained in:
LemmyCook 2025-09-14 15:58:58 -04:00
commit efcec1b2f9
2 changed files with 349 additions and 356 deletions

View file

@ -5,12 +5,8 @@ import qs.Commons
import qs.Services import qs.Services
import qs.Widgets import qs.Widgets
Rectangle {
id: root
Rectangle {
id: root
property ShellScreen screen property ShellScreen screen
property real scaling: 1.0 property real scaling: 1.0
@ -41,395 +37,392 @@ import qs.Widgets
readonly property bool showNetworkStats: (widgetSettings.showNetworkStats !== undefined) ? widgetSettings.showNetworkStats : widgetMetadata.showNetworkStats readonly property bool showNetworkStats: (widgetSettings.showNetworkStats !== undefined) ? widgetSettings.showNetworkStats : widgetMetadata.showNetworkStats
readonly property bool showDiskUsage: (widgetSettings.showDiskUsage !== undefined) ? widgetSettings.showDiskUsage : widgetMetadata.showDiskUsage readonly property bool showDiskUsage: (widgetSettings.showDiskUsage !== undefined) ? widgetSettings.showDiskUsage : widgetMetadata.showDiskUsage
anchors.centerIn: parent
implicitWidth: (barPosition === "left" || barPosition === "right") ? Math.round(Style.capsuleHeight * scaling) : Math.round(horizontalLayout.implicitWidth + Style.marginM * 2 * scaling)
implicitHeight: (barPosition === "left" || barPosition === "right") ? Math.round(verticalLayout.implicitHeight + Style.marginM * 2 * scaling) : Math.round(Style.capsuleHeight * scaling)
radius: Math.round(Style.radiusM * scaling)
color: Color.mSurfaceVariant
// Horizontal layout for top/bottom bars
RowLayout {
id: horizontalLayout
anchors.centerIn: parent anchors.centerIn: parent
implicitWidth: (barPosition === "left" || barPosition === "right") ? Math.round(Style.capsuleHeight * scaling) : Math.round(horizontalLayout.implicitWidth + Style.marginM * 2 * scaling) anchors.leftMargin: Style.marginM * scaling
implicitHeight: (barPosition === "left" || barPosition === "right") ? Math.round(verticalLayout.implicitHeight + Style.marginM * 2 * scaling) : Math.round(Style.capsuleHeight * scaling) anchors.rightMargin: Style.marginM * scaling
radius: Math.round(Style.radiusM * scaling) spacing: Style.marginXS * scaling
color: Color.mSurfaceVariant visible: barPosition === "top" || barPosition === "bottom"
// Horizontal layout for top/bottom bars // CPU Usage Component
RowLayout { Item {
id: horizontalLayout Layout.preferredWidth: cpuUsageRow.implicitWidth
anchors.centerIn: parent Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
anchors.leftMargin: Style.marginM * scaling Layout.alignment: Qt.AlignVCenter
anchors.rightMargin: Style.marginM * scaling visible: showCpuUsage
spacing: Style.marginXS * scaling
visible: barPosition === "top" || barPosition === "bottom"
// CPU Usage Component RowLayout {
Item { id: cpuUsageRow
Layout.preferredWidth: cpuUsageRow.implicitWidth anchors.centerIn: parent
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) spacing: Style.marginXXS * scaling
Layout.alignment: Qt.AlignVCenter
visible: showCpuUsage
RowLayout { NIcon {
id: cpuUsageRow icon: "cpu-usage"
anchors.centerIn: parent font.pointSize: Style.fontSizeM * scaling
spacing: Style.marginXXS * scaling Layout.alignment: Qt.AlignVCenter
NIcon {
icon: "cpu-usage"
font.pointSize: Style.fontSizeM * scaling
Layout.alignment: Qt.AlignVCenter
}
NText {
text: `${SystemStatService.cpuUsage}%`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
}
} }
}
// CPU Temperature Component NText {
Item { text: `${SystemStatService.cpuUsage}%`
Layout.preferredWidth: cpuTempRow.implicitWidth font.family: Settings.data.ui.fontFixed
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) font.pointSize: Style.fontSizeXS * scaling
Layout.alignment: Qt.AlignVCenter font.weight: Style.fontWeightMedium
visible: showCpuTemp Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
RowLayout { color: Color.mPrimary
id: cpuTempRow
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NIcon {
icon: "cpu-temperature"
// Fire is so tall, we need to make it smaller
font.pointSize: Style.fontSizeS * scaling
Layout.alignment: Qt.AlignVCenter
}
NText {
text: `${SystemStatService.cpuTemp}°C`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
}
}
}
// Memory Usage Component
Item {
Layout.preferredWidth: memoryUsageRow.implicitWidth
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignVCenter
visible: showMemoryUsage
RowLayout {
id: memoryUsageRow
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NIcon {
icon: "memory"
font.pointSize: Style.fontSizeM * scaling
Layout.alignment: Qt.AlignVCenter
}
NText {
text: showMemoryAsPercent ? `${SystemStatService.memPercent}%` : `${SystemStatService.memGb}G`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
}
}
}
// Network Download Speed Component
Item {
Layout.preferredWidth: networkDownloadRow.implicitWidth
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignVCenter
visible: showNetworkStats
RowLayout {
id: networkDownloadRow
anchors.centerIn: parent
spacing: Style.marginXS * scaling
NIcon {
icon: "download-speed"
font.pointSize: Style.fontSizeM * scaling
Layout.alignment: Qt.AlignVCenter
}
NText {
text: SystemStatService.formatSpeed(SystemStatService.rxSpeed)
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
}
}
}
// Network Upload Speed Component
Item {
Layout.preferredWidth: networkUploadRow.implicitWidth
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignVCenter
visible: showNetworkStats
RowLayout {
id: networkUploadRow
anchors.centerIn: parent
spacing: Style.marginXS * scaling
NIcon {
icon: "upload-speed"
font.pointSize: Style.fontSizeM * scaling
Layout.alignment: Qt.AlignVCenter
}
NText {
text: SystemStatService.formatSpeed(SystemStatService.txSpeed)
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
}
}
}
// Disk Usage Component (primary drive)
Item {
Layout.preferredWidth: diskUsageRow.implicitWidth
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignVCenter
visible: showDiskUsage
RowLayout {
id: diskUsageRow
anchors.centerIn: parent
spacing: Style.marginXS * scaling
NIcon {
icon: "storage"
font.pointSize: Style.fontSizeM * scaling
Layout.alignment: Qt.AlignVCenter
}
NText {
text: `${SystemStatService.diskPercent}%`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
}
} }
} }
} }
// Vertical layout for left/right bars // CPU Temperature Component
ColumnLayout { Item {
id: verticalLayout Layout.preferredWidth: cpuTempRow.implicitWidth
anchors.centerIn: parent Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
anchors.topMargin: Style.marginS * scaling Layout.alignment: Qt.AlignVCenter
anchors.bottomMargin: Style.marginS * scaling visible: showCpuTemp
width: Math.round(28 * scaling)
spacing: Style.marginS * scaling
visible: barPosition === "left" || barPosition === "right"
// CPU Usage Component RowLayout {
Item { id: cpuTempRow
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) anchors.centerIn: parent
Layout.preferredWidth: Math.round(28 * scaling) spacing: Style.marginXXS * scaling
Layout.alignment: Qt.AlignHCenter
visible: showCpuUsage
Column { NIcon {
id: cpuUsageRowVertical icon: "cpu-temperature"
anchors.centerIn: parent // Fire is so tall, we need to make it smaller
spacing: Style.marginXXS * scaling font.pointSize: Style.fontSizeS * scaling
Layout.alignment: Qt.AlignVCenter
}
NText { NText {
text: `${Math.round(SystemStatService.cpuUsage)}%` text: `${SystemStatService.cpuTemp}°C`
font.family: Settings.data.ui.fontFixed font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter Layout.alignment: Qt.AlignVCenter
horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter
color: Color.mPrimary color: Color.mPrimary
}
NIcon {
icon: "cpu-usage"
font.pointSize: Style.fontSizeS * scaling
anchors.horizontalCenter: parent.horizontalCenter
}
} }
} }
}
// CPU Temperature Component // Memory Usage Component
Item { Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) Layout.preferredWidth: memoryUsageRow.implicitWidth
Layout.preferredWidth: Math.round(28 * scaling) Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter
visible: showCpuTemp visible: showMemoryUsage
Column { RowLayout {
id: cpuTempRowVertical id: memoryUsageRow
anchors.centerIn: parent anchors.centerIn: parent
spacing: Style.marginXXS * scaling spacing: Style.marginXXS * scaling
NText { NIcon {
text: `${SystemStatService.cpuTemp}°` icon: "memory"
font.family: Settings.data.ui.fontFixed font.pointSize: Style.fontSizeM * scaling
font.pointSize: Style.fontSizeXXS * scaling Layout.alignment: Qt.AlignVCenter
font.weight: Style.fontWeightMedium }
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
NIcon { NText {
icon: "cpu-temperature" text: showMemoryAsPercent ? `${SystemStatService.memPercent}%` : `${SystemStatService.memGb}G`
// Fire is so tall, we need to make it smaller font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXS * scaling font.pointSize: Style.fontSizeXS * scaling
anchors.horizontalCenter: parent.horizontalCenter font.weight: Style.fontWeightMedium
} Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
} }
} }
}
// Memory Usage Component // Network Download Speed Component
Item { Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) Layout.preferredWidth: networkDownloadRow.implicitWidth
Layout.preferredWidth: Math.round(28 * scaling) Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter
visible: showMemoryUsage visible: showNetworkStats
Column { RowLayout {
id: memoryUsageRowVertical id: networkDownloadRow
anchors.centerIn: parent anchors.centerIn: parent
spacing: Style.marginXXS * scaling spacing: Style.marginXS * scaling
NText { NIcon {
text: showMemoryAsPercent ? `${SystemStatService.memPercent}%` : `${Math.round(SystemStatService.memGb)}G` icon: "download-speed"
font.family: Settings.data.ui.fontFixed font.pointSize: Style.fontSizeM * scaling
font.pointSize: Style.fontSizeXXS * scaling Layout.alignment: Qt.AlignVCenter
font.weight: Style.fontWeightMedium }
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
NIcon { NText {
icon: "memory" text: SystemStatService.formatSpeed(SystemStatService.rxSpeed)
font.pointSize: Style.fontSizeS * scaling font.family: Settings.data.ui.fontFixed
anchors.horizontalCenter: parent.horizontalCenter font.pointSize: Style.fontSizeXS * scaling
} font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
color: Color.mPrimary
} }
} }
}
// Network Download Speed Component // Network Upload Speed Component
Item { Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) Layout.preferredWidth: networkUploadRow.implicitWidth
Layout.preferredWidth: Math.round(28 * scaling) Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter
visible: showNetworkStats visible: showNetworkStats
Column { RowLayout {
id: networkDownloadRowVertical id: networkUploadRow
anchors.centerIn: parent anchors.centerIn: parent
spacing: Style.marginXXS * scaling spacing: Style.marginXS * scaling
NIcon { NIcon {
icon: "download-speed" icon: "upload-speed"
font.pointSize: Style.fontSizeS * scaling font.pointSize: Style.fontSizeM * scaling
anchors.horizontalCenter: parent.horizontalCenter Layout.alignment: Qt.AlignVCenter
} }
NText { NText {
text: SystemStatService.formatSpeed(SystemStatService.rxSpeed) text: SystemStatService.formatSpeed(SystemStatService.txSpeed)
font.family: Settings.data.ui.fontFixed font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling font.pointSize: Style.fontSizeXS * scaling
font.weight: Style.fontWeightMedium font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter Layout.alignment: Qt.AlignVCenter
horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter
color: Color.mPrimary color: Color.mPrimary
}
} }
} }
}
// Network Upload Speed Component // Disk Usage Component (primary drive)
Item { Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) Layout.preferredWidth: diskUsageRow.implicitWidth
Layout.preferredWidth: Math.round(28 * scaling) Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignVCenter
visible: showNetworkStats visible: showDiskUsage
Column { RowLayout {
id: networkUploadRowVertical id: diskUsageRow
anchors.centerIn: parent anchors.centerIn: parent
spacing: Style.marginXXS * scaling spacing: Style.marginXS * scaling
NIcon { NIcon {
icon: "upload-speed" icon: "storage"
font.pointSize: Style.fontSizeS * scaling font.pointSize: Style.fontSizeM * scaling
anchors.horizontalCenter: parent.horizontalCenter Layout.alignment: Qt.AlignVCenter
}
NText {
text: SystemStatService.formatSpeed(SystemStatService.txSpeed)
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
} }
}
// Disk Usage Component (primary drive) NText {
Item { text: `${SystemStatService.diskPercent}%`
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling) font.family: Settings.data.ui.fontFixed
Layout.preferredWidth: Math.round(28 * scaling) font.pointSize: Style.fontSizeXS * scaling
Layout.alignment: Qt.AlignHCenter font.weight: Style.fontWeightMedium
visible: showDiskUsage Layout.alignment: Qt.AlignVCenter
verticalAlignment: Text.AlignVCenter
ColumnLayout { color: Color.mPrimary
id: diskUsageRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NIcon {
icon: "storage"
font.pointSize: Style.fontSizeS * scaling
Layout.alignment: Qt.AlignHCenter
}
NText {
text: `${SystemStatService.diskPercent}%`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignHCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
} }
} }
} }
} }
// Vertical layout for left/right bars
ColumnLayout {
id: verticalLayout
anchors.centerIn: parent
anchors.topMargin: Style.marginS * scaling
anchors.bottomMargin: Style.marginS * scaling
width: Math.round(28 * scaling)
spacing: Style.marginS * scaling
visible: barPosition === "left" || barPosition === "right"
// CPU Usage Component
Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.preferredWidth: Math.round(28 * scaling)
Layout.alignment: Qt.AlignHCenter
visible: showCpuUsage
Column {
id: cpuUsageRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NText {
text: `${Math.round(SystemStatService.cpuUsage)}%`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
NIcon {
icon: "cpu-usage"
font.pointSize: Style.fontSizeS * scaling
anchors.horizontalCenter: parent.horizontalCenter
}
}
}
// CPU Temperature Component
Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.preferredWidth: Math.round(28 * scaling)
Layout.alignment: Qt.AlignHCenter
visible: showCpuTemp
Column {
id: cpuTempRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NText {
text: `${SystemStatService.cpuTemp}°`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
NIcon {
icon: "cpu-temperature"
// Fire is so tall, we need to make it smaller
font.pointSize: Style.fontSizeXS * scaling
anchors.horizontalCenter: parent.horizontalCenter
}
}
}
// Memory Usage Component
Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.preferredWidth: Math.round(28 * scaling)
Layout.alignment: Qt.AlignHCenter
visible: showMemoryUsage
Column {
id: memoryUsageRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NText {
text: showMemoryAsPercent ? `${SystemStatService.memPercent}%` : `${Math.round(SystemStatService.memGb)}G`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
NIcon {
icon: "memory"
font.pointSize: Style.fontSizeS * scaling
anchors.horizontalCenter: parent.horizontalCenter
}
}
}
// Network Download Speed Component
Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.preferredWidth: Math.round(28 * scaling)
Layout.alignment: Qt.AlignHCenter
visible: showNetworkStats
Column {
id: networkDownloadRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NIcon {
icon: "download-speed"
font.pointSize: Style.fontSizeS * scaling
anchors.horizontalCenter: parent.horizontalCenter
}
NText {
text: SystemStatService.formatSpeed(SystemStatService.rxSpeed)
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
}
}
// Network Upload Speed Component
Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.preferredWidth: Math.round(28 * scaling)
Layout.alignment: Qt.AlignHCenter
visible: showNetworkStats
Column {
id: networkUploadRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NIcon {
icon: "upload-speed"
font.pointSize: Style.fontSizeS * scaling
anchors.horizontalCenter: parent.horizontalCenter
}
NText {
text: SystemStatService.formatSpeed(SystemStatService.txSpeed)
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
}
}
// Disk Usage Component (primary drive)
Item {
Layout.preferredHeight: Math.round(Style.capsuleHeight * scaling)
Layout.preferredWidth: Math.round(28 * scaling)
Layout.alignment: Qt.AlignHCenter
visible: showDiskUsage
ColumnLayout {
id: diskUsageRowVertical
anchors.centerIn: parent
spacing: Style.marginXXS * scaling
NIcon {
icon: "storage"
font.pointSize: Style.fontSizeS * scaling
Layout.alignment: Qt.AlignHCenter
}
NText {
text: `${SystemStatService.diskPercent}%`
font.family: Settings.data.ui.fontFixed
font.pointSize: Style.fontSizeXXS * scaling
font.weight: Style.fontWeightMedium
Layout.alignment: Qt.AlignHCenter
horizontalAlignment: Text.AlignHCenter
color: Color.mPrimary
}
}
}
}
}

View file

@ -8,8 +8,8 @@ Singleton {
id: root id: root
// Public properties // Public properties
property string baseVersion: "2.8.0" property string baseVersion: "2.9.0"
property bool isDevelopment: true property bool isDevelopment: false
property string currentVersion: `v${!isDevelopment ? baseVersion : baseVersion + "-dev"}` property string currentVersion: `v${!isDevelopment ? baseVersion : baseVersion + "-dev"}`