mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-05 23:09:26 -05:00
113 lines
3.8 KiB
QML
113 lines
3.8 KiB
QML
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import qs.services
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
|
|
DialogListItem {
|
|
id: root
|
|
required property var device
|
|
property bool expanded: false
|
|
pointingHandCursor: !expanded
|
|
|
|
onClicked: expanded = !expanded
|
|
altAction: () => expanded = !expanded
|
|
|
|
component ActionButton: DialogButton {
|
|
colBackground: Appearance.colors.colPrimary
|
|
colBackgroundHover: Appearance.colors.colPrimaryHover
|
|
colRipple: Appearance.colors.colPrimaryActive
|
|
colText: Appearance.colors.colOnPrimary
|
|
}
|
|
|
|
contentItem: ColumnLayout {
|
|
anchors {
|
|
fill: parent
|
|
topMargin: root.verticalPadding
|
|
leftMargin: root.horizontalPadding
|
|
rightMargin: root.horizontalPadding
|
|
}
|
|
spacing: 0
|
|
|
|
RowLayout {
|
|
// Name
|
|
spacing: 10
|
|
|
|
MaterialSymbol {
|
|
iconSize: Appearance.font.pixelSize.larger
|
|
text: Icons.getBluetoothDeviceMaterialSymbol(root.device?.icon || "")
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
}
|
|
|
|
ColumnLayout {
|
|
spacing: 2
|
|
Layout.fillWidth: true
|
|
StyledText {
|
|
Layout.fillWidth: true
|
|
color: Appearance.colors.colOnSurfaceVariant
|
|
elide: Text.ElideRight
|
|
text: root.device?.name || Translation.tr("Unknown device")
|
|
}
|
|
StyledText {
|
|
visible: (root.device?.connected || root.device?.paired) ?? false
|
|
Layout.fillWidth: true
|
|
font.pixelSize: Appearance.font.pixelSize.smaller
|
|
color: Appearance.colors.colSubtext
|
|
elide: Text.ElideRight
|
|
text: {
|
|
if (!root.device?.paired) return "";
|
|
let statusText = root.device?.connected ? Translation.tr("Connected") : Translation.tr("Paired");
|
|
if (!root.device?.batteryAvailable) return statusText;
|
|
statusText += ` • ${Math.round(root.device?.battery * 100)}%`;
|
|
return statusText;
|
|
}
|
|
}
|
|
}
|
|
|
|
MaterialSymbol {
|
|
text: "keyboard_arrow_down"
|
|
iconSize: Appearance.font.pixelSize.larger
|
|
color: Appearance.colors.colOnLayer3
|
|
rotation: root.expanded ? 180 : 0
|
|
Behavior on rotation {
|
|
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
|
}
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
visible: root.expanded
|
|
Layout.topMargin: 8
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
ActionButton {
|
|
buttonText: root.device?.connected ? Translation.tr("Disconnect") : Translation.tr("Connect")
|
|
|
|
onClicked: {
|
|
if (root.device?.connected) {
|
|
root.device.disconnect();
|
|
} else {
|
|
root.device.connect();
|
|
}
|
|
}
|
|
}
|
|
ActionButton {
|
|
visible: root.device?.paired ?? false
|
|
colBackground: Appearance.colors.colError
|
|
colBackgroundHover: Appearance.colors.colErrorHover
|
|
colRipple: Appearance.colors.colErrorActive
|
|
colText: Appearance.colors.colOnError
|
|
|
|
buttonText: Translation.tr("Forget")
|
|
onClicked: {
|
|
root.device?.forget();
|
|
}
|
|
}
|
|
}
|
|
Item {
|
|
Layout.fillHeight: true
|
|
}
|
|
}
|
|
}
|