mirror of
https://github.com/danbulant/dots-hyprland
synced 2026-05-19 04:08:48 +00:00
89 lines
3.1 KiB
QML
89 lines
3.1 KiB
QML
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import qs.services
|
|
import qs
|
|
import qs.modules.common.functions
|
|
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell.Services.Mpris
|
|
import Quickshell.Hyprland
|
|
|
|
Item {
|
|
id: root
|
|
property bool borderless: Config.options.bar.borderless
|
|
readonly property MprisPlayer activePlayer: MprisController.activePlayer
|
|
readonly property string cleanedTitle: StringUtils.cleanMusicTitle(activePlayer?.trackTitle) || Translation.tr("No media")
|
|
|
|
Layout.fillHeight: true
|
|
implicitWidth: rowLayout.implicitWidth + rowLayout.spacing * 2
|
|
implicitHeight: Appearance.sizes.barHeight
|
|
|
|
Timer {
|
|
running: activePlayer?.playbackState == MprisPlaybackState.Playing
|
|
interval: Config.options.resources.updateInterval
|
|
repeat: true
|
|
onTriggered: activePlayer.positionChanged()
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.MiddleButton | Qt.BackButton | Qt.ForwardButton | Qt.RightButton | Qt.LeftButton
|
|
onPressed: (event) => {
|
|
if (event.button === Qt.MiddleButton) {
|
|
activePlayer.togglePlaying();
|
|
} else if (event.button === Qt.BackButton) {
|
|
activePlayer.previous();
|
|
} else if (event.button === Qt.ForwardButton || event.button === Qt.RightButton) {
|
|
activePlayer.next();
|
|
} else if (event.button === Qt.LeftButton) {
|
|
GlobalStates.mediaControlsOpen = !GlobalStates.mediaControlsOpen
|
|
}
|
|
}
|
|
}
|
|
|
|
RowLayout { // Real content
|
|
id: rowLayout
|
|
|
|
spacing: 4
|
|
anchors.fill: parent
|
|
|
|
ClippedFilledCircularProgress {
|
|
id: mediaCircProg
|
|
Layout.alignment: Qt.AlignVCenter
|
|
lineWidth: Appearance.rounding.unsharpen
|
|
value: activePlayer?.position / activePlayer?.length
|
|
implicitSize: 20
|
|
colPrimary: Appearance.colors.colOnSecondaryContainer
|
|
enableAnimation: false
|
|
|
|
Item {
|
|
anchors.centerIn: parent
|
|
width: mediaCircProg.implicitSize
|
|
height: mediaCircProg.implicitSize
|
|
|
|
MaterialSymbol {
|
|
anchors.centerIn: parent
|
|
fill: 1
|
|
text: activePlayer?.isPlaying ? "pause" : "music_note"
|
|
iconSize: Appearance.font.pixelSize.normal
|
|
color: Appearance.m3colors.m3onSecondaryContainer
|
|
}
|
|
}
|
|
}
|
|
|
|
StyledText {
|
|
visible: Config.options.bar.verbose
|
|
width: rowLayout.width - (CircularProgress.size + rowLayout.spacing * 2)
|
|
Layout.alignment: Qt.AlignVCenter
|
|
Layout.fillWidth: true // Ensures the text takes up available space
|
|
Layout.rightMargin: rowLayout.spacing
|
|
horizontalAlignment: Text.AlignHCenter
|
|
elide: Text.ElideRight // Truncates the text on the right
|
|
color: Appearance.colors.colOnLayer1
|
|
text: `${cleanedTitle}${activePlayer?.trackArtist ? ' • ' + activePlayer.trackArtist : ''}`
|
|
}
|
|
|
|
}
|
|
|
|
}
|