1
1
// SPDX-License-Identifier: LGPL-3.0-or-later
2
2
3
3
import QtQuick
4
+ import QtQuick.Layouts
5
+ import QtQuick.Controls
4
6
import ScratchCPPGui
5
7
6
8
ProjectScene {
@@ -9,18 +11,30 @@ ProjectScene {
9
11
property alias turboMode: loader .turboMode
10
12
property alias cloneLimit: loader .cloneLimit
11
13
property alias spriteFencing: loader .spriteFencing
14
+ property bool showLoadingProgress: true
15
+ readonly property bool loading: priv .loading
16
+ readonly property int downloadedAssets: loader .downloadedAssets
17
+ readonly property int assetCount: loader .assetCount
12
18
signal loaded ()
13
19
signal failedToLoad ()
14
20
15
21
id: root
16
22
clip: true
23
+ onFileNameChanged: priv .loading = true ;
24
+
25
+ QtObject {
26
+ id: priv
27
+ property bool loading: false
28
+ }
17
29
18
30
ProjectLoader {
19
31
id: loader
20
32
fileName: root .fileName
21
33
stageWidth: parent .width
22
34
stageHeight: parent .height
23
35
onLoadingFinished: {
36
+ priv .loading = false ;
37
+
24
38
if (loadStatus)
25
39
loaded ();
26
40
else
@@ -55,4 +69,44 @@ ProjectScene {
55
69
Component .onCompleted : modelData .renderedTarget = this
56
70
}
57
71
}
72
+
73
+ Loader {
74
+ anchors .fill : parent
75
+ active: showLoadingProgress && loading
76
+
77
+ sourceComponent: ColumnLayout {
78
+ anchors .fill : parent
79
+
80
+ Item { Layout .fillHeight : true }
81
+
82
+ BusyIndicator {
83
+ Layout .fillWidth : true
84
+ Layout .maximumWidth : 100
85
+ Layout .alignment : Qt .AlignHCenter
86
+ running: true
87
+ }
88
+
89
+ Label {
90
+ Layout .alignment : Qt .AlignHCenter
91
+ font .bold : true
92
+ font .pointSize : 12
93
+ text: {
94
+ if (loading)
95
+ return assetCount == downloadedAssets ? qsTr (" Loading project..." ) : qsTr (" Downloading assets... (%1 of %2)" ).arg (downloadedAssets).arg (assetCount);
96
+ else
97
+ return " " ;
98
+ }
99
+ }
100
+
101
+ ProgressBar {
102
+ Layout .fillWidth : true
103
+ from: 0
104
+ to: assetCount
105
+ value: downloadedAssets
106
+ indeterminate: assetCount == downloadedAssets
107
+ }
108
+
109
+ Item { Layout .fillHeight : true }
110
+ }
111
+ }
58
112
}
0 commit comments