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 }