Files
noctalia-shell/Modules/ControlCenter/Cards/TopCard.qml
T

158 lines
4.1 KiB
QML

import QtQuick
import QtQuick.Effects
import QtQuick.Layouts
import Quickshell
import Quickshell.Io
import Quickshell.Widgets
import qs.Modules.Settings
import qs.Modules.ControlCenter
import qs.Modules.ControlCenter.Extras
import qs.Commons
import qs.Services
import qs.Widgets
// Header card with avatar, user and quick actions
NBox {
id: root
property string uptimeText: "--"
property real spacing: Style.marginS * scaling
ColumnLayout {
anchors.fill: parent
anchors.margins: Style.marginM * scaling
// Profile, Uptime, Settings, SessionMenu, Close
RowLayout {
id: content
spacing: root.spacing
Layout.alignment: Qt.AlignVCenter
NImageCircled {
width: Style.baseWidgetSize * 1.25 * scaling
height: width
imagePath: Settings.data.general.avatarImage
fallbackIcon: "person"
borderColor: Color.mPrimary
borderWidth: Math.max(1, Style.borderM * scaling)
Layout.alignment: Qt.AlignVCenter
Layout.topMargin: Style.marginXS * scaling
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS * scaling
NText {
text: Quickshell.env("USER") || "user"
font.weight: Style.fontWeightBold
font.capitalization: Font.Capitalize
}
NText {
text: I18n.tr("system.uptime", {
"uptime": uptimeText
})
pointSize: Style.fontSizeS * scaling
color: Color.mOnSurfaceVariant
}
}
Item {
Layout.fillWidth: true
}
RowLayout {
spacing: root.spacing
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
NIconButton {
baseSize: Style.baseWidgetSize * 0.9
icon: "settings"
tooltipText: I18n.tr("tooltips.open-settings")
onClicked: {
settingsPanel.requestedTab = SettingsPanel.Tab.General
settingsPanel.open()
}
}
NIconButton {
baseSize: Style.baseWidgetSize * 0.9
icon: "power"
tooltipText: I18n.tr("tooltips.session-menu")
onClicked: {
sessionMenuPanel.open()
controlCenterPanel.close()
}
}
NIconButton {
baseSize: Style.baseWidgetSize * 0.9
icon: "close"
tooltipText: I18n.tr("tooltips.close")
onClicked: {
controlCenterPanel.close()
}
}
}
}
NDivider {
Layout.fillWidth: true
Layout.topMargin: Style.marginS * scaling
Layout.bottomMargin: Style.marginS * scaling
}
GridLayout {
id: grid
Layout.fillWidth: true
columns: (Settings.data.controlCenter.quickSettingsStyle === "compact") ? 5 : 3
columnSpacing: Style.marginM * scaling
rowSpacing: Style.marginS * scaling
Repeater {
model: Settings.data.controlCenter.widgets.quickSettings
delegate: ControlCenterWidgetLoader {
Layout.fillWidth: true
widgetId: (modelData.id !== undefined ? modelData.id : "")
widgetProps: {
"screen": root.modelData || null,
"scaling": ScalingService.getScreenScale(screen),
"widgetId": modelData.id,
"section": "quickSettings",
"sectionWidgetIndex": index,
"sectionWidgetsCount": Settings.data.controlCenter.widgets.quickSettings.length
}
Layout.alignment: Qt.AlignVCenter
}
}
}
}
// ----------------------------------
// Uptime
Timer {
interval: 60000
repeat: true
running: true
onTriggered: uptimeProcess.running = true
}
Process {
id: uptimeProcess
command: ["cat", "/proc/uptime"]
running: true
stdout: StdioCollector {
onStreamFinished: {
var uptimeSeconds = parseFloat(this.text.trim().split(' ')[0])
uptimeText = Time.formatVagueHumanReadableDuration(uptimeSeconds)
uptimeProcess.running = false
}
}
}
function updateSystemInfo() {
uptimeProcess.running = true
}
}