diff options
| author | Nippy <nippy@rp1.hu> | 2026-05-09 13:33:09 +0200 |
|---|---|---|
| committer | Nippy <nippy@rp1.hu> | 2026-05-09 13:33:09 +0200 |
| commit | a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5 (patch) | |
| tree | 1a8769217f84bfe9d6216fafaadaf8cdd876d457 /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/ControlCenter/Details/BluetoothCodecSelector.qml | |
| parent | 34b9c34f982b2596cfa9e368a2d7f74e9a17477c (diff) | |
| download | RaveOS-PKGBUILD-a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5.tar.gz RaveOS-PKGBUILD-a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5.zip | |
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/ControlCenter/Details/BluetoothCodecSelector.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/ControlCenter/Details/BluetoothCodecSelector.qml | 332 |
1 files changed, 0 insertions, 332 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/ControlCenter/Details/BluetoothCodecSelector.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/ControlCenter/Details/BluetoothCodecSelector.qml deleted file mode 100644 index 0cad08c..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/ControlCenter/Details/BluetoothCodecSelector.qml +++ /dev/null @@ -1,332 +0,0 @@ -import QtQuick -import qs.Common -import qs.Services -import qs.Widgets - -Item { - id: root - - LayoutMirroring.enabled: I18n.isRtl - LayoutMirroring.childrenInherit: true - - property var device: null - property bool modalVisible: false - property var parentItem - property var availableCodecs: [] - property string currentCodec: "" - property bool isLoading: false - - readonly property bool deviceValid: device !== null && device.connected && BluetoothService.isAudioDevice(device) - - signal codecSelected(string deviceAddress, string codecName) - - function show(bluetoothDevice) { - if (!bluetoothDevice?.connected) - return; - if (!BluetoothService.isAudioDevice(bluetoothDevice)) - return; - device = bluetoothDevice; - isLoading = true; - availableCodecs = []; - currentCodec = ""; - visible = true; - modalVisible = true; - queryCodecs(); - Qt.callLater(() => { - focusScope.forceActiveFocus(); - }); - } - - function hide() { - modalVisible = false; - Qt.callLater(() => { - visible = false; - device = null; - }); - } - - function queryCodecs() { - if (!deviceValid) { - hide(); - return; - } - - const capturedDevice = device; - const capturedAddress = device.address; - - BluetoothService.getAvailableCodecs(capturedDevice, function (codecs, current) { - if (!root.deviceValid || root.device?.address !== capturedAddress) - return; - availableCodecs = codecs; - currentCodec = current; - isLoading = false; - }); - } - - function selectCodec(profileName) { - if (!deviceValid || isLoading) - return; - - const capturedDevice = device; - const capturedAddress = device.address; - - const selectedCodec = availableCodecs.find(c => c.profile === profileName); - if (!selectedCodec) - return; - - BluetoothService.updateDeviceCodec(capturedAddress, selectedCodec.name); - codecSelected(capturedAddress, selectedCodec.name); - - isLoading = true; - BluetoothService.switchCodec(capturedDevice, profileName, function (success, message) { - if (!root.device || root.device.address !== capturedAddress) - return; - - isLoading = false; - if (success) { - ToastService.showToast(message, ToastService.levelInfo); - Qt.callLater(root.hide); - return; - } - ToastService.showToast(message, ToastService.levelError); - }); - } - - onDeviceValidChanged: { - if (modalVisible && !deviceValid) { - hide(); - } - } - - visible: false - anchors.fill: parent - z: 2000 - - MouseArea { - id: modalBlocker - anchors.fill: parent - visible: modalVisible - enabled: modalVisible - hoverEnabled: true - preventStealing: true - propagateComposedEvents: false - - onClicked: root.hide() - onWheel: wheel => { - wheel.accepted = true; - } - onPositionChanged: mouse => { - mouse.accepted = true; - } - } - - Rectangle { - id: modalBackground - anchors.fill: parent - color: Qt.rgba(0, 0, 0, 0.5) - opacity: modalVisible ? 1 : 0 - - Behavior on opacity { - NumberAnimation { - duration: Theme.mediumDuration - easing.type: Theme.emphasizedEasing - } - } - } - - FocusScope { - id: focusScope - - anchors.fill: parent - focus: root.visible - enabled: root.visible - - Keys.onEscapePressed: { - root.hide(); - event.accepted = true; - } - } - - Rectangle { - id: modalContent - anchors.centerIn: parent - width: 320 - height: contentColumn.implicitHeight + Theme.spacingL * 2 - radius: Theme.cornerRadius - color: Theme.withAlpha(Theme.surfaceContainer, Theme.popupTransparency) - border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) - border.width: 0 - opacity: modalVisible ? 1 : 0 - scale: modalVisible ? 1 : 0.9 - - MouseArea { - anchors.fill: parent - hoverEnabled: true - preventStealing: true - propagateComposedEvents: false - onClicked: mouse => { - mouse.accepted = true; - } - onWheel: wheel => { - wheel.accepted = true; - } - onPositionChanged: mouse => { - mouse.accepted = true; - } - } - - Column { - id: contentColumn - - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - anchors.margins: Theme.spacingL - spacing: Theme.spacingM - - Row { - width: parent.width - spacing: Theme.spacingM - - DankIcon { - name: device ? BluetoothService.getDeviceIcon(device) : "headset" - size: Theme.iconSize + 4 - color: Theme.primary - anchors.verticalCenter: parent.verticalCenter - } - - Column { - anchors.verticalCenter: parent.verticalCenter - spacing: 2 - - StyledText { - text: device ? (device.name || device.deviceName) : "" - font.pixelSize: Theme.fontSizeLarge - color: Theme.surfaceText - font.weight: Font.Medium - } - - StyledText { - text: I18n.tr("Audio Codec Selection") - font.pixelSize: Theme.fontSizeSmall - color: Theme.surfaceTextMedium - } - } - } - - Rectangle { - width: parent.width - height: 1 - color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.05) - } - - StyledText { - text: isLoading ? I18n.tr("Loading codecs...") : I18n.tr("Current: %1").arg(currentCodec) - font.pixelSize: Theme.fontSizeSmall - color: isLoading ? Theme.primary : Theme.surfaceTextMedium - font.weight: Font.Medium - } - - Column { - width: parent.width - spacing: Theme.spacingXS - visible: !isLoading - - Repeater { - model: availableCodecs - - Rectangle { - width: parent.width - height: 48 - radius: Theme.cornerRadius - color: { - if (modelData.name === currentCodec) - return Theme.withAlpha(Theme.surfaceContainerHighest, Theme.popupTransparency); - else if (codecMouseArea.containsMouse) - return Theme.surfaceHover; - else - return "transparent"; - } - border.color: "transparent" - border.width: 0 - - Row { - anchors.left: parent.left - anchors.leftMargin: Theme.spacingM - anchors.verticalCenter: parent.verticalCenter - spacing: Theme.spacingS - - Rectangle { - width: 6 - height: 6 - radius: 3 - color: modelData.qualityColor - anchors.verticalCenter: parent.verticalCenter - } - - Column { - anchors.verticalCenter: parent.verticalCenter - spacing: 2 - - StyledText { - text: modelData.name - font.pixelSize: Theme.fontSizeMedium - color: modelData.name === currentCodec ? Theme.primary : Theme.surfaceText - font.weight: modelData.name === currentCodec ? Font.Medium : Font.Normal - } - - StyledText { - text: modelData.description - font.pixelSize: Theme.fontSizeSmall - color: Theme.surfaceTextMedium - } - } - } - - DankIcon { - name: "check" - size: Theme.iconSize - 4 - color: Theme.primary - anchors.right: parent.right - anchors.rightMargin: Theme.spacingM - anchors.verticalCenter: parent.verticalCenter - visible: modelData.name === currentCodec - } - - DankRipple { - id: codecRipple - cornerRadius: parent.radius - } - - MouseArea { - id: codecMouseArea - - anchors.fill: parent - hoverEnabled: true - cursorShape: Qt.PointingHandCursor - enabled: modelData.name !== currentCodec && !isLoading - onPressed: mouse => codecRipple.trigger(mouse.x, mouse.y) - onClicked: { - selectCodec(modelData.profile); - } - } - } - } - } - } - - Behavior on opacity { - NumberAnimation { - duration: Theme.mediumDuration - easing.type: Theme.emphasizedEasing - } - } - - Behavior on scale { - NumberAnimation { - duration: Theme.mediumDuration - easing.type: Theme.emphasizedEasing - } - } - } -} |