punktdateien/kde/plasma/plasmoids/com.siezi.plasma.mpdWidget/contents/ui/WidgetLayout.qml
2024-02-14 21:14:16 +01:00

164 lines
5.4 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.15
import QtGraphicalEffects 1.12
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.kirigami 2.20 as Kirigami
import "./Mpdw.js" as Mpdw
import "./Components"
import "./Components/Queue"
import "../scripts/formatHelpers.js" as FormatHelpers
Item {
id: root
anchors.fill: parent
GridLayout {
columns: cfgHorizontalLayout ? 3 : 1
rows: cfgHorizontalLayout ? 1 : 3
anchors.fill: parent
// Cover Image
WidgetCoverImage {
id: coverImageContainer
coverRadius: cfgCornerRadius
shadowColor: cfgShadowColor
shadowSpread: cfgShadowSpread
onHeightChanged: sourceSizeTimer.restart()
onWidthChanged: sourceSizeTimer.restart()
// Delay setting the source otherwise resizing the widget is very shoppy.
Timer {
id: sourceSizeTimer
interval: 1000
onTriggered: {
coverImageContainer.sourceSize.height = height
coverImageContainer.sourceSize.width = height
}
}
Component.onCompleted: {
sourceSizeTimer.start()
}
Layout.minimumWidth: cfgHorizontalLayout ? parent.height : parent.width
}
// Volume Slider
PlasmaComponents.Slider {
id: volumeSlider
Layout.fillHeight: cfgHorizontalLayout
Layout.fillWidth: !cfgHorizontalLayout
Layout.leftMargin: !cfgHorizontalLayout ? Kirigami.Units.largeSpacing : 0
Layout.rightMargin: !cfgHorizontalLayout ? Kirigami.Units.largeSpacing : 0
// Orientation bugged? Hide on horizontal layout for now
// See: https://bugs.kde.org/show_bug.cgi?id=474611
// Layout.maximumWidth: cfgHorizontalLayout ? 15 : -1
// orientation: cfgHorizontalLayout ? Qt.Vertical : Qt.Horizontal
visible: !cfgHorizontalLayout
minimumValue: 0
maximumValue: 100
stepSize: 1
onValueChanged: volumeState.set(volumeSlider.value)
value: volumeState.volume
}
// Title
ColumnLayout {
id: descriptionContainer
Layout.leftMargin: Kirigami.Units.largeSpacing
Layout.rightMargin: Kirigami.Units.largeSpacing
ColumnLayout {
WidgetLabel {
id: songTitle
font.weight: Font.Bold
Connections {
function onMpdInfoChanged() {
songTitle.text = FormatHelpers.title(mpdState.mpdInfo)
}
function onMpdQueueChanged() {
if (mpdState.countQueue() === 0) {
songTitle.text = ""
}
}
target: mpdState
}
}
WidgetLabel {
id: songArtist
Connections {
function onMpdInfoChanged() {
songArtist.text = FormatHelpers.artist(mpdState.mpdInfo)
}
function onMpdQueueChanged() {
songArtist.font.italic = false
if (mpdState.countQueue() === 0) {
songArtist.font.italic = true
songArtist.text = qsTr("Queue is empty")
return
}
}
target: mpdState
}
}
WidgetLabel {
id: songAlbum
Connections {
function onMpdInfoChanged() {
songAlbum.text = FormatHelpers.album(mpdState.mpdInfo)
}
function onMpdQueueChanged() {
if (mpdState.countQueue() === 0) {
songAlbum.text = ""
}
}
target: mpdState
}
}
MouseArea {
width: parent.width
height: parent.height
onClicked: {
main.toggleAppWindow()
}
}
}
// Notifications
RowLayout {
visible: !!notification.text
WidgetLabel {
id: notification
visible: text.length > 0
font.italic: true
Connections {
function onAppLastErrorChanged() {
notification.text = main.appLastError
}
target: main
}
}
ToolButton {
icon.name: Mpdw.icons.dialogClose
icon.height: Kirigami.Units.iconSizes.small
icon.width: Kirigami.Units.iconSizes.small
onClicked: notification.text = ''
}
}
}
}
}