Warning, /plasma/plasma-workspace/applets/cameraindicator/contents/ui/FullRepresentation.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2023 Fushan Wen <qydwhotmail@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 import QtQuick
0008 
0009 import org.kde.plasma.plasmoid
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.plasma.components as PlasmaComponents
0012 import org.kde.plasma.extras as PlasmaExtras
0013 import org.kde.pipewire.monitor as Monitor
0014 
0015 PlasmaComponents.Page {
0016     implicitWidth: root.switchWidth
0017     implicitHeight: root.switchHeight
0018 
0019     PlasmaComponents.ScrollView {
0020         anchors.fill: parent
0021         contentWidth: availableWidth - contentItem.leftMargin - contentItem.rightMargin
0022         focus: true
0023 
0024         contentItem: ListView {
0025             id: cameraList
0026 
0027             focus: cameraList.count > 0
0028             model: !root.expanded || monitor.count <= 1 ? null : monitor
0029 
0030             delegate: PlasmaExtras.ExpandableListItem {
0031                 // TODO: switch to PlasmaExtras.ListItem once it has subtitle
0032                 icon: switch (model.state) {
0033                 case Monitor.NodeState.Running:
0034                     return "camera-on-symbolic";
0035                 case Monitor.NodeState.Idle:
0036                     return "camera-ready-symbolic";
0037                 default:
0038                     return "camera-off-symbolic";
0039                 }
0040                 title: model.display || i18nc("@title", "Camera")
0041                 subtitle: switch (model.state) {
0042                 case Monitor.NodeState.Running:
0043                     return i18nc("@info:status", "Active");
0044                 case Monitor.NodeState.Idle:
0045                     return i18nc("@info:status", "Idle");
0046                 case Monitor.NodeState.Error:
0047                     return i18nc("@info:status", "Error");
0048                 case Monitor.NodeState.Creating:
0049                     return i18nc("@info:status", "Creating");
0050                 case Monitor.NodeState.Suspended:
0051                     return i18nc("@info:status", "Suspended");
0052                 default:
0053                     return i18nc("@info:status", "Unknown");
0054                 }
0055             }
0056 
0057             Instantiator {
0058                 active: cameraList.count === 0
0059                 asynchronous: true
0060                 model: monitor.count === 1 ? monitor : 1
0061 
0062                 delegate: PlasmaExtras.PlaceholderMessage {
0063                     parent: cameraList
0064                     anchors.centerIn: parent
0065                     width: parent.width - (Kirigami.Units.gridUnit * 4)
0066                     iconName: Plasmoid.icon
0067                     text: {
0068                         if (monitor.count === 1 && model.state === Monitor.NodeState.Running && model.display) {
0069                             return i18nc("@info:status %1 camera name", "%1 is in use", model.display);
0070                         }
0071                         return root.toolTipSubText;
0072                     }
0073                 }
0074             }
0075         }
0076     }
0077 }