File indexing completed on 2024-04-28 15:07:45

0001 /* GCompris - calendar.js
0002  *
0003  * SPDX-FileCopyrightText: 2017 Amit Sagtani <asagtani06@gmail.com>
0004  *
0005  * Authors:
0006  *   Amit Sagtani <asagtani06@gmail.com>
0007  *
0008  *   SPDX-License-Identifier: GPL-3.0-or-later
0009  */
0010 
0011 .pragma library
0012 .import QtQuick 2.12 as Quick
0013 .import QtQml 2.12 as Qml
0014 .import GCompris 1.0 as GCompris //for ApplicationInfo
0015 .import "qrc:/gcompris/src/core/core.js" as Core
0016 
0017 var numberOfLevel
0018 var currentDataSet
0019 var currentLevelConfig
0020 var dataset
0021 var items
0022 var daySelected = 1
0023 var dayOfWeekSelected
0024 var correctAnswer
0025 var mode
0026 
0027 function start(items_, dataset_) {
0028     items = items_
0029     dataset = dataset_.get()
0030     numberOfLevel = dataset.length
0031     items.currentLevel = Core.getInitialLevel(numberOfLevel)
0032 
0033     if(Qt.locale(GCompris.ApplicationSettings.locale).firstDayOfWeek == Qml.Locale.Monday) {
0034         items.daysOfTheWeekModel.move(0, items.daysOfTheWeekModel.count - 1, 1)
0035     }
0036     initLevel();
0037 }
0038 
0039 function stop() {
0040 }
0041 
0042 function initLevel() {
0043     items.errorRectangle.resetState();
0044     items.score.currentSubLevel = 0;
0045     currentLevelConfig = dataset[items.currentLevel][0][0];
0046     setCalendarConfigurations();
0047     initQuestion();
0048 }
0049 
0050 function nextSubLevel() {
0051     if(items.score.currentSubLevel >= currentDataSet.length) {
0052         items.bonus.good("lion");
0053     } else {
0054         initQuestion();
0055     }
0056 }
0057 
0058 function nextLevel() {
0059     items.score.stopWinAnimation();
0060     items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel);
0061     initLevel();
0062 }
0063 
0064 function previousLevel() {
0065     items.score.stopWinAnimation();
0066     items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel);
0067     initLevel();
0068 }
0069 
0070 // Configure calendar properties for every level.
0071 function setCalendarConfigurations() {
0072     mode = currentLevelConfig["mode"]
0073     items.calendar.navigationBarVisible = currentLevelConfig["navigationBarVisible"]
0074     items.calendar.selectedDay = 1;
0075     items.calendar.minimumDate = new Date(currentLevelConfig["minimumDate"])
0076     items.calendar.minimumDate.setHours(0);
0077     items.calendar.maximumDate = new Date(currentLevelConfig["maximumDate"])
0078     items.calendar.maximumDate.setHours(0);
0079     items.calendar.currentDate = new Date(currentLevelConfig["visibleYear"], currentLevelConfig["visibleMonth"], items.calendar.selectedDay)
0080     items.answerChoices.visible = (mode === "findDayOfWeek") ? true : false
0081     items.okButton.visible = !items.answerChoices.visible
0082     currentDataSet = dataset[items.currentLevel][1]
0083     currentDataSet = Core.shuffle(currentDataSet)
0084     items.score.numberOfSubLevels = currentDataSet.length
0085 }
0086 
0087 function initQuestion() {
0088     items.questionItem.text = currentDataSet[items.score.currentSubLevel]["question"]
0089     correctAnswer = currentDataSet[items.score.currentSubLevel]["answer"]
0090     items.buttonsBlocked = false
0091 }
0092 
0093 function updateScore(isCorrectAnswer) {
0094     if(isCorrectAnswer) {
0095         items.okButtonParticles.burst(20)
0096         items.score.currentSubLevel++;
0097         items.score.playWinAnimation();
0098         items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/completetask.wav");
0099     }
0100     else {
0101         items.errorRectangle.startAnimation();
0102         items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/crash.wav");
0103     }
0104 }
0105 
0106 function checkAnswer() {
0107     items.buttonsBlocked = true
0108     var isCorrectAnswer = false
0109     // For levels having questions based on day of week only.
0110     if(mode === "findDayOfWeek") {
0111         if(dayOfWeekSelected === correctAnswer["dayOfWeek"]) {
0112             isCorrectAnswer = true
0113         }
0114     }
0115     // For levels having question based on month only.
0116     else if(mode === "findMonthOnly") {
0117         if(correctAnswer["month"].indexOf(items.calendar.currentDate.getMonth()) != -1) {
0118             isCorrectAnswer = true
0119         }
0120     }
0121     // For levels having questions based on dayOfWeek, month and year.
0122     else if(mode !== "findDayOfWeek") {
0123         if(items.calendar.currentDate.getMonth() === correctAnswer["month"] && daySelected === correctAnswer["day"] && items.calendar.currentDate.getFullYear() === correctAnswer["year"]) {
0124             isCorrectAnswer = true
0125         }
0126     }
0127     updateScore(isCorrectAnswer)
0128 }