import "root:/modules/common" import "root:/modules/common/widgets" import "root:/services" import "./calendar" import "./notifications" import "./todo" import "./volumeMixer" import Qt5Compat.GraphicalEffects import QtQuick import QtQuick.Controls import QtQuick.Layouts import Quickshell Rectangle { id: root radius: Appearance.rounding.normal color: Appearance.colors.colLayer1 property int selectedTab: PersistentStates.sidebar.centerGroup.selectedTab property var tabButtonList: [{"icon": "notifications", "name": qsTr("Notifications")}, {"icon": "volume_up", "name": qsTr("Volume mixer")}] onSelectedTabChanged: { PersistentStateManager.setState("sidebar.centerGroup.selectedTab", selectedTab) } Keys.onPressed: (event) => { if (event.key === Qt.Key_PageDown || event.key === Qt.Key_PageUp) { if (event.key === Qt.Key_PageDown) { PersistentStateManager.setState("sidebar.centerGroup.selectedTab", Math.min(root.selectedTab + 1, root.tabButtonList.length - 1)) } else if (event.key === Qt.Key_PageUp) { PersistentStateManager.setState("sidebar.centerGroup.selectedTab", Math.max(root.selectedTab - 1, 0)) } event.accepted = true; } if (event.modifiers === Qt.ControlModifier) { if (event.key === Qt.Key_Tab) { PersistentStateManager.setState("sidebar.centerGroup.selectedTab", (root.selectedTab + 1) % root.tabButtonList.length); } else if (event.key === Qt.Key_Backtab) { PersistentStateManager.setState("sidebar.centerGroup.selectedTab", (root.selectedTab - 1 + root.tabButtonList.length) % root.tabButtonList.length); } event.accepted = true; } } ColumnLayout { anchors.margins: 5 anchors.fill: parent spacing: 0 PrimaryTabBar { id: tabBar tabButtonList: root.tabButtonList externalTrackedTab: root.selectedTab function onCurrentIndexChanged(currentIndex) { PersistentStateManager.setState("sidebar.centerGroup.selectedTab", currentIndex) } } SwipeView { id: swipeView Layout.topMargin: 5 Layout.fillWidth: true Layout.fillHeight: true currentIndex: root.selectedTab onCurrentIndexChanged: { tabBar.enableIndicatorAnimation = true PersistentStateManager.setState("sidebar.centerGroup.selectedTab", currentIndex) } clip: true layer.enabled: true layer.effect: OpacityMask { maskSource: Rectangle { width: swipeView.width height: swipeView.height radius: Appearance.rounding.small } } NotificationList {} VolumeMixer {} } } }