File indexing completed on 2024-05-12 07:33:25
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 }