Warning, /plasma/bluedevil/src/applet/package/contents/ui/main.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 
0010 import org.kde.plasma.core as PlasmaCore
0011 import org.kde.kirigami 2.20 as Kirigami
0012 import org.kde.plasma.plasmoid 2.0
0013 import org.kde.plasma.private.bluetooth as PlasmaBt
0014 
0015 import org.kde.bluezqt 1.0 as BluezQt
0016 import org.kde.kcmutils
0017 
0018 PlasmoidItem {
0019     id: bluetoothApplet
0020 
0021     property var connectedDevices: []
0022     property int runningActions: 0
0023     property QtObject btManager: BluezQt.Manager
0024     property alias addDeviceAction: addAction
0025     property alias enableBluetoothAction: enableAction
0026 
0027     switchWidth: Kirigami.Units.gridUnit * 15
0028     switchHeight: Kirigami.Units.gridUnit * 10
0029 
0030     // Only exists because the default CompactRepresentation doesn't expose
0031     // a middle-click action.
0032     // TODO remove once it gains that feature.
0033     compactRepresentation: CompactRepresentation { }
0034     fullRepresentation: FullRepresentation { }
0035 
0036     Plasmoid.status: (btManager.bluetoothOperational) ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus
0037     Plasmoid.busy: runningActions > 0
0038 
0039     Plasmoid.icon: {
0040         if (connectedDevices.length > 0) {
0041             return "network-bluetooth-activated-symbolic";
0042         }
0043         if (!btManager.bluetoothOperational) {
0044             return "network-bluetooth-inactive-symbolic";
0045         }
0046         return "network-bluetooth-symbolic";
0047     }
0048     toolTipMainText: i18n("Bluetooth")
0049     toolTipSubText: {
0050         if (btManager.bluetoothBlocked) {
0051             return i18n("Bluetooth is disabled; middle-click to enable");
0052         }
0053         if (!btManager.bluetoothOperational) {
0054             if (btManager.adapters.length === 0) {
0055                 return i18n("No adapters available");
0056             }
0057             return i18n("Bluetooth is offline");
0058         }
0059 
0060         const hint = i18n("Middle-click to disable Bluetooth");
0061 
0062         if (connectedDevices.length === 0) {
0063             return "%1\n%2".arg(i18n("No connected devices")).arg(hint);
0064 
0065         } else if (connectedDevices.length === 1) {
0066             const device = connectedDevices[0];
0067             const battery = device.battery;
0068             const name = i18n("%1 connected", device.name);
0069             let text = battery
0070                 ? "%1 · %2".arg(name).arg(i18n("%1% Battery", battery.percentage))
0071                 : name
0072             return "%1\n%2".arg(text).arg(hint);
0073 
0074         } else {
0075             let text = i18ncp("Number of connected devices", "%1 connected device", "%1 connected devices", connectedDevices.length);
0076             for (let i = 0; i < connectedDevices.length; ++i) {
0077                 const device = connectedDevices[i];
0078                 const battery = device.battery;
0079                 text += battery
0080                     ? "\n \u2022 %1 · %2".arg(device.name).arg(i18n("%1% Battery", battery.percentage))
0081                     : "\n \u2022 %1".arg(device.name);
0082             }
0083             text += "\n%1".arg(hint);
0084             return text;
0085         }
0086     }
0087 
0088     Connections {
0089         target: btManager
0090 
0091         function onDeviceAdded() {
0092             updateConnectedDevices();
0093         }
0094         function onDeviceRemoved() {
0095             updateConnectedDevices();
0096         }
0097         function onDeviceChanged() {
0098             updateConnectedDevices();
0099         }
0100         function onBluetoothBlockedChanged() {
0101             updateConnectedDevices();
0102         }
0103         function onBluetoothOperationalChanged() {
0104             updateConnectedDevices();
0105         }
0106     }
0107 
0108     function updateConnectedDevices() {
0109         let _connectedDevices = [];
0110         for (let i = 0; i < btManager.devices.length; ++i) {
0111             const device = btManager.devices[i];
0112             if (device.connected) {
0113                 _connectedDevices.push(device);
0114             }
0115         }
0116 
0117         if (connectedDevices != _connectedDevices) {
0118             connectedDevices = _connectedDevices;
0119             connectedDevicesChanged();
0120         }
0121     }
0122 
0123     function toggleBluetooth() {
0124         const enable = !btManager.bluetoothOperational;
0125         btManager.bluetoothBlocked = !enable;
0126 
0127         for (let i = 0; i < btManager.adapters.length; ++i) {
0128             const adapter = btManager.adapters[i];
0129             adapter.powered = enable;
0130         }
0131     }
0132 
0133 
0134     Plasmoid.contextualActions: [
0135         PlasmaCore.Action {
0136             id: addAction
0137             text: i18n("Add New Device…")
0138             icon.name: "list-add-symbolic"
0139             visible: !btManager.bluetoothBlocked
0140             onTriggered: PlasmaBt.LaunchApp.launchWizard()
0141         },
0142         PlasmaCore.Action {
0143             id: enableAction
0144             text: i18n("Enable Bluetooth")
0145             icon.name: "preferences-system-bluetooth-symbolic"
0146             priority: PlasmaCore.Action.LowPriority
0147             checkable: true
0148             checked: btManager.bluetoothOperational
0149             visible: btManager.bluetoothBlocked || btManager.adapters.length > 0
0150             onTriggered: toggleBluetooth()
0151         }
0152     ]
0153 
0154     PlasmaCore.Action {
0155         id: configureAction
0156         text: i18n("Configure &Bluetooth…")
0157         icon.name: "configure-symbolic"
0158         onTriggered: KCMLauncher.openSystemSettings("kcm_bluetooth")
0159     }
0160 
0161     Component.onCompleted: {
0162         Plasmoid.setInternalAction("configure", configureAction);
0163 
0164         updateConnectedDevices();
0165     }
0166 }