From 5c6882d2a8641c216744fab9d3bc79dfa0e12506 Mon Sep 17 00:00:00 2001 From: zach Date: Tue, 23 Jun 2026 23:06:30 +0200 Subject: [PATCH] added panels page --- Config/Config.qml | 5 +- Config/DashboardConfig.qml | 1 - Config/Launcher.qml | 3 + Config/SidebarConfig.qml | 1 + Drawers/Interactions.qml | 4 +- Modules/Launcher/Services/Actions.qml | 2 +- Modules/SettingsNew/PageCompRegistry.qml | 27 +++- Modules/SettingsNew/PageRegistry.qml | 2 +- Modules/SettingsNew/Pages/Apps/AppInfo.qml | 2 +- Modules/SettingsNew/Pages/Panels/BarPanel.qml | 82 +++++++++++ .../Pages/Panels/DashboardPanel.qml | 85 ++++++++++++ .../Pages/Panels/LauncherPanel.qml | 131 ++++++++++++++++++ .../SettingsNew/Pages/Panels/SidebarPanel.qml | 46 ++++++ Modules/SettingsNew/Pages/PanelsPage.qml | 50 +++++++ 14 files changed, 433 insertions(+), 8 deletions(-) create mode 100644 Modules/SettingsNew/Pages/Panels/BarPanel.qml create mode 100644 Modules/SettingsNew/Pages/Panels/DashboardPanel.qml create mode 100644 Modules/SettingsNew/Pages/Panels/LauncherPanel.qml create mode 100644 Modules/SettingsNew/Pages/Panels/SidebarPanel.qml create mode 100644 Modules/SettingsNew/Pages/PanelsPage.qml diff --git a/Config/Config.qml b/Config/Config.qml index 422d81b..e59116c 100644 --- a/Config/Config.qml +++ b/Config/Config.qml @@ -167,7 +167,6 @@ Singleton { enabled: dashboard.enabled, mediaUpdateInterval: dashboard.mediaUpdateInterval, resourceUpdateInterval: dashboard.resourceUpdateInterval, - dragThreshold: dashboard.dragThreshold, performance: { showBattery: dashboard.performance.showBattery, showGpu: dashboard.performance.showGpu, @@ -245,6 +244,9 @@ Singleton { return { maxAppsShown: launcher.maxAppsShown, maxWallpapers: launcher.maxWallpapers, + dragThreshold: launcher.dragThreshold, + enableDangerousActions: launcher.enableDangerousActions, + enabled: launcher.enabled, hiddenApps: launcher.hiddenApps, favoriteApps: launcher.favoriteApps, uwsm: launcher.uwsm, @@ -349,6 +351,7 @@ Singleton { function serializeSidebar(): var { return { enabled: sidebar.enabled, + dragThreshold: sidebar.dragThreshold, sizes: { width: sidebar.sizes.width } diff --git a/Config/DashboardConfig.qml b/Config/DashboardConfig.qml index e0286bb..6ae2d55 100644 --- a/Config/DashboardConfig.qml +++ b/Config/DashboardConfig.qml @@ -1,7 +1,6 @@ import Quickshell.Io JsonObject { - property int dragThreshold: 50 property bool enabled: true property int mediaUpdateInterval: 500 property Performance performance: Performance { diff --git a/Config/Launcher.qml b/Config/Launcher.qml index 07070e3..d746bbd 100644 --- a/Config/Launcher.qml +++ b/Config/Launcher.qml @@ -84,6 +84,9 @@ JsonObject { dangerous: false }, ] + property int dragThreshold: 50 + property bool enableDangerousActions: false + property bool enabled: true property list favoriteApps: [] property list hiddenApps: [] property int maxAppsShown: 10 diff --git a/Config/SidebarConfig.qml b/Config/SidebarConfig.qml index 80800ce..e064090 100644 --- a/Config/SidebarConfig.qml +++ b/Config/SidebarConfig.qml @@ -1,6 +1,7 @@ import Quickshell.Io JsonObject { + property int dragThreshold: 30 property bool enabled: true property Sizes sizes: Sizes { } diff --git a/Drawers/Interactions.qml b/Drawers/Interactions.qml index a70df18..7148e46 100644 --- a/Drawers/Interactions.qml +++ b/Drawers/Interactions.qml @@ -75,7 +75,7 @@ Item { const dragX = x - centroid.pressPosition.x; const dragY = y - centroid.pressPosition.y; - if (centroid.pressPosition.y >= root.screen.height - Config.barConfig.border && centroid.pressPosition.x > root.screen.width / 5 && dragY < -200) + if (centroid.pressPosition.y >= root.screen.height - Config.barConfig.border && centroid.pressPosition.x > root.screen.width / 5 && dragY < -Config.launcher.dragThreshold) root.visibilities.launcher = true; if (root.singleGestureTriggered) @@ -100,7 +100,7 @@ Item { root.singleGestureTriggered = true; } - if (centroid.pressPosition.x > root.screen.width - Config.barConfig.border && centroid.pressPosition.y < (root.screen.height / 2) && dragX < -20) { + if (centroid.pressPosition.x > root.screen.width - Config.barConfig.border && centroid.pressPosition.y < (root.screen.height / 2) && dragX < -Config.sidebar.dragThreshold) { root.visibilities.sidebar = true; root.singleGestureTriggered = true; } diff --git a/Modules/Launcher/Services/Actions.qml b/Modules/Launcher/Services/Actions.qml index ae4f6fa..25a1b26 100644 --- a/Modules/Launcher/Services/Actions.qml +++ b/Modules/Launcher/Services/Actions.qml @@ -19,7 +19,7 @@ Searcher { Variants { id: variants - model: Config.launcher.actions.filter(a => (a.enabled ?? true)) + model: Config.launcher.actions.filter(a => (a.enabled ?? true) && (Config.launcher.enableDangerousActions || !(a.dangerous ?? false))) Action { } diff --git a/Modules/SettingsNew/PageCompRegistry.qml b/Modules/SettingsNew/PageCompRegistry.qml index 327870d..e2c7c83 100644 --- a/Modules/SettingsNew/PageCompRegistry.qml +++ b/Modules/SettingsNew/PageCompRegistry.qml @@ -9,6 +9,7 @@ import qs.Modules.SettingsNew.Pages import qs.Modules.SettingsNew.Pages.Wallpaper import qs.Modules.SettingsNew.Pages.Audio import qs.Modules.SettingsNew.Pages.Apps +import qs.Modules.SettingsNew.Pages.Panels QtObject { id: root @@ -65,7 +66,31 @@ QtObject { // Shell Component { - PlaceholderComp { + StackPage { + Component { + PanelsPage { + } + } + + Component { + DashboardPanel { + } + } + + Component { + BarPanel { + } + } + + Component { + LauncherPanel { + } + } + + Component { + SidebarPanel { + } + } } }, Component { diff --git a/Modules/SettingsNew/PageRegistry.qml b/Modules/SettingsNew/PageRegistry.qml index e116e6a..84aef7f 100644 --- a/Modules/SettingsNew/PageRegistry.qml +++ b/Modules/SettingsNew/PageRegistry.qml @@ -31,7 +31,7 @@ Singleton { { name: qsTr("Connected devices"), icon: "devices_other", - description: qsTr("Bluetooth, paiting"), + description: qsTr("Bluetooth, pairing"), category: "connectivity" }, { diff --git a/Modules/SettingsNew/Pages/Apps/AppInfo.qml b/Modules/SettingsNew/Pages/Apps/AppInfo.qml index ba44059..65f0a7e 100644 --- a/Modules/SettingsNew/Pages/Apps/AppInfo.qml +++ b/Modules/SettingsNew/Pages/Apps/AppInfo.qml @@ -82,7 +82,7 @@ PageBase { checked: root.app && Strings.testRegexList(Config.launcher.favoriteApps, root.app.id) enabled: !root.favoriteByRegex first: true - subtext: root.favoriteByRegex ? qsTr("Matched by a regex in favoriteApps — edit the config file to change") : qsTr("Pin to the top of the launcher") + subtext: root.favoriteByRegex ? qsTr("Matched by a regex in favoriteApps — edit the config file to change") : qsTr("Pin to the bottom of the launcher") text: qsTr("Favorite") onToggled: { diff --git a/Modules/SettingsNew/Pages/Panels/BarPanel.qml b/Modules/SettingsNew/Pages/Panels/BarPanel.qml new file mode 100644 index 0000000..28269a2 --- /dev/null +++ b/Modules/SettingsNew/Pages/Panels/BarPanel.qml @@ -0,0 +1,82 @@ +pragma ComponentBehavior: Bound + +import QtQuick.Layouts +import qs.Config +import qs.Modules.SettingsNew.Common + +PageBase { + id: root + + isSubPage: true + title: qsTr("Taskbar") + + ColumnLayout { + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + spacing: Appearance.spacing.extraSmall / 2 + width: root.cappedWidth + + // Behavior + SectionHeader { + first: true + text: qsTr("Behavior") + } + + ToggleRow { + checked: Config.barConfig.autoHide + first: true + last: true + subtext: qsTr("Hide the bar, reveal on hover") + text: qsTr("Auto hide") + + onToggled: Config.barConfig.autoHide = checked + } + + // Components + SectionHeader { + text: qsTr("Components") + } + + NavRow { + first: true + icon: "workspaces" + label: qsTr("Workspaces") + status: qsTr("Indicators, window icons") + + onClicked: root.sState.openSubPage(5) + } + + NavRow { + icon: "web_asset" + label: qsTr("Active window") + status: qsTr("Title display, popout") + + onClicked: root.sState.openSubPage(6) + } + + NavRow { + icon: "widgets" + label: qsTr("Tray") + status: qsTr("System tray icons") + + onClicked: root.sState.openSubPage(7) + } + + NavRow { + icon: "signal_cellular_alt" + label: qsTr("Status icons") + status: qsTr("Visible indicators") + + onClicked: root.sState.openSubPage(8) + } + + NavRow { + icon: "schedule" + label: qsTr("Clock") + last: true + status: qsTr("Date, icon, background") + + onClicked: root.sState.openSubPage(9) + } + } +} diff --git a/Modules/SettingsNew/Pages/Panels/DashboardPanel.qml b/Modules/SettingsNew/Pages/Panels/DashboardPanel.qml new file mode 100644 index 0000000..bb4ebad --- /dev/null +++ b/Modules/SettingsNew/Pages/Panels/DashboardPanel.qml @@ -0,0 +1,85 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import QtQuick.Layouts +import qs.Config +import qs.Components +import qs.Modules.SettingsNew.Common + +PageBase { + id: root + + isSubPage: true + title: qsTr("Dashboard") + + ColumnLayout { + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + spacing: Appearance.spacing.extraSmall / 2 + width: root.cappedWidth + + // General + SectionHeader { + first: true + text: qsTr("General") + } + + ToggleRow { + checked: Config.dashboard.enabled + first: true + last: true + text: qsTr("Enabled") + + onToggled: Config.dashboard.enabled = checked + } + + // Performance widgets + SectionHeader { + text: qsTr("Performance widgets") + } + + ToggleRow { + checked: Config.dashboard.performance.showBattery + first: true + text: qsTr("Battery") + + onToggled: Config.dashboard.performance.showBattery = checked + } + + ToggleRow { + checked: Config.dashboard.performance.showGpu + text: qsTr("GPU") + + onToggled: Config.dashboard.performance.showGpu = checked + } + + ToggleRow { + checked: Config.dashboard.performance.showCpu + text: qsTr("CPU") + + onToggled: Config.dashboard.performance.showCpu = checked + } + + ToggleRow { + checked: Config.dashboard.performance.showMemory + text: qsTr("Memory") + + onToggled: Config.dashboard.performance.showMemory = checked + } + + ToggleRow { + checked: Config.dashboard.performance.showStorage + text: qsTr("Storage") + + onToggled: Config.dashboard.performance.showStorage = checked + } + + ToggleRow { + checked: Config.dashboard.performance.showNetwork + last: true + text: qsTr("Network") + + onToggled: Config.dashboard.performance.showNetwork = checked + } + } +} diff --git a/Modules/SettingsNew/Pages/Panels/LauncherPanel.qml b/Modules/SettingsNew/Pages/Panels/LauncherPanel.qml new file mode 100644 index 0000000..471b49c --- /dev/null +++ b/Modules/SettingsNew/Pages/Panels/LauncherPanel.qml @@ -0,0 +1,131 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import QtQuick.Layouts +import qs.Config +import qs.Components +import qs.Modules.SettingsNew.Common + +PageBase { + id: root + + isSubPage: true + title: qsTr("Launcher") + + ColumnLayout { + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + spacing: Appearance.spacing.extraSmall / 2 + width: root.cappedWidth + + // General + SectionHeader { + first: true + text: qsTr("General") + } + + ToggleRow { + checked: Config.launcher.enabled + first: true + last: true + text: qsTr("Enabled") + + onToggled: Config.launcher.enabled = checked + } + + // Display + SectionHeader { + text: qsTr("Display") + } + + SpinRow { + first: true + from: 1 + stepSize: 1 + text: qsTr("Max items shown") + to: 20 + value: Config.launcher.maxAppsShown + + onMoved: v => Config.launcher.maxShown = v + } + + SpinRow { + from: 1 + stepSize: 1 + text: qsTr("Max wallpapers") + to: 30 + value: Config.launcher.maxWallpapers + + onMoved: v => Config.launcher.maxWallpapers = v + } + + SpinRow { + from: 0 + last: true + stepSize: 5 + subtext: qsTr("Pixels dragged before the launcher opens") + text: qsTr("Drag threshold") + to: 200 + value: Config.launcher.dragThreshold + + onMoved: v => Config.launcher.dragThreshold = v + } + + // Behavior + SectionHeader { + text: qsTr("Behavior") + } + + ToggleRow { + checked: Config.launcher.enableDangerousActions + first: true + last: true + subtext: qsTr("Allow actions that shut down or log out") + text: qsTr("Enable dangerous actions") + + onToggled: Config.launcher.enableDangerousActions = checked + } + + // Fuzzy search + SectionHeader { + text: qsTr("Fuzzy search") + } + + ToggleRow { + checked: Config.launcher.useFuzzy.apps + first: true + text: qsTr("Apps") + + onToggled: Config.launcher.useFuzzy.apps = checked + } + + ToggleRow { + checked: Config.launcher.useFuzzy.actions + text: qsTr("Actions") + + onToggled: Config.launcher.useFuzzy.actions = checked + } + + ToggleRow { + checked: Config.launcher.useFuzzy.schemes + text: qsTr("Schemes") + + onToggled: Config.launcher.useFuzzy.schemes = checked + } + + ToggleRow { + checked: Config.launcher.useFuzzy.variants + text: qsTr("Variants") + + onToggled: Config.launcher.useFuzzy.variants = checked + } + + ToggleRow { + checked: Config.launcher.useFuzzy.wallpapers + last: true + text: qsTr("Wallpapers") + + onToggled: Config.launcher.useFuzzy.wallpapers = checked + } + } +} diff --git a/Modules/SettingsNew/Pages/Panels/SidebarPanel.qml b/Modules/SettingsNew/Pages/Panels/SidebarPanel.qml new file mode 100644 index 0000000..57f1159 --- /dev/null +++ b/Modules/SettingsNew/Pages/Panels/SidebarPanel.qml @@ -0,0 +1,46 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import QtQuick.Layouts +import qs.Config +import qs.Components +import qs.Modules.SettingsNew.Common + +PageBase { + id: root + + isSubPage: true + title: qsTr("Sidebar") + + ColumnLayout { + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + spacing: Appearance.spacing.extraSmall / 2 + width: root.cappedWidth + + SectionHeader { + first: true + text: qsTr("General") + } + + ToggleRow { + checked: Config.sidebar.enabled + first: true + text: qsTr("Enabled") + + onToggled: Config.sidebar.enabled = checked + } + + SpinRow { + from: 0 + last: true + 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 + } + } +} diff --git a/Modules/SettingsNew/Pages/PanelsPage.qml b/Modules/SettingsNew/Pages/PanelsPage.qml new file mode 100644 index 0000000..9cb238c --- /dev/null +++ b/Modules/SettingsNew/Pages/PanelsPage.qml @@ -0,0 +1,50 @@ +import QtQuick.Layouts +import qs.Config +import qs.Modules.SettingsNew.Common + +PageBase { + id: root + + title: qsTr("Panels") + + ColumnLayout { + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + spacing: Appearance.spacing.extraSmall / 2 + width: root.cappedWidth + + NavRow { + first: true + icon: "dashboard" + label: qsTr("Dashboard") + status: Config.dashboard.enabled ? qsTr("Enabled") : qsTr("Disabled") + + onClicked: root.sState.openSubPage(1) + } + + NavRow { + icon: "dock_to_bottom" + label: qsTr("Taskbar") + status: !Config.barConfig.autoHide ? qsTr("Always visible") : qsTr("Reveal on hover") + + onClicked: root.sState.openSubPage(2) + } + + NavRow { + icon: "apps" + label: qsTr("Launcher") + status: Config.launcher.enabled ? qsTr("Enabled") : qsTr("Disabled") + + onClicked: root.sState.openSubPage(3) + } + + NavRow { + icon: "dock_to_right" + label: qsTr("Sidebar") + last: true + status: Config.sidebar.enabled ? qsTr("Enabled") : qsTr("Disabled") + + onClicked: root.sState.openSubPage(4) + } + } +}