From 5464944a562de737345fa32a6fc7c5f3af3f7f8f Mon Sep 17 00:00:00 2001 From: Semih Kaiser Date: Tue, 29 Sep 2026 01:05:45 +0200 Subject: [PATCH] Init --- Controller.qml | 7 ++ DualsenseWidget.qml | 237 ++++++++++++++++++++++++++++++++++++++++++++ icons/dualsense.png | Bin 0 -> 36635 bytes icons/power.svg | 4 + shell.qml | 3 + 5 files changed, 251 insertions(+) create mode 100644 Controller.qml create mode 100644 DualsenseWidget.qml create mode 100644 icons/dualsense.png create mode 100644 icons/power.svg create mode 100644 shell.qml diff --git a/Controller.qml b/Controller.qml new file mode 100644 index 0000000..33a6132 --- /dev/null +++ b/Controller.qml @@ -0,0 +1,7 @@ +import QtQuick + +QtObject { + property bool connected: false + property string percentage: "-1" + property string chargingState: "unknown" +} \ No newline at end of file diff --git a/DualsenseWidget.qml b/DualsenseWidget.qml new file mode 100644 index 0000000..17c0f7d --- /dev/null +++ b/DualsenseWidget.qml @@ -0,0 +1,237 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +import Quickshell +import Quickshell.Bluetooth +import Quickshell.Io + +PanelWindow { + id: root + + visible: controller !== null && controller.connected + aboveWindows: false + + anchors { + right: true + top: true + } + + margins { + top: 16 + right: 8 + } + + implicitWidth: expanded ? 300 : 22 + implicitHeight: 120 + color: "transparent" + + property bool expanded: false + + Controller { + id: controller + connected: false + } + + Process { + id: connectionProcess + + command: ["sh", "-c", "dualsensectl monitor add 'echo connected' remove 'echo disconnected'"] + running: true + + stdout: SplitParser { + onRead: line => { + if (line === "connected") { + controller.connected = true + } else { + controller.connected = false + } + } + } + } + + Timer { + interval: 30000 + running: true + repeat: true + onTriggered: batteryProcess.running = true + } + + Timer { + interval: 1000 + running: true + onTriggered: batteryProcess.running = true + } + + Process { + id: batteryProcess + + command: ["sh", "-c", "dualsensectl battery"] + running: true + stdout: StdioCollector { + onStreamFinished: () => { + const s = text.split(" "); + controller.percentage = s[0]; + controller.chargingState = s[1]; + if (s[1].indexOf("charging") === 0) { + controller.chargingState = "Charging" + } + if (s[1].indexOf("discharging") === 0) { + controller.chargingState = "Discharging" + } + if (s[1].indexOf("full") === 0) { + controller.chargingState = "Full" + } + } + } + } + + Rectangle { + id: surface + + anchors { + right: parent.right + top: parent.top + bottom: parent.bottom + } + + width: root.expanded ? parent.width : 22 + radius: 10 + color: '#1e1e2e' + border.color: "#555c637a" + border.width: 1 + clip: true + + MouseArea { + anchors.fill: parent + hoverEnabled: true + + onClicked: (evt) => { + root.expanded = !root.expanded + } + } + + HoverHandler { + id: hoverHandler + + onHoveredChanged: { + if (!hovered) + root.expanded = false + } + } + + Rectangle { + id: edgeHandle + + width: 5 + height: 70 + radius: 3 + + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + rightMargin: 8 + } + + color: '#828282' + + Rectangle { + id: powerLevel + + anchors { + bottom: parent.bottom + } + + width: parent.width + height: controller.percentage * 0.01 * parent.height + radius: 3 + + color: controller.chargingState === "Charging" + ? "#f5c542" + : controller.chargingState === "Full" ? '#68b864' : "#8ab4f8" + } + } + + RowLayout { + + visible: root.expanded + + anchors { + left: parent.left + right: edgeHandle.left + verticalCenter: parent.verticalCenter + leftMargin: 16 + rightMargin: 8 + } + + spacing: 10 + + Image { + id: image + source: "icons/dualsense.png" + Layout.preferredWidth: 100 + Layout.preferredHeight: parent.height + fillMode: Image.PreserveAspectFit + } + + ColumnLayout { + Label { + Layout.fillWidth: true + + text: "Dualsense" + + color: "white" + font.bold: true + font.pixelSize: 16 + elide: Text.ElideRight + } + + Label { + Layout.fillWidth: true + + text: `Battery: ${Math.round(controller.percentage)} %` + + color: "#d8dee9" + font.pixelSize: 14 + } + + Label { + Layout.fillWidth: true + + text: `Status: ${controller.chargingState}` + + color: root.chargingState === "charging" + ? "#f5c542" + : "#d8dee9" + + font.pixelSize: 14 + } + } + + Button { + contentItem: Image { + source: "icons/power.svg" + height: 48 + fillMode: Image.PreserveAspectFit + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + color: 'transparent' + height: 48 + border.width: 0 + } + + onClicked: { + disconnectProcess.running = true + } + } + + Process { + id: disconnectProcess + command: ["sh", "-c", "dualsensectl power-off"] + } + } + } +} \ No newline at end of file diff --git a/icons/dualsense.png b/icons/dualsense.png new file mode 100644 index 0000000000000000000000000000000000000000..b142cf35fd960dadf86b4961df0b9b114123750e GIT binary patch literal 36635 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

x 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 literal 0 HcmV?d00001 diff --git a/icons/power.svg b/icons/power.svg new file mode 100644 index 0000000..b568aad --- /dev/null +++ b/icons/power.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/shell.qml b/shell.qml new file mode 100644 index 0000000..17084d0 --- /dev/null +++ b/shell.qml @@ -0,0 +1,3 @@ +import Quickshell + +DualsenseWidget {} \ No newline at end of file