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