mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2025-09-05 18:22:46 +00:00
Album page landscape improvements
This commit is contained in:
parent
040aeb1a40
commit
a172b6d914
9 changed files with 433 additions and 199 deletions
166
sailfish/qml/components/music/NarrowAlbumCover.qml
Normal file
166
sailfish/qml/components/music/NarrowAlbumCover.qml
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
Sailfin: a Jellyfin client written using Qt
|
||||
Copyright (C) 2020 Chris Josten
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
import ".."
|
||||
import "../.."
|
||||
|
||||
/**
|
||||
* Album details for "narrow" devices such as phones in portrait mode.
|
||||
*/
|
||||
Item {
|
||||
property ListView listview
|
||||
property real releaseYear
|
||||
property alias albumArt: albumArt.source
|
||||
property string albumArtist
|
||||
property real duration
|
||||
property int songCount
|
||||
property string name
|
||||
|
||||
|
||||
property string stateIfArt: "largeArt"
|
||||
property alias _albumArt: albumArt
|
||||
id: listHeader
|
||||
width: parent.width
|
||||
//spacing: Theme.paddingLarge
|
||||
state: _albumArt.source != "" ? stateIfArt : "noArt"
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
if (listHeader.stateIfArt == "largeArt") {
|
||||
listHeader.stateIfArt = "details"
|
||||
} else {
|
||||
listHeader.stateIfArt = "largeArt"
|
||||
}
|
||||
}
|
||||
}
|
||||
RemoteImage {
|
||||
id: albumArt
|
||||
anchors {
|
||||
top: parent.top
|
||||
right: parent.right
|
||||
}
|
||||
sourceSize.width: listHeader.width
|
||||
sourceSize.height: listHeader.width
|
||||
fillMode: Image.PreserveAspectFit
|
||||
opacity: 1
|
||||
clip: true
|
||||
}
|
||||
PageHeader {
|
||||
id: albumHeader
|
||||
width: parent.width - Theme.horizontalPageMargin - height
|
||||
title: name
|
||||
//: Short description of the album: %1 -> album artist, %2 -> amount of songs, %3 -> duration, %4 -> release year
|
||||
description: qsTr("%1\n%2 songs | %3 | %4")
|
||||
.arg(albumArtist)
|
||||
.arg(songCount)
|
||||
.arg(Utils.ticksToText(duration))
|
||||
//: Unknown album release year
|
||||
.arg(releaseYear >= 0 ? releaseYear : qsTr("Unknown year"))
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "largeArt"
|
||||
PropertyChanges {
|
||||
target: _albumArt
|
||||
width: parent.width
|
||||
height: width
|
||||
}
|
||||
PropertyChanges {
|
||||
target: listHeader
|
||||
height: width
|
||||
}
|
||||
PropertyChanges {
|
||||
target: albumHeader
|
||||
opacity: 0
|
||||
}
|
||||
PropertyChanges {
|
||||
target: listview
|
||||
contentY: -listview.width
|
||||
}
|
||||
AnchorChanges {
|
||||
target: albumHeader
|
||||
anchors.left: undefined
|
||||
anchors.right: _albumArt.left
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "details"
|
||||
PropertyChanges {
|
||||
target: _albumArt
|
||||
width: height
|
||||
height: albumHeader.height
|
||||
}
|
||||
PropertyChanges {
|
||||
target: listHeader
|
||||
height: albumHeader.height
|
||||
}
|
||||
PropertyChanges {
|
||||
target: albumHeader
|
||||
opacity: 1
|
||||
}
|
||||
PropertyChanges {
|
||||
target: listview
|
||||
contentY: -albumHeader.height
|
||||
}
|
||||
AnchorChanges {
|
||||
target: albumHeader
|
||||
anchors.left: undefined
|
||||
anchors.right: _albumArt.left
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "noArt"
|
||||
extend: "details"
|
||||
PropertyChanges {
|
||||
target: _albumArt
|
||||
opacity: 0
|
||||
}
|
||||
PropertyChanges {
|
||||
target: albumHeader
|
||||
width: parent.width - Theme.horizontalPageMargin * 2
|
||||
}
|
||||
AnchorChanges {
|
||||
target: albumHeader
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
}
|
||||
}
|
||||
]
|
||||
transitions: [
|
||||
Transition {
|
||||
from: "noArt"
|
||||
// No transitions from "noArt", otherwise the layout animates every load
|
||||
},
|
||||
Transition {
|
||||
OpacityAnimator { target: albumHeader}
|
||||
OpacityAnimator { target: _albumArt}
|
||||
NumberAnimation {
|
||||
properties: "width,height,contentY"
|
||||
//velocity: 1600
|
||||
duration: 300
|
||||
easing.type: Easing.OutQuad
|
||||
}
|
||||
AnchorAnimation {}
|
||||
}
|
||||
]
|
||||
}
|
95
sailfish/qml/components/music/SongDelegate.qml
Normal file
95
sailfish/qml/components/music/SongDelegate.qml
Normal file
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
Sailfin: a Jellyfin client written using Qt
|
||||
Copyright (C) 2020 Chris Josten
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
import "../.."
|
||||
|
||||
ListItem {
|
||||
id: songDelegateRoot
|
||||
property var artists: []
|
||||
property real duration
|
||||
property string name
|
||||
property int indexNumber
|
||||
|
||||
contentHeight: songName.height + songArtists.height + 2 * Theme.paddingMedium
|
||||
width: parent.width
|
||||
|
||||
TextMetrics {
|
||||
id: indexMetrics
|
||||
text: "99"
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
}
|
||||
|
||||
Label {
|
||||
id: songIndex
|
||||
anchors {
|
||||
top: parent.top
|
||||
topMargin: Theme.paddingMedium
|
||||
left: parent.left
|
||||
leftMargin: Theme.horizontalPageMargin
|
||||
}
|
||||
text: indexNumber
|
||||
horizontalAlignment: Text.AlignRight
|
||||
font.pixelSize: Theme.fontSizeExtraLarge
|
||||
width: indexMetrics.width
|
||||
}
|
||||
|
||||
Label {
|
||||
id: songName
|
||||
anchors {
|
||||
left: songIndex.right
|
||||
leftMargin: Theme.paddingLarge
|
||||
top: parent.top
|
||||
topMargin: Theme.paddingMedium
|
||||
right: duration.left
|
||||
rightMargin: Theme.paddingLarge
|
||||
}
|
||||
text: name
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
truncationMode: TruncationMode.Fade
|
||||
}
|
||||
Label {
|
||||
id: songArtists
|
||||
anchors {
|
||||
top: songName.bottom
|
||||
left: songIndex.right
|
||||
leftMargin: Theme.paddingLarge
|
||||
right: parent.right
|
||||
rightMargin: Theme.horizontalPageMargin
|
||||
}
|
||||
text: artists.join(", ")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
truncationMode: TruncationMode.Fade
|
||||
color: highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor
|
||||
}
|
||||
|
||||
Label {
|
||||
id: duration
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: Theme.horizontalPageMargin
|
||||
baseline: songName.baseline
|
||||
}
|
||||
width: contentWidth
|
||||
text: Utils.ticksToText(songDelegateRoot.duration)
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: highlighted ? Theme.secondaryHighlightColor : Theme.secondaryColor
|
||||
}
|
||||
}
|
60
sailfish/qml/components/music/WideAlbumCover.qml
Normal file
60
sailfish/qml/components/music/WideAlbumCover.qml
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
Sailfin: a Jellyfin client written using Qt
|
||||
Copyright (C) 2020 Chris Josten
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
import QtQuick 2.6
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
import ".."
|
||||
import "../.."
|
||||
|
||||
/**
|
||||
* Album details for "wide" devices such as tablets and phones in landscape mode.
|
||||
*/
|
||||
|
||||
Column {
|
||||
property ListView listview
|
||||
property real releaseYear
|
||||
property alias albumArt: albumArt.source
|
||||
property string albumArtist
|
||||
property real duration
|
||||
property int songCount
|
||||
property string name
|
||||
|
||||
Item { width:1; height: Theme.paddingLarge }
|
||||
|
||||
RemoteImage {
|
||||
id: albumArt
|
||||
width: parent.width
|
||||
height: width
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
PageHeader {
|
||||
id: albumHeader
|
||||
leftMargin: 0
|
||||
rightMargin: 0
|
||||
title: name
|
||||
//: Short description of the album: %1 -> album artist, %2 -> amount of songs, %3 -> duration, %4 -> release year
|
||||
description: qsTr("%1\n%2 songs | %3 | %4")
|
||||
.arg(albumArtist)
|
||||
.arg(songCount)
|
||||
.arg(Utils.ticksToText(duration))
|
||||
//: Unknown album release year
|
||||
.arg(releaseYear >= 0 ? releaseYear : qsTr("Unknown year"))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue