pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts import ZShell.Config import qs.Components import qs.Modules.Settings.Common PageBase { id: root readonly property var builtinIcons: ({ audio: qsTr("Toggle audio"), mic: qsTr("Toggle microphone"), settings: qsTr("Open settings"), dnd: qsTr("Toggle Do-Not-Disturb"), gameMode: qsTr("Toggle game mode"), bluetooth: qsTr("Toggle bluetooth"), wifi: qsTr("Toggle Wi-Fi") }) isSubPage: true title: qsTr("Sidebar") ColumnLayout { anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top spacing: Tokens.spacing.extraSmall / 2 width: root.cappedWidth SectionHeader { first: true text: qsTr("General") } ToggleRow { checked: Config.sidebar.enabled first: true settingAnchor: "sidebar-enabled" text: qsTr("Enabled") onToggled: Config.sidebar.enabled = checked } SpinRow { from: 0 last: true settingAnchor: "sidebar-drag-threshold" stepSize: 5 subtext: qsTr("Pixels dragged before the sidebar opens") text: qsTr("Drag threshold") to: 200 value: Config.sidebar.dragThreshold onMoved: v => Config.sidebar.dragThreshold = v } SectionHeader { text: qsTr("Quick toggles") } ListEditor { function labelFor(item: var): string { const prettyName = root.builtinIcons[item.id]; if (prettyName) return prettyName; const label = item.id.replace(/([A-Z])/g, " $1"); return label.charAt(0).toUpperCase() + label.slice(1).toLowerCase(); } function toggledFor(item: var): bool { return item.enabled; } first: true values: Config.utilities.quickToggles.values z: 1 onItemMoved: (from, to) => Config.utilities.quickToggles.move(from, to) onItemRemoved: index => Config.utilities.quickToggles.remove(index) onItemToggled: (index, checked) => Config.utilities.quickToggles.at(index).enabled = checked } DialogSelectButton { id: addItemContainer acceptLabel: qsTr("Add") enabled: Object.keys(model).length > 0 header: qsTr("Add new entry") icon: "add" label: qsTr("Add entry") model: { const present = new Set(Config.utilities.quickToggles.values.map(item => item.id)); return Object.keys(root.builtinIcons).filter(id => !present.has(id)).map(id => ({ id: id, label: root.builtinIcons[id] })); } rootParent: root.flickable onAccepted: { if (!selectedItem) return; Config.utilities.quickToggles.insert({ id: selectedItem, enabled: true }); } } } }