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