119 lines
3.7 KiB
QML
119 lines
3.7 KiB
QML
import QtQuick
|
||
import QtQuick.Layouts
|
||
import Quickshell
|
||
import qs.Services
|
||
import qs.Widgets
|
||
|
||
Item {
|
||
property real scaling: 1
|
||
readonly property string tabIcon: "monitor"
|
||
readonly property string tabLabel: "Display"
|
||
readonly property int tabIndex: 5
|
||
Layout.fillWidth: true
|
||
Layout.fillHeight: true
|
||
|
||
// Helper functions to update arrays immutably
|
||
function addMonitor(list, name) {
|
||
const arr = (list || []).slice()
|
||
if (!arr.includes(name))
|
||
arr.push(name)
|
||
return arr
|
||
}
|
||
function removeMonitor(list, name) {
|
||
return (list || []).filter(function (n) {
|
||
return n !== name
|
||
})
|
||
}
|
||
|
||
ColumnLayout {
|
||
anchors.fill: parent
|
||
spacing: Style.marginMedium * scaling
|
||
|
||
NText {
|
||
text: "Per‑monitor configuration"
|
||
font.weight: Style.fontWeightBold
|
||
color: Colors.accentSecondary
|
||
}
|
||
|
||
Repeater {
|
||
model: Quickshell.screens || []
|
||
delegate: Rectangle {
|
||
Layout.fillWidth: true
|
||
radius: Style.radiusMedium * scaling
|
||
color: Colors.surface
|
||
border.color: Colors.outline
|
||
border.width: Math.max(1, Style.borderThin * scaling)
|
||
implicitHeight: contentCol.implicitHeight + Style.marginLarge * scaling
|
||
|
||
ColumnLayout {
|
||
id: contentCol
|
||
anchors.fill: parent
|
||
anchors.margins: Style.marginMedium * scaling
|
||
spacing: Style.marginSmall * scaling
|
||
|
||
NText {
|
||
text: (modelData.name || "Unknown")
|
||
font.weight: Style.fontWeightBold
|
||
color: Colors.accentPrimary
|
||
}
|
||
|
||
RowLayout {
|
||
spacing: Style.marginMedium * scaling
|
||
NText {
|
||
text: `Resolution: ${modelData.width}x${modelData.height}`
|
||
color: Colors.textSecondary
|
||
}
|
||
NText {
|
||
text: `Position: (${modelData.x}, ${modelData.y})`
|
||
color: Colors.textSecondary
|
||
}
|
||
}
|
||
|
||
NToggle {
|
||
label: "Bar"
|
||
description: "Display the top bar on this monitor"
|
||
value: (Settings.data.bar.monitors || []).indexOf(modelData.name) !== -1
|
||
onToggled: function (newValue) {
|
||
if (newValue) {
|
||
Settings.data.bar.monitors = addMonitor(Settings.data.bar.monitors, modelData.name)
|
||
} else {
|
||
Settings.data.bar.monitors = removeMonitor(Settings.data.bar.monitors, modelData.name)
|
||
}
|
||
}
|
||
}
|
||
|
||
NToggle {
|
||
label: "Dock"
|
||
description: "Display the dock on this monitor"
|
||
value: (Settings.data.dock.monitors || []).indexOf(modelData.name) !== -1
|
||
onToggled: function (newValue) {
|
||
if (newValue) {
|
||
Settings.data.dock.monitors = addMonitor(Settings.data.dock.monitors, modelData.name)
|
||
} else {
|
||
Settings.data.dock.monitors = removeMonitor(Settings.data.dock.monitors, modelData.name)
|
||
}
|
||
}
|
||
}
|
||
|
||
NToggle {
|
||
label: "Notifications"
|
||
description: "Display notifications on this monitor"
|
||
value: (Settings.data.notifications.monitors || []).indexOf(modelData.name) !== -1
|
||
onToggled: function (newValue) {
|
||
if (newValue) {
|
||
Settings.data.notifications.monitors = addMonitor(Settings.data.notifications.monitors, modelData.name)
|
||
} else {
|
||
Settings.data.notifications.monitors = removeMonitor(Settings.data.notifications.monitors,
|
||
modelData.name)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
Item {
|
||
Layout.fillHeight: true
|
||
}
|
||
}
|
||
}
|