Purpose

JobView.qml
1/*
2 SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de>
3 SPDX-License-Identifier: LGPL-2.1-or-later
4*/
5
6import QtQuick 2.10
7import QtQuick.Controls 2.10
8import QtQuick.Layouts 1.1
9
10import org.kde.purpose 1.0
11import org.kde.kirigami 2.10 as Kirigami
12
13Item {
14
15 property alias model: jobController.model
16 property alias index: jobController.index
17
18 readonly property alias state: jobController.state
19 readonly property alias job: jobController.job
20
21 implicitHeight: mainLoader.implicitHeight
22
23 function start() {
24 jobController.configure()
25 }
26
27 PurposeJobController {
28 id: jobController
29 }
30
31 Loader {
32 id: mainLoader
33 anchors.fill: parent
34
35 sourceComponent: {
36 switch (jobController.state) {
37 case PurposeJobController.Configuring: return configuring
38 case PurposeJobController.Running: return running
39 return undefined
40 }
41 }
42 }
43
44 Component {
45 id: running
46
47 Item {
48 BusyIndicator {
49 running: true
50 anchors.centerIn: parent
51 }
52 }
53 }
54
55 Component {
56 id: configuring
57
58 ColumnLayout {
59 Loader {
60 id: configLoader
61
62 Layout.leftMargin: Kirigami.Units.largeSpacing
63 Layout.rightMargin: Kirigami.Units.largeSpacing
64 Layout.topMargin: Kirigami.Units.largeSpacing
65
66 Layout.fillHeight: true
67 Layout.fillWidth: true
68
69 Component.onCompleted: setSource(jobController.configuration.configSourceCode, jobController.configuration.data)
70
71 onItemChanged: {
72 var initialData = jobController.configuration.data;
73 for(var i in jobController.configuration.neededArguments) {
74 var arg = jobController.configuration.neededArguments[i]
75 if (arg in configLoader.item) {
76 item[arg+"Changed"].connect(dataHasChanged);
77 initialData[arg] = item[arg];
78 } else {
79 console.warn("property not found", arg);
80 }
81 }
82 jobController.configuration.data = initialData;
83 }
84
85 function dataHasChanged()
86 {
87 var jobData = jobController.configuration.data;
88 for(var i in jobController.configuration.neededArguments) {
89 var arg = jobController.configuration.neededArguments[i]
90 if (arg in configLoader.item) {
91 jobData[arg] = configLoader.item[arg];
92 } else
93 console.warn("property not found", arg);
94 }
95 jobController.configuration.data = jobData;
96 }
97 }
98
99 Label {
100 textFormat: Text.PlainText
101 Layout.fillWidth: true
102 Layout.fillHeight: true
103 horizontalAlignment: Text.AlignHCenter
104 verticalAlignment: Text.AlignVCenter
105 visible: configLoader.status === Loader.Error
106 wrapMode: Text.WordWrap
107 text: configLoader.status === Loader.Error
108 ? i18nd("libpurpose6_quick", "Failed to load the configuration page for this action:\n\n%1", configLoader.sourceComponent.errorString())
109 : ""
110 }
111
112 // Not using a DialogButtonBox because it doesn't let us customize
113 // the buttons and conditionally disable any of them, which we want
114 RowLayout {
115 Layout.leftMargin: Kirigami.Units.largeSpacing
116 Layout.rightMargin: Kirigami.Units.largeSpacing
117 Layout.bottomMargin: Kirigami.Units.largeSpacing
118 Layout.alignment: Qt.AlignRight
119
120 Button {
121 text: i18nd("libpurpose6_quick", "Send")
122 icon.name: "document-send"
123 enabled: jobController.configuration
124 && jobController.configuration.isReady
125 onClicked: jobController.startJob()
126 }
127
128 Button {
129 text: i18nd("libpurpose6_quick", "Cancel")
130 icon.name: "dialog-cancel"
131 onClicked: jobController.cancel()
132 }
133 }
134 }
135 }
136}
QString i18nd(const char *domain, const char *text, const TYPE &arg...)
KGuiItem cancel()
QString name(StandardShortcut id)
AlignRight
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Sat Apr 27 2024 22:07:47 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.