Warning, /education/gcompris/src/activities/tens_complement_find/Tens_complement_find.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - tens_complement_find.qml
0002 *
0003 * SPDX-FileCopyrightText: 2022 Samarth Raj <mailforsamarth@gmail.com>
0004 * SPDX-FileCopyrightText: 2022 Timothée Giet <animtim@gmail.com>
0005 * SPDX-License-Identifier: GPL-3.0-or-later
0006 */
0007 import QtQuick 2.12
0008 import QtQml.Models 2.12
0009 import QtQuick.Controls 2.12
0010 import GCompris 1.0
0011 import "../../core"
0012 import "tens_complement_find.js" as Activity
0013 import "qrc:/gcompris/src/core/core.js" as Core
0014
0015 ActivityBase {
0016 id: activity
0017
0018 onStart: focus = true
0019 onStop: {}
0020
0021 pageComponent: Image {
0022 id: background
0023 source: "qrc:/gcompris/src/activities/chess/resource/background-wood.svg"
0024 anchors.fill: parent
0025 fillMode: Image.PreserveAspectCrop
0026 sourceSize.height: height
0027 signal start
0028 signal stop
0029
0030 property int layoutMargins: 10 * ApplicationInfo.ratio
0031
0032 Component.onCompleted: {
0033 activity.start.connect(start)
0034 activity.stop.connect(stop)
0035 }
0036
0037 // Add here the QML items you need to access in javascript
0038 QtObject {
0039 id: items
0040 property Item main: activity.main
0041 property alias background: background
0042 property GCSfx audioEffects: activity.audioEffects
0043 property int currentLevel: activity.currentLevel
0044 property alias bonus: bonus
0045 property alias cardListModel: cardListModel
0046 property alias holderListModel: holderListModel
0047 property int selectedIndex: -1
0048 readonly property var levels: activity.datasetLoader.data
0049 property alias okButton: okButton
0050 property alias score: score
0051 property double cardSize: Core.fitItems(numberContainerArea.width, numberContainerArea.height, 6)
0052 property bool isHorizontal: background.width >= background.height
0053 property bool buttonsBlocked: false
0054 }
0055
0056 onStart: { Activity.start(items) }
0057 onStop: { Activity.stop() }
0058
0059 Item {
0060 id: layoutArea
0061 anchors {
0062 top: parent.top
0063 bottom: bar.top
0064 bottomMargin: bar.height * 0.2
0065 left: parent.left
0066 right: parent.right
0067 }
0068 }
0069
0070 ListModel {
0071 id: cardListModel
0072 }
0073
0074 Item {
0075 id: numberContainerArea
0076 height: width * 0.67
0077 width: (layoutArea.width - background.layoutMargins * 3) * 0.32
0078 anchors.left: layoutArea.left
0079 anchors.verticalCenter: answerHolderArea.verticalCenter
0080 anchors.leftMargin: background.layoutMargins
0081 }
0082
0083 Rectangle {
0084 id: numberContainer
0085 width: items.cardSize * 3
0086 height: items.cardSize * Math.ceil(cardListModel.count / 3)
0087 anchors.verticalCenter: numberContainerArea.verticalCenter
0088 anchors.left: numberContainerArea.left
0089 color: "#80FFFFFF"
0090 radius: 15
0091
0092 GridView {
0093 id: container
0094 height: parent.height
0095 width: parent.width
0096 interactive: false
0097 anchors.centerIn: parent
0098 cellHeight: items.cardSize
0099 cellWidth: items.cardSize
0100 model: cardListModel
0101 delegate: NumberQuestionCard {
0102 height: items.cardSize
0103 width: items.cardSize
0104 selected: index == items.selectedIndex
0105 onClicked: {
0106 items.selectedIndex = index;
0107 }
0108 }
0109 }
0110 }
0111
0112 ListModel {
0113 id: holderListModel
0114 }
0115
0116 Item {
0117 id: answerHolderArea
0118 anchors {
0119 left: numberContainer.right
0120 top: layoutArea.top
0121 bottom: score.top
0122 right: score.left
0123 margins: background.layoutMargins
0124 }
0125
0126 ListView {
0127 height: Math.min(items.cardSize * holderListModel.count, answerHolderArea.height)
0128 width: Math.min(items.cardSize * 6, parent.width) // 6 as addition contains 6 cards + validation image
0129 interactive: false
0130 anchors.centerIn: parent
0131 model: holderListModel
0132 delegate: AnswerContainer {
0133 readonly property int minHeight: holderListModel.count == 0 ? items.cardSize : answerHolderArea.height / holderListModel.count
0134 height: Math.min(items.cardSize, minHeight)
0135 width: Math.min(height * 6, ListView.view.width)
0136 }
0137 }
0138 }
0139
0140 BarButton {
0141 id: okButton
0142 visible: false
0143 z: 2
0144 source: "qrc:/gcompris/src/core/resource/bar_ok.svg"
0145 anchors {
0146 bottom: score.top
0147 bottomMargin: background.layoutMargins
0148 horizontalCenter: score.horizontalCenter
0149 }
0150 sourceSize.width: 60 * ApplicationInfo.ratio
0151 enabled: !bonus.isPlaying
0152 onClicked: Activity.checkAnswer()
0153 }
0154
0155 Score {
0156 id: score
0157 anchors {
0158 right: layoutArea.right
0159 bottom: layoutArea.bottom
0160 rightMargin: background.layoutMargins
0161 bottomMargin: background.layoutMargins
0162 }
0163 onStop: Activity.nextSubLevel()
0164 }
0165
0166 states: [
0167 State {
0168 name: "horizontalLayout"
0169 when: items.isHorizontal
0170 AnchorChanges {
0171 target: numberContainerArea
0172 anchors {
0173 left: parent.left
0174 verticalCenter: answerHolderArea.verticalCenter
0175 horizontalCenter: undefined
0176 bottom: undefined
0177 }
0178 }
0179 PropertyChanges {
0180 target: numberContainerArea
0181 anchors {
0182 leftMargin: background.layoutMargins
0183 bottomMargin: 0
0184 }
0185 height: width * 0.67
0186 width: (layoutArea.width - background.layoutMargins * 3) * 0.32
0187 }
0188 AnchorChanges {
0189 target: numberContainer
0190 anchors {
0191 verticalCenter: numberContainerArea.verticalCenter
0192 left: numberContainerArea.left
0193 horizontalCenter: undefined
0194 }
0195 }
0196 AnchorChanges {
0197 target: answerHolderArea
0198 anchors {
0199 left: numberContainer.right
0200 top: parent.top
0201 bottom: score.top
0202 right: score.left
0203 }
0204 }
0205 },
0206 State {
0207 name: "verticalLayout"
0208 when: !items.isHorizontal
0209 AnchorChanges {
0210 target: numberContainerArea
0211 anchors {
0212 left: undefined
0213 verticalCenter: undefined
0214 horizontalCenter: layoutArea.horizontalCenter
0215 bottom: score.top
0216 }
0217 }
0218 PropertyChanges {
0219 target: numberContainerArea
0220 anchors {
0221 leftMargin: 0
0222 bottomMargin: background.layoutMargins
0223 }
0224 width: Math.min(layoutArea.width - score.width * 2 - background.layoutMargins * 4,
0225 layoutArea.height * 0.5)
0226 height: width * 0.67
0227 }
0228 AnchorChanges {
0229 target: numberContainer
0230 anchors {
0231 verticalCenter: numberContainerArea.verticalCenter
0232 left: undefined
0233 horizontalCenter: numberContainerArea.horizontalCenter
0234 }
0235 }
0236 AnchorChanges {
0237 target: answerHolderArea
0238 anchors {
0239 left: layoutArea.left
0240 top: parent.top
0241 bottom: numberContainerArea.top
0242 right: layoutArea.right
0243 }
0244 }
0245 }
0246 ]
0247
0248 MouseArea {
0249 id: clickMask
0250 anchors.fill: layoutArea
0251 enabled: items.buttonsBlocked
0252 }
0253
0254 DialogChooseLevel {
0255 id: dialogActivityConfig
0256 currentActivity: activity.activityInfo
0257
0258 onSaveData: {
0259 levelFolder = dialogActivityConfig.chosenLevels
0260 currentActivity.currentLevels = dialogActivityConfig.chosenLevels
0261 ApplicationSettings.setCurrentLevels(currentActivity.name, dialogActivityConfig.chosenLevels)
0262 // restart activity on saving
0263 background.start()
0264 }
0265 onClose: {
0266 home()
0267 }
0268 onStartActivity: {
0269 background.start()
0270 }
0271 }
0272
0273 DialogHelp {
0274 id: dialogHelp
0275 onClose: home()
0276 }
0277
0278 Bar {
0279 id: bar
0280 level: items.currentLevel + 1
0281 content: BarEnumContent { value: help | home | level | activityConfig }
0282 onHelpClicked: {
0283 displayDialog(dialogHelp)
0284 }
0285 onPreviousLevelClicked: Activity.previousLevel()
0286 onNextLevelClicked: Activity.nextLevel()
0287 onHomeClicked: activity.home()
0288 onActivityConfigClicked: {
0289 displayDialog(dialogActivityConfig)
0290 }
0291 }
0292
0293 Bonus {
0294 id: bonus
0295 Component.onCompleted: win.connect(Activity.nextLevel)
0296 }
0297 }
0298
0299 }