C++ / fmt (pull_request) Successful in 4s
JS/TS / fmt (pull_request) Successful in 20s
JS/TS / lint (pull_request) Successful in 22s
Python / static (pull_request) Successful in 57s
Rust / fmt (pull_request) Successful in 1m2s
C++ / build (pull_request) Successful in 2m10s
Rust / build (pull_request) Successful in 1m50s
Rust / clippy (pull_request) Successful in 1m25s
Python / verify (pull_request) Successful in 2m58s
C++ / clang-tidy (pull_request) Successful in 7m8s
103 lines
2.2 KiB
QML
103 lines
2.2 KiB
QML
import ZShell.Config
|
|
import ZShell.Internal
|
|
import QtQuick
|
|
import QtQuick.Templates
|
|
import qs.Services
|
|
|
|
BusyIndicator {
|
|
id: root
|
|
|
|
enum AnimState {
|
|
Stopped,
|
|
Running,
|
|
Completing
|
|
}
|
|
enum AnimType {
|
|
Advance = 0,
|
|
Retreat
|
|
}
|
|
|
|
property int animState
|
|
property color bgColor: Colors.palette.m3secondaryContainer
|
|
property color fgColor: Colors.palette.m3primary
|
|
property real implicitSize: Tokens.font.size.normal * 3
|
|
property real internalStrokeWidth: strokeWidth
|
|
readonly property alias progress: manager.progress
|
|
property real strokeWidth: Tokens.padding.extraSmall * 0.8
|
|
property alias type: manager.indeterminateAnimationType
|
|
|
|
implicitHeight: implicitSize
|
|
implicitWidth: implicitSize
|
|
padding: 0
|
|
|
|
contentItem: CircularProgress {
|
|
anchors.fill: parent
|
|
bgColor: root.bgColor
|
|
fgColor: root.fgColor
|
|
padding: root.padding
|
|
rotation: manager.rotation
|
|
startAngle: manager.startFraction * 360
|
|
strokeWidth: root.internalStrokeWidth
|
|
value: manager.endFraction - manager.startFraction
|
|
}
|
|
states: State {
|
|
name: "stopped"
|
|
when: !root.running
|
|
|
|
PropertyChanges {
|
|
root.internalStrokeWidth: root.strokeWidth / 3
|
|
root.opacity: 0
|
|
}
|
|
}
|
|
transitions: Transition {
|
|
Anim {
|
|
duration: manager.completeEndDuration * Tokens.anim.durations.scale
|
|
properties: "opacity,internalStrokeWidth"
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
if (running) {
|
|
running = false;
|
|
running = true;
|
|
}
|
|
}
|
|
onRunningChanged: {
|
|
if (running) {
|
|
manager.completeEndProgress = 0;
|
|
animState = CircularIndicator.Running;
|
|
} else {
|
|
if (animState == CircularIndicator.Running)
|
|
animState = CircularIndicator.Completing;
|
|
}
|
|
}
|
|
|
|
CircularIndicatorManager {
|
|
id: manager
|
|
}
|
|
|
|
NumberAnimation {
|
|
duration: manager.duration * Tokens.anim.durations.scale
|
|
from: 0
|
|
loops: Animation.Infinite
|
|
property: "progress"
|
|
running: root.animState !== CircularIndicator.Stopped
|
|
target: manager
|
|
to: 1
|
|
}
|
|
|
|
NumberAnimation {
|
|
duration: manager.completeEndDuration * Tokens.anim.durations.scale
|
|
from: 0
|
|
property: "completeEndProgress"
|
|
running: root.animState === CircularIndicator.Completing
|
|
target: manager
|
|
to: 1
|
|
|
|
onFinished: {
|
|
if (root.animState === CircularIndicator.Completing)
|
|
root.animState = CircularIndicator.Stopped;
|
|
}
|
|
}
|
|
}
|