Files
dotfiles/quickshell/bar/widgets/player/PlayerWidgetV2.qml
2025-07-27 17:05:34 +01:00

152 lines
5.2 KiB
QML

import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import QtQuick.Effects
import "../common" as Common
// import playbutton.svg
Item {
property PlayerControllerV2 player: PlayerControllerV2;
id: root
Layout.fillHeight: true
Layout.preferredWidth: mainLayout.width + 10
Loader {
id: audioPopupLoader
active: true
sourceComponent: PlayerPopupV2 {
id: audioPopup
}
}
RowLayout {
id: mainLayout
Layout.fillHeight: true
anchors {
verticalCenter: parent.verticalCenter
horizontalCenter: parent.horizontalCenter
}
Common.Meow {
id: commons
}
Item {
implicitWidth: text.width
implicitHeight: text.height
Rectangle {
id: hoverColor
anchors.centerIn: parent
visible: false
radius: 7
width: parent.width + 5
height: parent.height + 2.5
color: "grey"
}
Text {
id: text
text: (root.player.activePlayer == undefined) ? "Nothing" : player.activePlayer.trackTitle
color: "white"
font.pointSize: 10
font.italic: (root.player.activePlayer == undefined) ? true : false
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onEntered: event => {
hoverColor.visible = true
}
onExited: event => {
hoverColor.visible = false
}
onClicked: event => {
audioPopupLoader.item.visible = !audioPopupLoader.item.visible;
}
}
}
Common.Dot {}
Item {
id: mediaPositionControls
implicitWidth: positionText.width
implicitHeight: positionText.height
Text {
id: positionText
text: root.player.activeTrackPositionFormated + "/" + player.activeTrackLengthFormated // returns float of seconds of length
color: "white"
font.pointSize: 10
}
RowLayout {
visible: !positionText.visible
// enable: !positionText.visible
anchors {
left: parent.left
right: parent.right
}
anchors.verticalCenter: parent.verticalCenter
Item {
width: 20
height: 20
IconImage {
anchors.fill: parent
implicitSize: 20
source: "root:/assets/media_player/skip_previous.svg"
}
}
Item {
width: 20
height: 20
MouseArea {
anchors.fill: parent
width: 20
height: 20
hoverEnabled: true
onClicked: event => {
root.player.activePlayer.togglePlaying()
}
}
IconImage {
anchors.fill: parent
implicitSize: 20
source: (root.player.activePlayer.isPlaying) ? "root:/assets/media_player/pausebutton.svg" : "root:/assets/media_player/playbutton.svg"
}
}
Item {
width: 20
height: 20
IconImage {
anchors.fill: parent
implicitSize: 20
source: "root:/assets/media_player/skip_next.svg"
}
}
}
MouseArea {
z: 1
id: mouseAreaMediaButtons
height: parent.height + 15
anchors.fill: parent
hoverEnabled: true
propagateComposedEvents: true // allows events to transparently go through to an overlapping mouseArea
onEntered: event => {
positionText.visible = false;
}
onExited: event => {
positionText.visible = true;
}
}
}
}
Rectangle {
z: -1
color: "black"
anchors {
verticalCenter: parent.verticalCenter
}
height: 25
width: parent.width
radius: 7
}
}