Warning, /multimedia/elisa/src/qml/DataGridView.qml is written in an unsupported language. File is not indexed.

0001 /*
0002    SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003    SPDX-FileCopyrightText: 2022 (c) Nate Graham <nate@kde.org>
0004 
0005    SPDX-License-Identifier: LGPL-3.0-or-later
0006  */
0007 
0008 import QtQuick 2.15
0009 
0010 import org.kde.kirigami 2.12 as Kirigami
0011 import org.kde.elisa 1.0
0012 
0013 AbstractDataView {
0014     id: gridView
0015 
0016     property url defaultIcon
0017     property bool delegateDisplaySecondaryText: true
0018 
0019     signal enqueue(var fullData, string name)
0020     signal replaceAndPlay(var fullData, string name)
0021     signal open(var fullData)
0022 
0023     onEnqueue: (fullData, name) => {
0024         proxyModel.enqueue(
0025             fullData,
0026             name,
0027             ElisaUtils.AppendPlayList,
0028             ElisaUtils.DoNotTriggerPlay
0029         );
0030     }
0031 
0032     onReplaceAndPlay: (fullData, name) => {
0033         proxyModel.enqueue(
0034             fullData,
0035             name,
0036             ElisaUtils.ReplacePlayList,
0037             ElisaUtils.TriggerPlay
0038         );
0039     }
0040 
0041     onOpen: fullData => viewManager.openChildView(fullData)
0042 
0043     delegate: GridBrowserDelegate {
0044         width: Kirigami.Settings.isMobile ? contentDirectoryView.cellWidth : elisaTheme.gridDelegateSize
0045         height: contentDirectoryView.cellHeight
0046 
0047         focus: true
0048 
0049         isSelected: contentDirectoryView.currentIndex === index
0050 
0051         isPartial: false
0052 
0053         mainText: model.display
0054         fileUrl: model.url ? model.url : ""
0055         secondaryText: gridView.delegateDisplaySecondaryText && model.secondaryText ? model.secondaryText : ""
0056         imageUrl: model.imageUrl ? model.imageUrl : ''
0057         multipleImageUrls: model.multipleImageUrls
0058         imageFallbackUrl: defaultIcon
0059         databaseId: model.databaseId
0060         delegateDisplaySecondaryText: gridView.delegateDisplaySecondaryText
0061         entryType: model.dataType
0062         hasChildren: model.hasChildren
0063 
0064         onEnqueue: gridView.enqueue(model.fullData, model.display)
0065         onReplaceAndPlay: gridView.replaceAndPlay(model.fullData, model.display)
0066         onOpen: gridView.open(model.fullData)
0067 
0068         onSelected: {
0069             forceActiveFocus()
0070             contentDirectoryView.currentIndex = model.index
0071         }
0072 
0073         onActiveFocusChanged: {
0074             if (activeFocus && contentDirectoryView.currentIndex !== model.index) {
0075                 contentDirectoryView.currentIndex = model.index
0076             }
0077         }
0078     }
0079 
0080     contentView: GridView {
0081         id: contentDirectoryView
0082 
0083         activeFocusOnTab: true
0084         keyNavigationEnabled: true
0085 
0086         reuseItems: true
0087 
0088         model: delegateModel
0089 
0090         // HACK: setting currentIndex to -1 in mobile for some reason causes segfaults, no idea why
0091         currentIndex: Kirigami.Settings.isMobile ? 0 : -1
0092 
0093         Accessible.role: Accessible.List
0094         Accessible.name: mainTitle
0095 
0096         cellWidth: {
0097             let columns = Math.max(Math.floor(gridView.viewWidth / elisaTheme.gridDelegateSize), 2);
0098             return Math.floor(gridView.viewWidth / columns);
0099         }
0100         cellHeight: {
0101             if (Kirigami.Settings.isMobile) {
0102                 return cellWidth + Kirigami.Units.gridUnit * 2 + Kirigami.Units.largeSpacing;
0103             } else {
0104                 return elisaTheme.gridDelegateSize + Kirigami.Units.gridUnit * 2 + Kirigami.Units.largeSpacing;
0105             }
0106         }
0107     }
0108 }