Warning, /maui/vvave/src/widgets/TracksGroup.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.15
0002 import QtQuick.Controls 2.15
0003 import QtQuick.Layouts 1.3
0004 
0005 import org.mauikit.controls 1.3 as Maui
0006 import org.maui.vvave 1.0 as Vvave
0007 import org.mauikit.filebrowsing 1.3 as FB
0008 
0009 import "BabeTable"
0010 import "BabeGrid"
0011 
0012 import "../db/Queries.js" as Q
0013 import "../utils/Player.js" as Player
0014 
0015 Maui.SectionGroup
0016 {
0017     id: control
0018     Maui.Theme.colorSet: Maui.Theme.Window
0019     Maui.Theme.inherit: false
0020 
0021     property alias currentIndex: _gridView.currentIndex
0022     property alias listModel : _listModel
0023     property alias browser : _gridView
0024     property alias list : _list
0025 
0026     property int orientation: Qt.Horizontal
0027     property bool coverArt: settings.showArtwork
0028 
0029     padding: Maui.Style.space.medium
0030 
0031     visible: _gridView.count
0032 
0033     background: Rectangle
0034     {
0035         color: Maui.Theme.backgroundColor
0036         radius: Maui.Style.radiusV
0037     }
0038 
0039     template.template.content: Maui.ToolButtonMenu
0040     {
0041         icon.name: "media-playback-start"
0042 
0043         MenuItem
0044         {
0045             icon.name : "media-playback-start"
0046             text: i18n("Play All")
0047             onTriggered: Player.playAllModel(control.listModel.list)
0048 
0049         }
0050 
0051         MenuItem
0052         {
0053             icon.name : "media-playlist-append"
0054             text: i18n("Append All")
0055             onTriggered: Player.appendAllModel(control.listModel.list)
0056         }
0057     }
0058 
0059     TableMenu
0060     {
0061         id: contextMenu
0062 
0063         MenuSeparator {}
0064 
0065         MenuItem
0066         {
0067             text: i18n("Go to Artist")
0068             icon.name: "view-media-artist"
0069             onTriggered: goToArtist(listModel.get(control.currentIndex).artist)
0070         }
0071 
0072         MenuItem
0073         {
0074             text: i18n("Go to Album")
0075             icon.name: "view-media-album-cover"
0076             onTriggered:
0077             {
0078                 let item = listModel.get(control.currentIndex)
0079                 goToAlbum(item.artist, item.album)
0080             }
0081         }
0082 
0083         onFavClicked:
0084         {
0085             listModel.list.fav(listModel.mappedToSource(contextMenu.index), !FB.Tagging.isFav(listModel.get(contextMenu.index).url))
0086         }
0087 
0088         onQueueClicked: Player.queueTracks([listModel.get(contextMenu.index)])
0089 
0090         onSaveToClicked:
0091         {
0092             _dialogLoader.sourceComponent = _playlistDialogComponent
0093             dialog.composerList.urls = filterSelection(listModel.get(contextMenu.index).url)
0094             dialog.open()
0095         }
0096 
0097         onOpenWithClicked: FB.FM.openLocation(filterSelection(listModel.get(contextMenu.index).url))
0098 
0099         onDeleteClicked:
0100         {
0101             _dialogLoader.sourceComponent = _removeDialogComponent
0102             dialog.urls = filterSelection(listModel.get(contextMenu.index).url)
0103             dialog.open()
0104         }
0105 
0106         onInfoClicked:
0107         {
0108             //            infoView.show(listModel.get(control.currentIndex))
0109         }
0110 
0111         onEditClicked:
0112         {
0113             _dialogLoader.sourceComponent = _metadataDialogComponent
0114             dialog.index = contextMenu.index
0115             dialog.open()
0116         }
0117 
0118         onCopyToClicked:
0119         {
0120             cloudView.list.upload(contextMenu.index)
0121         }
0122 
0123         onShareClicked:
0124         {
0125             const url = listModel.get(contextMenu.index).url
0126             Maui.Platform.shareFiles([url])
0127         }
0128 
0129         onClosed: control.currentIndex = -1
0130     }
0131 
0132 
0133     Maui.GridBrowser
0134     {
0135         id: _gridView
0136         clip: true
0137 
0138         enableLassoSelection: true
0139 
0140         currentIndex: -1
0141 
0142         Layout.fillWidth: true
0143         Layout.fillHeight: true
0144         Layout.preferredHeight: 220
0145 
0146         flickable.flow: control.orientation ===  Qt.Horizontal ? GridView.FlowTopToBottom : GridView.FlowLeftToRight
0147 
0148         itemSize: control.orientation === Qt.Vertical ? Math.max(Math.floor(_gridView.width/ 3), 200) : 200
0149         itemHeight: 64
0150         scrollView.orientation: control.orientation
0151         adaptContent: control.orientation ===  Qt.Horizontal ? false : true
0152 
0153         model: Maui.BaseModel
0154         {
0155             id: _listModel
0156             list: Vvave.Tracks
0157             {
0158                 id: _list
0159             }
0160         }
0161 
0162         onItemsSelected:
0163         {
0164             for(var i in indexes)
0165             {
0166                 selectionBar.addToSelection(control.listModel.get(indexes[i]))
0167             }
0168         }
0169 
0170         Connections
0171         {
0172             target: player
0173             function onFinished()
0174             {
0175                 _listModel.list.refresh()
0176             }
0177         }
0178 
0179         delegate: Item
0180         {
0181             height: GridView.view.cellHeight
0182             width: GridView.view.cellWidth
0183 
0184             TableDelegate
0185             {
0186                 id: delegate
0187                 coverArt: control.coverArt
0188                 anchors.fill: parent
0189                 anchors.margins: Maui.Style.space.small
0190                 appendButton: (Maui.Handy.isTouch ? true : delegate.hovered)
0191                 onAppendClicked:
0192                 {
0193                     control.currentIndex = index
0194                     Player.appendTrack(listModel.get(index))
0195                 }
0196                 label2.text: model.artist
0197 
0198                 isCurrentItem: parent.GridView.isCurrentItem || checked
0199 
0200                 onToggled: selectionBar.addToSelection(control.listModel.get(index))
0201                 checked: selectionBar.contains(model.url)
0202                 checkable: selectionMode
0203 
0204                 Drag.keys: ["text/uri-list"]
0205                 Drag.mimeData: Drag.active ?
0206                                    {
0207                                        "text/uri-list": model.url
0208                                    } : {}
0209 
0210             Connections
0211             {
0212                 target: selectionBar
0213                 ignoreUnknownSignals: true
0214 
0215                 function onUriRemoved (uri)
0216                 {
0217                     if(uri === model.url)
0218                         delegate.checked = false
0219                 }
0220 
0221                 function onUriAdded(uri)
0222                 {
0223                     if(uri === model.url)
0224                         delegate.checked = true
0225                 }
0226 
0227                 function onCleared()
0228                 {
0229                     delegate.checked = false
0230                 }
0231             }
0232 
0233             onClicked:
0234             {
0235                 _gridView.currentIndex = index
0236                 if(Maui.Handy.singleClick)
0237                 {
0238                     Player.quickPlay(_listModel.get(_gridView.currentIndex))
0239                 }
0240             }
0241 
0242             onPressAndHold: { if(Maui.Handy.isTouch) openItemMenu(index) }
0243             onRightClicked: openItemMenu(index)
0244 
0245             onDoubleClicked:
0246             {
0247                 _gridView.currentIndex = index
0248                 if(!Maui.Handy.singleClick)
0249                 {
0250                     Player.quickPlay(_listModel.get(_gridView.currentIndex))
0251                 }
0252             }
0253         }
0254     }
0255 }
0256 
0257 function openItemMenu(index)
0258 {
0259     currentIndex = index
0260     contextMenu.index = index
0261     contextMenu.fav = FB.Tagging.isFav(listModel.get(contextMenu.index).url)
0262     contextMenu.titleInfo = listModel.get(contextMenu.index)
0263     contextMenu.show()
0264 }
0265 }