Files
quickdots/bar/modules/Workspace.qml

86 lines
2.6 KiB
QML

import QtQuick
import QtQuick.Layouts
import Quickshell.Hyprland
import "../../config" as Cfg
import "../../components"
ModuleChip {
id: root
width: workspaceLayout.implicitWidth + 24
height: Cfg.Config.moduleHeight
chipColor: t.wsPanelBg
chipBorderColor: t.wsPanelBorder
property string activeSpecial: ""
property string lastActiveName: ""
Connections {
target: Hyprland
function onRawEvent(event) {
if (event.name === "activespecial") {
var name = event.data.split(",")[0]
root.activeSpecial = name
}
if (event.name === "workspace") {
root.lastActiveName = event.data
}
}
}
RowLayout {
id: workspaceLayout
anchors.centerIn: parent
spacing: 6
Repeater {
model: Hyprland.workspaces
Rectangle {
id: wsPill
visible: modelData.name !== "special:magic"
property bool isSelected: modelData.active || (root.activeSpecial !== "" && modelData.name === root.lastActiveName)
Layout.preferredWidth: isSelected ? 34 : 28
Layout.preferredHeight: 22
radius: 11
color: {
if (isSelected && root.activeSpecial !== "") {
return root.t.wsMagicActiveBg
}
if (modelData.active) {
return root.t.wsActiveBg
}
return wsHover.hovered ? root.t.wsHoverBg : root.t.wsInactiveBg
}
Behavior on color { ColorAnimation { duration: 200 } }
Behavior on Layout.preferredWidth { NumberAnimation { duration: 200 } }
Text {
anchors.centerIn: parent
text: modelData.name
font.pixelSize: 11
font.bold: true
color: {
if (isSelected && root.activeSpecial !== "") {
return root.t.wsMagicActiveText
}
if (modelData.active) {
return root.t.wsActiveText
}
return wsHover.hovered ? root.t.wsHoverText : root.t.wsInactiveText
}
}
HoverHandler { id: wsHover; cursorShape: Qt.PointingHandCursor }
TapHandler { onTapped: modelData.activate() }
}
}
}
}