diff --git a/org.kde.gcompris.appdata.xml b/org.kde.gcompris.appdata.xml
--- a/org.kde.gcompris.appdata.xml
+++ b/org.kde.gcompris.appdata.xml
@@ -12,6 +12,7 @@
GCompris Educational GameJuego educativo GComprisHariv mäng GCompris
+ GCompris hezkuntza-jokoaGCompris, opettavainen peliJeu éducatif GComprisXogo educativo GCompris
@@ -44,6 +45,7 @@
Multi-Activity Educational game for children 2 to 10Juego educativo multiactividad para niños de 2 a 10 añosRohkete tegevustega hariv mäng lastele vanuses 2-10
+ Jarduera anitzeko Hezkuntza-jokoa 2 eta 10 urte arteko haurrentzatUseampitoimintoinen opettavainen peli 2–10-vuotiaille lapsilleJeu éducatif multi-activités pour les enfants de 2 à 10 ansXogo educativo con varias actividades para nenos de entre 2 e 10 anos
@@ -77,6 +79,7 @@
Το GCompris είναι μια σουίτα εκπαιδευτικού λογισμικού με πολυάριθμες δραστηριότητες για παιδιά ηλικίας 2 έως 10 ετών.
GCompris is a high quality educational software suite, including a large number of activities for children aged 2 to 10.
GCompris es un conjunto de programas educativos de alta calidad que contiene un gran número de actividades para niños entre 2 y 10 años.
+
GCompris kalitate handiko hezkuntza-softwarea multzo bat da, 2 eta 10 urte bitarteko haurrentzako jarduera ugari dituena.
GCompris on laadukas monitoimintoinen opetusohjelmisto 2–10-vuotiaille lapsille.
GCompris est un logiciel éducatif qui propose des activités variées aux enfants de 2 à 10 ans. Il est plébiscité par les écoles maternelles et primaires de part sa qualité et son spectre couvrant les cycles 1, 2 et 3.
GCompris é unha colección de programas educativos que inclúe numerosas actividades para nenas e nenos de entre 2 e 10 anos.
@@ -108,6 +111,7 @@
Some of the activities are game orientated, but nonetheless still educational.
Algunas de las actividades son juegos, aunque siguen siendo educativas.
Mõned tegevused on mängulisemad, aga siiski õppeotstarbega.
+
Jardueretako batzuk jolasera zuzenduak daude, hala eta guztiz ere, heztea dute helburu.
Jotkin toiminnoista ovat pelimäisiä mutta silti opettavaisia.
Certaines activités sont ludiques mais ont toujours un intérêt pédagogique.
Algunhas das actividades están orientadas ao xogo, pero son aínda así educativas.
@@ -141,11 +145,12 @@
Below you can find a list of categories with some of the activities available in that category.
A continuación puede encontrar una lista de categorías con algunas de las actividades disponibles en cada una de ellas.
Allpool leiab kategooriate loetelu koos mõningate neile omaste tegevustega.
+
Behean kategoria zerrenda bat aurki dezakezu, kategoria horretan erabilgarri dauden jardueretako batzuekin.
Alta löydät luettelot luokista sekä maininnan joistakin kuhunkin luokkaan kuuluvista toiminnoista.
Vous pouvez trouver ci-dessous une liste des catégories avec certaines de leurs activités.
A continuación atopará unha lista de categorías e as actividades dispoñíbeis en cada unha desas categorías.
नीचे आप उस श्रेणी में उपलब्ध कुछ गतिविधियों के साथ श्रेणियों की एक सूची पा सकते हैं।
-
Di bawah ini kamu dapat menemukan daftar kategori dengan beberapa kegiatan yang tersedia di dalam setiap kategori tersebut.
+
Di bawah ini kamu bisa menemukan daftar kategori dengan beberapa kegiatan yang tersedia di dalam setiap kategori tersebut.
Di seguito puoi trovare un elenco di categorie con alcune delle attività disponibili per categoria.
아래에서 분류 목록과 해당 분류의 활동을 찾을 수 있습니다.
താഴെ, വിഭാഗങ്ങളുടെ ഒരു പട്ടിക നിങ്ങൾക്ക് കാണാം, ആ വിഭാഗങ്ങളിൽ ചില പ്രവർത്തനങ്ങളും ലഭ്യമാണ്.
@@ -174,11 +179,12 @@
computer discovery: keyboard, mouse, different mouse gestures, ...
descubrimiento del ordenador: teclado, ratón, distintos gestos con el ratón...
arvuti tundmaõppimine: klaviatuur, hiir, erinevad hiireliigutused ...
+
ordenagailua ezagutzea: teklatua, sagua, saguaren mugimendu ezberdinak, ...
tietokoneen oppiminen: näppäimistö, hiiri, eri hiirieleet…
découverte de l'ordinateur : clavier, souris, mouvements de la souris…
Descubrimento do computador: teclado, rato, xestos do rato, etc.
कंप्यूटर की खोज: कीबोर्ड, माउस, अलग माउस इशारों, ...
-
Pengenalan komputer: keyboard, mouse, gerakan mouse yang berbeda, ...
+
Pengenalan komputer: keyboard, mouse, gestur mouse yang berbeda, ...
scoperta del computer: tastiera, mouse, vari gesti con il mouse, ...
컴퓨터와 친해지기: 키보드, 마우스, 마우스 제스처, ...
കമ്പ്യൂട്ടർ പഠിക്കാം: കീബോർഡ്, മൗസ്, മൗസ് കൊണ്ടുള്ള വ്യത്യസ്ത ചലനങ്ങൾ, ...
autre : apprendre à dire l'heure, le système braille, le labyrinthe, les instruments de musique…
Outros: aprender a dicir as horas, o sistema braille, labirinto, instrumentos musicais, etc.
@@ -372,11 +383,12 @@
Currently GCompris offers in excess of 100 activities and more are being developed. GCompris is free software, that means that you can adapt it to your own needs, improve it and, most importantly, share it with children everywhere.
En la actualidad, GCompris ofrece más de 100 actividades y hay muchas más en desarrollo. GCompris es software libre, lo que significa que puede adaptarlo a sus necesidades, mejorarlo y, lo que es más importante, compartirlo con los niños de todo el mundo.
Praegu pakub GCompris üle 100 tegevuse ja neid tuleb aina juurde. GCompris on vaba tarkvara, mis tähendab, et seda saab kohandada oma vajadustele, täiustada, ja mis peamine, jagada oma täiustusi lastega kogu maailmas.
+
Gaur egun GCompris-ek 100 jardueratik gora eskaintzen ditu eta gehiago garatzen ari dira. GCompris software askea da, horrek esan nahi du zure beharretara egokitu dezakezula, hobetu dezakezula eta, garrantzitsuagoa dena, haurrekin partekatu dezakezu dauden lekuan daudela.
GComprisissa on nykyisellään yli sata toimintoa, ja lisää kehitetään. GCompris on vapaata ohjelmistoa, mikä tarkoittaa, että voit muokata sitä tarpeisiisi, parannella sitä ja mikä tärkeintä jakaa sitä lapsille kaikkialla.
Actuellement, GCompris contient plus de 100 activités et d'autres sont en cours de développement. GCompris est un logiciel libre, ce qui veut dire que vous pouvez l'adapter à vos propres besoins, le modifier et, le plus important, le partager avec des enfants où que ce soit.
Actualmente GCompris ofrece máis de 100 actividades e hai máis en desenvolvemento. GCompris é software libre, o que significa que pode adaptalo para axustalo ás súas necesidades, melloralo e, o máis importante, compartilo con nenos de todo o mundo.
वर्तमान में जी कॉम्पप्रस 100 गतिविधियों से अधिक प्रदान करता है और अधिक विकसित किए जा रहे हैं। जी कॉम्पप्रस मुफ्त सॉफ्टवेयर है, इसका मतलब है कि आप इसे अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं, इसमें सुधार कर सकते हैं, और सबसे महत्वपूर्ण बात, इसे हर जगह बच्चों के साथ साझा कर सकते हैं।
-
Saat ini GCompris menawarkan lebih dari 100 aktivitas dan masih banyak lagi yang sedang dikembangkan. GCompris adalah software bebas, itu berarti kamu dapat menyesuaikannya dengan kebutuhanmu sendiri, memperbaikinya dan yang terpenting, bagikan dengan anak-anak di mana-mana.
+
Saat ini GCompris menawarkan lebih dari 100 aktivitas dan masih banyak lagi yang sedang dikembangkan. GCompris adalah software bebas, itu berarti kamu bisa menyesuaikannya dengan kebutuhanmu sendiri, memperbaikinya dan yang terpenting, bagikan dengan anak-anak di mana-mana.
Attualmente GCompris offre più di 100 attività e altre sono in fase di sviluppo. GCompris è software libero, che significa che puoi adattarlo alle tue necessità, migliorarlo e, cosa più importante, condividerlo con tutti i bambini.
GCompris는 100개 이상의 활동을 포함하고 있으며 더 많은 활동을 개발하고 있습니다. GCompris는 자유 소프트웨어이며, 필요에 따라서 활동을 개선할 수 있으며 전 세계의 사람들과 공유할 수 있습니다.
ഇപ്പോൾ ജികോംപ്രിയിൽ 100 ലധികം പ്രവർത്തനങ്ങൾ ഉണ്ട്, അതിൽ കൂടുതൽ ഡെവലപ്പ് ചെയ്തുകൊണ്ടിരിക്കുന്നുമുണ്ട്. ജികോംപ്രി ഒരു സ്വതന്ത്ര സോഫ്റ്റുവെയർ ആണ്, അതായത് നിങ്ങൾക്ക് അതിനെ നിങ്ങളുടെ ആവശ്യങ്ങൾക്കനുസരിച്ച് രൂപപ്പെടുത്താം, അതിനെ മെച്ചപ്പെടുത്താം, ഏറ്റവും പ്രധാനമായി, എല്ലായിടങ്ങളിലുള്ള കുട്ടികളുമായി അത് പങ്കുവെയ്ക്കാം.
@@ -407,6 +419,7 @@
Κύριο μενού του GCompris
GCompris main menu
Menú principal de GCompris
+
GCompris menu nagusia
GComprisin päävalikko
Menu principal de GCompris
Menú principal de GCompris
@@ -432,6 +445,7 @@
Δραστηριότητα "Κλικ σε κεφαλαίο γράμμα"
"Click on an uppercase letter" activity
Actividad «Pulsa en una letra mayúscula»
+
"Egin klik letra larri batean" jarduera
”Napsauta suuraakkosta” -toiminto
L'activité « Trouver la lettre majuscule »
Actividade de «Premer unha letra maiúscula»
@@ -457,6 +471,7 @@
Δραστηριότητα "Ρολόι"
"Learning Clock" activity
Actividad «Juego del reloj»
+
"Erlojua ezagutzea" jarduera
”Kellon oppiminen” -toiminto
L'activité « Trouver l'heure »
Actividade de «Aprender o reloxo»
@@ -482,6 +497,7 @@
Δραστηριότητα "Μείξη χρωμάτων"
"Mixing colour of paint" activity
Actividad «Mezcla de colores»
+
"Margo koloreak nahastea" jarduera
”Värien sekoitus” -toiminto
L'activité « Mélange de la couleur de peinture »
Actividade de «Mesturar a cor da pintura»
@@ -507,6 +523,7 @@
Δραστηριότητα "Χρώματα"
"Colours" activity
Actividad «Colores»
+
"Koloreak" jarduera
”Värit”-toiminto
L'activité « Trouver la couleur »
Actividade de «Cores»
@@ -532,6 +549,7 @@
Δραστηριότητα "Φτιάξε το ίδιο"
"Build the same model" activity
Actividad «Grúa»
+
"Eraiki eredu bera" jarduera
”Rakenna sama malli” -toiminto
L'activité « Reconstruire le modèle »
Actividade de «Constrúe o mesmo modelo»
@@ -557,6 +575,7 @@
Δραστηριότητα "Μέτρα τα αντικείμενα"
"Count the items" activity
Actividad «Enumeración»
+
"Zenbatu elementuak" jarduera
”Laske kohteet” -toiminto
L'activité « Compter les éléments »
Actividade de «Contar os elementos»
@@ -582,6 +601,7 @@
Δραστηριότητα "Δεκαπέντε"
"The fifteen game" activity
Actividad «Quince»
+
"Hamabosteko jokoa" jarduera
L'activité « Le jeu du taquin »
Actividade de «O xogo dos quince»
Attività «Il gioco del quindici»
@@ -606,6 +626,7 @@
Δραστηριότητα "Εξάγωνο"
"Hexagon" activity
Actividad «Hexágono»
+
"Hexagonoa" jarduera
L'activité « Localiser la fraise »
Actividade de «Hexágono»
Attività «Esagono»
@@ -630,6 +651,7 @@
Δραστηριότητα "Ισορρόπησε τη ζυγαριά"
"Balance the scales properly" activity
Actividad «Balanzas»
+
"Orekatu balantzak behar bezala" jarduera
”Tasapainota vaaka oikein” -toiminto
L'activité « Trouver le poids »
Actividade de «Equilibra a balanza de forma axeitada»
@@ -655,6 +677,7 @@
Δραστηριότητα "Το σκάκι στο τέλος"
"End of chess game" activity
Actividad «Final de partida de ajedrez»
+
"Xake jokoaren amaierako zatia" jarduera
”Šakin loppupeli” -toiminto
L'activité « Le jeu des échecs »
Actividade de «Final dunha partida de xadrez»
@@ -680,6 +703,7 @@
Δραστηριότητα "Βγάζω το αυτοκίνητο"
"A sliding-block puzzle game" activity
Actividad «Tráfico»
+
"Bloke irristagarrien puzzle joko bat" jarduera
L'activité « Sortir la voiture du parking »
Actividade de «Un crebacabezas de bloques que se moven»
Attività «Un rompicapo con blocchi scorrevoli»
diff --git a/org.kde.gcompris.desktop b/org.kde.gcompris.desktop
--- a/org.kde.gcompris.desktop
+++ b/org.kde.gcompris.desktop
@@ -9,6 +9,7 @@
Name[en_GB]=GCompris Educational Game
Name[es]=Juego educativo GCompris
Name[et]=Hariv mäng GCompris
+Name[eu]=GCompris hezkuntza-jokoa
Name[fi]=GCompris, opettavainen peli
Name[fr]=Jeu éducatif GCompris
Name[gl]=Xogo educativo GCompris
@@ -43,6 +44,7 @@
GenericName[en_GB]=Educational game
GenericName[es]=Juego educativo
GenericName[et]=Hariv mäng
+GenericName[eu]=Hezkuntza-jokoa
GenericName[fi]=Opettavainen peli
GenericName[fr]=Jeu éducatif
GenericName[gl]=Xogo educativo
@@ -75,6 +77,7 @@
Comment[en_GB]=Multi-Activity Educational game for children 2 to 10
Comment[es]=Juego educativo multiactividad para niños de 2 a 10 años
Comment[et]=Rohkete tegevustega hariv mäng lastele vanuses 2-10
+Comment[eu]=Jarduera anitzeko Hezkuntza-jokoa 2 eta 10 urte arteko haurrentzat
Comment[fi]=Useampitoimintoinen opettavainen peli 2–10-vuotiaille lapsille
Comment[fr]=Jeu éducatif multi-activités pour les enfants de 2 à 10 ans
Comment[gl]=Xogo educativo con varias actividades para nenos de entre 2 e 10 anos
diff --git a/platforms/sailfishOS/harbour-gcompris-qt.desktop b/platforms/sailfishOS/harbour-gcompris-qt.desktop
--- a/platforms/sailfishOS/harbour-gcompris-qt.desktop
+++ b/platforms/sailfishOS/harbour-gcompris-qt.desktop
@@ -9,6 +9,7 @@
Name[en_GB]=GCompris Educational Game
Name[es]=Juego educativo GCompris
Name[et]=Hariv mäng GCompris
+Name[eu]=GCompris hezkuntza-jokoa
Name[fi]=GCompris, opettavainen peli
Name[fr]=Jeu éducatif GCompris
Name[gl]=Xogo educativo GCompris
@@ -43,6 +44,7 @@
GenericName[en_GB]=Educational game
GenericName[es]=Juego educativo
GenericName[et]=Hariv mäng
+GenericName[eu]=Hezkuntza-jokoa
GenericName[fi]=Opettavainen peli
GenericName[fr]=Jeu éducatif
GenericName[gl]=Xogo educativo
@@ -75,6 +77,7 @@
Comment[en_GB]=Multi-Activity Educational game for children 2 to 10
Comment[es]=Juego educativo multiactividad para niños de 2 a 10 años
Comment[et]=Rohkete tegevustega hariv mäng lastele vanuses 2-10
+Comment[eu]=Jarduera anitzeko Hezkuntza-jokoa 2 eta 10 urte arteko haurrentzat
Comment[fi]=Useampitoimintoinen opettavainen peli 2–10-vuotiaille lapsille
Comment[fr]=Jeu éducatif multi-activités pour les enfants de 2 à 10 ans
Comment[gl]=Xogo educativo con varias actividades para nenos de entre 2 e 10 anos
diff --git a/src/activities/activities.txt b/src/activities/activities.txt
--- a/src/activities/activities.txt
+++ b/src/activities/activities.txt
@@ -11,6 +11,7 @@
alphabet-sequence
babymatch
babyshapes
+baby_tangram
baby_wordprocessor
balancebox
ballcatch
@@ -126,6 +127,7 @@
planegame
play_piano
play_rhythm
+programmingMaze
railroad
readingh
readingv
diff --git a/src/activities/advanced_colors/ActivityInfo.qml b/src/activities/advanced_colors/ActivityInfo.qml
--- a/src/activities/advanced_colors/ActivityInfo.qml
+++ b/src/activities/advanced_colors/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You will see dancing butterflies of different colors and a question. You have to find the correct butterfly and touch it.")
credit: ""
- section: "discovery colors"
+ section: "reading colors vocabulary"
createdInVersion: 0
}
diff --git a/src/activities/algebra_by/ActivityInfo.qml b/src/activities/algebra_by/ActivityInfo.qml
--- a/src/activities/algebra_by/ActivityInfo.qml
+++ b/src/activities/algebra_by/ActivityInfo.qml
@@ -35,7 +35,7 @@
//: Help manual
manual: qsTr("A multiplication is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type the product of the numbers. You have to be fast and submit the answer before the penguins in their balloon land!")
credit: ""
- section: "math multiplication"
+ section: "math multiplication arithmetic"
createdInVersion: 0
levels: "1,2,3,4"
}
diff --git a/src/activities/algebra_by/AlgebraBy.qml b/src/activities/algebra_by/AlgebraBy.qml
--- a/src/activities/algebra_by/AlgebraBy.qml
+++ b/src/activities/algebra_by/AlgebraBy.qml
@@ -23,9 +23,10 @@
import "../../core"
import "../algebra_by"
+import "algebra.js" as Activity
Algebra {
onStart: {
- operand.text = "x"
+ operand.text = Activity.OperandsEnum.TIMES_SIGN
}
}
diff --git a/src/activities/algebra_by/algebra.js b/src/activities/algebra_by/algebra.js
--- a/src/activities/algebra_by/algebra.js
+++ b/src/activities/algebra_by/algebra.js
@@ -27,6 +27,12 @@
var secondOperandVal
var firstOperandVal
var operations = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+var OperandsEnum = {
+ TIMES_SIGN : "\u00D7",
+ PLUS_SIGN : "\u002B",
+ MINUS_SIGN : "\u2212",
+ DIVIDE_SIGN : "\u2215"
+}
var nbLevel = operations.length
@@ -40,7 +46,7 @@
// currentLevel * N (N behind random)
// where the last levels will do:
// N * currentLevel
- if(operand.text === "x" || operand.text === "+")
+ if(operand.text === OperandsEnum.TIMES_SIGN || operand.text === OperandsEnum.PLUS_SIGN)
nbLevel = 2 * operations.length
else
nbLevel = operations.length
@@ -82,19 +88,19 @@
{
switch(operand.text)
{
- case "x":
+ case OperandsEnum.TIMES_SIGN:
firstOperandVal = coreItems.bar.level
secondOperandVal = operations[coreItems.score.currentSubLevel - 1]
break;
- case "+":
+ case OperandsEnum.PLUS_SIGN:
firstOperandVal = coreItems.bar.level
secondOperandVal = operations[coreItems.score.currentSubLevel - 1]
break;
- case "-":
+ case OperandsEnum.MINUS_SIGN:
firstOperandVal = coreItems.bar.level + 9
secondOperandVal = operations[coreItems.score.currentSubLevel - 1]
break;
- case "/":
+ case OperandsEnum.DIVIDE_SIGN:
firstOperandVal = coreItems.bar.level * operations[coreItems.score.currentSubLevel - 1]
secondOperandVal = coreItems.bar.level
break;
@@ -115,16 +121,16 @@
function getAnswer() {
switch(operand.text)
{
- case "x":
+ case OperandsEnum.TIMES_SIGN:
return (firstOperandVal * secondOperandVal)
- case "+":
+ case OperandsEnum.PLUS_SIGN:
return (firstOperandVal + secondOperandVal)
- case "-":
+ case OperandsEnum.MINUS_SIGN:
return (firstOperandVal - secondOperandVal)
- case "/":
+ case OperandsEnum.DIVIDE_SIGN:
return (firstOperandVal / secondOperandVal)
}
}
diff --git a/src/activities/algebra_div/ActivityInfo.qml b/src/activities/algebra_div/ActivityInfo.qml
--- a/src/activities/algebra_div/ActivityInfo.qml
+++ b/src/activities/algebra_div/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A division is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type it. You have to be fast and submit the answer before the penguins in their balloon land!")
credit: ""
- section: "math division"
+ section: "math division arithmetic"
createdInVersion: 4000
}
diff --git a/src/activities/algebra_div/AlgebraDiv.qml b/src/activities/algebra_div/AlgebraDiv.qml
--- a/src/activities/algebra_div/AlgebraDiv.qml
+++ b/src/activities/algebra_div/AlgebraDiv.qml
@@ -22,9 +22,10 @@
import "../../core"
import "../algebra_by/"
+import "../algebra_by/algebra.js" as Activity
Algebra {
onStart: {
- operand.text = "/"
+ operand.text = Activity.OperandsEnum.DIVIDE_SIGN
}
}
diff --git a/src/activities/algebra_minus/ActivityInfo.qml b/src/activities/algebra_minus/ActivityInfo.qml
--- a/src/activities/algebra_minus/ActivityInfo.qml
+++ b/src/activities/algebra_minus/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A subtraction is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type it. You have to be fast and submit the answer before the penguins in their balloon land!")
credit: ""
- section: "math subtraction"
+ section: "math subtraction arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/algebra_minus/AlgebraMinus.qml b/src/activities/algebra_minus/AlgebraMinus.qml
--- a/src/activities/algebra_minus/AlgebraMinus.qml
+++ b/src/activities/algebra_minus/AlgebraMinus.qml
@@ -23,10 +23,10 @@
import "../../core"
import "../algebra_by/"
-
+import "../algebra_by/algebra.js" as Activity
Algebra {
onStart: {
- operand.text = "-"
+ operand.text = Activity.OperandsEnum.MINUS_SIGN
}
}
diff --git a/src/activities/algebra_plus/ActivityInfo.qml b/src/activities/algebra_plus/ActivityInfo.qml
--- a/src/activities/algebra_plus/ActivityInfo.qml
+++ b/src/activities/algebra_plus/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("An addition is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type it. You have to be fast and submit the answer before the penguins land in their balloon!")
credit: ""
- section: "math addition"
+ section: "math addition arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/algebra_plus/AlgebraPlus.qml
--- a/src/activities/algebra_plus/AlgebraPlus.qml
+++ b/src/activities/algebra_plus/AlgebraPlus.qml
@@ -22,9 +22,10 @@
import "../../core"
import "../algebra_by/"
+import "../algebra_by/algebra.js" as Activity
Algebra {
onStart: {
- operand.text = "+"
+ operand.text = Activity.OperandsEnum.PLUS_SIGN
}
}
diff --git a/src/activities/algorithm/ActivityInfo.qml b/src/activities/algorithm/ActivityInfo.qml
--- a/src/activities/algorithm/ActivityInfo.qml
+++ b/src/activities/algorithm/ActivityInfo.qml
@@ -33,6 +33,6 @@
//: Help manual
manual: qsTr("Look at the two sequences. Each fruit in the first sequence has been replaced by another fruit in the second sequence. Complete the second sequence by using the correct fruits, after studying this pattern.")
credit: ""
- section: "discovery"
+ section: "discovery logic"
createdInVersion: 0
}
diff --git a/src/activities/alphabet-sequence/ActivityInfo.qml b/src/activities/alphabet-sequence/ActivityInfo.qml
--- a/src/activities/alphabet-sequence/ActivityInfo.qml
+++ b/src/activities/alphabet-sequence/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Catch the alphabet letters. With a keyboard use the arrow keys to move the helicopter. With a pointing device you just click or tap on the target location. To know which letter you have to catch you can either remember it or check the bottom right corner.")
credit: ""
- section: "reading"
- createdInVersion: 0
+ section: "reading letters"
+ createdInVersion: 0
}
diff --git a/src/activities/baby_tangram/ActivityInfo.qml b/src/activities/baby_tangram/ActivityInfo.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/ActivityInfo.qml
@@ -0,0 +1,40 @@
+/* GCompris - ActivityInfo.qml
+ *
+ * Copyright (C) 2019 Johnny Jazeix
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import GCompris 1.0
+
+ActivityInfo {
+ name: "baby_tangram/BabyTangram.qml"
+ difficulty: 1
+ icon: "baby_tangram/baby_tangram.svg"
+ author: "Johnny Jazeix <jazeix@gmail.com>"
+ demo: true
+ //: Activity title
+ title: qsTr("Reassemble the shapes")
+ //: Help title
+ description: qsTr("The objective is to form a given shape")
+ // intro: "Click on each object to obtain the same figure. You can change their orientation by clicking on the arrows."
+ //: Help goal
+ goal: ""
+ //: Help prerequisite
+ prerequisite: qsTr("Mouse-manipulation")
+ //: Help manual
+ manual: qsTr("Select the object to form. Move a piece by dragging it. The symmetrical button appears on items that supports it. Click on the rotation button or drag around it to show the rotation you want. More complicated levels can be found in tangram activity.")
+ credit: ""
+ section: "puzzle"
+ createdInVersion: 9800
+}
diff --git a/src/activities/baby_tangram/BabyTangram.qml b/src/activities/baby_tangram/BabyTangram.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/BabyTangram.qml
@@ -0,0 +1,33 @@
+/* GCompris - BabyTangram.qml
+ *
+ * Copyright (C) 2019 Johnny Jazeix
+ *
+ * Authors:
+ * Yves Combe / Philippe Banwarth (GTK+ version)
+ * Johnny Jazeix / Bruno Coudoin (Qt Quick port)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "dataset.js" as Dataset
+import "../tangram"
+import "."
+
+Tangram {
+ id: activity
+ dataset: Dataset
+ resourceUrl: "qrc:/gcompris/src/activities/baby_tangram/resource/"
+}
diff --git a/src/activities/baby_tangram/CMakeLists.txt b/src/activities/baby_tangram/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/CMakeLists.txt
@@ -0,0 +1 @@
+GCOMPRIS_ADD_RCC(activities/baby_tangram *.qml *.svg dataset.js resource/*/*)
diff --git a/src/activities/baby_tangram/baby_tangram.svg b/src/activities/baby_tangram/baby_tangram.svg
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/baby_tangram.svg
@@ -0,0 +1,863 @@
+
+
+
+
diff --git a/src/activities/baby_tangram/dataset.js b/src/activities/baby_tangram/dataset.js
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/dataset.js
@@ -0,0 +1,717 @@
+.pragma library
+
+/* dataset format
+ - for each level we have:
+ - bg: an optional background image
+ - colorMask: the color of the shadowed target items
+ - a list of pieces that each holds:
+ - img: piece file name
+ - flippable: is the piece flippable
+ - flipping: target flipping state
+ - x: target x position
+ - y: target y position
+ - width: item width
+ - height: item height
+ - rotation: item target rotation
+ - moduloRotation: modulo rotation
+ - initX: initial x position
+ - initY: innitial y position
+ - initRotation: initial rotation
+ - initFlipping: initial flipping
+*/
+
+var dataset = [
+ {
+ 'bg': '',
+ 'name': 'train1',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'train/loco.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.238,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84868,
+ 'initY': 0.14357,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.237,
+ 'x': 0.16136986301369866,
+ 'y': 0.5003377010125074
+ },
+ {
+ 'img': 'train/coal.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.144,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.40198,
+ 'initY': 0.10248,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.221,
+ 'x': 0.38829064919595,
+ 'y': 0.5456027397260274
+ },
+ {
+ 'img': 'train/wood.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.141,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.58434,
+ 'initY': 0.23488,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.235,
+ 'x': 0.6111453245979751,
+ 'y': 0.5469714115544966
+ },
+ {
+ 'img': 'train/passenger.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.213,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.15311,
+ 'initY': 0.15368,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.238,
+ 'x': 0.8362608695652176,
+ 'y': 0.5122281119714115
+ },
+ ]
+ },
+ {
+ 'bg': '',
+ 'name': 'train2',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'train/loco.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.238,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84868,
+ 'initY': 0.14357,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.237,
+ 'x': 0.16136986301369866,
+ 'y': 0.5003377010125074
+ },
+ {
+ 'img': 'train/coal.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.144,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.40198,
+ 'initY': 0.10248,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.221,
+ 'x': 0.6116378796902918,
+ 'y': 0.5491762954139369
+ },
+ {
+ 'img': 'train/wood.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.141,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.58434,
+ 'initY': 0.23488,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.235,
+ 'x': 0.8368749255509234,
+ 'y': 0.5493537820131029
+ },
+ {
+ 'img': 'train/passenger.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.213,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.15311,
+ 'initY': 0.15368,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.238,
+ 'x': 0.3913531864204886,
+ 'y': 0.5140148898153662
+ },
+ ]
+ },
+ {
+ 'bg': '',
+ 'name': 'train3',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'train/loco.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.238,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84868,
+ 'initY': 0.14357,
+ 'moduloRotation': 360,
+ 'rotation': 45,
+ 'width': 0.237,
+ 'x': 0.19114949374627757,
+ 'y': 0.22279154258487197
+ },
+ {
+ 'img': 'train/coal.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.144,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.40198,
+ 'initY': 0.10248,
+ 'moduloRotation': 360,
+ 'rotation': 45,
+ 'width': 0.221,
+ 'x': 0.6336748064324003,
+ 'y': 0.7272584871947588
+ },
+ {
+ 'img': 'train/wood.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.141,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.58434,
+ 'initY': 0.23488,
+ 'moduloRotation': 360,
+ 'rotation': 45,
+ 'width': 0.235,
+ 'x': 0.4801149493746279,
+ 'y': 0.5791334127456819
+ },
+ {
+ 'img': 'train/passenger.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.213,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84311,
+ 'initY': 0.42368,
+ 'moduloRotation': 360,
+ 'rotation': 45,
+ 'width': 0.238,
+ 'x': 0.34251459201905915,
+ 'y': 0.3925139964264443
+ },
+ ]
+ },
+ {
+ 'bg': '',
+ 'name': 'train4',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'train/loco.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.238,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84868,
+ 'initY': 0.14357,
+ 'moduloRotation': 360,
+ 'rotation': 315,
+ 'width': 0.237,
+ 'x': 0.20365693865396073,
+ 'y': 0.4241018463371054
+ },
+ {
+ 'img': 'train/coal.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.144,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.40198,
+ 'initY': 0.10248,
+ 'moduloRotation': 360,
+ 'rotation': 90,
+ 'width': 0.221,
+ 'x': 0.7575580702799286,
+ 'y': 0.6540005955926147
+ },
+ {
+ 'img': 'train/wood.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.141,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.58434,
+ 'initY': 0.23488,
+ 'moduloRotation': 360,
+ 'rotation': 45,
+ 'width': 0.235,
+ 'x': 0.6689178082191782,
+ 'y': 0.4540589636688504
+ },
+ {
+ 'img': 'train/passenger.svg',
+ 'flippable': 0,
+ 'flipping': false,
+ 'height': 0.213,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84311,
+ 'initY': 0.42368,
+ 'moduloRotation': 360,
+ 'rotation': 0,
+ 'width': 0.238,
+ 'x': 0.4550815961882075,
+ 'y': 0.3317635497319833
+ },
+ ]
+ },
+ {
+ 'bg': '',
+ 'name': 'train5',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'train/loco.svg',
+ 'flippable': 1,
+ 'flipping': true,
+ 'height': 0.238,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.84868,
+ 'initY': 0.14357,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.237,
+ 'x': 0.8474925550923169,
+ 'y': 0.48902144133412745
+ },
+ {
+ 'img': 'train/coal.svg',
+ 'flippable': 1,
+ 'flipping': true,
+ 'height': 0.144,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.40198,
+ 'initY': 0.10248,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.221,
+ 'x': 0.619976176295414,
+ 'y': 0.5354776652769506
+ },
+ {
+ 'img': 'train/wood.svg',
+ 'flippable': 1,
+ 'flipping': true,
+ 'height': 0.141,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.58434,
+ 'initY': 0.2348,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.235,
+ 'x': 0.39375402025014905,
+ 'y': 0.5374419297200713
+ },
+ {
+ 'img': 'train/passenger.svg',
+ 'flippable': 1,
+ 'flipping': true,
+ 'height': 0.213,
+ 'initFlipping': 0,
+ 'initRotation': 0,
+ 'initX': 0.15311,
+ 'initY': 0.15368,
+ 'moduloRotation': 0,
+ 'rotation': 0,
+ 'width': 0.238,
+ 'x': 0.16741036331149514,
+ 'y': 0.5015074449076831
+ },
+ ]
+ },
+ {
+ 'name': 'Level 1',
+ 'bg': 'truck/traffic_bg.svg',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'truck/engine.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.860,
+ 'y': 0.573,
+ 'width': 0.233,
+ 'height': 0.109,
+ 'rotation': 0,
+ 'moduloRotation': 0,
+ 'initX': 0.866,
+ 'initY': 0.754,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/cabin.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.847,
+ 'y': 0.435,
+ 'width': 0.207,
+ 'height': 0.178,
+ 'rotation': 0,
+ 'moduloRotation': 0,
+ 'initX': 0.153,
+ 'initY': 0.789,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/container.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.358,
+ 'y': 0.489,
+ 'width': 0.676,
+ 'height': 0.271,
+ 'rotation': 0,
+ 'moduloRotation': 0,
+ 'initX': 0.338,
+ 'initY': 0.135,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/back_road.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.181,
+ 'y': 0.633,
+ 'width': 0.198,
+ 'height': 0.092,
+ 'rotation': 0,
+ 'moduloRotation': 0,
+ 'initX': 0.799,
+ 'initY': 0.146,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/front_road.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.766,
+ 'y': 0.617,
+ 'width': 0.403,
+ 'height': 0.121,
+ 'rotation': 0,
+ 'moduloRotation': 0,
+ 'initX': 0.501,
+ 'initY': 0.760,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ }
+ ]
+ },
+ {
+ 'name': 'Level 2',
+ 'bg': 'truck/traffic_bg.svg',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'truck/engine.svg',
+ 'flippable': 1,
+ 'flipping': 0,
+ 'x': 0.860,
+ 'y': 0.573,
+ 'width': 0.233,
+ 'height': 0.109,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.866,
+ 'initY': 0.754,
+ 'initRotation': 0,
+ 'initFlipping': 1
+ },
+ {
+ 'img': 'truck/cabin.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.847,
+ 'y': 0.435,
+ 'width': 0.207,
+ 'height': 0.178,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.153,
+ 'initY': 0.789,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/container.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.358,
+ 'y': 0.489,
+ 'width': 0.676,
+ 'height': 0.271,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.338,
+ 'initY': 0.135,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/back_road.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.181,
+ 'y': 0.633,
+ 'width': 0.198,
+ 'height': 0.092,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.799,
+ 'initY': 0.146,
+ 'initRotation': 270,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/front_road.svg',
+ 'flippable': 1,
+ 'flipping': 0,
+ 'x': 0.766,
+ 'y': 0.617,
+ 'width': 0.403,
+ 'height': 0.121,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.501,
+ 'initY': 0.760,
+ 'initRotation': 90,
+ 'initFlipping': 1
+ }
+ ]
+ },
+ {
+ 'name': 'Level 3',
+ 'bg': 'truck/traffic_bg.svg',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'truck/engine.svg',
+ 'flippable': 1,
+ 'flipping': 0,
+ 'x': 0.860,
+ 'y': 0.573,
+ 'width': 0.233,
+ 'height': 0.109,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.866,
+ 'initY': 0.754,
+ 'initRotation': 0,
+ 'initFlipping': 1
+ },
+ {
+ 'img': 'truck/cabin.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.847,
+ 'y': 0.435,
+ 'width': 0.207,
+ 'height': 0.178,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.153,
+ 'initY': 0.789,
+ 'initRotation': 45,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/container.svg',
+ 'flippable': 1,
+ 'flipping': 0,
+ 'x': 0.358,
+ 'y': 0.489,
+ 'width': 0.676,
+ 'height': 0.271,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.338,
+ 'initY': 0.135,
+ 'initRotation': 0,
+ 'initFlipping': 1
+ },
+ {
+ 'img': 'truck/back_road.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.181,
+ 'y': 0.633,
+ 'width': 0.198,
+ 'height': 0.092,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.799,
+ 'initY': 0.146,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'truck/front_road.svg',
+ 'flippable': 1,
+ 'flipping': 0,
+ 'x': 0.766,
+ 'y': 0.617,
+ 'width': 0.403,
+ 'height': 0.121,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.501,
+ 'initY': 0.760,
+ 'initRotation': 270,
+ 'initFlipping': 0
+ }
+ ]
+ },
+ {
+ 'name': 'Level 4',
+ 'bg': 'car1/car.svg',
+ 'colorMask': '#999',
+ 'pieces': [
+ {
+ 'img': 'car1/windshield.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.492,
+ 'y': 0.309,
+ 'width': 0.563,
+ 'height': 0.227,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.301,
+ 'initY': 0.133,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'car1/tire_right.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.226,
+ 'y': 0.720,
+ 'width': 0.126,
+ 'height': 0.147,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.863,
+ 'initY': 0.123,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'car1/tire_right.svg',
+ 'flippable': 0,
+ 'flipping': 1,
+ 'x': 0.782,
+ 'y': 0.720,
+ 'width': 0.126,
+ 'height': 0.147,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.663,
+ 'initY': 0.123,
+ 'initRotation': 0,
+ 'initFlipping': 1
+ },
+ {
+ 'img': 'car1/bumper.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.502,
+ 'y': 0.656,
+ 'width': 0.710,
+ 'height': 0.184,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.405,
+ 'initY': 0.892,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'car1/grille.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.505,
+ 'y': 0.600,
+ 'width': 0.365,
+ 'height': 0.051,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.382,
+ 'initY': 0.825,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'car1/headlights.svg',
+ 'flippable': 0,
+ 'flipping': 0,
+ 'x': 0.782,
+ 'y': 0.506,
+ 'width': 0.134,
+ 'height': 0.125,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.90,
+ 'initY': 0.85,
+ 'initRotation': 0,
+ 'initFlipping': 0
+ },
+ {
+ 'img': 'car1/headlights.svg',
+ 'flippable': 0,
+ 'flipping': 1,
+ 'x': 0.222,
+ 'y': 0.506,
+ 'width': 0.134,
+ 'height': 0.125,
+ 'rotation': 0,
+ 'moduloRotation': 360,
+ 'initX': 0.90,
+ 'initY': 0.30,
+ 'initRotation': 0,
+ 'initFlipping': 1
+ }
+ ]
+ }
+ ]
diff --git a/src/activities/baby_tangram/resource/README b/src/activities/baby_tangram/resource/README
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/resource/README
@@ -0,0 +1,21 @@
+Copyright: 2000, 2008 Bruno Coudoin and others
+License: Public domain
+Files:
+car1/bumper.svg
+car1/car.svg
+car1/grille.svg
+car1/headlights.svg
+car1/tire_right.svg
+car1/windshield.svg
+tangram/background.svg
+tangram/flip.svg
+train/coal.svg
+train/loco.svg
+train/passenger.svg
+train/wood.svg
+truck/back_road.svg
+truck/cabin.svg
+truck/container.svg
+truck/engine.svg
+truck/front_road.svg
+truck/traffic_bg.svg
diff --git a/src/activities/tangram/resource/car1/bumper.svg b/src/activities/baby_tangram/resource/car1/bumper.svg
rename from src/activities/tangram/resource/car1/bumper.svg
rename to src/activities/baby_tangram/resource/car1/bumper.svg
diff --git a/src/activities/tangram/resource/car1/car.svg b/src/activities/baby_tangram/resource/car1/car.svg
rename from src/activities/tangram/resource/car1/car.svg
rename to src/activities/baby_tangram/resource/car1/car.svg
diff --git a/src/activities/tangram/resource/car1/grille.svg b/src/activities/baby_tangram/resource/car1/grille.svg
rename from src/activities/tangram/resource/car1/grille.svg
rename to src/activities/baby_tangram/resource/car1/grille.svg
diff --git a/src/activities/tangram/resource/car1/headlights.svg b/src/activities/baby_tangram/resource/car1/headlights.svg
rename from src/activities/tangram/resource/car1/headlights.svg
rename to src/activities/baby_tangram/resource/car1/headlights.svg
diff --git a/src/activities/tangram/resource/car1/tire_right.svg b/src/activities/baby_tangram/resource/car1/tire_right.svg
rename from src/activities/tangram/resource/car1/tire_right.svg
rename to src/activities/baby_tangram/resource/car1/tire_right.svg
diff --git a/src/activities/tangram/resource/car1/windshield.svg b/src/activities/baby_tangram/resource/car1/windshield.svg
rename from src/activities/tangram/resource/car1/windshield.svg
rename to src/activities/baby_tangram/resource/car1/windshield.svg
diff --git a/src/activities/tangram/resource/m-car1/bumper.svg b/src/activities/baby_tangram/resource/m-car1/bumper.svg
rename from src/activities/tangram/resource/m-car1/bumper.svg
rename to src/activities/baby_tangram/resource/m-car1/bumper.svg
diff --git a/src/activities/tangram/resource/m-car1/grille.svg b/src/activities/baby_tangram/resource/m-car1/grille.svg
rename from src/activities/tangram/resource/m-car1/grille.svg
rename to src/activities/baby_tangram/resource/m-car1/grille.svg
diff --git a/src/activities/tangram/resource/m-car1/headlights.svg b/src/activities/baby_tangram/resource/m-car1/headlights.svg
rename from src/activities/tangram/resource/m-car1/headlights.svg
rename to src/activities/baby_tangram/resource/m-car1/headlights.svg
diff --git a/src/activities/tangram/resource/m-car1/tire_right.svg b/src/activities/baby_tangram/resource/m-car1/tire_right.svg
rename from src/activities/tangram/resource/m-car1/tire_right.svg
rename to src/activities/baby_tangram/resource/m-car1/tire_right.svg
diff --git a/src/activities/tangram/resource/m-car1/windshield.svg b/src/activities/baby_tangram/resource/m-car1/windshield.svg
rename from src/activities/tangram/resource/m-car1/windshield.svg
rename to src/activities/baby_tangram/resource/m-car1/windshield.svg
diff --git a/src/activities/tangram/resource/m-train/coal.svg b/src/activities/baby_tangram/resource/m-train/coal.svg
rename from src/activities/tangram/resource/m-train/coal.svg
rename to src/activities/baby_tangram/resource/m-train/coal.svg
diff --git a/src/activities/tangram/resource/m-train/loco.svg b/src/activities/baby_tangram/resource/m-train/loco.svg
rename from src/activities/tangram/resource/m-train/loco.svg
rename to src/activities/baby_tangram/resource/m-train/loco.svg
diff --git a/src/activities/tangram/resource/m-train/passenger.svg b/src/activities/baby_tangram/resource/m-train/passenger.svg
rename from src/activities/tangram/resource/m-train/passenger.svg
rename to src/activities/baby_tangram/resource/m-train/passenger.svg
diff --git a/src/activities/tangram/resource/m-train/wood.svg b/src/activities/baby_tangram/resource/m-train/wood.svg
rename from src/activities/tangram/resource/m-train/wood.svg
rename to src/activities/baby_tangram/resource/m-train/wood.svg
diff --git a/src/activities/tangram/resource/m-truck/back_road.svg b/src/activities/baby_tangram/resource/m-truck/back_road.svg
rename from src/activities/tangram/resource/m-truck/back_road.svg
rename to src/activities/baby_tangram/resource/m-truck/back_road.svg
diff --git a/src/activities/tangram/resource/m-truck/cabin.svg b/src/activities/baby_tangram/resource/m-truck/cabin.svg
rename from src/activities/tangram/resource/m-truck/cabin.svg
rename to src/activities/baby_tangram/resource/m-truck/cabin.svg
diff --git a/src/activities/tangram/resource/m-truck/container.svg b/src/activities/baby_tangram/resource/m-truck/container.svg
rename from src/activities/tangram/resource/m-truck/container.svg
rename to src/activities/baby_tangram/resource/m-truck/container.svg
diff --git a/src/activities/tangram/resource/m-truck/engine.svg b/src/activities/baby_tangram/resource/m-truck/engine.svg
rename from src/activities/tangram/resource/m-truck/engine.svg
rename to src/activities/baby_tangram/resource/m-truck/engine.svg
diff --git a/src/activities/tangram/resource/m-truck/front_road.svg b/src/activities/baby_tangram/resource/m-truck/front_road.svg
rename from src/activities/tangram/resource/m-truck/front_road.svg
rename to src/activities/baby_tangram/resource/m-truck/front_road.svg
diff --git a/src/activities/baby_tangram/resource/tangram/background.svg b/src/activities/baby_tangram/resource/tangram/background.svg
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/resource/tangram/background.svg
@@ -0,0 +1,69 @@
+
+
+
+
diff --git a/src/activities/baby_tangram/resource/tangram/flip.svg b/src/activities/baby_tangram/resource/tangram/flip.svg
new file mode 100644
--- /dev/null
+++ b/src/activities/baby_tangram/resource/tangram/flip.svg
@@ -0,0 +1,86 @@
+
+
+
+
diff --git a/src/activities/tangram/resource/train/README b/src/activities/baby_tangram/resource/train/README
rename from src/activities/tangram/resource/train/README
rename to src/activities/baby_tangram/resource/train/README
diff --git a/src/activities/tangram/resource/train/coal.svg b/src/activities/baby_tangram/resource/train/coal.svg
rename from src/activities/tangram/resource/train/coal.svg
rename to src/activities/baby_tangram/resource/train/coal.svg
diff --git a/src/activities/tangram/resource/train/loco.svg b/src/activities/baby_tangram/resource/train/loco.svg
rename from src/activities/tangram/resource/train/loco.svg
rename to src/activities/baby_tangram/resource/train/loco.svg
diff --git a/src/activities/tangram/resource/train/passenger.svg b/src/activities/baby_tangram/resource/train/passenger.svg
rename from src/activities/tangram/resource/train/passenger.svg
rename to src/activities/baby_tangram/resource/train/passenger.svg
diff --git a/src/activities/tangram/resource/train/wood.svg b/src/activities/baby_tangram/resource/train/wood.svg
rename from src/activities/tangram/resource/train/wood.svg
rename to src/activities/baby_tangram/resource/train/wood.svg
diff --git a/src/activities/tangram/resource/truck/back_road.svg b/src/activities/baby_tangram/resource/truck/back_road.svg
rename from src/activities/tangram/resource/truck/back_road.svg
rename to src/activities/baby_tangram/resource/truck/back_road.svg
diff --git a/src/activities/tangram/resource/truck/cabin.svg b/src/activities/baby_tangram/resource/truck/cabin.svg
rename from src/activities/tangram/resource/truck/cabin.svg
rename to src/activities/baby_tangram/resource/truck/cabin.svg
diff --git a/src/activities/tangram/resource/truck/container.svg b/src/activities/baby_tangram/resource/truck/container.svg
rename from src/activities/tangram/resource/truck/container.svg
rename to src/activities/baby_tangram/resource/truck/container.svg
diff --git a/src/activities/tangram/resource/truck/engine.svg b/src/activities/baby_tangram/resource/truck/engine.svg
rename from src/activities/tangram/resource/truck/engine.svg
rename to src/activities/baby_tangram/resource/truck/engine.svg
diff --git a/src/activities/tangram/resource/truck/front_road.svg b/src/activities/baby_tangram/resource/truck/front_road.svg
rename from src/activities/tangram/resource/truck/front_road.svg
rename to src/activities/baby_tangram/resource/truck/front_road.svg
diff --git a/src/activities/tangram/resource/truck/traffic_bg.svg b/src/activities/baby_tangram/resource/truck/traffic_bg.svg
rename from src/activities/tangram/resource/truck/traffic_bg.svg
rename to src/activities/baby_tangram/resource/truck/traffic_bg.svg
diff --git a/src/activities/baby_wordprocessor/ActivityInfo.qml b/src/activities/baby_wordprocessor/ActivityInfo.qml
--- a/src/activities/baby_wordprocessor/ActivityInfo.qml
+++ b/src/activities/baby_wordprocessor/ActivityInfo.qml
@@ -38,6 +38,6 @@
Press 'Shift' and use the arrow keys to select the text. Use Ctrl+C to copy, Ctrl+V to paste and Crtl+X to cut text. Ctrl+Z can be used to undo changes.
Try to fiddle around and find more shortcuts. For example, what is the shortcut to select all the text?")
credit: ""
- section: "computer keyboard reading"
+ section: "computer keyboard reading letters"
createdInVersion: 6000
}
diff --git a/src/activities/babymatch/ActivityInfo.qml b/src/activities/babymatch/ActivityInfo.qml
--- a/src/activities/babymatch/ActivityInfo.qml
+++ b/src/activities/babymatch/ActivityInfo.qml
@@ -38,6 +38,6 @@
//: Help manual
manual: qsTr("In the main board area, a set of objects is displayed. In the vertical box (at the left of the main board) another set of objects is shown, each object in the group on the left matching exactly one object in the main board area. This game challenges you to find the logical link between these objects. How do they fit together? Drag each object to the correct red space in the main area.")
credit: ""
- section: "discovery"
+ section: "reading vocabulary"
createdInVersion: 4000
}
diff --git a/src/activities/babyshapes/ActivityInfo.qml b/src/activities/babyshapes/ActivityInfo.qml
--- a/src/activities/babyshapes/ActivityInfo.qml
+++ b/src/activities/babyshapes/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("Complete the puzzle by dragging each piece from the set of pieces on the left, to the matching space in the puzzle.")
credit: qsTr("The dog is provided by Andre Connes and released under the GPL")
- section: "discovery"
+ section: "computer"
createdInVersion: 4000
}
diff --git a/src/activities/binary_bulb/ActivityInfo.qml b/src/activities/binary_bulb/ActivityInfo.qml
--- a/src/activities/binary_bulb/ActivityInfo.qml
+++ b/src/activities/binary_bulb/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Turn on the right bulbs to represent the binary of the given decimal number. When you have achieved it, press OK.")
credit: ""
- section: "experiment"
+ section: "sciences experiment"
createdInVersion: 9500
}
diff --git a/src/activities/braille_alphabets/ActivityInfo.qml b/src/activities/braille_alphabets/ActivityInfo.qml
--- a/src/activities/braille_alphabets/ActivityInfo.qml
+++ b/src/activities/braille_alphabets/ActivityInfo.qml
@@ -36,6 +36,6 @@
manual: qsTr("The screen has 3 sections: an interactive braille cell, an instruction telling you the letter to reproduce, " +
"and at the top the Braille letters to use as a reference. Each level teaches a set of 10 letters.")
credit: ""
- section: "discovery braille"
+ section: "reading letters braille"
createdInVersion: 0
}
diff --git a/src/activities/braille_fun/ActivityInfo.qml b/src/activities/braille_fun/ActivityInfo.qml
--- a/src/activities/braille_fun/ActivityInfo.qml
+++ b/src/activities/braille_fun/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Enter the braille code in the tile for the letters on the banner pulled by Tux in his plane across the screen. Check the braille chart by clicking on the toggle button for help.")
credit: ""
- section: "discovery braille"
+ section: "reading braille letters"
createdInVersion: 4000
}
diff --git a/src/activities/calendar/ActivityInfo.qml b/src/activities/calendar/ActivityInfo.qml
--- a/src/activities/calendar/ActivityInfo.qml
+++ b/src/activities/calendar/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Read the instructions and select the correct date on the calendar.")
credit: ""
- section: "discovery"
+ section: "math measures"
createdInVersion: 9000
}
diff --git a/src/activities/canal_lock/ActivityInfo.qml b/src/activities/canal_lock/ActivityInfo.qml
--- a/src/activities/canal_lock/ActivityInfo.qml
+++ b/src/activities/canal_lock/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You are in charge of the canal lock. Open the gates and the locks in the right order, so Tux can travel through the gates in both directions.")
credit: qsTr("Drawing by Stephane Cabaraux.")
- section: "experiment"
+ section: "sciences experiment"
createdInVersion: 0
}
diff --git a/src/activities/categorization/ActivityInfo.qml b/src/activities/categorization/ActivityInfo.qml
--- a/src/activities/categorization/ActivityInfo.qml
+++ b/src/activities/categorization/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Review the instructions and then drag and drop the elements as specified")
credit: ""
- section: "fun"
+ section: "reading vocabulary"
createdInVersion: 8000
}
diff --git a/src/activities/categorization/resource/board/category_colors.qml b/src/activities/categorization/resource/board/category_colors.qml
--- a/src/activities/categorization/resource/board/category_colors.qml
+++ b/src/activities/categorization/resource/board/category_colors.qml
@@ -31,7 +31,7 @@
"image": imagesPrefix + "others/color2.png",
"content": [
{
- "instructions": "Place the objects matching GREEN color to right and others to the left",
+ "instructions": qsTr("Place the objects matching GREEN color to right and others to the left"),
"image": imagesPrefix + "green.png",
"maxNumberOfGood": 5,
"maxNumberOfBad": 4,
@@ -40,7 +40,7 @@
"bad": ["left.png","lobster.png","mail.png","post.png"]
},
{
- "instructions": "Place the objects matching WHITE color to right and others to the left",
+ "instructions": qsTr("Place the objects matching WHITE color to right and others to the left"),
"image": imagesPrefix + "white.png",
"maxNumberOfGood": 6,
"maxNumberOfBad": 6,
@@ -49,7 +49,7 @@
"bad": ["flash.png","plum.png","potato.png","pumpkin.png","rabbit.png","kiwi.png"]
},
{
- "instructions": "Place the objects matching PINK color to right and others to the left",
+ "instructions": qsTr("Place the objects matching PINK color to right and others to the left"),
"image": imagesPrefix + "pink.png",
"maxNumberOfGood": 5,
"maxNumberOfBad": 4,
@@ -59,7 +59,7 @@
},
{
"tags": ["red"],
- "instructions": "Place the objects matching RED color to right and others to the left",
+ "instructions": qsTr("Place the objects matching RED color to right and others to the left"),
"image": imagesPrefix + "red.png",
"maxNumberOfGood": 5,
"maxNumberOfBad": 4,
@@ -68,7 +68,7 @@
"bad": ["shapes/halforange.svg","radio.png","ramp.png","wheat.png"]
},
{
- "instructions": "Place the objects matching BROWN color to right and others to the left",
+ "instructions": qsTr("Place the objects matching BROWN color to right and others to the left"),
"image": imagesPrefix + "brown.png",
"maxNumberOfGood": 6,
"maxNumberOfBad": 6,
@@ -77,7 +77,7 @@
"bad": ["cheese.png","bright.png","shapes/conehat.svg","dolphin.png","shapes/cd.svg","drip.png"]
},
{
- "instructions": "Place the objects matching PURPLE color to right and others to the left",
+ "instructions": qsTr("Place the objects matching PURPLE color to right and others to the left"),
"categorise": "PURPLE",
"image": imagesPrefix + "others/purple.png",
"maxNumberOfGood": 6,
@@ -87,7 +87,7 @@
"bad": ["bulb.png","bell.png","blackbird.png","umbrella.png","pumpkin.png","shapes/halfmoon.svg"]
},
{
- "instructions": "Place the objects matching GREY color to right and others to the left",
+ "instructions": qsTr("Place the objects matching GREY color to right and others to the left"),
"image": imagesPrefix + "gray.png",
"maxNumberOfGood": 6,
"maxNumberOfBad": 6,
@@ -96,7 +96,7 @@
"bad": ["shapes/backcard.svg","radio.png","clover.png","left.png","flash.png","ink.png"]
},
{
- "instructions": "Place the objects matching ORANGE color to right and others to the left",
+ "instructions": qsTr("Place the objects matching ORANGE color to right and others to the left"),
"image": imagesPrefix + "orange-color.png",
"maxNumberOfGood": 3,
"maxNumberOfBad": 3,
@@ -105,7 +105,7 @@
"bad": ["plum.png","potato.png","post.png"]
},
{
- "instructions": "Place the objects matching YELLOW color to right and others to the left",
+ "instructions": qsTr("Place the objects matching YELLOW color to right and others to the left"),
"categorise":"YELLOW",
"image": imagesPrefix + "yellow.png",
"maxNumberOfGood": 6,
diff --git a/src/activities/chronos/ActivityInfo.qml b/src/activities/chronos/ActivityInfo.qml
--- a/src/activities/chronos/ActivityInfo.qml
+++ b/src/activities/chronos/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("Pick from the pictures on the left and put them on the red dots")
credit: qsTr("Moon photo is copyright NASA. The space sounds come from Tuxpaint and Vegastrike which are released under the GPL license. The transportation images are copyright Franck Doucet. Dates of Transportation are based on those found in <http://www.wikipedia.org>.")
- section: "discovery"
+ section: "sciences history"
createdInVersion: 4000
}
diff --git a/src/activities/click_on_letter/ActivityInfo.qml b/src/activities/click_on_letter/ActivityInfo.qml
--- a/src/activities/click_on_letter/ActivityInfo.qml
+++ b/src/activities/click_on_letter/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A letter is spoken. Click on the matching letter in the main area. You can listen to the letter again, by clicking on the mouth icon.")
credit: ""
- section: "reading"
+ section: "reading letters"
createdInVersion: 0
}
diff --git a/src/activities/click_on_letter_up/ActivityInfo.qml b/src/activities/click_on_letter_up/ActivityInfo.qml
--- a/src/activities/click_on_letter_up/ActivityInfo.qml
+++ b/src/activities/click_on_letter_up/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A letter is spoken. Click on the matching letter in the main area. You can listen to the letter again, by clicking on the mouth icon in the bottom box.")
credit: ""
- section: "reading"
+ section: "reading letters"
createdInVersion: 0
}
diff --git a/src/activities/clockgame/ActivityInfo.qml b/src/activities/clockgame/ActivityInfo.qml
--- a/src/activities/clockgame/ActivityInfo.qml
+++ b/src/activities/clockgame/ActivityInfo.qml
@@ -35,7 +35,7 @@
//: Help manual
manual: qsTr("Set the clock to the given time, in the time-units shown (hours:minutes or hours:minutes:seconds). Drag the different arrows, to make the respective time unit go up or down.")
credit: ""
- section: "discovery"
+ section: "math measures"
createdInVersion: 0
levels: "1,2"
}
diff --git a/src/activities/color_mix/ActivityInfo.qml b/src/activities/color_mix/ActivityInfo.qml
--- a/src/activities/color_mix/ActivityInfo.qml
+++ b/src/activities/color_mix/ActivityInfo.qml
@@ -39,6 +39,6 @@
In case of paints the inks absorb different colors of light falling on it, subtracting it from what you see. The more ink you add, the more light is absorbed, and the darker the combined color gets. We can mix just three primary colors to make many new colors. The primary colors for paint/ink are cyan (a special shade of blue), magenta (a special shade of pink), and yellow.
")
credit: qsTr("Images from http://openclipart.org")
- section: "experiment color"
+ section: "sciences experiment color"
createdInVersion: 0
}
diff --git a/src/activities/color_mix_light/ActivityInfo.qml b/src/activities/color_mix_light/ActivityInfo.qml
--- a/src/activities/color_mix_light/ActivityInfo.qml
+++ b/src/activities/color_mix_light/ActivityInfo.qml
@@ -38,6 +38,6 @@
In case of light it is just the opposite of mixing color with paints! The more light you add the lighter the resultant color will get. Primary colors of light are red, green and blue.")
credit: qsTr("Images from http://openclipart.org")
- section: "experiment color"
+ section: "sciences experiment color"
createdInVersion: 0
}
diff --git a/src/activities/colors/ActivityInfo.qml b/src/activities/colors/ActivityInfo.qml
--- a/src/activities/colors/ActivityInfo.qml
+++ b/src/activities/colors/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Listen to the color and touch the matching duck.")
credit: ""
- section: "discovery color"
+ section: "reading color vocabulary"
createdInVersion: 0
}
diff --git a/src/activities/details/ActivityInfo.qml b/src/activities/details/ActivityInfo.qml
--- a/src/activities/details/ActivityInfo.qml
+++ b/src/activities/details/ActivityInfo.qml
@@ -38,6 +38,6 @@
//: Help manual
manual: qsTr("Complete the puzzle by dragging each piece from the set of pieces on the left, to the matching space in the puzzle.")
credit: qsTr("The images are from Wikimedia Commons.")
- section: "discovery"
+ section: "discovery arts"
createdInVersion: 4000
}
diff --git a/src/activities/digital_electricity/ActivityInfo.qml b/src/activities/digital_electricity/ActivityInfo.qml
--- a/src/activities/digital_electricity/ActivityInfo.qml
+++ b/src/activities/digital_electricity/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Drag electrical components from the selector and drop them in the working area. In the working area, you can move the components by dragging them. To delete a component, select the deletion tool on top of the component selector, and select the component. You can click on the component and then on the rotate button to rotate it or info button to get information about it. You can click on the switch to open and close it. To connect two terminals, click on first terminal, then on second terminal. To deselect terminal or delete tool, click on any empty area. The simulation is updated in real time by any user action.")
credit: ""
- section: "experimental"
+ section: "sciences experiment"
createdInVersion: 9000
}
diff --git a/src/activities/drawletters/ActivityInfo.qml b/src/activities/drawletters/ActivityInfo.qml
--- a/src/activities/drawletters/ActivityInfo.qml
+++ b/src/activities/drawletters/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Draw the letter by connecting the dots in the correct order")
credit: ""
- section: "reading"
+ section: "reading letters"
createdInVersion: 7000
}
diff --git a/src/activities/explore_farm_animals/ActivityInfo.qml b/src/activities/explore_farm_animals/ActivityInfo.qml
--- a/src/activities/explore_farm_animals/ActivityInfo.qml
+++ b/src/activities/explore_farm_animals/ActivityInfo.qml
@@ -42,6 +42,6 @@
In level three, a random text prompt is displayed and you must click on the animal that matches the text. When you have matched all texts correctly, you win!
")
credit: ""
- section: "discovery sound_group"
+ section: "sciences experiment"
createdInVersion: 0
}
diff --git a/src/activities/explore_monuments/ActivityInfo.qml b/src/activities/explore_monuments/ActivityInfo.qml
--- a/src/activities/explore_monuments/ActivityInfo.qml
+++ b/src/activities/explore_monuments/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Click on the given keys to learn more of the monuments and then identify where the monuments is on the map by its name.")
credit: qsTr("Photos taken from Wikipedia.")
- section: "discovery"
+ section: "discovery arts"
createdInVersion: 6000
}
diff --git a/src/activities/explore_world_animals/ActivityInfo.qml b/src/activities/explore_world_animals/ActivityInfo.qml
--- a/src/activities/explore_world_animals/ActivityInfo.qml
+++ b/src/activities/explore_world_animals/ActivityInfo.qml
@@ -44,6 +44,6 @@
In level two, a random text prompt is displayed and you must click on the animal that matches the text. When you have matched all texts correctly, you win!
")
credit: ""
- section: "discovery miscellaneous"
+ section: "sciences experiment"
createdInVersion: 0
}
diff --git a/src/activities/explore_world_music/ActivityInfo.qml b/src/activities/explore_world_music/ActivityInfo.qml
--- a/src/activities/explore_world_music/ActivityInfo.qml
+++ b/src/activities/explore_world_music/ActivityInfo.qml
@@ -42,6 +42,6 @@
The third level is also a matching game. You must select the location that matches the text description on the screen. You win the level when you have correctly matched all text prompts.
")
credit: qsTr("Images from http://commons.wikimedia.org/wiki, http://archive.org")
- section: "discovery sound_group"
+ section: "discovery music"
createdInVersion: 0
}
diff --git a/src/activities/family/ActivityInfo.qml b/src/activities/family/ActivityInfo.qml
--- a/src/activities/family/ActivityInfo.qml
+++ b/src/activities/family/ActivityInfo.qml
@@ -37,6 +37,6 @@
"The circles are linked with lines to mark the relations. Married couples are marked with a ring on the link.\n" +
"You are the person in the white circle. Select the name you should call the person in the orange circle.\n")
credit: ""
- section: "discovery"
+ section: "sciences history"
createdInVersion: 9000
}
diff --git a/src/activities/family_find_relative/ActivityInfo.qml b/src/activities/family_find_relative/ActivityInfo.qml
--- a/src/activities/family_find_relative/ActivityInfo.qml
+++ b/src/activities/family_find_relative/ActivityInfo.qml
@@ -37,6 +37,6 @@
"The circles are linked with lines to mark the relations. Married couples are marked with a ring on the link.\n" +
"Click on a pair of family members which corresponds to the given relation.")
credit: ""
- section: "discovery"
+ section: "sciences history"
createdInVersion: 9000
}
diff --git a/src/activities/fifteen/ActivityInfo.qml b/src/activities/fifteen/ActivityInfo.qml
--- a/src/activities/fifteen/ActivityInfo.qml
+++ b/src/activities/fifteen/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Click or drag on any pieces that has a free block beside it, and it will be swapped with the empty one.")
credit: ""
- section: "puzzle"
+ section: "discovery logic"
createdInVersion: 0
}
diff --git a/src/activities/find_the_day/ActivityInfo.qml b/src/activities/find_the_day/ActivityInfo.qml
--- a/src/activities/find_the_day/ActivityInfo.qml
+++ b/src/activities/find_the_day/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Read the instructions and perform the requested calculation to find a date. Then select this date on the calendar.")
credit: ""
- section: "discovery"
+ section: "math measures"
createdInVersion: 9000
}
diff --git a/src/activities/geo-country/ActivityInfo.qml b/src/activities/geo-country/ActivityInfo.qml
--- a/src/activities/geo-country/ActivityInfo.qml
+++ b/src/activities/geo-country/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("Drag and drop different regions of the country to correct locations to redraw the whole country.")
credit: ""
- section: "discovery"
+ section: "sciences geography"
createdInVersion: 4000
}
diff --git a/src/activities/geography/ActivityInfo.qml b/src/activities/geography/ActivityInfo.qml
--- a/src/activities/geography/ActivityInfo.qml
+++ b/src/activities/geography/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("Drag and drop the map pieces to correct locations to redraw the whole map.")
credit: ""
- section: "discovery"
+ section: "sciences geography"
createdInVersion: 4000
}
diff --git a/src/activities/gletters/ActivityInfo.qml b/src/activities/gletters/ActivityInfo.qml
--- a/src/activities/gletters/ActivityInfo.qml
+++ b/src/activities/gletters/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Type the falling letters before they reach the ground")
credit: ""
- section: "computer keyboard reading"
+ section: "computer keyboard reading letters"
createdInVersion: 0
}
diff --git a/src/activities/gletters/resource/default-ml.json b/src/activities/gletters/resource/default-ml.json
new file mode 100644
--- /dev/null
+++ b/src/activities/gletters/resource/default-ml.json
@@ -0,0 +1,256 @@
+{
+ "levels" : [
+ {
+ "level" : "1",
+ "words" : [
+ "അ",
+ "ആ",
+ "ഇ",
+ "ഈ",
+ "ഉ",
+ "ഊ",
+ "ഋ"
+ ]
+ },
+ {
+ "level" : "2",
+ "words" : [
+ "എ",
+ "ഏ",
+ "ഐ",
+ "ഒ",
+ "ഓ",
+ "ഔ",
+ "അം",
+ "അഃ"
+ ]
+ },
+ {
+ "level" : "3",
+ "words" : [
+ "അ",
+ "ആ",
+ "ഇ",
+ "ഈ",
+ "ഉ",
+ "ഊ",
+ "ഋ",
+ "എ",
+ "ഏ",
+ "ഐ",
+ "ഒ",
+ "ഓ",
+ "ഔ",
+ "അം",
+ "അഃ"
+ ]
+ },
+ {
+ "level" : "4",
+ "words" : [
+ "ക",
+ "ഖ",
+ "ഗ",
+ "ഘ",
+ "ങ",
+ "ച",
+ "ഛ",
+ "ജ",
+ "ഝ",
+ "ഞ",
+ "ട",
+ "ഠ",
+ "ഡ",
+ "ഢ",
+ "ണ"
+ ]
+ },
+ {
+ "level" : "5",
+ "words" : [
+ "ട",
+ "ഠ",
+ "ഡ",
+ "ഢ",
+ "ണ",
+ "ത",
+ "ഥ",
+ "ദ",
+ "ധ",
+ "ന",
+ "പ",
+ "ഫ",
+ "ബ",
+ "ഭ",
+ "മ"
+ ]
+ },
+ {
+ "level" : "6",
+ "words" : [
+ "പ",
+ "ഫ",
+ "ബ",
+ "ഭ",
+ "മ",
+ "യ",
+ "ര",
+ "ല",
+ "വ",
+ "ശ",
+ "ഷ",
+ "സ",
+ "ഹ",
+ "ള",
+ "ഴ",
+ "റ"
+ ]
+ },
+ {
+ "level" : "7",
+ "words" : [
+ "യ",
+ "ര",
+ "ല",
+ "വ",
+ "ശ",
+ "ഷ",
+ "സ",
+ "ഹ",
+ "ള",
+ "ഴ",
+ "റ",
+ "ൻ",
+ "ൾ",
+ "ർ",
+ "ൺ",
+ "ൽ"
+ ]
+ },
+ {
+ "level" : "8",
+ "words" : [
+ "ക",
+ "ഖ",
+ "ഗ",
+ "ഘ",
+ "ങ",
+ "ച",
+ "ഛ",
+ "ജ",
+ "ഝ",
+ "ഞ",
+ "ട",
+ "ഠ",
+ "ഡ",
+ "ഢ",
+ "ണ",
+ "ത",
+ "ഥ",
+ "ദ",
+ "ധ",
+ "ന",
+ "പ",
+ "ഫ",
+ "ബ",
+ "ഭ",
+ "മ",
+ "യ",
+ "ര",
+ "ല",
+ "വ",
+ "ശ",
+ "ഷ",
+ "സ",
+ "ഹ",
+ "ള",
+ "ഴ",
+ "റ",
+ "ൻ",
+ "ൾ",
+ "ർ",
+ "ൺ",
+ "ൽ"
+ ]
+ },
+ {
+ "level" : "9",
+ "words" : [
+ "അ",
+ "ആ",
+ "ഇ",
+ "ഈ",
+ "ഉ",
+ "ഊ",
+ "ഋ",
+ "എ",
+ "ഏ",
+ "ഐ",
+ "ഒ",
+ "ഓ",
+ "ഔ",
+ "അം",
+ "അഃ",
+ "ക",
+ "ഖ",
+ "ഗ",
+ "ഘ",
+ "ങ",
+ "ച",
+ "ഛ",
+ "ജ",
+ "ഝ",
+ "ഞ",
+ "ട",
+ "ഠ",
+ "ഡ",
+ "ഢ",
+ "ണ",
+ "ത",
+ "ഥ",
+ "ദ",
+ "ധ",
+ "ന",
+ "പ",
+ "ഫ",
+ "ബ",
+ "ഭ",
+ "മ",
+ "യ",
+ "ര",
+ "ല",
+ "വ",
+ "ശ",
+ "ഷ",
+ "സ",
+ "ഹ",
+ "ള",
+ "ഴ",
+ "റ",
+ "ൻ",
+ "ൾ",
+ "ർ",
+ "ൺ",
+ "ൽ"
+ ]
+ },
+ {
+ "level" : "10",
+ "words" : [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "0"
+ ]
+ }
+ ],
+ "name" : "default-ml",
+ "locale" : "ml",
+ "description" : "Malayalam"
+}
diff --git a/src/activities/gnumch-equality/ActivityInfo.qml b/src/activities/gnumch-equality/ActivityInfo.qml
--- a/src/activities/gnumch-equality/ActivityInfo.qml
+++ b/src/activities/gnumch-equality/ActivityInfo.qml
@@ -39,6 +39,6 @@
"
" +
qsTr("Take care to avoid the Troggles.")
credit: ""
- section: "math"
+ section: "math arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/gnumch-factors/ActivityInfo.qml b/src/activities/gnumch-factors/ActivityInfo.qml
--- a/src/activities/gnumch-factors/ActivityInfo.qml
+++ b/src/activities/gnumch-factors/ActivityInfo.qml
@@ -17,7 +17,6 @@
*/
import GCompris 1.0
-// Must be updated once GnumchEquality is reviewed
ActivityInfo {
name: "gnumch-factors/GnumchFactors.qml"
difficulty: 5
@@ -40,6 +39,6 @@
"
" +
qsTr("Take care to avoid the Troggles.")
credit: ""
- section: "math"
+ section: "math arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/gnumch-primes/ActivityInfo.qml b/src/activities/gnumch-primes/ActivityInfo.qml
--- a/src/activities/gnumch-primes/ActivityInfo.qml
+++ b/src/activities/gnumch-primes/ActivityInfo.qml
@@ -17,7 +17,6 @@
*/
import GCompris 1.0
-// Must be updated once GnumchEquality is reviewed
ActivityInfo {
name: "gnumch-primes/GnumchPrimes.qml"
difficulty: 6
@@ -40,6 +39,6 @@
"
" +
qsTr("Take care to avoid the Troggles.")
credit: ""
- section: "math"
+ section: "math arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/graph-coloring/ActivityInfo.qml b/src/activities/graph-coloring/ActivityInfo.qml
--- a/src/activities/graph-coloring/ActivityInfo.qml
+++ b/src/activities/graph-coloring/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: ""
credit: ""
- section: "math"
+ section: "discovery logic"
createdInVersion: 6000
}
diff --git a/src/activities/guesscount/ActivityInfo.qml b/src/activities/guesscount/ActivityInfo.qml
--- a/src/activities/guesscount/ActivityInfo.qml
+++ b/src/activities/guesscount/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("Drag the appropriate numbers and the operators to the boxes to obtain the number to guess in the instruction.")
credit: ""
- section: "math"
+ section: "math arithmetic"
createdInVersion: 8000
}
diff --git a/src/activities/hangman/ActivityInfo.qml b/src/activities/hangman/ActivityInfo.qml
--- a/src/activities/hangman/ActivityInfo.qml
+++ b/src/activities/hangman/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You can enter the letters using the virtual keyboard on the screen or with the real keyboard.")
credit: ""
- section: "keyboard reading"
+ section: "keyboard reading words"
createdInVersion: 5000
}
diff --git a/src/activities/hanoi/ActivityInfo.qml b/src/activities/hanoi/ActivityInfo.qml
--- a/src/activities/hanoi/ActivityInfo.qml
+++ b/src/activities/hanoi/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Drag and Drop one top piece at a time, from one peg to another, to reproduce the tower on the right in the empty space on the left.")
credit: qsTr("Concept taken from EPI games.")
- section: "puzzle"
+ section: "discovery logic"
createdInVersion: 4000
}
diff --git a/src/activities/hanoi_real/ActivityInfo.qml b/src/activities/hanoi_real/ActivityInfo.qml
--- a/src/activities/hanoi_real/ActivityInfo.qml
+++ b/src/activities/hanoi_real/ActivityInfo.qml
@@ -38,6 +38,6 @@
//: Help manual
manual: qsTr("Drag and drop the top pieces only from one peg to another, to reproduce the initial left side tower on the right peg.")
credit: qsTr("The puzzle was invented by the French mathematician Edouard Lucas in 1883. There is a legend about a Hindu temple whose priests were constantly engaged in moving a set of 64 discs according to the rules of the Tower of Hanoi puzzle. According to the legend, the world would end when the priests finished their work. The puzzle is therefore also known as the Tower of Brahma puzzle. It is not clear whether Lucas invented this legend or was inspired by it. (source Wikipedia: http://en.wikipedia.org/wiki/Tower_of_hanoi)")
- section: "puzzle"
+ section: "discovery logic"
createdInVersion: 4000
}
diff --git a/src/activities/imagename/ActivityInfo.qml b/src/activities/imagename/ActivityInfo.qml
--- a/src/activities/imagename/ActivityInfo.qml
+++ b/src/activities/imagename/ActivityInfo.qml
@@ -37,6 +37,6 @@
prerequisite: qsTr("Reading")
//: Help manual
manual: qsTr("Drag each image from the (vertical) box on the left to its (corresponding) name on the right. Click the OK button to check your answer.")
- section: "reading"
+ section: "reading words"
createdInVersion: 4000
}
diff --git a/src/activities/intro_gravity/ActivityInfo.qml b/src/activities/intro_gravity/ActivityInfo.qml
--- a/src/activities/intro_gravity/ActivityInfo.qml
+++ b/src/activities/intro_gravity/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Follow the instructions when you run the activity.")
credit: ""
- section: "experiment"
+ section: "sciences experiment"
createdInVersion: 4000
}
diff --git a/src/activities/land_safe/ActivityInfo.qml b/src/activities/land_safe/ActivityInfo.qml
--- a/src/activities/land_safe/ActivityInfo.qml
+++ b/src/activities/land_safe/ActivityInfo.qml
@@ -43,7 +43,7 @@
The landing platform is green if your speed is fine for a safe landing.")
credit: ""
- section: "experiment"
+ section: "sciences experiment"
enabled: ApplicationInfo.isBox2DInstalled //ApplicationInfo.hasShader
createdInVersion: 6000
}
diff --git a/src/activities/lang/ActivityInfo.qml b/src/activities/lang/ActivityInfo.qml
--- a/src/activities/lang/ActivityInfo.qml
+++ b/src/activities/lang/ActivityInfo.qml
@@ -43,6 +43,6 @@
+ "When done, you are suggested an exercise in which, given the voice, "
+ "you must find the right word. In the configuration, you can select the language you want to learn.")
credit: qsTr("The images and voices come from the Art4Apps project: http://www.art4apps.org/.")
- section: "reading"
+ section: "reading vocabulary"
createdInVersion: 5000
}
diff --git a/src/activities/lang/resource/content-be.json b/src/activities/lang/resource/content-be.json
--- a/src/activities/lang/resource/content-be.json
+++ b/src/activities/lang/resource/content-be.json
@@ -464,4 +464,4 @@
"wrist.ogg": "запясце",
"write.ogg": "пісаць",
"zoo.ogg": "заапарк"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-br.json b/src/activities/lang/resource/content-br.json
--- a/src/activities/lang/resource/content-br.json
+++ b/src/activities/lang/resource/content-br.json
@@ -3,7 +3,7 @@
"11.ogg": "unnek",
"12.ogg": "daouzek",
"16.ogg": "c'hwezek",
- "U0030.ogg": "zero",
+ "U0030.ogg": "mann",
"U0031.ogg": "unan",
"U0032.ogg": "daou",
"U0033.ogg": "tri",
@@ -18,13 +18,13 @@
"acorn.ogg": "ur vezenn",
"actor.ogg": "un aktour",
"air_horn.ogg": "ur c'horn",
- "alarmclock.ogg": "ur munuter",
+ "alarmclock.ogg": "un dihuner",
"alligator.ogg": "un aligator",
"alphabet.ogg": "ul lizherenneg",
"anchor.ogg": "un eor",
"angel.ogg": "un ael",
"angry.ogg": "kounnaret",
- "animal.ogg": "ul loen",
+ "animal.ogg": "loened ",
"ankle.ogg": "an ibil-troad",
"ant.ogg": "ur verienenn",
"anteater.ogg": "ur merionaer",
@@ -32,19 +32,19 @@
"apple.ogg": "un aval",
"apple_tree.ogg": "ur wezenn avaloù",
"appliance.ogg": "un ardivink",
- "apricot.ogg": "un abrikezenn",
+ "apricot.ogg": "abrikez",
"arm.ogg": "ar vrec'h",
"armchair.ogg": "ur gador-vrec'h",
- "artichoke.ogg": "un artichaodenn",
+ "artichoke.ogg": "artichaod",
"artist.ogg": "un arzour",
- "asparagus.ogg": "un asperjezenn",
+ "asparagus.ogg": "asperjez",
"astronaut.ogg": "un egoraer",
"athlete.ogg": "ur sportour",
- "avocado.ogg": "un avoukezenn",
+ "avocado.ogg": "avoukez",
"ax.ogg": "ur vouc'hal",
"baby_bottle.ogg": "ur vured",
"back.ogg": "ar c'hein",
- "badge.ogg": "ur badj",
+ "badge.ogg": "ur vedalenn",
"bag.ogg": "ur sac'h",
"bait.ogg": "ur vouedenn",
"balance.ogg": "ur valañs",
@@ -62,7 +62,7 @@
"bathing_suit.ogg": "ur sae gouronkañ",
"bay.ogg": "un hugenn",
"beach.ogg": "un draezhenn",
- "bean.ogg": "ur favenn",
+ "bean.ogg": "fav",
"bear.ogg": "un arzh",
"beard.ogg": "ar barv",
"beat.ogg": "skeiñ",
@@ -78,7 +78,7 @@
"bench.ogg": "ur bank",
"bib.ogg": "un divabouzouer",
"big.ogg": "bras",
- "big_top.ogg": "un uhelenn",
+ "big_top.ogg": "ur babell",
"bike.ogg": "ur velo",
"bird.ogg": "un evn",
"bit.ogg": "un tamm",
@@ -97,7 +97,7 @@
"board.ogg": "ur plankenn",
"boat.ogg": "ur vag",
"boil.ogg": "birviñ",
- "bolt.ogg": "ur prenn",
+ "bolt.ogg": "ur boulon",
"bomb.ogg": "ur vombezenn",
"bone.ogg": "un askorn",
"book.ogg": "ul levr",
@@ -126,7 +126,7 @@
"bud.ogg": "ur vroñsenn",
"buffalo.ogg": "ur bizon",
"bug.ogg": "un amprevan",
- "bulb.ogg": "ur glogorenn",
+ "bulb.ogg": "ur glogorenn dredan",
"bull.ogg": "un tarv",
"bump.ogg": "ur bos",
"bun.ogg": "bara dous",
@@ -137,16 +137,16 @@
"butterfly.ogg": "ur valafenn",
"button.ogg": "ur bouton",
"cabbage.ogg": "ur gaolenn",
- "cabin.ogg": "ur gabinenn",
+ "cabin.ogg": "ur gabanenn",
"cacao.ogg": "kakao",
"cactus.ogg": "ur gaktuzenn",
"cage.ogg": "ur gaoued",
"cake.ogg": "ur wastell",
"call.ogg": "gervel",
"camel.ogg": "ur c'hañval",
- "camera.ogg": "ur c'hamera",
+ "camera.ogg": "ur poltreder",
"camp.ogg": "ar c'hampiñ",
- "can.ogg": "ur boubellenn",
+ "can.ogg": "boestoù-mir",
"canary.ogg": "ur c'hanari",
"candle.ogg": "ur c'houlaouenn",
"candy.ogg": "ur madig",
@@ -154,8 +154,8 @@
"canoe.ogg": "ur c'hanoe",
"canon.ogg": "ur c'hanol",
"canyon.ogg": "ur c'hanion",
- "cap.ogg": "ur boned",
- "cape.ogg": "ur c'habell",
+ "cap.ogg": "ur gasketenn",
+ "cape.ogg": "ur c'hab",
"car.ogg": "ur c'harr",
"carafe.ogg": "ur garafenn",
"card.ogg": "ur gartenn",
@@ -164,7 +164,7 @@
"carpet.ogg": "un tapis",
"carrot.ogg": "ur garotezenn",
"cart.ogg": "ur garrigell",
- "cash.ogg": "pezhioù moneiz",
+ "cash.ogg": "arc'hant",
"castle.ogg": "ur c'hastell",
"cat.ogg": "ur c'hazh",
"cat_female.ogg": "ur gazhez",
@@ -172,11 +172,11 @@
"caterpillar.ogg": "ur viskoulenn",
"cauldron.ogg": "ur chaodouron",
"cauliflower.ogg": "ur gaolenn-fleur",
- "cave.ogg": "ur c'hav",
+ "cave.ogg": "ur c'hroc'h",
"cavern.ogg": "ur vougev",
"celery.ogg": "un achenn",
"centipede.ogg": "ur mil-kraban",
- "cereal.ogg": "edaj",
+ "cereal.ogg": "ed",
"chain.ogg": "ur chadenn",
"chair.ogg": "ur gador",
"chalk.ogg": "krei",
@@ -184,9 +184,9 @@
"chandelier.ogg": "ur c'hantoller",
"chat.ogg": "flapiñ",
"cheek.ogg": "ur jod",
- "cheer.ogg": "strakal an daouarn",
+ "cheer.ogg": "youc'hal",
"cheese.ogg": "fourmaj",
- "chef.ogg": "ur chef",
+ "chef.ogg": "ur mestr-keginer",
"cherry.ogg": "kerez",
"chest.ogg": "ur c'hofr",
"chick.ogg": "ur pousin",
@@ -194,7 +194,7 @@
"child.ogg": "ur bugel",
"chimney.ogg": "ur siminal",
"chimp.ogg": "ur chimpanze",
- "chin.ogg": "un elgezh",
+ "chin.ogg": "an elgezh",
"chocolate.ogg": "chokolad",
"chop.ogg": "troc'hañ",
"chores.ogg": "labourioù an ti",
@@ -202,22 +202,22 @@
"cigar.ogg": "ur segalenn",
"circus.ogg": "ur sirk",
"city.ogg": "ur gêr",
- "clam.ogg": "ur bilorenn",
+ "clam.ogg": "ur c'hrogen Sant-Jakez",
"clap.ogg": "stlakal",
"class.ogg": "ur c'hlas",
- "claw.ogg": "skilf",
+ "claw.ogg": "ur skilf",
"clay.ogg": "pri",
"clean.ogg": "naetaat",
"cleaning_lady.ogg": "ur plac'h-ti",
- "cliff.ogg": "un tornaod",
+ "cliff.ogg": "un tarroz",
"climb.ogg": "pignat",
"clock.ogg": "un horolaj",
- "cloth.ogg": "dilhad",
- "clothes_hanger.ogg": "ur doug-dilhad",
+ "cloth.ogg": "gwiad",
+ "clothes_hanger.ogg": "un doug-dilhad",
"cloud.ogg": "ur goumoulenn",
"cloudy.ogg": "koumoulek",
"clover.ogg": "ur velchonenn",
- "clown.ogg": "furlukin",
+ "clown.ogg": "ur furlukin",
"coach.ogg": "ur gourdoner",
"coast.ogg": "un aod",
"coat.ogg": "ur vantell",
@@ -234,7 +234,7 @@
"cook.ogg": "keginañ",
"cookie.ogg": "kouign",
"cork.ogg": "ur stouv",
- "corn.ogg": "ed",
+ "corn.ogg": "maiz",
"couch.ogg": "ur gourvezvank",
"cough.ogg": "pasaat",
"couple.ogg": "ur c'houblad",
@@ -242,12 +242,12 @@
"cowboy.ogg": "ur c'howboy",
"crab.ogg": "ur c'hrank",
"cradle.ogg": "ur gwele-babig",
- "craft.ogg": "ur vicher",
+ "craft.ogg": "labour dorn",
"crawl.ogg": "skrampañ",
"crazy.ogg": "foll",
- "creek.ogg": "un ouf",
+ "creek.ogg": "ur stêrig",
"crepe.ogg": "ur grampouezhenn",
- "crib.ogg": "ur c'havell",
+ "crib.ogg": "kevell",
"croak.ogg": "koagal",
"crocodile.ogg": "ur c'hrokodil",
"cross.ogg": "ur groaz",
@@ -258,18 +258,18 @@
"cry.ogg": "leñvañ",
"crystal.ogg": "ur strinkenn",
"cube.ogg": "ur c'hub",
- "cucumber.ogg": "ur gokombrezenn",
- "curtain.ogg": "ur rideoz",
+ "cucumber.ogg": "kokombrez",
+ "curtain.ogg": "rideozioù",
"cut.ogg": "troc'hañ",
"cute.ogg": "moutig",
"dad.ogg": "un tad",
- "daffodil.ogg": "ur foeonenn",
+ "daffodil.ogg": "roz-kamm",
"daisy.ogg": "un tommheolig",
"dam.ogg": "ur stankell",
"dance.ogg": "dañsal",
"dandelion.ogg": "ur c'hwervizon",
"dart_board.ogg": "ur c'hoari biroùigoù",
- "date_fruit.ogg": "un datezenn",
+ "date_fruit.ogg": "datez",
"deer.ogg": "ur c'harv",
"den.ogg": "un douarenn",
"desert.ogg": "un dezerzh",
@@ -277,7 +277,7 @@
"dessert.ogg": "un dibenn-pred",
"diamond.ogg": "un diamant",
"dig.ogg": "kleuziañ",
- "dirt.ogg": "loustoni",
+ "dirt.ogg": "douar",
"dirty.ogg": "lous",
"dish.ogg": "ur plad",
"dishcloth.ogg": "un torch",
@@ -299,7 +299,7 @@
"drawer.ogg": "un diretenn",
"dream.ogg": "huñvreal",
"dress.ogg": "ur sae",
- "drink.ogg": "un evaj",
+ "drink.ogg": "evañ",
"drip.ogg": "un dakenn",
"drive.ogg": "bleniañ",
"drool.ogg": "babouzat",
@@ -311,7 +311,7 @@
"dwarf.ogg": "ur c'horr",
"eagle.ogg": "un erer",
"ear.ogg": "ur skouarn",
- "earth.ogg": "douar",
+ "earth.ogg": "an douar",
"eat.ogg": "debriñ",
"egg.ogg": "ur vi",
"eggplant.ogg": "ur verjinezenn",
@@ -337,13 +337,13 @@
"fat.ogg": "tev",
"faucet.ogg": "ur c'hog-dour",
"fawn.ogg": "ur menn-karv",
- "fear.ogg": "un aon",
+ "fear.ogg": "ar spont",
"feast.ogg": "ur fest",
"feather.ogg": "ur bluñvenn",
"feed.ogg": "magañ",
"femur.ogg": "gwerzhid ur vorzhed",
"fetch.ogg": "mont da gerc'hat",
- "fig.ogg": "ur figezenn",
+ "fig.ogg": "figez",
"fin.ogg": "un angell",
"find.ogg": "kavout",
"finger.ogg": "ur biz",
@@ -355,9 +355,9 @@
"fist.ogg": "un dorn",
"flacon.ogg": "ur flask",
"flag.ogg": "ur banniel",
- "flame.ogg": "flammenn",
+ "flame.ogg": "ur flammenn",
"flamingo.ogg": "ur flammeg",
- "flash.ogg": "ur gouloù godell",
+ "flash.ogg": "un etev tredan",
"flat.ogg": "ranntiez",
"flies.ogg": "kelien",
"float.ogg": "flotañ",
@@ -368,22 +368,22 @@
"fly.ogg": "nijal",
"foam.ogg": "spoum",
"foot.ogg": "un troad",
- "forest.ogg": "koadeg",
+ "forest.ogg": "ur c'hoad",
"fork.ogg": "ur fourchetezenn",
"fountain.ogg": "ur feunteun",
"fox.ogg": "ul louarn",
"freeze.ogg": "skornañ",
- "friend.ogg": "ur mignon",
+ "friend.ogg": "mignoned",
"fries.ogg": "fritez",
"frog.ogg": "ur ran",
"front.ogg": "dirak",
- "fruit.ogg": "ur frouezhenn",
- "fudge.ogg": "ur garamellenn",
+ "fruit.ogg": "frouezh",
+ "fudge.ogg": "karamell",
"full.ogg": "leun",
"fur.ogg": "ur feur",
"game.ogg": "ur c'hoari",
"garage.ogg": "ur c'harrdi",
- "garden.ogg": "liorzh",
+ "garden.ogg": "ul liorzh",
"garlic.ogg": "ur penn-kignen",
"gem.ogg": "ur maen-sked",
"giant.ogg": "ur ramz",
@@ -392,7 +392,7 @@
"girl.ogg": "ur plac'h",
"glass.ogg": "ur werenn",
"glasses.ogg": "ur re lunedoù",
- "glove.ogg": "ur vanegenn",
+ "glove.ogg": "manegoù",
"glue.ogg": "peg",
"gnome.ogg": "ur c'horrigan",
"goat.ogg": "ur c'havr",
@@ -403,7 +403,7 @@
"grain.ogg": "greun",
"grandmother.ogg": "ur vamm-gozh",
"grape.ogg": "rezin",
- "grapefruit.ogg": "ur bampelenn",
+ "grapefruit.ogg": "pampel",
"grass.ogg": "geot",
"grave.ogg": "ur bez",
"gray.ogg": "griz",
@@ -417,7 +417,7 @@
"gum.ogg": "gom-chaokat",
"hair.ogg": "blev",
"hair_dryer.ogg": "ur sec'her-blev",
- "half.ogg": "hanter",
+ "half.ogg": "an hanter",
"ham.ogg": "morzhed-hoc'h",
"hamburger.ogg": "un hamburger",
"hammer.ogg": "ur morzhol",
@@ -430,7 +430,7 @@
"hay.ogg": "foenn",
"head.ogg": "ur penn",
"hear.ogg": "klevout",
- "heat.ogg": "ur wrez",
+ "heat.ogg": "ar wrez",
"hedge.ogg": "ur c'harzh",
"hedgehog.ogg": "un avalaouer",
"heel.ogg": "ur seul",
@@ -448,7 +448,7 @@
"hole.ogg": "un toull",
"home.ogg": "ar gêr",
"hook.ogg": "ur c'hrog",
- "hop.ogg": "lammig",
+ "hop.ogg": "dilammat",
"horse.ogg": "ul loen-kezeg",
"hose.ogg": "ur gorzenn",
"hospital.ogg": "un ospital",
@@ -472,24 +472,24 @@
"ink.ogg": "ankr",
"island.ogg": "un enezenn",
"jacket.ogg": "ur porpant",
- "jaguar.ogg": "jagoar",
+ "jaguar.ogg": "ur jagoar",
"jam.ogg": "koñfitur",
"jay.ogg": "ur gegin",
"jelly.ogg": "kaotigell",
"jellyfish.ogg": "ur vorglaouenn",
"jewel.ogg": "ur bravig",
- "job.ogg": "ur vicher",
+ "job.ogg": "micherioù",
"jockey.ogg": "ur joke",
"jog.ogg": "trotadenn",
- "joy.ogg": "ur joa",
+ "joy.ogg": "plijadur",
"judge.ogg": "ur barner",
"judo.ogg": "judo",
- "juggler.ogg": "ur jangler",
+ "juggler.ogg": "ur janglerez",
"juice.ogg": "jug",
"jump.ogg": "lammat",
"kangaroo.ogg": "ur c'hangourou",
- "keel.ogg": "ur c'hein",
- "kernel.ogg": "un alamandezenn",
+ "keel.ogg": "kilhoù",
+ "kernel.ogg": "un maen",
"keyboard.ogg": "ur c'hlavier",
"kimono.ogg": "ur c'himono",
"king.ogg": "ur roue",
@@ -497,7 +497,7 @@
"kitchen.ogg": "ur gegin",
"kite.ogg": "ur sarpant-nij",
"kitten.ogg": "ur c'hazhig",
- "kiwi.ogg": "ur giwienn",
+ "kiwi.ogg": "kiwi",
"knee.ogg": "ur glin",
"kneel.ogg": "daoulinañ",
"knife.ogg": "ur gountell",
@@ -513,24 +513,24 @@
"lamb.ogg": "un oan",
"lamp.ogg": "ul lamp",
"land.ogg": "an douar",
- "lane.ogg": "un alez",
+ "lane.ogg": "un hent",
"lap.ogg": "ur varlenn",
"lasso.ogg": "ul lasso",
"laugh.ogg": "c'hoarzhin",
"lava.ogg": "maen teuz",
"lawn.ogg": "ul letonenn",
"lawyer.ogg": "un avokad",
- "leaf.ogg": "un delienn",
+ "leaf.ogg": "delioù",
"ledge.ogg": "ur rizenn",
"leek.ogg": "ur bourenn",
"left.ogg": "kleiz",
"leg.ogg": "ur c'har",
"lemon.ogg": "ur sitroñs",
- "lemonade.ogg": "dour pik-pik",
+ "lemonade.ogg": "dour-sitroñs",
"lemur.ogg": "ul lemur",
"leopard.ogg": "ul loupard",
"lettuce.ogg": "ur saladenn",
- "librarian.ogg": "ul levraoueger",
+ "librarian.ogg": "ul levraouegerez",
"lick.ogg": "lipat",
"lid.ogg": "ur golo",
"lift.ogg": "sevel",
@@ -539,14 +539,14 @@
"lightning.ogg": "ar c'hurun",
"lilac.ogg": "ul lireuenn",
"lime.ogg": "ur sitroñs glas",
- "line.ogg": "ul linenn",
+ "line.ogg": "linennoù",
"link.ogg": "ul liamm",
"lion.ogg": "ul leon",
"lion_cub.ogg": "ul leonig",
- "lip.ogg": "ur vuzell",
+ "lip.ogg": "muzelloù",
"liquid.ogg": "dourennek",
"lizard.ogg": "ur glazard",
- "lobster.ogg": "ur legestr",
+ "lobster.ogg": "ul legestr",
"log.ogg": "ur geuneudenn",
"look.ogg": "sellout",
"lunch.ogg": "merenn",
@@ -556,32 +556,32 @@
"magnifying_glass.ogg": "ur werenn-greskiñ",
"magpie.ogg": "ur big",
"mail.ogg": "ul lizher",
- "man.ogg": "tud",
+ "man.ogg": "ur gwaz",
"mane.ogg": "ur moue",
- "mango.ogg": "ur vangezenn",
+ "mango.ogg": "mangez",
"map.ogg": "ur gartenn",
"maple.ogg": "ur skavenn-wrac'h",
- "marble.ogg": "ur ganetenn",
+ "marble.ogg": "kanetennoù",
"mashed_potatoes.ogg": "yod patatez",
"mask.ogg": "ur maskl",
"mast.ogg": "ur wern",
"mat.ogg": "un tamm tapis",
- "match.ogg": "ur c'hrogad",
+ "match.ogg": "alumetez",
"mate.ogg": "ur c'hamalad",
"mattress.ogg": "ur vatarasenn",
"mauve.ogg": "limestra",
- "meal.ogg": "pred",
+ "meal.ogg": "ur pred",
"meat.ogg": "kig",
"mechanic.ogg": "ur mekaniker",
"medal.ogg": "ur vedalenn",
"meet.ogg": "kejañ",
- "melon.ogg": "ur meloñs",
+ "melon.ogg": "meloñs",
"merry-go-round.ogg": "ur manej",
"mice.ogg": "logod",
"microphone.ogg": "ur mikrofon",
"milk.ogg": "laezh",
"mill.ogg": "ur vilin",
- "mimosa.ogg": "ur wezenn-vimoza",
+ "mimosa.ogg": "mimoza",
"mirror.ogg": "ur melezour",
"mixer.ogg": "ur frikerez",
"mole.ogg": "ur c'hoz",
@@ -601,9 +601,9 @@
"mud.ogg": "fank",
"mug.ogg": "un tas bras",
"mule.ogg": "ur vulez",
- "muscle.ogg": "ur c'higenn",
+ "muscle.ogg": "kigennoù",
"mushroom.ogg": "ur c'habell-touseg",
- "music.ogg": "ur sonerezh",
+ "music.ogg": "sonerezh",
"musician.ogg": "ur soner",
"naked.ogg": "noazh",
"nap.ogg": "morgousket",
@@ -619,15 +619,15 @@
"nose.ogg": "ur fri",
"nostril.ogg": "ur fronell",
"notebook.ogg": "ur c'harned",
- "number.ogg": "un niver",
+ "number.ogg": "niveroù",
"nun.ogg": "ur seurez",
"nurse.ogg": "ur glañvdiourez",
"nurse_male.ogg": "ur c'hlañvdiour",
- "nut.ogg": "ur graoñenn",
- "oar.ogg": "ur roeñv",
+ "nut.ogg": "kakaouetez",
+ "oar.ogg": "roeñvioù",
"ocean.ogg": "ur meurvor",
"office.ogg": "un ofis",
- "olive.ogg": "un olivezenn",
+ "olive.ogg": "olivez",
"on.ogg": "war",
"onion.ogg": "ur penn-ognon",
"open.ogg": "digor",
@@ -642,16 +642,16 @@
"oyster.ogg": "un istrenn",
"pacifier.ogg": "ur chutenn",
"page.ogg": "ur bajenn",
- "pair.ogg": "ur c'houblad",
+ "pair.ogg": "ur re",
"pajamas.ogg": "ur pijama",
"pal.ogg": "ur c'homper",
"palm_tree.ogg": "ur wezenn-balm",
"pan.ogg": "ur baelon",
"panda.ogg": "ur panda",
"panther.ogg": "ur banterenn",
- "panties.ogg": "ur slip",
+ "panties.ogg": "brageier dindan",
"pants.ogg": "ur re vragoù",
- "papaya.ogg": "ur bapaiezenn",
+ "papaya.ogg": "bapaiez",
"paper.ogg": "paper",
"parachute.ogg": "un harz-lamm",
"parakeet.ogg": "ur c'hrakperoked",
@@ -659,11 +659,11 @@
"patch.ogg": "un dres",
"path.ogg": "ur wenojenn",
"paw.ogg": "ur pav",
- "pea.ogg": "ur bizenn",
- "peach.ogg": "ur bechenn",
+ "pea.ogg": "piz",
+ "peach.ogg": "pechez",
"peacock.ogg": "ur paun",
"peak.ogg": "ur c'hrec'h",
- "pear.ogg": "ur berenn",
+ "pear.ogg": "per",
"pearl.ogg": "ur berlezenn",
"peck.ogg": "beketa",
"pedal.ogg": "ur bedalenn",
@@ -674,15 +674,15 @@
"people.ogg": "tud",
"pepper.ogg": "pepr",
"peppers.ogg": "pebr-Spagn",
- "pet.ogg": "ul loen-ti",
+ "pet.ogg": "loened-ti",
"petal.ogg": "ur betalenn",
"phone.ogg": "ur pellgomzer",
"piano.ogg": "ur piano",
- "picture.ogg": "ur skeudenn",
+ "picture.ogg": "un daolenn",
"pie.ogg": "un dartezenn",
"pig.ogg": "ur pemoc'h",
"pigeon.ogg": "ur pichon",
- "pill.ogg": "ur bilulenn",
+ "pill.ogg": "pilulennoù",
"pillow.ogg": "ur goubenner",
"pilot.ogg": "un nijer",
"pine.ogg": "ur wezenn-bin",
@@ -695,27 +695,27 @@
"pizza.ogg": "ur pizza",
"plane.ogg": "ur c'harr-nij",
"planet.ogg": "ur blanedenn",
- "plant.ogg": "ur blantenn",
+ "plant.ogg": "plant",
"plate.ogg": "un asied",
"play.ogg": "c'hoari",
"pliers.ogg": "piñsetoù",
"plow.ogg": "arat",
- "plum.ogg": "ur brunenn",
+ "plum.ogg": "prun",
"plumber.ogg": "ur plomer",
"pocket.ogg": "ur c'hodell",
- "pod.ogg": "ur glorenn",
+ "pod.ogg": "klorennoù",
"pole.ogg": "ur peul",
"police.ogg": "un archer",
- "pompon.ogg": "ur bichourell",
+ "pompon.ogg": "pichourelloù",
"pond.ogg": "ur poull-dour",
"pony.ogg": "ur pone",
- "pool.ogg": "ur poull",
+ "pool.ogg": "ur poull-dour",
"popcorn.ogg": "popkorn",
"pope.ogg": "ur pab",
"porthole.ogg": "ul lomber",
- "post.ogg": "un ti-post",
+ "post.ogg": "boest al lizhiri",
"pot.ogg": "ur pod",
- "potato.ogg": "ur batatezenn",
+ "potato.ogg": "patatez",
"pounce.ogg": "lammat",
"president.ogg": "ur prezidant",
"pretty.ogg": "koant",
@@ -744,7 +744,7 @@
"radish.ogg": "un irvinenn ruz",
"raft.ogg": "ur radell",
"rag.ogg": "ur bilhenn",
- "rage.ogg": "ur gounnar",
+ "rage.ogg": "ar gounnar",
"rain.ogg": "glav",
"raincoat.ogg": "ur vantell c'hlav",
"rake.ogg": "ur rastell",
@@ -758,7 +758,7 @@
"reptile.ogg": "ur stlejvil",
"rhinoceros.ogg": "ur frikorneg",
"rice.ogg": "riz",
- "ride.ogg": "mont war varc'h",
+ "ride.ogg": "mont war velo",
"rifle.ogg": "ur fuzuilh",
"right.ogg": "dehoù",
"rip.ogg": "regiñ",
@@ -783,7 +783,7 @@
"run.ogg": "redek",
"sad.ogg": "trist",
"saddle.ogg": "un dibr",
- "sail.ogg": "ur ouel",
+ "sail.ogg": "bageal",
"sailor.ogg": "ur martolod",
"salamander.ogg": "ur sourd",
"salmon.ogg": "un eog",
@@ -810,9 +810,9 @@
"sea.ogg": "ar mor",
"seat.ogg": "ur sez",
"see.ogg": "gwelout",
- "seed.ogg": "un hadenn",
+ "seed.ogg": "had",
"shadow.ogg": "ur skeud",
- "shake.ogg": "krenañ",
+ "shake.ogg": "hejañ",
"shark.ogg": "ur rinkin",
"shave.ogg": "aotennañ",
"shed.ogg": "ur c'houdorenn",
@@ -826,36 +826,36 @@
"shop.ogg": "ur stal",
"shore.ogg": "un aod",
"short.ogg": "ur re vragoù berr",
- "shovel.ogg": "ur bal",
+ "shovel.ogg": "ur balig",
"shower.ogg": "ur strinkerez",
"shrimp.ogg": "ur chevrenn",
"shrub.ogg": "ur vrousgwezenn",
"shut.ogg": "serret",
- "shutter.ogg": "ur stalaf",
+ "shutter.ogg": "stalafioù",
"sick.ogg": "klañv",
"sidewalk.ogg": "ur riblenn",
- "sign.ogg": "ur skritell",
+ "sign.ogg": "skritelloù",
"sing.ogg": "kanañ",
"sink.ogg": "un dar",
"sip.ogg": "lapat",
"sister.ogg": "ur c'hoar",
"sit.ogg": "azezañ",
- "skate.ogg": "plankenn-ruilh",
+ "skate.ogg": "ur plankenn-ruilh",
"skeleton.ogg": "un eskeled",
"ski.ogg": "ski",
"skimmer.ogg": "ul loa-sil",
- "skin.ogg": "ur c'hroc'hen",
+ "skin.ogg": "ar c'hroc'hen",
"skirt.ogg": "ur vrozh",
"skunk.ogg": "ur pudask",
"sky.ogg": "an oabl",
- "slam.ogg": "stlakal",
+ "slam.ogg": "kas er baner",
"sled.ogg": "ul luj",
"sleep.ogg": "kousket",
"sleeve.ogg": "ur milgin",
"sleigh.ogg": "ur stlejell",
- "slide.ogg": "un diapozitiv",
+ "slide.ogg": "ur ruz-revr",
"slim.ogg": "moan",
- "slime.ogg": "ul lec'hid",
+ "slime.ogg": "glaour",
"slippers.ogg": "kofignonoù",
"slope.ogg": "un diribin",
"sloppy.ogg": "digempenn ",
@@ -879,68 +879,68 @@
"sock.ogg": "ul loer",
"soldier.ogg": "ur soudard",
"sole.ogg": "ul leizenn",
- "sole_shoe.ogg": "ur sol-votez",
+ "sole_shoe.ogg": "solioù-botez",
"son.ogg": "ur mab",
"soup.ogg": "soubenn",
- "spade.ogg": "ur rañv",
+ "spade.ogg": "ur bal",
"spaghetti.ogg": "spageti",
"spark.ogg": "ur fulenn",
"sparrow.ogg": "ur golvan",
"spatula.ogg": "ur spanell",
"speak.ogg": "komz",
"spear.ogg": "ur goaf",
- "spice.ogg": "spis",
+ "spice.ogg": "spisoù",
"spider.ogg": "ur gevnidenn",
"spider_web.ogg": "ur gwiad-kevnid",
"spike.ogg": "un draen",
"spill.ogg": "fuilhañ",
- "spinach.ogg": "ur binochezenn",
+ "spinach.ogg": "pinochez",
"spine.ogg": "ul livenn-gein",
"spinning_top.ogg": "un toumpi",
"splash.ogg": "strinkañ",
- "splatter.ogg": "strinkañ",
+ "splatter.ogg": "ur strinkadenn",
"sponge.ogg": "ur spoueenn",
"spool.ogg": "ur ganell",
"spoon.ogg": "ul loa",
"sport.ogg": "sport",
- "spot.ogg": "ur saotr",
- "spray.ogg": "glizhenniñ",
- "spread.ogg": "skignañ",
+ "spot.ogg": "pikoù",
+ "spray.ogg": "flistrañ",
+ "spread.ogg": "ledañ",
"spring.ogg": "lammat",
"spring_season.ogg": "an nevez-amzer",
"sprinkle.ogg": "poultrenniñ",
- "square.ogg": "ur c'harrez",
- "squash.ogg": "ur potiron",
+ "square.ogg": "karrez",
+ "squash.ogg": "koulourdrez",
"squat.ogg": "kluchañ",
"squid.ogg": "ur stivelleg",
"squirrel.ogg": "ur razh-koad",
- "squirt.ogg": "ur flistradenn",
+ "squirt.ogg": "ur flistrer",
"stack.ogg": "ur bern",
"stage.ogg": "ul leurenn",
"staircase.ogg": "derezioù",
"stamp.ogg": "un timbr",
- "stand.ogg": "ur stand",
+ "stand.ogg": "chom a-sav",
"star.ogg": "ur steredenn",
"stare.ogg": "parañ e selloù",
"starfish.ogg": "ur steredenn-vor",
- "steam.ogg": "ur c'hlizhenn",
+ "steam.ogg": "an aezhenn",
"steep.ogg": "sonn",
"steeple.ogg": "ur c'hloc'hdi",
- "stem.ogg": "ur c'hef ",
+ "stem.ogg": "ur gorzenn",
"step.ogg": "un derez",
- "stew.ogg": "ragoud",
+ "stew.ogg": "ur ragoud",
"stick.ogg": "ur vriñsenn",
"sting.ogg": "flemmañ",
"stinky.ogg": "flaerius",
"stitch.ogg": "gwriat",
"stomach.ogg": "ur stomok",
- "stone.ogg": "ur maen",
- "stop.ogg": "paouez",
+ "stone.ogg": "mein",
+ "stop.ogg": "herzel",
"store.ogg": "ur stal",
"stove.ogg": "ur geginerez",
"straight.ogg": "eeun",
"strainer.ogg": "ur sil",
- "straw.ogg": "plouz",
+ "straw.ogg": "plouzennoù",
"strawberry.ogg": "ur sivienn",
"stream.ogg": "ur red-dour",
"street.ogg": "ur straed",
@@ -963,14 +963,14 @@
"swim.ogg": "neuial",
"table.ogg": "un daol",
"tablecloth.ogg": "ul lienn-daol",
- "tadpole.ogg": "ur penndolog",
+ "tadpole.ogg": "penndologed",
"tag.ogg": "un diketenn",
"tail.ogg": "ul lost",
"tall.ogg": "bras",
"tape_measure.ogg": "ur metr-seizenn",
"taxi.ogg": "un taksi",
"teach.ogg": "kelenn",
- "teacher.ogg": "ur c'helenner",
+ "teacher.ogg": "ur gelennerez",
"tear.ogg": "drailhañ",
"teddy.ogg": "un nanarzh",
"teeth.ogg": "an dent",
@@ -991,7 +991,7 @@
"ticket.ogg": "un tiked",
"tiger.ogg": "un tigr",
"time.ogg": "an amzer",
- "tin.ogg": "ur vouest-mir",
+ "tin.ogg": "ur bok",
"tire.ogg": "ur pneu",
"tired.ogg": "skuizh",
"tissue.ogg": "paper-torch",
@@ -1003,9 +1003,9 @@
"tomatoe.ogg": "un domatezenn",
"tongs.ogg": "ur wask",
"tongue.ogg": "un teod",
- "tool.ogg": "ur beñveg",
+ "tool.ogg": "benvegoù",
"top.ogg": "al lein",
- "torch.ogg": "un flammerenn",
+ "torch.ogg": "ur flammerenn",
"touch.ogg": "touchañ",
"towel.ogg": "ur serviedenn",
"toy.ogg": "ur c'hoariell",
@@ -1014,15 +1014,15 @@
"train_station.ogg": "ur porzh-houarn",
"trap.ogg": "un trap",
"trash.ogg": "al lastez",
- "tray.ogg": "ur pladenn",
- "treat.ogg": "chervad",
+ "tray.ogg": "ur bladenn",
+ "treat.ogg": "madigoù",
"tree.ogg": "ur wezenn",
"triangle.ogg": "un tric'horn",
"tribe.ogg": "ur meuriad",
"trip.ogg": "ur veaj",
"truck.ogg": "ur c'harr-samm",
- "tube.ogg": "un duellenn",
- "tulip.ogg": "un dulipezenn",
+ "tube.ogg": "ruz-muzelloù",
+ "tulip.ogg": "tulipez",
"tune.ogg": "un ton",
"turkey.ogg": "ur yar indez",
"turnip.ogg": "un irvinenn",
@@ -1034,20 +1034,20 @@
"under.ogg": "dindan",
"uniform.ogg": "ul lifre",
"van.ogg": "ur sammorell",
- "vapor.ogg": "un aezhenn",
+ "vapor.ogg": "aezhenn",
"vase.ogg": "ul lestr",
"vegetable.ogg": "legumaj",
- "vein.ogg": "ur wazhienn",
+ "vein.ogg": "gwazhied",
"verdure.ogg": "glasvez",
"vest.ogg": "ur chupenn",
"vet.ogg": "ur mezeg loened",
"viper.ogg": "ur wiber",
"vowel.ogg": "ur vogalenn",
"vulture.ogg": "ur gup",
- "wag.ogg": "meskañ",
+ "wag.ogg": "fistoulat",
"walk.ogg": "bale",
"wall.ogg": "ur voger",
- "walnut.ogg": "ur graonenn",
+ "walnut.ogg": "kraoñ",
"wart.ogg": "ur wenaenn",
"wash.ogg": "gwalc'hiñ",
"wasp.ogg": "ur wespedenn",
@@ -1068,7 +1068,7 @@
"wife.ogg": "ur wreg",
"wig.ogg": "ur berukenn",
"win.ogg": "gounit",
- "wind.ogg": "an avel",
+ "wind.ogg": "avel",
"window.ogg": "ur prenestr",
"window_glass.ogg": "ur werenn-brenestr",
"wing.ogg": "un askell",
@@ -1079,14 +1079,14 @@
"word.ogg": "ur ger",
"worker.ogg": "ul labourer",
"world.ogg": "ar bed",
- "wreath.ogg": "ur garlantezenn",
+ "wreath.ogg": "ur gurunenn",
"wrench.ogg": "ur gwask",
"wrist.ogg": "un arzorn",
"write.ogg": "skrivañ",
"yellow.ogg": "melen",
"yogurt.ogg": "ur yaourt",
- "yum.ogg": "nenam",
+ "yum.ogg": "menam",
"zebra.ogg": "ur roudenneg",
"zipper.ogg": "ur serr-prim",
"zoo.ogg": "ur zoo"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-ca.json b/src/activities/lang/resource/content-ca.json
--- a/src/activities/lang/resource/content-ca.json
+++ b/src/activities/lang/resource/content-ca.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "cremallera",
"zoo.ogg": "zoològic"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-ca@valencia.json b/src/activities/lang/resource/content-ca@valencia.json
--- a/src/activities/lang/resource/content-ca@valencia.json
+++ b/src/activities/lang/resource/content-ca@valencia.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "cremallera",
"zoo.ogg": "zoològic"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-cs.json b/src/activities/lang/resource/content-cs.json
deleted file mode 100644
--- a/src/activities/lang/resource/content-cs.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "alphabet.ogg": "abeceda",
- "angel.ogg": "anděl"
-}
\ No newline at end of file
diff --git a/src/activities/lang/resource/content-de.json b/src/activities/lang/resource/content-de.json
--- a/src/activities/lang/resource/content-de.json
+++ b/src/activities/lang/resource/content-de.json
@@ -1073,4 +1073,4 @@
"zebra.ogg": "das Zebra",
"zipper.ogg": "der Reißverschluss",
"zoo.ogg": "der Zoo"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-el.json b/src/activities/lang/resource/content-el.json
--- a/src/activities/lang/resource/content-el.json
+++ b/src/activities/lang/resource/content-el.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "ζέβρα",
"zipper.ogg": "φερμουάρ",
"zoo.ogg": "ζωολογικός κήπος"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-en_GB.json b/src/activities/lang/resource/content-en_GB.json
--- a/src/activities/lang/resource/content-en_GB.json
+++ b/src/activities/lang/resource/content-en_GB.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "zipper",
"zoo.ogg": "zoo"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-es.json b/src/activities/lang/resource/content-es.json
--- a/src/activities/lang/resource/content-es.json
+++ b/src/activities/lang/resource/content-es.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "cebra",
"zipper.ogg": "cremallera",
"zoo.ogg": "zoológico"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-fr.json b/src/activities/lang/resource/content-fr.json
--- a/src/activities/lang/resource/content-fr.json
+++ b/src/activities/lang/resource/content-fr.json
@@ -1076,4 +1076,4 @@
"zebra.ogg": "un zèbre",
"zipper.ogg": "une fermeture éclair",
"zoo.ogg": "un zoo"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-ga.json b/src/activities/lang/resource/content-ga.json
--- a/src/activities/lang/resource/content-ga.json
+++ b/src/activities/lang/resource/content-ga.json
@@ -1080,4 +1080,4 @@
"zebra.ogg": "séabra",
"zipper.ogg": "zip",
"zoo.ogg": "zú"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-gd.json b/src/activities/lang/resource/content-gd.json
--- a/src/activities/lang/resource/content-gd.json
+++ b/src/activities/lang/resource/content-gd.json
@@ -561,4 +561,4 @@
"write.ogg": "a' sgrìobhadh",
"yum.ogg": "blasta",
"zoo.ogg": "sutha beag"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-gl.json b/src/activities/lang/resource/content-gl.json
--- a/src/activities/lang/resource/content-gl.json
+++ b/src/activities/lang/resource/content-gl.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "cebra",
"zipper.ogg": "cremalleira",
"zoo.ogg": "zoo"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-hu.json b/src/activities/lang/resource/content-hu.json
--- a/src/activities/lang/resource/content-hu.json
+++ b/src/activities/lang/resource/content-hu.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "cipzár",
"zoo.ogg": "állatkert"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-id.json b/src/activities/lang/resource/content-id.json
--- a/src/activities/lang/resource/content-id.json
+++ b/src/activities/lang/resource/content-id.json
@@ -558,7 +558,7 @@
"melon.ogg": "melon",
"merry-go-round.ogg": "komedi putar",
"mice.ogg": "tikus",
- "microphone.ogg": "mikropon",
+ "microphone.ogg": "mikrofon",
"milk.ogg": "susu",
"mirror.ogg": "cermin",
"mixer.ogg": "alat pengaduk listrik",
@@ -1049,4 +1049,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "ritsleting",
"zoo.ogg": "kebun binatang"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-it.json b/src/activities/lang/resource/content-it.json
--- a/src/activities/lang/resource/content-it.json
+++ b/src/activities/lang/resource/content-it.json
@@ -13,447 +13,1080 @@
"U0037.ogg": "sette",
"U0038.ogg": "otto",
"U0039.ogg": "nove",
- "alligator.ogg": "l'alligatore",
- "anchor.ogg": "l'ancora",
- "animal.ogg": "gli animali",
- "athlete.ogg": "l'atleta",
- "back.ogg": "la schiena",
- "badge.ogg": "la medaglia",
- "bag.ogg": "lo zaino",
- "balance.ogg": "la bilancia",
- "ball.ogg": "la palla",
- "ballet.ogg": "il balletto",
- "bank.ogg": "la banca",
+ "accountant.ogg": "contabile",
+ "ache.ogg": "dolore",
+ "acorn.ogg": "ghianda",
+ "actor.ogg": "attore",
+ "air_horn.ogg": "tromba",
+ "alarmclock.ogg": "sveglia",
+ "alligator.ogg": "alligatore",
+ "alphabet.ogg": "alfabeto",
+ "anchor.ogg": "ancora",
+ "angel.ogg": "angelo",
+ "angry.ogg": "furiosa",
+ "animal.ogg": "animale",
+ "ankle.ogg": "caviglia",
+ "ant.ogg": "formica",
+ "anteater.ogg": "formichiere",
+ "antelope.ogg": "antilope",
+ "apple.ogg": "mela",
+ "apple_tree.ogg": "melo",
+ "appliance.ogg": "elettrodomestico",
+ "apricot.ogg": "albicocca",
+ "arm.ogg": "braccio",
+ "armchair.ogg": "poltrona",
+ "artichoke.ogg": "carciofo",
+ "artist.ogg": "artista",
+ "asparagus.ogg": "asparago",
+ "astronaut.ogg": "astronauta",
+ "athlete.ogg": "atleta",
+ "avocado.ogg": "avocado",
+ "ax.ogg": "ascia",
+ "baby_bottle.ogg": "biberon",
+ "back.ogg": "schiena",
+ "badge.ogg": "medaglia",
+ "bag.ogg": "zaino",
+ "bait.ogg": "esca",
+ "balance.ogg": "bilancia",
+ "bald.ogg": "calvo",
+ "ball.ogg": "palla",
+ "ball_of_yarn.ogg": "gomitolo",
+ "ball_soccer.ogg": "pallone da calcio",
+ "ballet.ogg": "balletto",
+ "bank.ogg": "banca",
+ "banker_female.ogg": "bancaria",
"bark.ogg": "abbaiare",
- "barn.ogg": "il fienile",
- "bat.ogg": "il pipistrello",
- "bath.ogg": "la vasca da bagno",
- "bay.ogg": "la baia",
- "beach.ogg": "la spiaggia",
- "bed.ogg": "il letto",
- "bee.ogg": "l'ape",
- "beetle.ogg": "lo scarabeo",
+ "barn.ogg": "fienile",
+ "bat.ogg": "pipistrello",
+ "bath.ogg": "vasca",
+ "bathing_suit.ogg": "costume",
+ "bay.ogg": "baia",
+ "beach.ogg": "spiaggia",
+ "bean.ogg": "fagioli",
+ "bear.ogg": "orso",
+ "beard.ogg": "barba",
+ "beat.ogg": "picchiare",
+ "beaver.ogg": "castoro",
+ "bed.ogg": "letto",
+ "bedroom.ogg": "stanza da letto",
+ "bee.ogg": "ape",
+ "beetle.ogg": "scarabeo",
"beg.ogg": "pregare",
- "bench.ogg": "la panchina",
- "bib.ogg": "il bavaglino",
- "bike.ogg": "la bicicletta",
- "bird.ogg": "l'uccello",
- "bit.ogg": "il bocconcino",
+ "behind.ogg": "dietro",
+ "bell.ogg": "campana",
+ "belly.ogg": "pancia",
+ "bench.ogg": "panchina",
+ "bib.ogg": "bavaglino",
+ "big.ogg": "grande",
+ "big_top.ogg": "tendone",
+ "bike.ogg": "bicicletta",
+ "bird.ogg": "uccello",
+ "bit.ogg": "morso",
"bite.ogg": "mordere",
"black.ogg": "nero",
- "block.ogg": "il cubo",
+ "blackberry.ogg": "mora",
+ "blackbird.ogg": "merlo",
+ "blade.ogg": "lama",
+ "blind.ogg": "cieco",
+ "blink.ogg": "ammiccare",
+ "block.ogg": "cubo",
+ "blond.ogg": "biondo",
"blue.ogg": "blu",
- "board.ogg": "il cartello",
- "boat.ogg": "la barca",
+ "blueberry.ogg": "mirtillo",
+ "blush.ogg": "arrossita",
+ "board.ogg": "cartello",
+ "boat.ogg": "barca",
"boil.ogg": "bollire",
- "bomb.ogg": "la bomba",
- "bone.ogg": "l'osso",
- "book.ogg": "il libro",
- "box.ogg": "la scatola",
- "boy.ogg": "il ragazzo",
- "braid.ogg": "la treccia",
- "brain.ogg": "il cervello",
- "branch.ogg": "il ramo",
- "bread.ogg": "il pane",
- "brick.ogg": "i mattoni",
- "bride.ogg": "la sposa",
- "bridge.ogg": "il ponte",
- "brother.ogg": "il fratello",
+ "bolt.ogg": "bullone",
+ "bomb.ogg": "bomba",
+ "bone.ogg": "osso",
+ "book.ogg": "libro",
+ "bookcase.ogg": "libreria",
+ "bottom.ogg": "sedere",
+ "box.ogg": "scatola",
+ "boxer.ogg": "pugile",
+ "boy.ogg": "ragazzo",
+ "braid.ogg": "treccia",
+ "brain.ogg": "cervello",
+ "branch.ogg": "ramo",
+ "bread.ogg": "pane",
+ "break.ogg": "rompere",
+ "breast.ogg": "seno",
+ "brick.ogg": "mattoni",
+ "bricklayer.ogg": "muratore",
+ "bride.ogg": "sposa",
+ "bridge.ogg": "ponte",
+ "bright.ogg": "luminoso",
+ "broccoli.ogg": "broccoli",
+ "brother.ogg": "fratello",
"brown.ogg": "marrone",
- "brush.ogg": "il pennello",
- "bud.ogg": "la gemma",
- "bug.ogg": "l'insetto",
- "bump.ogg": "il bernoccolo",
- "bun.ogg": "il panino",
- "bush.ogg": "il cespuglio",
- "cage.ogg": "la gabbia",
- "cake.ogg": "il dolce",
+ "brush.ogg": "pennello",
+ "bubble.ogg": "bolla",
+ "bucket.ogg": "secchio",
+ "bud.ogg": "germoglio",
+ "buffalo.ogg": "bufalo",
+ "bug.ogg": "insetto",
+ "bulb.ogg": "lampadina",
+ "bull.ogg": "toro",
+ "bump.ogg": "bernoccolo",
+ "bun.ogg": "panino",
+ "bus.ogg": "autobus",
+ "bush.ogg": "cespuglio",
+ "butcher.ogg": "macellaio",
+ "butter.ogg": "burro",
+ "butterfly.ogg": "farfalla",
+ "button.ogg": "bottone",
+ "cabbage.ogg": "cavolo",
+ "cabin.ogg": "baita",
+ "cacao.ogg": "cacao",
+ "cactus.ogg": "cactus",
+ "cage.ogg": "gabbia",
+ "cake.ogg": "dolce",
"call.ogg": "chiamare",
- "camel.ogg": "il cammello",
- "can.ogg": "i barattoli",
- "candle.ogg": "la candela",
- "candy.ogg": "la caramella",
- "cane.ogg": "il bastone",
- "canoe.ogg": "la canoa",
- "cap.ogg": "il cappellino",
- "cape.ogg": "il mantello",
- "car.ogg": "l'automobile",
- "card.ogg": "la cartolina",
- "carrot.ogg": "la carota",
- "cart.ogg": "il carrello",
- "cash.ogg": "i soldi",
- "castle.ogg": "il castello",
- "cat.ogg": "il gatto",
+ "camel.ogg": "cammello",
+ "camera.ogg": "fotocamera",
+ "camp.ogg": "accampamento",
+ "can.ogg": "barattolo",
+ "canary.ogg": "canarino",
+ "candle.ogg": "candela",
+ "candy.ogg": "caramella",
+ "cane.ogg": "bastone",
+ "canoe.ogg": "canoa",
+ "canon.ogg": "cannone",
+ "canyon.ogg": "canyon",
+ "cap.ogg": "cappellino",
+ "cape.ogg": "cappa",
+ "car.ogg": "automobile",
+ "carafe.ogg": "caraffa",
+ "card.ogg": "cartolina",
+ "carnival.ogg": "carnevale",
+ "carpenter.ogg": "carpentiere",
+ "carpet.ogg": "tappeto",
+ "carrot.ogg": "carota",
+ "cart.ogg": "carrello",
+ "cash.ogg": "soldi",
+ "castle.ogg": "castello",
+ "cat.ogg": "gatto",
+ "cat_female.ogg": "gatta",
"catch.ogg": "pescare",
- "cave.ogg": "la grotta",
- "centipede.ogg": "il centipede",
- "chair.ogg": "la sedia",
- "chalk.ogg": "il gesso",
+ "caterpillar.ogg": "bruco",
+ "cauldron.ogg": "calderone",
+ "cauliflower.ogg": "cavolfiore",
+ "cave.ogg": "grotta",
+ "cavern.ogg": "caverna",
+ "celery.ogg": "sedano",
+ "centipede.ogg": "millepiedi",
+ "cereal.ogg": "cereale",
+ "chain.ogg": "catena",
+ "chair.ogg": "sedia",
+ "chalk.ogg": "gesso",
+ "chameleon.ogg": "camaleonte",
+ "chandelier.ogg": "candeliere",
"chat.ogg": "bisbigliare",
- "cheese.ogg": "il formaggio",
- "cherry.ogg": "le ciliegie",
- "chest.ogg": "il forziere",
- "chick.ogg": "il pulcino",
- "chicken.ogg": "la gallina",
- "child.ogg": "il bambino",
- "chimp.ogg": "la scimmia",
- "chin.ogg": "il mento",
- "chocolate.ogg": "il cioccolato",
+ "cheek.ogg": "guancia",
+ "cheer.ogg": "incitamento",
+ "cheese.ogg": "formaggio",
+ "chef.ogg": "cuoco",
+ "cherry.ogg": "ciliegia",
+ "chest.ogg": "baule",
+ "chick.ogg": "pulcino",
+ "chicken.ogg": "gallina",
+ "child.ogg": "bambino",
+ "chimney.ogg": "comignolo",
+ "chimp.ogg": "scimpanzé",
+ "chin.ogg": "mento",
+ "chocolate.ogg": "cioccolato",
"chop.ogg": "affettare",
- "clam.ogg": "la conchiglia",
- "class.ogg": "i compiti",
- "claw.ogg": "gli artigli",
- "clay.ogg": "l'argilla",
- "cliff.ogg": "il burrone",
- "clock.ogg": "la sveglia",
- "cloth.ogg": "il tessuto",
- "cloud.ogg": "la nuvola",
- "clown.ogg": "il pagliaccio",
- "coach.ogg": "l'allenatrice",
- "coat.ogg": "il cappotto",
- "coin.ogg": "le monete",
- "comb.ogg": "il pettine",
+ "chores.ogg": "faccende domestiche",
+ "christmas.ogg": "natale",
+ "cigar.ogg": "sigaro",
+ "circus.ogg": "circo",
+ "city.ogg": "città",
+ "clam.ogg": "conchiglia",
+ "clap.ogg": "battere le mani",
+ "class.ogg": "lezione",
+ "claw.ogg": "artiglio",
+ "clay.ogg": "argilla",
+ "clean.ogg": "pulire",
+ "cleaning_lady.ogg": "donna delle pulizie",
+ "cliff.ogg": "burrone",
+ "climb.ogg": "scalata",
+ "clock.ogg": "orologio",
+ "cloth.ogg": "tessuto",
+ "clothes_hanger.ogg": "gruccia",
+ "cloud.ogg": "nuvola",
+ "cloudy.ogg": "nuvoloso",
+ "clover.ogg": "quadrifoglio",
+ "clown.ogg": "pagliaccio",
+ "coach.ogg": "allenatrice",
+ "coast.ogg": "costa",
+ "coat.ogg": "cappotto",
+ "cobra.ogg": "cobra",
+ "coconut.ogg": "noce di cocco",
+ "cod.ogg": "merluzzo",
+ "coffee.ogg": "caffè",
+ "coin.ogg": "monete",
+ "cold.ogg": "freddo",
+ "color.ogg": "colore",
+ "colt.ogg": "puledro",
+ "comb.ogg": "pettine",
+ "cone.ogg": "cono",
"cook.ogg": "cucinare",
- "cookie.ogg": "i biscotti",
- "corn.ogg": "la pannocchia",
- "couch.ogg": "il divano",
- "cow.ogg": "la mucca",
- "cowboy.ogg": "il cowboy",
- "crab.ogg": "il granchio",
+ "cookie.ogg": "biscotto",
+ "cork.ogg": "tappo",
+ "corn.ogg": "granturco",
+ "couch.ogg": "divano",
+ "cough.ogg": "tossire",
+ "couple.ogg": "coppia",
+ "cow.ogg": "mucca",
+ "cowboy.ogg": "cowboy",
+ "crab.ogg": "granchio",
+ "cradle.ogg": "culla",
+ "craft.ogg": "artigianato",
"crawl.ogg": "gattonare",
- "crib.ogg": "la culla",
+ "crazy.ogg": "pazzo",
+ "creek.ogg": "torrente",
+ "crepe.ogg": "crespella",
+ "crib.ogg": "lettino",
"croak.ogg": "gracidare",
- "crocodile.ogg": "il coccodrillo",
- "crow.ogg": "il corvo",
- "crown.ogg": "la corona",
- "crumb.ogg": "la briciola",
- "crust.ogg": "la crosta",
+ "crocodile.ogg": "coccodrillo",
+ "cross.ogg": "croce",
+ "crow.ogg": "corvo",
+ "crown.ogg": "corona",
+ "crumb.ogg": "briciola",
+ "crust.ogg": "crosta",
"cry.ogg": "piangere",
- "cube.ogg": "il cubo",
- "cucumber.ogg": "il cetriolo",
+ "crystal.ogg": "cristallo",
+ "cube.ogg": "cubo",
+ "cucumber.ogg": "cetriolo",
+ "curtain.ogg": "tenda",
"cut.ogg": "tagliare",
- "dad.ogg": "il papà",
- "den.ogg": "la tana",
- "desk.ogg": "la scrivania",
+ "cute.ogg": "carina",
+ "dad.ogg": "papà",
+ "daffodil.ogg": "narciso giallo",
+ "daisy.ogg": "margherita",
+ "dam.ogg": "diga",
+ "dance.ogg": "danza",
+ "dandelion.ogg": "dente di leone",
+ "dart_board.ogg": "bersaglio",
+ "date_fruit.ogg": "dattero",
+ "deer.ogg": "cervo",
+ "den.ogg": "tana",
+ "desert.ogg": "deserto",
+ "desk.ogg": "scrivania",
+ "dessert.ogg": "dessert",
+ "diamond.ogg": "diamante",
"dig.ogg": "scavare",
+ "dirt.ogg": "sporco",
"dirty.ogg": "sporco",
- "dish.ogg": "la zuppiera",
- "dog.ogg": "il cane",
- "door.ogg": "la porta",
- "dragon.ogg": "il drago",
+ "dish.ogg": "zuppiera",
+ "dishcloth.ogg": "strofinaccio",
+ "dive.ogg": "immersione",
+ "doctor.ogg": "medico",
+ "doe.ogg": "daino",
+ "dog.ogg": "cane",
+ "doll.ogg": "bambola",
+ "dolphin.ogg": "delfino",
+ "domino.ogg": "domino",
+ "door.ogg": "porta",
+ "doormat.ogg": "tappetino",
+ "dot.ogg": "punto",
+ "doughnut.ogg": "ciambella",
+ "dove.ogg": "colomba",
+ "dragon.ogg": "drago",
+ "dragonfly.ogg": "libellula",
"draw.ogg": "disegnare",
+ "drawer.ogg": "cassetto",
"dream.ogg": "sognare",
- "dress.ogg": "il vestito",
- "drink.ogg": "il caffè",
- "drive.ogg": "guida",
- "drool.ogg": "sbava",
- "drum.ogg": "il tamburo",
- "duck.ogg": "l'anatra",
- "dune.ogg": "la duna",
- "ear.ogg": "l'orecchio",
- "earth.ogg": "la terra",
+ "dress.ogg": "vestito",
+ "drink.ogg": "bevanda",
+ "drip.ogg": "goccia",
+ "drive.ogg": "guidare",
+ "drool.ogg": "sbavare",
+ "drum.ogg": "tamburo",
+ "dry.ogg": "asciugare",
+ "duck.ogg": "anatra",
+ "duck_mother.ogg": "mamma oca",
+ "dune.ogg": "duna",
+ "dwarf.ogg": "nano",
+ "eagle.ogg": "aquila",
+ "ear.ogg": "orecchio",
+ "earth.ogg": "terra",
"eat.ogg": "mangiare",
- "face.ogg": "la faccia",
- "fan.ogg": "il ventilatore",
- "farm.ogg": "la fattoria",
+ "egg.ogg": "uovo",
+ "eggplant.ogg": "melanzana",
+ "elbow.ogg": "gomito",
+ "electrician.ogg": "elettricista",
+ "elk.ogg": "alce",
+ "empty.ogg": "vuoto",
+ "engine.ogg": "motore",
+ "engineer.ogg": "ingegnere",
+ "eraser.ogg": "gomma",
+ "explore.ogg": "esplorazione",
+ "eyelash.ogg": "ciglio",
+ "eyes.ogg": "occhi",
+ "face.ogg": "viso",
+ "fair.ogg": "luna park",
+ "fairy.ogg": "fata",
+ "fall.ogg": "cadere",
+ "fall_season.ogg": "stagione autunnale",
+ "family.ogg": "famiglia",
+ "fan.ogg": "ventilatore",
+ "farm.ogg": "fattoria",
+ "farmer.ogg": "contadino",
+ "fat.ogg": "grasso",
+ "faucet.ogg": "rubinetto",
+ "fawn.ogg": "cerbiatto",
+ "fear.ogg": "paura",
+ "feast.ogg": "banchetto",
+ "feather.ogg": "piuma",
+ "feed.ogg": "nutrire",
+ "femur.ogg": "femore",
"fetch.ogg": "riportare",
- "fin.ogg": "la pinna",
+ "fig.ogg": "fico",
+ "fin.ogg": "pinna",
"find.ogg": "trovare",
- "fire.ogg": "il fuoco",
- "fish.ogg": "il pesce",
- "fist.ogg": "il pugno",
- "flag.ogg": "la bandiera",
- "flame.ogg": "la fiamma",
- "flash.ogg": "la torcia elettrica",
- "flies.ogg": "la mosca",
+ "finger.ogg": "dito",
+ "fire.ogg": "fuoco",
+ "fire_extinguisher.ogg": "estintore",
+ "fireman.ogg": "pompiere",
+ "fish.ogg": "pesce",
+ "fisherman.ogg": "pescatore",
+ "fist.ogg": "pugno",
+ "flacon.ogg": "flacone",
+ "flag.ogg": "bandiera",
+ "flame.ogg": "fiamma",
+ "flamingo.ogg": "fenicottero",
+ "flash.ogg": "torcia elettrica",
+ "flat.ogg": "pianura",
+ "flies.ogg": "mosca",
"float.ogg": "galleggiare",
- "flour.ogg": "la farina",
- "flower.ogg": "il fiore",
- "flute.ogg": "il flauto",
+ "flour.ogg": "farina",
+ "flower.ogg": "fiore",
+ "fluff.ogg": "lanugine",
+ "flute.ogg": "flauto",
"fly.ogg": "volare",
- "foot.ogg": "il piede",
- "fork.ogg": "la forchetta",
- "fountain.ogg": "la fontana",
- "fox.ogg": "la volpe",
+ "foam.ogg": "schiuma",
+ "foot.ogg": "piede",
+ "forest.ogg": "foresta",
+ "fork.ogg": "forchetta",
+ "fountain.ogg": "fontana",
+ "fox.ogg": "volpe",
"freeze.ogg": "congelare",
- "friend.ogg": "gli amici",
- "frog.ogg": "la rana",
- "fruit.ogg": "la frutta",
- "fur.ogg": "la pelliccia",
- "game.ogg": "il giocattolo",
- "garden.ogg": "il giardino",
- "gift.ogg": "il regalo",
- "giraffe.ogg": "la giraffa",
- "girl.ogg": "la ragazza",
- "glass.ogg": "il bicchiere",
- "glove.ogg": "i guanti",
- "glue.ogg": "la colla",
- "gnome.ogg": "lo gnomo",
- "goat.ogg": "la capra",
- "grass.ogg": "l'erba",
- "grave.ogg": "la tomba",
+ "friend.ogg": "amici",
+ "fries.ogg": "patatine fritte",
+ "frog.ogg": "rana",
+ "front.ogg": "davanti",
+ "fruit.ogg": "frutta",
+ "fudge.ogg": "fudge",
+ "full.ogg": "pieno",
+ "fur.ogg": "pelliccia",
+ "game.ogg": "giocattolo",
+ "garage.ogg": "garage",
+ "garden.ogg": "giardino",
+ "garlic.ogg": "aglio",
+ "gem.ogg": "gemma",
+ "giant.ogg": "gigante",
+ "gift.ogg": "regalo",
+ "giraffe.ogg": "giraffa",
+ "girl.ogg": "ragazza",
+ "glass.ogg": "bicchiere",
+ "glasses.ogg": "occhiali",
+ "glove.ogg": "guanto",
+ "glue.ogg": "colla",
+ "gnome.ogg": "gnomo",
+ "goat.ogg": "capra",
+ "golden.ogg": "dorato",
+ "golf.ogg": "golf",
+ "goose.ogg": "oca",
+ "gorilla.ogg": "gorilla",
+ "grain.ogg": "grano",
+ "grandmother.ogg": "nonna",
+ "grape.ogg": "uva",
+ "grapefruit.ogg": "pompelmo",
+ "grass.ogg": "erba",
+ "grave.ogg": "tomba",
"gray.ogg": "grigio",
"green.ogg": "verde",
- "grin.ogg": "il ghigno",
- "ground.ogg": "la terra",
+ "grill.ogg": "griglia",
+ "grin.ogg": "ghigno",
+ "ground.ogg": "suolo",
"growl.ogg": "ringhiare",
- "gum.ogg": "la gomma da masticare",
- "hair.ogg": "i capelli",
- "hand.ogg": "la mano",
- "hat.ogg": "il cappello",
+ "guignol.ogg": "burattino",
+ "guinea_pig.ogg": "cavia",
+ "gum.ogg": "gomma da masticare",
+ "hair.ogg": "capelli",
+ "hair_dryer.ogg": "asciugacapelli",
+ "half.ogg": "metà",
+ "ham.ogg": "gomma da masticare",
+ "hamburger.ogg": "hamburger",
+ "hammer.ogg": "martello",
+ "hand.ogg": "mano",
+ "handlebar.ogg": "manubrio",
+ "happy.ogg": "felice",
+ "harp.ogg": "arpa",
+ "hat.ogg": "cappello",
"hatch.ogg": "schiudere",
- "hay.ogg": "la paglia",
- "head.ogg": "la testa",
+ "hay.ogg": "paglia",
+ "head.ogg": "testa",
"hear.ogg": "ascoltare",
- "heat.ogg": "il caldo",
- "hedge.ogg": "la siepe",
- "hen.ogg": "la gallina",
- "herd.ogg": "il gregge",
- "hip.ogg": "i fianchi",
- "hole.ogg": "il buco",
- "home.ogg": "la casa",
- "hook.ogg": "l'amo",
- "hound.ogg": "il segugio",
+ "heat.ogg": "caldo",
+ "hedge.ogg": "siepe",
+ "hedgehog.ogg": "riccio",
+ "heel.ogg": "tacco",
+ "helmet.ogg": "casco",
+ "hen.ogg": "chioccia",
+ "herd.ogg": "gregge",
+ "high.ogg": "alto",
+ "hike.ogg": "escursione",
+ "hill.ogg": "collina",
+ "hip.ogg": "fianchi",
+ "hippopotamus.ogg": "ippopotamo",
+ "hit.ogg": "colpo",
+ "hive.ogg": "alveare",
+ "hockey.ogg": "hockey",
+ "hole.ogg": "buco",
+ "home.ogg": "casa",
+ "hook.ogg": "amo",
+ "hop.ogg": "saltellare",
+ "horse.ogg": "cavallo",
+ "hose.ogg": "tubo",
+ "hospital.ogg": "ospedale",
+ "hot.ogg": "caldo",
+ "hot_dog.ogg": "hot dog",
+ "hound.ogg": "segugio",
+ "house.ogg": "casa",
"howl.ogg": "ululare",
"hug.ogg": "abbracciare",
- "hunter.ogg": "il cacciatore",
- "hut.ogg": "la capanna",
- "ice.ogg": "il ghiaccio",
- "ink.ogg": "l'inchiostro",
- "jewel.ogg": "il gioiello",
+ "huge.ogg": "enorme",
+ "hummingbird.ogg": "colibrì",
+ "hunchbacked.ogg": "gobbo",
+ "hunter.ogg": "cacciatore",
+ "husband.ogg": "padre",
+ "hut.ogg": "capanna",
+ "hyena.ogg": "iena",
+ "ice.ogg": "ghiaccio",
+ "iceberg.ogg": "iceberg",
+ "iguana.ogg": "iguana",
+ "ill.ogg": "malato",
+ "ink.ogg": "inchiostro",
+ "island.ogg": "isola",
+ "jacket.ogg": "giacca",
+ "jaguar.ogg": "giaguaro",
+ "jam.ogg": "marmellata",
+ "jay.ogg": "ghiandaia",
+ "jelly.ogg": "gelatina",
+ "jellyfish.ogg": "medusa",
+ "jewel.ogg": "gioiello",
+ "job.ogg": "lavoro",
+ "jockey.ogg": "fantino",
"jog.ogg": "correre",
- "judge.ogg": "il giudice",
- "juice.ogg": "il succo d'arancia",
+ "joy.ogg": "gioia",
+ "judge.ogg": "giudice",
+ "judo.ogg": "judo",
+ "juggler.ogg": "giocoliere",
+ "juice.ogg": "succo",
"jump.ogg": "saltare",
- "kite.ogg": "l'aquilone",
- "knee.ogg": "il ginocchio",
- "knife.ogg": "il coltello",
- "knight.ogg": "il cavaliere",
+ "kangaroo.ogg": "canguro",
+ "keel.ogg": "crollo",
+ "kernel.ogg": "nocciolo",
+ "keyboard.ogg": "tastiera",
+ "kimono.ogg": "kimono",
+ "king.ogg": "re",
+ "kiss.ogg": "baciare",
+ "kitchen.ogg": "cucina",
+ "kite.ogg": "aquilone",
+ "kitten.ogg": "gattino",
+ "kiwi.ogg": "kiwi",
+ "knee.ogg": "ginocchio",
+ "kneel.ogg": "inginocchiarsi",
+ "knife.ogg": "coltello",
+ "knight.ogg": "cavaliere",
"knit.ogg": "lavorare ai ferri",
- "knot.ogg": "il nodo",
- "lake.ogg": "il lago",
- "lamb.ogg": "l'agnello",
- "lamp.ogg": "la lampada",
- "land.ogg": "la terra",
- "lane.ogg": "la strada",
- "lap.ogg": "il grembo",
- "lawn.ogg": "il prato",
+ "knot.ogg": "nodo",
+ "koala.ogg": "koala",
+ "lad.ogg": "ragazzo",
+ "lady.ogg": "signora",
+ "ladybug.ogg": "coccinella",
+ "lake.ogg": "lago",
+ "lama.ogg": "lama",
+ "lamb.ogg": "agnello",
+ "lamp.ogg": "lampada",
+ "land.ogg": "terreno",
+ "lane.ogg": "strada",
+ "lap.ogg": "grembo",
+ "lasso.ogg": "lazo",
+ "laugh.ogg": "ridere",
+ "lava.ogg": "lava",
+ "lawn.ogg": "prato",
+ "lawyer.ogg": "avvocato",
+ "leaf.ogg": "foglia",
+ "ledge.ogg": "sporgenza",
+ "leek.ogg": "porro",
+ "left.ogg": "sinistra",
+ "leg.ogg": "gamba",
+ "lemon.ogg": "limone",
+ "lemonade.ogg": "limonata",
+ "lemur.ogg": "lemure",
+ "leopard.ogg": "leopardo",
+ "lettuce.ogg": "lattuga",
+ "librarian.ogg": "bilbiotecaria",
"lick.ogg": "leccare",
- "lid.ogg": "il coperchio",
- "lift.ogg": "sollevare i pesi",
- "light.ogg": "la luce",
- "lime.ogg": "il lime",
- "link.ogg": "l'anello",
- "lip.ogg": "le labbra",
- "log.ogg": "i ceppi",
+ "lid.ogg": "coperchio",
+ "lift.ogg": "sollevamento pesi",
+ "light.ogg": "lampada",
+ "lighthouse.ogg": "faro",
+ "lightning.ogg": "fulmine",
+ "lilac.ogg": "lillà",
+ "lime.ogg": "lime",
+ "line.ogg": "linea",
+ "link.ogg": "anello",
+ "lion.ogg": "leone",
+ "lion_cub.ogg": "cucciolo di leone",
+ "lip.ogg": "labbra",
+ "liquid.ogg": "liquido",
+ "lizard.ogg": "lucertola",
+ "lobster.ogg": "astice",
+ "log.ogg": "tronchi",
"look.ogg": "guardare",
- "lunch.ogg": "la merenda",
- "mad.ogg": "la follia",
- "mane.ogg": "la criniera",
- "map.ogg": "la mappa",
- "mask.ogg": "la maschera da sub",
- "mat.ogg": "il tappetino",
- "match.ogg": "i fiammiferi",
+ "lunch.ogg": "pranzo",
+ "mad.ogg": "follia",
+ "magic.ogg": "magico",
+ "magnet.ogg": "magnete",
+ "magnifying_glass.ogg": "lente d'ingrandimento",
+ "magpie.ogg": "gazza",
+ "mail.ogg": "posta",
+ "man.ogg": "uomo",
+ "mane.ogg": "criniera",
+ "mango.ogg": "mango",
+ "map.ogg": "mappa",
+ "maple.ogg": "acero",
+ "marble.ogg": "biglia",
+ "mashed_potatoes.ogg": "purè di patate",
+ "mask.ogg": "maschera",
+ "mast.ogg": "albero",
+ "mat.ogg": "zerbino",
+ "match.ogg": "fiammifero",
+ "mate.ogg": "compagno",
+ "mattress.ogg": "materasso",
+ "mauve.ogg": "malva",
+ "meal.ogg": "pasto",
+ "meat.ogg": "carne",
+ "mechanic.ogg": "meccanico",
+ "medal.ogg": "medaglia",
"meet.ogg": "incontrare",
- "mice.ogg": "i topi",
- "mole.ogg": "la talpa",
- "mosquito.ogg": "la zanzara",
- "mouth.ogg": "la bocca",
- "mud.ogg": "il fango",
- "mug.ogg": "la tazza",
- "mule.ogg": "il mulo",
- "mushroom.ogg": "il fungo",
- "nap.ogg": "pisolare",
- "neck.ogg": "il collo",
- "nest.ogg": "il nido",
- "net.ogg": "la rete",
- "night.ogg": "la notte",
- "nose.ogg": "il naso",
- "nut.ogg": "l'arachide",
- "oar.ogg": "i remi",
- "ocean.ogg": "l'oceano",
+ "melon.ogg": "melone",
+ "merry-go-round.ogg": "giostra",
+ "mice.ogg": "topi",
+ "microphone.ogg": "microfono",
+ "milk.ogg": "latte",
+ "mill.ogg": "mulino",
+ "mimosa.ogg": "mimosa",
+ "mirror.ogg": "specchio",
+ "mixer.ogg": "robot da cucina",
+ "mole.ogg": "talpa",
+ "mom.ogg": "mamma",
+ "moon.ogg": "luna",
+ "moose.ogg": "alce",
+ "mop.ogg": "mocio",
+ "mosque.ogg": "moschea",
+ "mosquito.ogg": "zanzara",
+ "mother.ogg": "madre",
+ "motorcycle.ogg": "motocicletta",
+ "mountain.ogg": "montagna",
+ "mouse.ogg": "topo",
+ "mouth.ogg": "bocca",
+ "movie.ogg": "film",
+ "mower.ogg": "tosaerba",
+ "mud.ogg": "fango",
+ "mug.ogg": "tazza",
+ "mule.ogg": "mulo",
+ "muscle.ogg": "muscolo",
+ "mushroom.ogg": "fungo",
+ "music.ogg": "musica",
+ "musician.ogg": "musicista",
+ "naked.ogg": "nudo",
+ "nap.ogg": "appisolarsi",
+ "navel.ogg": "ombelico",
+ "neck.ogg": "collo",
+ "necklace.ogg": "collana",
+ "needle.ogg": "ago",
+ "nest.ogg": "nido",
+ "net.ogg": "rete",
+ "newspaper.ogg": "giornale",
+ "night.ogg": "notte",
+ "nightgown.ogg": "camicia da notte",
+ "nose.ogg": "naso",
+ "nostril.ogg": "narice",
+ "notebook.ogg": "taccuino",
+ "number.ogg": "numero",
+ "nun.ogg": "suora",
+ "nurse.ogg": "infermiera",
+ "nurse_male.ogg": "infermiere",
+ "nut.ogg": "arachide",
+ "oar.ogg": "remi",
+ "ocean.ogg": "oceano",
+ "office.ogg": "ufficio",
+ "olive.ogg": "oliva",
+ "on.ogg": "sopra",
+ "onion.ogg": "cipolla",
+ "open.ogg": "aperto",
+ "opossum.ogg": "opossum",
"orange-color.ogg": "arancione",
- "orange.ogg": "l'arancio",
- "owl.ogg": "il gufo",
- "ox.ogg": "il bue",
- "page.ogg": "la pagina",
+ "orange.ogg": "arancia",
+ "orchid.ogg": "orchidea",
+ "ostrich.ogg": "struzzo",
+ "otter.ogg": "lontra",
+ "owl.ogg": "gufo",
+ "ox.ogg": "bue",
+ "oyster.ogg": "ostrica",
+ "pacifier.ogg": "ciuccio",
+ "page.ogg": "pagina",
"pair.ogg": "un paio",
- "pan.ogg": "la padella",
- "patch.ogg": "la toppa",
- "path.ogg": "il sentiero",
- "peach.ogg": "la pesca",
+ "pajamas.ogg": "pigiama",
+ "pal.ogg": "amico",
+ "palm_tree.ogg": "palma",
+ "pan.ogg": "padella",
+ "panda.ogg": "panda",
+ "panther.ogg": "pantera",
+ "panties.ogg": "mutande",
+ "pants.ogg": "pantaloni",
+ "papaya.ogg": "papaya",
+ "paper.ogg": "carta",
+ "parachute.ogg": "paracadute",
+ "parakeet.ogg": "parrocchetto",
+ "parrot.ogg": "pappagallo",
+ "patch.ogg": "toppa",
+ "path.ogg": "sentiero",
+ "paw.ogg": "impronta",
+ "pea.ogg": "piselli",
+ "peach.ogg": "pesca",
+ "peacock.ogg": "pavone",
+ "peak.ogg": "picco",
+ "pear.ogg": "pera",
+ "pearl.ogg": "perla",
"peck.ogg": "beccare",
- "pen.ogg": "la penna",
- "pencil.ogg": "la matita",
- "picture.ogg": "il quadro",
- "pig.ogg": "il maiale",
- "pine.ogg": "il pino",
+ "pedal.ogg": "pedale",
+ "pelican.ogg": "pellicano",
+ "pen.ogg": "penna",
+ "pencil.ogg": "matita",
+ "peony.ogg": "peonia",
+ "people.ogg": "persona",
+ "pepper.ogg": "peperone",
+ "peppers.ogg": "peperoni",
+ "pet.ogg": "animale domestico",
+ "petal.ogg": "petalo",
+ "phone.ogg": "telefono",
+ "piano.ogg": "pianoforte",
+ "picture.ogg": "quadro",
+ "pie.ogg": "torta",
+ "pig.ogg": "maiale",
+ "pigeon.ogg": "piccione",
+ "pill.ogg": "pillola",
+ "pillow.ogg": "cuscino",
+ "pilot.ogg": "pilota",
+ "pine.ogg": "pino",
+ "pine_cone.ogg": "pigna",
"pink.ogg": "rosa",
- "plane.ogg": "l'aeroplano",
- "plant.ogg": "la pianta",
- "plate.ogg": "il piatto",
+ "pip.ogg": "seme",
+ "pipe.ogg": "pipa",
+ "piranha.ogg": "piranha",
+ "pirate.ogg": "pirata",
+ "pizza.ogg": "pizza",
+ "plane.ogg": "aeroplano",
+ "planet.ogg": "pianeta",
+ "plant.ogg": "pianta",
+ "plate.ogg": "piatto",
"play.ogg": "giocare",
- "plow.ogg": "dissodare",
- "plum.ogg": "la prugna",
- "pole.ogg": "il palo",
- "pool.ogg": "la piscina",
- "pope.ogg": "il papa",
- "pot.ogg": "la pentola",
- "price.ogg": "il prezzo",
- "prince.ogg": "il principe",
- "princess.ogg": "la principessa",
- "prize.ogg": "il premio",
- "puppy.ogg": "il cucciolo",
+ "pliers.ogg": "pinza",
+ "plow.ogg": "arare",
+ "plum.ogg": "prugna",
+ "plumber.ogg": "idraulico",
+ "pocket.ogg": "tasca",
+ "pod.ogg": "baccello",
+ "pole.ogg": "palo",
+ "police.ogg": "polizia",
+ "pompon.ogg": "pompon",
+ "pond.ogg": "stagno",
+ "pony.ogg": "pony",
+ "pool.ogg": "piscina",
+ "popcorn.ogg": "popcorn",
+ "pope.ogg": "papa",
+ "porthole.ogg": "oblò",
+ "post.ogg": "buca della posta",
+ "pot.ogg": "pentola",
+ "potato.ogg": "patata",
+ "pounce.ogg": "saltare addosso",
+ "president.ogg": "presidente",
+ "pretty.ogg": "bella",
+ "price.ogg": "prezzo",
+ "priest.ogg": "prete",
+ "prince.ogg": "principe",
+ "princess.ogg": "principessa",
+ "prison.ogg": "prigione",
+ "prisoner.ogg": "prigioniero",
+ "prize.ogg": "premio",
+ "pug.ogg": "carlino",
+ "pull.ogg": "tirare",
+ "pullover.ogg": "maglione",
+ "pumpkin.ogg": "zucca",
+ "puppy.ogg": "cucciolo",
+ "pyramid.ogg": "piramide",
"quarrel.ogg": "litigare",
- "queen.ogg": "la regina",
- "question.ogg": "la domanda",
- "quilt.ogg": "la trapunta",
+ "queen.ogg": "regina",
+ "question.ogg": "domanda",
+ "quilt.ogg": "trapunta",
"quiz.ogg": "quiz",
- "rag.ogg": "lo strofinaccio",
- "rage.ogg": "la rabbia",
- "rake.ogg": "il rastrello",
- "ramp.ogg": "la rampa",
- "rat.ogg": "il ratto",
+ "rabbit.ogg": "coniglio",
+ "rabbit_baby.ogg": "coniglietto",
+ "race.ogg": "corsa",
+ "radio.ogg": "radio",
+ "radish.ogg": "ravanello",
+ "raft.ogg": "zattera",
+ "rag.ogg": "straccio",
+ "rage.ogg": "rabbia",
+ "rain.ogg": "pioggia",
+ "raincoat.ogg": "impermeabile",
+ "rake.ogg": "rastrello",
+ "ramp.ogg": "rampa",
+ "ran.ogg": "correre",
+ "raspberry.ogg": "lampone",
+ "rat.ogg": "ratto",
+ "razor.ogg": "rasoio",
"read.ogg": "leggere",
"red.ogg": "rosso",
- "rice.ogg": "il riso",
+ "reptile.ogg": "rettile",
+ "rhinoceros.ogg": "rinoceronte",
+ "rice.ogg": "riso",
"ride.ogg": "andare in bicicletta",
- "rip.ogg": "strappato",
- "rock.ogg": "la roccia",
- "roof.ogg": "il tetto",
- "rope.ogg": "la corda",
- "rose.ogg": "la rosa",
- "rug.ogg": "il tappeto",
- "run.ogg": "corre",
- "sad.ogg": "la tristezza",
- "sail.ogg": "la vela",
- "sand.ogg": "la sabbia",
- "sandwich.ogg": "il panino",
- "sauce.ogg": "la salsa",
- "scale.ogg": "la bilancia",
- "scar.ogg": "la cicatrice",
- "scarf.ogg": "la sciarpa",
- "school.ogg": "la scuola",
- "science.ogg": "la scienza",
+ "rifle.ogg": "fucile",
+ "right.ogg": "destra",
+ "rip.ogg": "strappare",
+ "rise.ogg": "crescere",
+ "river.ogg": "fiume",
+ "road.ogg": "strada",
+ "roast.ogg": "arrosto",
+ "robe.ogg": "mantello",
+ "robot.ogg": "robot",
+ "rock.ogg": "roccia",
+ "rocket.ogg": "razzo",
+ "rolling_pin.ogg": "mattarello",
+ "roof.ogg": "tetto",
+ "room.ogg": "stanza",
+ "root.ogg": "radice",
+ "rope.ogg": "corda",
+ "rose.ogg": "rosa",
+ "round.ogg": "rotondo",
+ "rowing.ogg": "canottaggio",
+ "royal.ogg": "reale",
+ "rug.ogg": "tappeto",
+ "run.ogg": "correre",
+ "sad.ogg": "tristezza",
+ "saddle.ogg": "sella",
+ "sail.ogg": "vela",
+ "sailor.ogg": "marinaio",
+ "salamander.ogg": "salamandra",
+ "salmon.ogg": "salmone",
+ "sand.ogg": "sabbia",
+ "sandals.ogg": "sandali",
+ "sandwich.ogg": "panino",
+ "sash.ogg": "fascia",
+ "sauce.ogg": "salsa",
+ "sausage.ogg": "salsiccia",
+ "scale.ogg": "bilancia",
+ "scar.ogg": "cicatrice",
+ "scare.ogg": "spaventare",
+ "scarf.ogg": "sciarpa",
+ "school.ogg": "scuola",
+ "school_bag.ogg": "cartella",
+ "science.ogg": "scienza",
+ "scissors.ogg": "forbici",
+ "scorpion.ogg": "scorpione",
+ "scratch.ogg": "graffiare",
"scream.ogg": "urlare",
- "screw.ogg": "la vite",
- "scribble.ogg": "lo scarabocchio",
- "seat.ogg": "la sedia a dondolo",
+ "screw.ogg": "vite",
+ "screwdriver.ogg": "cacciavite",
+ "scribble.ogg": "scarabocchiare",
+ "sea.ogg": "mare",
+ "seat.ogg": "sedia a dondolo",
"see.ogg": "vedere",
- "seed.ogg": "il seme",
- "shark.ogg": "il pescecane",
- "shelf.ogg": "lo scaffale",
- "shell.ogg": "la conchiglia",
- "ship.ogg": "la nave",
- "shirt.ogg": "la camicia",
- "shoe.ogg": "la scarpa",
- "shop.ogg": "il negozio",
- "shore.ogg": "il bagnasciuga",
- "short.ogg": "i pantaloni corti",
- "shower.ogg": "la doccia",
- "shrimp.ogg": "il gambero",
- "sign.ogg": "il cartello",
+ "seed.ogg": "seme",
+ "shadow.ogg": "ombra",
+ "shake.ogg": "scuotere",
+ "shark.ogg": "squalo",
+ "shave.ogg": "tosare",
+ "shed.ogg": "capanna",
+ "sheep.ogg": "pecora",
+ "shelf.ogg": "mensola",
+ "shell.ogg": "conchiglia",
+ "ship.ogg": "nave",
+ "shirt.ogg": "camicia",
+ "shoe.ogg": "scarpa",
+ "shoelace.ogg": "lacci di scarpa",
+ "shop.ogg": "negozio",
+ "shore.ogg": "bagnasciuga",
+ "short.ogg": "pantaloni corti",
+ "shovel.ogg": "pala",
+ "shower.ogg": "doccia",
+ "shrimp.ogg": "gambero",
+ "shrub.ogg": "arbusto",
+ "shut.ogg": "chiusa",
+ "shutter.ogg": "persiana",
+ "sick.ogg": "ammalato",
+ "sidewalk.ogg": "marciapiede",
+ "sign.ogg": "cartello",
"sing.ogg": "cantare",
- "sink.ogg": "il lavandino",
+ "sink.ogg": "lavandino",
"sip.ogg": "succhiare",
+ "sister.ogg": "sorella",
"sit.ogg": "sedere",
"skate.ogg": "pattinare",
- "ski.ogg": "sciare",
- "skin.ogg": "la pelle",
- "skirt.ogg": "la gonna",
- "skunk.ogg": "la puzzola",
- "sky.ogg": "il cielo",
- "sled.ogg": "la slitta",
+ "skeleton.ogg": "scheletro",
+ "ski.ogg": "sci",
+ "skimmer.ogg": "schiumarola",
+ "skin.ogg": "pelle",
+ "skirt.ogg": "gonna",
+ "skunk.ogg": "puzzola",
+ "sky.ogg": "cielo",
+ "slam.ogg": "schiacciare",
+ "sled.ogg": "slitta",
"sleep.ogg": "dormire",
- "sleeve.ogg": "la manica",
- "sleigh.ogg": "la slitta",
- "slide.ogg": "lo scivolo",
- "slime.ogg": "la bava",
- "smile.ogg": "il sorriso",
- "smoke.ogg": "il fumo",
- "snail.ogg": "la lumaca",
- "snake.ogg": "il serpente",
- "sneaker.ogg": "la scarpa da tennis",
+ "sleeve.ogg": "manica",
+ "sleigh.ogg": "slitta",
+ "slide.ogg": "scivolo",
+ "slim.ogg": "magra",
+ "slime.ogg": "bava",
+ "slippers.ogg": "pantofole",
+ "slope.ogg": "pendenza",
+ "sloppy.ogg": "sciatto",
+ "slot.ogg": "fessura",
+ "sloth.ogg": "bradipo",
+ "slug.ogg": "chiocciola",
+ "small.ogg": "piccolo",
+ "smell.ogg": "odorare",
+ "smile.ogg": "sorriso",
+ "smock.ogg": "grembiule",
+ "smoke.ogg": "fumo",
+ "smooch.ogg": "sbaciucchiare",
+ "snack.ogg": "spuntino",
+ "snail.ogg": "lumaca",
+ "snake.ogg": "serpente",
+ "sneaker.ogg": "scarpa da tennis",
"sniff.ogg": "annusare",
- "snow.ogg": "la neve",
- "sock.ogg": "il calzino",
- "spaghetti.ogg": "gli spaghetti",
- "spear.ogg": "la lancia",
- "spider.ogg": "il ragno",
- "spike.ogg": "gli aculei",
- "sponge.ogg": "la spugna",
- "spoon.ogg": "il cucchiaio",
+ "snow.ogg": "neve",
+ "soap.ogg": "sapone",
+ "sob.ogg": "disperazione",
+ "sock.ogg": "calzino",
+ "soldier.ogg": "soldato",
+ "sole.ogg": "sogliola",
+ "sole_shoe.ogg": "suola di scarpa",
+ "son.ogg": "figlio",
+ "soup.ogg": "zuppa",
+ "spade.ogg": "vanga",
+ "spaghetti.ogg": "spaghetti",
+ "spark.ogg": "scintilla",
+ "sparrow.ogg": "passero",
+ "spatula.ogg": "spatola",
+ "speak.ogg": "parlare",
+ "spear.ogg": "lancia",
+ "spice.ogg": "spezia",
+ "spider.ogg": "ragno",
+ "spider_web.ogg": "ragnatela",
+ "spike.ogg": "aculeo",
+ "spill.ogg": "versare",
+ "spinach.ogg": "spinaci",
+ "spine.ogg": "spina dorsale",
+ "spinning_top.ogg": "trottola",
+ "splash.ogg": "schizzare",
+ "splatter.ogg": "schizzo",
+ "sponge.ogg": "spugna",
+ "spool.ogg": "rocchetto",
+ "spoon.ogg": "cucchiaio",
"sport.ogg": "sport",
+ "spot.ogg": "macchia",
"spray.ogg": "spruzzare",
"spread.ogg": "spalmare",
- "squash.ogg": "la zucca",
- "squid.ogg": "il calamaro",
- "squirrel.ogg": "lo scoiattolo",
- "stack.ogg": "una pila",
- "stage.ogg": "il palco",
- "stamp.ogg": "il francobollo",
- "star.ogg": "la stella",
- "stare.ogg": "lo sguardo",
- "starfish.ogg": "la stella di mare",
- "stem.ogg": "lo stelo",
- "stew.ogg": "lo stufato",
+ "spring.ogg": "rimbalzare",
+ "spring_season.ogg": "stagione primaverile",
+ "sprinkle.ogg": "confettini",
+ "square.ogg": "quadrato",
+ "squash.ogg": "zucca",
+ "squat.ogg": "accovacciarsi",
+ "squid.ogg": "calamaro",
+ "squirrel.ogg": "scoiattolo",
+ "squirt.ogg": "spruzzo",
+ "stack.ogg": "pila",
+ "stage.ogg": "palco",
+ "staircase.ogg": "scalinata",
+ "stamp.ogg": "francobollo",
+ "stand.ogg": "stare in piedi",
+ "star.ogg": "stella",
+ "stare.ogg": "fissare",
+ "starfish.ogg": "stella di mare",
+ "steam.ogg": "vapore",
+ "steep.ogg": "ripido",
+ "steeple.ogg": "campanile",
+ "stem.ogg": "stelo",
+ "step.ogg": "gradino",
+ "stew.ogg": "stufato",
+ "stick.ogg": "ramoscello",
"sting.ogg": "pungere",
- "stone.ogg": "la pietra",
- "store.ogg": "il negozio",
- "stove.ogg": "la cucina",
- "straw.ogg": "la cannuccia",
- "strawberry.ogg": "la fragola",
- "stream.ogg": "il vapore",
- "street.ogg": "la via",
- "string.ogg": "lo spago",
+ "stinky.ogg": "maleodorante",
+ "stitch.ogg": "cucire",
+ "stomach.ogg": "stomaco",
+ "stone.ogg": "pietra",
+ "stop.ogg": "fermare",
+ "store.ogg": "negozio",
+ "stove.ogg": "cucina",
+ "straight.ogg": "dritto",
+ "strainer.ogg": "colino",
+ "straw.ogg": "cannuccia",
+ "strawberry.ogg": "fragola",
+ "stream.ogg": "corrente",
+ "street.ogg": "via",
+ "stretch.ogg": "allungare",
+ "string.ogg": "spago",
+ "stripe.ogg": "striscia",
+ "strong.ogg": "forte",
+ "student.ogg": "studente",
"study.ogg": "studiare",
- "stump.ogg": "il ceppo",
- "suit.ogg": "l'abito",
- "summer.ogg": "l'estate",
- "sun.ogg": "il sole",
- "swan.ogg": "il cigno",
- "sweat.ogg": "il sudore",
- "swim.ogg": "nuotare",
- "tag.ogg": "il cartellino",
+ "stump.ogg": "ceppo",
+ "sugar.ogg": "zucchero",
+ "suit.ogg": "abito",
+ "suitcase.ogg": "valigia",
+ "summer.ogg": "estate",
+ "summit.ogg": "vetta",
+ "sun.ogg": "sole",
+ "swan.ogg": "cigno",
+ "sweat.ogg": "sudore",
+ "sweatshirt.ogg": "felpa",
+ "swim.ogg": "nuoto",
+ "table.ogg": "tavolo",
+ "tablecloth.ogg": "tovaglia",
+ "tadpole.ogg": "girino",
+ "tag.ogg": "cartellino",
+ "tail.ogg": "coda",
+ "tall.ogg": "alto",
+ "tape_measure.ogg": "metro",
+ "taxi.ogg": "taxi",
"teach.ogg": "insegnare",
- "teacher.ogg": "la maestra",
+ "teacher.ogg": "maestra",
"tear.ogg": "strappare",
- "teeth.ogg": "i denti",
- "thigh.ogg": "la coscia",
+ "teddy.ogg": "orsetto",
+ "teeth.ogg": "denti",
+ "television.ogg": "televisore",
+ "temple.ogg": "tempio",
+ "tennis.ogg": "tennis",
+ "tent.ogg": "tenda",
+ "text.ogg": "testo",
+ "thick.ogg": "spesso",
+ "thief.ogg": "ladro",
+ "thigh.ogg": "coscia",
"think.ogg": "pensare",
- "thread.ogg": "il filo",
- "throat.ogg": "la gola",
+ "thread.ogg": "filo",
+ "throat.ogg": "gola",
"throw.ogg": "lanciare",
- "tick.ogg": "la zecca",
- "time.ogg": "il tempo",
- "toilet.ogg": "il gabinetto",
- "tool.ogg": "gli attrezzi",
- "top.ogg": "la cima",
- "torch.ogg": "la torcia",
+ "thumb.ogg": "pollice",
+ "tick.ogg": "zecca",
+ "ticket.ogg": "biglietto",
+ "tiger.ogg": "tigre",
+ "time.ogg": "tempo",
+ "tin.ogg": "lattina",
+ "tire.ogg": "pneumatico",
+ "tired.ogg": "stanco",
+ "tissue.ogg": "fazzoletto",
+ "to_drink.ogg": "bere",
+ "toad.ogg": "rospo",
+ "toaster.ogg": "tostapane",
+ "toe.ogg": "alluce",
+ "toilet.ogg": "gabinetto",
+ "tomatoe.ogg": "pomodoro",
+ "tongs.ogg": "pinze",
+ "tongue.ogg": "lingua",
+ "tool.ogg": "attrezzo",
+ "top.ogg": "cima",
+ "torch.ogg": "torcia",
"touch.ogg": "toccare",
- "towel.ogg": "l'asciugamano",
- "toy.ogg": "il giocattolo",
- "train.ogg": "il treno",
- "trap.ogg": "la trappola",
- "trash.ogg": "la spazzatura",
- "tray.ogg": "il vassoio",
- "tree.ogg": "l'albero",
- "truck.ogg": "il camion",
- "tube.ogg": "il rossetto",
- "tune.ogg": "le note",
- "vet.ogg": "il veterinario",
+ "towel.ogg": "asciugamano",
+ "toy.ogg": "giocattolo",
+ "trail.ogg": "sentiero",
+ "train.ogg": "treno",
+ "train_station.ogg": "stazione dei treni",
+ "trap.ogg": "trappola",
+ "trash.ogg": "spazzatura",
+ "tray.ogg": "vassoio",
+ "treat.ogg": "dolcetto",
+ "tree.ogg": "albero",
+ "triangle.ogg": "triangolo",
+ "tribe.ogg": "tribù",
+ "trip.ogg": "viaggio",
+ "truck.ogg": "camion",
+ "tube.ogg": "rossetto",
+ "tulip.ogg": "tulipano",
+ "tune.ogg": "note",
+ "turkey.ogg": "tacchino",
+ "turnip.ogg": "rapa",
+ "turtle.ogg": "tartaruga",
+ "tusk.ogg": "zanna",
+ "twin_boys.ogg": "gemelli",
+ "twin_girls.ogg": "gemelle",
+ "umbrella.ogg": "ombrella",
+ "under.ogg": "sotto",
+ "uniform.ogg": "uniforme",
+ "van.ogg": "furgone",
+ "vapor.ogg": "vapore",
+ "vase.ogg": "vaso",
+ "vegetable.ogg": "vegetale",
+ "vein.ogg": "vena",
+ "verdure.ogg": "verdure",
+ "vest.ogg": "gilè",
+ "vet.ogg": "veterinario",
+ "viper.ogg": "vipera",
+ "vowel.ogg": "vocale",
+ "vulture.ogg": "avvoltoio",
+ "wag.ogg": "agitare",
"walk.ogg": "camminare",
- "watch.ogg": "l'orologio da polso",
- "water.ogg": "l'acqua",
- "wedge.ogg": "il cuneo",
- "wheel.ogg": "la ruota",
+ "wall.ogg": "muro",
+ "walnut.ogg": "noce",
+ "wart.ogg": "verruca",
+ "wash.ogg": "lavare",
+ "wasp.ogg": "vespa",
+ "watch.ogg": "orologio da polso",
+ "water.ogg": "acqua",
+ "wave.ogg": "onda",
+ "wedding.ogg": "matrimonio",
+ "wedge.ogg": "cuneo",
+ "weight.ogg": "peso",
+ "wet.ogg": "umido",
+ "whale.ogg": "balena",
+ "wheat.ogg": "grano",
+ "wheel.ogg": "ruota",
+ "whisk.ogg": "frusta",
"whisper.ogg": "sussurrare",
"white.ogg": "bianco",
- "wig.ogg": "la parrucca",
- "wind.ogg": "il vento",
- "wing.ogg": "l'ala",
- "wood.ogg": "il legno",
- "wrench.ogg": "la chiave inglese",
- "wrist.ogg": "il polso",
- "zoo.ogg": "lo zoo"
-}
\ No newline at end of file
+ "wide.ogg": "largo",
+ "wife.ogg": "moglie",
+ "wig.ogg": "parrucca",
+ "win.ogg": "vincere",
+ "wind.ogg": "vento",
+ "window.ogg": "finestra",
+ "window_glass.ogg": "vetro della finestra",
+ "wing.ogg": "ala",
+ "winter.ogg": "inverno",
+ "wolf.ogg": "lupo",
+ "woman.ogg": "donna",
+ "wood.ogg": "legno",
+ "word.ogg": "parola",
+ "worker.ogg": "operaio",
+ "world.ogg": "mondo",
+ "wreath.ogg": "ghirlanda",
+ "wrench.ogg": "chiave inglese",
+ "wrist.ogg": "polso",
+ "write.ogg": "scrivere",
+ "yellow.ogg": "giallo",
+ "yogurt.ogg": "yogurt",
+ "yum.ogg": "delizioso",
+ "zebra.ogg": "zebra",
+ "zipper.ogg": "cerniera",
+ "zoo.ogg": "zoo"
+}
diff --git a/src/activities/lang/resource/content-ja.json b/src/activities/lang/resource/content-ja.json
deleted file mode 100644
--- a/src/activities/lang/resource/content-ja.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/src/activities/lang/resource/content-ml.json b/src/activities/lang/resource/content-ml.json
--- a/src/activities/lang/resource/content-ml.json
+++ b/src/activities/lang/resource/content-ml.json
@@ -1073,4 +1073,4 @@
"zebra.ogg": "വരയൻ കുതിര",
"zipper.ogg": "പൽനിരപ്പൂട്ട്",
"zoo.ogg": "മൃഗശാല"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-nl.json b/src/activities/lang/resource/content-nl.json
--- a/src/activities/lang/resource/content-nl.json
+++ b/src/activities/lang/resource/content-nl.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "ritssluiting",
"zoo.ogg": "dierentuin"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-nn.json b/src/activities/lang/resource/content-nn.json
--- a/src/activities/lang/resource/content-nn.json
+++ b/src/activities/lang/resource/content-nn.json
@@ -197,4 +197,4 @@
"word.ogg": "ord",
"write.ogg": "å skriva",
"yellow.ogg": "gul"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-pl.json b/src/activities/lang/resource/content-pl.json
--- a/src/activities/lang/resource/content-pl.json
+++ b/src/activities/lang/resource/content-pl.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "zamek",
"zoo.ogg": "zoo"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-pt.json b/src/activities/lang/resource/content-pt.json
--- a/src/activities/lang/resource/content-pt.json
+++ b/src/activities/lang/resource/content-pt.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "fecho",
"zoo.ogg": "zoológico"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-pt_BR.json b/src/activities/lang/resource/content-pt_BR.json
--- a/src/activities/lang/resource/content-pt_BR.json
+++ b/src/activities/lang/resource/content-pt_BR.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "zíper",
"zoo.ogg": "zoológico"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-ro.json b/src/activities/lang/resource/content-ro.json
--- a/src/activities/lang/resource/content-ro.json
+++ b/src/activities/lang/resource/content-ro.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebră",
"zipper.ogg": "fermoar",
"zoo.ogg": "grădină zoologică"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-sk.json b/src/activities/lang/resource/content-sk.json
--- a/src/activities/lang/resource/content-sk.json
+++ b/src/activities/lang/resource/content-sk.json
@@ -1059,4 +1059,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "zips",
"zoo.ogg": "zoologická záhrada"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-sv.json b/src/activities/lang/resource/content-sv.json
--- a/src/activities/lang/resource/content-sv.json
+++ b/src/activities/lang/resource/content-sv.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "zebra",
"zipper.ogg": "blixtlås",
"zoo.ogg": "djurpark"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-uk.json b/src/activities/lang/resource/content-uk.json
--- a/src/activities/lang/resource/content-uk.json
+++ b/src/activities/lang/resource/content-uk.json
@@ -1089,4 +1089,4 @@
"zebra.ogg": "зебра",
"zipper.ogg": "блискавка",
"zoo.ogg": "зоопарк"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/content-zh_CN.json b/src/activities/lang/resource/content-zh_CN.json
deleted file mode 100644
--- a/src/activities/lang/resource/content-zh_CN.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/src/activities/lang/resource/content-zh_TW.json b/src/activities/lang/resource/content-zh_TW.json
--- a/src/activities/lang/resource/content-zh_TW.json
+++ b/src/activities/lang/resource/content-zh_TW.json
@@ -47,4 +47,4 @@
"science.ogg": "科學",
"splatter.ogg": "飛濺",
"spot.ogg": "斑點"
-}
\ No newline at end of file
+}
diff --git a/src/activities/lang/resource/poToDataset.py b/src/activities/lang/resource/poToDataset.py
--- a/src/activities/lang/resource/poToDataset.py
+++ b/src/activities/lang/resource/poToDataset.py
@@ -33,10 +33,14 @@
jsonFile = sys.argv[2]
data = {}
+if poFile.percent_translated() < 40:
+ print("Need at least 40% of the words translated to create the json data file")
+ sys.exit(0)
+
for entry in poFile.translated_entries():
word = entry.msgctxt
data[word] = entry.msgstr
with open(jsonFile, "w", encoding='utf-8') as data_file:
json.dump(data, data_file, indent=4, sort_keys=True, ensure_ascii=False)
-
+ data_file.write("\n") # Add missing new line at end of file
diff --git a/src/activities/leftright/ActivityInfo.qml b/src/activities/leftright/ActivityInfo.qml
--- a/src/activities/leftright/ActivityInfo.qml
+++ b/src/activities/leftright/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You can see a hand: is it a left hand or a right hand? Click on the left button, or the right button depending on the displayed hand.")
credit: ""
- section: "discovery"
- createdInVersion: 0
+ section: "puzzle"
+ createdInVersion: 0
}
diff --git a/src/activities/letter-in-word/ActivityInfo.qml b/src/activities/letter-in-word/ActivityInfo.qml
--- a/src/activities/letter-in-word/ActivityInfo.qml
+++ b/src/activities/letter-in-word/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A letter is displayed on the flag attached to the plane, select all the words or the objects in which the letter appears and then press OK.")
credit: ""
- section: "reading"
+ section: "reading words"
createdInVersion: 7000
}
diff --git a/src/activities/lightsoff/ActivityInfo.qml b/src/activities/lightsoff/ActivityInfo.qml
--- a/src/activities/lightsoff/ActivityInfo.qml
+++ b/src/activities/lightsoff/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("The effect of pressing a button is to toggle the state of that button, and of its immediate vertical and horizontal neighbors. The sun and the color of the sky depend on the number of clicks needed to solve the puzzle. If you click on Tux, the solution is shown.")
credit: qsTr("The solver algorithm is described on Wikipedia. To know more about the Lights Off game: <http://en.wikipedia.org/wiki/Lights_Out_(game)>")
- section: "puzzle"
+ section: "discovery logic"
createdInVersion: 0
}
diff --git a/src/activities/louis-braille/ActivityInfo.qml b/src/activities/louis-braille/ActivityInfo.qml
--- a/src/activities/louis-braille/ActivityInfo.qml
+++ b/src/activities/louis-braille/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Read the history of Louis Braille, his biography, and the invention of the Braille system. Click on the previous and next buttons to move between the story pages. At the end, arrange the sequence in chronological order.")
credit: qsTr("Louis Braille Video: <http:\/\/www.youtube.com/watch?v=9bdfC2j_4x4>")
- section: "discovery braille"
+ section: "sciences history"
createdInVersion: 4000
}
diff --git a/src/activities/magic-hat-minus/ActivityInfo.qml b/src/activities/magic-hat-minus/ActivityInfo.qml
--- a/src/activities/magic-hat-minus/ActivityInfo.qml
+++ b/src/activities/magic-hat-minus/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Click on the hat to open it. Stars go in and a few stars escape. You have to count how many are still under the hat. Click on the bottom area to input your answer and on the OK button to validate your answer.")
credit: ""
- section: "math numeration"
+ section: "math arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/magic-hat-plus/ActivityInfo.qml b/src/activities/magic-hat-plus/ActivityInfo.qml
--- a/src/activities/magic-hat-plus/ActivityInfo.qml
+++ b/src/activities/magic-hat-plus/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Click on the hat to open it. Under the hat, how many stars can you see moving around? Count carefully. Click on the bottom area to input your answer and on the OK button to validate your answer.")
credit: ""
- section: "math numeration"
+ section: "math arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/maze/ActivityInfo.qml b/src/activities/maze/ActivityInfo.qml
--- a/src/activities/maze/ActivityInfo.qml
+++ b/src/activities/maze/ActivityInfo.qml
@@ -40,6 +40,6 @@
qsTr("At higher levels, run-fast-mode will be enabled automatically. If you want to use this feature in earlier levels or want to disable it in advanced levels, click on the \"barefoot / sportshoe\"-icon in the upper left corner of the screen to toggle the run-fast-mode.
\t")
credit: ""
- section: "discovery maze"
+ section: "fun maze"
createdInVersion: 0
}
diff --git a/src/activities/mazeinvisible/ActivityInfo.qml b/src/activities/mazeinvisible/ActivityInfo.qml
--- a/src/activities/mazeinvisible/ActivityInfo.qml
+++ b/src/activities/mazeinvisible/ActivityInfo.qml
@@ -40,6 +40,6 @@
qsTr("At higher levels, run-fast-mode will be enabled automatically. If you want to use this feature in earlier levels or want to disable it in advanced levels, click on the \"barefoot / sportshoe\"-icon in the upper left corner of the screen to toggle the run-fast-mode.
\t")
credit: ""
- section: "discovery maze"
+ section: "fun maze"
createdInVersion: 0
}
diff --git a/src/activities/mazerelative/ActivityInfo.qml b/src/activities/mazerelative/ActivityInfo.qml
--- a/src/activities/mazerelative/ActivityInfo.qml
+++ b/src/activities/mazerelative/ActivityInfo.qml
@@ -41,6 +41,6 @@
qsTr("At higher levels, run-fast-mode will be enabled automatically. If you want to use this feature in earlier levels or want to disable it in advanced levels, click on the \"barefoot / sportshoe\"-icon in the upper left corner of the screen to toggle the run-fast-mode.
\t")
credit: ""
- section: "discovery mazeMenu"
+ section: "fun maze"
createdInVersion: 0
}
diff --git a/src/activities/memory-case-association-tux/ActivityInfo.qml b/src/activities/memory-case-association-tux/ActivityInfo.qml
--- a/src/activities/memory-case-association-tux/ActivityInfo.qml
+++ b/src/activities/memory-case-association-tux/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You can see some cards, but you can't see what's on the other side of them. Each card is hiding the lower/uppercase of an alphabet, and you have to associate all the upper case letters with its lower case and vice versa. Tux teacher does the same.")
credit: ""
- section: "reading"
+ section: "reading letters"
createdInVersion: 9000
}
diff --git a/src/activities/memory-case-association/ActivityInfo.qml b/src/activities/memory-case-association/ActivityInfo.qml
--- a/src/activities/memory-case-association/ActivityInfo.qml
+++ b/src/activities/memory-case-association/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You can see some cards, but you can't see what's on the other side of them. Each card is hiding the lower/uppercase of an alphabet, and you have to associate all the upper case letters with its lower case and vice versa.")
credit: ""
- section: "reading"
+ section: "reading letters"
createdInVersion: 9000
}
diff --git a/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml b/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml
--- a/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml b/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml
--- a/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml
+++ b/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-add-minus-tux/ActivityInfo.qml b/src/activities/memory-math-add-minus-tux/ActivityInfo.qml
--- a/src/activities/memory-math-add-minus-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-add-minus-tux/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux, and you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-add-minus/ActivityInfo.qml b/src/activities/memory-math-add-minus/ActivityInfo.qml
--- a/src/activities/memory-math-add-minus/ActivityInfo.qml
+++ b/src/activities/memory-math-add-minus/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-add-tux/ActivityInfo.qml b/src/activities/memory-math-add-tux/ActivityInfo.qml
--- a/src/activities/memory-math-add-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-add-tux/ActivityInfo.qml
@@ -39,6 +39,6 @@
In this game, these cards are hiding the two parts of an adding-up sum (also called an addition sum). You need to find the two parts of the sum, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole sum. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper sum. When you do that, both those cards disappear! When you've made them all disappear, found more sums than Tux and you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-add/ActivityInfo.qml b/src/activities/memory-math-add/ActivityInfo.qml
--- a/src/activities/memory-math-add/ActivityInfo.qml
+++ b/src/activities/memory-math-add/ActivityInfo.qml
@@ -39,6 +39,6 @@
In this game, these cards are hiding the two parts of an adding-up sum (also called an addition sum). You need to find the two parts of the sum, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole sum. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper sum. When you do that, both those cards disappear! When you've made them all disappear, found all the sums, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-div-tux/ActivityInfo.qml b/src/activities/memory-math-div-tux/ActivityInfo.qml
--- a/src/activities/memory-math-div-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-div-tux/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux and you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-div/ActivityInfo.qml b/src/activities/memory-math-div/ActivityInfo.qml
--- a/src/activities/memory-math-div/ActivityInfo.qml
+++ b/src/activities/memory-math-div/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-minus-tux/ActivityInfo.qml b/src/activities/memory-math-minus-tux/ActivityInfo.qml
--- a/src/activities/memory-math-minus-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-minus-tux/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more operations than Tux and you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-minus/ActivityInfo.qml b/src/activities/memory-math-minus/ActivityInfo.qml
--- a/src/activities/memory-math-minus/ActivityInfo.qml
+++ b/src/activities/memory-math-minus/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-mult-div-tux/ActivityInfo.qml b/src/activities/memory-math-mult-div-tux/ActivityInfo.qml
--- a/src/activities/memory-math-mult-div-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-mult-div-tux/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux and you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-mult-div/ActivityInfo.qml b/src/activities/memory-math-mult-div/ActivityInfo.qml
--- a/src/activities/memory-math-mult-div/ActivityInfo.qml
+++ b/src/activities/memory-math-mult-div/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-mult-tux/ActivityInfo.qml b/src/activities/memory-math-mult-tux/ActivityInfo.qml
--- a/src/activities/memory-math-mult-tux/ActivityInfo.qml
+++ b/src/activities/memory-math-mult-tux/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux and you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-math-mult/ActivityInfo.qml b/src/activities/memory-math-mult/ActivityInfo.qml
--- a/src/activities/memory-math-mult/ActivityInfo.qml
+++ b/src/activities/memory-math-mult/ActivityInfo.qml
@@ -37,6 +37,6 @@
In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!")
credit: ""
- section: "math memory"
+ section: "math memory arithmetic"
createdInVersion: 0
}
diff --git a/src/activities/memory-tux/ActivityInfo.qml b/src/activities/memory-tux/ActivityInfo.qml
--- a/src/activities/memory-tux/ActivityInfo.qml
+++ b/src/activities/memory-tux/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A set of blank cards is shown. Each card has a picture on the other side, and each picture card has a twin exactly the same. Click on a card to see its hidden picture, and try to match the twins. You can only turn over two cards at once, so you need to remember where a picture is, while you look for its twin. When you turn over the twins, they both disappear. Tux teacher do the same.")
credit: ""
- section: "discovery memory"
+ section: "fun memory"
createdInVersion: 0
}
diff --git a/src/activities/memory-wordnumber/ActivityInfo.qml b/src/activities/memory-wordnumber/ActivityInfo.qml
--- a/src/activities/memory-wordnumber/ActivityInfo.qml
+++ b/src/activities/memory-wordnumber/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("You can see some cards, but you can't see what's on the other side of them. Each card is hiding the numeral form of a number, or the word to write it.")
credit: ""
- section: "reading"
+ section: "math numeration"
createdInVersion: 0
}
diff --git a/src/activities/memory/ActivityInfo.qml b/src/activities/memory/ActivityInfo.qml
--- a/src/activities/memory/ActivityInfo.qml
+++ b/src/activities/memory/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("A set of blank cards is shown. Each card has a picture on the other side, and each picture card has a twin exactly the same. Click on a card to see its hidden picture, and try to match the twins. You can only turn over two cards at once, so you need to remember where a picture is, while you look for its twin. When you turn over the twins, they both disappear.")
credit: ""
- section: "discovery memory"
+ section: "fun memory"
createdInVersion: 0
}
diff --git a/src/activities/memory/CardItem.qml b/src/activities/memory/CardItem.qml
--- a/src/activities/memory/CardItem.qml
+++ b/src/activities/memory/CardItem.qml
@@ -82,7 +82,7 @@
}
GCText {
anchors.centerIn: parent
- fontSize: largeSize
+ fontSizeMode: Text.Fit
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: "black"
diff --git a/src/activities/menu/Menu.qml b/src/activities/menu/Menu.qml
--- a/src/activities/menu/Menu.qml
+++ b/src/activities/menu/Menu.qml
@@ -82,7 +82,7 @@
// automatically the menu at start.
target: ApplicationInfo
onIsBox2DInstalledChanged: {
- ActivityInfoTree.filterByTag(activity.currentTag)
+ ActivityInfoTree.filterByTag(activity.currentTag, currentCategory)
ActivityInfoTree.filterLockedActivities()
ActivityInfoTree.filterEnabledActivities()
}
@@ -101,11 +101,19 @@
},
{
icon: activity.url + "discovery.svg",
- tag: "discovery"
+ tag: "discovery",
+ categories: [{ "logic": qsTr("Logic") },
+ { "arts": qsTr("Fine Arts") },
+ { "music": qsTr("Music") }
+ ]
},
{
- icon: activity.url + "experience.svg",
- tag: "experiment"
+ icon: activity.url + "sciences.svg",
+ tag: "sciences",
+ categories: [{ "experiment": qsTr("Experiment") },
+ { "history": qsTr("History") },
+ { "geography": qsTr("Geography") }
+ ]
},
{
icon: activity.url + "fun.svg",
@@ -113,7 +121,11 @@
},
{
icon: activity.url + "math.svg",
- tag: "math"
+ tag: "math",
+ categories: [{ "numeration": qsTr("Numeration") },
+ { "arithmetic": qsTr("Arithmetic") },
+ { "measures": qsTr("Measures") }
+ ]
},
{
icon: activity.url + "puzzle.svg",
@@ -121,7 +133,11 @@
},
{
icon: activity.url + "reading.svg",
- tag: "reading"
+ tag: "reading",
+ categories: [{ "letters": qsTr("Letters") },
+ { "words": qsTr("Words") },
+ { "vocabulary": qsTr("Vocabulary") }
+ ]
},
{
icon: activity.url + "strategy.svg",
@@ -133,6 +149,8 @@
}
]
property string currentTag: sections[0].tag
+ property var currentTagCategories: []
+ property string currentCategory: ""
/// @endcond
property string clickMode: "play"
@@ -215,8 +233,22 @@
keyboardMode = true
event.accepted = false
}
- Keys.onTabPressed: currentActiveGrid = ((currentActiveGrid == activitiesGrid) ?
- section : activitiesGrid);
+ Keys.onTabPressed: {
+ if(currentActiveGrid == section) {
+ if(currentTagCategories && currentTagCategories.length != 0) {
+ currentActiveGrid = categoriesGrid;
+ }
+ else {
+ currentActiveGrid = activitiesGrid;
+ }
+ }
+ else if(currentActiveGrid == categoriesGrid) {
+ currentActiveGrid = activitiesGrid;
+ }
+ else {
+ currentActiveGrid = section;
+ }
+ }
Keys.onEnterPressed: if(currentActiveGrid.currentItem) currentActiveGrid.currentItem.selectCurrentItem();
Keys.onReturnPressed: if(currentActiveGrid.currentItem) currentActiveGrid.currentItem.selectCurrentItem();
Keys.onRightPressed: if(currentActiveGrid.currentItem) currentActiveGrid.moveCurrentIndexRight();
@@ -275,12 +307,19 @@
function selectCurrentItem() {
section.currentIndex = index
activity.currentTag = modelData.tag
+ activity.currentTagCategories = modelData.categories
+ if(modelData.categories != undefined) {
+ currentCategory = Object.keys(modelData.categories[0])[0];
+ }
+ else {
+ currentCategory = ""
+ }
particles.burst(10)
if(modelData.tag === "search") {
ActivityInfoTree.filterBySearch(searchTextField.text);
}
else {
- ActivityInfoTree.filterByTag(modelData.tag)
+ ActivityInfoTree.filterByTag(modelData.tag, currentCategory)
ActivityInfoTree.filterLockedActivities()
ActivityInfoTree.filterEnabledActivities()
}
@@ -355,6 +394,65 @@
}
}
+ GridView {
+ id: categoriesGrid
+ model: currentTagCategories
+ anchors.top: horizontal ? section.bottom : parent.top
+ interactive: false
+ keyNavigationWraps: true
+ width: horizontal ? main.width : main.width - section.width
+ visible: activity.currentTag !== "search"
+ x: {
+ if(currentTagCategories) {
+ if(horizontal) {
+ return categoriesGrid.width / (4 * (currentTagCategories.length+1))
+ }
+ else {
+ return categoriesGrid.width / (4 * (currentTagCategories.length+1)) + section.width
+ }
+ }
+ else {
+ return 0
+ }
+ }
+
+ cellWidth: currentTagCategories ? categoriesGrid.width / currentTagCategories.length : 0
+ cellHeight: height
+ height: searchTextField.height
+
+ delegate: Button {
+ id: button
+ style: GCButtonStyle {
+ selected: currentCategory === button.category
+ }
+ width: categoriesGrid.width / (currentTagCategories.length + 1)
+ height: categoriesGrid.cellHeight
+ text: Object.values(modelData)[0]
+ property string category: Object.keys(modelData)[0]
+ onClicked: {
+ selectCurrentItem()
+ }
+
+ function selectCurrentItem() {
+ categoriesGrid.currentIndex = index
+ currentCategory = Object.keys(modelData)[0]
+ ActivityInfoTree.filterByTag(currentTag, currentCategory)
+ ActivityInfoTree.filterLockedActivities()
+ ActivityInfoTree.filterEnabledActivities()
+ }
+ }
+ highlight: Rectangle {
+ width: activityCellWidth - activitiesGrid.spacing
+ height: activityCellHeight - activitiesGrid.spacing
+ color: "#AAFFFFFF"
+ border.width: 3
+ border.color: "black"
+ visible: background.keyboardMode
+ Behavior on x { SpringAnimation { spring: 2; damping: 0.2 } }
+ Behavior on y { SpringAnimation { spring: 2; damping: 0.2 } }
+ }
+ }
+
GridView {
id: activitiesGrid
@@ -363,7 +461,7 @@
if(searchBar.visible)
return searchBar.bottom
else
- return horizontal ? section.bottom : parent.top
+ return categoriesGrid.bottom
}
bottom: bar.top
left: horizontal ? parent.left : section.right
@@ -514,7 +612,6 @@
}
else {
dialogChooseLevel.currentActivity = ActivityInfoTree.menuTree[index]
- dialogChooseLevel.chosenLevel = currentLevel;
displayDialog(dialogChooseLevel);
}
}
@@ -561,7 +658,18 @@
upVisible: activitiesGrid.visibleArea.yPosition <= 0 ? false : true
downVisible: activitiesGrid.visibleArea.yPosition >= 1 ? false : true
}
-
+
+ Rectangle {
+ id: categories
+ width: horizontal ? parent.width : parent.width - (section.width+10)
+ height: searchTextField.height
+ visible: sections[activity.currentTag] === "search"
+ anchors {
+ top: horizontal ? section.bottom : categoriesGrid.top
+ left: horizontal ? undefined : section.right
+ }
+ }
+
Rectangle {
id: searchBar
width: horizontal ? parent.width/2 : parent.width - (section.width+10)
@@ -770,7 +878,7 @@
}
onClose: {
if(activity.currentTag != "search") {
- ActivityInfoTree.filterByTag(activity.currentTag)
+ ActivityInfoTree.filterByTag(activity.currentTag, currentCategory)
ActivityInfoTree.filterLockedActivities()
ActivityInfoTree.filterEnabledActivities()
} else
diff --git a/src/activities/menu/resource/experience.svg b/src/activities/menu/resource/sciences.svg
rename from src/activities/menu/resource/experience.svg
rename to src/activities/menu/resource/sciences.svg
diff --git a/src/activities/missing-letter/ActivityInfo.qml b/src/activities/missing-letter/ActivityInfo.qml
--- a/src/activities/missing-letter/ActivityInfo.qml
+++ b/src/activities/missing-letter/ActivityInfo.qml
@@ -36,6 +36,6 @@
//: Help manual
manual: qsTr("An object is displayed in the main area, and an incomplete word is printed under the picture. Select the missing letter to complete the word.")
credit: ""
- section: "reading"
+ section: "reading words"
createdInVersion: 0
}
diff --git a/src/activities/money/ActivityInfo.qml b/src/activities/money/ActivityInfo.qml
--- a/src/activities/money/ActivityInfo.qml
+++ b/src/activities/money/ActivityInfo.qml
@@ -35,6 +35,7 @@
//: Help manual
manual: qsTr("Click or tap on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click or tap on it on the upper screen area.")
credit: ""
- section: "math numeration money"
+ section: "math money measures"
createdInVersion: 0
+ levels: "1,2,3"
}
diff --git a/src/activities/money/CMakeLists.txt b/src/activities/money/CMakeLists.txt
--- a/src/activities/money/CMakeLists.txt
+++ b/src/activities/money/CMakeLists.txt
@@ -1 +1 @@
-GCOMPRIS_ADD_RCC(activities/money *.qml *.svg *.js resource/*)
+GCOMPRIS_ADD_RCC(activities/money *.qml *.svg *.js resource/* resource/*/*/*.qml)
diff --git a/src/activities/money/MoneyArea.qml b/src/activities/money/MoneyArea.qml
--- a/src/activities/money/MoneyArea.qml
+++ b/src/activities/money/MoneyArea.qml
@@ -63,7 +63,7 @@
id: pocket
model: ListModel { id: pocketModel }
Image {
- source: Activity.url + img
+ source: img
sourceSize.height: columnLayout.itemHeight
height: columnLayout.itemHeight
diff --git a/src/activities/money/MoneyCore.qml b/src/activities/money/MoneyCore.qml
--- a/src/activities/money/MoneyCore.qml
+++ b/src/activities/money/MoneyCore.qml
@@ -56,10 +56,12 @@
property alias store: store
property alias instructions: instructions
property alias tux: tux
+ property var levels: activity.datasetLoader.item.data
property alias tuxMoney: tuxMoney
property alias bar: bar
property alias bonus: bonus
property int itemIndex
+ property int pocketRows
property var selectedArea
property alias pocket: pocketArea.answer
property alias answer: answerArea.answer
@@ -76,7 +78,7 @@
width: parent.width * 0.9
property int nbColumns: 5
- property int nbLines: 2
+ property int nbLines: items.pocketRows
property int itemWidth:
Math.min(width / nbColumns - 10 - 10 / nbColumns,
parent.height * 0.4 / nbLines - 10 - 10 / nbLines)
@@ -101,13 +103,12 @@
Rectangle {
id: storeArea
- height: (columnLayout.itemStoreHeight + 10)
+ height: columnLayout.itemStoreHeight + 10
width: columnLayout.width
color: "#55333333"
border.color: "black"
border.width: 2
radius: 5
-
Flow {
id: storeAreaFlow
anchors.topMargin: 4
@@ -135,7 +136,7 @@
Repeater {
id: tuxMoney
Image {
- source: Activity.url + modelData.img
+ source: modelData.img
sourceSize.height: columnLayout.itemStoreHeight * 0.4
x: tux.x + index * 20
y: tux.y + tux.height / 2 + index * 20
@@ -146,7 +147,7 @@
Repeater {
id: store
Image {
- source: Activity.url + modelData.img
+ source: modelData.img
sourceSize.height: columnLayout.itemStoreHeight
sourceSize.width: columnLayout.itemStoreHeight
GCText {
diff --git a/src/activities/money/money.js b/src/activities/money/money.js
--- a/src/activities/money/money.js
+++ b/src/activities/money/money.js
@@ -23,546 +23,12 @@
.import "qrc:/gcompris/src/core/core.js" as Core
.import GCompris 1.0 as GCompris
+.import "moneyConstants.js" as Constants
+
var url = "qrc:/gcompris/src/activities/money/resource/"
// We create 3 prices categories to make the game more realistic.
// List of images to use in the game (cheap objects)
-var cheapObjects = [
- "apple.svg",
- "orange.svg",
- "banane.svg",
- "pamplemousse.svg",
- "carot.svg",
- "cerise.svg",
- "cake.svg"
- ]
-
-var normalObjects = [
- "umbrella.svg",
- "pencil.svg",
- "bottle.svg",
- "light.svg",
- "eggpot.svg"
- ]
-
-var expensiveObjects = [
- "lamp.svg",
- "football.svg",
- "bicycle.svg"
- ]
-
-var moneyItems = {
- MONEY_EURO_COIN_1C: { img: "c1c.svg", val: 0.01 },
- MONEY_EURO_COIN_2C: { img: "c2c.svg", val: 0.02 },
- MONEY_EURO_COIN_5C: { img: "c5c.svg", val: 0.05 },
- MONEY_EURO_COIN_10C: { img: "c10c.svg", val: 0.1 },
- MONEY_EURO_COIN_20C: { img: "c20c.svg", val: 0.20 },
- MONEY_EURO_COIN_50C: { img: "c50c.svg", val: 0.5 },
- MONEY_EURO_COIN_1E: { img: "c1e.svg", val: 1.0 },
- MONEY_EURO_COIN_2E: { img: "c2e.svg", val: 2.0 },
- MONEY_EURO_PAPER_5E: { img: "n5e.svg", val: 5.0 },
- MONEY_EURO_PAPER_10E: { img: "n10e.svg", val: 10.0 },
- MONEY_EURO_PAPER_20E: { img: "n20e.svg", val: 20.0 },
- MONEY_EURO_PAPER_50E: { img: "n50e.svg", val: 50.0 },
-}
-
-var fullDataset = {
- WITHOUT_CENTS: [
- {
- numberOfItem: 1,
- minPrice: 3,
- maxPrice: 10,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 1,
- minPrice: 10,
- maxPrice: 20,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 2,
- minPrice: 20,
- maxPrice: 30,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 2,
- minPrice: 30,
- maxPrice: 40,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 3,
- minPrice: 40,
- maxPrice: 50,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 3,
- minPrice: 50,
- maxPrice: 60,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 60,
- maxPrice: 70,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 70,
- maxPrice: 80,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 50,
- maxPrice: 100,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E
- ]
- }
- ],
-
- WITH_CENTS: [
- {
- numberOfItem: 1,
- minPrice: 1,
- maxPrice: 3,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C,
- ]
- },
- {
- numberOfItem: 1,
- minPrice: 1,
- maxPrice: 3,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- },
- {
- numberOfItem: 2,
- minPrice: 1,
- maxPrice: 3,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C,
- ]
- },
- {
- numberOfItem: 3,
- minPrice: 1,
- maxPrice: 3,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 0,
- maxPrice: 4,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C,
- ]
- }
- ],
-
- BACK_WITHOUT_CENTS: [
- {
- numberOfItem: 1,
- minPrice: 3,
- maxPrice: 9,
- paid: 10,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- ]
- },
- {
- numberOfItem: 1,
- minPrice: 1,
- maxPrice: 19,
- paid: 20,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 2,
- minPrice: 2,
- maxPrice: 29,
- paid: 30,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 2,
- minPrice: 2,
- maxPrice: 39,
- paid: 40,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 3,
- minPrice: 3,
- maxPrice: 49,
- paid: 50,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 3,
- minPrice: 3,
- maxPrice: 60,
- paid: 100,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 4,
- maxPrice: 70,
- paid: 100,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 4,
- maxPrice: 80,
- paid: 100,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 4,
- maxPrice: 99,
- paid: 100,
- pocket: [
- moneyItems.MONEY_EURO_PAPER_10E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_PAPER_50E,
- moneyItems.MONEY_EURO_PAPER_20E,
- moneyItems.MONEY_EURO_PAPER_5E,
- moneyItems.MONEY_EURO_PAPER_5E
- ]
- }
- ],
-
- BACK_WITH_CENTS: [
- {
- numberOfItem: 1,
- minPrice: 1,
- maxPrice: 3,
- paid: 5,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- },
- {
- numberOfItem: 1,
- minPrice: 1,
- maxPrice: 3,
- paid: 5,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- },
- {
- numberOfItem: 2,
- minPrice: 1,
- maxPrice: 3,
- paid: 5,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- },
- {
- numberOfItem: 3,
- minPrice: 1,
- maxPrice: 3,
- paid: 5,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- },
- {
- numberOfItem: 4,
- minPrice: 0,
- maxPrice: 4,
- paid: 5,
- pocket: [
- moneyItems.MONEY_EURO_COIN_2E,
- moneyItems.MONEY_EURO_COIN_1E,
- moneyItems.MONEY_EURO_COIN_5C,
- moneyItems.MONEY_EURO_COIN_2C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_50C,
- moneyItems.MONEY_EURO_COIN_20C,
- moneyItems.MONEY_EURO_COIN_10C,
- moneyItems.MONEY_EURO_COIN_1C,
- moneyItems.MONEY_EURO_COIN_1C
- ]
- }
- ]
-}
var currentLevel
var numberOfLevel
@@ -574,30 +40,25 @@
function start(items_, datasetName) {
items = items_
-
+ dataset = items.levels
switch(datasetName) {
- case "WITHOUT_CENTS":
- dataset = fullDataset.WITHOUT_CENTS
- centsMode = false
- backMode = false
+ case "WITHOUT_CENTS":
+ centsMode = false
+ backMode = false
break
- case "WITH_CENTS":
- dataset = fullDataset.WITH_CENTS
- centsMode = true
- backMode = false
+ case "WITH_CENTS":
+ centsMode = true
+ backMode = false
break
- case "BACK_WITHOUT_CENTS":
- dataset = fullDataset.BACK_WITHOUT_CENTS
- centsMode = false
- backMode = true
+ case "BACK_WITHOUT_CENTS":
+ centsMode = false
+ backMode = true
break
- case "BACK_WITH_CENTS":
- dataset = fullDataset.BACK_WITH_CENTS
- centsMode = true
- backMode = true
+ case "BACK_WITH_CENTS":
+ centsMode = true
+ backMode = true
break
}
-
currentLevel = 0
numberOfLevel = dataset.length
initLevel()
@@ -608,12 +69,14 @@
function initLevel() {
items.bar.level = currentLevel + 1
-
items.answerModel.clear()
items.pocketModel.clear()
var data = dataset[currentLevel]
+
+ items.pocketRows = (data.pocket.length > 10) ? 3 : 2
var pocket = Core.shuffle(data.pocket)
+
for (var i in pocket)
items.pocketModel.append(pocket[i])
@@ -628,7 +91,7 @@
// Calc a random price for each item based on the previous prices
price = Math.floor((centsMode ? 0 : 1) +
Math.random() *
- ((priceTotal - priceCounter) / data.numberOfItem))
+ (2 * (priceTotal - priceCounter) / data.numberOfItem))
else
// Put the remaining missing price on the last item
price = priceTotal - priceCounter
@@ -668,25 +131,25 @@
var tuxMoney
switch(data.paid) {
case 5:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_5E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_5E]
break
case 10:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_10E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_10E]
break
case 20:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_20E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_20E]
break
case 30:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_20E, moneyItems.MONEY_EURO_PAPER_10E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_20E, Constants.moneyItems.MONEY_PAPER_10E]
break
case 40:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_20E, moneyItems.MONEY_EURO_PAPER_20E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_20E, Constants.moneyItems.MONEY_PAPER_20E]
break
case 50:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_50E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_50E]
break
case 100:
- tuxMoney = [moneyItems.MONEY_EURO_PAPER_50E, moneyItems.MONEY_EURO_PAPER_50E]
+ tuxMoney = [Constants.moneyItems.MONEY_PAPER_50E, Constants.moneyItems.MONEY_PAPER_50E]
break
}
items.tuxMoney.model = tuxMoney
@@ -722,11 +185,11 @@
function getRandomObject(price) {
var list
if(price < 5)
- list = cheapObjects
+ list = Constants.cheapObjects
else if(price < 10)
- list = normalObjects
+ list = Constants.normalObjects
else
- list = expensiveObjects
+ list = Constants.expensiveObjects
return list[Math.floor(Math.random() * list.length)]
}
diff --git a/src/activities/money/moneyConstants.js b/src/activities/money/moneyConstants.js
new file mode 100644
--- /dev/null
+++ b/src/activities/money/moneyConstants.js
@@ -0,0 +1,59 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+var cheapObjects = [
+ "qrc:/gcompris/src/activities/money/resource/apple.svg",
+ "qrc:/gcompris/src/activities/money/resource/orange.svg",
+ "qrc:/gcompris/src/activities/money/resource/banane.svg",
+ "qrc:/gcompris/src/activities/money/resource/pamplemousse.svg",
+ "qrc:/gcompris/src/activities/money/resource/carot.svg",
+ "qrc:/gcompris/src/activities/money/resource/cerise.svg",
+ "qrc:/gcompris/src/activities/money/resource/cake.svg"
+]
+
+var normalObjects = [
+ "qrc:/gcompris/src/activities/money/resource/umbrella.svg",
+ "qrc:/gcompris/src/activities/money/resource/pencil.svg",
+ "qrc:/gcompris/src/activities/money/resource/bottle.svg",
+ "qrc:/gcompris/src/activities/money/resource/light.svg",
+ "qrc:/gcompris/src/activities/money/resource/eggpot.svg"
+]
+
+var expensiveObjects = [
+ "qrc:/gcompris/src/activities/money/resource/lamp.svg",
+ "qrc:/gcompris/src/activities/money/resource/football.svg",
+ "qrc:/gcompris/src/activities/money/resource/bicycle.svg"
+]
+
+var moneyItems = {
+ MONEY_COIN_1C: { img: "qrc:/gcompris/src/activities/money/resource/c1c.svg", val: 0.01 },
+ MONEY_COIN_2C: { img: "qrc:/gcompris/src/activities/money/resource/c2c.svg", val: 0.02 },
+ MONEY_COIN_5C: { img: "qrc:/gcompris/src/activities/money/resource/c5c.svg", val: 0.05 },
+ MONEY_COIN_10C: { img: "qrc:/gcompris/src/activities/money/resource/c10c.svg", val: 0.1 },
+ MONEY_COIN_20C: { img: "qrc:/gcompris/src/activities/money/resource/c20c.svg", val: 0.20 },
+ MONEY_COIN_50C: { img: "qrc:/gcompris/src/activities/money/resource/c50c.svg", val: 0.5 },
+ MONEY_COIN_1E: { img: "qrc:/gcompris/src/activities/money/resource/c1e.svg", val: 1.0 },
+ MONEY_COIN_2E: { img: "qrc:/gcompris/src/activities/money/resource/c2e.svg", val: 2.0 },
+ MONEY_PAPER_5E: { img: "qrc:/gcompris/src/activities/money/resource/n5e.svg", val: 5.0 },
+ MONEY_PAPER_10E: { img: "qrc:/gcompris/src/activities/money/resource/n10e.svg", val: 10.0 },
+ MONEY_PAPER_20E: { img: "qrc:/gcompris/src/activities/money/resource/n20e.svg", val: 20.0 },
+ MONEY_PAPER_50E: { img: "qrc:/gcompris/src/activities/money/resource/n50e.svg", val: 50.0 },
+}
diff --git a/src/activities/money/resource/1/Data.qml b/src/activities/money/resource/1/Data.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/money/resource/1/Data.qml
@@ -0,0 +1,106 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../../../core"
+import "../../../money/moneyConstants.js" as Constants
+
+Dataset {
+ objective: qsTr("Learn how to pay up to 10 units")
+ property var moneyItems: Constants.moneyItems
+ data: [
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 4,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 5,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 6,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 7,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 8,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 9,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 10,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ }
+ ]
+}
diff --git a/src/activities/money/resource/2/Data.qml b/src/activities/money/resource/2/Data.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/money/resource/2/Data.qml
@@ -0,0 +1,179 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../../../core"
+import "../../../money/moneyConstants.js" as Constants
+
+Dataset {
+ objective: qsTr("Learn how to pay up to 100 units")
+ property var moneyItems: Constants.moneyItems
+ data: [
+ {
+ "numberOfItem": 1,
+ "minPrice": 3,
+ "maxPrice": 10,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 10,
+ "maxPrice": 20,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 20,
+ "maxPrice": 30,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 30,
+ "maxPrice": 60,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 60,
+ "maxPrice": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E
+ ]
+ },
+ {
+ "numberOfItem": 3,
+ "minPrice": 10,
+ "maxPrice": 20,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 20,
+ "maxPrice": 30,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 5,
+ "minPrice": 30,
+ "maxPrice": 60,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 6,
+ "minPrice": 60,
+ "maxPrice": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E
+ ]
+ }
+ ]
+}
diff --git a/src/activities/money/resource/3/Data.qml b/src/activities/money/resource/3/Data.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/money/resource/3/Data.qml
@@ -0,0 +1,283 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../../../core"
+import "../../../money/moneyConstants.js" as Constants
+
+Dataset {
+ objective: qsTr("Learn how to pay up to 1000 units")
+ property var moneyItems: Constants.moneyItems
+ data: [
+ {
+ "numberOfItem": 1,
+ "minPrice": 10,
+ "maxPrice": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 200,
+ "maxPrice": 400,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 400,
+ "maxPrice": 600,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 600,
+ "maxPrice": 800,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 800,
+ "maxPrice": 1000,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 3,
+ "minPrice": 10,
+ "maxPrice": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 100,
+ "maxPrice": 200,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 5,
+ "minPrice": 200,
+ "maxPrice": 400,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 6,
+ "minPrice": 400,
+ "maxPrice": 600,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E
+ ]
+ },
+ {
+ "numberOfItem": 7,
+ "minPrice": 600,
+ "maxPrice": 1000,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E
+ ]
+ }
+ ]
+}
diff --git a/src/activities/money_back/ActivityInfo.qml b/src/activities/money_back/ActivityInfo.qml
--- a/src/activities/money_back/ActivityInfo.qml
+++ b/src/activities/money_back/ActivityInfo.qml
@@ -35,6 +35,7 @@
//: Help manual
manual: qsTr("Click on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click on it on the upper screen area.")
credit: ""
- section: "math numeration money"
+ section: "math money measures"
createdInVersion: 0
+ levels: "1"
}
diff --git a/src/activities/money_back/CMakeLists.txt b/src/activities/money_back/CMakeLists.txt
--- a/src/activities/money_back/CMakeLists.txt
+++ b/src/activities/money_back/CMakeLists.txt
@@ -1 +1 @@
-GCOMPRIS_ADD_RCC(activities/money_back *.qml *.svg *.js resource/*)
+GCOMPRIS_ADD_RCC(activities/money_back *.qml *.svg *.js resource/* resource/*/*/*.qml)
diff --git a/src/activities/money_back/resource/1/Data.qml b/src/activities/money_back/resource/1/Data.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/money_back/resource/1/Data.qml
@@ -0,0 +1,190 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../../../core"
+import "../../../money/moneyConstants.js" as Constants
+
+Dataset {
+ objective: qsTr("Learn how to pay up to 100 euros including cents")
+ property var moneyItems: Constants.moneyItems
+ data: [
+ {
+ "numberOfItem": 1,
+ "minPrice": 3,
+ "maxPrice": 9,
+ "paid": 10,
+ "pocket": [
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 19,
+ "paid": 20,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 2,
+ "minPrice": 2,
+ "maxPrice": 29,
+ "paid": 30,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 2,
+ "minPrice": 2,
+ "maxPrice": 39,
+ "paid": 40,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 3,
+ "minPrice": 3,
+ "maxPrice": 49,
+ "paid": 50,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 3,
+ "minPrice": 3,
+ "maxPrice": 60,
+ "paid": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 4,
+ "maxPrice": 70,
+ "paid": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 4,
+ "maxPrice": 80,
+ "paid": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 4,
+ "maxPrice": 99,
+ "paid": 100,
+ "pocket": [
+ moneyItems.MONEY_PAPER_10E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_PAPER_50E,
+ moneyItems.MONEY_PAPER_20E,
+ moneyItems.MONEY_PAPER_5E,
+ moneyItems.MONEY_PAPER_5E
+ ]
+ }
+ ]
+}
diff --git a/src/activities/money_back_cents/ActivityInfo.qml b/src/activities/money_back_cents/ActivityInfo.qml
--- a/src/activities/money_back_cents/ActivityInfo.qml
+++ b/src/activities/money_back_cents/ActivityInfo.qml
@@ -35,6 +35,7 @@
//: Help manual
manual: qsTr("Click on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click on it on the upper screen area.")
credit: ""
- section: "math numeration money"
+ section: "math money measures"
createdInVersion: 0
+ levels: "1"
}
diff --git a/src/activities/money_back_cents/CMakeLists.txt b/src/activities/money_back_cents/CMakeLists.txt
--- a/src/activities/money_back_cents/CMakeLists.txt
+++ b/src/activities/money_back_cents/CMakeLists.txt
@@ -1 +1 @@
-GCOMPRIS_ADD_RCC(activities/money_back_cents *.qml *.svg *.js resource/*)
+GCOMPRIS_ADD_RCC(activities/money_back_cents *.qml *.svg *.js resource/* resource/*/*/*.qml)
diff --git a/src/activities/money_back_cents/resource/1/Data.qml b/src/activities/money_back_cents/resource/1/Data.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/money_back_cents/resource/1/Data.qml
@@ -0,0 +1,121 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../../../core"
+import "../../../money/moneyConstants.js" as Constants
+
+Dataset {
+ objective: qsTr("Learn how to pay up to 10 euros giving back the change")
+ property var moneyItems: Constants.moneyItems
+ data: [
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "paid": 5,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "paid": 5,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ },
+ {
+ "numberOfItem": 2,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "paid": 5,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ },
+ {
+ "numberOfItem": 3,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "paid": 5,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 0,
+ "maxPrice": 4,
+ "paid": 5,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ }
+ ]
+}
diff --git a/src/activities/money_cents/ActivityInfo.qml b/src/activities/money_cents/ActivityInfo.qml
--- a/src/activities/money_cents/ActivityInfo.qml
+++ b/src/activities/money_cents/ActivityInfo.qml
@@ -35,6 +35,7 @@
//: Help manual
manual: qsTr("Click on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click on it on the upper screen area.")
credit: ""
- section: "math numeration money"
+ section: "math money measures"
createdInVersion: 0
+ levels: "1"
}
diff --git a/src/activities/money_cents/CMakeLists.txt b/src/activities/money_cents/CMakeLists.txt
--- a/src/activities/money_cents/CMakeLists.txt
+++ b/src/activities/money_cents/CMakeLists.txt
@@ -1 +1 @@
-GCOMPRIS_ADD_RCC(activities/money_cents *.qml *.svg *.js resource/*)
+GCOMPRIS_ADD_RCC(activities/money_cents *.qml *.svg *.js resource/* resource/*/*/*.qml)
diff --git a/src/activities/money_cents/resource/1/Data.qml b/src/activities/money_cents/resource/1/Data.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/money_cents/resource/1/Data.qml
@@ -0,0 +1,117 @@
+/* GCompris - Data.qml
+ *
+ * Copyright (C) 2019 Akshay Kumar
+ *
+ * Authors:
+ * Akshay Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../../../core"
+import "../../../money/moneyConstants.js" as Constants
+
+
+Dataset {
+ objective: qsTr("Learn how to pay up to 10 euros giving back the change, including cents")
+ property var moneyItems: Constants.moneyItems
+ data: [
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C,
+ ]
+ },
+ {
+ "numberOfItem": 1,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ },
+ {
+ "numberOfItem": 2,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C,
+ ]
+ },
+ {
+ "numberOfItem": 3,
+ "minPrice": 1,
+ "maxPrice": 3,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C
+ ]
+ },
+ {
+ "numberOfItem": 4,
+ "minPrice": 0,
+ "maxPrice": 4,
+ "pocket": [
+ moneyItems.MONEY_COIN_2E,
+ moneyItems.MONEY_COIN_1E,
+ moneyItems.MONEY_COIN_5C,
+ moneyItems.MONEY_COIN_2C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_50C,
+ moneyItems.MONEY_COIN_20C,
+ moneyItems.MONEY_COIN_10C,
+ moneyItems.MONEY_COIN_1C,
+ moneyItems.MONEY_COIN_1C,
+ ]
+ }
+ ]
+}
diff --git a/src/activities/mosaic/ActivityInfo.qml b/src/activities/mosaic/ActivityInfo.qml
--- a/src/activities/mosaic/ActivityInfo.qml
+++ b/src/activities/mosaic/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("First select the item you want to put then click on a spot on the empty area")
credit: ""
- section: "discovery"
+ section: "puzzle"
createdInVersion: 0
}
diff --git a/src/activities/note_names/ActivityInfo.qml b/src/activities/note_names/ActivityInfo.qml
--- a/src/activities/note_names/ActivityInfo.qml
+++ b/src/activities/note_names/ActivityInfo.qml
@@ -38,6 +38,6 @@
//: Help manual
manual: qsTr("Identify the notes correctly and score a 100% to complete a level.")
credit: ""
- section: "discovery sound"
+ section: "discovery music"
createdInVersion: 9500
}
diff --git a/src/activities/numbers-odd-even/NumbersOddEven.qml b/src/activities/numbers-odd-even/NumbersOddEven.qml
--- a/src/activities/numbers-odd-even/NumbersOddEven.qml
+++ b/src/activities/numbers-odd-even/NumbersOddEven.qml
@@ -21,6 +21,8 @@
Planegame {
+ showTutorial: true
+
dataset: [
{
data: "0 2 4 6 8 10 12 14 16 18 20".split(" "),
@@ -39,4 +41,42 @@
showNext: false
}
]
+
+ tutorialInstructions: [
+ {
+ "instruction": qsTr("This activity teaches about even and odd numbers."),
+ "instructionQml": ""
+ },
+ {
+ "instruction": qsTr("Even numbers are numbers which leave remainder 0 when divided by 2."),
+ "instructionQml": ""
+ },
+
+ {
+ "instruction": qsTr("What is meant by remainder of a number?"),
+ "instructionQml" : "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial1.qml"
+ },
+
+ {
+ "instruction": qsTr("Even numbers are numbers which leave remainder 0 when divided by 2."),
+ "instructionQml" : "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial2.qml"
+ },
+ {
+ "instruction": qsTr("Odd numbers are numbers which do not leave remainder 0 when divided by 2."),
+ "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial3.qml"
+ },
+ {
+ "instruction": qsTr("Exercise to test your understanding."),
+ "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial4.qml"
+ },
+ {
+ "instruction": qsTr("Exercise to test your understanding."),
+ "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial5.qml"
+ },
+ {
+ "instruction": qsTr("Exercise to test your understanding."),
+ "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial6.qml"
+ }
+
+ ]
}
diff --git a/src/activities/numbers-odd-even/resource/Tutorial1.qml b/src/activities/numbers-odd-even/resource/Tutorial1.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/Tutorial1.qml
@@ -0,0 +1,45 @@
+/* GCompris - Tutorial1.qml
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "../../../core"
+
+Rectangle {
+ id: tutorialRectangle
+ anchors.fill: parent
+ color: "#80FFFFFF"
+
+ GCText {
+ id: remainder
+ text: qsTr("The remainder is the amount \"left over\" after dividing the given number with the other number.\n If 6 is divided by 2 the result is 3 and the remainder is 0.\n If 7 is divided by 2 the result is 3 and the remainder is 1.")
+ fontSizeMode: Text.Fit
+ fontSize: mediumSize
+ anchors.left: tutorialRectangle.left
+ anchors.leftMargin: parent.height * 0.01
+ color: "black"
+ horizontalAlignment: Text.AlignLeft
+ width: parent.width
+ height: parent.height
+ wrapMode: Text.WordWrap
+ z: 2
+ }
+}
diff --git a/src/activities/numbers-odd-even/resource/Tutorial2.qml b/src/activities/numbers-odd-even/resource/Tutorial2.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/Tutorial2.qml
@@ -0,0 +1,45 @@
+/* GCompris - Tutorial2.qml
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "../../../core"
+
+Rectangle {
+ id: tutorialRectangle
+ anchors.fill: parent
+ color: "#80FFFFFF"
+
+ GCText {
+ id: even
+ text: qsTr("For example: 12, 38, 52, 68, 102, 118, 168, 188, 502, 532, 700, 798, 842, 892, 1000. All of these numbers are even numbers as they leave remainder 0 when divided by 2.")
+ fontSizeMode: Text.Fit
+ fontSize: mediumSize
+ anchors.left: tutorialRectangle.left
+ anchors.leftMargin: parent.height * 0.01
+ color: "black"
+ horizontalAlignment: Text.AlignLeft
+ width: parent.width
+ height: parent.height
+ wrapMode: Text.WordWrap
+ z: 2
+ }
+}
diff --git a/src/activities/numbers-odd-even/resource/Tutorial3.qml b/src/activities/numbers-odd-even/resource/Tutorial3.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/Tutorial3.qml
@@ -0,0 +1,45 @@
+/* GCompris - Tutorial3.qml
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "../../../core"
+
+Rectangle {
+ id: tutorialRectangle
+ anchors.fill: parent
+ color: "#80FFFFFF"
+
+ GCText {
+ id: odd
+ text: qsTr("For example: 15, 19, 51, 65, 103, 119, 169, 185, 505, 533, 701, 799, 845, 897, 1001. All of these numbers are odd numbers as they do not leave remainder 0 when divided by 2.")
+ fontSizeMode: Text.Fit
+ fontSize: mediumSize
+ anchors.left: tutorialRectangle.left
+ anchors.leftMargin: parent.height * 0.01
+ color: "black"
+ horizontalAlignment: Text.AlignLeft
+ width: parent.width
+ height: parent.height
+ wrapMode: Text.WordWrap
+ z: 2
+ }
+}
diff --git a/src/activities/numbers-odd-even/resource/Tutorial4.qml b/src/activities/numbers-odd-even/resource/Tutorial4.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/Tutorial4.qml
@@ -0,0 +1,31 @@
+/* GCompris - Tutorial4.qml
+
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "../../../core"
+
+TutorialBase {
+
+ firstNumber: "2"
+ secondNumber: "5"
+}
diff --git a/src/activities/numbers-odd-even/resource/Tutorial5.qml b/src/activities/numbers-odd-even/resource/Tutorial5.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/Tutorial5.qml
@@ -0,0 +1,32 @@
+/* GCompris - Tutorial5.qml
+
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "../../../core"
+
+TutorialBase {
+
+ isEvenExpected: false
+ firstNumber: "59"
+ secondNumber: "52"
+}
diff --git a/src/activities/numbers-odd-even/resource/Tutorial6.qml b/src/activities/numbers-odd-even/resource/Tutorial6.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/Tutorial6.qml
@@ -0,0 +1,30 @@
+/* GCompris - Tutorial6.qml
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "../../../core"
+
+TutorialBase {
+
+ firstNumber: "111"
+ secondNumber: "108"
+}
diff --git a/src/activities/numbers-odd-even/resource/TutorialBase.qml b/src/activities/numbers-odd-even/resource/TutorialBase.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/numbers-odd-even/resource/TutorialBase.qml
@@ -0,0 +1,147 @@
+/* GCompris - TutorialBase.qml
+ *
+ * Copyright (C) 2019 Deepak Kumar
+ *
+ * Authors:
+ * Deepak Kumar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import "../../../core"
+
+Rectangle {
+ id: tutorialRectangle
+ anchors.fill: parent
+ color: "#80FFFFFF"
+ property alias firstNumber: firstNumber.textLabel
+ property alias secondNumber: secondNumber.textLabel
+ property alias message: message.text
+ property bool isEvenExpected: true
+
+ GCText {
+ id: question
+ anchors {
+ left: parent.left
+ verticalCenter: parent.verticalCenter
+ leftMargin: parent.height * 0.1
+ centerIn: parent.Center
+ top: parent.top
+ topMargin: parent.height * 0.05
+ }
+ text: isEvenExpected ? qsTr("Choose the even number:") : qsTr("Choose the odd number:")
+ fontSize: mediumSize
+ color: "black"
+ horizontalAlignment: Text.AlignLeft
+ width: 1.8 * parent.width
+ height: 1.8 * parent.height
+ wrapMode: Text.WordWrap
+ z: 2
+ }
+
+ AnswerButton {
+ id: firstNumber
+ textLabel: ""
+ anchors {
+ top: parent.top
+ topMargin: parent.height * 0.3
+ left: parent.left
+ leftMargin: parent.width * 0.2
+ }
+ width: parent.width * 0.2
+ height: parent.height * 0.4
+ isCorrectAnswer: (isEvenExpected && Number(textLabel) % 2 === 0) ||
+ (!isEvenExpected && Number(textLabel) % 2 !== 0)
+ onPressed: {
+ if(isCorrectAnswer) {
+ message.text = qsTr("Great")
+ }
+ else {
+ if(isEvenExpected) {
+ message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 1. Therefore this is an odd number.").arg(textLabel)
+ }
+ else {
+ message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 0. Therefore this is an even number.").arg(textLabel)
+ }
+ }
+ message.visible = true
+ messageRectangle.visible = true
+ }
+ }
+
+ AnswerButton {
+ id: secondNumber
+ textLabel: ""
+ anchors {
+ top: parent.top
+ topMargin: parent.height * 0.3
+ left: parent.left
+ leftMargin: parent.width * 0.65
+ }
+ width: parent.width * 0.2
+ height: parent.height * 0.4
+ isCorrectAnswer: (isEvenExpected && Number(textLabel) % 2 === 0) ||
+ (!isEvenExpected && Number(textLabel) % 2 !== 0)
+ onPressed: {
+ if(isCorrectAnswer) {
+ message.text = qsTr("Great")
+ }
+ else {
+ if(isEvenExpected) {
+ message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 1. Therefore this is an odd number.").arg(textLabel)
+ }
+ else {
+ message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 0. Therefore this is an even number.").arg(textLabel)
+ }
+ }
+ message.visible = true
+ messageRectangle.visible = true
+ }
+ }
+
+ Rectangle {
+ id: messageRectangle
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ top: parent.top
+ topMargin: parent.height * 0.75
+ }
+ opacity: 0.8
+ radius: 10
+ border.width: 6
+ color: "white"
+ border.color: "#87A6DD"
+ width: parent.width * 1.15
+ height: parent.height * 0.4
+ visible: false
+
+ GCText {
+ id: message
+ anchors {
+ centerIn: parent
+ margins: parent.border.width+1
+ }
+ text: ""
+ fontSizeMode: Text.Fit
+ fontSize: smallSize
+ color: "black"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ width: parent.width
+ height: parent.height
+ wrapMode: Text.WordWrap
+ z: 2
+ }
+ }
+}
diff --git a/src/activities/paintings/ActivityInfo.qml b/src/activities/paintings/ActivityInfo.qml
--- a/src/activities/paintings/ActivityInfo.qml
+++ b/src/activities/paintings/ActivityInfo.qml
@@ -39,6 +39,6 @@
prerequisite: qsTr("Mouse-manipulation: movement, drag and drop")
//: Help manual
manual: qsTr("Drag the image parts from the box on the left to create a painting on the main board.")
- section: "puzzle"
+ section: "discovery arts puzzle"
createdInVersion: 5000
}
diff --git a/src/activities/photo_hunter/ActivityInfo.qml b/src/activities/photo_hunter/ActivityInfo.qml
--- a/src/activities/photo_hunter/ActivityInfo.qml
+++ b/src/activities/photo_hunter/ActivityInfo.qml
@@ -35,6 +35,6 @@
//: Help manual
manual: qsTr("Observe the two pictures carefully. There are some slight differences. When you find a difference you must click on it.")
credit: ""
- section: "puzzle"
+ section: "fun"
createdInVersion: 6000
}
diff --git a/src/activities/piano_composition/ActivityInfo.qml b/src/activities/piano_composition/ActivityInfo.qml
--- a/src/activities/piano_composition/ActivityInfo.qml
+++ b/src/activities/piano_composition/ActivityInfo.qml
@@ -53,6 +53,6 @@
- F1 to F5: Corresponding black keys in the order on the displayed octave.
")
credit: qsTr("The synthesizer original code is https://github.com/vsr83/miniSynth")
- section: "discovery sound_group"
+ section: "discovery music"
createdInVersion: 9500
}
diff --git a/src/activities/planegame/Planegame.qml b/src/activities/planegame/Planegame.qml
--- a/src/activities/planegame/Planegame.qml
+++ b/src/activities/planegame/Planegame.qml
@@ -36,6 +36,8 @@
Keys.onReleased: Activity.processReleasedKey(event)
property var dataset
+ property var tutorialInstructions
+ property bool showTutorial: false
property int oldWidth: width
onWidthChanged: {
@@ -60,9 +62,10 @@
sourceSize.width: parent.width
Component.onCompleted: {
- activity.start.connect(start)
- activity.stop.connect(stop)
+ activity.start.connect(start)
+ activity.stop.connect(stop)
}
+
QtObject {
id: items
property alias background: background
@@ -74,9 +77,38 @@
property GCSfx audioEffects: activity.audioEffects
property alias movePlaneTimer: movePlaneTimer
property alias cloudCreation: cloudCreation
+ property bool showTutorial: activity.showTutorial
+ }
+
+ onStart: { Activity.start(items, dataset) }
+ onStop: { Activity.stop() }
+
+ //Tutorial section starts
+ Loader {
+ active: showTutorial
+ anchors.fill: parent
+ z: 1
+ sourceComponent: tutorialComponent
+ Component {
+ id: tutorialComponent
+ Image {
+ id: tutorialImage
+ source: "../digital_electricity/resource/texture01.png"
+ anchors.fill: parent
+ fillMode: Image.Tile
+ Tutorial {
+ id: tutorialSection
+ tutorialDetails: tutorialInstructions
+ useImage: false
+ onSkipPressed: {
+ showTutorial = false
+ Activity.initLevel()
+ }
+ }
+ }
+ }
}
- onStart: Activity.start(items, dataset)
- onStop: Activity.stop();
+ // Tutorial section ends
MultiPointTouchArea {
anchors.fill: parent
@@ -95,7 +127,7 @@
Bar {
id: bar
- content: BarEnumContent { value: help | home | level }
+ content: BarEnumContent { value: items.showTutorial ? (help | home) : (help | home | level) }
onHelpClicked: displayDialog(dialogHelp)
onPreviousLevelClicked: Activity.previousLevel()
onNextLevelClicked: Activity.nextLevel()
@@ -109,7 +141,7 @@
Score {
id: score
- visible: false
+ visible: !showTutorial
fontSize: background.width >= background.height ? internalTextComponent.largeSize : internalTextComponent.mediumSize
height: internalTextComponent.height + 10
anchors.bottom: bar.top
@@ -143,6 +175,7 @@
Plane {
id: plane
+ visible: !showTutorial
background: background
}
diff --git a/src/activities/planegame/planegame.js b/src/activities/planegame/planegame.js
--- a/src/activities/planegame/planegame.js
+++ b/src/activities/planegame/planegame.js
@@ -52,7 +52,9 @@
dataset = dataset_
numberOfLevel = dataset.length
currentLevel = 0
- initLevel()
+ if(items.showTutorial === false) {
+ initLevel()
+ }
}
function stop() {
@@ -80,8 +82,8 @@
items.movePlaneTimer.stop();
items.cloudCreation.stop()
- items.score.visible = dataset[currentLevel].showNext
items.score.message = dataset[currentLevel].data[currentSubLevel]
+ items.score.visible = dataset[currentLevel].showNext
upPressed = false
downPressed = false
@@ -96,7 +98,8 @@
items.movePlaneTimer.interval = 1000
items.movePlaneTimer.start();
items.cloudCreation.start()
- // Inject the first cloud now
+
+ //Inject the first cloud now
createCloud()
}
@@ -104,7 +107,6 @@
if(numberOfLevel <= ++currentLevel) {
currentLevel = 0
}
-
initLevel();
}
diff --git a/src/activities/play_piano/ActivityInfo.qml b/src/activities/play_piano/ActivityInfo.qml
--- a/src/activities/play_piano/ActivityInfo.qml
+++ b/src/activities/play_piano/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("The notes you see will be played to you. Click on the corresponding keys on the keyboard that match the notes you hear and see. Levels 1-5 will offer treble clef to practice and levels 6-10 will offer bass clef.")
credit: qsTr("The synthesizer original code is https://github.com/vsr83/miniSynth")
- section: "discovery sound_group"
+ section: "discovery music"
createdInVersion: 9500
}
diff --git a/src/activities/play_rhythm/ActivityInfo.qml b/src/activities/play_rhythm/ActivityInfo.qml
--- a/src/activities/play_rhythm/ActivityInfo.qml
+++ b/src/activities/play_rhythm/ActivityInfo.qml
@@ -39,6 +39,6 @@
//: Help manual
manual: qsTr("Listen to the rhythm played, and follow along with the music. When you're ready to perform the identical rhythm, click the drum to the rhythm. If you clicked tempo at correct times, another rhythm is displayed. If not, you must try again. Odd levels display a vertical playing line when you click the drum, which helps you see when to click, to follow the rhythm. Click on the drum when the line is in the middle of the notes. Even levels are harder, because there is no vertical playing line. You must read the rhythm, and click it back in tempo. Click the metronome to hear the quarter note tempos. Click on the reload button to replay the rhythm.")
credit: ""
- section: "discovery sound_group"
+ section: "discovery music"
createdInVersion: 9500
}
diff --git a/src/activities/programmingMaze/ActivityInfo.qml b/src/activities/programmingMaze/ActivityInfo.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/ActivityInfo.qml
@@ -0,0 +1,59 @@
+/* GCompris - ActivityInfo.qml
+ *
+ * Copyright (C) 2015 Siddhesh Suthar
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import GCompris 1.0
+
+ActivityInfo {
+ name: "programmingMaze/ProgrammingMaze.qml"
+ difficulty: 3
+ icon: "programmingMaze/programmingMaze.svg"
+ author: "Aman Kumar Gupta <gupta2140@gmail.com>"
+ demo: false
+ //: Activity title
+ title: qsTr("Programming Maze")
+ //: Help title
+ description: qsTr("This activity teaches the kid to program the Tux to its goal using
+ simple instructions like move forward, turn left etc")
+ // intro: "Arrange the instructions and traverse the correct path to reach the fish."
+ //: Help goal
+ goal: qsTr("Tux is hungry. Help him find fish by programming him to the correct ice spot.")
+ //: Help prerequisite
+ prerequisite: qsTr("Can read instructions. Thinking of the path logically")
+ //: Help manual
+ manual: qsTr("Choose the instructions from given menu. Arrange the instruction in an
+ order so that they can make the Tux reach to his goal.
") +
+ qsTr("Keyboard Controls:
") +
+ qsTr("1. To navigate through instructions in the current code area having keyboard focus:") +
+ qsTr("
Arrow keys
") +
+ qsTr("2. To append an instruction from instruction area to the main/procedure code area:") +
+ qsTr("
Select an instruction from the instruction area by pressing SPACE.
") +
+ qsTr("
Navigate to the code areas by pressing TAB, then press SPACE to append the instruction.
") +
+ qsTr("3. To add an instruction at any particular position in the main/procedure code area:") +
+ qsTr("
Navigate to the instruction at that position and press SPACE to add the selected instruction from the instruction area.
") +
+ qsTr("4. To delete the current navigated instruction in the main/procedure code area:") +
+ qsTr("
DELETE.
") +
+ qsTr("5. To edit an instruction in the main/procedure code area:") +
+ qsTr("
Navigate to the instruction to edit using Arrow keys.
") +
+ qsTr("
Press SPACE to select it.
") +
+ qsTr("
Then navigate to the instruction area using TAB and select the new instruction by pressing SPACE.
") +
+ qsTr("6. To run the code or reset Tux when it fails to reach the fish:") +
+ qsTr("
ENTER or RETURN.
")
+ credit: ""
+ section: "fun"
+ createdInVersion: 9800
+}
diff --git a/src/activities/programmingMaze/CMakeLists.txt b/src/activities/programmingMaze/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/CMakeLists.txt
@@ -0,0 +1 @@
+GCOMPRIS_ADD_RCC(activities/programmingMaze *.qml *.svg *.js resource/*)
diff --git a/src/activities/programmingMaze/CodeArea.qml b/src/activities/programmingMaze/CodeArea.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/CodeArea.qml
@@ -0,0 +1,343 @@
+/* GCompris - CodeArea.qml
+ *
+ * Copyright (C) 2015 Siddhesh Suthar
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * Authors:
+ * Siddhesh Suthar
+ * Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+
+import "programmingMaze.js" as Activity
+
+GridView {
+ id: codeArea
+ z: 1
+ width: background.width * 0.4
+ height: background.height * 0.29
+ cellWidth: background.buttonWidth
+ cellHeight: background.buttonHeight
+
+ interactive: false
+ model: currentModel
+ clip: true
+
+ highlight: Rectangle {
+ width: buttonWidth
+ height: buttonHeight
+ color: "lightsteelblue"
+ border.width: 3.5 * ApplicationInfo.ratio
+ border.color: "purple"
+ opacity: 0.5
+ z: 11
+ radius: width / 18
+ }
+ highlightFollowsCurrentItem: true
+ highlightMoveDuration: 500
+ keyNavigationWraps: true
+ focus: true
+
+ property ListModel currentModel
+ property int draggedItemIndex: -1
+ property int possibleDropIndex: -1
+ property int possibleDropRemoveIndex: -1
+ property int xCoordinateInPossibleDrop: -1
+ property int yCoordinateInPossibleDrop: -1
+
+ /**
+ * Stores the index of the item which is clicked to edit.
+ *
+ * If the index of the item on 2nd click is same as initialEditItemIndex , then the indicator will become invisible, as it means that initially wanted to edit that instruction, but now we want to deselect it.
+ *
+ * If the index of the item on 2nd click is different from initialEditItemIndex, the edit indicator moves to the new item as we now want to edit that one.
+ */
+ property int initialEditItemIndex: -1
+
+ // Tells if any instruction is selected for editing.
+ property bool isEditingInstruction: false
+
+ signal spaceKeyPressed
+ signal tabKeyPressed
+ signal deleteKeyPressed
+
+ /**
+ * There can be three possibilities here:
+ *
+ * 1. We want to insert an instruction at the currentIndex position.
+ * 2. We want to select an instruction to edit, or deselect it.
+ * 3. We want to append an instruction.
+ */
+ onSpaceKeyPressed: {
+ if(currentIndex != -1) {
+ if(instructionArea.instructionToInsert && (items.numberOfInstructionsAdded < items.maxNumberOfInstructionsAllowed)) {
+ var isInstructionInserted = appendInstruction()
+ if(isInstructionInserted)
+ currentModel.move(currentModel.count - 1, currentIndex, 1)
+ }
+ else {
+ if((initialEditItemIndex == currentIndex) || (initialEditItemIndex == -1 && currentIndex != -1)) {
+ codeArea.isEditingInstruction = !codeArea.isEditingInstruction
+ }
+
+ if(!codeArea.isEditingInstruction)
+ codeArea.initialEditItemIndex = -1
+ else
+ initialEditItemIndex = currentIndex
+
+ var calculatedX = (initialEditItemIndex % 4) * codeArea.cellWidth
+ var calculatedY = Math.floor(initialEditItemIndex / 4) * codeArea.cellHeight
+ editInstructionIndicator.x = calculatedX + 1.5 * ApplicationInfo.ratio
+ editInstructionIndicator.y = calculatedY + 1.5 * ApplicationInfo.ratio
+ }
+ }
+ else if((items.numberOfInstructionsAdded < items.maxNumberOfInstructionsAllowed) && instructionArea.instructionToInsert)
+ appendInstruction()
+ }
+
+ onDeleteKeyPressed: {
+ if(currentIndex != -1) {
+ currentModel.remove(currentIndex)
+ items.numberOfInstructionsAdded--
+ }
+ resetEditingValues()
+ }
+
+ function appendInstruction() {
+ if(background.insertIntoMain || (instructionArea.instructionToInsert != "call-procedure")) {
+ currentModel.append({ "name": instructionArea.instructionToInsert })
+ items.numberOfInstructionsAdded++
+ instructionArea.instructionToInsert = ""
+ return true
+ }
+ return false
+ }
+
+ function resetEditingValues() {
+ initialEditItemIndex = -1
+ isEditingInstruction = false
+ }
+
+ Item {
+ id: dropPositionIndicator
+ visible: false
+ height: background.buttonHeight
+ width: 3 * ApplicationInfo.ratio
+
+ Rectangle {
+ visible: parent.visible
+ anchors.centerIn: parent
+ width: parent.width
+ height: parent.height - 3 * ApplicationInfo.ratio
+ color: "blue"
+ radius: width
+ }
+
+ states: [
+ State {
+ name: "shown"
+ when: codeArea.possibleDropIndex != -1
+ PropertyChanges {
+ target: dropPositionIndicator
+ visible: true
+ x: Math.floor(codeArea.xCoordinateInPossibleDrop / codeArea.cellWidth) *
+ codeArea.cellWidth - 1.5 * ApplicationInfo.ratio
+ y: Math.floor(codeArea.yCoordinateInPossibleDrop / codeArea.cellHeight) *
+ codeArea.cellHeight + 1.5 * ApplicationInfo.ratio
+ }
+ }
+ ]
+ }
+
+ Rectangle {
+ id: editInstructionIndicator
+ visible: codeArea.isEditingInstruction && codeArea.count != 0
+ width: background.buttonWidth - 3 * ApplicationInfo.ratio
+ height: background.buttonHeight - 3 * ApplicationInfo.ratio
+ color: "red"
+ border.color: "black"
+ border.width: 1.5 * ApplicationInfo.ratio
+ opacity: 0.2
+ radius: width / 18
+ }
+
+ MouseArea {
+ id: codeAreaMouse
+ anchors.fill: parent
+ enabled: items.isTuxMouseAreaEnabled || items.isRunCodeEnabled
+ onPressed: {
+ codeArea.draggedItemIndex = codeArea.indexAt(mouseX,mouseY)
+ if(codeArea.draggedItemIndex === -1) {
+ constraintInstruction.changeConstraintInstructionOpacity()
+ codeArea.isEditingInstruction = false
+ }
+ else if(!codeArea.isEditingInstruction)
+ codeArea.initialEditItemIndex = codeArea.draggedItemIndex
+ }
+
+ onPositionChanged: {
+ var newPos = codeArea.indexAt(mouseX, mouseY)
+ var calculatedX = Math.floor(mouseX / codeArea.cellWidth) * codeArea.cellWidth
+ var previousIndexPosition = codeArea.indexAt(calculatedX - 1, mouseY)
+
+ // If the user want to move an item to the end, then the new position will be after the last instruction.
+ if(newPos == -1 && previousIndexPosition != -1)
+ newPos = previousIndexPosition + 1
+
+ codeArea.isEditingInstruction = false
+ codeArea.xCoordinateInPossibleDrop = mouseX
+ codeArea.yCoordinateInPossibleDrop = mouseY
+ codeArea.possibleDropIndex = newPos
+ }
+
+ onReleased: {
+ if(codeArea.draggedItemIndex != -1) {
+ var draggedIndex = codeArea.draggedItemIndex
+ var dropIndex = codeArea.indexAt(mouseX,mouseY)
+ var calculatedX = Math.floor(mouseX / codeArea.cellWidth) * codeArea.cellWidth
+ var calculatedY = Math.floor(mouseY / codeArea.cellHeight) * codeArea.cellHeight
+ codeArea.draggedItemIndex = -1
+
+ if(dropIndex == -1) {
+ var previousIndexPosition = codeArea.indexAt(calculatedX - 1, mouseY)
+ if(previousIndexPosition == -1) {
+ currentModel.remove(draggedIndex)
+ items.numberOfInstructionsAdded--
+ }
+ else {
+ currentModel.append(currentModel.get(draggedIndex))
+ currentModel.remove(draggedIndex)
+ }
+ codeArea.initialEditItemIndex = -1
+ }
+ else if(draggedIndex != dropIndex) {
+ if(dropIndex <= draggedIndex) {
+ // Moving instruction from right to left
+ currentModel.move(draggedIndex, dropIndex, 1)
+ }
+ else {
+ // Moving instruction from left to right
+ currentModel.move(draggedIndex, dropIndex - 1, 1)
+ }
+ codeArea.initialEditItemIndex = -1
+ }
+ else {
+ /**
+ * If the index of the initially selected instruction (if any) is same as the currently selected instruction,
+ * deselect it for editing, else make the current instruction as the initially editable item and move the edit indicator to that position.
+ */
+ if(codeArea.initialEditItemIndex == dropIndex) {
+ codeArea.isEditingInstruction = !codeArea.isEditingInstruction
+ if(!codeArea.isEditingInstruction)
+ codeArea.initialEditItemIndex = -1
+ }
+ else
+ codeArea.initialEditItemIndex = draggedIndex
+
+ editInstructionIndicator.x = calculatedX + 1.5 * ApplicationInfo.ratio
+ editInstructionIndicator.y = calculatedY + 1.5 * ApplicationInfo.ratio
+ }
+ codeArea.possibleDropIndex = -1
+ }
+ }
+ }
+
+ delegate: Item {
+ id: itemParent
+ width: background.buttonWidth
+ height: background.buttonHeight
+
+ Rectangle {
+ id: circlePlaceholder
+ width: 30 * ApplicationInfo.ratio
+ height: width
+ radius: width
+ anchors.centerIn: parent
+ color: "#cecece"
+ opacity: 0
+ }
+
+ Item {
+ id: item
+ width: background.buttonWidth
+ height: background.buttonHeight
+ state: "inactive"
+ opacity: 1
+
+ Behavior on width { NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } }
+ Behavior on height { NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } }
+ Behavior on opacity {NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } }
+
+ states: [
+ State {
+ name: "inDrag"
+ when: index == codeArea.draggedItemIndex
+
+ PropertyChanges { target: circlePlaceholder; opacity: 1 }
+ PropertyChanges { target: item; parent: codeArea }
+ PropertyChanges { target: item; width: background.buttonWidth * 0.80 }
+ PropertyChanges { target: item; height: background.buttonHeight * 0.80 }
+ PropertyChanges { target: item; anchors.centerIn: undefined }
+ PropertyChanges { target: item; x: codeAreaMouse.mouseX - item.width / 2 }
+ PropertyChanges { target: item; y: codeAreaMouse.mouseY - item.height / 2 }
+ },
+ State {
+ name: "greyedOut"
+ when: (codeArea.draggedItemIndex != -1) && (codeArea.draggedItemIndex != index)
+
+ PropertyChanges { target: item; opacity: 0.7 }
+ },
+ State {
+ name: "inactive"
+ when: (codeArea.draggedItemIndex == -1) || (codeArea.draggedItemIndex == index)
+
+ PropertyChanges { target: item; opacity: 1.0 }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ from: "inDrag"
+ to: "*"
+ PropertyAnimation {
+ target: item
+ properties: "scale, opacity"
+ from: 0.7
+ to: 1.0
+ duration: 200
+ }
+ }
+ ]
+
+ Rectangle {
+ width: parent.width - 3 * ApplicationInfo.ratio
+ height: parent.height - 3 * ApplicationInfo.ratio
+ border.width: 1.2 * ApplicationInfo.ratio
+ border.color: "black"
+ anchors.centerIn: parent
+ radius: width / 18
+
+ Image {
+ id: codeAreaIcon
+ source: Activity.url + name + ".svg"
+ sourceSize { width: parent.width / 1.2; height: parent.height / 1.2 }
+ anchors.centerIn: parent
+ }
+ }
+ }
+ }
+}
diff --git a/src/activities/programmingMaze/Dataset.qml b/src/activities/programmingMaze/Dataset.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/Dataset.qml
@@ -0,0 +1,248 @@
+/* GCompris - Dataset.qml
+ *
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * Authors:
+ * Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+
+QtObject {
+ property var levels: [
+ // Level one
+ {
+ "map": [
+ {'x': 1, 'y': 2},
+ {'x': 2, 'y': 2},
+ {'x': 3, 'y': 2}
+ ],
+ "fish": {'x': 3, 'y': 2},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right"
+ ],
+ "maxNumberOfInstructions": 4
+ },
+ // Level two
+ {
+ "map": [
+ {'x': 1, 'y': 3},
+ {'x': 2, 'y': 3},
+ {'x': 2, 'y': 2},
+ {'x': 2, 'y': 1},
+ {'x': 3, 'y': 1}
+ ],
+ "fish": {'x': 3, 'y': 1},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right"
+ ],
+ "maxNumberOfInstructions": 8
+ },
+ // Level three
+ {
+ "map": [
+ {'x': 0, 'y': 3},
+ {'x': 0, 'y': 2},
+ {'x': 0, 'y': 1},
+ {'x': 1, 'y': 1},
+ {'x': 2, 'y': 1},
+ {'x': 3, 'y': 1},
+ {'x': 3, 'y': 2},
+ {'x': 3, 'y': 3},
+ {'x': 2, 'y': 3}
+ ],
+ "fish": {'x': 2, 'y': 3},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right"
+ ],
+ "maxNumberOfInstructions": 14
+ },
+ // Level four
+ {
+ "map": [
+ {'x': 0, 'y': 1},
+ {'x': 1, 'y': 1},
+ {'x': 1, 'y': 0},
+ {'x': 2, 'y': 0},
+ {'x': 3, 'y': 0},
+ {'x': 4, 'y': 0},
+ {'x': 1, 'y': 2},
+ {'x': 1, 'y': 3},
+ {'x': 2, 'y': 3},
+ {'x': 3, 'y': 3},
+ {'x': 4, 'y': 3},
+ {'x': 4, 'y': 2}
+ ],
+ "fish": {'x': 4, 'y': 2},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right"
+ ],
+ "maxNumberOfInstructions": 14
+ },
+ // Level five
+ {
+ "map": [
+ {'x': 0, 'y': 1},
+ {'x': 0, 'y': 0},
+ {'x': 1, 'y': 0},
+ {'x': 2, 'y': 0},
+ {'x': 3, 'y': 0},
+ {'x': 4, 'y': 0},
+ {'x': 0, 'y': 2},
+ {'x': 0, 'y': 3},
+ {'x': 1, 'y': 3},
+ {'x': 2, 'y': 3},
+ {'x': 3, 'y': 3},
+ {'x': 4, 'y': 3},
+ {'x': 2, 'y': 1},
+ {'x': 2, 'y': 2},
+ {'x': 4, 'y': 2}
+ ],
+ "fish": {'x': 4, 'y': 2},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right"
+ ],
+ "maxNumberOfInstructions": 15
+ },
+ // Level six
+ {
+ "map": [
+ {'x': 1, 'y': 1},
+ {'x': 2, 'y': 1},
+ {'x': 3, 'y': 1},
+ {'x': 3, 'y': 2},
+ {'x': 3, 'y': 3},
+ {'x': 2, 'y': 3},
+ {'x': 1, 'y': 3}
+ ],
+ "fish": {'x': 1, 'y': 3},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right",
+ "call-procedure"
+ ],
+ "maxNumberOfInstructions": 7
+ },
+ // Level seven
+ {
+ "map": [
+ {'x': 0, 'y': 3},
+ {'x': 1, 'y': 3},
+ {'x': 2, 'y': 3},
+ {'x': 2, 'y': 2},
+ {'x': 2, 'y': 1},
+ {'x': 3, 'y': 1},
+ {'x': 4, 'y': 1},
+ {'x': 4, 'y': 2},
+ {'x': 4, 'y': 3}
+ ],
+ "fish": {'x': 4, 'y': 3},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right",
+ "call-procedure"
+ ],
+ "maxNumberOfInstructions": 10
+ },
+ // Level eight
+ {
+ "map": [
+ {'x': 0, 'y': 3},
+ {'x': 1, 'y': 3},
+ {'x': 1, 'y': 2},
+ {'x': 2, 'y': 2},
+ {'x': 2, 'y': 1},
+ {'x': 3, 'y': 1},
+ {'x': 3, 'y': 0},
+ {'x': 4, 'y': 0}
+ ],
+ "fish": {'x': 4, 'y': 0},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right",
+ "call-procedure"
+ ],
+ "maxNumberOfInstructions": 12
+ },
+ // Level nine
+ {
+ "map": [
+ {'x': 1, 'y': 1},
+ {'x': 0, 'y': 0},
+ {'x': 1, 'y': 0},
+ {'x': 2, 'y': 0},
+ {'x': 2, 'y': 1},
+ {'x': 3, 'y': 0},
+ {'x': 4, 'y': 0},
+ {'x': 4, 'y': 1},
+ {'x': 4, 'y': 2},
+ {'x': 4, 'y': 3},
+ {'x': 3, 'y': 3},
+ {'x': 2, 'y': 3},
+ {'x': 1, 'y': 3},
+ {'x': 0, 'y': 3},
+ {'x': 0, 'y': 2}
+ ],
+ "fish": {'x': 0, 'y': 2},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right",
+ "call-procedure"
+ ],
+ "maxNumberOfInstructions": 14
+ },
+ // Level ten
+ {
+ "map": [
+ {'x': 0, 'y': 3},
+ {'x': 0, 'y': 2},
+ {'x': 0, 'y': 1},
+ {'x': 0, 'y': 0},
+ {'x': 1, 'y': 0},
+ {'x': 2, 'y': 0},
+ {'x': 2, 'y': 1},
+ {'x': 2, 'y': 2},
+ {'x': 2, 'y': 3},
+ {'x': 3, 'y': 3},
+ {'x': 4, 'y': 3},
+ {'x': 4, 'y': 2},
+ {'x': 4, 'y': 1},
+ {'x': 4, 'y': 0}
+ ],
+ "fish": {'x': 4, 'y': 0},
+ "instructions": [
+ "move-forward",
+ "turn-left",
+ "turn-right",
+ "call-procedure"
+ ],
+ "maxNumberOfInstructions": 15
+ }
+ ]
+}
diff --git a/src/activities/programmingMaze/HeaderArea.qml b/src/activities/programmingMaze/HeaderArea.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/HeaderArea.qml
@@ -0,0 +1,63 @@
+/* GCompris - HeaderArea.qml
+ *
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * Authors:
+ * Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../core"
+
+Rectangle {
+ id: header
+ width: background.width * 0.4
+ height: background.height / 10
+ border.width: 2 * ApplicationInfo.ratio
+ border.color: "black"
+ color: "transparent"
+
+ property real headerOpacity
+ property string headerText
+
+ signal clicked
+
+ Image {
+ width: parent.width - 2 * parent.border.width
+ height: parent.height - 2 * parent.border.width
+ anchors.centerIn: parent
+ source: "qrc:/gcompris/src/activities/guesscount/resource/backgroundW02.svg"
+ opacity: header.headerOpacity
+
+ GCText {
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ width: parent.width
+ height: parent.height
+ fontSizeMode: Font.DemiBold
+ minimumPointSize: 7
+ fontSize: mediumSize
+ wrapMode: Text.WordWrap
+ color: "white"
+ text: header.headerText
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: header.clicked()
+ }
+}
diff --git a/src/activities/programmingMaze/InstructionArea.qml b/src/activities/programmingMaze/InstructionArea.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/InstructionArea.qml
@@ -0,0 +1,182 @@
+/* GCompris - InstructionArea.qml
+ *
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * Authors:
+ * Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../core"
+
+import "programmingMaze.js" as Activity
+
+GridView {
+ id: instructionArea
+ width: parent.width * 0.5
+ height: parent.height * 0.17
+ cellWidth: background.buttonWidth
+ cellHeight: background.buttonHeight
+
+ anchors.left: parent.left
+ anchors.top: mazeModel.bottom
+ anchors.topMargin: background.height * 0.4
+
+ interactive: false
+ model: instructionModel
+
+ header: HeaderArea {
+ width: instructionArea.width
+ height: background.height / 11
+ headerOpacity: 1
+ headerText: qsTr("Choose the instructions")
+ }
+
+ property string instructionToInsert
+
+ signal spaceKeyPressed
+ signal tabKeyPressed
+
+ onSpaceKeyPressed: {
+ if(instructionArea.currentIndex != -1)
+ instructionArea.currentItem.selectCurrentInstruction()
+ }
+
+ onTabKeyPressed: {
+ instructionArea.currentIndex = -1
+ background.areaWithKeyboardInput = mainFunctionCodeArea
+ }
+
+ highlight: Rectangle {
+ width: buttonWidth - 3 * ApplicationInfo.ratio
+ height: buttonHeight * 1.18 - 3 * ApplicationInfo.ratio
+ color: "lightsteelblue"
+ border.width: 3.5 * ApplicationInfo.ratio
+ border.color: "purple"
+ z: 2
+ radius: width / 18
+ opacity: 0.6
+ visible: activity.keyboardNavigationVisible
+ }
+ highlightFollowsCurrentItem: true
+ keyNavigationWraps: true
+
+ delegate: Item {
+ id: instructionItem
+ width: background.buttonWidth
+ height: background.buttonHeight * 1.18
+
+ Rectangle {
+ id: imageHolder
+ width: parent.width - 3 * ApplicationInfo.ratio
+ height: parent.height - 3 * ApplicationInfo.ratio
+ border.width: 1.2 * ApplicationInfo.ratio
+ border.color: "black"
+ anchors.centerIn: parent
+ radius: width / 18
+
+ Image {
+ id: icon
+ source: Activity.url + name + ".svg"
+ sourceSize {
+ width: parent.width / 1.2
+ height: parent.height / 1.2
+ }
+ anchors.centerIn: parent
+ }
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ enabled: (items.isTuxMouseAreaEnabled || items.isRunCodeEnabled) && ((items.numberOfInstructionsAdded < items.maxNumberOfInstructionsAllowed) || procedureCodeArea.isEditingInstruction || mainFunctionCodeArea.isEditingInstruction)
+
+ onPressed: instructionItem.checkModelAndInsert()
+ }
+
+ function selectCurrentInstruction() {
+ if(!mainFunctionCodeArea.isEditingInstruction && !procedureCodeArea.isEditingInstruction) {
+ instructionArea.instructionToInsert = name
+ playClickedAnimation()
+ }
+ else {
+ if(mainFunctionCodeArea.isEditingInstruction)
+ insertIntoModel(mainFunctionModel, mainFunctionCodeArea)
+ if(procedureCodeArea.isEditingInstruction && (name != Activity.CALL_PROCEDURE))
+ insertIntoModel(procedureModel, procedureCodeArea)
+ }
+ }
+
+ function checkModelAndInsert() {
+ if(items.constraintInstruction.opacity)
+ items.constraintInstruction.hide()
+
+ if(!background.insertIntoMain && (name != Activity.CALL_PROCEDURE))
+ insertIntoModel(procedureModel, procedureCodeArea)
+ else if(background.insertIntoMain)
+ insertIntoModel(mainFunctionModel, mainFunctionCodeArea)
+ }
+
+ /**
+ * If we are adding an instruction, append it to the model if number of instructions added is less than the maximum number of instructions allowed.
+ * If editing, replace it with the selected instruction in the code area.
+ */
+ function insertIntoModel(model, area) {
+ if(!area.isEditingInstruction) {
+ if(items.numberOfInstructionsAdded >= items.maxNumberOfInstructionsAllowed)
+ constraintInstruction.changeConstraintInstructionOpacity()
+ else {
+ playClickedAnimation()
+ model.append({ "name": name })
+ items.numberOfInstructionsAdded++
+ }
+ }
+ else {
+ playClickedAnimation()
+ model.set(area.initialEditItemIndex, {"name": name}, 1)
+ area.resetEditingValues()
+ }
+ }
+
+ /**
+ * If two successive clicks on the same icon are made very fast, stop the ongoing animation and set the scale back to 1.
+ * Then start the animation for next click.
+ * This gives proper feedback of multiple clicks.
+ */
+ function playClickedAnimation() {
+ clickedAnimation.stop()
+ icon.scale = 1
+ clickedAnimation.start()
+ }
+
+ SequentialAnimation {
+ id: clickedAnimation
+ PropertyAnimation {
+ target: imageHolder
+ property: "scale"
+ to: 0.8
+ duration: 150
+ }
+
+ PropertyAnimation {
+ target: imageHolder
+ property: "scale"
+ to: 1
+ duration: 150
+ }
+ }
+ }
+}
diff --git a/src/activities/programmingMaze/ProgrammingMaze.qml b/src/activities/programmingMaze/ProgrammingMaze.qml
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/ProgrammingMaze.qml
@@ -0,0 +1,410 @@
+/* GCompris - ProgrammingMaze.qml
+ *
+ * Copyright (C) 2015 Siddhesh Suthar
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * Authors:
+ * Siddhesh Suthar
+ * Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+import QtQuick 2.6
+import GCompris 1.0
+import "../../core"
+
+import "programmingMaze.js" as Activity
+
+ActivityBase {
+ id: activity
+
+ onStart: focus = true
+ onStop: {}
+
+ property int oldWidth: width
+ onWidthChanged: {
+ Activity.repositionObjectsOnWidthChanged(width / oldWidth)
+ oldWidth = width
+ }
+
+ property int oldHeight: height
+ onHeightChanged: {
+ Activity.repositionObjectsOnHeightChanged(height / oldHeight)
+ oldHeight = height
+ }
+
+ property bool keyboardNavigationVisible: false
+ property string mode: "basic"
+ property string datasetUrl: "qrc:/gcompris/src/activities/programmingMaze/Dataset.qml"
+
+ pageComponent: Image {
+ id: background
+ source: "qrc:/gcompris/src/activities/programmingMaze/resource/background.svg"
+ fillMode: Image.PreserveAspectCrop
+ sourceSize.width: parent.width
+
+ signal start
+ signal stop
+
+ property bool insertIntoMain: true
+ property alias items: items
+ property int buttonWidth: background.width / 10
+ property int buttonHeight: background.height / 15.3
+
+ Component.onCompleted: {
+ activity.start.connect(start)
+ activity.stop.connect(stop)
+ }
+
+ // Add here the QML items you need to access in javascript
+ QtObject {
+ id: items
+ property Item main: activity.main
+ property alias background: background
+ property alias bar: bar
+ property alias bonus: bonus
+ property GCSfx audioEffects: activity.audioEffects
+ property alias mazeModel: mazeModel
+ property alias instructionModel: instructionModel
+ property alias mainFunctionModel: mainFunctionModel
+ property alias mainFunctionCodeArea: mainFunctionCodeArea
+ property alias procedureModel: procedureModel
+ property alias procedureCodeArea: procedureCodeArea
+ property alias instructionArea: instructionArea
+ property alias player: player
+ property alias constraintInstruction: constraintInstruction
+ property alias tutorialImage: tutorialImage
+ property alias fish: fish
+ property alias dataset: dataset
+ property bool isRunCodeEnabled: true
+ property bool isTuxMouseAreaEnabled: false
+ property bool currentLevelContainsProcedure
+ property int maxNumberOfInstructionsAllowed
+ property int numberOfInstructionsAdded
+ }
+
+ // This function catches the signal emitted after completion of movement of Tux after executing each instruction.
+ function checkSuccessAndExecuteNextInstruction() {
+ Activity.checkSuccessAndExecuteNextInstruction()
+ }
+
+ // This function catches the signal emitted after finding a dead-end in any of the executing instruction.
+ function deadEnd() {
+ Activity.deadEnd()
+ }
+
+ Loader {
+ id: dataset
+ }
+
+ onStart: { Activity.start(items, mode, datasetUrl) }
+ onStop: { Activity.stop() }
+
+ property var areaWithKeyboardInput: instructionArea
+
+ onAreaWithKeyboardInputChanged: activeCodeAreaIndicator.changeActiveCodeAreaIndicator(areaWithKeyboardInput)
+
+ Keys.enabled: items.isTuxMouseAreaEnabled || items.isRunCodeEnabled
+ Keys.onPressed: {
+ activity.keyboardNavigationVisible = true
+ if(event.key === Qt.Key_Left)
+ areaWithKeyboardInput.moveCurrentIndexLeft()
+ if(event.key === Qt.Key_Right)
+ areaWithKeyboardInput.moveCurrentIndexRight()
+ if(event.key === Qt.Key_Up)
+ areaWithKeyboardInput.moveCurrentIndexUp()
+ if(event.key === Qt.Key_Down)
+ areaWithKeyboardInput.moveCurrentIndexDown()
+ if(event.key === Qt.Key_Space)
+ areaWithKeyboardInput.spaceKeyPressed()
+ if(event.key === Qt.Key_Enter || event.key === Qt.Key_Return)
+ runCodeOrResetTux()
+ if(event.key === Qt.Key_Tab)
+ areaWithKeyboardInput.tabKeyPressed()
+ if(event.key === Qt.Key_Delete && activeCodeAreaIndicator.top != instructionArea.top) {
+ areaWithKeyboardInput.deleteKeyPressed()
+ }
+ }
+
+ function runCodeOrResetTux() {
+ if(!Activity.deadEndPoint)
+ runCodeMouseArea.executeCode()
+ else
+ Activity.initLevel()
+ }
+
+ ListModel {
+ id: instructionModel
+ }
+
+ ListModel {
+ id: mainFunctionModel
+ }
+
+ ListModel {
+ id: procedureModel
+ }
+
+ Rectangle {
+ id: constraintInstruction
+ anchors.left: parent.left
+ anchors.bottom: runCode.top
+ width: parent.width / 2.3
+ height: parent.height / 8.9
+ radius: 10
+ z: 3
+ color: "#E8E8E8" //paper white
+ border.width: 3 * ApplicationInfo.ratio
+ border.color: "#87A6DD" //light blue
+
+ Behavior on opacity { PropertyAnimation { duration: 200 } }
+
+ function changeConstraintInstructionOpacity() {
+ if(opacity)
+ constraintInstruction.hide()
+ else
+ constraintInstruction.show()
+ }
+
+ function show() {
+ if(instructionText.text)
+ opacity = 0.8
+ }
+ function hide() {
+ opacity = 0
+ }
+
+ GCText {
+ id: instructionText
+ anchors.fill: parent
+ anchors.margins: parent.border.width
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ fontSizeMode: Text.Fit
+ wrapMode: Text.WordWrap
+
+ readonly property string resetTuxInstructionText: qsTr("Click on Tux or press Enter key to reset it or RELOAD button to reload the level.")
+ readonly property string constraintInstructionText: qsTr("Reach the fish in less than %1 instructions.").arg(items.maxNumberOfInstructionsAllowed + 1)
+
+ text: items.isTuxMouseAreaEnabled ? resetTuxInstructionText : constraintInstructionText
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: constraintInstruction.changeConstraintInstructionOpacity()
+ }
+
+ Repeater {
+ id: mazeModel
+
+ anchors.left: parent.left
+ anchors.top: parent.top
+
+ Image {
+ x: modelData.x * width
+ y: modelData.y * height
+ width: background.width / 10
+ height: (background.height - background.height / 10) / 10
+ source: Activity.reverseCountUrl + "iceblock.svg"
+ }
+ }
+
+ Image {
+ id: fish
+ sourceSize.width: background.width / 12
+ source: Activity.reverseCountUrl + "blue-fish.svg"
+ }
+
+ Image {
+ id: player
+ source: "qrc:/gcompris/src/activities/maze/resource/tux_top_south.svg"
+ sourceSize.width: background.width / 12
+ z: 1
+ property int duration: 1000
+ readonly property real playerCenterX: x + width / 2
+ readonly property real playerCenterY: y + height / 2
+
+ MouseArea {
+ id: tuxMouseArea
+ anchors.fill: parent
+ enabled: items.isTuxMouseAreaEnabled
+ onClicked: {
+ Activity.initLevel()
+ }
+ }
+ }
+
+ Rectangle {
+ id: activeCodeAreaIndicator
+ opacity: 0.5
+ visible: activity.keyboardNavigationVisible
+
+ function changeActiveCodeAreaIndicator(activeArea) {
+ anchors.top = activeArea.top
+ anchors.fill = activeArea
+ }
+ }
+
+ InstructionArea {
+ id: instructionArea
+ }
+
+ HeaderArea {
+ id: mainFunctionHeader
+ headerText: qsTr("Main function")
+ headerOpacity: background.insertIntoMain ? 1 : 0.5
+ onClicked: background.insertIntoMain = true
+ anchors.top: parent.top
+ anchors.right: parent.right
+ }
+
+ CodeArea {
+ id: mainFunctionCodeArea
+ currentModel: mainFunctionModel
+ anchors.right: parent.right
+ anchors.top: mainFunctionHeader.bottom
+
+ onTabKeyPressed: {
+ mainFunctionCodeArea.currentIndex = -1
+ if(!items.currentLevelContainsProcedure) {
+ background.areaWithKeyboardInput = instructionArea
+ instructionArea.currentIndex = 0
+ }
+ else {
+ background.areaWithKeyboardInput = procedureCodeArea
+ background.insertIntoMain = false
+ }
+ }
+ }
+
+ HeaderArea {
+ id: procedureHeader
+ headerText: qsTr("Procedure")
+ headerOpacity: !background.insertIntoMain ? 1 : 0.5
+ visible: procedureCodeArea.visible
+ onClicked: background.insertIntoMain = false
+ anchors.top: mainFunctionCodeArea.bottom
+ anchors.right: parent.right
+ }
+
+ CodeArea {
+ id: procedureCodeArea
+ currentModel: procedureModel
+ anchors.right: parent.right
+ anchors.top: procedureHeader.bottom
+ visible: items.currentLevelContainsProcedure
+
+ property alias procedureIterator: procedureCodeArea.currentIndex
+
+ onTabKeyPressed: {
+ procedureCodeArea.currentIndex = -1
+ background.areaWithKeyboardInput = instructionArea
+ instructionArea.currentIndex = 0
+ background.insertIntoMain = true
+ }
+ }
+
+ Image {
+ id: runCode
+ width: background.width / 10
+ height: background.height / 10
+ anchors.right: instructionArea.right
+ anchors.bottom: bar.top
+ anchors.margins: 10 * ApplicationInfo.ratio
+
+ source:"qrc:/gcompris/src/core/resource/bar_ok.svg"
+ fillMode: Image.PreserveAspectFit
+
+ MouseArea {
+ id: runCodeMouseArea
+ anchors.fill: parent
+ hoverEnabled: ApplicationInfo.isMobile ? false : (!items.isRunCodeEnabled ? false : true)
+ enabled: items.isRunCodeEnabled
+
+ signal executeCode
+
+ onEntered: runCode.scale = 1.1
+ onExecuteCode: {
+ if(mainFunctionModel.count)
+ startCodeExecution()
+ }
+ onClicked: executeCode()
+ onExited: runCode.scale = 1
+
+ function startCodeExecution() {
+ runCodeClickAnimation.start()
+ Activity.resetCodeAreasIndices()
+
+ if(constraintInstruction.opacity)
+ constraintInstruction.hide()
+
+ Activity.runCode()
+ }
+ }
+
+ SequentialAnimation {
+ id: runCodeClickAnimation
+ NumberAnimation { target: runCode; property: "scale"; to: 0.8; duration: 100 }
+ NumberAnimation { target: runCode; property: "scale"; to: 1.0; duration: 100 }
+ }
+ }
+
+ Image {
+ id: tutorialImage
+ source: "qrc:/gcompris/src/activities/guesscount/resource/backgroundW01.svg"
+ anchors.fill: parent
+ z: 5
+ visible: true
+
+ property bool shownProcedureTutorialInstructions: false
+
+ Tutorial {
+ id:tutorialSection
+ tutorialDetails: bar.level <= 2 ? Activity.mainTutorialInstructions : Activity.procedureTutorialInstructions
+ onSkipPressed: {
+ Activity.initLevel()
+ tutorialImage.visible = false
+ tutorialNumber = 0
+ }
+ }
+ onVisibleChanged: {
+ if(tutorialImage.visible && tutorialImage.shownProcedureTutorialInstructions)
+ tutorialSection.visible = true
+ }
+ }
+
+ DialogHelp {
+ id: dialogHelp
+ onClose: home()
+ }
+
+ Bar {
+ id: bar
+ content: BarEnumContent { value: tutorialImage.visible ? help | home : help | home | level | reload }
+ onHelpClicked: {
+ displayDialog(dialogHelp)
+ }
+ onPreviousLevelClicked: Activity.previousLevel()
+ onNextLevelClicked: Activity.nextLevel()
+ onHomeClicked: activity.home()
+ onReloadClicked: Activity.reloadLevel()
+ }
+
+ Bonus {
+ id: bonus
+ Component.onCompleted: win.connect(Activity.nextLevel)
+ }
+ }
+}
diff --git a/src/activities/programmingMaze/programmingMaze.js b/src/activities/programmingMaze/programmingMaze.js
new file mode 100644
--- /dev/null
+++ b/src/activities/programmingMaze/programmingMaze.js
@@ -0,0 +1,358 @@
+/* GCompris - programmingMaze.js
+ *
+ * Copyright (C) 2015 Siddhesh Suthar
+ * Copyright (C) 2018 Aman Kumar Gupta
+ *
+ * Authors:
+ * Siddhesh Suthar
+ * Aman Kumar Gupta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+.pragma library
+.import QtQuick 2.6 as Quick
+.import GCompris 1.0 as GCompris //for ApplicationInfo
+
+// possible instructions
+var MOVE_FORWARD = "move-forward"
+var TURN_LEFT = "turn-left"
+var TURN_RIGHT = "turn-right"
+var CALL_PROCEDURE = "call-procedure"
+
+var mazeBlocks
+
+// Length of 1 step along x-axis
+var stepX
+
+// Length of 1 step along y-axis
+var stepY
+
+/**
+ * Lookup tables of instruction objects for main and procedure areas which will be stored here on creation and can be
+ * accessed when required to execute.
+ */
+var mainInstructionObjects = []
+var procedureInstructionObjects = []
+
+// New rotation of Tux on turning.
+var changedRotation
+
+// Indicates if there is a dead-end
+var deadEndPoint = false
+
+// Stores the index of mainInstructionObjects[] which is going to be processed
+var codeIterator = 0
+
+/**
+ * Stores if the reset is done only when Tux is clicked.
+ *
+ * If resetTux is true, initLevel() is called and the instruction areas are not cleared.
+ *
+ * Else, it means that initLevel() is called to reset the entire level and the instruction areas are cleared as well.
+ */
+var resetTux = false
+
+// Duration of movement of highlight in the execution area.
+var moveAnimDuration
+
+//Stores the currrent instruction which is going to be processed
+var currentInstruction
+
+var url = "qrc:/gcompris/src/activities/programmingMaze/resource/"
+var reverseCountUrl = "qrc:/gcompris/src/activities/reversecount/resource/"
+var currentLevel = 0
+var numberOfLevel
+var items
+
+var NORTH = 0
+var WEST = 90
+var SOUTH = 180
+var EAST = 270
+
+/**
+ * Stores the qml file components of all the instructions used in the activity.
+ *
+ * To add a new instruction, add its component here and add the instruction name in "instructionList" inside createInstructionObjects() along with the other instructions.
+ */
+var instructionComponents = {
+ "move-forward": Qt.createComponent(url + "instructions/MoveForward.qml"),
+ "turn-left": Qt.createComponent(url + "instructions/TurnLeftOrRight.qml"),
+ "turn-right": Qt.createComponent(url + "instructions/TurnLeftOrRight.qml"),
+ "call-procedure": Qt.createComponent(url + "instructions/Procedure.qml")
+}
+
+var mainTutorialInstructions = [
+ {
+ "instruction": qsTr("Instruction Area:" +
+ "There are 3 instructions which you have to use to code and make Tux reach the fish:" +
+ "
1. Move forward:
Moves Tux one step forward in the direction it is facing." +
+ "
2. Turn left:
Turns Tux in the left direction from where it is facing." +
+ "
3. Turn right:
Turns Tux in the right direction from where it is facing."),
+ "instructionImage": "qrc:/gcompris/src/activities/programmingMaze/resource/tutorial1.png"
+ },
+ {
+ "instruction": qsTr("Main Function:" +
+ "
-The execution of code starts here on running.
" +
+ "
-Click on any instruction in the instruction area to add them to the Main Function
" +
+ "
-The instructions will execute in order until there's none left, dead-end or Tux reaches the fish.