forked from Shinonome/dots-hyprland
107 lines
3.3 KiB
QML
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 {}
|
|
}
|
|
|
|
}
|
|
} |