Warning, /plasma/plasma-mobile/components/mobileshell/qml/volumeosd/AudioApplet.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  *  SPDX-FileCopyrightText: 2014-2015 Harald Sitter <sitter@kde.org>
0003  *  SPDX-FileCopyrightText: 2021 Devin Lin <espidev@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 import QtQuick
0009 import QtQuick.Layouts
0010 import QtQuick.Window
0011 import QtQuick.Controls as Controls
0012 
0013 import org.kde.kirigami 2.20 as Kirigami
0014 import org.kde.plasma.components 3.0 as PlasmaComponents
0015 import org.kde.kquickcontrolsaddons as KQCAddons
0016 import org.kde.plasma.private.mobileshell as MobileShell
0017 
0018 import org.kde.plasma.private.volume
0019 
0020 // capture presses on the audio applet so it doesn't close the overlay
0021 ColumnLayout {
0022     spacing: 0
0023         
0024     PulseObjectFilterModel {
0025         id: paSinkFilterModel
0026         sortRoleName: "SortByDefault"
0027         sortOrder: Qt.DescendingOrder
0028         filterOutInactiveDevices: true
0029         sourceModel: MobileShell.AudioInfo.paSinkModel
0030     }
0031 
0032     SourceModel {
0033         id: paSourceModel
0034     }
0035 
0036     PulseObjectFilterModel {
0037         id: paSourceFilterModel
0038         sortRoleName: "SortByDefault"
0039         sortOrder: Qt.DescendingOrder
0040         filterOutInactiveDevices: true
0041         sourceModel: paSourceModel
0042     }
0043 
0044     CardModel {
0045         id: paCardModel
0046     }
0047 
0048     // ui elements
0049     
0050     PopupCard {
0051         Layout.alignment: Qt.AlignHCenter
0052         Layout.bottomMargin: Kirigami.Units.gridUnit
0053         contentItem: ColumnLayout {
0054             anchors.rightMargin: Kirigami.Units.smallSpacing
0055             anchors.leftMargin: Kirigami.Units.smallSpacing
0056             
0057             Kirigami.Heading {
0058                 level: 2
0059                 text: i18n("Outputs")
0060                 Layout.fillWidth: true
0061                 Layout.topMargin: Kirigami.Units.smallSpacing
0062                 Layout.leftMargin: Kirigami.Units.smallSpacing
0063             }
0064             
0065             Repeater {
0066                 id: sinkView
0067                 Layout.fillWidth: true
0068                 
0069                 model: paSinkFilterModel
0070                 delegate: DeviceListItem {
0071                     Layout.fillWidth: true
0072                     Layout.margins: Kirigami.Units.smallSpacing
0073                     type: "sink"
0074                     onlyone: sinkView.count === 1
0075                 }
0076             }
0077         }
0078     }
0079     
0080     PopupCard {
0081         Layout.alignment: Qt.AlignHCenter
0082         Layout.bottomMargin: Kirigami.Units.gridUnit
0083         contentItem: ColumnLayout {
0084             anchors.rightMargin: Kirigami.Units.smallSpacing
0085             anchors.leftMargin: Kirigami.Units.smallSpacing
0086             
0087             Kirigami.Heading {
0088                 level: 2
0089                 text: i18n("Inputs")
0090                 Layout.fillWidth: true
0091                 Layout.topMargin: Kirigami.Units.smallSpacing
0092                 Layout.leftMargin: Kirigami.Units.smallSpacing
0093             }
0094             
0095             Repeater {
0096                 id: sourceView
0097                 Layout.fillWidth: true
0098                 
0099                 model: paSourceFilterModel
0100                 delegate: DeviceListItem {
0101                     Layout.fillWidth: true
0102                     Layout.margins: Kirigami.Units.smallSpacing
0103                     type: "source"
0104                     onlyone: sinkView.count === 1
0105                 }
0106             }
0107         }
0108     }
0109     
0110     PopupCard {
0111         visible: sourceInputView.model.count + sourceMediaInputView.model.count !== 0
0112         Layout.alignment: Qt.AlignHCenter
0113         Layout.bottomMargin: Kirigami.Units.gridUnit
0114         contentItem: ColumnLayout {
0115             anchors.rightMargin: Kirigami.Units.smallSpacing
0116             anchors.leftMargin: Kirigami.Units.smallSpacing
0117             
0118             Kirigami.Heading {
0119                 level: 2
0120                 text: i18n("Playback Streams")
0121                 Layout.fillWidth: true
0122                 Layout.topMargin: Kirigami.Units.smallSpacing
0123                 Layout.leftMargin: Kirigami.Units.smallSpacing
0124             }
0125             
0126             Repeater {
0127                 id: sourceMediaInputView
0128                 Layout.fillWidth: true
0129                 
0130                 model: PulseObjectFilterModel {
0131                     filters: [ { role: "Name", value: "sink-input-by-media-role:event" } ]
0132                     sourceModel: StreamRestoreModel {}
0133                 }
0134                 delegate: StreamListItem {
0135                     Layout.fillWidth: true
0136                     Layout.margins: Kirigami.Units.smallSpacing
0137                     width: sourceOutputView.width
0138                     type: "sink-input"
0139                     devicesModel: sourceView.model
0140                 }
0141             }
0142             
0143             Repeater {
0144                 id: sourceInputView
0145                 Layout.fillWidth: true
0146                 
0147                 model: PulseObjectFilterModel {
0148                     filters: [ { role: "VirtualStream", value: false } ]
0149                     sourceModel: SinkInputModel {}
0150                 }
0151 
0152                 delegate: StreamListItem {
0153                     Layout.fillWidth: true
0154                     Layout.margins: Kirigami.Units.smallSpacing
0155                     width: sourceOutputView.width
0156                     type: "sink-input"
0157                     devicesModel: sourceView.model
0158                 }
0159             }
0160         }
0161     }
0162     
0163     PopupCard {
0164         visible: sourceOutputView.model.count !== 0
0165         Layout.alignment: Qt.AlignHCenter
0166         Layout.bottomMargin: Kirigami.Units.gridUnit
0167         contentItem: ColumnLayout {
0168             anchors.rightMargin: Kirigami.Units.smallSpacing
0169             anchors.leftMargin: Kirigami.Units.smallSpacing
0170             
0171             Kirigami.Heading {
0172                 level: 2
0173                 text: i18n("Recording Streams")
0174                 Layout.fillWidth: true
0175                 Layout.topMargin: Kirigami.Units.smallSpacing
0176                 Layout.leftMargin: Kirigami.Units.smallSpacing
0177             }
0178             
0179             Repeater {
0180                 id: sourceOutputView
0181                 Layout.fillWidth: true
0182                 
0183                 model: PulseObjectFilterModel {
0184                     filters: [ { role: "VirtualStream", value: false } ]
0185                     sourceModel: SourceOutputModel {}
0186                 }
0187                 delegate: StreamListItem {
0188                     Layout.fillWidth: true
0189                     Layout.margins: Kirigami.Units.smallSpacing
0190                     width: sourceOutputView.width
0191                     type: "source-output"
0192                     devicesModel: sourceView.model
0193                 }
0194             }
0195         }
0196     }
0197 }