Warning, /frameworks/purpose/src/quick/JobView.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de>
0003 SPDX-License-Identifier: LGPL-2.1-or-later
0004 */
0005
0006 import QtQuick 2.10
0007 import QtQuick.Controls 2.10
0008 import QtQuick.Layouts 1.1
0009
0010 import org.kde.purpose 1.0
0011 import org.kde.kirigami 2.10 as Kirigami
0012
0013 Item {
0014
0015 property alias model: jobController.model
0016 property alias index: jobController.index
0017
0018 readonly property alias state: jobController.state
0019 readonly property alias job: jobController.job
0020
0021 implicitHeight: mainLoader.implicitHeight
0022
0023 function start() {
0024 jobController.configure()
0025 }
0026
0027 PurposeJobController {
0028 id: jobController
0029 }
0030
0031 Loader {
0032 id: mainLoader
0033 anchors.fill: parent
0034
0035 sourceComponent: {
0036 switch (jobController.state) {
0037 case PurposeJobController.Configuring: return configuring
0038 case PurposeJobController.Running: return running
0039 return undefined
0040 }
0041 }
0042 }
0043
0044 Component {
0045 id: running
0046
0047 Item {
0048 BusyIndicator {
0049 running: true
0050 anchors.centerIn: parent
0051 }
0052 }
0053 }
0054
0055 Component {
0056 id: configuring
0057
0058 ColumnLayout {
0059 Loader {
0060 id: configLoader
0061
0062 Layout.leftMargin: Kirigami.Units.largeSpacing
0063 Layout.rightMargin: Kirigami.Units.largeSpacing
0064 Layout.topMargin: Kirigami.Units.largeSpacing
0065
0066 Layout.fillHeight: true
0067 Layout.fillWidth: true
0068
0069 Component.onCompleted: setSource(jobController.configuration.configSourceCode, jobController.configuration.data)
0070
0071 onItemChanged: {
0072 var initialData = jobController.configuration.data;
0073 for(var i in jobController.configuration.neededArguments) {
0074 var arg = jobController.configuration.neededArguments[i]
0075 if (arg in configLoader.item) {
0076 item[arg+"Changed"].connect(dataHasChanged);
0077 initialData[arg] = item[arg];
0078 } else {
0079 console.warn("property not found", arg);
0080 }
0081 }
0082 jobController.configuration.data = initialData;
0083 }
0084
0085 function dataHasChanged()
0086 {
0087 var jobData = jobController.configuration.data;
0088 for(var i in jobController.configuration.neededArguments) {
0089 var arg = jobController.configuration.neededArguments[i]
0090 if (arg in configLoader.item) {
0091 jobData[arg] = configLoader.item[arg];
0092 } else
0093 console.warn("property not found", arg);
0094 }
0095 jobController.configuration.data = jobData;
0096 }
0097 }
0098
0099 Label {
0100 textFormat: Text.PlainText
0101 Layout.fillWidth: true
0102 Layout.fillHeight: true
0103 horizontalAlignment: Text.AlignHCenter
0104 verticalAlignment: Text.AlignVCenter
0105 visible: configLoader.status === Loader.Error
0106 wrapMode: Text.WordWrap
0107 text: configLoader.status === Loader.Error
0108 ? i18nd("libpurpose6_quick", "Failed to load the configuration page for this action:\n\n%1", configLoader.sourceComponent.errorString())
0109 : ""
0110 }
0111
0112 // Not using a DialogButtonBox because it doesn't let us customize
0113 // the buttons and conditionally disable any of them, which we want
0114 RowLayout {
0115 Layout.leftMargin: Kirigami.Units.largeSpacing
0116 Layout.rightMargin: Kirigami.Units.largeSpacing
0117 Layout.bottomMargin: Kirigami.Units.largeSpacing
0118 Layout.alignment: Qt.AlignRight
0119
0120 Button {
0121 text: i18nd("libpurpose6_quick", "Send")
0122 icon.name: "document-send"
0123 enabled: jobController.configuration
0124 && jobController.configuration.isReady
0125 onClicked: jobController.startJob()
0126 }
0127
0128 Button {
0129 text: i18nd("libpurpose6_quick", "Cancel")
0130 icon.name: "dialog-cancel"
0131 onClicked: jobController.cancel()
0132 }
0133 }
0134 }
0135 }
0136 }