Files
illogical-impulse/dots/.config/quickshell/ii/modules/sidebarLeft/SidebarLeftContent.qml
T
2025-11-03 18:30:11 +01:00

107 lines
3.3 KiB
QML

import qs.services
import qs.modules.common
import qs.modules.common.widgets
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
import Qt.labs.synchronizer
Item {
id: root
required property var scopeRoot
property int sidebarPadding: 10
anchors.fill: parent
property bool aiChatEnabled: Config.options.policies.ai !== 0
property bool translatorEnabled: Config.options.sidebar.translator.enable
property bool animeEnabled: Config.options.policies.weeb !== 0
property bool animeCloset: Config.options.policies.weeb === 2
property var tabButtonList: [
...(root.aiChatEnabled ? [{"icon": "neurology", "name": Translation.tr("Intelligence")}] : []),
...(root.translatorEnabled ? [{"icon": "translate", "name": Translation.tr("Translator")}] : []),
...((root.animeEnabled && !root.animeCloset) ? [{"icon": "bookmark_heart", "name": Translation.tr("Anime")}] : [])
]
property int tabCount: swipeView.count
function focusActiveItem() {
swipeView.currentItem.forceActiveFocus()
}
Keys.onPressed: (event) => {
if (event.modifiers === Qt.ControlModifier) {
if (event.key === Qt.Key_PageDown) {
swipeView.incrementCurrentIndex()
event.accepted = true;
}
else if (event.key === Qt.Key_PageUp) {
swipeView.decrementCurrentIndex()
event.accepted = true;
}
}
}
ColumnLayout {
anchors {
fill: parent
margins: sidebarPadding
}
spacing: sidebarPadding
Toolbar {
Layout.alignment: Qt.AlignHCenter
enableShadow: false
ToolbarTabBar {
id: tabBar
Layout.alignment: Qt.AlignHCenter
tabButtonList: root.tabButtonList
currentIndex: swipeView.currentIndex
}
}
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
implicitWidth: swipeView.implicitWidth
implicitHeight: swipeView.implicitHeight
radius: Appearance.rounding.normal
color: Appearance.colors.colLayer1
SwipeView { // Content pages
id: swipeView
anchors.fill: parent
spacing: 10
currentIndex: tabBar.currentIndex
clip: true
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Rectangle {
width: swipeView.width
height: swipeView.height
radius: Appearance.rounding.small
}
}
contentChildren: [
...((root.aiChatEnabled || (!root.translatorEnabled && !root.animeEnabled)) ? [aiChat.createObject()] : []),
...(root.translatorEnabled ? [translator.createObject()] : []),
...(root.animeEnabled ? [anime.createObject()] : [])
]
}
}
Component {
id: aiChat
AiChat {}
}
Component {
id: translator
Translator {}
}
Component {
id: anime
Anime {}
}
}
}