Warning, /plasma/plasma-bigscreen/containments/homescreen/package/contents/ui/launcher/LauncherHome.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2019 Aditya Mehra <aix.m@outlook.com>
0003     SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 import QtQuick 2.15
0009 import QtQuick.Layouts 1.15
0010 import QtQuick.Controls 2.15 as Controls
0011 import QtQuick.Window 2.15
0012 import org.kde.plasma.plasmoid 2.0
0013 import org.kde.plasma.core 2.0 as PlasmaCore
0014 import org.kde.plasma.components 3.0 as PlasmaComponents
0015 import org.kde.kquickcontrolsaddons 2.0
0016 import org.kde.kirigami 2.19 as Kirigami
0017 import org.kde.kitemmodels 1.0 as KItemModels
0018 
0019 import "delegates" as Delegates
0020 import org.kde.mycroft.bigscreen 1.0 as BigScreen
0021 import org.kde.private.biglauncher 1.0 
0022 import org.kde.plasma.private.kicker 0.1 as Kicker
0023 
0024 FocusScope {
0025     property bool mycroftIntegration: false
0026 
0027     // Mycroft Integration Is Disabled
0028     // property bool mycroftIntegration: Plasmoid.bigLauncherDbusAdapterInterface.mycroftIntegrationActive() ? 1 : 0
0029 
0030     // Connections {
0031     //     target: Plasmoid.bigLauncherDbusAdapterInterface
0032 
0033     //     function onEnableMycroftIntegrationChanged(mycroftIntegration) {
0034     //         mycroftIntegration = Plasmoid.bigLauncherDbusAdapterInterface.mycroftIntegrationActive()
0035     //         if(mycroftIntegration){
0036     //             voiceAppsView.visible = voiceAppsView.count > 0 ? 1 : 0
0037     //         } else {
0038     //             voiceAppsView.visible = false
0039     //         }
0040     //     }
0041     // }
0042 
0043     anchors {
0044         fill: parent
0045         leftMargin: Kirigami.Units.largeSpacing * 4
0046         topMargin: Kirigami.Units.largeSpacing * 3
0047     }
0048 
0049     ColumnLayout {
0050         id: launcherHomeColumn
0051         anchors {
0052             left: parent.left
0053             right: parent.right
0054         }
0055         property Item currentSection
0056         y: currentSection ? -currentSection.y + parent.height/2 - currentSection.height/2 : parent.height/2
0057 
0058         Behavior on y {
0059             YAnimator {
0060                 duration: Kirigami.Units.longDuration * 2
0061                 easing.type: Easing.InOutQuad
0062             }
0063         }
0064         //height: parent.height
0065         spacing: Kirigami.Units.largeSpacing*3
0066         
0067 
0068         BigScreen.TileRepeater {
0069             id: recentView
0070             title: i18n("Recent")
0071             compactMode: plasmoid.expandingTiles
0072             model: Kicker.RecentUsageModel {
0073                 shownItems: Kicker.RecentUsageModel.OnlyApps
0074             }
0075 
0076             visible: count > 0
0077             currentIndex: 0
0078             focus: true
0079             onActiveFocusChanged: if (activeFocus) launcherHomeColumn.currentSection = recentView
0080             delegate: Delegates.AppDelegate {
0081                 property var modelData: typeof model !== "undefined" ? model : null
0082                 iconImage: model.decoration
0083                 text: model.display
0084                 comment: model.description
0085                 onClicked: (mouse)=> {
0086                     recentView.model.trigger(index, "", null);
0087                 }
0088             }
0089 
0090             navigationUp: shutdownIndicator
0091             navigationDown: voiceAppsView.visible ? voiceAppsView : appsView
0092         }
0093 
0094         BigScreen.TileRepeater {
0095             id: voiceAppsView
0096             title: i18n("Voice Apps")
0097             compactMode: plasmoid.configuration.expandingTiles
0098             model: KItemModels.KSortFilterProxyModel {
0099                 sourceModel: plasmoid.applicationListModel
0100                 filterRoleName: "ApplicationCategoriesRole"
0101                 filterRowCallback: function(source_row, source_parent) {
0102                     return sourceModel.data(sourceModel.index(source_row, 0, source_parent), ApplicationListModel.ApplicationCategoriesRole).indexOf("VoiceApp") !== -1;
0103                 }
0104             }
0105 
0106             visible: mycroftIntegration && count > 0
0107             currentIndex: 0
0108             focus: false
0109             onActiveFocusChanged: if (activeFocus) launcherHomeColumn.currentSection = voiceAppsView
0110             delegate: Delegates.VoiceAppDelegate {
0111                 property var modelData: typeof model !== "undefined" ? model : null
0112                 
0113             }
0114 
0115             navigationUp: recentView.visible ? recentView : shutdownIndicator
0116             navigationDown: appsView.visible ? appsView : (gamesView.visible ? gamesView : settingsView)
0117         }
0118 
0119         BigScreen.TileRepeater {
0120             id: appsView
0121             title: i18n("Applications")
0122             compactMode: plasmoid.configuration.expandingTiles
0123             visible: count > 0
0124             enabled: count > 0
0125             model: KItemModels.KSortFilterProxyModel {
0126                 sourceModel: plasmoid.applicationListModel
0127                 filterRoleName: "ApplicationCategoriesRole"
0128                 filterRowCallback: function(source_row, source_parent) {
0129                     var cats = sourceModel.data(sourceModel.index(source_row, 0, source_parent), ApplicationListModel.ApplicationCategoriesRole);
0130                     return cats.indexOf("Game") === -1 && cats.indexOf("VoiceApp") === -1;
0131                 }
0132             }
0133 
0134             currentIndex: 0
0135             focus: false
0136             onActiveFocusChanged: if (activeFocus) launcherHomeColumn.currentSection = appsView
0137             delegate: Delegates.AppDelegate {
0138                 property var modelData: typeof model !== "undefined" ? model : null
0139                 comment: model.ApplicationCommentRole
0140             }
0141             
0142             navigationUp: voiceAppsView.visible ? voiceAppsView : recentView.visible ? recentView : shutdownIndicator
0143             navigationDown: gamesView.visible ? gamesView : settingsView
0144         }
0145         
0146         BigScreen.TileRepeater {
0147             id: gamesView
0148             title: i18n("Games")
0149             compactMode: plasmoid.configuration.expandingTiles
0150             visible: count > 0
0151             enabled: count > 0
0152             model: KItemModels.KSortFilterProxyModel {
0153                 sourceModel: plasmoid.applicationListModel
0154                 filterRoleName: "ApplicationCategoriesRole"
0155                 filterRowCallback: function(source_row, source_parent) {
0156                     return sourceModel.data(sourceModel.index(source_row, 0, source_parent), ApplicationListModel.ApplicationCategoriesRole).indexOf("Game") !== -1;
0157                 }
0158             }
0159 
0160             currentIndex: 0
0161             focus: false
0162             onActiveFocusChanged: if (activeFocus) launcherHomeColumn.currentSection = gamesView
0163             delegate: Delegates.AppDelegate {
0164                 property var modelData: typeof model !== "undefined" ? model : null
0165             }
0166             
0167             navigationUp: appsView.visible ? appsView : (voiceAppsView.visible ? voiceAppsView : (recentView.visible ? recentView : shutdownIndicator))
0168             navigationDown: settingsView
0169         }
0170 
0171         SettingActions {
0172             id: settingActions
0173         }
0174         
0175         BigScreen.TileRepeater {
0176             id: settingsView
0177             title: i18n("Settings")
0178             model: plasmoid.kcmsListModel
0179             compactMode: plasmoid.configuration.expandingTiles
0180 
0181             onActiveFocusChanged: if (activeFocus) launcherHomeColumn.currentSection = settingsView
0182             delegate: Delegates.SettingDelegate {
0183                 property var modelData: typeof model !== "undefined" ? model : null
0184             }
0185             
0186             navigationUp: gamesView.visible ? gamesView : (appsView.visible ? appsView : (voiceAppsView.visible ? voiceAppsView : (recentView.visible ? recentView : shutdownIndicator)))
0187             navigationDown: null
0188         }
0189 
0190         Component.onCompleted: {
0191             if (recentView.visible) {
0192                 recentView.forceActiveFocus();
0193             } else if(voiceAppsView.visible) {
0194                 voiceAppsView.forceActiveFocus();
0195             } else {
0196                 appsView.forceActiveFocus();
0197             }
0198         }
0199 
0200         Connections {
0201             target: root
0202             function onActivateAppView() {
0203                 if (recentView.visible) {
0204                 recentView.forceActiveFocus();
0205                 } else if(voiceAppsView.visible) {
0206                     voiceAppsView.forceActiveFocus();
0207                 } else {
0208                     appsView.forceActiveFocus();
0209                 }
0210             }
0211         }
0212     }
0213 }