import QtQuick import "../services" as S Column { id: root required property color accentColor Repeater { model: S.BluetoothService.devices delegate: Item { id: entry required property var modelData required property int index readonly property bool _pending: S.BluetoothService.pendingMac === entry.modelData.mac width: root.width height: 32 Rectangle { anchors.fill: parent anchors.leftMargin: 4 anchors.rightMargin: 4 color: entryHover.hovered ? S.Theme.base02 : "transparent" radius: S.Theme.radius } Text { id: btIcon anchors.left: parent.left anchors.leftMargin: 12 anchors.verticalCenter: parent.verticalCenter text: "\uF294" color: entry._pending || entry.modelData.connected ? root.accentColor : S.Theme.base04 font.pixelSize: S.Theme.fontSize + 1 font.family: S.Theme.iconFontFamily } Text { anchors.left: btIcon.right anchors.leftMargin: 8 anchors.right: _statusLabel.left anchors.rightMargin: 4 anchors.verticalCenter: parent.verticalCenter text: entry.modelData.name color: entry._pending || entry.modelData.connected ? root.accentColor : S.Theme.base05 font.pixelSize: S.Theme.fontSize font.family: S.Theme.fontFamily font.bold: entry.modelData.connected || entry._pending elide: Text.ElideRight } Text { id: _statusLabel anchors.right: parent.right anchors.rightMargin: 12 anchors.verticalCenter: parent.verticalCenter text: entry._pending ? (entry.modelData.connected ? "disconnecting..." : "connecting...") : (entry.modelData.battery >= 0 ? entry.modelData.battery + "%" : "") color: S.Theme.base04 font.pixelSize: S.Theme.fontSize - 1 font.family: S.Theme.fontFamily font.italic: entry._pending width: text ? implicitWidth : 0 } // Pulse animation while pending SequentialAnimation on opacity { loops: Animation.Infinite running: entry._pending NumberAnimation { to: 0.5 duration: 400 easing.type: Easing.InOutQuad } NumberAnimation { to: 1 duration: 400 easing.type: Easing.InOutQuad } onRunningChanged: if (!running) entry.opacity = 1 } HoverHandler { id: entryHover cursorShape: Qt.PointingHandCursor } TapHandler { onTapped: { if (!entry._pending) S.BluetoothService.toggleDevice(entry.modelData.mac, !entry.modelData.connected); } } } } Text { visible: S.BluetoothService.devices.length === 0 width: root.width height: 32 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: S.BluetoothService.enabled ? "No paired devices" : "Bluetooth is off" color: S.Theme.base04 font.pixelSize: S.Theme.fontSize font.family: S.Theme.fontFamily } }