Warning, /plasma/qqc2-breeze-style/style/qtquickcontrols/BusyIndicator.qml is written in an unsupported language. File is not indexed.
0001 /* SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com> 0002 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0003 */ 0004 0005 import QtQuick 0006 import QtQuick.Templates as T 0007 import org.kde.kirigami as Kirigami 0008 import org.kde.quickcharts as Charts 0009 0010 import org.kde.breeze.impl as Impl 0011 0012 T.BusyIndicator { 0013 id: control 0014 0015 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, 0016 implicitContentWidth + leftPadding + rightPadding) 0017 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, 0018 implicitContentHeight + topPadding + bottomPadding) 0019 0020 hoverEnabled: false 0021 0022 padding: Kirigami.Units.mediumSpacing 0023 0024 ListModel { 0025 id: pieModel 0026 dynamicRoles: true 0027 0028 property color oddColor: Kirigami.Theme.focusColor 0029 property color evenColor: "transparent" 0030 0031 // The ends periodically appear to connect, 0032 // forming a six sided asterisk-like shape with no center area 0033 0034 Component.onCompleted: { 0035 append({ value: 1, color: oddColor }) 0036 append({ value: 2, color: evenColor }) 0037 append({ value: 2, color: oddColor }) 0038 append({ value: 2, color: evenColor }) 0039 append({ value: 2, color: oddColor }) 0040 append({ value: 2, color: evenColor }) 0041 append({ value: 2, color: oddColor }) 0042 append({ value: 2, color: evenColor }) 0043 append({ value: 2, color: oddColor }) 0044 append({ value: 2, color: evenColor }) 0045 append({ value: 2, color: oddColor }) 0046 append({ value: 2, color: evenColor }) 0047 append({ value: 1, color: oddColor }) 0048 } 0049 } 0050 0051 contentItem: Loader { 0052 sourceComponent: GraphicsInfo.api == GraphicsInfo.Software ? 0053 lowPowerSpinnerComponent : fancySpinnerComponent 0054 } 0055 0056 Component { 0057 id: lowPowerSpinnerComponent 0058 Kirigami.Icon { 0059 id: lowPowerSpinner 0060 implicitWidth: Kirigami.Units.iconSizes.sizeForLabels 0061 implicitHeight: Kirigami.Units.iconSizes.sizeForLabels 0062 source: "view-refresh" 0063 0064 opacity: control.visible && control.enabled && control.running ? 1 : 0 0065 Behavior on opacity { 0066 OpacityAnimator { duration: Kirigami.Units.shortDuration } 0067 } 0068 0069 smooth: true 0070 RotationAnimator { 0071 target: lowPowerSpinner 0072 running: control.visible && control.enabled && control.running 0073 from: 0 0074 to: 360 0075 loops: Animation.Infinite 0076 duration: 1500 0077 } 0078 } 0079 } 0080 0081 Component { 0082 id: fancySpinnerComponent 0083 Charts.PieChart { 0084 id: fancySpinner 0085 implicitWidth: Kirigami.Units.gridUnit 0086 implicitHeight: Kirigami.Units.gridUnit 0087 0088 opacity: control.visible && control.enabled && control.running ? 1 : 0 0089 Behavior on opacity { 0090 OpacityAnimator { duration: Kirigami.Units.shortDuration } 0091 } 0092 0093 valueSources: Charts.ModelSource { roleName: "value"; model: pieModel } 0094 colorSource: Charts.ModelSource { roleName: "color"; model: pieModel } 0095 0096 fromAngle: 0 0097 toAngle: 360 0098 thickness: Math.max(Impl.Units.smallRadius * 2, Math.floor(Math.min(width, height)/6)) 0099 filled: false 0100 //smoothEnds: true // Turns the segments into aesthetically pleasing round dots, but breaks the connected appearance when the ends meet :( 0101 0102 ParallelAnimation { 0103 running: control.visible && control.enabled && control.running 0104 SequentialAnimation { 0105 loops: Animation.Infinite 0106 NumberAnimation { 0107 target: fancySpinner 0108 property: "toAngle" 0109 from: 0 0110 to: 360 0111 duration: 1000 0112 } 0113 PauseAnimation { 0114 duration: 1000 0115 } 0116 NumberAnimation { 0117 target: fancySpinner 0118 property: "fromAngle" 0119 from: 0 0120 to: 360 0121 duration: 1000 0122 } 0123 PropertyAction { 0124 target: fancySpinner 0125 properties: "fromAngle,toAngle" 0126 value: 0 0127 } 0128 } 0129 SequentialAnimation { 0130 loops: Animation.Infinite 0131 RotationAnimator { 0132 target: fancySpinner 0133 from: 0 0134 to: 30 0135 duration: 1000 0136 } 0137 // This is meant to appear to rotate at the same rate as the other 2 animations. 0138 // In order to achieve this, the actual rotation rate has to be much higher than the other 2 animimations. 0139 // This is because the pie angles aren't being animated while this animation is running. 0140 RotationAnimator { 0141 target: fancySpinner 0142 from: 30 0143 to: 330 0144 duration: 1000 0145 } 0146 RotationAnimator { 0147 target: fancySpinner 0148 from: 330 0149 to: 360 0150 duration: 1000 0151 } 0152 } 0153 } 0154 } 0155 } 0156 }