Warning, /multimedia/plasmatube/src/ui/components/SourceSwitcher.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Layouts
0007 import org.kde.kirigami as Kirigami
0008 import org.kde.kirigamiaddons.delegates as Delegates
0009 import org.kde.kirigamiaddons.labs.components as KirigamiComponents
0010
0011 import org.kde.plasmatube
0012
0013 QQC2.Pane {
0014 id: root
0015
0016 readonly property var selectedSource: PlasmaTube.sourceManager.selectedSource
0017
0018 property alias sourcesListVisible: sources.visible
0019
0020 padding: 0
0021
0022 contentItem: ColumnLayout {
0023 id: content
0024
0025 spacing: 0
0026
0027 QQC2.ItemDelegate {
0028 id: currentSourceDelegate
0029
0030 text: root.selectedSource?.url
0031
0032 Layout.fillWidth: true
0033
0034 contentItem: RowLayout {
0035 spacing: Kirigami.Units.smallSpacing
0036
0037 Delegates.SubtitleContentItem {
0038 itemDelegate: currentSourceDelegate
0039 subtitle: {
0040 switch (root.selectedSource?.type) {
0041 case VideoSource.Invidious:
0042 return i18n("Invidious");
0043 case VideoSource.PeerTube:
0044 return i18n("PeerTube");
0045 case VideoSource.Piped:
0046 return i18n("Piped");
0047 }
0048 }
0049 subtitleItem.textFormat: Text.PlainText
0050
0051 Layout.fillWidth: true
0052 }
0053
0054 QQC2.ToolButton {
0055 text: i18n("Switch Source")
0056 icon.name: "system-switch-user"
0057
0058 display: QQC2.AbstractButton.IconOnly
0059
0060 onClicked: root.sourcesListVisible = !root.sourcesListVisible
0061
0062 QQC2.ToolTip.text: text
0063 QQC2.ToolTip.visible: hovered
0064 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0065
0066 Layout.minimumWidth: Layout.preferredWidth
0067 }
0068 }
0069 }
0070
0071 ListView {
0072 id: sources
0073
0074 model: PlasmaTube.sourceManager
0075 currentIndex: PlasmaTube.sourceManager.selectedIndex
0076
0077 header: Kirigami.Separator {
0078 anchors {
0079 left: parent.left
0080 leftMargin: Kirigami.Units.smallSpacing
0081
0082 right: parent.right
0083 rightMargin: Kirigami.Units.smallSpacing
0084 }
0085 }
0086
0087 footer: QQC2.ItemDelegate {
0088 id: addSourceDelegate
0089
0090 width: parent.width
0091 highlighted: focus
0092 icon {
0093 name: "list-add"
0094 width: Kirigami.Units.iconSizes.medium
0095 height: Kirigami.Units.iconSizes.medium
0096 }
0097 text: i18n("Add Source")
0098
0099 contentItem: Delegates.SubtitleContentItem {
0100 itemDelegate: addSourceDelegate
0101 subtitle: i18n("Add a new video source")
0102 }
0103
0104 onClicked: {
0105 pageStack.pushDialogLayer(Qt.createComponent("org.kde.plasmatube", "WelcomePage"));
0106 root.sourcesListVisible = false
0107 }
0108
0109 Keys.onUpPressed: {
0110 sources.currentIndex = accounts.count - 1
0111 sources.forceActiveFocus()
0112 }
0113 Keys.onDownPressed: {
0114 sources.currentIndex = 0
0115 sources.forceActiveFocus()
0116 }
0117 }
0118
0119 visible: false
0120 onVisibleChanged: if (visible) focus = true
0121 clip: true
0122
0123 keyNavigationEnabled: false
0124 Keys.onDownPressed: {
0125 if (sources.currentIndex === sources.count - 1) {
0126 addAccount.forceActiveFocus()
0127 sources.currentIndex = -1
0128 } else {
0129 sources.incrementCurrentIndex()
0130 }
0131 }
0132 Keys.onUpPressed: {
0133 if (sources.currentIndex === 0) {
0134 addAccount.forceActiveFocus()
0135 sources.currentIndex = -1
0136 } else {
0137 sources.decrementCurrentIndex()
0138 }
0139 }
0140
0141 Keys.onReleased: if (event.key == Qt.Key_Escape) {
0142 root.sourcesListVisible = false
0143 }
0144
0145 Layout.fillWidth: true
0146 Layout.preferredHeight: contentHeight
0147 Layout.topMargin: Kirigami.Units.smallSpacing
0148
0149 delegate: QQC2.ItemDelegate {
0150 id: sourceDelegate
0151
0152 required property int index
0153 required property var source
0154
0155 text: source.url
0156 width: ListView.view.width
0157
0158 onClicked: {
0159 if (PlasmaTube.sourceManager.selectedSource !== sourceDelegate.source) {
0160 PlasmaTube.sourceManager.selectedSource = sourceDelegate.source;
0161 sources.currentIndex = sourceDelegate.index;
0162 }
0163 root.sourcesListVisible = false
0164 }
0165 }
0166 }
0167
0168 }
0169 }