Warning, /plasma/bluedevil/src/applet/package/contents/ui/FullRepresentation.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2013-2014 Jan Grulich <jgrulich@redhat.com> 0003 SPDX-FileCopyrightText: 2014-2015 David Rosca <nowrep@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 import QtQuick 2.15 0009 import QtQuick.Controls 2.15 0010 0011 import org.kde.plasma.components 3.0 as PlasmaComponents3 0012 import org.kde.kirigami 2.20 as Kirigami 0013 import org.kde.ksvg 1.0 as KSvg 0014 import org.kde.plasma.extras 2.0 as PlasmaExtras 0015 import org.kde.plasma.plasmoid 2.0 0016 import org.kde.plasma.private.bluetooth as PlasmaBt 0017 0018 import org.kde.bluezqt 1.0 as BluezQt 0019 0020 PlasmaExtras.Representation { 0021 id: root 0022 0023 readonly property bool emptyList: btManager.devices.length === 0 0024 0025 implicitWidth: Kirigami.Units.gridUnit * 24 0026 implicitHeight: Kirigami.Units.gridUnit * 24 0027 0028 focus: true 0029 collapseMarginsHint: true 0030 0031 Keys.onDownPressed: { 0032 if (listView.count === 0) { 0033 return; 0034 } 0035 if (listView.currentIndex < 0 || toolbar.onSwitch.activeFocus) { 0036 listView.incrementCurrentIndex(); 0037 listView.currentItem.forceActiveFocus(); 0038 } else { 0039 event.accepted = false; 0040 } 0041 } 0042 0043 Action { 0044 id: addBluetoothDeviceAction 0045 0046 enabled: root.emptyList 0047 0048 text: bluetoothApplet.addDeviceAction.text 0049 icon.name: "list-add-symbolic" 0050 0051 onTriggered: bluetoothApplet.addDeviceAction.trigger() 0052 } 0053 0054 Action { 0055 id: enableBluetoothAction 0056 0057 enabled: btManager.bluetoothBlocked 0058 0059 text: i18n("Enable") 0060 icon.name: "preferences-system-bluetooth-symbolic" 0061 0062 onTriggered: bluetoothApplet.toggleBluetooth() 0063 } 0064 0065 header: Toolbar { 0066 id: toolbar 0067 visible: btManager.adapters.length > 0 0068 focus: true 0069 } 0070 0071 PlasmaComponents3.ScrollView { 0072 id: scrollView 0073 anchors.fill: parent 0074 0075 // HACK: workaround for https://bugreports.qt.io/browse/QTBUG-83890 0076 PlasmaComponents3.ScrollBar.horizontal.policy: PlasmaComponents3.ScrollBar.AlwaysOff 0077 0078 contentWidth: availableWidth - contentItem.leftMargin - contentItem.rightMargin 0079 0080 contentItem: ListView { 0081 id: listView 0082 readonly property var devicesModel: PlasmaBt.DevicesProxyModel { 0083 id: devicesModel 0084 sourceModel: BluezQt.DevicesModel { } 0085 } 0086 model: btManager.adapters.length > 0 && !btManager.bluetoothBlocked ? devicesModel : null 0087 currentIndex: -1 0088 boundsBehavior: Flickable.StopAtBounds 0089 topMargin: Kirigami.Units.smallSpacing * 2 0090 bottomMargin: Kirigami.Units.smallSpacing * 2 0091 leftMargin: Kirigami.Units.smallSpacing * 2 0092 rightMargin: Kirigami.Units.smallSpacing * 2 0093 spacing: Kirigami.Units.smallSpacing 0094 0095 section.property: "Section" 0096 // We want to hide the section delegate for the "Connected" 0097 // group because it's unnecessary; all we want to do here is 0098 // separate the connected devices from the available ones 0099 section.delegate: Loader { 0100 active: section !== "Connected" && bluetoothApplet.connectedDevices.length > 0 0101 // Need to manually set the height or else the loader takes up 0102 // space after the first time it unloads a previously-loaded item 0103 height: active ? Kirigami.Units.gridUnit : 0 0104 0105 // give us 2 frames to try and figure out a layout, this reduces jumpyness quite a bit but doesn't 0106 // entirely eliminate it https://bugs.kde.org/show_bug.cgi?id=438610 0107 Behavior on height { PropertyAnimation { duration: 32 } } 0108 0109 sourceComponent: Item { 0110 width: listView.width - Kirigami.Units.smallSpacing * 4 0111 height: Kirigami.Units.gridUnit 0112 0113 KSvg.SvgItem { 0114 width: parent.width - Kirigami.Units.gridUnit * 2 0115 anchors.centerIn: parent 0116 id: separatorLine 0117 imagePath: "widgets/line" 0118 elementId: "horizontal-line" 0119 } 0120 } 0121 } 0122 highlight: PlasmaExtras.Highlight {} 0123 highlightMoveDuration: 0 0124 highlightResizeDuration: 0 0125 delegate: DeviceItem {} 0126 0127 Keys.onUpPressed: { 0128 if (listView.currentIndex === 0) { 0129 listView.currentIndex = -1; 0130 toolbar.onSwitch.forceActiveFocus(Qt.BacktabFocusReason); 0131 } else { 0132 event.accepted = false; 0133 } 0134 } 0135 0136 Loader { 0137 anchors.centerIn: parent 0138 width: parent.width - (4 * Kirigami.Units.gridUnit) 0139 active: BluezQt.Manager.rfkill.state === BluezQt.Rfkill.Unknown || btManager.bluetoothBlocked || root.emptyList 0140 sourceComponent: PlasmaExtras.PlaceholderMessage { 0141 iconName: BluezQt.Manager.rfkill.state === BluezQt.Rfkill.Unknown || btManager.bluetoothBlocked ? "network-bluetooth" : "edit-none" 0142 0143 text: { 0144 // We cannot use the adapter count here because that can be zero when 0145 // bluetooth is disabled even when there are physical devices 0146 if (BluezQt.Manager.rfkill.state === BluezQt.Rfkill.Unknown) { 0147 return i18n("No Bluetooth adapters available"); 0148 } else if (btManager.bluetoothBlocked) { 0149 return i18n("Bluetooth is disabled"); 0150 } else if (root.emptyList) { 0151 return i18n("No devices found"); 0152 } else { 0153 return ""; 0154 } 0155 } 0156 0157 helpfulAction: { 0158 if (BluezQt.Manager.rfkill.state === BluezQt.Rfkill.Unknown) { 0159 return null; 0160 } else if (btManager.bluetoothBlocked) { 0161 return enableBluetoothAction; 0162 } else if (root.emptyList) { 0163 return addBluetoothDeviceAction; 0164 } else { 0165 return null; 0166 } 0167 } 0168 } 0169 } 0170 } 0171 } 0172 }