PlaylistsView.qml 3.82 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

    signal rowClicked(var track)
    signal quickPlayTrack(var track)
Camilo Higuita's avatar
Camilo Higuita committed
23 24
    signal playAll(var tracks)
    signal appendAll(var tracks)
25

Camilo Higuita's avatar
Camilo Higuita committed
26
    clip: true
27 28 29
    separatorVisible: wideMode
    initialPage:[playlistList, playlistViewDrawer]
    defaultColumnWidth: Kirigami.Units.gridUnit * 15
30
    interactive: false
Camilo Higuita's avatar
Camilo Higuita committed
31
    Page
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
    {
        id: playlistList
        ColumnLayout
        {
            anchors.fill: parent
            spacing: 0
            Layout.margins: 0

            PlaylistsViewModel
            {
                id: playlistViewModel

                Layout.fillHeight: true
                Layout.fillWidth: true

            }

            ColorTagsBar
            {
                Layout.fillWidth: true
                height: 32
                recSize: 22
                Rectangle
                {
                    anchors.fill: parent
                    z: -999
                    color:bae.midColor()
                }
Camilo Higuita's avatar
Camilo Higuita committed
60 61 62 63 64 65
                onColorClicked:
                {
                    populate(Q.GET.colorTracks_.arg(color))
                    if(!playlistViewRoot.wideMode)
                        playlistViewRoot.currentIndex = 1
                }
66 67 68 69 70 71 72 73
            }


        }
    }


    Page
74 75
    {
        id: playlistViewDrawer
76 77 78 79 80 81 82 83
        anchors.fill: parent
        //        y: root.header.height
        //        height: parent.height - root.header.height - root.footer.height
        //        width: root.isMobile ? parent.width : parent.width* 0.7
        //        edge: Qt.RightEdge
        //        interactive: true
        //        focus: true
        //        modal: isMobile
84

85 86
        //        modal: !root.wideScreen
        //        onModalChanged: drawerOpen = !modal
87 88 89 90 91 92 93 94 95 96 97 98 99

        background: Rectangle
        {
            color: bae.altColor()
        }

        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

Camilo Higuita's avatar
Camilo Higuita committed
108 109
            holder.message:  "Select a playlist or create a new one"
            holder.emoji: "qrc:/assets/face-hug.png"
110 111 112 113 114 115 116 117 118

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

    }



    function populate(query)
    {
Camilo Higuita's avatar
Camilo Higuita committed
130
        playlistQuery = query
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
        filterList.clearTable()

        var tracks = bae.get(query)

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

    }

    Component.onCompleted:
    {
        var playlists = bae.get("select * from playlists order by addDate desc")
        if(playlists.length > 0)
            for(var i in playlists)
                playlistViewModel.model.append(playlists[i])
    }
}