Warning, /education/gcompris/src/activities/colors/ColorItem.qml is written in an unsupported language. File is not indexed.

0001 /* GCompris - ColorItem.qml
0002  *
0003  * SPDX-FileCopyrightText: 2014 Bruno Coudoin <bruno.coudoin@gcompris.net>
0004  *
0005  * Authors:
0006  *   Pascal Georges <pascal.georges1@free.fr> (GTK+ version)
0007  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (Qt Quick port)
0008  *
0009  *   SPDX-License-Identifier: GPL-3.0-or-later
0010  */
0011 import QtQuick 2.12
0012 import "findit.js" as Activity
0013 import "../../core"
0014 import GCompris 1.0
0015 
0016 Image {
0017     id: item
0018     property GCAudio audioVoices
0019     property Item bar
0020     property string audioSrc
0021     property string question
0022     property bool playAudioOnError: false
0023 
0024     function select() {
0025         if(items.objectSelected)
0026             return
0027         items.objectSelected = true
0028         if(Activity.hasWon) {
0029             return
0030         }
0031 
0032         if(question === Activity.getCurrentTextQuestion()) {
0033             particles.burst(40)
0034             animWin.start()
0035             score.currentSubLevel += 1
0036             score.playWinAnimation()
0037             activity.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/completetask.wav")
0038         } else {
0039             if(audioSrc && item.playAudioOnError) {
0040                 item.audioVoices.play(audioSrc)
0041             }
0042             crossAnim.start()
0043             activity.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/crash.wav")
0044         }
0045     }
0046 
0047     MouseArea {
0048         id: mouseArea
0049         anchors.fill: parent
0050         enabled: !items.objectSelected
0051         onClicked: select()
0052     }
0053 
0054     SequentialAnimation {
0055           id: anim
0056           running: true
0057           loops: Animation.Infinite
0058           NumberAnimation {
0059               target: item
0060               property: "rotation"
0061               from: -10; to: 10
0062               duration: 400 + Math.floor(Math.random() * 400)
0063               easing.type: Easing.InOutQuad
0064           }
0065           NumberAnimation {
0066               target: item
0067               property: "rotation"
0068               from: 10; to: -10
0069               duration: 400 + Math.floor(Math.random() * 400)
0070               easing.type: Easing.InOutQuad
0071           }
0072     }
0073 
0074     SequentialAnimation {
0075           id: animWin
0076           running: false
0077           NumberAnimation {
0078               target: item
0079               property: "rotation"
0080               from: 0; to: 360
0081               duration: 600
0082               easing.type: Easing.InOutQuad
0083           }
0084           ScriptAction { script: Activity.nextQuestion() }
0085           onRunningChanged: {
0086               if (running == false) {
0087                   items.objectSelected = false
0088               }
0089           }
0090     }
0091 
0092     ParticleSystemStarLoader {
0093         id: particles
0094         clip: false
0095     }
0096 
0097     Image {
0098         id: cross
0099         source: Activity.url + "checkError.svg"
0100         sourceSize.width: 128 * ApplicationInfo.ratio
0101         anchors.centerIn: parent
0102         width: 0
0103         height: width
0104         opacity: 1
0105 
0106         property int size: Math.min(parent.width, parent.height)
0107     }
0108 
0109     SequentialAnimation {
0110         id: crossAnim
0111         PropertyAnimation {
0112             target: cross
0113             property: "width"
0114             duration: 300
0115             from: 0
0116             to: cross.size
0117             easing.type: Easing.InOutQuad
0118         }
0119         PauseAnimation { duration: 800 }
0120         PropertyAnimation {
0121             target: cross
0122             property: "width"
0123             duration: 300
0124             from: cross.size
0125             to: 0
0126             easing.type: Easing.InOutQuad
0127         }
0128         onRunningChanged: {
0129             if (running == false) {
0130                 items.objectSelected = false
0131             }
0132         }
0133     }
0134 
0135 }