Warning, /education/gcompris/src/activities/magic-hat-minus/MagicHat.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - MagicHat.qml 0002 * 0003 * SPDX-FileCopyrightText: 2014 Thibaut ROMAIN <thibrom@gmail.com> 0004 * 0005 * Authors: 0006 * <Bruno Coudoin> (GTK+ version) 0007 * Thibaut ROMAIN <thibrom@gmail.com> (Qt Quick port) 0008 * 0009 * SPDX-License-Identifier: GPL-3.0-or-later 0010 */ 0011 import QtQuick 2.12 0012 import GCompris 1.0 0013 0014 import "../../core" 0015 import "magic-hat.js" as Activity 0016 import "." 0017 0018 ActivityBase { 0019 id: activity 0020 0021 onStart: focus = true 0022 onStop: {} 0023 0024 property string mode: "minus" 0025 0026 pageComponent: Image { 0027 id: background 0028 anchors.fill: parent 0029 source: Activity.url + "background.svg" 0030 sourceSize.width: width 0031 sourceSize.height: height 0032 fillMode: Image.PreserveAspectCrop 0033 property int starSize: Math.min((background.width - 10 * ApplicationInfo.ratio) / 14 , 0034 (operationLayout.height - 10 * ApplicationInfo.ratio) / 12) 0035 0036 signal start 0037 signal stop 0038 0039 property var starColors : ["1", "2", "3"] 0040 0041 Component.onCompleted: { 0042 dialogActivityConfig.initialize() 0043 activity.start.connect(start) 0044 activity.stop.connect(stop) 0045 } 0046 0047 onStart: Activity.start(items, mode) 0048 onStop: Activity.stop() 0049 0050 property bool vert: background.width >= (background.height - okButton.height) 0051 0052 // Add here the QML items you need to access in javascript 0053 QtObject { 0054 id: items 0055 property Item main: activity.main 0056 property alias background: background 0057 property GCSfx audioEffects: activity.audioEffects 0058 property int currentLevel: activity.currentLevel 0059 readonly property var levels: activity.datasetLoader.data 0060 property alias bonus: bonus 0061 property alias hat: theHat 0062 property alias introductionText: introText 0063 property var repeatersList: 0064 [repeaterFirstRow, repeaterSecondRow, repeaterAnswerRow] 0065 } 0066 0067 Rectangle { 0068 id: introTextBG 0069 width: introText.width 0070 height: introText.height 0071 anchors.centerIn: introText 0072 color: "#373737" 0073 radius: 5 * ApplicationInfo.ratio 0074 visible: introText.visible 0075 } 0076 0077 GCText { 0078 id: introText 0079 anchors { 0080 horizontalCenter: parent.horizontalCenter 0081 top: parent.top 0082 topMargin: 10 * ApplicationInfo.ratio 0083 } 0084 width: parent.width - 10 * ApplicationInfo.ratio 0085 height: (background.height - bar.height * 1.2) * 0.1 0086 fontSizeMode: Text.Fit 0087 minimumPointSize: 7 0088 fontSize: hugeSize 0089 font.bold: true 0090 color: "white" 0091 wrapMode: TextEdit.WordWrap 0092 horizontalAlignment: TextEdit.AlignHCenter 0093 text: qsTr("Click on the hat to begin the game") 0094 } 0095 0096 Image { 0097 // The math operation 0098 id: operatorImage 0099 source: mode == "minus" ? Activity.url + "minus.svg" : 0100 Activity.url + "plus.svg" 0101 anchors.right: operationLayout.left 0102 anchors.rightMargin: 10 0103 width: background.starSize 0104 height: width 0105 sourceSize.width: width 0106 y: operationLayout.y + secondRow.y - height * 0.5 0107 } 0108 0109 Grid { 0110 id: operationLayout 0111 anchors { 0112 top: introTextBG.bottom 0113 topMargin: 10 0114 horizontalCenter: background.horizontalCenter 0115 horizontalCenterOffset: operatorImage.width * 0.5 0116 } 0117 width: background.starSize * 12 0118 height: (background.height - bar.height * 1.2) * 0.7 0119 columns: 1 0120 Column { 0121 id: firstRow 0122 height: background.starSize * 4 0123 spacing: 5 0124 z: 10 0125 Repeater { 0126 id: repeaterFirstRow 0127 model: 3 0128 StarsBar { 0129 barGroupIndex: 0 0130 barIndex: index 0131 width: operationLayout.width 0132 backgroundColor: "grey" 0133 starsColor: starColors[index] 0134 theHat: items.hat 0135 starsSize: background.starSize 0136 opacity: 0 0137 } 0138 } 0139 } 0140 Column { 0141 id: secondRow 0142 height: background.starSize * 4 0143 spacing: 5 0144 z: 9 0145 Repeater { 0146 id: repeaterSecondRow 0147 model: 3 0148 StarsBar { 0149 barGroupIndex: 1 0150 barIndex: index 0151 width: operationLayout.width 0152 backgroundColor: "grey" 0153 starsColor: starColors[index] 0154 theHat: items.hat 0155 starsSize: background.starSize 0156 opacity: 0 0157 } 0158 } 0159 } 0160 0161 Rectangle { 0162 width: (background.starSize + 5) * 10 - 5 0163 height: 5 * ApplicationInfo.ratio 0164 color: "white" 0165 } 0166 0167 Rectangle { 0168 width: (background.starSize + 5) * 10 - 5 0169 height: 10 * ApplicationInfo.ratio 0170 opacity: 0 0171 } 0172 0173 Column { 0174 id: answerRow 0175 height: background.starSize * 4 0176 spacing: 5 0177 Repeater { 0178 id: repeaterAnswerRow 0179 model: 3 0180 StarsBar { 0181 barGroupIndex: 2 0182 barIndex: index 0183 width: operationLayout.width 0184 backgroundColor: "#53b9c9" 0185 starsColor: starColors[index] 0186 authorizeClick: false 0187 theHat: items.hat 0188 starsSize: background.starSize 0189 opacity: 0 0190 } 0191 } 0192 } 0193 } 0194 0195 DialogChooseLevel { 0196 id: dialogActivityConfig 0197 currentActivity: activity.activityInfo 0198 0199 onSaveData: { 0200 levelFolder = dialogActivityConfig.chosenLevels 0201 currentActivity.currentLevels = dialogActivityConfig.chosenLevels 0202 ApplicationSettings.setCurrentLevels(currentActivity.name, dialogActivityConfig.chosenLevels) 0203 } 0204 onClose: { 0205 home() 0206 } 0207 onStartActivity: { 0208 background.stop() 0209 background.start() 0210 } 0211 } 0212 0213 DialogHelp { 0214 id: dialogHelp 0215 onClose: home() 0216 } 0217 0218 Bar { 0219 id: bar 0220 level: items.currentLevel + 1 0221 content: BarEnumContent { value: help | home | level | activityConfig } 0222 onHelpClicked: { 0223 displayDialog(dialogHelp) 0224 } 0225 onActivityConfigClicked: { 0226 displayDialog(dialogActivityConfig) 0227 } 0228 onPreviousLevelClicked: Activity.previousLevel() 0229 onNextLevelClicked: Activity.nextLevel() 0230 onHomeClicked: activity.home() 0231 } 0232 0233 Hat { 0234 id: theHat 0235 anchors { 0236 bottom: bar.top 0237 margins: 20 * ApplicationInfo.ratio 0238 } 0239 x: Math.max(20 * ApplicationInfo.ratio, operationLayout.x * 0.5 - width * 0.5) 0240 height: (background.height - bar.height * 1.2) * 0.2 0241 width: height 0242 starsSize: background.starSize 0243 audioEffects: activity.audioEffects 0244 } 0245 0246 BarButton { 0247 id: okButton 0248 anchors { 0249 bottom: bar.top 0250 right: parent.right 0251 rightMargin: 10 * ApplicationInfo.ratio 0252 bottomMargin: 10 * ApplicationInfo.ratio 0253 } 0254 source: "qrc:/gcompris/src/core/resource/bar_ok.svg" 0255 width: (background.height - bar.height * 1.2) * 0.15 0256 sourceSize.width: width 0257 enabled: !bonus.isPlaying && theHat.state === "GuessNumber" 0258 onClicked: Activity.verifyAnswer() 0259 } 0260 0261 Bonus { 0262 id: bonus 0263 Component.onCompleted: win.connect(Activity.nextLevel) 0264 } 0265 } 0266 0267 }