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 }