PlaylistsView.qml 4.06 KB
Newer Older
1 2 3
import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.2
4
import org.kde.kirigami 2.2 as Kirigami
5 6 7

import "../../view_models/BabeTable"
import "../../view_models"
Camilo Higuita's avatar
Camilo Higuita committed
8
import "../../db/Queries.js" as Q
9 10


11 12 13 14 15 16 17
//    transform: Translate
//    {
//        x: (playlistViewDrawer.position * playlistViewRoot.width * 0.33)*-1
//    }

Kirigami.PageRow
{
18
    id: playlistViewRoot
Camilo Higuita's avatar
Camilo Higuita committed
19
    property string playlistQuery
20

21 22
    property alias playlistViewModel : playlistViewModel

23 24
    signal rowClicked(var track)
    signal quickPlayTrack(var track)
Camilo Higuita's avatar
Camilo Higuita committed
25
    signal playAll(var tracks)
26
    signal playSync(var playlist)
Camilo Higuita's avatar
Camilo Higuita committed
27
    signal appendAll(var tracks)
28

Camilo Higuita's avatar
Camilo Higuita committed
29
    clip: true
30 31 32
    separatorVisible: wideMode
    initialPage:[playlistList, playlistViewDrawer]
    defaultColumnWidth: Kirigami.Units.gridUnit * 15
33
    interactive: false
34

Camilo Higuita's avatar
Camilo Higuita committed
35
    Page
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
    {
        id: playlistList
        ColumnLayout
        {
            anchors.fill: parent
            spacing: 0
            Layout.margins: 0

            PlaylistsViewModel
            {
                id: playlistViewModel

                Layout.fillHeight: true
                Layout.fillWidth: true

51 52 53 54 55 56
                onPlaySync:
                {
                    if(!playlistViewModel.model.get(index).playlistIcon)
                        playlistViewRoot.playSync(playlistViewModel.model.get(index).playlist)
                }

57 58 59 60 61
            }

            ColorTagsBar
            {
                Layout.fillWidth: true
62 63
                height: rowHeightAlt
                recSize: toolBarIconSize
64 65 66 67
                Rectangle
                {
                    anchors.fill: parent
                    z: -999
68
                    color:midColor
69
                }
Camilo Higuita's avatar
Camilo Higuita committed
70 71 72 73 74 75
                onColorClicked:
                {
                    populate(Q.GET.colorTracks_.arg(color))
                    if(!playlistViewRoot.wideMode)
                        playlistViewRoot.currentIndex = 1
                }
76 77 78 79 80 81 82 83
            }


        }
    }


    Page
84 85
    {
        id: playlistViewDrawer
86
        anchors.fill: parent
87 88 89

        background: Rectangle
        {
90
            color: altColor
91 92 93 94 95 96 97 98 99
        }

        BabeTable
        {
            id: filterList
            width: parent.width
            height: parent.height
            quickPlayVisible: true
            coverArtVisible: true
100 101
            trackRating: true
            trackDuration: false
102
            headerBar: true
103
            headerClose: !playlistViewRoot.wideMode
Camilo Higuita's avatar
Camilo Higuita committed
104
            headerTitle: playlistViewRoot.wideMode ? "" : playlistViewModel.model.get(playlistViewModel.currentIndex).playlist
105 106 107
            onHeaderClosed: if(!playlistViewRoot.wideMode)
                                playlistViewRoot.currentIndex = 0

108
            holder.message:  "<h2>"+playlistViewModel.model.get(playlistViewModel.currentIndex).playlist+"</h2><p>Your playlist is empty,<br>start adding new music to it</p>"
Camilo Higuita's avatar
Camilo Higuita committed
109
            holder.emoji: "qrc:/assets/face-hug.png"
110

111 112


113 114 115 116 117 118 119 120
            Connections
            {
                target: filterList
                onRowClicked: playlistViewRoot.rowClicked(filterList.model.get(index))
                onQuickPlayTrack:
                {
                    playlistViewRoot.quickPlayTrack(filterList.model.get(index))
                }
Camilo Higuita's avatar
Camilo Higuita committed
121 122
                onPlayAll: playAll(bae.get(playlistQuery))
                onAppendAll: appendAll(bae.get(playlistQuery))
123
                onPulled: populate(playlistQuery)
124 125 126 127 128 129 130
            }
        }

    }

    function populate(query)
    {
Camilo Higuita's avatar
Camilo Higuita committed
131
        playlistQuery = query
132 133 134 135 136 137 138 139 140 141
        filterList.clearTable()

        var tracks = bae.get(query)

        if(tracks.length>0)
            for(var i in tracks)
                filterList.model.append(tracks[i])

    }

142
    function refresh()
143
    {
144 145 146 147 148 149 150 151 152 153
        var i = 9
        for(i; i < playlistViewModel.count; i++)
            playlistViewModel.remove(i)

        setPlaylists()
    }

    function setPlaylists()
    {
        var playlists = bae.get(Q.GET.playlists)
154 155 156 157
        if(playlists.length > 0)
            for(var i in playlists)
                playlistViewModel.model.append(playlists[i])
    }
158 159

    Component.onCompleted: setPlaylists()
160
}