Warning, /multimedia/elisa/src/qml/SimplePlayListView.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003
0004 SPDX-License-Identifier: LGPL-3.0-or-later
0005 */
0006
0007 import QtQuick
0008 import QtQuick.Controls 2.2
0009 import QtQml.Models 2.1
0010
0011 import org.kde.kirigami 2.5 as Kirigami
0012
0013 import org.kde.elisa 1.0
0014
0015 ScrollView {
0016 id: topItem
0017
0018 property alias model: playListView.model
0019
0020 // HACK: workaround for https://bugreports.qt.io/browse/QTBUG-83890
0021 ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
0022
0023 contentItem: ListView {
0024 id: playListView
0025
0026 readonly property int nextIndex: {
0027 var playingIndex = ElisaApplication.mediaPlayListProxyModel.currentTrackRow
0028 if (playingIndex > 0 && playingIndex < playListView.count - 1) {
0029 return playingIndex + 1
0030 } else {
0031 return playingIndex
0032 }
0033 }
0034
0035 property bool draggingEntry: false
0036
0037 reuseItems: true
0038 clip: true
0039 focus: true
0040 activeFocusOnTab: true
0041 keyNavigationEnabled: true
0042
0043 // position the view at the playing index
0044 Component.onCompleted: currentIndex = nextIndex
0045 Connections {
0046 target: ElisaApplication.mediaPlayListProxyModel
0047 function onCurrentTrackRowChanged() {
0048 playListView.currentIndex = playListView.nextIndex
0049 }
0050 }
0051
0052 highlightMoveDuration: Kirigami.Units.veryLongDuration
0053 highlightMoveVelocity: -1
0054 highlight: Item {}
0055
0056 section.property: 'albumSection'
0057 section.criteria: ViewSection.FullString
0058
0059 delegate: Column {
0060 id: playListDelegate
0061 width: playListView.width
0062
0063 // album seperator
0064 Item {
0065 width: playListView.width
0066 height: Kirigami.Units.smallSpacing
0067 visible: entry.previousAlbum && entry.previousAlbum !== entry.currentAlbum
0068 }
0069
0070 Loader {
0071 id: albumSection
0072 active: entry.sectionVisible
0073 visible: active
0074 sourceComponent: BasicPlayListAlbumHeader {
0075 headerData: JSON.parse(playListDelegate.ListView.section)
0076 width: playListView.width
0077 simpleMode: true
0078 Kirigami.Theme.textColor: "#eff0f1"
0079 }
0080 }
0081
0082 PlayListEntry {
0083 id: entry
0084
0085 focus: true
0086 width: playListView.width
0087
0088 index: model.index
0089 simpleMode: true
0090 listView: playListView
0091 listDelegate: playListDelegate
0092
0093 databaseId: model.databaseId ? model.databaseId : 0
0094 entryType: model.entryType ? model.entryType : ElisaUtils.Unknown
0095 title: model.title ? model.title : ''
0096 artist: model.artist ? model.artist : ''
0097 album: model.album ? model.album : ''
0098 albumArtist: model.albumArtist ? model.albumArtist : ''
0099 duration: model.duration ? model.duration : ''
0100 fileName: model.trackResource ? model.trackResource : ''
0101 imageUrl: model.imageUrl ? model.imageUrl : ''
0102 trackNumber: model.trackNumber ? model.trackNumber : -1
0103 discNumber: model.discNumber ? model.discNumber : -1
0104 rating: model.rating ? model.rating : 0
0105 isSingleDiscAlbum: model.isSingleDiscAlbum !== undefined ? model.isSingleDiscAlbum : true
0106 isValid: model.isValid
0107 isPlaying: model.isPlaying
0108 metadataModifiableRole: model.metadataModifiableRole ? model.metadataModifiableRole : false
0109 }
0110 }
0111
0112 add: Transition {
0113 NumberAnimation {
0114 property: "opacity";
0115 from: 0;
0116 to: 1;
0117 duration: Kirigami.Units.shortDuration }
0118 }
0119
0120 populate: Transition {
0121 NumberAnimation {
0122 property: "opacity";
0123 from: 0;
0124 to: 1;
0125 duration: Kirigami.Units.shortDuration }
0126 }
0127
0128 remove: Transition {
0129 NumberAnimation {
0130 property: "opacity";
0131 from: 1.0;
0132 to: 0;
0133 duration: Kirigami.Units.shortDuration }
0134 }
0135
0136 displaced: Transition {
0137 NumberAnimation {
0138 properties: "x,y";
0139 duration: Kirigami.Units.shortDuration
0140 easing.type: Easing.InOutQuad}
0141 }
0142 }
0143 }