Warning, /education/gcompris/src/core/Loading.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - Loading.qml
0002 *
0003 * SPDX-FileCopyrightText: 2015 Holger Kaelberer <holger.k@elberer.de>
0004 *
0005 * Authors:
0006 * Holger Kaelberer <holger.k@elberer.de>
0007 *
0008 * SPDX-License-Identifier: GPL-3.0-or-later
0009 */
0010 import QtQuick 2.12
0011 import GCompris 1.0
0012
0013 /**
0014 * A QML component presenting a loading overlay to the user
0015 *
0016 * Should be used whenever the application is performing heavy work, that
0017 * would lead to a freeze in the GUI. The interface is simple:
0018 * <ul>
0019 * <li>
0020 start() starts the loading overlay. As a result interaction with the ui
0021 * is no longer possible (via touch/mouse) except for key event handling.
0022 * </li>
0023 * <li>
0024 * stop() stops the loading overlay. A user must take care to call stop()
0025 * in all possible (also error-) cases or the application never leaves
0026 * the loading overlay again.
0027 * </li>
0028 * </ul>
0029 *
0030 * There should be only one single Loading object anchored in the main window
0031 * as a sibling to the page stack. Activities are supposed to use this single
0032 * instance via the ActivityBase.loading property.
0033 *
0034 * Note that you can't use the loading animation to signal heavy ui changes that are
0035 * issued synchronously as the QML scene won't be updated fast enough to
0036 * even show the loading item. Therefore, to avoid freezing the ui, use...
0037 * <ul>
0038 * <li>
0039 * ... WorkerScript-s for ListModel based ui changes and
0040 * </li>
0041 * <li>
0042 * ... Component.incubateObject() for dynamic ui changes object creation
0043 * </li>
0044 * </ul>
0045 */
0046 Item {
0047 id: root
0048
0049 /**
0050 * type:bool
0051 * Whether the loading icon is active.
0052 */
0053 property bool active: false
0054
0055 /**
0056 * Start the loading overlay.
0057 */
0058 function start() {
0059 visible = true;
0060 active = true;
0061 }
0062
0063 /**
0064 * Stop the loading overlay.
0065 */
0066 function stop() {
0067 active = false;
0068 visible = false;
0069 if(ApplicationSettings.isKioskMode) {
0070 ActivityInfoTree.startingActivity = "";
0071 }
0072 }
0073
0074 anchors.fill: parent
0075 z: 10001 // should be the highest value in the whole scene
0076
0077 visible: false
0078
0079 MultiPointTouchArea {
0080 // Just to catch mouse events
0081 anchors.fill: parent
0082 }
0083
0084 Rectangle {
0085 visible: ActivityInfoTree.startingActivity === ""
0086 anchors.fill: parent
0087 opacity: 0.8
0088 color: "grey"
0089 }
0090
0091 Image {
0092 id: loadingImage
0093 source: "qrc:/gcompris/src/core/resource/loading.svg"
0094 anchors.centerIn: parent
0095 sourceSize.width: 150
0096 width: sourceSize.width
0097 height: sourceSize.width
0098 opacity: 0.8
0099
0100 RotationAnimation on rotation {
0101 id: rotation
0102 running: root.active
0103 from: 0
0104 to: 360
0105 loops: Animation.Infinite
0106 duration: 1500
0107 }
0108 }
0109 }