|
4 | 4 | id: root |
5 | 5 |
|
6 | 6 | property string command: "" |
7 | | - property string stdout: "" |
8 | | - property string stderr: "" |
9 | | - property bool useFallback: false |
10 | | - property bool usingFallback: loader.source.toString() === "ProcessMonitorFallback.qml" |
11 | | - property bool running: false |
| 7 | + readonly property string stdout: process.stdout ?? "" |
| 8 | + readonly property string stderr: process.stderr ?? "" |
| 9 | + readonly property bool forceFallback: false |
| 10 | + readonly property bool running: process.running ?? false |
| 11 | + property bool usingFallback: false |
| 12 | + property var process: null |
| 13 | + property bool loadingFailed: false |
| 14 | + property list<string> loadingErrors |
12 | 15 |
|
13 | 16 | function restart() { |
14 | | - if (loader.status === Loader.Ready) { |
15 | | - loader.item.restart(); |
| 17 | + if (process !== null) { |
| 18 | + process.restart(); |
16 | 19 | } |
17 | 20 | } |
18 | 21 |
|
19 | 22 | function stop() { |
20 | | - if (loader.status === Loader.Ready) { |
21 | | - loader.item.stop(); |
| 23 | + if (process !== null) { |
| 24 | + process.stop(); |
22 | 25 | } |
23 | 26 | } |
24 | 27 |
|
25 | 28 | onCommandChanged: { |
26 | | - if (loader.status === Loader.Ready) { |
27 | | - loader.item.command = root.command; |
| 29 | + if (process !== null) { |
| 30 | + process.command = root.command; |
28 | 31 | } |
29 | 32 | } |
30 | 33 |
|
31 | | - Loader { |
32 | | - id: loader |
33 | | - |
34 | | - source: root.useFallback ? "ProcessMonitorFallback.qml" : "ProcessMonitorPrimary.qml" |
35 | | - onStatusChanged: { |
36 | | - if (status === Loader.Error) { |
37 | | - loader.source = "ProcessMonitorFallback.qml"; |
| 34 | + Component.onCompleted: { |
| 35 | + let component = null; |
| 36 | + const sources = ["ProcessMonitorFallback.qml"]; |
| 37 | + if (!root.forceFallback) { |
| 38 | + sources.unshift("ProcessMonitorPrimary.qml"); |
| 39 | + } |
| 40 | + for (let source of sources) { |
| 41 | + component = Qt.createComponent(source); |
| 42 | + if (component.status === Component.Ready) { |
| 43 | + process = component.createObject(root); |
| 44 | + process.command = root.command; |
| 45 | + break; |
| 46 | + } else { |
| 47 | + console.warn(component.errorString()); |
| 48 | + root.loadingErrors.push(component.errorString()); |
38 | 49 | } |
39 | 50 | } |
40 | | - onLoaded: { |
41 | | - loader.item.command = root.command; |
42 | | - loader.item.stdoutChanged.connect(() => { |
43 | | - root.stdout = loader.item.stdout; |
44 | | - }); |
45 | | - loader.item.stderrChanged.connect(() => { |
46 | | - root.stderr = loader.item.stderr; |
47 | | - }); |
48 | | - loader.item.runningChanged.connect(() => { |
49 | | - root.running = loader.item.running; |
50 | | - }); |
| 51 | + |
| 52 | + if (process === null) { |
| 53 | + root.loadingFailed = true; |
51 | 54 | } |
| 55 | + root.usingFallback = component.url.toString().includes("ProcessMonitorFallback.qml"); |
52 | 56 | } |
53 | 57 | } |
0 commit comments