Warning, /plasma-bigscreen/youtube-voice-application/ui/+mediacenter/views/ListTileView.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright 2019 Aditya Mehra <aix.m@outlook.com> 0003 * Copyright 2019 Marco Martin <mart@kde.org> 0004 * 0005 * This program is free software; you can redistribute it and/or modify 0006 * it under the terms of the GNU General Public License as published by 0007 * the Free Software Foundation; either version 2 of the License, or 0008 * (at your option) any later version. 0009 * 0010 * This program is distributed in the hope that it will be useful, 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 * GNU General Public License for more details. 0014 * 0015 * You should have received a copy of the GNU General Public License 0016 * along with this program; if not, write to the Free Software 0017 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. 0018 */ 0019 0020 import QtQuick 2.12 0021 import QtQuick.Layouts 1.4 0022 import QtQuick.Window 2.2 0023 import QtQuick.Controls 2.4 as Controls 0024 import QtGraphicalEffects 1.12 0025 0026 import org.kde.plasma.core 2.0 as PlasmaCore 0027 import org.kde.plasma.components 3.0 as PlasmaComponents 0028 import org.kde.kirigami 2.5 as Kirigami 0029 0030 FocusScope { 0031 id: root 0032 signal activated 0033 property string title 0034 property alias view: view 0035 property alias delegate: view.delegate 0036 property alias model: view.model 0037 property alias currentIndex: view.currentIndex 0038 property alias currentItem: view.currentItem 0039 Layout.fillWidth: true 0040 0041 implicitHeight: view.implicitHeight + header.implicitHeight 0042 property int columns: parent.width >= 1500 ? Math.max(3, Math.floor(width / (Kirigami.Units.gridUnit * 14))) : 5 0043 property alias cellWidth: view.cellWidth 0044 0045 property Item navigationUp 0046 property Item navigationDown 0047 0048 Kirigami.Heading { 0049 id: header 0050 anchors { 0051 left: parent.left 0052 right: parent.right 0053 top: parent.top 0054 } 0055 text: title 0056 layer.enabled: true 0057 color: "white" 0058 } 0059 0060 ListView { 0061 id: view 0062 anchors { 0063 left: parent.left 0064 right: parent.right 0065 top: header.baseline 0066 bottom: parent.bottom 0067 topMargin: Kirigami.Units.largeSpacing*2 0068 leftMargin: -Kirigami.Units.largeSpacing 0069 } 0070 focus: true 0071 0072 z: activeFocus ? 10: 1 0073 keyNavigationEnabled: true 0074 //Centering disabled as experiment 0075 highlightRangeMode: ListView.ApplyRange 0076 0077 highlightFollowsCurrentItem: true 0078 snapMode: ListView.SnapToItem 0079 cacheBuffer: width 0080 implicitHeight: cellWidth + Kirigami.Units.gridUnit * 3 0081 rightMargin: width-cellWidth*3 0082 readonly property int cellWidth: parent.width / 6 0083 preferredHighlightBegin: cellWidth 0084 preferredHighlightEnd: cellWidth 0085 displayMarginBeginning: cellWidth 0086 displayMarginEnd: cellWidth 0087 0088 highlightMoveVelocity: -1 0089 highlightMoveDuration: Kirigami.Units.longDuration 0090 0091 onContentWidthChanged: if (view.currentIndex === 0) view.contentX = view.originX 0092 0093 onMovementEnded: flickEnded() 0094 onFlickEnded: currentIndex = indexAt(mapToItem(contentItem, cellWidth, 0).x, 0) 0095 0096 spacing: 0 0097 orientation: ListView.Horizontal 0098 0099 move: Transition { 0100 SmoothedAnimation { 0101 property: "x" 0102 duration: Kirigami.Units.longDuration 0103 } 0104 } 0105 0106 KeyNavigation.left: root 0107 KeyNavigation.right: root 0108 0109 Keys.onDownPressed: { 0110 if (!navigationDown) { 0111 return; 0112 } 0113 0114 if (navigationDown instanceof TileView) { 0115 navigationDown.currentIndex = Math.min(Math.floor(navigationDown.view.indexAt(navigationDown.view.contentX + cellWidth/2, height/2)) + (view.currentIndex - view.indexAt(view.contentX + cellWidth/2, height/2)), navigationDown.view.count - 1); 0116 0117 if (navigationDown.currentIndex < 0) { 0118 navigationDown.currentIndex = view.currentIndex > 0 ? navigationDown.view.count - 1 : 0 0119 } 0120 } 0121 0122 navigationDown.forceActiveFocus(); 0123 } 0124 0125 Keys.onUpPressed: { 0126 if (!navigationUp) { 0127 return; 0128 } 0129 0130 if (navigationUp instanceof TileView) { 0131 navigationUp.currentIndex = Math.min(Math.floor(navigationUp.view.indexAt(navigationUp.view.contentX + cellWidth/2, height/2)) + (view.currentIndex - view.indexAt(view.contentX + cellWidth/2, height/2)), navigationUp.view.count - 1); 0132 0133 if (navigationUp.currentIndex < 0) { 0134 navigationUp.currentIndex = view.currentIndex > 0 ? navigationUp.view.count - 1 : 0 0135 } 0136 } 0137 0138 navigationUp.forceActiveFocus(); 0139 } 0140 } 0141 }