diff --git a/src/audiowrapper_libvlc.cpp b/src/audiowrapper_libvlc.cpp
--- a/src/audiowrapper_libvlc.cpp
+++ b/src/audiowrapper_libvlc.cpp
@@ -517,7 +517,7 @@
return;
}
- if (abs(mPreviousVolume - newVolume) > 0.01) {
+ if (abs(int(mPreviousVolume - newVolume)) > 0.01) {
mPreviousVolume = newVolume;
mParent->playerVolumeSignalChanges();
diff --git a/src/qml/ContentView.qml b/src/qml/ContentView.qml
--- a/src/qml/ContentView.qml
+++ b/src/qml/ContentView.qml
@@ -260,11 +260,6 @@
}
Rectangle {
- border {
- color: (mainContentView.activeFocus ? myPalette.highlight : myPalette.base)
- width: 1
- }
-
radius: 3
color: myPalette.base
diff --git a/src/qml/GridBrowserDelegate.qml b/src/qml/GridBrowserDelegate.qml
--- a/src/qml/GridBrowserDelegate.qml
+++ b/src/qml/GridBrowserDelegate.qml
@@ -42,8 +42,24 @@
Keys.onReturnPressed: open()
Keys.onEnterPressed: open()
+ Rectangle {
+ anchors.fill: parent
+ z: 1
+
+ border.color: gridEntry.activeFocus ? myPalette.highlight : "transparent"
+
+ Behavior on border.color {
+ ColorAnimation {
+ duration: 300
+ }
+ }
+
+ radius: 3
+ }
+
ColumnLayout {
anchors.fill: parent
+ z: 2
spacing: 0
@@ -231,6 +247,7 @@
Layout.maximumWidth: gridEntry.width * 0.9
Layout.minimumWidth: Layout.maximumWidth
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ Layout.bottomMargin: delegateDisplaySecondaryText ? 0 : elisaTheme.layoutVerticalMargin
elide: Text.ElideRight
}
@@ -246,6 +263,7 @@
// See https://bugreports.qt.io/browse/QTBUG-49646
horizontalAlignment: Text.AlignHCenter
+ Layout.bottomMargin: elisaTheme.layoutVerticalMargin
Layout.maximumWidth: gridEntry.width * 0.9
Layout.minimumWidth: Layout.maximumWidth
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
@@ -299,7 +317,7 @@
NumberAnimation {
properties: "opacity"
easing.type: Easing.InOutQuad
- duration: 100
+ duration: 300
}
}
},
@@ -309,7 +327,7 @@
NumberAnimation {
properties: "opacity"
easing.type: Easing.InOutQuad
- duration: 100
+ duration: 300
}
PropertyAction {
properties: "active"
diff --git a/src/qml/ListBrowserView.qml b/src/qml/ListBrowserView.qml
--- a/src/qml/ListBrowserView.qml
+++ b/src/qml/ListBrowserView.qml
@@ -98,6 +98,7 @@
Layout.fillHeight: true
Layout.fillWidth: true
+ Layout.margins: 2
ListView {
id: contentDirectoryView
diff --git a/src/qml/MediaTrackDelegate.qml b/src/qml/MediaTrackDelegate.qml
--- a/src/qml/MediaTrackDelegate.qml
+++ b/src/qml/MediaTrackDelegate.qml
@@ -93,256 +93,258 @@
id: rowRoot
anchors.fill: parent
+ z: 1
color: (isAlternateColor ? myPalette.alternateBase : myPalette.base)
+ }
- MouseArea {
- id: hoverArea
+ MouseArea {
+ id: hoverArea
- anchors.fill: parent
+ anchors.fill: parent
+ z: 2
- hoverEnabled: true
- focus: true
- acceptedButtons: Qt.LeftButton
+ hoverEnabled: true
+ focus: true
+ acceptedButtons: Qt.LeftButton
- onClicked: {
- hoverArea.forceActiveFocus()
- mediaTrack.clicked()
- }
+ onClicked: {
+ hoverArea.forceActiveFocus()
+ mediaTrack.clicked()
+ }
- onDoubleClicked: enqueue(databaseId, title)
+ onDoubleClicked: enqueue(databaseId, title)
- RowLayout {
- anchors.fill: parent
- spacing: 0
+ RowLayout {
+ anchors.fill: parent
+ spacing: 0
- LabelWithToolTip {
- id: mainLabel
+ LabelWithToolTip {
+ id: mainLabel
- visible: !detailedView
+ visible: !detailedView
- text: {
- if (trackNumber !== 0) {
- if (artist !== albumArtist)
- return i18nc("%1: track number. %2: track title. %3: artist name",
- "%1 - %2 - %3",
- trackNumber.toLocaleString(Qt.locale(), 'f', 0),
- title, artist);
- else
- return i18nc("%1: track number. %2: track title.",
- "%1 - %2",
- trackNumber.toLocaleString(Qt.locale(), 'f', 0),
- title);
- } else {
- if (artist !== albumArtist)
- return i18nc("%1: track title. %2: artist name",
- "%1 - %2",
- title, artist);
- else
- return i18nc("%1: track title",
- "%1",
- title);
- }
+ text: {
+ if (trackNumber !== 0) {
+ if (artist !== albumArtist)
+ return i18nc("%1: track number. %2: track title. %3: artist name",
+ "%1 - %2 - %3",
+ trackNumber.toLocaleString(Qt.locale(), 'f', 0),
+ title, artist);
+ else
+ return i18nc("%1: track number. %2: track title.",
+ "%1 - %2",
+ trackNumber.toLocaleString(Qt.locale(), 'f', 0),
+ title);
+ } else {
+ if (artist !== albumArtist)
+ return i18nc("%1: track title. %2: artist name",
+ "%1 - %2",
+ title, artist);
+ else
+ return i18nc("%1: track title",
+ "%1",
+ title);
}
+ }
- elide: Text.ElideRight
- horizontalAlignment: Text.AlignLeft
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignLeft
- color: myPalette.text
+ color: myPalette.text
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- Layout.fillWidth: true
- Layout.leftMargin: {
- if (!LayoutMirroring.enabled)
- return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin)
- else
- return 0
- }
- Layout.rightMargin: {
- if (LayoutMirroring.enabled)
- return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin)
- else
- return 0
- }
+ Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
+ Layout.fillWidth: true
+ Layout.leftMargin: {
+ if (!LayoutMirroring.enabled)
+ return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin)
+ else
+ return 0
}
+ Layout.rightMargin: {
+ if (LayoutMirroring.enabled)
+ return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin)
+ else
+ return 0
+ }
+ }
- Item {
- Layout.preferredHeight: mediaTrack.height * 0.9
- Layout.preferredWidth: mediaTrack.height * 0.9
+ Item {
+ Layout.preferredHeight: mediaTrack.height * 0.9
+ Layout.preferredWidth: mediaTrack.height * 0.9
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
+ Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- visible: detailedView
+ visible: detailedView
- Image {
- id: coverImageElement
+ Image {
+ id: coverImageElement
- anchors.fill: parent
+ anchors.fill: parent
- sourceSize.width: mediaTrack.height * 0.9
- sourceSize.height: mediaTrack.height * 0.9
- fillMode: Image.PreserveAspectFit
- smooth: true
+ sourceSize.width: mediaTrack.height * 0.9
+ sourceSize.height: mediaTrack.height * 0.9
+ fillMode: Image.PreserveAspectFit
+ smooth: true
- source: (imageUrl != '' ? imageUrl : Qt.resolvedUrl(elisaTheme.defaultAlbumImage))
+ source: (imageUrl != '' ? imageUrl : Qt.resolvedUrl(elisaTheme.defaultAlbumImage))
- asynchronous: true
+ asynchronous: true
- layer.enabled: imageUrl != ''
+ layer.enabled: imageUrl != ''
- layer.effect: DropShadow {
- source: coverImageElement
+ layer.effect: DropShadow {
+ source: coverImageElement
- radius: 10
- spread: 0.1
- samples: 21
+ radius: 10
+ spread: 0.1
+ samples: 21
- color: myPalette.shadow
- }
+ color: myPalette.shadow
}
}
+ }
- ColumnLayout {
- visible: detailedView
+ ColumnLayout {
+ visible: detailedView
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.alignment: Qt.AlignLeft
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignLeft
- spacing: 0
+ spacing: 0
- LabelWithToolTip {
- id: mainLabelDetailed
+ LabelWithToolTip {
+ id: mainLabelDetailed
- text: {
- if (trackNumber !== 0) {
- return i18nc("%1: track number. %2: track title", "%1 - %2",
- trackNumber.toLocaleString(Qt.locale(), 'f', 0), title);
- } else {
- return title;
- }
+ text: {
+ if (trackNumber !== 0) {
+ return i18nc("%1: track number. %2: track title", "%1 - %2",
+ trackNumber.toLocaleString(Qt.locale(), 'f', 0), title);
+ } else {
+ return title;
}
+ }
- horizontalAlignment: Text.AlignLeft
+ horizontalAlignment: Text.AlignLeft
- font.weight: Font.Bold
- color: myPalette.text
+ font.weight: Font.Bold
+ color: myPalette.text
- Layout.alignment: Qt.AlignLeft | Qt.AlignTop
- Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
- Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
- Layout.fillWidth: true
- Layout.topMargin: elisaTheme.layoutVerticalMargin / 2
+ Layout.alignment: Qt.AlignLeft | Qt.AlignTop
+ Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
+ Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
+ Layout.fillWidth: true
+ Layout.topMargin: elisaTheme.layoutVerticalMargin / 2
- elide: Text.ElideRight
- }
+ elide: Text.ElideRight
+ }
- Item {
- Layout.fillHeight: true
- }
+ Item {
+ Layout.fillHeight: true
+ }
- LabelWithToolTip {
- id: artistLabel
+ LabelWithToolTip {
+ id: artistLabel
- text: {
- var labelText = ""
- if (artist) {
- labelText += artist
- }
- if (album !== '') {
- labelText += ' - ' + album
- if (!isSingleDiscAlbum) {
- labelText += ' - CD ' + discNumber
- }
+ text: {
+ var labelText = ""
+ if (artist) {
+ labelText += artist
+ }
+ if (album !== '') {
+ labelText += ' - ' + album
+ if (!isSingleDiscAlbum) {
+ labelText += ' - CD ' + discNumber
}
- return labelText;
}
- horizontalAlignment: Text.AlignLeft
+ return labelText;
+ }
+ horizontalAlignment: Text.AlignLeft
- font.weight: Font.Light
- font.italic: true
- color: myPalette.text
+ font.weight: Font.Light
+ font.italic: true
+ color: myPalette.text
- Layout.alignment: Qt.AlignLeft | Qt.AlignBottom
- Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
- Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
- Layout.fillWidth: true
- Layout.bottomMargin: elisaTheme.layoutVerticalMargin / 2
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBottom
+ Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
+ Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
+ Layout.fillWidth: true
+ Layout.bottomMargin: elisaTheme.layoutVerticalMargin / 2
- elide: Text.ElideRight
- }
+ elide: Text.ElideRight
}
+ }
- Loader {
- id: hoverLoader
- active: false
+ Loader {
+ id: hoverLoader
+ active: false
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- Layout.rightMargin: 10
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ Layout.rightMargin: 10
- z: 1
- opacity: 0
+ z: 1
+ opacity: 0
- sourceComponent: Row {
- anchors.centerIn: parent
+ sourceComponent: Row {
+ anchors.centerIn: parent
- Controls1.ToolButton {
- id: detailsButton
+ Controls1.ToolButton {
+ id: detailsButton
- height: elisaTheme.delegateHeight
- width: elisaTheme.delegateHeight
+ height: elisaTheme.delegateHeight
+ width: elisaTheme.delegateHeight
- action: viewDetailsAction
- }
+ action: viewDetailsAction
+ }
- Controls1.ToolButton {
- id: enqueueButton
+ Controls1.ToolButton {
+ id: enqueueButton
- height: elisaTheme.delegateHeight
- width: elisaTheme.delegateHeight
+ height: elisaTheme.delegateHeight
+ width: elisaTheme.delegateHeight
- action: enqueueAction
- }
+ action: enqueueAction
+ }
- Controls1.ToolButton {
- id: clearAndEnqueueButton
+ Controls1.ToolButton {
+ id: clearAndEnqueueButton
- scale: LayoutMirroring.enabled ? -1 : 1
+ scale: LayoutMirroring.enabled ? -1 : 1
- height: elisaTheme.delegateHeight
- width: elisaTheme.delegateHeight
+ height: elisaTheme.delegateHeight
+ width: elisaTheme.delegateHeight
- action: replaceAndPlayAction
- }
+ action: replaceAndPlayAction
}
}
+ }
- RatingStar {
- id: ratingWidget
+ RatingStar {
+ id: ratingWidget
- starSize: elisaTheme.ratingStarSize
+ starSize: elisaTheme.ratingStarSize
- starRating: rating
+ starRating: rating
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- Layout.leftMargin: elisaTheme.layoutHorizontalMargin
- Layout.rightMargin: elisaTheme.layoutHorizontalMargin
- }
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ Layout.leftMargin: elisaTheme.layoutHorizontalMargin
+ Layout.rightMargin: elisaTheme.layoutHorizontalMargin
+ }
- LabelWithToolTip {
- id: durationLabel
+ LabelWithToolTip {
+ id: durationLabel
- text: duration
+ text: duration
- font.weight: Font.Light
- color: myPalette.text
+ font.weight: Font.Light
+ color: myPalette.text
- horizontalAlignment: Text.AlignRight
+ horizontalAlignment: Text.AlignRight
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
- Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
- }
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
+ Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0
}
}
}
@@ -367,6 +369,10 @@
target: rowRoot
color: (isAlternateColor ? myPalette.alternateBase : myPalette.base)
}
+ PropertyChanges {
+ target: rowRoot
+ opacity: 1
+ }
},
State {
name: 'hoveredOrSelected'
@@ -385,7 +391,11 @@
}
PropertyChanges {
target: rowRoot
- color: myPalette.mid
+ color: myPalette.highlight
+ }
+ PropertyChanges {
+ target: rowRoot
+ opacity: 0.2
}
}
]
@@ -401,11 +411,11 @@
NumberAnimation {
properties: "opacity, hoverWidgetOpacity"
easing.type: Easing.InOutQuad
- duration: 250
+ duration: 200
}
ColorAnimation {
properties: "color"
- duration: 250
+ duration: 350
}
}
}
diff --git a/src/qml/PlayListEntry.qml b/src/qml/PlayListEntry.qml
--- a/src/qml/PlayListEntry.qml
+++ b/src/qml/PlayListEntry.qml
@@ -118,288 +118,300 @@
anchors.fill: parent
anchors.rightMargin: LayoutMirroring.enabled ? scrollBarWidth : 0
+ z: 1
- color: (isAlternateColor ? myPalette.alternateBase : myPalette.base)
+ border {
+ color: playListEntry.activeFocus ? myPalette.highlight : 'transparent'
+ width: 1
+ }
+
+ color: myPalette.base
height: elisaTheme.playListDelegateHeight
- focus: true
+ Behavior on border.color {
+ ColorAnimation {
+ duration: 300
+ }
+ }
+ }
- ColumnLayout {
- spacing: 0
+ ColumnLayout {
+ spacing: 0
- anchors.fill: parent
+ anchors.fill: parent
+ anchors.rightMargin: LayoutMirroring.enabled ? scrollBarWidth : 0
+ z: 2
- Item {
- Layout.fillWidth: true
- Layout.fillHeight: true
+ Item {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
- RowLayout {
- id: trackRow
+ RowLayout {
+ id: trackRow
- anchors.fill: parent
+ anchors.fill: parent
- spacing: elisaTheme.layoutHorizontalMargin / 4
+ spacing: elisaTheme.layoutHorizontalMargin / 4
- Item {
- id: playIconItem
+ Item {
+ id: playIconItem
- implicitHeight: elisaTheme.smallDelegateToolButtonSize
- implicitWidth: elisaTheme.smallDelegateToolButtonSize
- Layout.maximumWidth: elisaTheme.smallDelegateToolButtonSize
- Layout.maximumHeight: elisaTheme.smallDelegateToolButtonSize
- Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
- Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin / 2 : 0
- Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin / 2 : 0
+ implicitHeight: elisaTheme.smallDelegateToolButtonSize
+ implicitWidth: elisaTheme.smallDelegateToolButtonSize
+ Layout.maximumWidth: elisaTheme.smallDelegateToolButtonSize
+ Layout.maximumHeight: elisaTheme.smallDelegateToolButtonSize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin / 2 : 0
+ Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin / 2 : 0
- Image {
- id: playIcon
+ Image {
+ id: playIcon
- anchors.fill: parent
+ anchors.fill: parent
- opacity: 0
+ opacity: 0
- source: (isPlaying === MediaPlayList.IsPlaying ?
- Qt.resolvedUrl(elisaTheme.playingIndicatorIcon) : Qt.resolvedUrl(elisaTheme.pausedIndicatorIcon))
+ source: (isPlaying === MediaPlayList.IsPlaying ?
+ Qt.resolvedUrl(elisaTheme.playingIndicatorIcon) : Qt.resolvedUrl(elisaTheme.pausedIndicatorIcon))
- width: parent.height * 1.
- height: parent.height * 1.
+ width: parent.height * 1.
+ height: parent.height * 1.
- sourceSize.width: parent.height * 1.
- sourceSize.height: parent.height * 1.
- fillMode: Image.PreserveAspectFit
- mirror: LayoutMirroring.enabled
- visible: opacity > 0.0
- }
+ sourceSize.width: parent.height * 1.
+ sourceSize.height: parent.height * 1.
+ fillMode: Image.PreserveAspectFit
+ mirror: LayoutMirroring.enabled
+ visible: opacity > 0.0
}
+ }
- Item {
- id: fakeDiscNumberItem
+ Item {
+ id: fakeDiscNumberItem
- visible: isValid && (!hasValidDiscNumber || isSingleDiscAlbum)
+ visible: isValid && (!hasValidDiscNumber || isSingleDiscAlbum)
- Layout.preferredWidth: (fakeDiscNumberSize.boundingRect.width - fakeDiscNumberSize.boundingRect.x) + (elisaTheme.layoutHorizontalMargin / 4)
- Layout.minimumWidth: (fakeDiscNumberSize.boundingRect.width - fakeDiscNumberSize.boundingRect.x) + (elisaTheme.layoutHorizontalMargin / 4)
- Layout.maximumWidth: (fakeDiscNumberSize.boundingRect.width - fakeDiscNumberSize.boundingRect.x) + (elisaTheme.layoutHorizontalMargin / 4)
+ Layout.preferredWidth: (fakeDiscNumberSize.boundingRect.width - fakeDiscNumberSize.boundingRect.x) + (elisaTheme.layoutHorizontalMargin / 4)
+ Layout.minimumWidth: (fakeDiscNumberSize.boundingRect.width - fakeDiscNumberSize.boundingRect.x) + (elisaTheme.layoutHorizontalMargin / 4)
+ Layout.maximumWidth: (fakeDiscNumberSize.boundingRect.width - fakeDiscNumberSize.boundingRect.x) + (elisaTheme.layoutHorizontalMargin / 4)
- TextMetrics {
- id: fakeDiscNumberSize
+ TextMetrics {
+ id: fakeDiscNumberSize
- text: '/9'
- }
+ text: '/9'
}
+ }
- Label {
- id: trackNumberLabel
+ Label {
+ id: trackNumberLabel
- horizontalAlignment: Text.AlignRight
+ horizontalAlignment: Text.AlignRight
- text: trackNumber !== 0 && trackNumber !== -1 ? Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0) : ''
+ text: trackNumber !== 0 && trackNumber !== -1 ? Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0) : ''
- font.weight: (isPlaying ? Font.Bold : Font.Light)
- color: myPalette.text
+ font.weight: (isPlaying ? Font.Bold : Font.Light)
+ color: myPalette.text
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- visible: isValid
+ visible: isValid
- Layout.preferredWidth: ((trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) > (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x) ? (trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) : (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x))
- Layout.minimumWidth: ((trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) > (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x) ? (trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) : (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x))
- Layout.maximumWidth: ((trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) > (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x) ? (trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) : (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x))
+ Layout.preferredWidth: ((trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) > (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x) ? (trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) : (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x))
+ Layout.minimumWidth: ((trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) > (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x) ? (trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) : (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x))
+ Layout.maximumWidth: ((trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) > (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x) ? (trackNumberSize.boundingRect.width - trackNumberSize.boundingRect.x) : (realTrackNumberSize.boundingRect.width - realTrackNumberSize.boundingRect.x))
- Layout.rightMargin: !LayoutMirroring.enabled ? (discNumber !== 0 && !isSingleDiscAlbum ?
- 0 : elisaTheme.layoutHorizontalMargin / 2) : 0
- Layout.leftMargin: LayoutMirroring.enabled ? (discNumber !== 0 && !isSingleDiscAlbum ?
- 0 : elisaTheme.layoutHorizontalMargin / 2) : 0
+ Layout.rightMargin: !LayoutMirroring.enabled ? (discNumber !== 0 && !isSingleDiscAlbum ?
+ 0 : elisaTheme.layoutHorizontalMargin / 2) : 0
+ Layout.leftMargin: LayoutMirroring.enabled ? (discNumber !== 0 && !isSingleDiscAlbum ?
+ 0 : elisaTheme.layoutHorizontalMargin / 2) : 0
- TextMetrics {
- id: trackNumberSize
+ TextMetrics {
+ id: trackNumberSize
- text: (99).toLocaleString(Qt.locale(), 'f', 0)
- }
+ text: (99).toLocaleString(Qt.locale(), 'f', 0)
+ }
- TextMetrics {
- id: realTrackNumberSize
+ TextMetrics {
+ id: realTrackNumberSize
- text: Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0)
- }
+ text: Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0)
}
+ }
- Label {
- horizontalAlignment: Text.AlignCenter
+ Label {
+ horizontalAlignment: Text.AlignCenter
- text: '/'
+ text: '/'
- visible: isValid && discNumber !== 0 && !isSingleDiscAlbum
+ visible: isValid && discNumber !== 0 && !isSingleDiscAlbum
- font.weight: (isPlaying ? Font.Bold : Font.Light)
- color: myPalette.text
+ font.weight: (isPlaying ? Font.Bold : Font.Light)
+ color: myPalette.text
- Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
- Layout.preferredWidth: (numberSeparatorSize.boundingRect.width - numberSeparatorSize.boundingRect.x)
- Layout.minimumWidth: (numberSeparatorSize.boundingRect.width - numberSeparatorSize.boundingRect.x)
- Layout.maximumWidth: (numberSeparatorSize.boundingRect.width - numberSeparatorSize.boundingRect.x)
+ Layout.preferredWidth: (numberSeparatorSize.boundingRect.width - numberSeparatorSize.boundingRect.x)
+ Layout.minimumWidth: (numberSeparatorSize.boundingRect.width - numberSeparatorSize.boundingRect.x)
+ Layout.maximumWidth: (numberSeparatorSize.boundingRect.width - numberSeparatorSize.boundingRect.x)
- TextMetrics {
- id: numberSeparatorSize
+ TextMetrics {
+ id: numberSeparatorSize
- text: '/'
- }
+ text: '/'
}
+ }
- Label {
- horizontalAlignment: Text.AlignRight
+ Label {
+ horizontalAlignment: Text.AlignRight
- font.weight: (isPlaying ? Font.Bold : Font.Light)
- color: myPalette.text
+ font.weight: (isPlaying ? Font.Bold : Font.Light)
+ color: myPalette.text
- text: Number(discNumber).toLocaleString(Qt.locale(), 'f', 0)
+ text: Number(discNumber).toLocaleString(Qt.locale(), 'f', 0)
- visible: isValid && discNumber !== 0 && !isSingleDiscAlbum
+ visible: isValid && discNumber !== 0 && !isSingleDiscAlbum
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- Layout.preferredWidth: ((discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) > (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x) ?
- (discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) :
- (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x))
- Layout.minimumWidth: ((discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) > (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x) ?
- (discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) :
- (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x))
- Layout.maximumWidth: ((discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) > (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x) ?
- (discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) :
- (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x))
+ Layout.preferredWidth: ((discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) > (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x) ?
+ (discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) :
+ (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x))
+ Layout.minimumWidth: ((discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) > (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x) ?
+ (discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) :
+ (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x))
+ Layout.maximumWidth: ((discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) > (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x) ?
+ (discNumberSize.boundingRect.width - discNumberSize.boundingRect.x) :
+ (realDiscNumberSize.boundingRect.width - realDiscNumberSize.boundingRect.x))
- Layout.rightMargin: !LayoutMirroring.enabled ? (elisaTheme.layoutHorizontalMargin / 2) : 0
- Layout.leftMargin: LayoutMirroring.enabled ? (elisaTheme.layoutHorizontalMargin / 2) : 0
+ Layout.rightMargin: !LayoutMirroring.enabled ? (elisaTheme.layoutHorizontalMargin / 2) : 0
+ Layout.leftMargin: LayoutMirroring.enabled ? (elisaTheme.layoutHorizontalMargin / 2) : 0
- TextMetrics {
- id: discNumberSize
+ TextMetrics {
+ id: discNumberSize
- text: '9'
- }
+ text: '9'
+ }
- TextMetrics {
- id: realDiscNumberSize
+ TextMetrics {
+ id: realDiscNumberSize
- text: Number(discNumber).toLocaleString(Qt.locale(), 'f', 0)
- }
+ text: Number(discNumber).toLocaleString(Qt.locale(), 'f', 0)
}
+ }
- LabelWithToolTip {
- id: mainCompactLabel
+ LabelWithToolTip {
+ id: mainCompactLabel
- text: title
+ text: title
- font.weight: (isPlaying ? Font.Bold : Font.Normal)
- color: myPalette.text
+ font.weight: (isPlaying ? Font.Bold : Font.Normal)
+ color: myPalette.text
- Layout.maximumWidth: mainCompactLabel.implicitWidth + 1
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
+ Layout.maximumWidth: mainCompactLabel.implicitWidth + 1
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
- visible: isValid
+ visible: isValid
- elide: Text.ElideRight
- horizontalAlignment: Text.AlignLeft
- }
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignLeft
+ }
- LabelWithToolTip {
- id: mainInvalidCompactLabel
+ LabelWithToolTip {
+ id: mainInvalidCompactLabel
- text: title
+ text: title
- font.weight: Font.Normal
- color: myPalette.text
+ font.weight: Font.Normal
+ color: myPalette.text
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
- visible: !isValid
+ visible: !isValid
- elide: Text.ElideRight
- }
+ elide: Text.ElideRight
+ }
- Item {
- Layout.fillWidth: true
- Layout.preferredWidth: 0
- }
+ Item {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 0
+ }
- Controls1.ToolButton {
- id: infoButton
- objectName: 'infoButton'
+ Controls1.ToolButton {
+ id: infoButton
+ objectName: 'infoButton'
- implicitHeight: elisaTheme.smallDelegateToolButtonSize
- implicitWidth: elisaTheme.smallDelegateToolButtonSize
+ implicitHeight: elisaTheme.smallDelegateToolButtonSize
+ implicitWidth: elisaTheme.smallDelegateToolButtonSize
- opacity: 0
+ opacity: 0
- visible: opacity > 0.1
+ visible: opacity > 0.1
- action: showInfo
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- }
+ action: showInfo
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ }
- Controls1.ToolButton {
- id: playPauseButton
- objectName: 'playPauseButton'
+ Controls1.ToolButton {
+ id: playPauseButton
+ objectName: 'playPauseButton'
- implicitHeight: elisaTheme.smallDelegateToolButtonSize
- implicitWidth: elisaTheme.smallDelegateToolButtonSize
+ implicitHeight: elisaTheme.smallDelegateToolButtonSize
+ implicitWidth: elisaTheme.smallDelegateToolButtonSize
- opacity: 0
+ opacity: 0
- scale: LayoutMirroring.enabled ? -1 : 1 // We can mirror the symmetrical pause icon
+ scale: LayoutMirroring.enabled ? -1 : 1 // We can mirror the symmetrical pause icon
- visible: opacity > 0.1
- action: !(isPlaying === MediaPlayList.IsPlaying) ? playNow : pauseNow
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- }
+ visible: opacity > 0.1
+ action: !(isPlaying === MediaPlayList.IsPlaying) ? playNow : pauseNow
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ }
- Item {
- implicitHeight: elisaTheme.smallDelegateToolButtonSize
- implicitWidth: elisaTheme.smallDelegateToolButtonSize
- Layout.maximumWidth: elisaTheme.smallDelegateToolButtonSize
- Layout.maximumHeight: elisaTheme.smallDelegateToolButtonSize
- Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ Item {
+ implicitHeight: elisaTheme.smallDelegateToolButtonSize
+ implicitWidth: elisaTheme.smallDelegateToolButtonSize
+ Layout.maximumWidth: elisaTheme.smallDelegateToolButtonSize
+ Layout.maximumHeight: elisaTheme.smallDelegateToolButtonSize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
- Controls1.ToolButton {
- id: removeButton
- objectName: 'removeButton'
+ Controls1.ToolButton {
+ id: removeButton
+ objectName: 'removeButton'
- anchors.fill: parent
+ anchors.fill: parent
- opacity: 0
+ opacity: 0
- visible: opacity > 0.1
- action: removeFromPlayList
- }
+ visible: opacity > 0.1
+ action: removeFromPlayList
}
+ }
- RatingStar {
- id: ratingWidget
+ RatingStar {
+ id: ratingWidget
- starRating: rating
+ starRating: rating
- starSize: elisaTheme.ratingStarSize
+ starSize: elisaTheme.ratingStarSize
- visible: rating > 0
- }
+ visible: rating > 0
+ }
- LabelWithToolTip {
- id: durationLabel
+ LabelWithToolTip {
+ id: durationLabel
- text: duration
+ text: duration
- font.weight: (isPlaying ? Font.Bold : Font.Normal)
- color: myPalette.text
+ font.weight: (isPlaying ? Font.Bold : Font.Normal)
+ color: myPalette.text
- Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
- Layout.leftMargin: elisaTheme.layoutHorizontalMargin / 2
- Layout.rightMargin: elisaTheme.layoutHorizontalMargin / 2
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ Layout.leftMargin: elisaTheme.layoutHorizontalMargin / 2
+ Layout.rightMargin: elisaTheme.layoutHorizontalMargin / 2
- horizontalAlignment: Text.AlignRight
- }
+ horizontalAlignment: Text.AlignRight
}
}
}
diff --git a/src/qml/ViewSelector.qml b/src/qml/ViewSelector.qml
--- a/src/qml/ViewSelector.qml
+++ b/src/qml/ViewSelector.qml
@@ -42,48 +42,69 @@
Rectangle {
anchors.fill: parent
+ z: 1
- color: myPalette.base
- border {
- color: (rootFocusScope.activeFocus ? myPalette.highlight : "transparent")
- width: 1
+ border.color: myPalette.base
+
+ Behavior on border.color {
+ ColorAnimation {
+ duration: 300
+ }
}
+ }
+
+ ScrollView {
+ focus: true
+
+ anchors.fill: parent
+ z: 2
+
+ clip: true
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+
+ ListView {
+ id: viewModeView
- ScrollView {
focus: true
+ activeFocusOnTab: true
+ keyNavigationEnabled: true
- anchors.fill: parent
+ property bool ignoreCurrentItemChanges: false
- clip: true
- ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ z: 2
+ anchors.topMargin: elisaTheme.layoutHorizontalMargin * 2
- ListView {
- id: viewModeView
+ model: DelegateModel {
+ id: pageDelegateModel
- focus: true
- activeFocusOnTab: true
- keyNavigationEnabled: true
+ delegate: MouseArea {
+ id: itemMouseArea
- property bool ignoreCurrentItemChanges: false
+ property var viewType: model.type
- z: 2
+ height: Math.round(elisaTheme.viewSelectorDelegateHeight * 1.4)
+ width: viewModeView.width
- anchors.topMargin: elisaTheme.layoutHorizontalMargin * 2
+ hoverEnabled: true
+ acceptedButtons: Qt.LeftButton
- model: DelegateModel {
- id: pageDelegateModel
+ Rectangle {
- delegate: MouseArea {
- id: itemMouseArea
+ border {
+ color: ((viewModeView.currentIndex === index && rootFocusScope.activeFocus) ? myPalette.highlight : "transparent")
+ width: 1
+ }
- property var viewType: model.type
+ Behavior on border.color {
+ ColorAnimation {
+ duration: 300
+ }
+ }
- height: elisaTheme.viewSelectorDelegateHeight * 1.4
- width: viewModeView.width
+ radius: 3
- hoverEnabled: true
- acceptedButtons: Qt.LeftButton
+ anchors.fill: parent
Loader {
anchors.fill: parent
@@ -185,31 +206,28 @@
}
}
}
+ }
- onClicked: viewModeView.currentIndex = index
+ onClicked: {
+ rootFocusScope.focus = true
+ viewModeView.currentIndex = index
}
}
+ }
- footer: MouseArea {
- width: viewModeView.width
- height: viewModeView.height - y
+ footer: MouseArea {
+ width: viewModeView.width
+ height: viewModeView.height - y
- acceptedButtons: Qt.LeftButton
+ acceptedButtons: Qt.LeftButton
- onClicked:
- {
- rootFocusScope.focus = true
- }
+ onClicked:
+ {
+ rootFocusScope.focus = true
}
-
- onCurrentItemChanged: if (!ignoreCurrentItemChanges) switchView(currentItem.viewType)
}
- }
- Behavior on border.color {
- ColorAnimation {
- duration: 300
- }
+ onCurrentItemChanged: if (!ignoreCurrentItemChanges) switchView(currentItem.viewType)
}
}