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

0001 /* GCompris - Carriage.qml
0002  *
0003  * SPDX-FileCopyrightText: 2014 Holger Kaelberer <holger.k@elberer.de>
0004  *
0005  * Authors:
0006  *   Pascal Georges <pascal.georges1@free.fr> (GTK+ version)
0007  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (GTK+ Mostly full rewrite)
0008  *   Holger Kaelberer <holger.k@elberer.de> (Qt Quick port)
0009  *
0010  *   SPDX-License-Identifier: GPL-3.0-or-later
0011  */
0012 
0013 import QtQuick 2.12
0014 import GCompris 1.0
0015 import QtGraphicalEffects 1.0
0016 import "../../core"
0017 import "click_on_letter.js" as Activity
0018 
0019 Item {
0020     id: carriageItem
0021     property int nbCarriage
0022     property bool isCarriage: index <= nbCarriage
0023     property bool clickEnabled
0024     property bool isSelected
0025     property alias successAnimation: successAnimation
0026     property alias particle: particle
0027 
0028     Image {
0029         id: carriageImage
0030         width: parent.width
0031         height: parent.height
0032         sourceSize.width: width
0033         fillMode: Image.PreserveAspectFit
0034         source: isCarriage ?
0035                     Activity.url + "carriage.svg":
0036                     Activity.url + "cloud.svg"
0037         z: (state == 'scaled') ? 1 : -1
0038 
0039         Rectangle {
0040             id: carriageBg
0041             visible: isCarriage
0042             width: parent.width - 8
0043             height: parent.height / 1.8
0044             anchors.bottom: parent.top
0045             anchors.bottomMargin: - parent.height / 1.5
0046             radius: height / 10
0047             color: "#f0d578"
0048             border.color: "#b98a1c"
0049             border.width: 3
0050         }
0051 
0052         Rectangle {
0053             id: selector
0054             z: 9
0055             visible: isSelected && items.keyNavigationMode
0056             anchors.fill: parent
0057             radius: 5
0058             color: "#800000ff"
0059         }
0060 
0061         GCText {
0062             id: text
0063             anchors.horizontalCenter: isCarriage ?
0064                                           carriageBg.horizontalCenter :
0065                                           parent.horizontalCenter
0066             anchors.verticalCenter: isCarriage ?
0067                                         carriageBg.verticalCenter :
0068                                         parent.verticalCenter
0069             z: 11
0070             text: letter
0071             width: parent.width * 0.9
0072             height: parent.height * 0.9
0073             horizontalAlignment: Text.AlignHCenter
0074             verticalAlignment: Text.AlignVCenter
0075             fontSizeMode: Text.Fit
0076             minimumPointSize: 7
0077             fontSize: largeSize
0078             font.bold: true
0079             style: Text.Outline
0080             styleColor: "#2a2a2a"
0081             color: "white"
0082         }
0083 
0084         DropShadow {
0085             anchors.fill: text
0086             cached: false
0087             horizontalOffset: 1
0088             verticalOffset: 1
0089             radius: 3
0090             samples: 16
0091             color: "#422a2a2a"
0092             source: text
0093         }
0094 
0095         MouseArea {
0096             id: mouseArea
0097             anchors.fill: parent
0098             hoverEnabled: ApplicationInfo.isMobile ? false : true
0099 
0100             onClicked: {
0101                 if(carriageItem.clickEnabled) {
0102                     items.lastSelectedIndex = train.currentIndex
0103                     items.keyNavigationMode = false;
0104                     items.buttonsBlocked = true;
0105                     if (Activity.checkAnswer(index)) {
0106                         successAnimation.restart();
0107                         particle.burst(30);
0108                     } else {
0109                         background.moveErrorRectangle(carriageItem);
0110                     }
0111                 }
0112             }
0113         }
0114 
0115         ParticleSystemStarLoader {
0116             z: 10
0117             id: particle
0118             clip: false
0119         }
0120 
0121         states: State {
0122             name: "scaled"; when: mouseArea.containsMouse
0123             PropertyChanges {
0124                 target: carriageItem
0125                 scale: /*carriageImage.scale * */ 1.2
0126                 z: 2
0127             }
0128         }
0129 
0130         transitions: Transition {
0131             NumberAnimation { properties: "scale"; easing.type: Easing.OutCubic }
0132         }
0133 
0134         SequentialAnimation {
0135             id: successAnimation
0136             NumberAnimation {
0137                 target: carriageImage
0138                 easing.type: Easing.InOutQuad
0139                 property: "rotation"
0140                 to: 20; duration: 100
0141             }
0142             NumberAnimation {
0143                 target: carriageImage
0144                 easing.type: Easing.InOutQuad
0145                 property: "rotation"; to: -20
0146                 duration: 100 }
0147             NumberAnimation {
0148                 target: carriageImage
0149                 easing.type: Easing.InOutQuad
0150                 property: "rotation"
0151                 to: 0; duration: 50
0152             }
0153         }
0154     }
0155 }