Warning, /plasma/plasma-bigscreen/kcms/audio-device-chooser/ui/DeviceChooserPage.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2019-2020 Aditya Mehra <aix.m@outlook.com>
0003
0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006
0007 import QtQuick 2.14
0008 import QtQuick.Layouts 1.14
0009 import QtQuick.Controls 2.14 as Controls
0010 import QtQuick.Window 2.14
0011 import org.kde.plasma.core 2.0 as PlasmaCore
0012 import org.kde.kquickcontrolsaddons 2.0
0013 import org.kde.kirigami 2.12 as Kirigami
0014 import org.kde.plasma.private.volume 0.1
0015 import org.kde.mycroft.bigscreen 1.0 as BigScreen
0016
0017 import "delegates" as Delegates
0018 import "views" as Views
0019
0020 FocusScope {
0021 id: mainFlick
0022
0023 Rectangle {
0024 id: headerAreaTop
0025 anchors.left: parent.left
0026 anchors.right: parent.right
0027 anchors.leftMargin: -Kirigami.Units.largeSpacing
0028 anchors.rightMargin: -Kirigami.Units.largeSpacing
0029 height: parent.height * 0.075
0030 z: 10
0031 gradient: Gradient {
0032 GradientStop { position: 0.1; color: Qt.rgba(0, 0, 0, 0.5) }
0033 GradientStop { position: 0.9; color: Qt.rgba(0, 0, 0, 0.25) }
0034 }
0035
0036 Kirigami.Heading {
0037 level: 1
0038 anchors.fill: parent
0039 anchors.topMargin: Kirigami.Units.largeSpacing
0040 anchors.leftMargin: Kirigami.Units.largeSpacing * 2
0041 anchors.bottomMargin: Kirigami.Units.largeSpacing
0042 color: Kirigami.Theme.textColor
0043 text: "Audio Settings"
0044 }
0045 }
0046
0047 Item {
0048 id: footerMain
0049 anchors.left: parent.left
0050 anchors.right: settingsView.left
0051 anchors.leftMargin: -Kirigami.Units.largeSpacing
0052 anchors.bottom: parent.bottom
0053 implicitHeight: Kirigami.Units.gridUnit * 2
0054
0055 Controls.Button {
0056 id: kcmcloseButton
0057 implicitHeight: Kirigami.Units.gridUnit * 2
0058 anchors.left: parent.left
0059 anchors.right: parent.right
0060
0061 background: Rectangle {
0062 color: kcmcloseButton.activeFocus ? Kirigami.Theme.highlightColor : Kirigami.Theme.backgroundColor
0063 }
0064
0065 contentItem: Item {
0066 RowLayout {
0067 anchors.centerIn: parent
0068 Kirigami.Icon {
0069 Layout.preferredWidth: PlasmaCore.Units.iconSizes.small
0070 Layout.preferredHeight: PlasmaCore.Units.iconSizes.small
0071 source: "window-close"
0072 }
0073 Controls.Label {
0074 text: i18n("Exit")
0075 }
0076 }
0077 }
0078
0079 Keys.onUpPressed: root.activateDeviceView()
0080
0081 onClicked: {
0082 Window.window.close()
0083 }
0084
0085 Keys.onReturnPressed: {
0086 Window.window.close()
0087 }
0088 }
0089 }
0090
0091
0092 SourceModel {
0093 id: paSourceModel
0094 }
0095
0096 SinkModel {
0097 id: paSinkModel
0098 }
0099
0100 Item {
0101 anchors.top: headerAreaTop.bottom
0102 anchors.topMargin: Kirigami.Units.largeSpacing * 2
0103 width: parent.width - settingsView.width
0104 anchors.bottom: footerMain.top
0105 clip: true
0106
0107 ColumnLayout {
0108 id: contentLayout
0109 width: parent.width
0110 property Item currentSection
0111 y: currentSection ? (currentSection.y > parent.height / 2 ? -currentSection.y + Kirigami.Units.gridUnit * 3 : 0) : 0
0112 anchors.left: parent.left
0113 anchors.leftMargin: Kirigami.Units.largeSpacing
0114
0115 Behavior on y {
0116 NumberAnimation {
0117 duration: Kirigami.Units.longDuration * 2
0118 easing.type: Easing.InOutQuad
0119 }
0120 }
0121
0122 BigScreen.TileView {
0123 id: sinkView
0124 model: paSinkModel
0125 focus: true
0126 Layout.alignment: Qt.AlignTop
0127 title: i18n("Playback Devices")
0128 currentIndex: 0
0129 onActiveFocusChanged: {
0130 if(activeFocus){
0131 contentLayout.currentSection = sinkView
0132 settingsViewDetails.model = sinkView.model
0133 settingsViewDetails.positionViewAtIndex(currentIndex, ListView.Center);
0134 settingsViewDetails.checkPlayBack = true
0135 settingsViewDetails.typeDevice = "sink"
0136 }
0137 }
0138 delegate: Delegates.AudioDelegate {
0139 isPlayback: true
0140 type: "sink"
0141 }
0142 navigationDown: sourceView.visible ? sourceView : kcmcloseButton
0143
0144 onCurrentItemChanged: {
0145 settingsViewDetails.currentIndex = sinkView.currentIndex
0146 settingsViewDetails.positionViewAtIndex(sinkView.currentIndex, ListView.Center);
0147 }
0148 }
0149
0150 Item {
0151 id: extraSpacing
0152 Layout.preferredHeight: Kirigami.Units.largeSpacing
0153 Layout.fillWidth: true
0154 }
0155
0156 BigScreen.TileView {
0157 id: sourceView
0158 model: paSourceModel
0159 title: i18n("Recording Devices")
0160 currentIndex: 0
0161 focus: false
0162 Layout.alignment: Qt.AlignTop
0163 visible: sourceView.view.count > 0 ? 1 : 0
0164 onActiveFocusChanged: {
0165 if(activeFocus){
0166 contentLayout.currentSection = sourceView
0167 settingsViewDetails.model = sourceView.model
0168 settingsViewDetails.positionViewAtIndex(currentIndex, ListView.Center);
0169 settingsViewDetails.checkPlayBack = false
0170 settingsViewDetails.typeDevice = "source"
0171 }
0172 }
0173 delegate: Delegates.AudioDelegate {
0174 isPlayback: false
0175 type: "source"
0176 }
0177 navigationUp: sinkView
0178 navigationDown: kcmcloseButton
0179
0180 onCurrentItemChanged: {
0181 settingsViewDetails.currentIndex = sourceView.currentIndex
0182 settingsViewDetails.positionViewAtIndex(currentIndex, ListView.Center);
0183 }
0184 }
0185
0186 Component.onCompleted: {
0187 sinkView.forceActiveFocus();
0188 }
0189
0190 Connections {
0191 target: root
0192 onActivateDeviceView: {
0193 sinkView.forceActiveFocus();
0194 }
0195 }
0196
0197 Item {
0198 Layout.preferredHeight: Kirigami.Units.gridUnit * 5
0199 }
0200 }
0201 }
0202
0203 Kirigami.Separator {
0204 id: viewSept
0205 anchors.right: settingsView.left
0206 anchors.top: settingsView.top
0207 anchors.bottom: settingsView.bottom
0208 width: 1
0209 }
0210
0211 Rectangle {
0212 id: settingsView
0213 anchors.top: parent.top
0214 anchors.right: parent.right
0215 anchors.rightMargin: -Kirigami.Units.smallSpacing
0216 height: parent.height
0217 width: Kirigami.Units.gridUnit * 15
0218 color: Kirigami.Theme.backgroundColor
0219
0220 ListView {
0221 id: settingsViewDetails
0222 anchors.fill: parent
0223 anchors.topMargin: parent.height * 0.075
0224 layoutDirection: Qt.LeftToRight
0225 orientation: ListView.Horizontal
0226 snapMode: ListView.SnapOneItem;
0227 highlightRangeMode: ListView.StrictlyEnforceRange
0228 highlightFollowsCurrentItem: true
0229 spacing: Kirigami.Units.largeSpacing
0230 clip: true
0231 interactive: false
0232 implicitHeight: settingsView.implicitHeight
0233 currentIndex: 0
0234 property bool checkPlayBack
0235 property string typeDevice
0236 delegate: SettingsItem {
0237 isPlayback: settingsViewDetails.checkPlayBack
0238 type: settingsViewDetails.typeDevice
0239 }
0240 }
0241 }
0242 }