Warning, /education/gcompris/src/core/Score.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - Score.qml 0002 * 0003 * SPDX-FileCopyrightText: 2014 Bruno Coudoin <bruno.coudoin@gcompris.net> 0004 * 0005 * Authors: 0006 * Bruno Coudoin <bruno.coudoin@gcompris.net> 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 to visualize sub-level progress. 0015 * @ingroup components 0016 * 0017 * Score usually consists of current-level (@ref currentSubLevel) 0018 * and the max number of levels (@ref numberOfSubLevels). 0019 * 0020 * It is mainly used as a score counter, starting at 0 and increasing 0021 * directly after a good answer. 0022 * 0023 * It can in some cases be used as a sub-level counter, starting at 1. 0024 * But it should be used as sub-level counter only if the sub-level increases 0025 * regardless of if the answer is good or bad, or if there is no answer to give 0026 * to reach next sub-level. In this case, don't forget to set the variable 0027 * "isScoreCounter" to false, so it will look a bit different visually. 0028 * 0029 * For other cases an activity can also directly define the whole message 0030 * it wants to be shown (@ref message). 0031 * 0032 * @inherit QtQuick.Rectangle 0033 */ 0034 Rectangle { 0035 id: score 0036 0037 /** 0038 * type:int 0039 * Size of the font used in pt. 0040 * 0041 * @sa GCFont.fontSize. 0042 */ 0043 property alias fontSize: subLevelText.fontSize 0044 0045 /** 0046 * type:string 0047 * Define how text size is determined 0048 * 0049 * @sa GCFont.fontSizeMode. 0050 */ 0051 property alias fontSizeMode: subLevelText.fontSizeMode 0052 0053 /** 0054 * type:real 0055 * Define margins 0056 */ 0057 property real margins: 30 0058 0059 /** 0060 * type:int 0061 * Total number of sub-levels to show. 0062 * 0063 * @sa currentSubLevel 0064 */ 0065 property int numberOfSubLevels 0066 0067 /** 0068 * type:int 0069 * Current sub-level to show. 0070 * 0071 * @sa numberOfSubLevels 0072 */ 0073 property int currentSubLevel 0074 0075 /** 0076 * type:string 0077 * Complete message string to show. 0078 * 0079 * Mutually exclusive with currentSubLevel and numberOfSubLevels 0080 */ 0081 property string message 0082 0083 /** 0084 * type:bool 0085 * Wether the component is used as a score counter (true) 0086 * or something else, like a subLevel counter (false) 0087 */ 0088 property bool isScoreCounter: true 0089 0090 /** 0091 * Alias for external reference of subLevelText. 0092 */ 0093 readonly property alias internalTextComponent: subLevelText 0094 0095 /** 0096 * Emitted when the win animation should be started. 0097 * 0098 * Triggers scale and rotation animation. 0099 */ 0100 signal playWinAnimation 0101 /** 0102 * Emitted when manually stopping the animation 0103 * 0104 * Resets scale and rotation. 0105 */ 0106 signal stopWinAnimation 0107 /** 0108 * Emitted when the animation is finished 0109 */ 0110 signal stop 0111 0112 Connections { 0113 target: activity 0114 onStop: stopWinAnimation(); 0115 } 0116 0117 color: "#AAFFFFFF" 0118 width: subLevelText.width * 2 0119 height: subLevelText.height * 1.4 0120 radius: 10 0121 anchors.bottom: parent.bottom 0122 anchors.right: parent.right 0123 anchors.margins: margins 0124 0125 border.color: "white" 0126 border.width: isScoreCounter ? 0 : 3 * ApplicationInfo.ratio 0127 0128 z: 1000 0129 0130 onCurrentSubLevelChanged: message = currentSubLevel + "/" + numberOfSubLevels 0131 onNumberOfSubLevelsChanged: message = currentSubLevel + "/" + numberOfSubLevels 0132 onPlayWinAnimation: winAnimation.start() 0133 onStopWinAnimation: { 0134 winAnimation.stop() 0135 score.scale = 1.0 0136 score.rotation = 0 0137 } 0138 0139 readonly property bool isWinAnimationPlaying: winAnimation.running 0140 0141 GCText { 0142 id: subLevelText 0143 anchors.centerIn: parent 0144 fontSizeMode: Text.Fit 0145 font.bold: true 0146 color: "#373737" 0147 text: message 0148 } 0149 0150 SequentialAnimation { 0151 id: winAnimation 0152 ParallelAnimation { 0153 PropertyAnimation { 0154 target: score 0155 properties: "scale" 0156 from: 1.0 0157 to: 1.4 0158 duration: 500 0159 } 0160 NumberAnimation { 0161 target: score 0162 property: "rotation" 0163 from: -10; to: 10 0164 duration: 750 0165 easing.type: Easing.InOutQuad 0166 } 0167 } 0168 ParallelAnimation { 0169 PropertyAnimation { 0170 target: score 0171 properties: "scale" 0172 from: 1.4 0173 to: 1.0 0174 duration: 500 0175 } 0176 NumberAnimation { 0177 target: score 0178 property: "rotation" 0179 from: 10; to: 0 0180 duration: 750 0181 easing.type: Easing.InOutQuad 0182 } 0183 } 0184 onFinished: score.stop() 0185 } 0186 }