diff options
Diffstat (limited to 'home-configuration/config/quickshell/modules/bar/QuickControl.qml')
| -rw-r--r-- | home-configuration/config/quickshell/modules/bar/QuickControl.qml | 361 |
1 files changed, 44 insertions, 317 deletions
diff --git a/home-configuration/config/quickshell/modules/bar/QuickControl.qml b/home-configuration/config/quickshell/modules/bar/QuickControl.qml index ffe6f6b..4b54d22 100644 --- a/home-configuration/config/quickshell/modules/bar/QuickControl.qml +++ b/home-configuration/config/quickshell/modules/bar/QuickControl.qml @@ -1,7 +1,6 @@ import QtQuick import QtQuick.Layouts import Quickshell -import Quickshell.Services.Pipewire import Quickshell.Services.SystemTray import "../../config.js" as Config @@ -10,7 +9,10 @@ Rectangle { property bool expanded: false - implicitWidth: layout.implicitWidth + 24 + implicitWidth: expanded + ? layout.implicitWidth + 24 + : dotsContainer.implicitWidth + 24 + implicitHeight: Config.blockHeight radius: Config.blockRadius @@ -48,213 +50,19 @@ Rectangle { } } - Component.onCompleted: { - console.info("QuickControl: loaded") - console.info( - "QuickControl: tray items =", - SystemTray.items.values.length - ) - - if (Pipewire.defaultAudioSink) { - console.info( - "QuickControl: audio sink =", - Pipewire.defaultAudioSink.name - ) - - if (Pipewire.defaultAudioSink.audio) { - console.info( - "QuickControl: volume =", - Math.round( - Pipewire.defaultAudioSink.audio.volume * 100 - ) + "%", - "muted =", - Pipewire.defaultAudioSink.audio.muted - ) - } - } else { - console.warn("QuickControl: no default audio sink") - } - } - - onExpandedChanged: { - console.info( - "QuickControl: expanded =", - expanded - ) - } - RowLayout { id: layout anchors { - left: parent.left right: parent.right verticalCenter: parent.verticalCenter - leftMargin: 12 rightMargin: 12 } - spacing: 6 - - Text { - id: volumeIcon - - text: Pipewire.defaultAudioSink?.audio?.muted - ? "" - : "" - - visible: root.expanded - - color: Config.textDark - - font.family: Config.fontFamily - font.pixelSize: Config.fontSize - font.bold: true - - MouseArea { - anchors.fill: parent - - cursorShape: Qt.PointingHandCursor - - onClicked: { - if (!Pipewire.defaultAudioSink?.audio) { - console.warn( - "QuickControl: no audio sink" - ) - return - } - - var audio = Pipewire.defaultAudioSink.audio - - audio.muted = !audio.muted - - console.info( - "QuickControl: mute =", - audio.muted - ) - } - } - } - - Text { - id: volumeText - - text: Pipewire.defaultAudioSink?.audio - ? Math.round( - Pipewire.defaultAudioSink.audio.volume * 100 - ) + "%" - : "0%" - - visible: root.expanded - - color: Config.textDark - - font.family: Config.fontFamily - font.pixelSize: Config.fontSize - font.bold: true - - MouseArea { - anchors.fill: parent - - cursorShape: Qt.PointingHandCursor - - onClicked: { - if (!Pipewire.defaultAudioSink?.audio) { - console.warn( - "QuickControl: no audio sink" - ) - return - } - - var audio = Pipewire.defaultAudioSink.audio - - audio.volume = Math.min( - audio.volume + 0.05, - 1.0 - ) - - console.info( - "QuickControl: volume =", - Math.round(audio.volume * 100) + "%" - ) - } - } - } - - Text { - id: brightnessIcon - - text: "" - - visible: root.expanded - - color: Config.textDark - - font.family: Config.fontFamily - font.pixelSize: Config.fontSize - font.bold: true - - MouseArea { - anchors.fill: parent - - cursorShape: Qt.PointingHandCursor - - onClicked: { - console.info( - "QuickControl: brightness clicked" - ) - - Quickshell.execDetached([ - "brightnessctl", - "set", - "+5%" - ]) - } - } - } - - Text { - id: networkIcon - - text: { - var item = SystemTray.items.values.find(function(item) { - return item.id === "nm-applet" - }) - - if (!item) - return "" - - var title = (item.title || "").toLowerCase() - - if (title.indexOf("ethernet") !== -1 || - title.indexOf("wired") !== -1 || - title.indexOf("lan") !== -1) - return "" - - return "" - } - - visible: root.expanded - color: Config.textDark - font.family: Config.fontFamily - font.pixelSize: Config.fontSize - font.bold: true - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - - onClicked: { - console.info("QuickControl: network clicked") - Quickshell.execDetached(["nm-connection-editor"]) - } - } -} + spacing: 8 Repeater { - model: root.expanded - ? SystemTray.items - : null + model: SystemTray.items delegate: Item { id: trayItem @@ -267,179 +75,98 @@ Rectangle { Layout.preferredWidth: 18 Layout.preferredHeight: 18 - Component.onCompleted: { - console.info( - "QuickControl: tray item:", - modelData.title, - "id =", - modelData.id, - "hasMenu =", - modelData.hasMenu, - "onlyMenu =", - modelData.onlyMenu - ) + opacity: root.expanded ? 1 : 0 + + Behavior on opacity { + NumberAnimation { + duration: 200 + easing.type: Easing.OutCubic + } } + visible: opacity > 0 + QsMenuAnchor { id: menuAnchor anchor.item: trayItem - menu: modelData.menu - - onOpened: { - console.info( - "QuickControl: context menu opened:", - modelData.title - ) - } - - onClosed: { - console.info( - "QuickControl: context menu closed:", - modelData.title - ) - } } Image { anchors.fill: parent source: modelData.icon - sourceSize.width: 18 sourceSize.height: 18 - fillMode: Image.PreserveAspectFit } MouseArea { anchors.fill: parent - acceptedButtons: - Qt.LeftButton | - Qt.RightButton | - Qt.MiddleButton + enabled: root.expanded + + acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton cursorShape: Qt.PointingHandCursor onClicked: function(mouse) { if (mouse.button === Qt.RightButton) { - console.info( - "QuickControl: right click:", - modelData.title, - "hasMenu =", - modelData.hasMenu - ) - - if (modelData.hasMenu) { - console.info( - "QuickControl: opening menu:", - modelData.title - ) - + if (modelData.hasMenu) menuAnchor.open() - } else { - console.info( - "QuickControl: no context menu:", - modelData.title - ) - } - return } if (mouse.button === Qt.MiddleButton) { - console.info( - "QuickControl: middle click:", - modelData.title - ) - modelData.secondaryActivate() return } - console.info( - "QuickControl: left click:", - modelData.title - ) - - if (modelData.onlyMenu && modelData.hasMenu) { - console.info( - "QuickControl: onlyMenu item, opening menu:", - modelData.title - ) - + if (modelData.onlyMenu && modelData.hasMenu) menuAnchor.open() - } else { + else modelData.activate() - } } } } } - Text { - id: dots + Item { + id: dotsContainer - text: "•••" - - color: Config.textDark - - font.family: Config.fontFamily - font.pixelSize: Config.fontSize - font.bold: true + implicitWidth: 24 + implicitHeight: Config.blockHeight + Layout.preferredWidth: 24 + Layout.preferredHeight: Config.blockHeight Layout.alignment: Qt.AlignVCenter - MouseArea { - anchors.fill: parent + Text { + id: dots - cursorShape: Qt.PointingHandCursor + anchors.centerIn: parent - onClicked: { - root.expanded = !root.expanded + text: "•••" - console.info( - "QuickControl: toggled, expanded =", - root.expanded - ) - } - } - } - } + color: Config.textDark - Connections { - target: SystemTray.items + font.family: Config.fontFamily + font.pixelSize: Config.fontSize + font.bold: true - function onValuesChanged() { - console.info( - "QuickControl: system tray changed, items =", - SystemTray.items.values.length - ) - } - } + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter - Connections { - target: Pipewire.defaultAudioSink?.audio ?? null + MouseArea { + anchors.fill: parent - function onVolumeChanged() { - if (Pipewire.defaultAudioSink?.audio) { - console.info( - "QuickControl: volume changed:", - Math.round( - Pipewire.defaultAudioSink.audio.volume * 100 - ) + "%" - ) - } - } + cursorShape: Qt.PointingHandCursor - function onMutedChanged() { - if (Pipewire.defaultAudioSink?.audio) { - console.info( - "QuickControl: muted changed:", - Pipewire.defaultAudioSink.audio.muted - ) + onClicked: { + root.expanded = !root.expanded + } + } } } } |
