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

0001 /* GCompris - FractionsCreate.qml
0002  *
0003  * SPDX-FileCopyrightText: 2022 Johnny Jazeix <jazeix@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 GCompris 1.0
0009 
0010 import "../../core"
0011 import "fractions_create.js" as Activity
0012 
0013 ActivityBase {
0014     id: activity
0015 
0016     onStart: focus = true
0017     onStop: {}
0018 
0019     property string mode: "selectPie" // or "findFraction" in fractions_find activity
0020     pageComponent: Image {
0021         id: background
0022         anchors.fill: parent
0023         source: "qrc:/gcompris/src/activities/magic-hat-minus/resource/background.svg"
0024         sourceSize.width: width
0025         sourceSize.height: height
0026         fillMode: Image.PreserveAspectCrop
0027         signal start
0028         signal stop
0029 
0030         Component.onCompleted: {
0031             dialogActivityConfig.initialize()
0032             activity.start.connect(start)
0033             activity.stop.connect(stop)
0034         }
0035 
0036         // Add here the QML items you need to access in javascript
0037         QtObject {
0038             id: items
0039             property Item main: activity.main
0040             property alias background: background
0041             property GCSfx audioEffects: activity.audioEffects
0042             property int currentLevel: activity.currentLevel
0043             property alias bonus: bonus
0044             property alias errorRectangle: errorRectangle
0045             property alias numberOfSubLevels: score.numberOfSubLevels
0046             property alias score: score
0047             property alias instructionText: instructionTxt.text
0048             property alias chartItem: chartDisplay
0049             property alias numeratorValue: numeratorText.value
0050             property alias denominatorValue: denominatorText.value
0051             readonly property bool horizontalLayout: background.width >= background.height
0052             readonly property string mode: activity.mode
0053             property int numeratorToFind: 0
0054             property int denominatorToFind: 0
0055             readonly property var levels: activity.datasetLoader.data
0056             property string chartType: "pie"
0057             property bool fixedNumerator: true
0058             property bool fixedDenominator: true
0059             property bool buttonsBlocked: false
0060         }
0061 
0062         onStart: {
0063             Activity.start(items, activity.mode);
0064         }
0065         onStop: { Activity.stop() }
0066 
0067         Keys.enabled: !items.buttonsBlocked
0068 
0069         Keys.onPressed: {
0070             if([Qt.Key_Enter, Qt.Key_Return].indexOf(event.key) != -1 && items.itemIndex !== -1) {
0071                 okButton.clicked();
0072             }
0073         }
0074 
0075         //instruction rectangle
0076         Rectangle {
0077             id: instruction
0078             anchors.centerIn: instructionTxt
0079             width: instructionTxt.width + 20
0080             height: instructionTxt.height
0081             opacity: 0.8
0082             radius: 10
0083             border.width: 2
0084             z: 10
0085             border.color: "#DDD"
0086             color: "#373737"
0087         }
0088         //instruction for playing the game
0089         GCText {
0090             id: instructionTxt
0091             anchors {
0092                 top: parent.top
0093                 topMargin: 10
0094                 horizontalCenter: parent.horizontalCenter
0095             }
0096             opacity: instruction.opacity
0097             z: instruction.z
0098             fontSize: regularSize
0099             color: "white"
0100             horizontalAlignment: Text.AlignHCenter
0101             width: Math.max(Math.min(parent.width * 0.9, text.length * 8), parent.width * 0.5)
0102             wrapMode: TextEdit.WordWrap
0103         }
0104 
0105         Item {
0106             id: layoutArea
0107             width: parent.width - 20
0108             height: parent.height - instructionTxt.height - bar.height * 1.2 - 30
0109             anchors.top: instruction.bottom
0110             anchors.topMargin: 10
0111             anchors.horizontalCenter: parent.horizontalCenter
0112         }
0113 
0114         Item {
0115             id: chartLayoutArea
0116             width: layoutArea.width - okButton.width - 10 * ApplicationInfo.ratio
0117             height: layoutArea.height
0118             anchors {
0119                 top: layoutArea.top
0120                 left: layoutArea.left
0121             }
0122         }
0123 
0124         Item {
0125             id: rightLayoutArea
0126             width:  layoutArea.width - chartLayoutArea.width
0127             height: layoutArea.height
0128             anchors.top: layoutArea.top
0129             anchors.right: layoutArea.right
0130         }
0131 
0132         ChartDisplay {
0133             id: chartDisplay
0134             layoutWidth: chartLayoutArea.width
0135             layoutHeight: chartLayoutArea.height
0136             anchors.centerIn: chartLayoutArea
0137         }
0138 
0139         Item {
0140             id: fractionTextDisplay
0141             width: rightLayoutArea.width
0142             anchors.top: rightLayoutArea.top
0143             anchors.bottom: okButton.top
0144             anchors.bottomMargin: 10 * ApplicationInfo.ratio
0145 
0146             FractionNumber {
0147                 id: numeratorText
0148                 value: 0
0149                 width: parent.width
0150                 height: 30 * ApplicationInfo.ratio
0151                 anchors.horizontalCenter: parent.horizontalCenter
0152                 anchors.bottom: fractionBar.bottom
0153                 anchors.bottomMargin: 10
0154                 interactive: activity.mode === "findFraction" && !items.fixedNumerator
0155                 onLeftClicked: {
0156                     if(items.numeratorValue > 0) {
0157                         items.numeratorValue --;
0158                     }
0159                 }
0160                 onRightClicked: {
0161                     items.numeratorValue ++;
0162                 }
0163             }
0164             Rectangle {
0165                 id: fractionBar
0166                 width: parent.width
0167                 height: 5
0168                 anchors.horizontalCenter: parent.horizontalCenter
0169                 anchors.verticalCenter: parent.verticalCenter
0170                 color: "white"
0171             }
0172             FractionNumber {
0173                 id: denominatorText
0174                 value: 0
0175                 width: parent.width
0176                 height: numeratorText.height
0177                 anchors.horizontalCenter: parent.horizontalCenter
0178                 anchors.top: fractionBar.bottom
0179                 anchors.topMargin: 10
0180                 interactive: activity.mode === "findFraction" && !items.fixedDenominator
0181                 onLeftClicked: {
0182                     if(items.denominatorValue > 0) {
0183                         items.denominatorValue --;
0184                     }
0185                 }
0186                 onRightClicked: {
0187                     items.denominatorValue ++;
0188                 }
0189             }
0190         }
0191 
0192         ErrorRectangle {
0193             id: errorRectangle
0194             anchors.fill: activity.mode === "findFraction" ? fractionTextDisplay : chartDisplay
0195             radius: activity.mode === "findFraction" ? 10 * ApplicationInfo.ratio : (items.chartType === "pie" ? Math.min(width, height) : 0)
0196             imageSize: okButton.width
0197             function releaseControls() {
0198                 items.buttonsBlocked = false;
0199             }
0200         }
0201 
0202         BarButton {
0203             id: okButton
0204             enabled: !items.buttonsBlocked
0205             anchors {
0206                 bottom: score.top
0207                 bottomMargin: 10 * ApplicationInfo.ratio
0208                 horizontalCenter: rightLayoutArea.horizontalCenter
0209             }
0210             source: "qrc:/gcompris/src/core/resource/bar_ok.svg"
0211             sourceSize.width: 60 * ApplicationInfo.ratio
0212 
0213             onClicked: {
0214                 chartDisplay.checkAnswer();
0215             }
0216         }
0217 
0218         Score {
0219             id: score
0220             anchors {
0221                 top: undefined
0222                 bottom: rightLayoutArea.bottom
0223                 horizontalCenter: rightLayoutArea.horizontalCenter
0224             }
0225             onStop: {
0226                 Activity.nextSubLevel();
0227             }
0228         }
0229 
0230         states: [
0231             State {
0232                 name: "horizontalState"
0233                 when: items.horizontalLayout
0234                 AnchorChanges {
0235                     target: fractionTextDisplay
0236                     anchors.left: chartDisplay.right
0237                 }
0238             },
0239             State {
0240                 name: "verticalState"
0241                 when: !items.horizontalLayout
0242                 AnchorChanges {
0243                     target: fractionTextDisplay
0244                     anchors.left: rightLayoutArea.left
0245                 }
0246             }
0247         ]
0248 
0249         DialogChooseLevel {
0250             id: dialogActivityConfig
0251             currentActivity: activity.activityInfo
0252 
0253             onSaveData: {
0254                 levelFolder = dialogActivityConfig.chosenLevels
0255                 currentActivity.currentLevels = dialogActivityConfig.chosenLevels
0256                 ApplicationSettings.setCurrentLevels(currentActivity.name, dialogActivityConfig.chosenLevels)
0257             }
0258             onClose: {
0259                 home()
0260             }
0261             onStartActivity: {
0262                 background.stop()
0263                 background.start()
0264             }
0265         }
0266 
0267         DialogHelp {
0268             id: dialogHelp
0269             onClose: home()
0270         }
0271 
0272         Bar {
0273             id: bar
0274             level: items.currentLevel + 1
0275             content: BarEnumContent { value: help | home | level | activityConfig }
0276             onHelpClicked: {
0277                 displayDialog(dialogHelp)
0278             }
0279             onActivityConfigClicked: {
0280                 displayDialog(dialogActivityConfig)
0281             }
0282             onPreviousLevelClicked: Activity.previousLevel()
0283             onNextLevelClicked: Activity.nextLevel()
0284             onHomeClicked: activity.home()
0285         }
0286 
0287         Bonus {
0288             id: bonus
0289             Component.onCompleted: win.connect(Activity.nextLevel)
0290         }
0291     }
0292 
0293 }