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 }