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

0001 /* GCompris - Erase.qml
0002  *
0003  * SPDX-FileCopyrightText: 2014 Bruno Coudoin <bruno.coudoin@gcompris.net>
0004  *
0005  * Authors:
0006  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (GTK+ version)
0007  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (Qt Quick port)
0008  *
0009  *   SPDX-License-Identifier: GPL-3.0-or-later
0010  */
0011 
0012 import QtQuick 2.12
0013 import GCompris 1.0
0014 
0015 import "../../core"
0016 import "erase.js" as Activity
0017 
0018 ActivityBase {
0019     id: activity
0020     focus: true
0021     property string type: "erase"
0022 
0023     onStart: {}
0024     onStop: {}
0025 
0026     pageComponent: Image {
0027         id: background
0028         signal start
0029         signal stop
0030         focus: true
0031         fillMode: Image.PreserveAspectCrop
0032         source: Activity.url + Activity.getFirstImage()
0033         sourceSize.width: width
0034         sourceSize.height: height
0035         horizontalAlignment: Image.AlignHCenter
0036         verticalAlignment: Image.AlignVCenter
0037 
0038         Component.onCompleted: {
0039             dialogActivityConfig.initialize()
0040             activity.start.connect(start)
0041             activity.stop.connect(stop)
0042         }
0043         QtObject {
0044             id: items
0045             property alias background: background
0046             property alias bar: bar
0047             property alias blocks: blocks
0048             property int currentLevel: activity.currentLevel
0049             property alias bonus: bonus
0050             property alias score: score
0051             property alias okButton: okButton
0052             property GCSfx audioEffects: activity.audioEffects
0053             property int nbSubLevel: 6
0054             property int currentSubLevel: 0
0055             property int mode: 1 // default is automatic
0056         }
0057         onStart: Activity.start(main, items, type)
0058 
0059         onStop: { Activity.stop() }
0060 
0061         function alignBackground() {
0062             if(Activity.backgroundImages[Activity.currentImage][1] === "left")
0063                 background.horizontalAlignment = Image.AlignLeft
0064             else if(Activity.backgroundImages[Activity.currentImage][1] === "right")
0065                 background.horizontalAlignment = Image.AlignRight
0066             else
0067                 background.horizontalAlignment = Image.AlignHCenter
0068 
0069             if(Activity.backgroundImages[Activity.currentImage][2] === "top")
0070                 background.verticalAlignment = Image.AlignTop
0071             else if(Activity.backgroundImages[Activity.currentImage][2] === "bottom")
0072                 background.verticalAlignment = Image.AlignBottom
0073             else
0074                 background.verticalAlignment = Image.AlignVCenter
0075         }
0076 
0077         MultiPointTouchArea {
0078             anchors.fill: parent
0079             onTouchUpdated: {
0080                 for(var i in touchPoints) {
0081                     var touch = touchPoints[i]
0082 
0083                     var newBlock = rootItem.childAt(touch.x, touch.y)
0084                     if(newBlock && activity.type === "erase")
0085                         newBlock.enter()
0086 
0087                     var previousBlock = rootItem.childAt(touch.previousX, touch.previousY)
0088                     if(previousBlock !== newBlock && previousBlock != repeater)
0089                         previousBlock.leave()
0090                 }
0091             }
0092         }
0093 
0094         Item {
0095             id: rootItem
0096         }
0097 
0098         ListModel {
0099             id: blocks
0100         }
0101         Repeater {
0102             id: repeater
0103             model: blocks
0104             parent: rootItem
0105             Block {
0106                 id: modelData
0107                 nbx: nx
0108                 nby: ny
0109                 ix: a
0110                 iy: b
0111                 opacity: op
0112                 source: img
0113                 type: activity.type
0114                 main: MAIN
0115                 bar: BAR
0116                 background: items.background
0117             }
0118         }
0119 
0120         DialogHelp {
0121             id: dialogHelpLeftRight
0122             onClose: home()
0123         }
0124 
0125         DialogChooseLevel {
0126             id: dialogActivityConfig
0127             currentActivity: activity.activityInfo
0128 
0129             onClose: home()
0130 
0131             onLoadData: {
0132                 if(activityData && activityData["mode"]) {
0133                     items.mode = activityData["mode"];
0134                     okButton.levelFinished = false
0135                 }
0136             }
0137             onStartActivity: {
0138                 background.stop()
0139                 background.start()
0140             }
0141         }
0142 
0143         Bar {
0144             id: bar
0145             level: items.currentLevel + 1
0146             content: BarEnumContent { value: help | home | level | activityConfig }
0147             onHelpClicked: {
0148                 displayDialog(dialogHelpLeftRight)
0149             }
0150             onPreviousLevelClicked: Activity.previousLevel()
0151             onNextLevelClicked: Activity.nextLevel()
0152             onHomeClicked: home()
0153             onActivityConfigClicked: {
0154                 displayDialog(dialogActivityConfig)
0155             }
0156         }
0157 
0158         Bonus {
0159             id: bonus
0160             onWin: Activity.nextLevel()
0161         }
0162 
0163         Score {
0164             id: score
0165             anchors {
0166                 bottom: (background.width >= background.height + 40 * ApplicationInfo.ratio) ? background.bottom : bar.top
0167                 bottomMargin: 10 * ApplicationInfo.ratio
0168                 right: parent.right
0169                 rightMargin: 10 * ApplicationInfo.ratio
0170                 top: undefined
0171                 left: undefined
0172             }
0173             numberOfSubLevels: items.nbSubLevel
0174             currentSubLevel: items.currentSubLevel
0175             onStop: {
0176                 if(items.mode === 1)
0177                     Activity.nextSubLevel()
0178             }
0179         }
0180 
0181         // Next Level Button, if Manual is activated
0182         BarButton {
0183             id: okButton
0184             property bool levelFinished: false
0185             enabled: items.mode == 2 && levelFinished
0186             visible: enabled
0187 
0188             source: "qrc:/gcompris/src/core/resource/bar_ok.svg"
0189             height: width
0190             width: score.width
0191             sourceSize.width: width
0192             sourceSize.height: height
0193             z: score.z
0194             anchors {
0195                 bottom: score.top
0196                 right: score.right
0197                 bottomMargin: 20
0198             }
0199             ParticleSystemStarLoader {
0200                 id: okButtonParticles
0201                 clip: false
0202             }
0203             onClicked: {
0204                 levelFinished = false
0205                 Activity.nextSubLevel()
0206             }
0207         }
0208     }
0209 }