Warning, /plasma-bigscreen/youtube-voice-application/ui/CategoryBoxHomeView.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright 2018 by 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 3 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, see <http://www.gnu.org/licenses/>.
0016 */
0017
0018 import QtQuick 2.9
0019 import QtQuick.Layouts 1.4
0020 import QtGraphicalEffects 1.0
0021 import QtQuick.Controls 2.3
0022 import org.kde.kirigami 2.8 as Kirigami
0023 import Mycroft 1.0 as Mycroft
0024 import "+android/views" as Views
0025 import "+android/delegates" as Delegates
0026
0027 Item {
0028 property var trendListModel: sessionData.trendListBlob.videoList
0029 property var newsListModel: sessionData.newsListBlob.videoList
0030 property var musicListModel: sessionData.musicListBlob.videoList
0031 property var techListModel: sessionData.techListBlob.videoList
0032 property var polListModel: sessionData.polListBlob.videoList
0033 property var gamingListModel: sessionData.gamingListBlob.videoList
0034 property var searchListModel: sessionData.searchListBlob.videoList
0035 property var recentHomeModel: sessionData.recentHomeListBlob.recentList
0036 property var historyListModel: sessionData.recentListBlob.recentList
0037 Layout.fillWidth: true
0038 Layout.fillHeight: true
0039
0040 onFocusChanged: {
0041 if(focus && recentListView.visible){
0042 recentListView.forceActiveFocus()
0043 } else if (focus && !recentListView.visible) {
0044 trendListView.forceActiveFocus()
0045 }
0046 }
0047
0048 onNewsListModelChanged: {
0049 newsListView.view.forceLayout()
0050 }
0051 onMusicListModelChanged: {
0052 musicListView.view.forceLayout()
0053 }
0054 onTechListModelChanged: {
0055 techListView.view.forceLayout()
0056 }
0057 onPolListModelChanged: {
0058 polListView.view.forceLayout()
0059 }
0060 onGamingListModelChanged: {
0061 gamingListView.view.forceLayout()
0062 }
0063 onRecentHomeModelChanged: {
0064 recentListView.view.forceLayout()
0065 }
0066 onTrendListModelChanged: {
0067 trendListView.view.forceLayout()
0068 }
0069
0070 Flickable {
0071 width: parent.width
0072 height: parent.height
0073 contentHeight: contentLayout.implicitHeight
0074
0075 ColumnLayout {
0076 id: contentLayout
0077 anchors {
0078 left: parent.left
0079 right: parent.right
0080 margins: Kirigami.Units.largeSpacing * 3
0081 }
0082 property Item currentSection
0083 readonly property int rowHeight: recentListView.cellWidth / 1.8 + Kirigami.Units.gridUnit * 7
0084 y: currentSection ? -currentSection.y : 0
0085
0086 Behavior on y {
0087 NumberAnimation {
0088 duration: Kirigami.Units.longDuration * 2
0089 easing.type: Easing.InOutQuad
0090 }
0091 }
0092
0093 spacing: Kirigami.Units.largeSpacing * 4
0094
0095 Views.TileView {
0096 id: recentListView
0097 focus: true
0098 model: recentHomeModel
0099 title: "Recently Watched"
0100 cellWidth: parent.width / 2
0101 delegate: Delegates.ListVideoCard{}
0102 visible: recentListView.view.count > 0 ? 1 : 0
0103 onActiveFocusChanged: {
0104 if(activeFocus){
0105 contentLayout.currentSection = recentListView
0106 }
0107 }
0108
0109 implicitHeight: contentLayout.rowHeight
0110 }
0111
0112 Views.TileView {
0113 id: trendListView
0114 focus: false
0115 model: trendListModel
0116 title: "Trending"
0117 cellWidth: parent.width / 2
0118 delegate: Delegates.ListVideoCard{}
0119 onActiveFocusChanged: {
0120 if(activeFocus){
0121 contentLayout.currentSection = trendListView
0122 }
0123 }
0124
0125 implicitHeight: contentLayout.rowHeight
0126 }
0127
0128 Views.TileView {
0129 id: newsListView
0130 focus: false
0131 model: newsListModel
0132 title: "News"
0133 cellWidth: parent.width / 2
0134 delegate: Delegates.ListVideoCard{}
0135 onActiveFocusChanged: {
0136 if(activeFocus){
0137 contentLayout.currentSection = newsListView
0138 }
0139 }
0140
0141 implicitHeight: contentLayout.rowHeight
0142 }
0143
0144 Views.TileView {
0145 id: musicListView
0146 focus: false
0147 model: musicListModel
0148 title: "Music"
0149 cellWidth: parent.width / 2
0150 delegate: Delegates.ListVideoCard{}
0151 onActiveFocusChanged: {
0152 if(activeFocus){
0153 contentLayout.currentSection = musicListView
0154 }
0155 }
0156
0157 implicitHeight: contentLayout.rowHeight
0158 }
0159
0160 Views.TileView {
0161 id: techListView
0162 focus: false
0163 model: techListModel
0164 title: "Technology"
0165 cellWidth: parent.width / 2
0166 delegate: Delegates.ListVideoCard{}
0167 onActiveFocusChanged: {
0168 if(activeFocus){
0169 contentLayout.currentSection = techListView
0170 }
0171 }
0172
0173 implicitHeight: contentLayout.rowHeight
0174 }
0175
0176 Views.TileView {
0177 id: polListView
0178 focus: false
0179 model: polListModel
0180 title: "Politics"
0181 cellWidth: parent.width / 2
0182 delegate: Delegates.ListVideoCard{}
0183 onActiveFocusChanged: {
0184 if(activeFocus){
0185 contentLayout.currentSection = polListView
0186 }
0187 }
0188
0189 implicitHeight: contentLayout.rowHeight
0190 }
0191
0192 Views.TileView {
0193 id: gamingListView
0194 focus: false
0195 model: gamingListModel
0196 title: "Gaming"
0197 cellWidth: parent.width / 2
0198 delegate: Delegates.ListVideoCard{}
0199 onActiveFocusChanged: {
0200 if(activeFocus){
0201 contentLayout.currentSection = gamingListView
0202 }
0203 }
0204
0205 implicitHeight: contentLayout.rowHeight
0206 }
0207 }
0208 }
0209 }