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

0001 /*
0002     SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2019 Aditya Mehra <aix.m@outlook.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 import QtQuick 2.14
0009 import QtQuick.Window 2.14
0010 import QtQuick.Layouts 1.14
0011 import QtQuick.Controls 2.14 as Controls
0012 import org.kde.kirigami 2.12 as Kirigami
0013 import org.kde.plasma.core 2.0 as PlasmaCore
0014 import Mycroft 1.0 as Mycroft
0015 
0016 Window {
0017     id: window
0018     color: Qt.rgba(0, 0, 0, 0.8)
0019 
0020     width: screen.availableGeometry.width
0021     height: screen.availableGeometry.height
0022 
0023     Component.onCompleted: Mycroft.MycroftController.start()
0024 
0025     function disconnectclose() {
0026         Mycroft.MycroftController.disconnectSocket();
0027         window.close();
0028         mycroftWindowLoader.active = false;
0029     }
0030 
0031     Timer {
0032         interval: 10000
0033         running: Mycroft.MycroftController.status != Mycroft.MycroftController.Open
0034         onTriggered: {
0035             print("Trying to connect to Mycroft");
0036             Mycroft.MycroftController.start();
0037         }
0038     }
0039     onVisibleChanged: {
0040         skillView.open = visible;
0041     }
0042 
0043     Mycroft.StatusIndicator {
0044         id: si
0045         z: 2
0046         anchors {
0047             right: parent.right
0048             top: parent.top
0049             margins: Kirigami.Units.largeSpacing
0050             topMargin: Kirigami.Units.largeSpacing + plasmoid.availableScreenRect.y
0051         }
0052     }
0053     Kirigami.Heading {
0054         id: inputQuery
0055         anchors.right: si.left
0056         anchors.rightMargin: Kirigami.Units.largeSpacing
0057         anchors.verticalCenter: si.verticalCenter
0058         level: 3
0059         opacity: 0
0060         onTextChanged: {
0061             opacity = 1;
0062             utteranceTimer.restart();
0063         }
0064         Timer {
0065             id: utteranceTimer
0066             interval: 8000
0067             onTriggered: {
0068                 inputQuery.text = "";
0069                 inputQuery.opacity = 0
0070             }
0071         }
0072         Behavior on opacity {
0073             OpacityAnimator {
0074                 duration: Kirigami.units.longDuration
0075                 easing.type: Easing.InOutQuad
0076             }
0077         }
0078 
0079         Connections {
0080             target: Mycroft.MycroftController
0081             onIntentRecevied: {
0082                 if(type == "recognizer_loop:utterance") {
0083                     inputQuery.text = data.utterances[0]
0084                 }
0085             }
0086             
0087             onSkillTimeoutReceived: {
0088                 if(skillView.currentItem.contentItem.skillId() == skillidleid) {
0089                     window.close()
0090                 }
0091             }
0092         }
0093     }
0094         
0095     Mycroft.SkillView {
0096         id: skillView
0097         anchors.fill: parent
0098         open: false
0099         Keys.onEscapePressed: window.visible = false;
0100         KeyNavigation.up: closeButton
0101         activeSkills.blackList: plasmoid.nativeInterface.applicationListModel.voiceAppSkills
0102 
0103         activeSkills.onBlacklistedSkillActivated: {
0104             plasmoid.nativeInterface.executeCommand("mycroft-gui-app --hideTextInput --skill=" + skillId);
0105         }
0106        // activeSkills.onSkillActivated: window.showMaximized();
0107         activeSkills.onActiveIndexChanged: {
0108             if (activeSkills.activeIndex > 0) {
0109                 window.visible = false;
0110             }
0111         }
0112 
0113         onOpenChanged: {
0114             if (open) {
0115                 window.showMaximized();
0116             } else {
0117                 window.visible = false;
0118             }
0119         }
0120         
0121         Rectangle {
0122             id: closeButton
0123             anchors.top: parent.top
0124             anchors.left: parent.left
0125             width: PlasmaCore.Units.iconSizes.huge
0126             height: PlasmaCore.Units.iconSizes.huge
0127             opacity: focus ? 1 : 0
0128             color: focus ? Kirigami.Theme.highlightColor :"transparent"
0129             
0130             onFocusChanged: {
0131                 if(focus){
0132                     skillView.currentItem.contentItem.focus = false;
0133                 }
0134             }
0135 
0136             Keys.onDownPressed: {
0137                 skillView.currentItem.contentItem.forceActiveFocus()
0138             }
0139             
0140             Kirigami.Icon {
0141                 anchors.centerIn: parent
0142                 width: PlasmaCore.Units.iconSizes.large
0143                 height: PlasmaCore.Units.iconSizes.large
0144                 source: "tab-close"
0145             }
0146             
0147             Keys.onReturnPressed: {
0148                 window.visible = false;
0149             }
0150             
0151             MouseArea {
0152                 anchors.fill: parent
0153                 onClicked: {
0154                     window.visible = false;
0155                 }
0156             }
0157         }
0158     }
0159     
0160         //FIXME: find a better way for timeouts
0161         //onActiveSkillClosed: open = false;
0162 /*
0163         topPadding: plasmoid.availableScreenRect.y
0164         bottomPadding: root.height - plasmoid.availableScreenRect.y - plasmoid.availableScreenRect.height
0165         leftPadding: plasmoid.availableScreenRect.x
0166         rightPadding: root.width - plasmoid.availableScreenRect.x - plasmoid.availableScreenRect.width
0167         */
0168 }